c语言中1.4e12,俄罗斯方块-C语言

第一章俄罗斯方块游戏

俄罗斯方块游戏

本章的内容介绍了如何使用c语言开发简单的tertris游戏,并详细说明了其具体实现过程。

1.1第一个项目

1.1.1作业

2004年7月1日,晴天,我的作业

离开学校前10分钟,我们最尊敬的节目教师TC给我们布置了夏季作业。标题简单,——是c语言的tertris游戏(图形。使成h的提示),并提醒要做好电前分析工作。

1.1.2准备

2004年7月3日,刮了风

老师的建议:在进行项目之前,一定要好好构思和计划项目,根据需要计划开发过程。所以在计算机上绘制了简单的项目开发流程图,如图1-1所示。

图1-1开发流程图

q功能分析:分析整个系统所需的功能。

q模块结构计划:计划系统所需的功能模块。

q总体设计:分析系统处理过程,探索系统核心模块的运行情况。

q数据结构:设计系统所需的数据结构;

q编程函数:预先计划系统需要的功能函数。

q特定代码:编写系统的特定实现代码。

1.2电源分析

2004年7月4日,阳光明媚

基本结构如图1-2所示。

图1-2 Tetris游戏的基本结构

以这种方式总结了tertris游戏的基本功能模块,制作了简单的项目计划书,整个计划书分为两部分:

q系统需求分析;

q结构计划。

1.2.1分析系统要求

1)游戏盒的预览功能

运行游戏后,如果底部出现游戏框,预览界面中将显示以下框,以便玩家进行预览控制:此游戏共有19个长方体,因此随机生成的游戏长方体显示在长方体预览区域中。

2)游戏盒的控制功能

游戏玩家可以移动为左移、右移、快速下移、自由落体和自动删除行而显示的框。

3)更新游戏显示器

在游戏中移动长方体时,必须移除旧的游戏长方体,然后在新的坐标位置重画新的长方体。

4)设定游戏速度和更新分数

可以用游戏分数除以行数。例如,可以设置10点删除整行。达到一定的量后,游戏选手需要进行等级升级。随着玩家水平的提高,箱子的下落速度加快,游戏的难度相应提高。

5)系统帮助

游戏玩家进入游戏系统后,通过帮助了解游戏的操作提示。

一个tertris游戏的基本功能也是以上5种,当然现实中的游戏产品更复杂,但其基本功能都大同小异。

1.2.2结构计划

从现在开始进入救援计划阶段。为了加深印象,我们创建了模块结构,如图1-3所示。

图1-3游戏的模块结构

1.2.3选择工具

2004年7月5日,晴天,工具混乱

建议选择Turbo C。因为在DEV-C中使用graphics.h更复杂!

两天内,确定了整个项目的功能模块,制定了总体计划,选择了开发工具。接下来,我们将进入总体设计阶段。

1.3总体计划

分析完整的配置功能后,可以根据每个配置功能模块进行完整的设计处理。主要包括两个方面:

运行q流程分析;

q核心处理模块分析。

1.3.1运行流程分析

2004年7月6日早晨,阳光明媚

整个游戏的特定操作流程图。

如图1-4所示,向左移动VK_LEFT,向右移动VK_RIGHT,向下移动VK_DOWN,旋转VK_UP,然后退出VK_Esc键以查看关键点值。以上几个键移动处理的具体说明如下。

调用Q VK_LEFT: MoveAble()函数以确定是否可以向左移动,如果可以,请调用EraseBox函数以清除当前游戏框。下一步将调用show_box()函数,在向左移动的位置显示当前游戏的框。

Q VK_RIGHT:右移处理,类似于上述VK_LEFT处理。

Q VK_DOWN:下移处理,如果不能再移动,则必须将flag_newbox标志设置为1。

Q VK_UP:旋转处理,首先确定是否执行旋转动作,其中必须满足多个条件,如果不符合条件,则不执行。

Q VK_Esc:按Esc键结束游戏。

图1-4游戏运行过程

1.3.2核心处理模块分析

2004年7月6日下午,多云,还有很长的路要走

1.预览方块

新游戏的矩形可以在44个小矩形框中预览,可以使用rand()随机函数生成1到19之间的游戏长方体编号作为预览的长方体编号。其中,pinnik high square小矩形的大小由BSIZEBSIZE计算。

2.游戏盒控制处理

长方体的移动控制是整个游戏的重点和难点,具体内容如下:

1)向左处理

处理过程如下:

(1)判断能否向左移动有两个条件。向左移动一个位置不能超出后板的左侧线,否则超出边界。而且,在游戏框中有值(值为1)的位置,游戏背板不能被占用(占用值为1)。

(2)向左移动之前,先清除游戏盒。

向左移动一个位置,重新显示这个游戏的方块。

2)向右移动处理

处理过程如下:

(1)有两个条件判断能否向右移动。向右移动一格不能超过游戏底部的右侧线,否则超过边界。游戏盒有值位置,游戏背板不能占用。

(2)向右移动之前,先清除游戏盒。

向右移动一个位置,重新显示这个游戏的方块。

3)下移处理

处理过程如下:

(1)有两个条件来判断能否向下移动。向下移动一格也不能越过游戏底部的底部,否则会超过限制。游戏框中有值位置,不能占用游戏底板。如果满足以上两个条件,则可以向下移动。否则,flag_newbox设置为1,此标志由主循环确定。

(2)向下移动之前,先清除游戏盒。

(3)向下移动一个位置,重新显示这个游戏的方块。

4)旋转处理

处理过程如下:

(1)有两个条件来判断旋转是否可能。也就是说,旋转后的箱子不能超出游戏背板的底部、左侧和右侧线,否则超出边界。游戏盒有值位置,游戏背板不能占用。

(2)旋转前清除游戏盒。

