俄罗斯方块之三——Block类
小方块有了,我们下一步就要得到游戏中的组合方块,这里创建一个Block类,为游戏中的组合方块类。那这个类有什么属性呢?位置(Location),周围颜色(SurroundColor),中心颜色(CenterColor) 。那么大小(Size)还需要吗,如果需要我们可以通过小方块的位置和数量得到。其实组合方块的Size是不需要的,我们以后的判断都是将组合块的所有小方块循环遍历的。
3.1 一个组合方块由多个小方块组成,那么我们就需要一个Square类型的集合来存储小方块。Block类添加个Squares属性,List<Square> squares。
3.2 接下来组合方块是可以转动的。定义一个枚举类型Direction,里面是方块的四个不同方向(North,East,South,West),Block类里面加个Direction属性,枚举类型,表示方块初始化的方向。
3.3 为了方便,我们规定所有类型的组合方块,以中心的方块旋转。组合方块是由不同小方块相对于中心小方块的位置变化组成的。在以后我们判断游戏出界面,高度,宽度等,都是判断组合方块的小方块集合。根据分析我们得出Block类有Location,SurroundColor,CenterColor,Squares,Direction共5个属性。
3.4 俄罗斯方块有基本形状7种。这些形状她们有Block类的共同属性,但是它们小方块的位置是不同的,旋转方法也是不同的。
我们采用继承,将Block类作为父类,7种基本形状类作为子类。
3.5 子类的共同方法有:
3.5.1 在游戏界面中显示大方块形状ShowBlock()。
3.5.2 将移动后的方块隐藏重绘HideBlock()。
3.5.3 初始化所有小方块位置的方法,定义为抽象方法Init(Direction direction)。
3.5.4 方块是随机出来的,每个方块出来的方向也是随机的,所以需要一个随机数,去得到方块初始的方向InitDirection()方法。并在这个方向的值传递给初始化方块位置Init()方法。将随机数对象在Gmae类中声明。
3.5.5 所有组合方块的旋转方法Ratate()。
3.5.6移动方法,移动有三个方向左右和下,Left()、Right()、Down()。
3.6 接下来看看每个方法是怎么具体实现的:
3.6.1 ShowBlock()方法和HideBlock()方法:只需遍历squares集合循环调用Square类的ShowSquare(Graphicsg)方法和HideSquares()方法,将所有小方块显示或重绘下。这里需要注意,在俄罗斯方块中要显示下一块方块是的形状,但面板对象不一样,把两个方法重构下,传入不同面板对象。
3.6.2 InitDirection()方法得到初始化的方向:
Direction = (Direction)Game.Random.Next(0, 4);//Random为随机数对象。
3.6.3 移动的方法:移动我们首先要判断是否出了游戏界面,这里用二维数组来存放游戏界面里所有的小方块对象。Square[,] SquareArray = new Square[Rows, Cols],Rows为游戏界面中的行,Clos为游戏界面中列。这样我们就可以知道游戏界面中某行某列是否有小方块。
3.6.4 将Rows,Cols和Square[,] SquareArray = new Square[Rows, Cols]声明到Game类中,并初始化。在Game类里面添加一个 IsEmpty(int row,int col)方法。来判断是否出界和是否有小方块对象在移动的方向上。
- /// <summary>
- /// 判断方块所在行数是否出界,行和列都是从0开始,是否有方块
- /// </summary>
- /// <param name="row"></param>
- /// <param name="col"></param>
- /// <returns></returns>
- public static bool IsEmpty(int row, int col)
- {
- //判断游戏区域某个点是否已有方块,并且没出界
- if ( row >= 0 && row < Rows && col >= 0 && col < Cols)
- return SquareArray[row, col] == null;
- else return false;
- }
3.6.5在Block类里接下来移动方法就只需要判断所有小方块是否满足IsEmpty(int row,int col)方法返回True就可以移动否则不能移动。下面以往下移为例:(其他的方向同理),下移返回bool值,其他方向无返回值。
- //判断是否可以落下
- public bool Down(){
- bool flag = true;
- HideBlock();
- foreach (Square s in Squares)
- flag = flag & Game.IsEmpty(s.Location.Y / Game.Side + 1, s.Location.X / Game.Side);
- if (flag){
- //可以落下
- foreach (Square s in Squares) s.Location = new Point(s.Location.X, s.Location.Y + s.Size.Height);
- ShowBlock();
- return true;
- }
- else {
- //不可以落下
- ShowBlock();
- return false;
- }
- }
俄罗斯方块之三——Block类相关推荐
- Enterprise Library: Configuration Application Block类设计分析篇
Enterprise Library: Configuration Application Block类设计分析篇<?xml:namespace prefix = o ns = "ur ...
- cocos2dx掼蛋_cocos2dx游戏开发——别踩白块学习笔记(一)——Block类
一.Block类介绍 当然啦,Block类在这个游戏里就是必需品= =,因为整体都是由这个搞出来的,所以我们可以把游戏需要实现的功能都放在这里. 主要有下面这些功能(经典模式): 1.创建一个Bloc ...
- 堆晶结构_-岩石地球化学之三--火成岩类及其构造岩石组合.ppt
4-岩石地球化学之三--火成岩类及其构造岩石组合 火成岩类及其构造岩石组合 玄武岩类 玄武岩类是相当于辉长岩类成分的喷出岩.SiO2的含量在45-52%之间,主要由基性科长石(一般是拉长石,也可以是培 ...
- java中block类6_Java 实现区块链中的区块,BLOCK的实现
区块链由若干个区块组成,区块是区块链的基础单元 2.区块链中区块的基本属性 区块6个属性的说明-Index 区块的索引值,区块链中的唯一键 区块6个属性的说明-Timestamp 区块的时间戳,用于区 ...
- MFC和Win32之三___CGdiObject类和windows Gdi对象
小结: 前面讲到的windows窗口对象,在windows下用句柄来代表之,并且用了一个数据结构WNDCLASS(窗口类)来描述之.同理,windows的Gdi对象也有一些句柄来代表之(比如hPen等 ...
- QT5开发及实例学习之三字符串类
文章目录 前言 一.操作字符串 二.查询字符串数据 三.字符串的转换 四.NULL字符串和空(empty)字符串的区别 五.隐式共享 六.内存分配策略 前言 标准C++提供了两种字符串:一种是C语言风 ...
- java俄罗斯方块七中图形类_俄罗斯方块shell 实现
ubuntu12 .04 俄罗斯方块效果展示: 源码分享: # Tetris Game # 10.21.2003 xhchen #APP declaration APP_NAME="${0# ...
- java俄罗斯方块七中图形类_shell脚本俄罗斯方块--代码真正详解
无意中看到代码,想仔细了解下源码实现,结果网上搜索都是抄袭的一个版本,有的就写了个开头的分析,没有具体代码分析.所以个人就花了点时间,详细分析了一下代码,在这里分享给大家. 排版不会弄,将就看吧,转载 ...
- java俄罗斯方块七中图形类_shell中的俄罗斯方块小游戏
搜索热词 俄罗斯方块的shell脚本 #!/bin/Bash # Tetris Game #APP declaration APP_NAME="${0##*[\\/]}" APP_ ...
最新文章
- 闪电网络运行过程中存在的一些问题
- matlab 自再现模,平行平面腔自再现模FoxLi数值迭代解法及MATLAB实现
- 华为服务器型号命名,服务器的命名规则
- python socket多线程并发_【Python之旅】第五篇(三):Python Socket多线程并发
- Go 神坑 1 —— interface{} 与 nil 的比较
- 2018 NLPCC Chinese Grammatical Error Correction 论文小结
- Java面试题---基础篇
- 基于Springboot开发的精品小说平台网站源码带爬虫工具
- 微软笔试题《Arithmetic Puzzles》- 题解
- 视觉开发应用1- 机器视觉基本知识之工业相机
- springboot证书管理系统的设计与实现毕业设计源码162317
- 【金融系列】使用Python分析债券,画零息利率曲线,对债券进行精确定价,计算债券的麦考利久期、修正久期和凸度,并进行价格敏感性分析
- 教程:如何制作一个多功能U盘
- 一刹那,是幡然悔悟的一刹那
- 秋招总结|阿里转正失败,到拿到10个大厂产品offer
- python 爬取 网易翻译
- CAS单点登录学习笔记二之部署CAS Server
- 【八月英语----照亮我心】
- 雨敲窗python_标签 Python - 雨敲窗个人博客
- 涨势迅猛!拼多多跨境平台TEMU在美掀起流量风暴!