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