|
使用面向對象的思想寫的
舊版
P0 反接 行控
P1 正接 獨立鍵盤
P2 正接 紅色點陣
P3 反接 綠色點陣
新版
P0 反接 行控
P1 反接 綠色
P2 正接 紅色
獨立鍵盤:
K1 重啟游戲
K3 向上
K6 向左
K7 向下
K8 向右
紅外遙控:
電源 重啟
5 向上
7 向左
8 向下
9 向右
單片機源程序如下:
- #include "MatrixLED.h"
- #include "Snake.h"
- #include "Food.h"
- #include "KeyboardInput.h"
- void StartGame(Snake * snake,Food * food); //初始化snake,food
- unsigned char UpdateByKeyboard(Snake * snake); //鍵盤輸入更新
- unsigned char UpdateByInfrared(Snake * snake); //根據紅外遙控輸入更新
-
- void UpdateFood(Food * food); //更新食物
- void main(void)
- {
- int startPeriod = 3000; //速度
- int minPeriod = 5000; //初始長度
- int gradient = 50; //難度梯度
- Snake snake; //蛇對象
- Food food; //食物對象
- StartGame(&snake,&food); //初始化游戲成員對象
- while (1)
- {
- InitRedMatrix(); //初始化點陣
- InitGreenMatrix();
- //檢測碰撞(包括吃食物),碰到自己返回1,如果輸入到重啟鍵,返回0
- if (SnakeCollision(&snake, &food) || UpdateByKeyboard(&snake) == 0 /*|| UpdateByInfrared(&snake) == 0*/)
- {
- ShowExplode(500);
- StartGame(&snake,&food);
- continue;
- }
- SnakeMove(&snake); //更新蛇位置
- UpdateFood(&food); //更新食物
-
- UpdateCol(); //檢查并更新每列數值
- ShowMatrix(startPeriod - snake._length * gradient); //顯示點陣,參數是周期。
- }
- }
- void StartGame(Snake * snake, Food * food)
- {
- InitSnake(snake);
- InitFood(food);
- }
- void UpdateFood(Food * food)
- {
- if (!FoodExist(food)) //判斷是否存在食物,沒有就加啊
- FoodsetPos(food, GetRandomFreePos());
-
- FoodShow(food); //顯示食物
- }
- unsigned char UpdateByKeyboard(Snake * snake)
- {
- unsigned char keyNum = 0;
- keyNum = Key_Scan(); //掃描鍵盤
- if (IsDirection(GetDirectionFromKey(keyNum))) //判斷是否為方向
- SnakeSetDir(snake, GetDirectionFromKey(keyNum));
- if (OnClickRestartKey(keyNum))
- return 0;
- return 1;
- }
- //食物
復制代碼
所有資料51hei提供下載:
EngorgeSnake-master.zip
(77.54 KB, 下載次數: 6)
2017-6-20 11:19 上傳
點擊文件名下載附件
貪吃蛇 下載積分: 黑幣 -5
|
|