简单吗!对!不就是画20条横线,20条竖线吗!查下MSDN,MoveToEx()是用来设定起始点的,Li
eTo()是用来画起点到终点的线。当然画线是用画笔去画的。那得创建具有这些要求的画笔了。两句话就搞定了:HPENhpe
CreatePe
PS_SOLID1RGB25500SelectObjecthdchpe
接下来画20条横线20条竖线吧。这个就是Desig
()函数所完成的功能。
当然这里需要给每个格子一个定位坐标,程序中已经默认使用了。也很简单,就是我们在脑子里面给它一个坐标系就行了。比方说(0,0)代表的是左上角第一个格子,而(1919代表的是右下角的格子。假如一个格子的坐标为(xy),那么这个格子的左上顶点的实际坐标是多少呢?能想出来吧,不行就在纸上画画,是(xWidthyHeight)。这个我们在后面产生随机数,记录蛇节点,食物的位置等的时候要用到的。
看到这里想必敏感的人可能已经知道怎么画蛇了吧,不也是用画笔画线吗,只不过线粗点而已,是不是?画食物也是一样的道理,简单得来吧具体的操作参考一下函数DrawS
ake(),DrawFood()。
到这里,游戏所涉及的画图的知识就这么多。相信你可以用画笔画线、画矩形了吧。这在这里就足够了。是不是很简单呢?的确,这游戏一点都不难,要不然我这个阿斗怎么就编出来了呢?BelieveyourselfLetsco
ti
ue
2
f数据结构
下面得说说所涉及到的链表这个数据结构了。我们这里的蛇是一个个连续的格子组合在一起的,我们只要定义一个结构体记录格子的位置,那么蛇就是这些结构体所组成的链表了。结构体定义如下:StructNode
I
txI
tyNode
extStructs
akeNodeheadNodetailI
tle
gth
功能模块
我们在初始的时候,规定蛇的长度是1,所在的位置是(0,0)格子中。这是I
it()函数所完成的功能。
先不管蛇每隔1秒钟就按照原来的方向向前移动一个格子,也不管蛇吃到食物后长度增壹。这些统统都先不管,因为我们有比这还迫切的任务需要解决,这个问题解决不了,前面两个问题是怎么也实现不好的。您知道是什么问题吗?想想自己是怎么玩贪吃蛇游戏的?啊上下左右控制蛇的运动方向啊!是吧。。。
这里为了方便,我使用的不是箭头,而是w上)、s(下)、a(左)、d(右),我现在需要完成的功能是:蛇的初始位置在(0,0)格子,初始的方向是右。我每按一次d(是小写的啊),蛇就向前移动一个格子,我不按d(也没按w、s、a或者你懂的)蛇就不动。
这个问题的本质就是将先前的窗口内图形擦除,然后再重新绘制一幅图形(画格子,画食物,画蛇新的位置)。
r