APP下载

基于C语言的俄罗斯方块游戏的设计

2018-01-10马巧梅张丽娜

微型电脑应用 2017年12期
关键词:该游戏链表方块

马巧梅, 张丽娜

(宝鸡文理学院 计算机学院,宝鸡 721016)

基于C语言的俄罗斯方块游戏的设计

马巧梅, 张丽娜

(宝鸡文理学院 计算机学院,宝鸡 721016)

随着科学技术的进一步发展,益智游戏作为一种新型的休闲娱乐方式也逐步进入人们的生活。基于C语言的俄罗斯方块游戏操作简便、灵活、界面友好,是根据模块化程序设计的思想而开发的一款益智游戏。阐述了游戏的设计构思,提出了游戏的功能结构图,设计了游戏的流程图,在构建完善的游戏构思的基础上,实现了基于C语言的俄罗斯方块游戏的开发,并可以成功验证该游戏顺利的运行。

C语言; 俄罗斯方块游戏; 链表

0 引言

俄罗斯方块是一款风靡全球的掌上游戏[1],由俄罗斯人阿列克谢·帕基特诺发明,故得此名。俄罗斯方块的发明者,是当时还被称为"苏联"的联邦科学员,该游戏最初是作为自我消遣的电脑游戏而被制作出来的。俄罗斯方块的基本规则[2]是移动、旋转和摆放游戏自动输出的各种方块。使之排列成完整的一行或多行并且消除得分。它看似简单却变化无穷,俄罗斯方块简单易学,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为一款家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法比拟的。

基于C语言的俄罗斯方块游戏是采用C语言进行编程的[3],运用用户图形界面、数组及结构体和指针[4]等方法开发的一个益智类游戏。此应用程序中的方块旋转和整行消失等是利用了函数绘制[5]的方法。

俄罗斯方块是一款比较简单的游戏,在游戏过程仅需要玩家将不断下落的各种形状的方块移动、翻转,如果某一行被方块充满了,那就将其消除,而当窗口中无法再容纳下落的方块时,就宣告游戏的结束。

1 俄罗斯方块游戏总体设计

1.1 俄罗斯方块游戏的功能结构图

基于C语言的俄罗斯方块游戏是一款非常有趣的游戏,该游戏共包含4大模块:游戏方块预览功能、游戏方块控制功能、游戏分数控制功能和游戏帮助功能。其功能结构图,如图1所示。

图1 功能结构图

(1)游戏方块预览功能:在游戏过程中,当游戏底板出现一个游戏方块时,必须在游戏方块预览区域中出现下一个游戏方块,这样有利于游戏玩家控制游戏的策略。由于在此游戏中存在7种不同的游戏方块,所以在游戏方块预览区域中需要显示随机生成的游戏方块[6]。

(2)游戏方块控制功能:通过各种条件的判断,实现对游戏方块的左移、右移、快速下移、自由下落、旋转功能,以及行满消除行的功能。

(3)游戏分数控制功能:每消除一行加100分,而且游戏无上限。在游戏失败后,游戏界面自动返回初始游戏界面。

(4)游戏帮助功能。玩家进入游戏后,将弹出本游戏如何操作的友情提示。在本游戏中,玩家可以用w、a、s、d、space键分别控制旋转[7]、左移、右移、加速下移以及沉底功能,方便游戏更好的体验。

1.2 俄罗斯方块游戏的流程图

1.2.1 游戏界面流程图

俄罗斯方块进入游戏后,游戏的先后执行流程图如图2所示。

图2 游戏实现流程图

包括游戏欢迎界面、游戏开始界面、游戏方块预测界面、游戏说明界面。

1.2.2 清除游戏方块流程图

俄罗斯方块游戏中,需要清除游戏过程中凑够满满一行的方块,其清除游戏方块的流程图,如图3所示。

图3 清除游戏方块

1.2.3 游戏方块下沉的流程图

俄罗斯方块游戏中,清除游戏过程中的方块后,其余的游戏方块需要下沉,其流程图,如图4所示。

图4 游戏方块下沉的流程图

2 数组及结构体的设计

2.1 数组设计

在该程序设计中,数组是把具有相同类型的若干变量按有序的形式组织起来的一种形式。该游戏的开发共运用了3个数组,分别是方块的4个旋转变换的样式、颜色和游戏得分。

2.2 结构体设计

在该程序设计中,该游戏的开发共运用了2个结构体:struct BLOCK;//定义当前方块的状态和颜色及下一方块的信息;struct BLOCKINFO;//定义方块移动的方向和距离。

