【笔记】【原创源码】一个简单的俄罗斯方块练习
本帖最后由 yuna 于 2015-12-1 17:38 编辑严格讲不是原创,是看视频后再写出来的。发出来主要是自己小结,做笔记。(笔记在10楼)
先上截图和源码:
本帖最后由 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
线程锁的运用
真心不错。
比较编程习惯,我发现我的编程喜欢还可以进一步改进,譬如说,对象的灵活运用。
类会用,但是类包还没有尝试过,不知道用类包是什么感觉。
数据结构还没有接触过(一直听说其大名),真心想去接触一下,传说是一个神奇的东西!
在此,我有一些疑问:
在做小游戏的时候,我的思路是这样的,绘制工作在Form类里面,而创建其他类的主要目的是计算数据(譬如说碰撞...)。
也就是,我想用其他类来支持Form类里面的绘制,而不把绘制的任务交给其他类。
这种思路是不是比较落后?
(野路子学习,全靠自己想怎么做就怎么做,所以请不要见怪。)
恭喜楼主破处, 不错,LZ也是原创了 加油 看好你 太棒了! 恭喜楼主 我还在学习中 高手都是从新手过来的,鼓励下 路过看看!!!! 支持楼主,厉害!
页:
[1]
2