C项目实践--俄罗斯方块(1)
俄罗斯方块游戏是由前苏联科学院计算机中心的工程师阿列克谢.帕基特诺夫发明的一款小游戏。
1.功能需求分析
1.1主要功能
实现三个功能:1.游戏欢迎界面;2.游戏执行功能,包括计算得分;3.游戏结束界面
1.2游戏基本规则
游戏共由7种不同形状的方块组成,游戏开始以后随机产生一个方块由屏幕的顶端开始向下落下,落到底端则固定到桌面,并开始下一个方块。在游戏窗口的左边作为游戏的桌面,用宽度20和高度30的表格表示。游戏桌面的右边靠上显示得分,得分下边显示下一个要出现的方块,最下边显示游戏帮助。如果固定到游戏桌面的方块超出了顶端则游戏结束。方块固定以后如果桌面上已经固定了的方块满了一行,则消除一行并将消除行之上的部分向下移动。消除一行得1分。基本操作如下:
1.方块落下的过程中可以用左右方向键移动方块的位置。
2.上方向键用来旋转方块,即所谓的变形
3.下方向键用来加速方块落下
4.游戏中按下回车键暂停游戏。再次按下回车键继续游戏。
2.总体设计
窗口的左边作为游戏的桌面,桌面的大小是20*30个单位大小。随机出现一个方块从游戏桌面的上方开始向下移动,并随机生成下一个方块显示到桌面的右边。方块的颜色分为7种。在显示下一个方块的上面显示玩家的得分,下面显示游戏帮助。
当方块不能向下移动的时候,将方块固定到桌面上,固定的方法是将方块的每个部分所在的坐标的桌面数值设置为1.固定以后,判断桌面数值的每一行,如果一行的数值全部为1的话,就将桌面上的这一行数值删除,并将这一行上面的所有行向下移动一行。删除一行的同时,玩家得分加1.上述操作完成之后,将下一个方块从桌面的顶部开始下落,重新生成下一个方块。在固定方块到桌面的时候,还要判断方块的最顶端部分是否超出桌面范围,并以此作为游戏结束的依据。
3.主要处理流程
游戏的主要处理流程如图:
4.详细设计与系统实现
方块设计
游戏的核心和重点在于7种方块的设计,这7种方块的形状分别为Z形,S形,线形,T形,方形,L形和反L形,其数据结构分别用相对坐标表表示如下:
{{0,-1},{0,0},{-1,0},{-1,1}}
{{0,-1},{0,0},{1,0},{1,1}}
{{0,-1},{0,0},{0,1},{0,2}}
{{-1,0},{0,0},{1,0},{0,1}}
{{0,0},{1,0},{0,1},{1,1}}
{{-1,-1},{0,-1},{0,0},{0,1}}
{{1,-1},{0,-1},{0,0},{0,1}}
因为屏幕的左上角为原点,向右为x轴增加的方向,向下为y轴增加的方向,将上述坐标对号入座即可得到相应的方块形状。
在方块相对坐标基础上加上x和y的偏移量,就可以在屏幕的不同位置得到相应的方块。完成方块的向左,向右及向下移动。
将方块的相对坐标旋转90度得到的新坐标就是变形后的坐标。顺时针旋转操作的公式是:
x' = –y
y' = x
逆时针旋转操作的公式是: x' = y
y' = x
其中,x和y代表旋转前方块的相对坐标,x和y代表旋转后方块的相对坐标。唯一例外的是方形方块,在旋转处理的时候不做处理。
具体实现部分请参考:C项目实践--俄罗斯方块(2)
C项目实践--俄罗斯方块(1)的更多相关文章
- C项目实践--俄罗斯方块(2)
在VS中新建win32 Application Proj,选择Empty ,完成TetrisWin项目创建.新建tetris.c和tetris.h两个文件,打开tetris.h文件. 首先要包括的是可 ...
- Hangfire项目实践分享
Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...
- Windows on Device 项目实践 3 - 火焰报警器制作
在前两篇<Windows on Device 项目实践 1 - PWM调光灯制作>和<Windows on Device 项目实践 2 - 感光灯制作>中,我们学习了如何利用I ...
- Windows on Device 项目实践 2 - 感光灯制作
在上一篇<Windows on Device 项目实践 1 - PWM调光灯制作>中,我们学习了如何利用Intel Galileo开发板和Windows on Device来设计并完成一个 ...
- Windows on Device 项目实践 1 - PWM调光灯制作
在前一篇文章<Wintel物联网平台-Windows IoT新手入门指南>中,我们讲解了Windows on Device硬件准备和软件开发环境的搭建,以及Hello Blinky项目的演 ...
- Hangfire项目实践
Hangfire项目实践分享 Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget ...
- MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构
在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...
- MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
随机推荐
- 剑指Offer(书):重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2, ...
- BGP路由属性详解
Weight属性:cisco私有的BGP属性参数,它只适用于一台路由器中的路由,也就是不会传递给任何其他的路由器.他的取值范围为<0-65535>,这个数越大优先级越高,默认从邻居学到的路 ...
- 【2018 Multi-University Training Contest 4】
01: 02:https://www.cnblogs.com/myx12345/p/9407551.html 03: 04:https://www.cnblogs.com/myx12345/p/940 ...
- Flex使用cookie保存登状态
flex系统要实现普通html系统刷新页面保留登录信息,一个方法是借用js来操作cookie来实现,下边是一个实现的例子: 第一步:在主index.html里边加上两个js方法 //获取cookie内 ...
- softmax函数理解
https://www.zhihu.com/question/23765351 因为这里不太方便编辑公式,所以很多公式推导的细节都已经略去了,如果对相关数学表述感兴趣的话,请戳这里的链接Softm ...
- js的基础(平民理解的执行上下文/调用堆栈/内存栈/值类型/引用类型)
与以前的切图比较,现在的前端开发对js的要求似乎越来越高,在开发中,我们不仅仅是要知道如何运用现有的框架(react/vue/ng), 而且我们对一些基础的知识的依赖越来越大. 现在我们就用平民的方法 ...
- 获取鼠标位置的几个通用的JS函数
原文:http://www.open-open.com/code/view/1421401009218 /*两个通用函数,用于获取鼠标相对于整个页面的当前位置*/ function getX(e) { ...
- angular react vue 浏览器兼容情况汇总
一.逻辑层 框架 (1)angular Angular早在1.3版本就抛弃了对ie8的支持. (2)react React 早在0.14.x 版本就抛弃了对ie8的支持. (3)vue Vue就没打算 ...
- 异或巧用:Single Number
异或巧用:Single Number 今天刷leetcode,碰到了到题Single Number.认为解答非常巧妙,故记之... 题目: Given an array of integers, ev ...
- The sandbox is not sync with the Podfile.lock
github下载的Demo,很多时候使用到CocoaPods,有的时候因为依赖关系或者版本问题不能编译运行. 出现 以下错误 The sandbox is not sync with the Podf ...