已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
本人移植的STM32貪吃蛇游戲,親測可行,以下為貪吃蛇驅(qū)動snake.c與snake.h,還有main.c,希望能對大家有點幫助。/*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 /最大長度struct u8 XSNAKE_Max_Long;u8 YSNAKE_Max_Long;u8 Long; u8 Life; u8 Score;/蛇的分數(shù)u8 Level;/蛇的等級 Snake;/蛇結(jié)構(gòu)體/=/函數(shù)名稱:Trun_On_Point Trun_Off_Point (u8 x,u8 y)/函數(shù)功能:點亮或者熄滅 一個點。用于顯示蛇身體/入口參數(shù):無/出口參數(shù):無/特別說明:此 Trun_On,函數(shù)換成其他的就可以兼容其他的液晶/ 入8*8 點陣 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ù)功能:繪制游戲界面,初始化游戲等級等參數(shù)/入口參數(shù):無/出口參數(shù):無/=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);/繪制一個矩形框, 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; /定義初始化蛇的長度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+)/將蛇給畫出來Trun_On_Point(Snake.Xi,Snake.Yi);/=/函數(shù)名稱:void Display_dead(u8 i) /函數(shù)功能:顯示死亡界面/入口參數(shù):無/出口參數(shù):無/=void Display_dead(void)LCD_Clear(BLACK);LCD_Fill(0,0,8,280,DARKBLUE);/Rectangle(8,8-1,85,120,0xaa);/繪制一個矩形框, 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ān)界面/入口參數(shù):無/出口參數(shù):無/=void Display_Pass(void)Snake.Level+;LCD_Clear(BLACK);LCD_Fill(0,0,8,280,DARKBLUE);/Rectangle(8,8-1,85,120,0xaa);/繪制一個矩形框, 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ù)功能:蛇運動函數(shù) (游戲精華)/入口參數(shù):無/出口參數(shù):無/=void Run_SNAKE(void)u8 i=0;/*根據(jù)按鍵選擇蛇的運動方向*/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; /蛇頭向你要求的方向移動for(i=0;iSnake.Long;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; /蛇頭向你要求的方向移動for(i=0;iSnake.Long;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; /蛇頭向你要求的方向移動for(i=0;iSnake.Long;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; /蛇頭向你要求的方向移動for(i=0;iSnake.Long;i+) /這個讓蛇顯示出來的函數(shù)Trun_On_Point(Snake.Xi,Snake.Yi);Key_V_temp=KEY_DOWN;/*根據(jù)按鍵選擇蛇的運動程序結(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é)束*/*判斷蛇是否最長了*/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; /獲得隨機數(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)/ /*延時用于調(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ā)板實驗13/TFTLCD顯示實驗 /技術(shù)支持:/廣州市星翼電子科技有限公司void Key()u8 t;t=KEY_Scan(0);/得到鍵值 if(t) switch(t) case KEY_UP:/控制
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025項目施工合同模板
- 2025房屋建筑合同模板 房屋建筑合同
- 2025專業(yè)版電子版權(quán)委托代理合同
- 二零二五年度XX房地產(chǎn)公司收取管理費合作協(xié)議3篇
- 二零二五年度股權(quán)代持與公司研發(fā)創(chuàng)新合作協(xié)議3篇
- 2025年度農(nóng)機設(shè)備委托管理與農(nóng)業(yè)人才培養(yǎng)協(xié)議3篇
- 二零二五年度特色農(nóng)產(chǎn)品電商平臺合作合同范本3篇
- 2025年度養(yǎng)老院老人外出看護責(zé)任約定協(xié)議3篇
- 2025年度全新二零二五年度離婚后子女心理輔導(dǎo)及關(guān)愛協(xié)議3篇
- 二零二五年度養(yǎng)殖場品牌授權(quán)與合作承包協(xié)議3篇
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實踐指導(dǎo)材料之18:“7支持-7.1資源”(雷澤佳編制-2025B0)
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實踐指導(dǎo)材料之17:“6策劃-6.6合作”(雷澤佳編制-2025B0)
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實踐指導(dǎo)材料之16:“6策劃-6.5組織結(jié)構(gòu)”(雷澤佳編制-2025B0)
- GB/T 45016-2024發(fā)動機附件帶傳動系統(tǒng)機械式自動張緊輪試驗方法
- 南寧市三好學(xué)生主要事跡(8篇)
- 2024版玻璃幕墻工程材料采購合同2篇
- 全國英語教師賽課一等獎七年級上冊(人教2024年新編)《Unit 7 Happy Birthday》教學(xué)設(shè)計
- 2025年婦產(chǎn)科工作計劃
- 《寒假安全教育班會》課件模板四套
- (T8聯(lián)考)2025屆高三部分重點中學(xué)12月第一次聯(lián)考 生物試卷(含答案詳解)
- 報關(guān)稅費代繳服務(wù)合同
評論
0/150
提交評論