一、設計要求
(1)利用51單片機,設計一款俄羅斯方塊游戲,完成硬件電路的開發和程序的編寫調試;
(2)采用LCD12864液晶作為游戲運行界面;
(3)利用按鍵輸入靈活控制方塊的移動與變形;
(4)能夠提示玩家下個方塊的形狀,顯示游戲得分、游戲計時等內容;
二、系統概述
本文設計了一款基于AT89C51單片機的俄羅斯方塊游戲機,整個系統分為硬件和軟件兩部分。
硬件部分由電源模塊、單片機最小系統、LCD12864顯示模塊和獨立按鍵模塊組成。軟件部分則基于C語言進行開發,來完成游戲的邏輯設計與算法設計,系統框圖如下所示。
本設計實現的基本功能是,單片機在顯示屏上端隨機輸出7種不同類型的方塊圖形(長條形、Z字形、反Z形、田字形、7字形、反7形、T字形),并使方塊勻速下落填充到給定區域。設計獲取,蔣宇智QQ(2327603104)。
在下落過程中,玩家通過鍵盤(上、下、左、右鍵)對方塊進行變換、下移、左移和右移操作。當方塊填滿一行或多行時便消行得分,一直到方塊堆積到顯示屏上端且無法消行時,游戲才結束。
Proteus仿真電路
原理圖
仿真結果分析
打開俄羅斯方塊仿真(文件為:俄羅斯方塊仿真.DSN),雙擊單片機加載Game.hex文件(位于C程序文件夾內),運行仿真,結果如下圖所示。
LCD12864左屏頂端隨機生成方塊圖形并下落;LCD右屏則顯示:提示下一方塊的形狀、游戲得分(SCORE)、游戲計時等內容。設計獲取,關注公眾號:交院小智。
玩家可以通過四個按鍵,對方塊進行變換、左移、右移和下移。當方塊填滿一行或多行時,消行得分。下圖顯示,游戲已運行1分47秒,玩家得分為2分。
當方塊堆積到界面頂端且無法消行時,游戲結束。此時,游戲界面顯示Game Over,短暫等待后,又開始新一輪游戲。
綜上所述,俄羅斯方塊Proteus仿真能夠正常運行,滿足設計功能及要求,達到了本次設計的預期效果。
部分C代碼
unsigned char checkClask(void)
{unsigned char row,column,temp;unsigned char hang,lie;for(row=0;row<4;row++){temp=1;for(column=0;column<4;column++){if(this.box[row] & temp){hang=this.row+row;lie=this.column+column;if(cubeMap[hang][lie/8] & bittable[lie%8])return 1;}temp<<=1;}}return 0;
}
//-------------------------------------------------------------------
void checkMap(void)
{unsigned char i,j,delete;bit full;full=0;delete=0;for(i=MAXHANG-1;i>0;i--){if(cubeMap[i][0]==0 && cubeMap[i][1]==0)break;if(cubeMap[i][0]==0xff && cubeMap[i][1]==0xff){delete++;full=1;for(j=i;j>0;j--){cubeMap[j][0]=cubeMap[j-1][0];cubeMap[j][1]=cubeMap[j-1][1];}i++;cubeMap[0][0]=0;cubeMap[0][1]=0;}}