该游戏算法比较简单,主要功夫都在界面体验上了,比如方块图形、用户控制、消去与累计等。
图形我们采用GDI+画图方式显示,共8种图形,当然可以根据自己的喜好随意定制。如何表示图形?我们可以借鉴马赛克效果。把所有图形都用3*3矩阵表示,0表示背景色显示,1表示着色显示。比如
{0,0,0},   
    {0,1,0},  表示 T型,看出来了吗?每个数字位置其实就是一个正方形小块。
    {1,1,1}
用户控制?简单KeyPress事件实现就好。当然还有一个无需用户控制的就是自动下落,可以使用Timer实现。
消去算法?^_^,当然很简单,如果一行上有为0的单元格,那么表示没有充满,就不用消去;否则就要消去。累计就是数组追加,消去就是元素删除。
当然了,消去与累计都需要将数据的变化体现到界面上,那就是画图。Graphics对象我们都会使用,在该windows窗体游戏中,我们可以实现OnPaint事件。每当需要重绘的时候,比如用户控制,消去等,就调用窗体refresh,那么自然会触发Paint事件。以下是代码示例:
public int[][,] figures = new int[8][,]//8种图形
    {
        new int[3,3] {
    {0,0,0},
    {0,1,0},
    {1,1,1}
    },
        new int[3,3] 
    {
    {0,0,0},
    {0,2,2},
    {2,2,0}
    },
        new int[3,3] 
    {
    {0,0,0},
    {3,3,0},
    {0,3,3}
    },
        new int[2,2] 
    {
    {4,4},
    {4,4}
    },
        new int[3,3] 
    {
    {5,0,0},
    {5,0,0},
    {5,5,0}
    },
        new int[3,3] 
    {
    {0,6,0},
    {0,6,0},
    {6,6,0}
    },
        new int[4,4] 
    {
    {7,0,0,0},
    {7,0,0,0},
    {7,0,0,0},
    {7,0,0,0}
    },
        new int[3,3]
    {
    {0,8,0},
    {8,8,8},
    {0,0,0}
    }
    };
你能从上面的定义看出有哪些图形吗?^_^,为什么不为0的地方不全是1?因为我想让不同的图形显示不同的颜色,如果无此要求则不必这样。
在具体画图时,我们需要将将数组大小转换为区域边长方格数
        int conversize(int sz)
        {
            int s = 0;
            if (sz == 4) s = 2;
            if (sz == 9) s = 3;
            if (sz == 16) s = 4;
            return s;
        }
当然出现的图形是随机的,直接用Random就可以做到。
记住无论什么动作引起的图形变化,包括移动、旋转等都要用Refresh,以便刷新游戏界面。例如向左
public void moveLeft()
        {
if (check(figure, px - 1, py)) px = px - 1;
            Refresh();//this.Refresh();
        }
protected override void OnPaint(PaintEventArgs e)这个熟悉吧?嗯,界面就是它画出来的。你要在界面显示什么,就在里面画什么。记住,是全部界面,因为我们的这个游戏没有任何其他资源,没有任何控件,只有图形。
当然了,图形位置移动必须要要检查越界和是否遇到障碍物。也就是上述的check方法。基本思路就是图形经过的位置中无越界并且无不为0的单元格存在。
bool check(int[,] fg, int x, int y)
        {
            int sz = conversize(fg.Length);
for (int i = 0; i < sz; i++)
                for (int j = 0; j < sz; j++)
                {
                    int rx = i + x;
                    int ry = j + y;
                    if ((rx < 0 || rx > 9 || ry < 0 || ry > 19) && fg[i, j] != 0) return false;
                    if (!(rx < 0 || rx > 9 || ry < 0 || ry > 19))
                        if (board[rx, ry] != 0 && fg[i, j] != 0) return false;
                }
return true;
        }
旋转怎么实现?一个纯数组倒序排列的简单题目,不是吗?
最后是游戏难度的问题,等级越高,降落速度越快,其实就是把等级数字跟计时器的Interval挂钩就是了。
其他的就不多说了。有兴趣的可以把它做成控件,方便大家使用。祝你玩的开心。

