🎲 复古游戏:猜数字


🔧 所需组件

  • Arduino板 (例如 Arduino Uno 或 Arduino R4)
  • I2C LCD 1602显示器
  • 跳线
  • 面包板(可选)

📌 接线连接

  1. I2C LCD 1602显示器:
    • VCC: → Arduino 5V
    • GND: → Arduino GND
    • SDA: → Arduino A4 (在 Uno 上)或相应的 SDA pin
    • SCL: → Arduino A5 (在 Uno 上)或相应的 SCL pin

注意: 这些显示器的典型 I2C 地址是 0x27. 如果需要,请使用 I2C 扫描仪进行验证。


💻 代码示例

此草图使用 LiquidCrystal_I2C 库。它将生成一个介于 1 到 100 之间的随机数,然后提示您(通过串行监视器)输入猜测值。根据您的输入,LCD 会显示“太高!”或“太低!”之类的提示,直到您猜对为止。

#include <LiquidCrystal_I2C.h>

// ----- LCD Settings -----
LiquidCrystal_I2C lcd(0x27, 16, 2);  // I2C address 0x27, 16 columns, 2 rows

// Global game variables
int secretNumber;
bool gameOver = false;

void setup() {
  // Initialize Serial Monitor
  Serial.begin(9600);
  while (!Serial) { ; }  // Wait for Serial to initialize (if needed)
  
  // Initialize LCD
  lcd.init();
  lcd.backlight();
  
  // Welcome message on LCD
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Guess The Number");
  lcd.setCursor(0, 1);
  lcd.print("1-100");
  
  // Seed random generator using an unconnected analog pin
  randomSeed(analogRead(0));
  
  // Generate secret number between 1 and 100
  secretNumber = random(1, 101);
  
  // Prompt in Serial Monitor
  Serial.println("Welcome to 'Guess The Number'!");
  Serial.println("I'm thinking of a number between 1 and 100.");
  Serial.println("Enter your guess:");
}

void loop() {
  if (Serial.available() > 0 && !gameOver) {
    int guess = Serial.parseInt();
    if (guess == 0) return; // Skip if no valid number entered
    
    // Clear LCD for new message
    lcd.clear();
    
    if (guess < secretNumber) {
      lcd.setCursor(0, 0);
      lcd.print("Too Low!");
      Serial.println("Too Low! Try again:");
    } 
    else if (guess > secretNumber) {
      lcd.setCursor(0, 0);
      lcd.print("Too High!");
      Serial.println("Too High! Try again:");
    } 
    else {
      lcd.setCursor(0, 0);
      lcd.print("Correct!");
      lcd.setCursor(0, 1);
      lcd.print("You Win!");
      Serial.println("Correct! You win!");
      gameOver = true;
    }
    
    // Wait a moment before next input
    delay(1500);
    
    // If game not over, re-prompt on LCD
    if (!gameOver) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Guess 1-100");
      Serial.println("Enter your next guess:");
    }
  }
}

📋 工作原理

  • 游戏初始化:
    • LCD 屏幕显示欢迎信息(“猜数字”)并指示范围(1-100)。
    • 使用以下方式生成随机秘密数字: random(1, 101).
  • 通过串行监视器的用户输入:
    • 玩家在串行监视器中输入猜测内容。
    • 代码使用以下方式读取这些猜测 Serial.parseInt().
  • 反馈机制:
    • 如果猜测太低或太高,LCD 和串行监视器会提供反馈(例如,“太低!”或“太高!”)。
    • 一旦猜出正确的数字,就会显示祝贺信息,并且游戏结束。
  • 显示更新:
    • 每次猜测之后,LCD 都会更新,确保即使在 16×2 的小屏幕上信息也清晰可见。

🎯 增强功能和想法

  • 复位按钮:
    • 添加一个按钮即可重置游戏,而无需重新启动 Arduino。
  • 分数记ping:
    • 跟踪猜测的次数并显示分数。
  • 多层次:
    • 引入关卡,其中数字范围随着玩家获胜而增加。
  • 自定义角色:
    • 在 LCD 上使用自定义字符作为有趣的图标(例如获胜时的笑脸)。

使用 I2C LCD 1602 在 Arduino 上构建复古的基于文本的游戏,尽情享受吧!如果您有任何问题或需要进一步调整,请随时提出。祝您游戏愉快!😊🎮✨

📡广播信号——放大连接。

发表评论