俄罗斯方块游戏是由前苏联科学院计算机中心的工程师阿列克谢.帕基特诺夫发明的一款小游戏。

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)的更多相关文章

  1. C项目实践--俄罗斯方块(2)

    在VS中新建win32 Application Proj,选择Empty ,完成TetrisWin项目创建.新建tetris.c和tetris.h两个文件,打开tetris.h文件. 首先要包括的是可 ...

  2. Hangfire项目实践分享

    Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...

  3. Windows on Device 项目实践 3 - 火焰报警器制作

    在前两篇<Windows on Device 项目实践 1 - PWM调光灯制作>和<Windows on Device 项目实践 2 - 感光灯制作>中,我们学习了如何利用I ...

  4. Windows on Device 项目实践 2 - 感光灯制作

    在上一篇<Windows on Device 项目实践 1 - PWM调光灯制作>中,我们学习了如何利用Intel Galileo开发板和Windows on Device来设计并完成一个 ...

  5. Windows on Device 项目实践 1 - PWM调光灯制作

    在前一篇文章<Wintel物联网平台-Windows IoT新手入门指南>中,我们讲解了Windows on Device硬件准备和软件开发环境的搭建,以及Hello Blinky项目的演 ...

  6. Hangfire项目实践

    Hangfire项目实践分享 Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget ...

  7. MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构

    在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...

  8. MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  9. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

随机推荐

  1. 条款17:以独立语句将newed对象置入智能指针(Store newed objects in smart pointers in standalone statements)

    NOTE: 1.以独立语句将newed对象存储于智能指针内.如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄漏.

  2. UVa 1354 天平难题 (枚举二叉树)

    题意: 分析: 其实刚看到这题的时候觉得很难, 以至于结束了第七章然后去做了一遍第六章树的部分.现在再做这题觉得思路并不是太难,因为总共就只有六个结点,那么只要枚举二叉树然后算出天平然后再从叶子往上推 ...

  3. NYOJ 237 游戏高手的烦恼

    游戏高手的烦恼时间限制:1000 ms | 内存限制:65535 KB难度:5描述有一位传说级游戏高手,在闲暇时间里玩起了一个小游戏,游戏中,一个n*n的方块形区域里有许多敌人,玩家可以使用炸弹炸掉某 ...

  4. python011 Python3 字典

    Python3 字典字典是另一种可变容器模型,且可存储任意类型对象.字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如 ...

  5. 【HTML/XML 3】XML 简介,来源

    导读:在标记语言出现之前,计算机中的数据一直都是以神秘的二进制在进行处理,但是,标记语言的出现,慢慢的改变了这种认识.那么,标记语言都经过了什么样的发展呢?它又有什么用处呢? 一.追根溯源(XML的产 ...

  6. 【优先级队列】 Holedox Eating

    https://www.bnuoj.com/v3/contest_show.php?cid=9154#problem/M [Accepted] #include<iostream> #in ...

  7. hdu 2686最小费用最大流问题

    #include<stdio.h> #include<queue> #include<string.h> using namespace std; #define ...

  8. msp430项目编程20

    msp430中项目---超声波测距系统 1.定时器工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习

  9. HDU 2059 【DP】

    题意: 中文. 思路: 这题不是自己的思想. 当对第i个点的最优值进行求解的时候一定存在最后一个加油的点j.这里j直接枚举. 另外将0和n+1个加油站定义为起点和终点. dp需要加强训练. #incl ...

  10. Java课堂测试--实现ATM的基本操作体会

    9月20的周四的Java课堂第一节课上就是有关于实现ATM的考试内容,在实现的过程中我了解到自己本身还是有很多的不足之处,例如在实现工程方面的相似性上面还有些许就的欠缺,再者就是回宿舍拿电源的原因导致 ...