C++ 控制台 俄罗斯方块 多线程控制台输出同步问题

【控制台游戏】俄罗斯方块,根本停不下来(╯`□′)╯(┻━┻【c++吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:304,055贴子:
【控制台游戏】俄罗斯方块,根本停不下来(╯`□′)╯(┻━┻收藏
【下载地址】 见 2 楼 回 复
☆【欢迎界面】灰色块的是上次退出时的堆积情况【游戏进行时】方块自动下落的速度永远不变,且速度很慢(适合所有IQ的玩家),下方的空心方块显示的是 方块落地时到达的位置,按左右箭头移动,空格键下落一格,下箭头瞬间落底。消除时有动画效果+声音效果。【游戏GIF】但愿能动起来O__O &…
c++,博为峰软件培训免费试听,0元入学,签署就业保障协议,不就业不收费!博为峰,真正的为年轻人服务的企业,14年间培训15万余名软件工程师,成绩斐然!
源码收了,谢了
赞========================已有13年历史的top gear终于到了结束的一刻,它的辉煌永远停留在了s22 e07。13载的欢笑,13载的疯狂,都随着jc,rh,jm的离开而落下那最终的帷幕……谨以此小尾巴纪念那曾带给我们无数欢笑的top gear。  -----PS:Fuck you,BBC!————原创by:
什么写的 mfc?qt?还是api
已收   --不要玩女生的心,因为她只有一个,但是你可以玩她的咪咪,因为她有两个~
楼主代码是用什么软件敲的,c#可以适用吗
学习c++难吗?中国高端c++培训基础课程,0基础120天强力突破,成就c++牛人,现在可报名预约免费试听我们的c++课程,我们是北大青鸟!
cpp不是c++吗
完全不用多线程
课设表示要做俄罗斯方块 只会一些基本的,请问我要去学一些什么东西?如何使界面定时清屏啊?
想问楼主我学完了c++primer plus 为何还是不能完全看懂你的代码 你还学了什么才能编出这种可视化的
也是6,控制台写这个,光做界面我就得烦躁死
登录百度帐号网站已改版,请使用新地址访问:
RussiaBlock 用C++写的一个俄罗斯方块程序。涉及到各种形状类和多线程,以及队列deque,想学习的可 Static control 277万源代码下载- www.pudn.com
网站已改版,请使用新地址访问:
&文件名称: RussiaBlock
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 3716 KB
&&上传时间:
&&下载次数: 8
&&提 供 者:
&详细说明:用C++写的一个俄罗斯方块程序。涉及到各种形状类和多线程,以及队列deque,想学习的可以参考一下 :(-With C++ Written by a Russian box procedures. Category involves a variety of shapes and multithreading, as well as the queue deque, would like to study for reference: (
文件列表(日期:~)(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&RussiaBlock&&...........\Debug&&...........\GameAction.h&&...........\GameBoard.cpp&&...........\&&...........\&&...........\ISprite.h&&...........\&&...........\LSprite.h&&...........\&&...........\&&...........\OSprite.h&&...........\&&...........\PSprite.h&&...........\ReadMe.txt&&...........\res&&&&...........\...\RussiaBlock.rc2&&...........\Resource.h&&...........\RussiaBlock.aps&&...........\&&...........\&&...........\&&...........\RussiaBlock.vcproj&&...........\RussiaBlock.vcproj.TRION.leijun.user&&...........\RussiaBlock.vcproj.YUEN-002.Administrator.user&&...........\&&...........\RussiaBlockDlg.h&&...........\&&...........\&&...........\&&...........\&&...........\SSprite.h&&...........\stdafx.cpp&&...........\stdafx.h&&...........\&&...........\&&...........\TSprite.h&&...........\&&...........\ZSprite.h&&RussiaBlock.sln
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站277万海量源码库中尽情搜索:
&[] - 显示电子钟一样的数字的静态控件
&[] - 用Visual C++工具实现的很好用的静态控件
&[] - 图书管理系统论文,很好的毕业设计参考资料,大家下载
&[] - 功能十分强大的数字图像处理程序,具有基本的图像输入和变换,图形的即时绘制,彩色图像处理,图像旋转平移缩放,分离滤除RGB三原色,边缘检测与提取,频域变换(FFT,DCT),中值滤波等功能
&[] - 数据结构中,老鼠迷宫程序源码,练习堆栈的操作。
&[] - 简单的俄罗斯方块的实现,在命令行程序中使用了多线程和定时器来实现方块下落。记录学习笔记
C语言-控制台俄罗斯方块
定义了一个RandBlock[4][4]用来存方块
BlockGroup[][]用来绘制界面
#include &conio.h&
#include&iostream&
#include&time.h&
#include&windows.h&
#include &stdlib.h&
#define Level 100//初始难度;
#define Score 0//初始分数;
const int WallWide_x = 20;//墙的宽度
const int WallLength_y = 28;//墙的长度
int TempGroup[4][4];//用于旋转时存放方块
int BlockGroup[WallWide_x][WallLength_y];//定义一个数组用来显示界面,及初始化背景
int RandBlock[2][4];//定义一个数组用来存方块
int main()
void ShowFirstWindow();
void CreateBlock(int RandBlock[2][4]);//创建随机方块
void GotoXY(int, int);//设置光标位置
void PutBlockToBack();//把方块放到背景里面去
void BlockMoveDown();
void ShowGame();
//控制方块移动
void BlockMoveLeft();
void BlockMoveRight();
void BlockRotate();
void BlockMoveDownFast();
srand((unsigned(time(NULL))));//以时间作为种子产生随机数
for (int i = 0; i & WallLength_y; i++)//y坐标
BlockGroup[0][i] = 1;//初始化最左边的墙
for (int j = 1; j & WallWide_x; j++)//x坐标
if (i == 0)//初始化最上面的墙
BlockGroup[j][0] = 1;
if (i == WallLength_y - 1)//初始化最下面的墙
BlockGroup[j][WallLength_y - 1] = 1;
BlockGroup[j][i] = 0;
BlockGroup[WallWide_x - 1][i] = 1;//初始化最右边的墙
CreateBlock(RandBlock);//先产生方块
PutBlockToBack();//把方块放到背景里面去
ShowFirstWindow();//显示游戏开始界面;
GotoXY(1, 1);
while(1!=BlockGroup[9][3])//第2行值为1代表方块堆满了,游戏结束
BlockMoveDown();//方块下落
ShowGame();//判断方块能否下落,以及处理方块叠加
while(_kbhit())
char a = _getch();
case 'a':BlockMoveLeft();
case 'd':BlockMoveRight();
case 'w':BlockRotate();
GotoXY(1, 1);
Sleep(Level);
GotoXY(10, 10);//显示游戏结束
cout&&"GAME OVER!"&&
GotoXY(1, 29);
///////////////////////////////////////////////////
///////////////设置光标位置////////////////////////
///////////////////////////////////////////////////
void GotoXY(int x, int y)
c.X = x - 1;
c.Y = y - 1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
//产生随机方块
void CreateBlock(int RandBlock[2][4])
int BlockType = rand() % 5;
switch (BlockType)
RandBlock[0][0] = 0, RandBlock[0][1] = 2, RandBlock[0][2] = 2, RandBlock[0][3] = 0;
RandBlock[1][0] = 2, RandBlock[1][1] = 2, RandBlock[1][2] = 0, RandBlock[1][3] = 0;
RandBlock[0][0] = 0, RandBlock[0][1] = 2, RandBlock[0][2] = 2, RandBlock[0][3] = 0;
RandBlock[1][0] = 0, RandBlock[1][1] = 2, RandBlock[1][2] = 2, RandBlock[1][3] = 0;
RandBlock[0][0] = 0, RandBlock[0][1] = 2, RandBlock[0][2] = 0, RandBlock[0][3] = 0;
RandBlock[1][0] = 2, RandBlock[1][1] = 2, RandBlock[1][2] = 2, RandBlock[1][3] = 0;
RandBlock[0][0] = 2, RandBlock[0][1] = 0, RandBlock[0][2] = 0, RandBlock[0][3] = 0;
RandBlock[1][0] = 2, RandBlock[1][1] = 2, RandBlock[1][2] = 2, RandBlock[1][3] = 0;
RandBlock[0][0] = 2, RandBlock[0][1] = 2, RandBlock[0][2] = 2, RandBlock[0][3] = 2;
RandBlock[1][0] = 0, RandBlock[1][1] = 0, RandBlock[1][2] = 0, RandBlock[1][3] = 0;
//把产生随机方块数组中的方块放到背景中去
void PutBlockToBack()
for(int i = 0; i&2; i++)
for(int j = 0; j&4; j++)
BlockGroup[j+8][i+1] = RandBlock[i][j];
//方块向下移动
void BlockMoveDown()
for(int i = WallLength_y-1; i&0; i--)
for(int j = 0; j&WallWide_x; j++)
if(2==BlockGroup[j][i])
BlockGroup[j][i+1] = BlockGroup[j][i];
BlockGroup[j][i] = 0;
//进入游戏显示游戏界面
void ShowFirstWindow()
GotoXY(24, 6);
cout&&"俄罗斯方块";
GotoXY(24, 8);
cout&&"版本1.0";
GotoXY(24, 10);
cout&&"按enter查看游戏说明!";
system("cls");
GotoXY(24, 6);
cout&&"游戏说明";
GotoXY(24, 8);
cout&&"W:旋转方块, S:让方块直接下落, A:方块左移, D:方块右移";
GotoXY(24, 10);
cout&&"按enter进入游戏!";
system("cls");
//方块左移
void BlockMoveLeft()
for(int j = 0; j&WallLength_y; j++)
for(int i = 1; i&WallWide_x; i++)
if(2 == BlockGroup[i][j])
if(1 != BlockGroup[i-1][j])
BlockGroup[i-1][j] = BlockGroup[i][j];
BlockGroup[i][j] = 0;
//方块右移
void BlockMoveRight()
for(int j = 0; j&WallLength_y; j++)
for(int i = WallWide_x-1; i&0; i--)
if(2 == BlockGroup[i][j])
if(1 != BlockGroup[i+1][j])
BlockGroup[i+1][j] = BlockGroup[i][j];
BlockGroup[i][j] = 0;
//方块旋转
BlockRotate()
for(int j = 0; j&WallLength_y; j++)
for(int i = 0; i&WallWide_x; i++)
if(2 == BlockGroup[i][j])
for(int k = 0; k&4; k++)
for(int f = 0; f&4; f++)
TempGroup[k][f] = BlockGroup[i][j-2];
int TempBlockGroup[WallWide_x][WallLength_y];
for(int i = 0; i&WallLength_y; i++)
for(int j = 0; j&WallWide_x; j++)
TempBlockGroup[j][i] = BlockGroup[j][i];
for(i = 0; i&WallLength_y; i++)
for(int j = 0; j&WallWide_x; j++)
BlockGroup[i][j] = TempBlockGroup[j][i];
//方块快速下落
void BlockMoveDownFast()
//判断方块能否下落,以及处理方块叠加
void ShowGame()
for (int i = 0; i & WallLength_y; i++)
for(int j = 0; j&WallWide_x; j++)
if (BlockGroup[j][i] == 0)
if (BlockGroup[j][i] == 2)
if(1==BlockGroup[j][i+1] || 1==BlockGroup[j+1][i+1] || 1==BlockGroup[j+2][i+1] || 1==BlockGroup[j+3][i+1])
BlockGroup[j][i]=1;
if(2 == BlockGroup[j+1][i])
BlockGroup[j+1][i]=1;
if(2 == BlockGroup[j+2][i])
BlockGroup[j+2][i]=1;
if(2 == BlockGroup[j+3][i])
BlockGroup[j+3][i]=1;
if(2==BlockGroup[j][i-1])
BlockGroup[j][i-1]=1;
if(2==BlockGroup[j+1][i-1])
BlockGroup[j+1][i-1]=1;
if(2==BlockGroup[j+2][i-1])
BlockGroup[j+2][i-1]=1;
if(2==BlockGroup[j+3][i-1])
BlockGroup[j+3][i-1]=1;
if(2==BlockGroup[j+4][i-1])
BlockGroup[j+4][i-1]=1;
if(2==BlockGroup[j+5][i-1])
BlockGroup[j+5][i-1]=1;
cout && "█";
CreateBlock(RandBlock);//先产生方块
PutBlockToBack();//把方块放到背景里面去
cout&&"□";
cout && "█";
有诸多BUG,没有消除满行的。没有旋转的,希望哪位大神就此程序运行了帮忙指点下。
没有更多推荐了,雷速体育发帖软件开发QQ千里之行 始于足下
欢迎加入我们,一同切磋技术 &
用户名: &&&
密 码: &
共有 5379 人关注过本帖
标题:自己用五天时间写的一个控制台俄罗斯方块~~~
等 级:论坛游民
帖 子:29
专家分:40
结帖率:75%
&&已结贴√
&&问题点数:0&&回复次数:33&&&
自己用五天时间写的一个控制台俄罗斯方块~~~
只学到函数,所以写个在控制台下玩的小游戏~~~~
程序代码:#include &iostream&
#include &ctime&
#define ROW 10
#define COL 10
//-------------------------- 声明函数-----------------
void bDown();//向下走
void bleft();//向左走
void bRight();//向右走
void bBian();//变形
void cRanShape();//初始化随机方块
void arrView();//显示界面
void fenshu();//计算分数
//----------定义方块的结构------------------
struct tagShape
&&&//当前方块的横坐标
&&&//当前方块的纵坐标
&&& int rB;//随机大变化;
&&& int rS;//随机小变化;
&&& int iK//判断是否可以初始化;
&&& int iX;//方块的行数
&&& int iY;//方块的列数
&&& int iO//游戏结束
&&&//当前得分
tagShape & T_Shape = tS//定义结构引用
//------------------定义全局变量-----------------------------------------
int g_arrInfo[ROW][COL] = {0};&&//定义环境二维数组全局变量
int i = 0 , j = 0;//用于FOR循环的临时变量;
int g_arrBox[7][4][5][4] =&&//---------定义方块变化四维数组全局变量,共七次大变化,四次小变化,每次变化四四格
//---------竖条变化开始(0)----------;
&&&&&&&&{1,1,1,1},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,1,1,1},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{0,0,0,0}
//---------竖条变化结束----------;
//----------右弯变化开始(1)----------
&&&&&&&&{1,1,1,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,1,0,0},
&&&&&&&&{0,1,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{0,0,1,0},
&&&&&&&&{1,1,1,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,0,0,0}
//----------右弯变化结束----------
//-----------左弯变化开始(2)---------;
&&&&&&&&{1,1,1,0},
&&&&&&&&{0,0,1,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{0,1,0,0},
&&&&&&&&{0,1,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,1,1,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,1,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{0,0,0,0}
//----------左弯变化结束----------
//--------土变化开始(3)--------------
&&&&&&&&{1,1,1,0},
&&&&&&&&{0,1,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{0,1,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,1,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{0,1,0,0},
&&&&&&&&{1,1,1,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{0,0,0,0}
//-----------土变化结束------------
//-----------左闪变化开始(4)------------
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,1,1,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{0,1,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,1,1,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{0,1,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{1,0,0,0},
&&&&&&&&{0,0,0,0}
//-----------左闪变化结束------------
//-----------右闪变化开始(5)------------
&&&&&&&&{0,1,1,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,1,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{0,1,1,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,0,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,1,0,0},
&&&&&&&&{0,0,0,0}
//-----------右闪变化结束------------
//-----------田变化开始(6)------------
&&&&&&&&{1,1,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,1,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,1,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,0,0,0}
&&&&&&&&{1,1,0,0},
&&&&&&&&{1,1,0,0},
&&&&&&&&{0,0,0,0}
//---------结束定义方块变化四维数组全局变量-----------------------
int main()
&&& cRanShape(); //先随机一个方块&&&
&&& int iFangxiang = 0;//输入方向
&&& T_Shape.iOver = 0;//游戏结束初始化为0,为1时则结束游戏
&&& T_Shape.ifen = 0;//当前得分初始化为0
&&& enum {Left=1,Right,Down,Bianxing};
&&& while (1)
&&& {&&&&&&&&
&&&&&&&&switch (iFangxiang)
&&&&&&&&&&&&case Left:
&&&&&&&&&&&&&&& bleft();
&&&&&&&&&&&&&&&
&&&&&&&&&&&&case Right:
&&&&&&&&&&&&&&& bRight();
&&&&&&&&&&&&&&&
&&&&&&&&&&&&case Down:
&&&&&&&&&&&&&&& bDown();
&&&&&&&&&&&&&&&
&&&&&&&&&&&&case Bianxing:
&&&&&&&&&&&&&&& bBian();
&&&&&&&&&&&&&&&
&&&&&&&&}&&&&&&&&
&&&&&&&&if (T_Shape.iKey) //如果到达最后就重新生成方块,并计算得分;
&&&&&&&&&&&&fenshu();
&&&&&&&&&&&&cRanShape();&&&&&&&&&&&&
&&&&&&&&arrView();
&&&&&&&&if (T_Shape.iOver == 1)//游戏结束退出循环
&&&&&&&&&&&&cout && &-------------------------游戏结束,总得分:& && T_Shape.ifen &&&--------------------------& &&
&&&&&&&&&&&&
&&&&&&&&}&&&&&&&&
&&&&&&&&cout && &当前得分:& && T_Shape.ifen && & & && &请输入方向(1左2右3下4变形):&;
&&&&&&&&cin && iF
&&& return 0;
void cRanShape()//初始化随机方块
&&& int iCenter = COL / 2;
&&& srand( time(0) );
&&& T_Shape.rB = rand() % 7;//随机方块7次大变化
&&& T_Shape.rS = rand() % 4;//随机方块4次小变化
&&& int iTmp = 0;
&&& T_Shape.iKey = 0;//初始化0,如果为1就可以执行下次循环
&&& T_Shape.x = 0; //方块现在坐标位置的横坐标
&&& T_Shape.y = iCenter - 2; //方块现在坐标位置的纵坐标
&&& for (i = 0; i & T_Shape.iX; ++i)//游戏结束条件
&&&&&&&&for (j = 0; j & T_Shape.iY; ++j)
&&&&&&&&&&&&if (g_arrBox[T_Shape.rB][T_Shape.rS][i][j] == 1 && g_arrInfo[T_Shape.x + i][T_Shape.y + j] == 1)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& T_Shape.iOver = 1;
&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
&&& //初始化方块大小为零
&&& T_Shape.iX = 0;
&&& T_Shape.iY = 0;
&&& for (i = 0; i & 4; ++i) //方块赋值并计算方块的大小
&&&&&&&&for (j = 0; j & 4; ++j)
&&&&&&&&&&&&if (g_arrInfo[i][j + iCenter - 2] == 0)//如果空间为0则赋值
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& g_arrInfo[i][j + iCenter - 2] = g_arrBox[T_Shape.rB][T_Shape.rS][i][j];
&&&&&&&&&&&&}&&&
&&&&&&&&&&&&if (g_arrBox[T_Shape.rB][T_Shape.rS][i][j] == 1)//计算方块一行的个数
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& iTmp = 1;
&&&&&&&&&&&&}
&&&&&&&&&&&&if (g_arrBox[T_Shape.rB][T_Shape.rS][i][j] == 1 && g_arrBox[T_Shape.rB][T_Shape.rS][i + 1][j] == 0)//计算方块列数
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& T_Shape.iY += 1;
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&&&if (iTmp == 1)//只要该行有一个方块为1,则为一行,临时变量ITMP清零
&&&&&&&&&&&&T_Shape.iX += 1;
&&&&&&&&&&&&iTmp = 0;
&&& if (T_Shape.iY == 0)//如果是竖条就加一
&&&&&&&&T_Shape.iY = 1;
void arrView() //显示界面
&&& for (i = 0; i & ROW; i++)
&&&&&&&&for (j = 0; j & COL; j++)
&&&&&&&&&&&&if (g_arrInfo[i][j])
&&&&&&&&&&&&&&& cout && &■&;
&&&&&&&&&&&&else
&&&&&&&&&&&&&&& cout && &□&;
&&&&&&&&cout &&
//---------------------------向下走开始--------------------------------
void bDown()
&&& for (i = 0; i & T_Shape.iX; ++i)//先判断能不能向下走--
&&&&&&&&for (j = 0; j & T_Shape.iY; ++j)
&&&&&&&&&&&&if (g_arrBox[T_Shape.rB][T_Shape.rS][i][j] == 1 && g_arrBox[T_Shape.rB][T_Shape.rS][i + 1][j] == 0 && g_arrInfo[T_Shape.x + i + 1][T_Shape.y + j] == 1 || T_Shape.x + T_Shape.iX == ROW)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& T_Shape.iKey = 1;
&&&&&&&&&&&&}
&&& if (T_Shape.iKey == 0) //如果可以向下走就开始执行
&&&&&&&&for (i = T_Shape.x + T_Shape.iX ; i & 0 ; --i)
&&&&&&&&{&&&&&&&&
&&&&&&&&&&&&for (j = T_Shape.y; j & T_Shape.y + T_Shape.iY; ++j)
&&&&&&&&&&&&{&&&
&&&&&&&&&&&&&&& if (g_arrInfo[i][j] == 0 && g_arrInfo[i - 1][j] == 1 )
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&g_arrInfo[i][j] = 1;
&&&&&&&&&&&&&&&&&&&&g_arrInfo[i - 1][j] =0;&&&
&&&&&&&&&&&&&&& }&&&&&&&&&&&&
&&&&&&&&&&&&}
&&& T_Shape.x += 1; //往下走加一
//---------------------------向下走结束--------------------------------
//------------------------向左走开始-----------------------
void bleft()
&&& int iTmp = 0;
&&& for (i = 0; i & T_Shape.iX; ++i)//先判断能不能向左走--
&&&&&&&&for (j = 0; j & T_Shape.iY; ++j)
&&&&&&&&&&&&if (g_arrBox[T_Shape.rB][T_Shape.rS][i][j] == 1 && g_arrBox[T_Shape.rB][T_Shape.rS][i][j - 1] == 0 && g_arrInfo[T_Shape.x + i][T_Shape.y + j - 1] == 1 || T_Shape.y == 0)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& iTmp = 1;
&&&&&&&&&&&&}
&&& if (iTmp == 0)
&&&&&&&&for (i = T_Shape.x; i & T_Shape.x + T_Shape.iX; ++i)
&&&&&&&&&&&&for (j = T_Shape.y; j & T_Shape.y + T_Shape.iY; ++j)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& if (g_arrInfo[i][j - 1] == 0 && g_arrInfo[i][j] == 1)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&g_arrInfo[i][j - 1] = g_arrInfo[i][j];
&&&&&&&&&&&&&&&&&&&&g_arrInfo[i][j] = 0;
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&}
&&& T_Shape.y -= 1;
//----------------------------------------向左走结束------------------------------------------
//---------------------------向右走开始------------------------------------------
void bRight()
&&& int iTmp = 0;
&&& for (i = 0; i & T_Shape.iX; ++i)//先判断能不能向左走--
&&&&&&&&for (j = 0; j & T_Shape.iY; ++j)
&&&&&&&&&&&&if (g_arrBox[T_Shape.rB][T_Shape.rS][i][j] == 1 && g_arrBox[T_Shape.rB][T_Shape.rS][i][j + 1] == 0 && g_arrInfo[T_Shape.x + i][T_Shape.y + j + 1] == 1 || T_Shape.y + T_Shape.iY == COL)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& iTmp = 1;
&&&&&&&&&&&&}
&&& if (iTmp == 0)
&&&&&&&&for (i = T_Shape.x; i & T_Shape.x + T_Shape.iX; ++i)
&&&&&&&&&&&&for (j = T_Shape.y + T_Shape.iY; j & T_Shape.y; --j)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& if (g_arrInfo[i][j] == 0 && g_arrInfo[i][j - 1] == 1)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&g_arrInfo[i][j] = g_arrInfo[i][j - 1];
&&&&&&&&&&&&&&&&&&&&g_arrInfo[i][j - 1] = 0;
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&}
&&& T_Shape.y += 1;
//--------------向右走结束----------------------------
//-------------------------------------变形开始--------------------------------------------------------------
void bBian()
&&& for (i = 0; i & T_Shape.iX; ++i)//先清零,再计算
&&&&&&&&for (j = 0; j & T_Shape.iY; ++j)
&&&&&&&&&&&&if (g_arrBox[T_Shape.rB][T_Shape.rS][i][j] == 1 )
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& g_arrInfo[T_Shape.x + i][T_Shape.y + j] = 0;
&&&&&&&&&&&&}
&&& //-----设置一个临时变量用来判断当前环境可否变形,每变一次形就将小类加一,如果大于三自动赋零------------
&&& int iRs = T_Shape.rS;
&&& iRs += 1;
&&& if (iRs & 3)
&&&&&&&&iRs = 0;
&&& int iTmp = 0 , iOk = 0;&&&
&&& int iX = 0; //定义临时方块大小变量ix,iy,用来测当前方块可否变形
&&& int iY = 0;
&&& //--------计算方块大小开始-------------
&&& for (i = 0; i & 4; ++i)
&&&&&&&&for (j = 0; j & 4; ++j)
&&&&&&&&{&&&&&&&&&&&&
&&&&&&&&&&&&if (g_arrBox[T_Shape.rB][iRs][i][j] == 1)//计算方块行数
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& iTmp = 1;
&&&&&&&&&&&&}
&&&&&&&&&&&&if (g_arrBox[T_Shape.rB][iRs][i][j] == 1 && g_arrBox[T_Shape.rB][iRs][i + 1][j] == 0)//计算方块列数
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& iY += 1;
&&&&&&&&&&&&}&&&&&&&&&&&&
&&&&&&&&if (iTmp == 1)
&&&&&&&&&&&&iX += 1;
&&&&&&&&&&&&iTmp = 0;
&&& if (iY == 0)//如果是竖条就加一
&&&&&&&&iY = 1;
&&& //--------计算方块大小结束-------------
&&& //-----------再来计算当前状态可否变化-------------------------
&&& for (i = 0; i & iX; ++i)
&&&&&&&&for (j = 0; j & iY; ++j)
&&&&&&&&&&&&if (g_arrBox[T_Shape.rB][iRs][i][j] == 1 && g_arrInfo[T_Shape.x + i][T_Shape.y + j] == 1 || T_Shape.x + iX &= ROW || T_Shape.y + iY &= COL)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& iOk = 1;
&&&&&&&&&&&&}
&&& //-----------------计算结束-----------------------------
&&& if (iOk == 0)//达到条件就变形,否则还原
&&& {&&&&&&&&
&&&&&&&&for (i = 0; i & iX; ++i)
&&&&&&&&&&&&for (j = 0; j & iY; ++j)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& if (g_arrBox[T_Shape.rB][iRs][i][j] == 1)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&g_arrInfo[T_Shape.x + i][T_Shape.y + j] = 1;
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&}
&&&&&&&&T_Shape.rS = iRs; T_Shape.iX = iX; T_Shape.iY = iY;
&&&&&&&&for (i = 0; i & T_Shape.iX; ++i)//先清零,再计算
&&&&&&&&&&&&for (j = 0; j & T_Shape.iY; ++j)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& if (g_arrBox[T_Shape.rB][T_Shape.rS][i][j] == 1 )
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&g_arrInfo[T_Shape.x + i][T_Shape.y + j] = 1;
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&}
//--------------------计算分数开始--------------------------------------------------------------------------
void fenshu()
&&& int iTmp = 0 , iTmpFen = 1;
&&& int k,l;//临时的小变量
&&& for (i = T_Shape.x; i & T_Shape.x + T_Shape.iX; ++i)
&&&&&&&&for (j = 0; j & COL; ++j)
&&&&&&&&&&&&if (g_arrInfo[i][j] == 0)//只要该行有一个为0,则不能得分
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& iTmp = 1;
&&&&&&&&&&&&}
&&&&&&&&if (iTmp == 1)
&&&&&&&&&&&&iTmp = 0;//如果不能得分则清零重新循环
&&&&&&&&else
&&&&&&&&&&&&iTmpFen *= 2;//得分(消一行加2分,两行4分,三行8分,四行16分)
&&&&&&&&&&&&for (k = k & 0; --k)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& for (l = 0; l & COL; ++l)//去掉消行的格数
&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&g_arrInfo[k][l] = g_arrInfo[k - 1][l];&&&
&&&&&&&&&&&&&&&&&&&&g_arrInfo[k - 1][l] = 0;
&&&&&&&&&&&&&&&&&&&&//cout && k && & , & && j &&
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&}&&&&&&&&&&&&
&&&&&&&&&&&&
&&& T_Shape.ifen += iTmpF
搜索更多相关主题的帖子:
收到的鲜花
附言:好文章
来 自:郑州
等 级:版主
威 望:75
帖 子:2635
专家分:6403
想不到,方块可以这样编
从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
等 级:论坛游民
帖 子:29
专家分:40
以下是引用lonmaor在 11:59:42的发言:
想不到,方块可以这样编
那一般都是怎么编的呢???
等 级:论坛游民
帖 子:16
专家分:38
牛,但游戏性比较差,但应该可以改进
来 自:火星
等 级:职业侠客
帖 子:256
专家分:375
太猛了点儿吧!
wgua.net编程语言视频教程在线播放学习
等 级:新手上路
帖 子:12
等 级:新手上路
等 级:小飞侠
帖 子:604
专家分:2489
迭代的是人,递归的是神。
等 级:论坛游民
帖 子:24
专家分:11
等 级:论坛游侠
帖 子:36
专家分:121
版权所有,并保留所有权利。
Powered by , Processed in 0.048781 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved}

我要回帖

更多关于 c 控制台 俄罗斯方块 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信