经过了一周多的编译和测试,我的第一个游戏 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编程过程相关推荐

  1. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  2. 实例——在编程过程中进行单元测试

    这是一个真枪实弹的例子,如何在编程过程中进行单元测试. 本文以一个图书馆的书籍管理系统作为例子,讲述一个单元测试--编码的循环过程.这里只讲述一个独立画面的编写.画面的编码分两个部分,业务数据部分和界 ...

  3. php里面的socket编程,详解PHP Socket 编程过程

    详解PHP Socket 编程过程 作者:PHPYuan 时间:2019-03-13 03:41:20 概述 Socket用于进程间通信.进程间通信通常基于客户端-服务端模型.此时,客户端-服务端是可 ...

  4. 学习编程过程中-->遇到的错误

    文章目录 学习编程过程中-->遇到的错误(吕招焕) 1.java.sql.SQLException: Parameter index out of range (2 > number of ...

  5. UG编程过程中的几个小技巧

    UG编程过程中的几个小技巧 [一.UG运用小技巧] 当平移工作坐标系时经过向下按住ALT键,能够履行准确定位. 制图中,能够在线性尺度上用SHIFT-拖动来创立狭窄型尺度. 能够双击在资源条中的导航器 ...

  6. c语言错误出在花括号上,初学者在学习c语言编程过程中常出现的错误分析

    在高校经常中开设的第一科关于程序设计的语言就是C语言,这种语言有很多优势,比如说使用比较灵活,功能比较强大,可以用于编写程序.软件,但是对于初学者来说, 1 0 8 应用方法论 22第霸 0赫 6乱 ...

  7. Qt的日常编程过程中遇见的问题和使用

    Qt的日常编程过程中遇见的问题和注意 Qt的日常编程过程中遇见的问题 1.QString和String的转化的格式问题,中文转化过程中会出现问题. 2.使用qcustomplot的时候出现错误:LIN ...

  8. AOP编程过程中的JoinPoint接口

    在AOP编程过程中需要使用到的一个 JoinPoint 接口,用来获取调用的信息,下面是这个接口的代码 // // Source code recreated from a .class file b ...

  9. 编程中python怎么读-对Python新手编程过程中如何规避一些常见问题的建议

    这篇文章收集了我在Python新手开发者写的代码中所见到的不规范但偶尔又很微妙的问题.本文的目的是为了帮助那些新手开发者渡过写出丑陋的Python代码的阶段.为了照顾目标读者,本文做了一些简化(例如: ...

最新文章

  1. 深度学习在推荐系统上的应用
  2. window.showModalDialog
  3. sftp取代ftp的之后的权限设置
  4. uwsgi的log日志中出现错误uWSGI listen queue of socket 4 full。
  5. TCP/IP及内核参数优化调优(转:https://www.cnblogs.com/jking10/p/5472386.html)
  6. 笨人可以学计算机吗,为什么有的笨人一旦开窍,其人生就像开了挂似的呢?
  7. Visual Studio 2015 前瞻 属性初始化赋值!
  8. ikbc机械键盘打字出现重复_超小无线机械键盘,绝佳移动打字体验
  9. python定时爬虫_python 每天如何定时启动爬虫任务(实现方法分享)
  10. 解除ASP.net上传文件大小的限制
  11. rpm 完全卸载mysql
  12. 双十一报告:服饰企业借助团队管理工具飞项高效协作
  13. NLP中文句子类型判别和分类实现
  14. 牛客(基础位运算)起床困难症
  15. 超声波清洗机对人体有辐射,有伤害吗?
  16. 小提琴1234567位置图解_1秒找到小提琴上的每个调音阶
  17. 在设备后台安装CAB而不让用户发觉
  18. TS基础-----------get新技能
  19. 【KVM相关】kvm虚拟化部署配置
  20. Ubuntu设置桌面背景

热门文章

  1. Problem B. 涮羊肉
  2. mac 下安装 Crypto
  3. 全球与中国密封轻触开关市场现状及未来发展趋势
  4. 最容易上手,也最有用的炒股绝招-3年翻N倍!!
  5. ffmpeg——压缩mav格式音频
  6. 多WAN路由器配置 实现简述
  7. uni-app提交表单成功之后跳转首页
  8. jax指标的用法_股票指标参数用法.doc
  9. 自动杀死yarn 中运行的程序
  10. ccf-csp 2013-2015题目总结