俄罗斯方块游戏:C语言程序设计初步感受

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<Frame_height;i++)

{

gotoxy(hOut,FrameX,FrameY+i);

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

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

}

for(i=1;i<Frame_height;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<FrameX+2*Frame_width-2;i+=2)

{

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

{

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

if(k==Frame_width-2)

{

for(k=FrameX+2;k<FrameX+2*Frame_width-2;k+=2)

{  //删除满行的方块

a[k][j]=0;

gotoxy(hOut,k,j);

printf("  ");

Sleep(1);

}

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

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

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

{

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行的限制取消就可以了。

时间: 2024-10-24 15:23:20

俄罗斯方块游戏:C语言程序设计初步感受的相关文章

C语言:C语言程序设计初步

.:.:第三章:c语言程序设计初步:.:. 第三章: C语言程序设计初步 C语言程序设计 本课介绍C语言程序设计的基本方法和基本的程序语句.从程序流程的角度来看,程序可以分为三种基本结构, 即顺序结构.分支结构.循环结构. 这三种基本结构可以组成所有的各种复杂程序.C语言提供了多种语句来实现这些程序结构. 本章介绍这些基本语句及其应用,使读者对C程序有一个初步的认识, 为后面各章的学习打下基础. C程序的语句 C程序的执行部分是由语句组成的. 程序的功能也是由执行语句实现的.C语句可分为以下五类

俄罗斯方块软件:C语言应用初步感受

C语言课程设以一节课,老师提供了一个C语言的飞机游戏让我们感受,上学期C语言课程,主要是各种语句的练习,这次是用以前的知识来感受一个实际的系统. 首先安装c-free,然后运行程序. 游戏程序看似简单,但是用C语言来实现还是第一次见,感到很惊奇. 分析一下程序,感觉没有太复杂的,就是上学期学习的简单语句的组合,但是运用的非常好.首先看看用到了几种语句: 1.首先是在屏幕上显示的语句printf printf("俄罗斯方块"); gotoxy(hOut,FrameX+2*Frame_wi

关于《飞机游戏软件:C语言应用初步感受》的感想

C语言课程设计的第一节课,老师提供了一个C语言的飞机游戏让我们感受. 首先安装c-free,然后是将代码贴进去运行, 界面虽然有点简单,但是真正的游戏,C语言还能做这么有意思的东西,真是没有想到. 这是第一次认为C语言是个神奇的语言,竟然可以编写出游戏来. 用到的语句也很简单. 比如:#include<stdio.h>等,都是以前学过的知识,真的是想要好好学习一下C语言,争取自己编写个小程序出来.

飞机游戏软件:C语言应用初步感受

C语言课程设以一节课,老师提供了一个C语言的飞机游戏让我们感受,上学期C语言课程,主要是各种语句的练习,这次是用以前的知识来感受一个实际的系统. 首先安装c-free,然后是将代码贴进去运行, 界面虽然有点简单,但是真正的游戏,C语言还能做这么有意思的东西,真是没有想到. 分析一下程序,感觉没有太复杂的,就是上学期学习的简单语句的组合,但是用的非常好.首先看看用到了几种语句: 1.首先是在屏幕上显示的语句printf,有点忘记了,百度一下, http://baike.baidu.com/link

俄罗斯游戏软件:C语言应用初步感受

C语言课程设以一节课,老师提供了一个C语言的飞俄罗斯方块让我们感受,我们所学的C语言课程,主要是各种语句的练习,这次是用我们所学过的知识来感受一个实际的系统. 首先安装c-free,然后是将代码贴进去运行 界面虽然有点简单,但这确实使用C语言做出来的游戏. 分析一下程序,感觉没有太复杂的,就是上学期学习的简单语句的组合,但是用的非常好.首先看看用到了几种语句: 1.首先是在屏幕上显示的语句printf, 2.另外一个就是多条件判断switch--case 应用方法 switch(tetris->

实验1 C语言程序设计初步(写出你的第一个程序!)

15.00 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE Question 编写一个程序,输出以下信息(第一行和最后一行各有20个“*”): ******************** Very Good! ******************** Code 01 #include <stdio.h> //<stdio.h>为标准输入与输出头文件 02 int main(void) //主函数形式的辨析见下图03 {

《Java语言程序设计》大作业报告 九宫格游戏

    <Java语言程序设计>大作业报告     中国石油大学(北京)2015 - 2016 学年第二学期     班级:_____计算机14-1_______ 姓名:_____  许 恺_________________ 学号:______2014011329___________     题意分析 程序首先需要九个可以移动的格子,大小相等,有字符串标示,其次要可以相应鼠标和键盘方向键的控制,可以自由移动,并且与此同时记录步数,最后在满足条件时弹出对话框并显示步数以及是否打破记录,关于打破

C语言程序设计(一)

学习C语言程序设计已经一个学期了,刚开始学习的时候老是感觉力不从心感觉什么都听不懂.虽然认真听课了,但是并不能理解它.这种情况到了后来才有所改变.因为C语言所要用到的思维逻辑与我们平时的思维逻辑有所不一样.其显得更抽象.所以学习C语言,一定要打好基础.要把基础理解透彻.需要用到的语句要牢记,这样,在以后的运用当中,就能比较得心应手了.学习C语言的起步就是学习它的方法规则,如果把它学习得好在学习后面的时候就比较容易理.老师所说的很有道理,多编写编写程序就自然而然的熟悉了语句,比如现在我对if或者s

C语言程序设计入门学习五步曲(转发)

笔者在从事教学的过程中,听到同学抱怨最多的一句话是:老师,上课我也能听懂,书上的例题也能看明白,可是到自己动手做编程时,却不知道如何下手.发生这种现象的原因有三个: 一.所谓的看懂听明白,只是很肤浅的语法知识,而我们编写的程序或软件是要根据要解决问题的实际需要控制程序的流程,如果你没有深刻地理解C语言的语句的执行过程(或流程),你怎么会编写程序解决这些实际问题呢? 二.用C语言编程解决实际问题,所需要的不仅仅是C语言的编程知识,还需要相关的专业知识.例如,如果你不知道长方形的面积公式,即使C语言