俄罗斯方块游戏算法分析相关推荐

  1. python编的俄罗斯方块游戏下载_python写的俄罗斯方块游戏

    python写的俄罗斯方块游戏 功能包括:记录所花费时间;消去的总行数;总分;排行榜,最高记录查看等. 排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等. from Tkinter ...

  2. 500行代码写一个俄罗斯方块游戏

    导读:本文我们要制作一个俄罗斯方块游戏. 01 俄罗斯方块 Tetris 俄罗斯方块游戏是世界上最流行的游戏之一.是由一名叫Alexey Pajitnov的俄罗斯程序员在1985年制作的,从那时起,这 ...

  3. python俄罗斯方块算法详解_用 Python 写一个俄罗斯方块游戏 (

    @@ -2,34 +2,34 @@ > * 原文作者:[Dr Pommes](https://medium.com/@pommes) > * 译文出自:[掘金翻译计划](https://g ...

  4. pygame简单的俄罗斯方块游戏和简单的打字游戏

    1.pygame简单的俄罗斯方块游戏 一.对战的方块管理 定义一个BlockManage管理对战的方块 根据BlockManage根据传入的玩家id返回方块,保证每个玩家拿到的方块序列是一致的,所以在 ...

  5. java实现俄罗斯方块游戏

    1.功能需求 2.软件功能架构图 3.界面设计 4.程序逻辑图 5.实现代码 创建控制面板并添加按钮 初始化界面 添加事件监听 创建方块 实现对方块操作 游戏主类,实现游戏控制 功能需求 1. 在二维 ...

  6. 500 行代码写一个俄罗斯方块游戏

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 导读:本文我们要制作一个俄罗斯方块游戏. 作者 | 派森 ...

  7. linux下c语言俄罗斯方块,Centos 6.2下的C语言编写俄罗斯方块游戏代码

    俄罗斯方块游戏代码如下:                                                  运行结果请点击:http://blog.chinaunix.net/uid- ...

  8. python游戏脚本实例-Python使用pygame模块编写俄罗斯方块游戏的代码实例

    文章先介绍了关于俄罗斯方块游戏的几个术语. 边框――由10*20个空格组成,方块就落在这里面. 盒子――组成方块的其中小方块,是组成方块的基本单元. 方块――从边框顶掉下的东西,游戏者可以翻转和改变位 ...

  9. EasyX实现俄罗斯方块游戏

    文章目录 1 启动页面 1.1 启动页面分析 1.2 启动界面代码实现 2 初始化游戏环境 2.1 界面效果及分析 2.2 代码实现 3 新方块 3.1 显示效果 3.2 分析 3.3 代码实现 4 ...

最新文章

  1. 电信业务支撑报表开发工具解决方案
  2. 简单的视频采集demo
  3. linux下定时器实现
  4. 周志华 机器学习 笔记
  5. 程序员的高速学习法——以JS学习为例,进行图解
  6. 如何在Dart中合并列表
  7. 【转载】SVD在推荐系统中的应用
  8. wxWidgets:wxFileDialog类用法
  9. java break和return的区别_【java】break,continue和return区别
  10. yii2的分页和ajax分页
  11. 北京黄记煌餐饮管理有限责任公司签约Ebistrategy亦策软件
  12. 相机标定(三)—— 正交投影和透视投影变换
  13. cisco failover 概念
  14. C#中各种字符类型的转化
  15. 一步一步写一个简单通用的makefile(一)
  16. 【数据库基础笔记】3、约束和隔离
  17. weex请求方法stream 的封装
  18. 如何安装windows操作系统?(win10、Window11、win7、win8)
  19. 微信群裂变引流效果怎么样?微信社群引流怎么操作?
  20. 笔记-项目干系人管理-控制干系人参与

热门文章

  1. C#飞机大战案例详细教程
  2. 【PHP】创蓝253云通信平台国际短信接口调用demo案例
  3. 涉及数字的英语表示——总览
  4. TensorFlow使用GPU
  5. [玩游戏]-罪案现场全集打包下载
  6. 无人机动力测试台:150kg级-Flight Stand 150
  7. 毕业了,异地恋只能分手吗?
  8. 男人哭了,是因为他真的爱了
  9. 揭秘跨境电商亚马逊测评的培训骗局!千万不要上当受骗!
  10. node.js+puppeteer创建定时任务自动登录网站截取图片