俄罗斯方块(2013.9.27)

     这个程序创作来源于《编程之美》和张毅的启发。该书上有该程序的相关问题,那一日见到张毅竟然实现了,于是手痒,也想做一下,练一下编程水平。当下仍然在进行中,记录实战点滴吧。在张毅的指点下逐步完成这个程序,一些要点及想法:
1。学会分层次分步骤的问题。我一开始就想着怎么绘制图形,响应消息这些。学会先写内部的逻辑,要不然问题解决不了。
2。七个基本图形,采用数组存储。
3。产生一个随机的图形,设置为7个基本图形 的一个形式
4.成员函数直接调用成员函数的问题。可以直接调用。
5。类的设计
class block//方块类
{
public:
block();
Position position;
int Blocks[4][4][4];
int type;//同一种方块的种类 
int pType;//标识当前类型
void toLeft();//移动 
void toRight();
void transform();//变形 
void maping();//方块在场地上的投影,这个似乎由类函数处理更合适
};
将游戏场地设置为一个全局变量int court[10][20];10*20的一个矩阵框图
6。需要一个获取字符串的循环以处理左移右移及下落等消息,而此则是一个开放式的循环,获取用户输入的消息。此while函数是否能作为成员函数?还是在main  函数中处理 ?是否要开双线程,以同时进行循环并且处理用户的输入。那则先处理其 下降流程,不处理消息。
7。加速下降先不不着急处理,先要有一个时钟处理正常下降的情况。“time.h ”头文件该似乎不能使用,或者不那么直接。似乎“windows.h”中有SetTimer函数,但是还要确定是否为MFC。但是似乎不必拘泥,只要能用就好。
必须设定回调函数,当可设定多个定时器,回调函数使用switch语句设定。
8。下落的限定条件,下落按时钟发生的话是一次下降一格,position随之变化,到达底端或者碰到有方块之前的空格停止。需要存在一个信号来处理一个方块下降完成以使得下一个方块开始下降。下降函数判断的关键在于判断该方块是否停止,此可以直接使用标志位来判断。映射是必然要使用的 。似乎一直循环的下降函数申明为友元函数更为恰当,或者将其下降定义为更单纯一些,不要涉及到具体的对象,而只是类的特性。很正常,因为左右移动也是要判断边界 条件的。标志位的判断是涉及对象的操作,不应当放到类函数的定义中。两个限制条件:到达底端极易判断,碰撞如何判断?计算当前方块的最突出部分判断其对应的count[][]场地是否有方块以造成碰撞,恐怕没这么简单。应当算的是所有下边界进行判定,只要有一处判定到即将碰撞则停止下落。但是即便有碰撞的可能仍然可以通过平移到空位解决问题,所有下边界进行。
       应该没有这个问题,因为是始终触发,触到了碰撞是否可以移动,由时钟决定。但是底部变形也是一个问题。这个可以在变形函数中进行处理。
9。左右移动的消息是在循环的哪一层获得的。怎样将消息传递给时钟的回调函数
     问过张毅,时钟回调函数应该是在MFC中处理的啊,在控制台中只需要调试,不需要用时钟来做
     和辉哥交流有收益,将控制类封装为一个类,当前的方块,下一个方块及court[][](先前设置为全局变量,不是法)。同时将七个对象的发生封装于方块类中,这样具有更好的封装性。

10.思维要简洁, 专注,深思
11。方块体和游戏场地的映射
12。图形界面相关






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值