凡是官网购买产品,均可以获得积分,(积分可以用来下载技术资料)还可以获得精致技术支持。澳门开元棋牌色情_澳门开元棋牌官网_开元棋牌输了25万实验室可提供全套电子方案定制服务,了解详情请咨询客服。???????????
查看: 20|回复: 1
打印 上一主题 下一主题

澳门开元棋牌色情_澳门开元棋牌官网_开元棋牌输了25万开源小项目-捡金币小游戏

[复制链接]
跳转到指定楼层
楼主
本帖最后由 澳门开元棋牌色情_澳门开元棋牌官网_开元棋牌输了25万小技术 于 2019-10-19 15:14 编辑

本次趣味小项目是一个捡金币的小游戏,是一个LCD1602显示屏制作的小游戏。在这个游戏中,需要玩家控制人物去捡随机出现在屏幕中的金币,并不断躲避可能出现的怪物,最后所捡金币的数量即是玩家的得分。
一、材料
我们需要准备以下材料:
澳门开元棋牌色情_澳门开元棋牌官网_开元棋牌输了25万标准板
LCD1602显示屏+转接板
按键5个
面包板+杜邦线

二、接线

实物接线如下


三、工程代码
主要代码
定义及初始化如下:
[C++] 纯文本查看 复制代码
/**********************************************************
*    文件: catchcoin.ino      by 澳门开元棋牌色情_澳门开元棋牌官网_开元棋牌输了25万实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
*    -^^- 澳门开元棋牌色情_澳门开元棋牌官网_开元棋牌输了25万开源,让电子制作变得更简单! -^^-
*    时间: 2019/10/08 10:19
*    说明:
************************************************************/
#include 

LiquidCrystal_I2C lcd(0x3f,16,2);  //初始化LCD1602显示屏

#define btnRIGHT  0  //按键
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

//#define ledPIN    13

#define PLAYER_CHAR  0
#define COIN_CHAR    1
#define MONSTER_RIGHT_CHAR 2
#define MONSTER_LEFT_CHAR 3
#define MONSTER_CLOSED_CHAR 4

#define DIR_RIGHT 0  //用于怪物的移动
#define DIR_LEFT  1

String whiteLine = "                ";
int playerPos[2]; //玩家坐标{x,y}
int coinPos[2]; //金币{x,y}
int monsters[2][3]; //怪物{x,y,dir}
int score;
boolean walls;
long loopNumber;
long loopDelay;
long lastGameEnd;

// 复位或上电后运行一次:
void setup() {
    //在这里加入初始化相关代码,只运行一次:
        Serial.begin(9600);
        randomSeed(analogRead(9));
        pinMode(btnDOWN,INPUT_PULLUP);
        pinMode(btnLEFT,INPUT_PULLUP);
        pinMode(btnRIGHT,INPUT_PULLUP);
        pinMode(btnSELECT,INPUT_PULLUP);
        pinMode(btnUP,INPUT_PULLUP);
        reset();
        lcd.init();
        lcd.backlight();
        displayStartSequence();
        drawField();
        lastGameEnd = millis();
}


