fk_move(); //等待设置速度关数开始
delay(10);
}
for (i=0;i<4;i++)
{
fk_map[i]=0xffff; //背景映象
} delay(3000); for (i=4;i { if (i<(automapn+4)) fk_map[i]=rand()-1|~FULLMAP; //背景映象 else fk_map[i]=~FULLMAP; //背景映象 fk_refline(i); //刷新1行背景 } fk_show(); //显示分数 // fk_new(); //产生新方块 } //--------------------------------------------------------------------------// void fk_move(void) //移动方块 { unsigned char temp; if(KeyTest()) //检查有无按键 { putinbuf(KeyGetCode()); //按键码输入接收缓冲区 } if (checkin()) { temp=getbyte(); if (temp!=0) Lcd16WrCharhh(12,0,temp); if (temp!=0) Lcd16WrChar(15,0,temp); putchar(temp); } else temp=0xff; //无键设为无效键用于下移方块 temp -= '0'; switch(temp) { default: if (--moven) //游戏难度 break; else { moven=(252>>speed)+2; } case 2: //下移 if (fk_run) //游戏中下移 { if(fk_y>0) { fk_y--; if(fk_chk()) { fk_y++; //有冲突取消操作,执行碰撞组合 fk_add(); //方块合并 //产生新方块 } } else //方块到底也执行碰撞组合 { fk_add(); //方块合并 } } else //初始化时 { fk_new(); //产生新方块 } break; case 0: //下移到底 while((fk_y>0)&&~(fk_chk())) //一直下移直到冲突 { fk_y--; } moven=1; fk_y++; //恢复到未冲突位置 break; case 3: //右移 case 6: //右移 if (fk_run) //游戏中右移 { if(fk_x<12) { fk_x++; if(fk_chk()) fk_x--;//有冲突取消操作 } } else //初始化时 { automapn++; automapn &= 0x0f; fk_show(); //显示分数 } break; case 1: //左移 case 4: //移 if (fk_run) //游戏中左移 { if(fk_x>0) { fk_x--; if(fk_chk()) fk_x++;//有冲突取消操作 } } else //初始化时 { speed++; speed &= 0x07; fk_show(); //显示分数 } break; case 9: //右转 case 8: //右转 case 5: //右转 if (fk_run) //游戏中右转 { fk_r++; if(fk_chk()) fk_r--; //有冲突取消操作 fk_r &= 0x03; } else //初始化时 { fk_run = 1; } break; case 7: //左转 if (fk_run) //游戏中右转 { fk_r--; if(fk_chk()) fk_r++; //有冲突取消操作 fk_r &= 0x03; } else //初始化时 { fk_run = 1; } break; } if((fk_run)&& ((fk_x!=fk_oldx)||(fk_y!=fk_oldy)||(fk_r!=fk_oldr)) ) { fk_reffk(); //刷新显示 } rand(); } /* // ---------------------------------------------- // 32字节 void delay(uint x) { uint i,j; for (i=0; i } } //--------------------------------------------------------------------------// void main(void) // 测试用 { serial_init(); Lcd6963Init(); //Lcd6963复位 Lcd16Reset(); //Lcd16复位 Serial_main(); // 串口测试用主函数 Lcd16main(); //Lcd16临时测试主程序 Lcd6963main(); //Lcd6963测试用 fk_init(); //方块初始化 while(1) { if (~fk_run) fk_init(); //方块初始化 fk_move(); //移动方块 delay(10); } } */ 把Keil工程和Proteus6.5的仿真文件一起打包了 点 这 里 可 以 完 全 下 载 //本压缩包包含完整的Keil工程和Proteus仿真文件, //如果你装有Proteus6.5,可以解压后直接运行Lcd-6963256-2.DNS,然后点击播放键|>运行, //用鼠标在串口点击一下就可以用电脑的键盘控制了,当然也可以用电路图上的键盘控制,不过那个键盘不是很好操作哦:-)