Tetris game编程过程
来源:互联网 发布:三个矩阵分配律 编辑:程序博客网 时间:2024/05/23 11:45
经过了一周多的编译和测试,我的第一个游戏 Tetris终于完成了。程序还很幼稚。
首先说一下此程序的设计思路和运行方式,代码会附加在后文。思路上采用分块编写,分块测试,从简单到复杂的填充式方法。首先,把俄罗斯方块要实现的功能分成单独的部分,分别测试,1.游戏启动2.边框3.四格图案4.下降方式 5.旋转6.左右控制7下降悬停8行满总体下移。
游戏启动还是通过传统的enter载入。而边框则运用二维数组赋值的办法,把目标图案加载到数组里面形成边框。而四格图案的控制则成了瓶颈,经过讨论,决定用坐标法来控制四格图案的位置。而这5种四格图案采用分别赋值坐标的方式。接下来下降的方法则采用由1变0和由0变1的方式来处理,通过循环对每一行的处理成功让其下降。关于旋转由于时间太短没能实现,非常遗憾。日后会再加入这个功能。6.7.8依然采用变换0和1的方法变换不加赘述。
运行方式和俄罗斯方块运行方式一样,左右控制略有区别。A和d键分别控制左右。
接下来说一说当中遇到的问题及解决的过程(可略过):
在实现自由下降后发现一个问题,下降之后总会跑出边框外。这点让我很头疼,后来经过讨论,采用“遇1”停止运行的方式成功避免上诉问题,并且得到启发实现了“悬停”功能。编译后期方块下降时还不能“自由”,熟知的getch()函数已经不能解决问题,然后学长教给我kbhit()的用法,经过调整终于实现“自由”下降。
这次项目学到了很多,也体会到合作的重要性.希望今后会有更大的提高.
总结的不好,程序也很幼稚,欢迎审阅人及读者批评指正。下面是运行代码:#include<iostream>
using namespace std;
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
int date[20][20],i,j,fill,slow;
for(i=0;i<20;i++)
{
date[0][i]=1;
date[19][i]=1;
date[i][0]=1;
date[i][19]=1;
}
//边框赋值用的
int choice,ch,a,b,c,d,e,f,g,h,n=6; //一个图形 四个块坐标
step:choice=n%5;
switch(choice)
{
case 1:a=1;b=9;c=1;d=10;e=1;f=11;g=1;h=12;n++;;break;
case 2:a=1;b=10;c=1;d=11;e=2;f=10;g=2;h=11;n++;;break;
case 3:a=1;b=10;c=2;d=10;e=3;f=10;g=3;h=11;n++;break;
case 4:a=1;b=11;c=2;d=10;e=2;f=11;g=2;h=12;n++;break;
case 0: a=1;b=9;c=2;d=9;e=2;f=10;g=3;h=10;n++;break;
default :;
}
char Direct;
date[a][b]=1; //块的真假 真为有块
date[c][d]=1;
date[e][f]=1;
date[g][h]=1;
while(1)
{
if( kbhit() )
{
ch=getch();
if(ch=='a'&&b!=1) //左移
{
date[a][b]=0;
date[c][d]=0; //先消除
date[e][f]=0;
date[g][h]=0;
date[a][--b]=1;
date[c][--d]=1; //再赋值1
date[e][--f]=1;
date[g][--h]=1;
}
if(ch=='d'&&h!=18) //向右移 同理
{
date[a][b]=0;
date[c][d]=0;
date[e][f]=0;
date[g][h]=0;
date[a][++b]=1;
date[c][++d]=1;
date[e][++f]=1;
date[g][++h]=1;
}
}
switch(choice)
{
case 1:if((date[a+1][b]!=1)&&(date[c+1][d]!=1)&&(date[e+1][f]!=1)&&(date[g+1][h]!=1))
{ date[a][b]=0; //自由下降
date[c][d]=0;
date[e][f]=0;
date[g][h]=0;
date[++a][b]=1;
date[++c][d]=1;
date[++e][f]=1;
date[++g][h]=1;
}
break;
case 2:if((date[e+1][f]!=1)&&(date[g+1][h]!=1))
{date[a][b]=0; //自由下降
date[c][d]=0;
date[e][f]=0;
date[g][h]=0;
date[++a][b]=1;
date[++c][d]=1;
date[++e][f]=1;
date[++g][h]=1;
}
break;
case 3:if((date[e+1][f]!=1)&&(date[g+1][h]!=1))
{date[a][b]=0; //自由下降
date[c][d]=0;
date[e][f]=0;
date[g][h]=0;
date[++a][b]=1;
date[++c][d]=1;
date[++e][f]=1;
date[++g][h]=1;
}
break;
case 4:if((date[c+1][d]!=1)&&(date[e+1][f]!=1)&&(date[g+1][h]!=1))
{date[a][b]=0; //自由下降
date[c][d]=0;
date[e][f]=0;
date[g][h]=0;
date[++a][b]=1;
date[++c][d]=1;
date[++e][f]=1;
date[++g][h]=1;
}
break;
case 0:if((date[c+1][d]!=1)&&(date[g+1][h]!=1))
{ date[a][b]=0; //自由下降
date[c][d]=0;
date[e][f]=0;
date[g][h]=0;
date[++a][b]=1;
date[++c][d]=1;
date[++e][f]=1;
date[++g][h]=1;
}
break;
default :;}
switch(choice)
{
case 1:if((date[a+1][b]==1)||(date[c+1][d]==1)||(date[e+1][f]==1)||(date[g+1][h]==1))
goto step;break;
case 2:if((date[e+1][f]==1)||(date[g+1][h]==1))
goto step;break;
case 3:if((date[e+1][f]==1)||(date[g+1][h]==1))
goto step;break;
case 4:if((date[c+1][d]==1)||(date[e+1][f]==1)||(date[g+1][h]==1))
goto step;break;
case 0:if((date[c+1][d]==1)||(date[g+1][h]==1))
goto step;break;
default :;}
system("CLS");
char blank=32; //边框娃娃头
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
if(date[i][j]==1)
cout<<"■";
else
cout<<blank<<" " ;
}
cout<<endl;
}
Sleep(50);
for(i=1;i<=18;i++)
{ if(date[i][1]==1&&date[i][2]==1&&date[i][3]==1&&date[i][4]==1&&date[i][5]==1&&date[i][6]==1&&date[i][7]==1&&date[i][8]==1&&date[i][9]==1&&date[i][10]==1&&date[i][11]==1&&date[i][12]==1&&date[i][13]==1&&date[i][14]==1&&date[i][15]==1&&date[i][16]==1&&date[i][17]==1&&date[i][18]==1)
{slow=1;
date[i][1]=0;date[i][2]=0;date[i][3]=0;date[i][4]=0;date[i][5]=0;date[i][6]=0;date[i][7]=0;date[i][8]=0;date[i][9]=0;date[i][10]=0;date[i][11]=0;date[i][12]=0;date[i][13]=0;date[i][14]=0;date[i][15]=0;date[i][16]=0;date[i][17]=0;date[i][18]=0;
fill=i;
}
else
slow=0;
}
if(slow==1)
{
for(i=fill-1;i>=1;i--)
{
for(j=1;j<=18;j++)
{
date[i+1][j]=date[i][j];
date[i][j]=0;
}
}
}
}
//输出函数 娃娃头
return 0;
}
- Tetris game编程过程
- The Tetris game wxPython
- Tetris game engine TETRIS 游戏引擎
- tetris game with jQuery+CSS
- HDU1760 A New Tetris Game
- Hdu 1760 A New Tetris Game
- hdu1760 A New Tetris Game 博弈,Dfs
- HDU1760 A New Tetris Game【DFS】【博弈】
- A New Tetris Game - HDU 1760 博弈
- HDU 1760 A New Tetris Game
- hdu 1760 A New Tetris Game
- HDU 1760 A New Tetris Game
- Tetris Game / 俄罗斯方块 JavaScript/TypeScript源码
- TETRIS
- Tetris
- hdu1760 A New Tetris Game-----找sg 字符串
- 用C语言编写的 俄罗斯方块小游戏(tetris game)
- (step 8.2.12)hdu 1760(A New Tetris Game)
- Windows界面编程-背景图片、透明特效使用
- python 学习笔记 12 -- 写一个脚本获取城市天气信息
- Java内部类的使用与理解
- android之Bundle
- poj 3468 线段树区间更新维护
- Tetris game编程过程
- C语言学习笔记15
- mongoose源码分析系列一
- 版本适配中遇到的几个问题
- BPF自己写过滤包程序
- 五大浏览器兼容性
- mongoose源码分析系列之Control socket pair
- C++基础
- mongoose源码分析系列之server_data