怪物移动及随机生成金币
[C++] 纯文本查看 复制代码
void moveMonsters() {  //移动怪物位置
        if(loopNumber % 3 == 0) {
                for(int i = 0; i<2; i++) {
                        int* monsterPos = monsters[i];
                        if(monsterPos[0] == 15) {
                                monsterPos[2] = DIR_LEFT;
                                monsterPos[0] = 14;
                        } else if(monsterPos[0] == 0) {
                                monsterPos[2] = DIR_RIGHT;
                                monsterPos[0] = 1;
                        } else if(monsterPos[2] == DIR_RIGHT) {
                                monsterPos[0] += 1;
                        } else {
                                monsterPos[0] -= 1;
                        }
                }
        }
        if(loopNumber % 6 == 2) {
                for(int i = 0; i<2; i++) {
                        int* monsterPos = monsters[i];
                        if(monsterPos[0] == 15) {
                                monsterPos[2] = DIR_LEFT;
                                monsterPos[0] = 14;
                        } else if(monsterPos[0] == 0) {
                                monsterPos[2] = DIR_RIGHT;
                                monsterPos[0] = 0;
                        } else if(monsterPos[2] == DIR_LEFT) {
                                monsterPos[0] -= 1;
                        }
                }
        }
        if(loopNumber % 6 == 4) {
                for(int i = 0; i<2; i++) {
                        int* monsterPos = monsters[i];
                        if(monsterPos[0] == 15) {
                                monsterPos[2] = DIR_LEFT;
                                monsterPos[0] = 15;
                        } else if(monsterPos[0] == 0) {
                                monsterPos[2] = DIR_RIGHT;
                                monsterPos[0] = 1;
                        } else if(monsterPos[2] == DIR_RIGHT) {
                                monsterPos[0] += 1;
                        }
                }
        }
}
void generateNewCoin() {  //随机生成金币位置
        coinPos[0] = random(0,16);
        coinPos[1] = random(0,2);
}


按键控制移动:
[C++] 纯文本查看 复制代码
void read_buttons()  //读取按钮
{
        if(digitalRead(btnRIGHT) == LOW)
        {
                Serial.println("right");
                rightKeyPressed();
        }
        else if(digitalRead(btnLEFT) == LOW)
        {
                Serial.println("left");
                leftKeyPressed();
        }
        else if(digitalRead(btnUP) == LOW)
        {
                Serial.println("up");
                upKeyPressed();
        }
        else if(digitalRead(btnDOWN) == LOW)
        {
                Serial.println("down");
                downKeyPressed();
        }
        else if(digitalRead(btnSELECT) == LOW)
        {
                Serial.println("select");
                selectKeyPressed();
        }
}
//按键处理
void selectKeyPressed() {
        showScores();
}
void leftKeyPressed() {
        if(playerPos[0] == 0) {
                playerPos[0] = walls ? 0 : 15;
        } else {
                playerPos[0] -= 1;
        }
}
void rightKeyPressed() {
        if(playerPos[0] == 15) {
                playerPos[0] = walls ? 15 : 0;
        } else {
                playerPos[0] += 1;
        }
}
void upKeyPressed() {
        if(playerPos[1] == 0) {
                playerPos[1] = walls ? 0 : 1;
        } else {
                playerPos[1] -= 1;
        }
}
void downKeyPressed() {
        if(playerPos[1] == 1) {
                playerPos[1] = walls ? 1 : 0;
        } else {
                playerPos[1] = 1;
        }
}
boolean playerIsOnCoin() {  //玩家捡到金币返回true
        return playerPos[0] == coinPos[0] && playerPos[1] == coinPos[1];
}

boolean playerMeetMonster() {  //玩家被怪物抓住返回true
        return (playerPos[0] == monsters[0][0] && playerPos[1] == monsters[0][1]) || (playerPos[0] == monsters[1][0] && playerPos[1] == monsters[1][1]);
}
void processPos() {  //处理玩家的移动结果和得分
        if (playerIsOnCoin()) {
                score++;
                generateNewCoin();
        }
        if (playerMeetMonster()) {
                endingSequence();
        }
}

完整工程代码:
catchcoins.zip (2.9 KB, 下载次数: 0)

将代码上传至我们的澳门开元棋牌色情_澳门开元棋牌官网_开元棋牌输了25万标准板,就可以开始玩这个简单好玩的小游戏了。
视频请看楼下↓↓↓



沙发
?楼主| 发表于 昨天?15:14 | 只看该作者
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver| 手机版| 小黑屋| 澳门开元棋牌色情_澳门开元棋牌官网_开元棋牌输了25万实验室 ( 粤ICP备17040594号-3 )

GMT+8, 2019-10-20 16:10 , Processed in 0.070315 second(s), 22 queries .

快速回复 返回顶部 返回列表