MFC--俄罗斯方块编程笔记[1]

      最近有Mac编程的想法,但查了下资料发现硬件成本也高,如果是手机编程的话要iphone,要Mac系统的机子;软件上也不熟,要学习objective C,要学COCOA框架。要上手的话估计太久,于是突生想法,先小学下windows编程,编个俄罗斯方块这样的小游戏,先实现功能,然后优化,配图,配声音,配效果,看自己能做到什么程度。以后如果要上手Mac编程,再把这程序移植过去,顺便学习下移植有哪些需要注意的问题。

      所以最近翻出了N年前拷到移动硬盘的windows编程视频,孙鑫那个版本,看了六集,感觉基本上可以实现俄罗斯方块的功能了。

      1.首先是对windows消息队列机制的理解,知道了On_ButtonDown之类的函数,了解了windows如何跟外设进行交互,所以通过上下左右键来改变方块的状态的代码可以写在这类函数里面,内部具体的就是通过判断捕获的ASCII码来判断按下的是哪个键。

      2.略微了解了些MFC框架的实现过程,俄罗斯方块的实现可以在空的MFC程序上进行添加,代码大部分都可以写在View那个类里面。

      3.略微了解一点绘图的函数,知道CDC的简单用法,可以绘出不同颜色的方块,这样,游戏区域的图形实现就可以做到了。

      4.俄罗斯方块的自动下落则需要用到定时器的函数,这个可以用SetTimer来实现。

      5.这样,感觉这个游戏功能实现应该是没问题了,剩下的就是具体如何设计的问题的,如果更有效率如果用户体验更好之类的。这些可能需要继续把Widows编程给学完。

 

       有了这些条件,昨天晚上我便开始试着编,问题还是不少,由于C++非常不熟,基本上就看了半本的accelerated in C++,所以不免会犯些低级错误,首先是二维数组的构造,居然还要先构造成指针的一维数组,然后写个for循环再构造成一个二维数组,真他妈的麻烦。然后是两数组的赋值,我本意是把一个数组内部的信息赋给另一个数组,结果它把两个数组等同处理了,以前JAVA编程时用到最短路径函数时也碰到过这问题,那时是因为JAVA是把数组当对象处理的,所以一个数组实际上只是一个引用。C++的原因我猜也是类似,估计也只是把数组的地址给赋过去了,所以两个数组指向的地方是一样的,改变了一个数组的元素也便把另一个数组元素给改了,因为本质上他们是一个数组,故后来处理时就写了个for循环一个一个赋值,土是土了点,不过只能想到这个办法了。SetTimer函数那儿也出了点小问题,我原来把SetTimer写到了构造函数里面,出现了Assertion的警告,原因估计是View类还没构造好我就给他设一个定时器了,后来写到了其他函数里面就OK了。

      然后还有一个就是方块和游戏区域的表示,我用的比较土的方法,游戏区域是个12*18的数组,方块也是(这个比较囧,正好手头有本《编程之美》,那儿他们用的是个3*3数组来表示方块,翻转处理可以统一化,我这儿就不行了,哈哈,不过先编着吧),通过用1来表示有方法,0表示空白区域,每个方块都是一个只有四个值为1的数组。我目前只试了一种形状的自由下落,基本上实现,每一秒钟下落一格并重绘一次,下落的具体实现是通过对四个值为1的位置进行下调。目前就只进展到这儿啦,EOF~~~

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值