STM32 貪吃蛇小遊戲

2021-10-24 04:45:35 字數 3781 閱讀 3146

功能:貪吃蛇小遊戲

微控制器:stm32f103c8t6

用到的硬體資源:

1.led指示燈

2.矩陣鍵盤

3.oled模組

4.通用定時器

軟體設計:

1.矩陣鍵盤(中斷方式)前面文章有介紹

2.定時器中斷:用於更新遊戲介面

3.貪吃蛇設計:

oled的畫素點是128*64的,為了可以顯示清晰,在這裡把遊戲的點座標對映為32x12(map),每個座標占用16個畫素點,前16行畫素點用於顯示分數。

#define maxlength  100    

//蛇的最大長度

int map[32]

[12]=

;//地圖大小 x,y(乙個座標為4*4個畫素點) 實際按4倍尺寸放大後地圖大小為128*48個畫素點

int score;

//分數

bool eated=false;

//蛇吃到食物的標記

extern u8 keyvalue;

//獲取按鍵值

struct

snake;

//定義結構體變數snake

清除介面函式

void

gui_clear

(int map[32]

[12])

//介面清除

}}

建立地圖函式:填充遊戲介面的邊界座標,並將邊界座標的值存入map陣列

//建立地圖

if(j==

0||j==31)}}}

繪製地圖函式:用畫點函式將座標繪出來,y座標+16是因為前16行用來顯示分數,16行以後為遊戲介面

void

paint_map

(int x,

int y)

//繪製地圖點座標

}}

繪製蛇頭座標函式:

void

paint_head

(int x,

int y )

//繪製蛇頭點座標

if(j==

4*x||j==

4*x+3)}}}

繪製食物座標函式:

void

paint_food

(int x,

int y )

//繪製食物點座標

if(j==

4*x+

1||j==

4*x+2)}}}

重新整理介面函式:根據map陣列裡面的值一次性重新整理遊戲介面內的點座標

void

gui_refresh

(int map[32]

[12])

//介面重新整理}}

oled_refresh_gram()

;}

初始化蛇和地圖函式:初定蛇長度為5、方向向右、蛇頭座標位於(7,5)

void

snake_init()

//蛇及地圖初始化

creat_map

(map)

;}

畫蛇函式:將二維陣列snake.snake_grid裡面的各個蛇座標的值存入map陣列

void

drawsnake()

//畫蛇

}

按鍵處理函式:自定義矩形鍵盤值控制蛇的方向

void

get_command()

//獲取鍵盤值

}

蛇的移動函式:蛇身移動就讓其座標等於前乙個座標的值,蛇頭則根據蛇的方向就行移動

void

move()

//移動

for(i=snake.length-

1;i>

0;i--

)//從尾巴開始,蛇身每乙個點的位置等於它前面乙個點的位置

switch

(snake.direction)

//根據蛇的方向處理蛇頭座標

}

生成食物函式:在遊戲介面內空位生成食物點座標,並將食物座標存入map陣列

int

chek

(int i,

int j)

//檢查地圖空位

return1;

//是空位就返回1

}void

food()

//生成食物

while

(chek

(i,j)==0

);//檢查該點是否為空位

map[i]

[j]=-1

;//畫出食物

}

判斷蛇吃食物:蛇吃到食物後通過eated標記狀態(傳遞給move函式使蛇身+1)、分數+1、重新生成食物

void

eat_food()

//吃食物

}

判斷遊戲是否結束:

bool gameover()

//遊戲結束

if(snake.snake_grid[0]

[0]==

31||snake.snake_grid[0]

[0]==

0|| \

snake.snake_grid[0]

[1]==

11||snake.snake_grid[0]

[1]==

0)//判斷有沒有撞牆

isgameover=true;

return isgameover;

}

顯示分數:

void

show_score()

//顯示分數

定時器中斷:tim4_int_init(4999,7199);//500ms,使用通用定時器進行遊戲重新整理,如果想增加控制蛇前進速度的功能可以通過修改定時器初始化函式實現。

void

tim4_int_init

(u16 arr,u16 psc)

//定時器4中斷服務程式

void

tim4_irqhandler

(void

)//tim4中斷

}

貪吃蛇小遊戲

1 doctype html 2 html 3 head 4 title snake title 5head 6 body style text align center margih 100px background color aaaaaa 7 canvas id canv width 400 ...

STM32和OLED的貪吃蛇遊戲設計

臨近年關,不知道幹啥了,突然對以前的乙個小想法產生了興趣,就把這個貪吃蛇的小遊戲實現了一下。剛好前幾天把oled螢幕調通,這此順便就發揮一下,oled螢幕驅動看這 用了一塊f103c8t6的小板子,iic介面的螢幕,以及8個按鍵直接接在了io口上 io設定為上拉輸入,按鍵另一端接地,所以按鍵按下,i...

C 貪吃蛇小遊戲

自學了幾天c 嘗試寫了乙個貪吃蛇小遊戲,比較詳細地做了注釋,實現 1 貪吃蛇基本功能 2 長按加速 3 計分板 xaml 及介面 namespace 貪吃蛇 新食物生成 public void newfoodgenerate 計時器每乙個計時週期內的時間處理程式 void timer tick ob...