C语言课程设以一节课,老师提供了一个C语言的俄罗斯方块游戏让我们感受,本学期C语言课程,主要是各种语句的练习,这次是用以前的知识来感受一个实际的系统。

首先安装c-free,然后打开老师所发给我们的小程序。

界面很简单,没想到C语言还能做这么有意思的东西,真是没有想到。

分析一下程序,感觉比较太复杂的,但就是本学期学习的简单语句的组合,运用起来如此神奇。

1、首先是在屏幕上显示的语句printf

2、运用for语句建立窗口

for(i=2;i<2*Frame_width-2;i+=2)

{

gotoxy(hOut,FrameX+i,FrameY);

printf("═");         //打印上横框

}

for(i=2;i<2*Frame_width-2;i+=2)

{

gotoxy(hOut,FrameX+i,FrameY+Frame_height);

printf("═");         //打印下横框

a[FrameX+i][FrameY+Frame_height]=2;    //记住下横框有图案

}

for(i=1;i

{

gotoxy(hOut,FrameX,FrameY+i);

printf("║");         //打印左竖框

a[FrameX][FrameY+i]=2;       //记住左竖框有图案

}

for(i=1;i

{

gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);

printf("║");         //打印右竖框

a[FrameX+2*Frame_width-2][FrameY+i]=2;   //记住右竖框有图案

}

3、制作俄罗斯方块并将其进行旋转

void make_tetris(struct Tetris *tetris)

{

a[tetris->x][tetris->y]=b[0];    //中心方块位置的图形状态:1-有,0-无

switch(tetris->flag)      //共6大类,19种类型

{

case 1:         //田字方块

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x+2][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 2:         //直线方块:----

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x+2][tetris->y]=b[2];

a[tetris->x+4][tetris->y]=b[3];

break;

}

case 3:         //直线方块: |

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y-2]=b[2];

a[tetris->x][tetris->y+1]=b[3];

break;

}

case 4:         //T字方块

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x+2][tetris->y]=b[2];

a[tetris->x][tetris->y+1]=b[3];

break;

}

case 5:         //T字顺时针转90度方块

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y+1]=b[2];

a[tetris->x-2][tetris->y]=b[3];

break;

}

case 6:         //T字顺时针转180度方块

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x-2][tetris->y]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 7:         //T字顺时针转270度方块

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y+1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 8:         //Z字方块

{

a[tetris->x][tetris->y+1]=b[1];

a[tetris->x-2][tetris->y]=b[2];

a[tetris->x+2][tetris->y+1]=b[3];

break;

}

case 9:         //Z字顺时针转90度方块

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x-2][tetris->y]=b[2];

a[tetris->x-2][tetris->y+1]=b[3];

break;

}

case 10:        //Z字顺时针转180度方块

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x-2][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 11:        //Z字顺时针转270度方块

{

a[tetris->x][tetris->y+1]=b[1];

a[tetris->x+2][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 12:        //7字方块

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y+1]=b[2];

a[tetris->x-2][tetris->y-1]=b[3];

break;

}

case 13:        //7字顺时针转90度方块

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x-2][tetris->y+1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 14:        //7字顺时针转180度方块

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y+1]=b[2];

a[tetris->x+2][tetris->y+1]=b[3];

break;

}

case 15:        //7字顺时针转270度方块

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x+2][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 16:        //倒7字方块

{

a[tetris->x][tetris->y+1]=b[1];

a[tetris->x][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y-1]=b[3];

break;

}

case 17:        //倒7字顺指针转90度方块

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x-2][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 18:        //倒7字顺时针转180度方块

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y+1]=b[2];

a[tetris->x-2][tetris->y+1]=b[3];

break;

}

case 19:        //倒7字顺时针转270度方块

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x+2][tetris->y+1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

}

4、判断是否满行并删除满行的俄罗斯方块

void del_full(HANDLE hOut,struct Tetris *tetris)

