|
使用面向对象的思想写的
旧版
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)
|
|