一个简单的c语言写的俄罗斯方块程序?壹码堂论
ʱ䣺 2019-10-10

  俄罗斯方块的形状一共有19种类型,如果拿数组来表示的话,可能会比较会浪费空间(网上有很多实现代码)

  考虑到每种方块形状的范围是4 *4的小方块,用 字模点阵的方式来存储,即设置一个4行4列的数组,元素置1即代表这个位置有小

  方块,元素置0即代表这个位置无小方块,这个整个的4*4的数组组成俄罗斯方块的形状。

  4*4 =16 bit 正好为short类型,所以每一个方块可以用一个short类型的数据来表示。

  我们把俄罗斯方块点阵的数位存在rockArray中,我们可以事先把这19种方块的字模点阵自己转化成十六进制,然后在rockArray数组的初始化时赋值进去。

  从配置文件中读取方块的类型的代码在(Init.h的ReadRock函数中)在下面3中解释下代码如何实现

  EasyX库是在VC下实现TC的简单绘图功能的一个库,这个库很容易学会(直接 百度EasyX库,里面有详细的教程)

  从short中读取出,可以用一个掩码mask = 1来与short的每个bit位相与,结果为1,则画出一个小方块;

  { //用来表示方块的形状(每一个字节是8位,用每4位表示方块中的一行)

  当我们按“↑”时,把传入画方块函数DrawRock中的rockIndex变为当前方块结构体中的nextRockIndex即可。

  简单解释下ReadRock函数的实现:当读取到空行的时候表示 一种方块已经读取完毕,当读取到****行时 表示同一种类型的方块读取完毕,具体看代码实现,代码中具体的注释

  注:上述预览图的游戏控制区和游戏显示区在Draw.h的DrawGameWindow()函数实现的

  如果敲击键盘了(w ,a ,s ,d, )空格表示暂停,如果在规定时间内没有敲击键盘的话,方块自由下落一个单位

  } //没有 就自动下移一个单位 :不能用else,因为可能按键不是上下左右

  (3)当方块落地(即不能下移了)时,判断是否满行,壹码堂论坛。如果满行则消除,然后再判断游戏是否结束,游戏结束的话,直接退出游戏

  判断满行:FullLine()函数,从最底下的一行开始判断,直到遇到一行空行,

  **比较当前位置的坐标(左上角)开始,能否放下rockIndex的方块。

  在判断满行时,循环找出满行,找出一个满行,就消除一行,然后继续判断是否满行,直到遇到空行