{       //当某行有Frame_width-2个方块时,则满行

int k,del_count=0;  //分别用于记录某行方块的个数和删除方块的行数的变量

for(j=FrameY+Frame_height-1;j>=FrameY+1;j--)

{

k=0;

for(i=FrameX+2;i

{

if(a[i][j]==1) //竖坐标依次从下往上,横坐标依次由左至右判断是否满行

{

k++;  //记录此行方块的个数

if(k==Frame_width-2)

{

for(k=FrameX+2;k

{  //删除满行的方块

a[k][j]=0;

gotoxy(hOut,k,j);

printf("  ");

Sleep(1);

}

for(k=j-1;k>FrameY;k--)

{  //如果删除行以上的位置有方块,则先清除,再将方块下移一个位置

for(i=FrameX+2;i

{

if(a[i][k]==1)

{

a[i][k]=0;

gotoxy(hOut,i,k);

printf("  ");

a[i][k+1]=1;

gotoxy(hOut,i,k+1);

printf("□");

}

}

}

j++;   //方块下移后,重新判断删除行是否满行

del_count++; //记录删除方块的行数

}

}

}

}

tetris->score+=100*del_count; //每删除一行,得100分

if( del_count>0 && ( tetris->score%1000==0 || tetris->score/1000>tetris->level-1 ) )

{        //如果得1000分即累计删除10行,速度加快20ms并升一级

tetris->speed-=20;

tetris->level++;

}

}

5体会

1、C语言游戏程序可以看到,C语言是我们第一门编程语言,从对计算机没有任何编程能力的菜鸟,到现在能读懂C语言的程序,感觉自己在慢慢进步。

2、计算机应用系统,就是不断接收用户的输入,然后根据相应的逻辑,显示相应的内容的过程。

3、按照这个思路,我可以把程序修改成一个打飞机的游戏,控制飞机左右一定,就是我的飞机能不仅仅在下面跑,还可以到处跑,这个只要把我的飞机限制在21行的限制取消就可以了。

c语言程序设计俄罗斯方块PPT,俄罗斯方块游戏:C语言程序设计初步感受相关推荐

  1. C语言可以敲哪些小游戏,C语言可以写哪些小游戏?

    C语言可以写哪些小游戏? C语言可以编手机游戏.你叫他去死不过我这有贪吃蛇的代码,你倒可以看看(用TC编译一定过( #包括 #包括 #包括 #包括 #包括 #定义输入7181 #定义ESC 283 # ...

  2. 弹力球C语言课程设计,弹力球游戏c语言代码.docx

    弹力球游戏c语言代码 #include #include #include #include /*定义游戏级别*/#define ELEMENTARY 15 /*初级*/#define INTERME ...

  3. 弹力球c语言代码运行,弹力球游戏c语言代码

    弹力球游戏c语言代码 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 #include #include #include #inc ...

  4. c语言入门自学ppt文库,《C语言入门基础》PPT课件.ppt

    第3章C语言入门基础 在正式学习C语言之前首先要掌握C语言的基本知识 如数制 对象的命名即标识符 以及C语言中的数据类型等 通过本章的学习为以后几章打下基础 3 1标识符 在C语言中 程序的编写是运用 ...

  5. c语言程序设计中三子棋游戏,C语言实现简易版三子棋游戏

    本文实例为大家共享了C语言实现三子棋游戏的详细代码,供大家参考,详细内容如下 什么是多文件? 多数大型的工程的头文件和源文件非常多,我们也不可能把所有的代码都写在同一个文件里,这样也不方便代码的阅读与 ...

  6. c语言微课ppt嵌套函数,C语言课程中循环嵌套的微课教学设计与思考

    C语言课程中循环嵌套的微课教学设计与思考 2018-12-01 话题:教育学习,教学方法 摘 要 本文以C语言课程中循环嵌套内容为例,通过观看全国高校微课比赛获奖作品与专家点评得到启示,本科与高职的微 ...

  7. c语言课时设计猜坐标游戏,c语言小游戏课程设计报告.docx

    c语言小游戏课程设计报告 中国地质大学 本科生课程论文封面 课程名称c语言课程设计 教师姓名陈喆老师 本科生姓名周宜诺 本科生学号XX 本科生专业土地资源管理 所在院系公共管理学院 类别: 日期: 课 ...

  8. c语言课程设计走迷宫游戏,C语言课程设计-迷宫游戏.doc

    计算机技术基础课程设计 C语言 设计报告 题目:完整的二维迷宫游戏 学院:工商管理学院 专业:信息系统与信息管理 班级:050507 姓名:孙月 指导教师:张首伟 设计日期:2004年12月10日 题 ...

  9. c语言编写数据存储的游戏,c语言经典小程序和c语言编写的小游戏带注释(自动保存的).doc...

    c语言经典小程序和c语言编写的小游戏带注释(自动保存的) 1.写一个定时?关机的小程?序,可以立即关?闭计算机,也可以一段?时间后关闭?计算机. #inclu?de #inclu?de #inclu? ...

最新文章

  1. 硬核!15张图解Redis为什么这么快
  2. protoc支持c_protoc 命令参数
  3. 无向图的最小生成树(克鲁斯卡尔算法 Kruskal)
  4. 基础才是重中之重~何为原子化操作
  5. LinkedHashMap的实现原理
  6. CSDN鸿蒙社区福利:HarmonyOS Beta 版内测资格申请
  7. Xml序列化、反序列化帮助类
  8. 中级通信工程师报名-在线题库-历年真题-模拟试题
  9. STM32的串口协议
  10. 最新解决“请在微信客户端中打开链接”的教程分享
  11. 用Python实现小黑屋游戏
  12. 2022焊工(初级)考试题库及答案
  13. iPhone共享WIFI密码到Macbook - 无需在Mac上使用WIFI万能钥匙
  14. [实变函数]3.3 可测集类
  15. 12306登录python_python tcp登录注册_12306注册登录入口
  16. RGB颜色空间转LAB
  17. 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 总共多少步
  18. Android高效旋转图片的方式
  19. realsense系列(一):快速查看realsense相机深度图像和RGB图像
  20. 鸿蒙和ios流畅对比,华为鸿蒙OS与苹果iOS测试,谁更流畅,真实对比大家看一下...

热门文章

  1. 数据挖掘学习日志(part2)--主成分法确定权重与R实现
  2. Django从理论到实战(part4)--创建我们的第一个页面
  3. 关于 Angular 应用 tsconfig.json 中的 lib 属性
  4. SAP 电商云 Spartacus UI 4.1 版本的延迟加载技术介绍
  5. SAP Spartacus默认的baseSite是从源代码什么地方读取的
  6. SAP Spartacus里的concurrently依赖
  7. SAP C4C business object的UUID和可读性更好的ID
  8. SAP UI5 Web Component里如何自定义CSS style
  9. SAP UI5 return sap.ui.view的实现
  10. SAP Cloud for Customer My settings按钮被disable的原因分析