0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Goで簡単な数当てゲームを作ってみた

Posted at

はじめに

Goを学び始めたので、練習も兼ねて 数字当てゲーム を作ってみました。

今回は「1〜100の数字を当てるゲーム」を例に、コードの解説と遊び方を紹介します。

作るゲームのルール

  • コンピュータが1〜100の数字をランダムで選ぶ
  • プレイヤーは数字を予想して入力
  • 入力ごとに「もっと大きい」「もっと小さい」でヒントをもらえる
  • 最大5回まで予想可能
  • 最後にこれまでの予想履歴を表示

コード全体

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	// 乱数の初期化
	rand.Seed(time.Now().UnixNano())
	// 1~100の数字。正解の数字
	target := rand.Intn(100) + 1
	// 回数制限
	maxAttempts := 5
	// 予想した数字を記録する
	guesses := []int{}
	var guess int

	fmt.Println("数字当てゲーム! 1~100の数字を当ててね")

	// 最後に必ず履歴を出す
	defer func() {
		fmt.Println("あなたの予想履歴:", guesses)
	}()

	for i := 1; i <= maxAttempts; i++ {
		fmt.Print("予想した数字を入力: ")
		_, err := fmt.Scan(&guess)
		if err != nil {
			fmt.Println("数字を入力してね")
			continue
		}

		// 入力した数字を記録
		guesses = append(guesses, guess)

		if guess < target {
			fmt.Println("もっと大きいよ!")
		} else if guess > target {
			fmt.Println("もっと小さいよ!")
		} else {
			fmt.Println("正解!")
			return
		}
	}
	fmt.Printf("残念!正解は%dでした!\n", target)
}

コードのポイント

  1. 乱数の初期化

    rand.Seed(time.Now().UnixNano())
    
    • time.Now().UnixNano() を渡すことで、毎回違う乱数が生成されます
  2. 予想回数と履歴

    maxAttempts := 5
    guesses := []int{}
    
    • Sliceを使って入力履歴を管理する練習にもなります
    • 回数制限を設けることで、ゲームに緊張感を出すことができます
    • guesses に入力履歴を保存して最後に表示させる仕組みです
  3. 入力と条件判定

    _, err := fmt.Scan(&guess)
    if guess < target {
        fmt.Println("もっと大きいよ!")
    }
    
    • 標準入力から数字を読み取ります
    • 条件に応じて「もっと大きいよ!」「もっと小さいよ!」のヒントを出します
  4. deferで履歴表示

    defer func() {
    	fmt.Println("あなたの予想履歴:", guesses)
    }()
    
    • deferをつけると必ず最後に実行されます
    • ゲーム終了時に履歴を表示できる便利な方法です

実行例

数字当てゲーム! 1~100の数字を当ててね
予想した数字を入力: 50
もっと小さいよ!
予想した数字を入力: 25
もっと大きいよ!
予想した数字を入力: 37
正解!
あなたの予想履歴: [50 25 37]

まとめ・応用アイデア

  • ChatGPTと相談しながら、学習にもなる数当てゲームを作成することができました

  • 応用例として以下が考えられます

    • 回数制限を変更
    • 範囲を1〜1000に拡大
    • GUI化してより遊びやすくする
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?