




已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本人移植的STM32貪吃蛇游戲,親測(cè)可行,以下為貪吃蛇驅(qū)動(dòng)snake.c與snake.h,還有main.c,希望能對(duì)大家有點(diǎn)幫助。/*snake.c*/#include SNAKE.h#include lcd.h#include key.h/#include stdlib.h#include delay.hu8 Key_V_temp=0; /取出上次按鍵值u8 Key_Value=0; /取出上次按鍵值 /=/ 使用結(jié)構(gòu)體定義變量 使程序的名稱更加的清楚/=struct u8 X;u8 Y; u8 Yes;Food;/食物結(jié)構(gòu)體#define SNAKE_Max_Long 10 /最大長(zhǎng)度struct u8 XSNAKE_Max_Long;u8 YSNAKE_Max_Long;u8 Long; u8 Life; u8 Score;/蛇的分?jǐn)?shù)u8 Level;/蛇的等級(jí) Snake;/蛇結(jié)構(gòu)體/=/函數(shù)名稱:Trun_On_Point Trun_Off_Point (u8 x,u8 y)/函數(shù)功能:點(diǎn)亮或者熄滅 一個(gè)點(diǎn)。用于顯示蛇身體/入口參數(shù):無(wú)/出口參數(shù):無(wú)/特別說(shuō)明:此 Trun_On,函數(shù)換成其他的就可以兼容其他的液晶/ 入8*8 點(diǎn)陣 12864 等/=void Trun_On_Point (u8 x,u8 y)LCD_Fill(u16)(x*8),(u16)(y*8),(u16)(x*8+8),(u16)(y*8+8),RED);void Trun_Off_Point (u8 x,u8 y)LCD_Fill(u16)(x*8),(u16)(y*8),(u16)(x*8+8),(u16)(y*8+8),BLACK);/=/函數(shù)名稱:void Init_SNAKE(void) /函數(shù)功能:繪制游戲界面,初始化游戲等級(jí)等參數(shù)/入口參數(shù):無(wú)/出口參數(shù):無(wú)/=void Init_SNAKE(void) u8 i;POINT_COLOR=WHITE;/畫筆顏色BACK_COLOR=BLACK; /背景色 /*繪制游戲界面*/LCD_Fill(0,0,8,280,DARKBLUE);/Rectangle(8,8-1,85,120,0xaa);/繪制一個(gè)矩形框, 0-127LCD_Fill(232,0,240,280,DARKBLUE);/LCD_Fill(0,0,240,8,DARKBLUE);/LCD_Fill(0,272,240,280,DARKBLUE);/ LCD_ShowString(0,280,200,16,16,Score);/Show ScoreLCD_ShowString(0,300,200,16,16,LEVEL);/Show LevelLCD_ShowNum(50,280,(u32)Snake.Score,4,16);LCD_ShowNum(50,300,(u32)Snake.Level,4,16);/LCDShow_u8Number(96,97,Snake.Level,0x00ff,0xBE5F);/*初始化蛇參數(shù)*/Snake.Long=2; /定義初始化蛇的長(zhǎng)度Snake.Life=0; /初始化蛇還活著Snake.Score=0;Food.Yes=1;Key_Value=0; Key_V_temp=0;for(i=0;iSnake.Long;i+)/將蛇給賦值Snake.Xi=i+14;Snake.Yi=17;for(i=0;iSnake.Long;i+)/將蛇給畫出來(lái)Trun_On_Point(Snake.Xi,Snake.Yi);/=/函數(shù)名稱:void Display_dead(u8 i) /函數(shù)功能:顯示死亡界面/入口參數(shù):無(wú)/出口參數(shù):無(wú)/=void Display_dead(void)LCD_Clear(BLACK);LCD_Fill(0,0,8,280,DARKBLUE);/Rectangle(8,8-1,85,120,0xaa);/繪制一個(gè)矩形框, 0-127LCD_Fill(232,0,240,280,DARKBLUE);/LCD_Fill(0,0,240,8,DARKBLUE);/LCD_Fill(0,272,240,280,DARKBLUE);/LCD_ShowString(0,280,200,16,16,GAME OVER! );LCD_ShowString(0,300,200,16,16,PRESS ENTER TO RESTART); while(Key_Value!=KEY_DOWN) Key_Value=KEY_Scan(0); LCD_Clear(BLACK);Init_SNAKE();/=/函數(shù)名稱:void Display_Pass(u8 i)/函數(shù)功能:顯示過(guò)關(guān)界面/入口參數(shù):無(wú)/出口參數(shù):無(wú)/=void Display_Pass(void)Snake.Level+;LCD_Clear(BLACK);LCD_Fill(0,0,8,280,DARKBLUE);/Rectangle(8,8-1,85,120,0xaa);/繪制一個(gè)矩形框, 0-127LCD_Fill(232,0,240,280,DARKBLUE);/LCD_Fill(0,0,240,8,DARKBLUE);/LCD_Fill(0,272,240,280,DARKBLUE);/ LCD_ShowString(0,280,200,16,16,YOU ARE WIN!);LCD_ShowString(0,300,200,16,16,PRESS ENTER TO CONTINUE); while(Key_Value!=KEY_DOWN) Key_Value=KEY_Scan(0); LCD_Clear(BLACK);Init_SNAKE();/=/函數(shù)名稱:void Run_SNAKE(void)/函數(shù)功能:蛇運(yùn)動(dòng)函數(shù) (游戲精華)/入口參數(shù):無(wú)/出口參數(shù):無(wú)/=void Run_SNAKE(void)u8 i=0;/*根據(jù)按鍵選擇蛇的運(yùn)動(dòng)方向*/if(Key_Value=KEY_RIGHT&Key_V_temp!=KEY_LEFT)|(Key_Value=KEY_LEFT&Key_V_temp=KEY_RIGHT)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾給熄滅掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2+1;Snake.YSnake.Long-1=Snake.YSnake.Long-2+0; /蛇頭向你要求的方向移動(dòng)for(i=0;iSnake.Long;i+) /這個(gè)讓蛇顯示出來(lái)的函數(shù)Trun_On_Point(Snake.Xi,Snake.Yi);Key_V_temp=KEY_RIGHT;if(Key_Value=KEY_LEFT&Key_V_temp!=KEY_RIGHT)|(Key_Value=KEY_RIGHT&Key_V_temp=KEY_LEFT)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾給熄滅掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2-1;Snake.YSnake.Long-1=Snake.YSnake.Long-2+0; /蛇頭向你要求的方向移動(dòng)for(i=0;iSnake.Long;i+) /這個(gè)讓蛇顯示出來(lái)的函數(shù)Trun_On_Point(Snake.Xi,Snake.Yi);Key_V_temp=KEY_LEFT;if( Key_Value=KEY_UP&Key_V_temp!=KEY_DOWN)|( Key_Value=KEY_DOWN&Key_V_temp=KEY_UP)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾給熄滅掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2+0;Snake.YSnake.Long-1=Snake.YSnake.Long-2-1; /蛇頭向你要求的方向移動(dòng)for(i=0;iSnake.Long;i+) /這個(gè)讓蛇顯示出來(lái)的函數(shù)Trun_On_Point(Snake.Xi,Snake.Yi);Key_V_temp=KEY_UP;if( Key_Value=KEY_DOWN&Key_V_temp!=KEY_UP)|( Key_Value=KEY_UP&Key_V_temp=KEY_DOWN)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾給熄滅掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2+0;Snake.YSnake.Long-1=Snake.YSnake.Long-2+1; /蛇頭向你要求的方向移動(dòng)for(i=0;iSnake.Long;i+) /這個(gè)讓蛇顯示出來(lái)的函數(shù)Trun_On_Point(Snake.Xi,Snake.Yi);Key_V_temp=KEY_DOWN;/*根據(jù)按鍵選擇蛇的運(yùn)動(dòng)程序結(jié)束*/*判斷蛇是否死亡*/if(Snake.XSnake.Long-1=30|Snake.YSnake.Long-1=33)/判蛇頭是否撞到墻壁Snake.Life=1;for(i=3;iSnake.Long;i+)/從第三節(jié)開始判斷蛇頭是否咬到自己if(Snake.Xi=Snake.X0&Snake.Yi=Snake.Y0)Snake.Life=1;if(Snake.Life=1) /if the snake overDisplay_dead();/*判斷蛇是否死亡程序結(jié)束*/*判斷蛇是否最長(zhǎng)了*/if(Snake.Long=SNAKE_Max_Long)Display_Pass();/ /*判蛇是否吃到食物*/if(Snake.XSnake.Long-1=Food.X&Snake.YSnake.Long-1=Food.Y)/Trun_Off_Point(Food.X,Food.Y); /消隱食物Snake.Long+;/蛇節(jié)數(shù)加1Snake.XSnake.Long-1=Food.X;Snake.YSnake.Long-1=Food.Y;Snake.Score+=10;LCD_ShowNum(50,280,(u32)Snake.Score,4,16);Food.Yes=1; /食物標(biāo)志置1/*放果子程序*/if(Food.Yes=0)Trun_On_Point(Food.X,Food.Y); if(Food.Yes=1)while(1)Food.X=rand()%28+1; /獲得隨機(jī)數(shù)Food.Y=rand()%28+1; for(i=0;iSnake.Long;i+)/判斷產(chǎn)生的食物坐標(biāo)是否和蛇身重合if(Food.X=Snake.Xi)&(Food.X=Snake.Yi)break;if(i=Snake.Long)Food.Yes=0;break;/產(chǎn)生有效的食物坐標(biāo)/ /*延時(shí)用于調(diào)整游戲速度*/delay_ms(100-Snake.Level*10);/*snake.h*/#include stm32f10x.h#ifndef _SNAKE_H_#define _SNAKE_H_#ifndef uchar#define uchar unsigned char #endif#ifndef uint#define uint unsigned int #endifvoid Init_SNAKE(void);void Run_SNAKE(void);void Display_Pass(void);void Display_dead(void);void Trun_On_Point (u8 x,u8 y);void Trun_Off_Point (u8 x,u8 y);extern u8 Key_V_temp; /取出上次按鍵值extern u8 Key_Value; /取出上次按鍵值/extern void Trun_On_Point (uchar x,uchar y,uchar color);#endif/*main.h*/#include led.h#include delay.h#include key.h#include sys.h#include lcd.h#include usart.h#include snake.h/ALIENTEK戰(zhàn)艦STM32開發(fā)板實(shí)驗(yàn)13/TFTLCD顯示實(shí)驗(yàn) /技術(shù)支持:/廣州市星翼電子科技有限公司void Key()u8 t;t=KEY_Scan(0);/得到鍵值 if(t) switch(t) case KEY_UP:/控制
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 24212-2025甲基萘油
- 顱腦非腫瘤病變
- 二手房抵押合同協(xié)議書
- 銀行債權(quán)承攬協(xié)議書
- 駐場(chǎng)人員管理協(xié)議書
- 轉(zhuǎn)讓醬菜技術(shù)協(xié)議書
- 裝修委托代管協(xié)議書
- 項(xiàng)目聯(lián)合投資協(xié)議書
- 菏澤港口合作協(xié)議書
- 高齡健身免責(zé)協(xié)議書
- 杭州市2025年中考作文《勇敢自信》寫作策略與范文
- 起重機(jī)司機(jī)(限橋式)Q2特種設(shè)備作業(yè)人員資格鑒定參考試題(附答案)
- 熱點(diǎn)主題作文寫作指導(dǎo):古樸與時(shí)尚(審題指導(dǎo)與例文)
- 河南省洛陽(yáng)市2025屆九年級(jí)下學(xué)期中考一模英語(yǔ)試卷(原卷)
- 成都設(shè)計(jì)咨詢集團(tuán)有限公司2025年社會(huì)公開招聘(19人)筆試參考題庫(kù)附帶答案詳解
- 2025年上海市金融穩(wěn)定發(fā)展研究中心招聘考試模擬測(cè)試
- 河北開放大學(xué)2025年《醫(yī)用基礎(chǔ)化學(xué)#》形考任務(wù)4答案
- 遼寧省名校聯(lián)盟2025屆高三下學(xué)期高考模擬押題卷生物學(xué)(三)試題(有解析)
- 房屋市政工程生產(chǎn)安全重大事故隱患判定檢查表(2024版)
- 江蘇南京茉莉環(huán)境投資有限公司招聘筆試題庫(kù)2025
- 鋁屑粉塵清掃管理制度
評(píng)論
0/150
提交評(píng)論