|
前段時(shí)候在家沒事閑的沒事干,手里有個(gè)C8T6單片機(jī)和oled,就想著做個(gè)貪吃蛇,以前想著應(yīng)該很復(fù)雜,做完后覺得只要理解了關(guān)鍵的地方,就很簡單,就if else if else就完事,哈哈。oled用的是4腳i2c的,基本的操作實(shí)現(xiàn)后發(fā)現(xiàn)最快的游戲速度也不是很快,所以編寫了速度選擇部分代碼也沒用,要是手里有能用spi驅(qū)動(dòng)的7腳oled,應(yīng)該能更快,目前就這樣。我在工程代碼里最開始寫了這個(gè)貪吃蛇的關(guān)鍵部分和一些其他東西,如下
上傳這個(gè)東東是為了分享一下,說不定能幫到別人(實(shí)際是想賺點(diǎn)幣,好下載其他東東,哈哈)。下面是具體的圖,左邊時(shí)游戲區(qū),右邊是得分和游戲所用時(shí)間,控制方向用的是四個(gè)按鍵
  
做的這個(gè)東西所有有關(guān)的工程代碼里都有,oled引腳 按鍵引腳 邏輯判斷什么什么的,我覺得寫的還挺詳細(xì),下面貼一段代碼,全部工程傳到附件。能力有限,代碼寫的不怎么好,但是整體是沒有什么BUG的。OK,完事(希望能賞點(diǎn)幣哈,哈哈)。
單片機(jī)源程序如下:
- int snake[20][8]; //用于存放蛇身位置數(shù)據(jù)
- int Snakehead[8]; //用于存放蛇頭位置數(shù)據(jù)
- int Snaketail[8]; //用于存放蛇尾位置數(shù)據(jù)
- int food[8]; //食物位置數(shù)據(jù) 四個(gè)小格為一個(gè)食物 儲存順序順序?yàn)?上左 上右 下左 下右
- void Srand(void);
- void mapinit(void); //初始化地圖
- void snakeinit(void);//初始化蛇位置
- void creatfoof(void); //產(chǎn)生食物
- void contr(void); //按鍵控制移動(dòng)方向 定時(shí)器定時(shí)掃描
- void move(void); //移動(dòng)
- void eat(void); //吃到食物
- void dispaly(void); //顯示分?jǐn)?shù)和步數(shù)
- void out(void); //游戲結(jié)束判斷
- void start(void); //
- void Speed(void); //速度選擇 暫時(shí)沒用到
- int up,dowm,left,right;
- char txt[10];
- int size=1; [attach]242723
- int Sped=2;
- u8 adc; //ADC采集數(shù)據(jù)做隨機(jī)種子
- u16 time=0; //所用時(shí)間
- int time_flag=0; //開始計(jì)時(shí)表示 在定時(shí)器中計(jì)時(shí)
- int main()
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
- delay_init();
- LED_Init();
- keyinit();
- OLED_Init();
- Adc_Init();
- TIM3_Int_Init(200,7199); //20ms一次
- Srand();
- mapinit(); //初始化地圖
- snakeinit(); //初始化蛇頭位置
- creatfoof(); //創(chuàng)建一個(gè)食物
- up=dowm=left=right=0; //初始化方向
- while(1)
- {
- Srand();
- move();
- eat();
- dispaly();
- out();
- // Speed();
- }
- }
復(fù)制代碼 制作出來的實(shí)物圖如下:
|
-
-
-
-
-
貪吃蛇.7z
2020-7-6 00:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
235.78 KB, 下載次數(shù): 175, 下載積分: 黑幣 -5
評分
-
查看全部評分
|