yuna 发表于 2015-12-1 10:33

【笔记】【原创源码】一个简单的俄罗斯方块练习

本帖最后由 yuna 于 2015-12-1 17:38 编辑

严格讲不是原创,是看视频后再写出来的。发出来主要是自己小结,做笔记。(笔记在10楼)
先上截图和源码:





yuna 发表于 2015-12-1 17:38

本帖最后由 yuna 于 2015-12-1 17:40 编辑

多谢各位回贴,补上学习笔记
【笔记】
#1
    System.Drawing.Graphics类,详述见https://msdn.microsoft.com/zh-cn/library/system.drawing.graphics.aspx。
    在控件上画图分两步(1)[控件].CreateGraphics创建graphics实例(2).DrawRectangle画图。
    传控件句柄也可以创建graphics实例,Graphics.FormHwnd(intPtr)。
#2
    对象的思想分析整个游戏。形状类(Shape)、形状单元类(Unit)、背景类(Ground)容易理解,游戏控制类(GameController)、游戏面板类(GamePanel)稍难,把分析的过程走一遍。
    (1)Form1主窗口就是玩家,他不能具体指挥形状怎么生成、界面怎么绘制。他要做的就是:开始、玩。所以要找个人(new个游戏控制类)做事,然后点按钮开始,点键盘移动旋转
    (2)游戏控制类要控制场景中的对象,所以在属性中要保存各对象;要将玩家的指挥具体化,所以要提供相应方法。比如玩家点开始,控制类就创建形状、背景等对象,创建一个线程,让形状移动;玩家点移动,控制类就指挥形状移动,指挥界面重绘等。
    (3)控制类核心是“控制”,他主要精力是指挥形状下落、移动,遇障碍停止,背景中障碍物的增加、减少(消行)等。形状如何下落,如何绘制,背景如何变化等,就交给他们自身解决。
    (4)形状、背景都要绘制,所以封装到一起,用游戏面板类同时重绘。
#3
    多使用结构、枚举可提高代码可读性
#4
    protected override bool ProcessDialogKey(Keys keyData)获取键盘输入
#5
    Button.CheckForIllegalCrossThreadCalls = false 交叉线程访问验证设置
#6
    判断形状能否移动、旋转的方法——预动法,先动再判断是否出界、有障碍物
#7
    旋转的方法——不是用加减算法改小方块坐标实现旋转,而是直接写出四个方向的小方块坐标
#8
    线程锁的运用

moodlee 发表于 2015-12-6 21:37

真心不错。
比较编程习惯,我发现我的编程喜欢还可以进一步改进,譬如说,对象的灵活运用。
类会用,但是类包还没有尝试过,不知道用类包是什么感觉。
数据结构还没有接触过(一直听说其大名),真心想去接触一下,传说是一个神奇的东西!

在此,我有一些疑问:
在做小游戏的时候,我的思路是这样的,绘制工作在Form类里面,而创建其他类的主要目的是计算数据(譬如说碰撞...)。
也就是,我想用其他类来支持Form类里面的绘制,而不把绘制的任务交给其他类。
这种思路是不是比较落后?
(野路子学习,全靠自己想怎么做就怎么做,所以请不要见怪。)

常黑屏 发表于 2015-12-1 10:43

恭喜楼主破处,

interv 发表于 2015-12-1 10:46

不错,LZ也是原创了

hackxiaonian 发表于 2015-12-1 10:47

加油    看好你    太棒了!

snwfnh 发表于 2015-12-1 11:05

恭喜楼主 我还在学习中

零和游戏 发表于 2015-12-1 11:16

高手都是从新手过来的,鼓励下

zxd07536160765 发表于 2015-12-1 12:07

路过看看!!!!

jmf 发表于 2015-12-1 12:21

风中风 发表于 2015-12-1 12:53

支持楼主,厉害!
页: [1] 2
查看完整版本: 【笔记】【原创源码】一个简单的俄罗斯方块练习