2.3 链表设计

在该程序设计中,使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。该游戏的开发运用了1个链表: fillrectangle(50 + (block->x + col) * BLOCK_LEN, 50 + (block->y + row) * BLOCK_LEN。

3 游戏界面及功能的实现

3.1 用户登录界面

用户进入俄罗斯方块游戏程序,首先弹出游戏主界面。

3.2 游戏主界面

用户进入游戏主界面后,通过主界面上的游戏说明提示开始游戏,游戏开始界面,如图5所示。

图5 游戏开始界面

按下回车键将开始游戏;界面显示每次的得分情况,并累计到总分。游戏运行界面,如图6所示。

图6 游戏运行界面

3.3 游戏操作

基于C语言的俄罗斯方块游戏进入游戏主界面后,进行如下操作:

1. 在游戏主界面上按回车键开始游戏,进入游戏;

2. 方块形状转换操作:良好的方块形状设计,绘制七种

常见的基本图形即长条形、Z字形、反Z形、田字形、7字形、反7形、T字型,各个方块变形时,还可设为顺时针或逆时针变形,一般为逆时针。方块变换的形状生成图,如如图7所示。

图7 方块变换生成图

3. 键盘处理事件:方块下落时,可通过键盘w、a、s、d、space键对该方块进行向上(变形)、向下(加速)、向左、向右移动,以及沉底。

4. 消行操作:当方块落到游戏界面最底部并且铺满最后1行,就能消去所在这1行,积分增加100分,每消除1行,系统判定增加100分,一次最多消除4行。消除方法是利用函数循环检测是否满行,将满行的1行参数输出到消行函数中,函数进行截屏并且下移,达到消除的目的。

4 总结

为了满足大众用户精神娱乐的需求,基于C语言的俄罗斯方块游戏的设计,基本上已经达到了预期的目标。分析了俄罗斯方块游戏开发中C语言程序及指针和链表的一些关键技术,实现了游戏过程中游戏的消行和重得分的设置,该应用程序的主要功能已基本完善,是一款值得推荐的益智游戏。

[1] 翟亚静,成丽君.基于Android的2048小游戏的简单实现[J].电子技术与软件工程,2017(12):251-252.

[2] 马丽,薛根奇,吕海莲. 基于Qt组件的俄罗斯方块设计[J]. 电子设计工程,2016(12):27-30.

[3] 孟芸,朱肖安,罗刘敏,徐音.基于C语言的俄罗斯方块的设计与实现[J].硅谷,2014(23):19-20

[4] 许燕.基于lua和corona框架的趣味手机游戏的设计与实现[J].电脑知识与技术,2015(25):47-49 .

[5] 赵巧妮. 基于Proteus的俄罗斯方块电路的设计和仿真[J].微型电脑应用,2016(8):59-60.

[6] 温涛陈够喜李瑞林.互动式《俄罗斯方块》游戏安全隐写[J]. 电子技术应用,2016(4):120-123.

[7] 申月莉,杨春雨.基于Android的俄罗斯方块软件关键技术研究[J].洛阳师范学院学报,2016(2):54-58.

DesignandImplementationofJava-basedBricksGames

Ma Qiaomei, Zhang Lina

(College of Computer, Baoji University of Arts and Sciences, Baoji 721016, China)

With the further development of the science and technology, educational games as a new way of entertainment also gradually go into the life of people. Tetris game is developed according to C-language graphical user interface, it requires easy operation, flexibility, friendly interface, etc. The design idea of game is expounded, and the function structure of the game is put forward, and the flow chart of the game is designed in this paper. On the basis of analysis of constructing a perfect game idea. C-language-based Tetris game is achieved finally, it can successfully verify the game can run smoothly.

C-language; Tetris game; Chained list

1007-757X(2017)12-0007-03

国家青年科学基金资助项目(61402015);陕西省自然科学基础研究项目(2017JM6048);陕西省宝鸡市科研计划项目(16RKX1-3);宝鸡文理学院校级重点项目(ZK2017011)

马巧梅(1983-),女,讲师,硕士,研究方向:数据库、网络与信息安全。

张丽娜(1983-),女,硕士,讲师,研究方向:数字信号处理、物联网应用。

TP391

A

2017.09.23)

猜你喜欢

该游戏链表方块
有多少个方块
不一样的方块桥
谜题方块
基于二进制链表的粗糙集属性约简
跟麦咭学编程
基于MTF规则的非阻塞自组织链表
C++的基于函数模板实现单向链表
一道2014年上海高考题的探究
好大的方块糖