(3)在游戏框显示区域(44)的位置,使用当前游戏框数据结构中的next值作为旋转后形成的新游戏框的编号,并重新显示此编号的游戏框。

3.刷新显示

在游戏中移动框的同时清除旧游戏框,并用新坐标重画游戏框。删除整行后,重新绘制游戏底板的当前状态。清除游戏盒的方法是画出轮廓,填充小方块,填充背景色,然后使用前景色绘制游戏背板上的小方块。重复此过程,更改当前坐标,填充并绘制19个小方块,从游戏基板中清除此游戏框。

4.处理游戏速度和分数更新

如果行已满,积分变量score将增加固定值,然后将等级变量level与速度变量speed相关联,那么等级越高,结果越快。

2004年7月6日晚,整体设计的重要性

设计数据结构

1.4数字配置

2004年7月7日早晨,阳光充足

我设计了系统所需的数据结构。

1.游戏地板结构

这里的游戏基础结构是BOARD,具体代码如下:

Struct BOARD/*游戏底板结构,表示每个点具有的属性*/

Int var/*当前状态只有0和1,1表示此点已被占用*/

Int color/*颜色,游戏底部的每个点可以有不同的颜色,提高美感*/

} table _ board[vertical _ boxs][horizontal _ boxs];

其中,BOARD结构表示游戏底板中每个小矩形的属性,var表示当前状态,0表示未使用,1表示已占用。

2.游戏盒结构

这里的游戏盒结构是SHAPE,具体代码如下:

Structshape}

/*一个字节是8位,表示游戏框中的每4位一行(例如, box [0]='0x88 ',box [1]='0xc0 '表示:)

1000

1000

1100

0000*/

char box[2];

Int color/*每个方块的颜色*/

Int next/*下一个框中的编号*/

}

SHAPE结构表示小框的属性,char box[2]表示块形状(2字节),每个4位表示一行框。Color表示每个框的颜色,可以根据需要设置颜色值。

3.shape结构阵列

这里的游戏盒结构是SHAPE,具体代码如下:

/*初始化框内容。也就是说,定义MAX_BOX的SHAPE类型的结构数组和初始化*/

Struct SHAPE shapes[MAX_BOX]=

/*

*嘴,嘴,嘴,嘴

*嘴,嘴,嘴

*口

*/

{0x88,0xc0,CYAN,1},

{0xe8,0x0,CYAN,2},

{0xc4,0x40,CYAN,3},

{0xfe,0x0,cyan,0},

/*

*嘴,嘴,嘴

*嘴

*嘴,嘴,嘴

*/

{0x44,0xc0,MAGENTA,5},

{0x8e,0x0,MAGENTA,6},

{0xc8,0x80,MAGENTA,7},

{0xe12,0x0,magenta,4},

/*

*口

*口

*口

*/

{0x8c,0x40,YELLOW,9},

{0x6c,0x0,YELLOW,8},

/*

*口

*口

*口

*/

{0x4c,0x80,BROWN,11},

{0x6,0x0,brown,10},

/*

*口

*嘴,嘴,嘴,嘴,嘴

*口

*/

{0x4e,0x0,WHITE,13},

{0x8c,0x80,WHITE,14},

{0xe4,0x0,WHITE,15},

{0x4c,0x40,WHITE,12},

/*口

*口

*嘴,嘴,嘴

*口

*/

{0x88,0x88,RED,17},

{0x0,0x0,red,16},

/*

*口

*口

*/

{0xcc,0x0,BLUE,18}

}

在上面的代码中,定义了类型为MAX_BOX SHAPE的结构数组,并执行了初始化过程。MAX_BOX为19,因为总共有19个不同的长方体类型。

2004年7月7日晚,数据结构的重要性

1.5神秘的箱子

2004年7月8日晴朗的天空

武侠小说,成人童话。从少年开始,我就迷上了武侠小说,和我一起上了大学。我还记得我特别执着于神秘盒子的时候。

九龙武侠名作《英雄无泪》的对话中最强大的武器是一箱。在我读完完整的文章后,我意识到这不是一个简单的箱子,箱子里有很多零件,可以根据不同的对手迅速配置战胜对方的武器。

现在我发现这个盒子和程序的函数太相似了!要以编程方式解决问题并实现功能,可以编写函数并实现它。如果存在多个问题,可以编写多个函数来实现。函数是我们编程的那个神秘盒子。

书马上就传了,我预先安装并定义了整个项目需要的函数。

1.函数NewTimer

函数NewTimer用于实现具有以下结构的新时钟:

Void中断网路时间(void)

2.函数SetTimer

函数SetTimer用于设置新时钟的处理过程,如下所示:

Void settimer (void中断(* intproc) (void))。

3.函数KillTimer

KillTimer函数用于恢复原始时钟处理过程,如下所示:

Void KillTimer()

4.函数initialize

Initialize函数用于初始化接口,如下所示:

Void initialize (int x、int y、int m、int n)

5.函数DelFullRow

DelFullRow函数用于删除整行,y设置删除的行数,如下所示:

Int DelFullRow(int y)

6.函数setFullRow

SetFullRow函数查询整个行,并使用以下结构调用DelFullRow函数进行处理:

void setfull row(int _ boardy)

7.函数MkNextBox

函数MkNextBox用于生成以下游戏长方体,并根据以下结构返回长方体编号:

Int MkNextBox(int box_numb)

8.函数EraseBox

函数EraseBox用于清除从(x,y)位置开始的box_numb编号的游戏框,如下所示:

Void erase box (int x,int y,intbox _ numb)

9.函数show_box

函数show_box用于显示box_numb编号和颜色值为color的游戏框,以(x,y)位置开始,如下所示:

Void show _ box (int x,int y,intbox _ numb,int c

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值