俄罗斯方块之五——完善Game类
来源:互联网 发布:如何申请免费域名 编辑:程序博客网 时间:2024/06/15 11:50
游戏界面所有的小方块对象都在二维数组SquareArray里面,判断数组里面的从低层到最顶层,每层里面的所有列都有对象则这行消除。
5.1在Game类里写个判断是否为满行的方法IsFullLine(int row),传入当前行数。
- /// <summary>
- /// 判断满行
- /// </summary>
- /// <param name="row"></param>
- /// <returns></returns>
- public static bool IsFullLine(int row) {
- if (row >= 0 && row < Rows){
- for (int i = 0; i < Cols; i++) if (SquareArray[row, i] == null) return false;
- return true;
- }
- else return false;
- }
5.2如过这次行全为空的话,就没必要继续判断上面的行了,这里还需要判断是否为空行的方法public static bool IsEmptyLine(int row),和判断满行同理。
5.3如果都有小方块的对象的话,就将上面所有行往下移。
- /// <summary>
- /// 方块下移
- /// </summary>
- /// <param name="row"></param>
- public static void MoveDown(int row) {
- for (int i = row; i > 0; i--){ //外层循环从当前行到最顶行
- if (IsEmptyLine(i)) return; //为空行则返回方法
- for (int j = 0; j < Cols; j++){//内层遍历第i行的所有列
- SquareArray[i, j] = SquareArray[i - 1, j];//二维数组里面下移一行
- if (SquareArray[i, j] != null)
- SquareArray[i, j].Location = new Point(
- SquareArray[i, j].Location.X,SquareArray[i, j].Location.Y + Side);
- }
- for (int j = 0; j < Cols; j++) SquareArray[0, j] = null;//清空最顶行
- }
- }
5.4 消除行数result++,再继续判断落下行的所有列,直到遍历完所有行。如果有消层出现则将最上面的一行对象清除,即第0行。
- /// <summary>
- /// 检测行
- /// </summary>
- /// <returns></returns>
- public static int CheckLines() {
- int result = 0;
- int i = Rows - 1;//当前行
- //循环从底行到最定行遍历是否有满行
- while (i >= 0) {
- if (IsEmptyLine(i)) return result;
- if (IsFullLine(i)){ //满行的话
- result++;
- MoveDown(i); //将该行上方下移
- }
- else i--; //检测上一行
- }
- return result;
- }
5.5方块行消除完后得到消除行数的积分,count通过 CheckLines()方法得到
5.6最后,需要将二维数组里面的对象重绘下,在这里有需要注意下重绘的方块是有很多小方块组成的,五颜六色。我们要求颜色统一。那么重绘方法,颜色不一样,所以我们可以在Square类中重载方法ShowSquare(),把周围颜色和中心颜色传参。
- /// <summary>
- /// 重绘界面中已有的方块
- /// </summary>
- public static void Redarw()
- {
- for (int i = 0; i < Rows; i++)
- for (int j = 0; j < Cols; j++)
- if (SquareArray[i, j] != null)
- SquareArray[i, j].ShowSquare(picGraphics,Color.Green,new Color[]{Color.Yellow});
- }
5.7游戏总有失败的时候,判断游戏结束CheckGameOver(Block block),通过传入当前初始化的方块,通过其能不能落下判断是否结束。
- /// <summary>
- /// 检测游戏是否失败(用新出来的方块能不能落下判断)
- /// </summary>
- /// <param name="block"></param>
- /// <returns></returns>
- public static bool CheckGameOver(Block block){
- foreach (Square s in block.Squares){
- int col = s.Location.X / Side;
- int row = s.Location.Y / Side;
- if (row < 0 || col < 0) continue;
- if (SquareArray[row, col] != null) return true;
- }
- return false;
- }
- 俄罗斯方块之五——完善Game类
- 俄罗斯方块之二——Game类
- 俄罗斯方块之三——Block类
- Android网络:开发浏览器(五)——功能完善之保存图片实现
- 多库俄罗斯方块之五(JavaScript)
- 俄罗斯方块之四——方块子类
- 俄罗斯方块之六——窗体设计
- 俄罗斯方块之一——Square类
- CCF——俄罗斯方块
- 俄罗斯方块—C语言
- CCF —俄罗斯方块 20160402
- 俄罗斯方块游戏设计——不拘一格编程序之二
- 编程之美1.17——俄罗斯方块游戏
- 俄罗斯方块——退出异常
- 俄罗斯方块——制作道具
- 俄罗斯方块——Java版
- 俄罗斯方块——Java版
- 设计俄罗斯方块游戏之时间——计算机达人成长之路(14)连载
- 张望“头文件与内联函数”
- 俄罗斯方块之一——Square类
- 俄罗斯方块之二——Game类
- 俄罗斯方块之三——Block类
- 俄罗斯方块之四——方块子类
- 俄罗斯方块之五——完善Game类
- 通过PHP批量下载图片文件
- 俄罗斯方块之六——窗体设计
- 一个简单php扩展介绍与开发教程
- C#俄罗斯方块游戏
- 文件名
- MFC单文档程序流程
- 在CSDN安家,好好学习
- 喜欢WPF但是不喜欢C#的GUI程序员的第二选择--Apache Pivot