【ゲームコード一覧】Kotlinで色々なゲームを作ろう -初心者向け-

記事内に商品プロモーションを含む場合があります

Kotlinを学習中の初心者に向けて、簡単なゲームのコードを数多く紹介しています。

是非このページのゲームを実際に作ってみて、楽しくKotlinを習得してください。

初心者のためのKotlinテキスト&練習問題集|全54ページを無料公開中! Kotlin学習サイトへようこそ! このサイトではKotlinの基本文法からオブジェクト指向、データ構造に至るまで、Kot...

【★★☆☆☆】ハイアンドローゲーム

「ハイアンドローゲーム」を作成しましょう。

このゲームではプレイヤーとコンピュータにランダムでカード(1〜13の数字)が配られます。

プレイヤーはコンピュータのカードが自分のカードより「大きい」か「小さい」かを予測し、結果を確認します。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

=== ハイアンドローゲームへようこそ! ===
【プレイヤー】2 VS ??【コンピュータ】
あなたのカードはコンピュータのカードより大きい?小さい?
1: 大きい、2: 小さい
⇒ 2
【プレイヤー】2 VS 9【コンピュータ】
正解!あなたの勝ち!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Kotlin】確認問題2-☆1:ハイアンドロー ゲームを作ろう【Kotlin】ハイアンドローゲームのコードを書く練習問題。Kotlinを使ったシンプルなハイアンドローゲームを実装しながらプログラミングスキルを磨こう!ランダムなカードを引いて大小を予想するロジックを作成し、条件分岐やランダム数生成の基礎を学べます。初心者でも取り組みやすい解説付きの問題です。...

ハイアンドローゲームのコードは↓↓をクリック

ハイアンドローのコード
import kotlin.random.Random

fun main() {
    println("=== ハイアンドローゲームへようこそ! ===")

    // プレイヤーとコンピュータにランダムなカード(1〜13の数字)を配る
    val playerCard = Random.nextInt(1, 14)
    val computerCard = Random.nextInt(1, 14)

    // プレイヤーに配られたカードを表示し、コンピュータのカードはまだ表示しない
    println("【プレイヤー】$playerCard VS ??【コンピュータ】")

    // プレイヤーにコンピュータのカードが大きいか小さいかを予想させる
    println("あなたのカードはコンピュータのカードより大きい?小さい?")
    println("1: 大きい、2: 小さい")

    // ユーザーの入力を取得
    print("⇒ ")
    val choice = readLine()?.toIntOrNull()

    // コンピュータのカードを表示
    println("【プレイヤー】$playerCard VS $computerCard【コンピュータ】")

    // 勝負の結果を判定
    when {
        playerCard == computerCard -> {
            println("引き分け!")
        }
        (playerCard < computerCard && choice == 2) || (playerCard > computerCard && choice == 1) -> {
            println("正解!あなたの勝ち!")
        }
        else -> {
            println("残念!あなたの負け!")
        }
    }
}

ハイアンドローのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★☆☆☆】数字当てゲーム

簡単な「数字当てゲーム」を作成しましょう。

このゲームでは、コンピューターが1から100までのランダムな整数を生成し、ユーザーがその数字を当てるまで繰り返し入力します。

ユーザーが正しい数字を当てるまでゲームは続き、正解した時点で試行回数が表示されます。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

1から100までの数字を入力してください: 50
もっと大きい数字です。
1から100までの数字を入力してください: 75
もっと小さい数字です。
1から100までの数字を入力してください: 60
もっと小さい数字です。
1から100までの数字を入力してください: 55
正解です!試行回数: 4
ゲームを終了します。

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Kotlin】確認問題2-☆2:数字当てゲームを作ろう【Kotlin】数字当てゲームのコードを書く練習問題。1から100までのランダムな数字を当てるシンプルなゲームを通じて、Kotlinのランダム生成やループ処理、条件分岐を学べます。ユーザーが数字を入力し、正解に近づくように「もっと大きい」や「もっと小さい」などのヒントwo与え、正解までの試行回数が表示される仕組みです。...

数字当てゲームのコードは↓↓をクリック

数字当てのコード
import kotlin.random.Random

fun main() {
    val targetNumber = Random.nextInt(1, 101) // 1から100までのランダムな整数を生成

    var userGuess: Int? = 0 // ユーザーの入力を格納する変数を初期化
    var attemptCount = 0 // 試行回数を記録する変数を初期化

    // ユーザーが正しい数字を当てるまで繰り返す
    while (userGuess != targetNumber) {
        print("1から100までの数字を入力してください: ")
        val input = readLine()
        userGuess = input?.toIntOrNull()

        if (userGuess != null) {
            attemptCount++ // 試行回数をカウント

            // 入力された数字が正解かどうかを判定
            when {
                userGuess < targetNumber -> println("もっと大きい数字です。")
                userGuess > targetNumber -> println("もっと小さい数字です。")
                else -> println("正解です!試行回数: $attemptCount")
            }
        } else {
            println("有効な数字を入力してください。")
        }
    }

    println("ゲームを終了します。")
}

数字当てのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★☆☆☆】簡単なじゃんけんゲーム

簡単な「じゃんけん」ゲームを作成しましょう。

プレイヤーはグー、チョキ、パーのいずれかを選び、コンピューターと対戦します。

ゲーム終了後には、続けるかどうかをユーザーに問いかけ、続ける場合はもう一度プレイできるようにしてください。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

じゃんけんゲームを始めます!
じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2):
0
あなたの手: グー
コンピューターの手: チョキ
あなたの勝ちです!
もう一度遊びますか?(はい: y, いいえ: n):
y
じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2):
1
あなたの手: チョキ
コンピューターの手: チョキ
引き分けです!
もう一度遊びますか?(はい: y, いいえ: n):
n
ゲームを終了します。

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Kotlin】確認問題2-☆3:簡単なじゃんけんゲームを作ろう【Kotlin】じゃんけんゲームのコードを書く練習問題。プレイヤーの選択とコンピュータのランダムな選択を比較し、勝敗を判定するシンプルなゲームを通じて、Kotlinの基本的な構文や条件分岐を学べます。無効な入力処理や、勝利・引き分け・敗北の判定方法も含めた、実践的なプログラミング課題です。...

簡単なじゃんけんゲームのコードは↓↓をクリック

簡単なじゃんけんゲームのコード
import kotlin.random.Random

fun main() {
    println("じゃんけんゲームを始めます!")
    
    do {
        println("じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2):")

        val playerChoice = readLine()?.toIntOrNull()
        if (playerChoice == null || playerChoice !in 0..2) {
            println("無効な入力です。もう一度入力してください。")
            continue
        }

        val computerChoice = Random.nextInt(3)

        val playerHand = when (playerChoice) {
            0 -> "グー"
            1 -> "チョキ"
            2 -> "パー"
            else -> "不明な手"
        }
        val computerHand = when (computerChoice) {
            0 -> "グー"
            1 -> "チョキ"
            2 -> "パー"
            else -> "不明な手"
        }

        println("あなたの手: $playerHand")
        println("コンピューターの手: $computerHand")

        val result = when {
            playerChoice == computerChoice -> "引き分けです!"
            (playerChoice == 0 && computerChoice == 1) ||
            (playerChoice == 1 && computerChoice == 2) ||
            (playerChoice == 2 && computerChoice == 0) -> "あなたの勝ちです!"
            else -> "あなたの負けです!"
        }

        println(result)

        println("もう一度遊びますか?(はい: y, いいえ: n):")
        val continueGame = readLine()?.lowercase()

        if (continueGame != "y") {
            println("ゲームを終了します。")
            break
        }
    } while (true)
}

簡単なじゃんけんゲームのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★☆☆】ブラックジャックゲーム

ブラックジャックは、プレイヤーとディーラーが対戦するカードゲームです。この問題では、Kotlinを使って簡単なブラックジャックゲームを作成します。

プレイヤーは2枚のカードを引き、その合計値をもとにゲームを進めます。

合計値が21に近い方が勝者となりまが、21を超えると「バースト」となり、負けとなります。

今回は1から11までの数字のみを扱います。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

ブラックジャックゲームを開始します!
プレイヤーの引いたカード: 7
現在の合計: 7
ヒットしますか?(yes/no): yes
プレイヤーの引いたカード: 10
現在の合計: 17
ヒットしますか?(yes/no): no
ディーラーの引いたカード: 9
ディーラーの合計: 9
ディーラーの引いたカード: 8
ディーラーの合計: 17
プレイヤーの合計: 17
ディーラーの合計: 17
引き分けです。

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Kotlin】確認問題3-☆1:ブラックジャックゲームを作ろう【Kotlin】ブラックジャックゲームのコードを書く練習問題。プレイヤーとディーラーがカードを引き、合計が21に近づけるシンプルなゲームを通じて、Kotlinの関数や条件分岐、ループ処理を学べます。実践的なゲームロジックを体験しながら、Kotlinのスキルを磨ける内容です。...

ブラックジャックゲームのコードは↓↓をクリック

ブラックジャックのコード
import kotlin.random.Random

// カードをランダムに生成する関数
// 1から11の範囲でランダムな整数を返します
fun drawCard(): Int {
    return Random.nextInt(1, 12) // 1から11のランダムな数を返す
}

// プレイヤーのターンを処理する関数
// プレイヤーがカードを引くかどうかを選択し、合計値を計算します
fun playerTurn(): Int {
    var total = 0 // プレイヤーのカードの合計を保持する変数

    while (true) { // ユーザーが「スタンド」を選ぶまでループ
        val card = drawCard() // 新しいカードを引く
        total += card // 引いたカードの値を合計に加える
        println("プレイヤーの引いたカード: $card") // 引いたカードの値を表示
        println("現在の合計: $total") // 現在の合計値を表示

        // 合計が21を超えた場合はバースト(負け)とする
        if (total > 21) {
            println("バースト!プレイヤーの負けです。")
            break // バーストしたらループを終了
        }

        // プレイヤーに次の行動を尋ねる
        print("ヒットしますか?(yes/no): ")
        val choice = readLine() // ユーザーの入力を受け取る

        // 「no」を選んだ場合、カードを引くのをやめる
        if (choice == "no") {
            break // ループを終了し、プレイヤーのターンを終了
        }
    }
    return total // プレイヤーの最終的な合計値を返す
}

// ディーラーのターンを処理する関数
// ディーラーは合計が17以上になるまでカードを引き続けます
fun dealerTurn(): Int {
    var total = 0 // ディーラーのカードの合計を保持する変数

    // ディーラーの合計が17未満である限りカードを引き続ける
    while (total < 17) {
        val card = drawCard() // 新しいカードを引く
        total += card // 引いたカードの値を合計に加える
        println("ディーラーの引いたカード: $card") // 引いたカードの値を表示
        println("ディーラーの合計: $total") // ディーラーの現在の合計値を表示

        // 合計が21を超えた場合はバースト(負け)とする
        if (total > 21) {
            println("ディーラーがバーストしました。プレイヤーの勝ちです。")
            break // バーストしたらループを終了
        }
    }
    return total // ディーラーの最終的な合計値を返す
}

// メイン関数: ゲームの流れを制御する
fun main() {
    println("ブラックジャックゲームを開始します!") // ゲームの開始メッセージを表示

    val playerTotal = playerTurn() // プレイヤーのターンを実行し、合計値を取得
    if (playerTotal <= 21) { // プレイヤーがバーストしていない場合にディーラーのターンを実行
        val dealerTotal = dealerTurn() // ディーラーのターンを実行し、合計値を取得
        println("プレイヤーの合計: $playerTotal") // プレイヤーの最終合計値を表示
        println("ディーラーの合計: $dealerTotal") // ディーラーの最終合計値を表示

        // 勝敗の判定
        when {
            dealerTotal > 21 || playerTotal > dealerTotal -> println("プレイヤーの勝ちです!") // ディーラーがバーストするか、プレイヤーの合計が勝っている場合
            playerTotal < dealerTotal -> println("ディーラーの勝ちです。") // プレイヤーの合計が負けている場合
            else -> println("引き分けです。") // 両者の合計が同じ場合
        }
    }
}

ブラックジャックのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★☆☆】丁半賭博ゲーム

「丁半賭博ゲーム」を作成しましょう。

このゲームではコンピュータがサイコロを2つ振り、その結果を元に「丁」か「半」を予想します。

予想が当たった場合、賭け金が2倍になって返ってきますが、外れた場合は賭け金を没収されます。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

丁半賭博ゲームを始めます!
プレイヤーの所持金: 1000円
いくらかけますか? ⇒ 300
丁か半か?(丁:0,半:1) ⇒ 0
サイコロの目: 4, 2 ⇒ 丁
あなたの勝ち!賞金は300円
続けますか?(はい:0,いいえ:1) ⇒ 0

プレイヤーの所持金: 1300円
いくらかけますか? ⇒ 1500
無効な入力です!所持金以内の正しい金額を入力してください。
いくらかけますか? ⇒ 500
丁か半か?(丁:0,半:1) ⇒ 1
サイコロの目: 1, 6 ⇒ 半
あなたの負け!500円没収!
続けますか?(はい:0,いいえ:1) ⇒ 1

最終所持金は800円でした。
丁半賭博ゲームを終わります。

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Kotlin】確認問題3-☆2:丁半賭博ゲームを作ろう【Kotlin】丁半賭博ゲームのコードを書く練習問題。ユーザーが賭け金を設定し、「丁」か「半」を予想するシンプルなギャンブルゲームを通じて、Kotlinの繰り返し処理、条件分岐、ランダム生成を学べます。所持金が無くなるまでプレイを繰り返すことができ、Kotlinを使った実践的なプログラミングを楽しめる内容です。...

丁半賭博ゲームのコードは↓↓をクリック

丁半賭博ゲームのコード
import kotlin.random.Random

fun main() {
    println("丁半賭博ゲームを始めます!")
    var money = 1000

    while (money > 0) {
        println("プレイヤーの所持金: ${money}円")

        val bet = getBet(money)
        val choice = getChoice()

        val dice1 = Random.nextInt(1, 7)
        val dice2 = Random.nextInt(1, 7)
        val sum = dice1 + dice2
        val result = if (sum % 2 == 0) "丁" else "半"

        println("サイコロの目: $dice1, $dice2 ⇒ $result")

        if ((result == "丁" && choice == 0) || (result == "半" && choice == 1)) {
            println("あなたの勝ち!賞金は${bet}円")
            money += bet
        } else {
            println("あなたの負け!${bet}円没収!")
            money -= bet
        }

        if (money > 0) {
            if (!askContinue()) {
                println("最終所持金は${money}円でした。")
                break
            }
        } else {
            println("所持金がなくなりました。ゲームを終了します。")
        }
    }

    println("最終所持金は${money}円でした。丁半賭博ゲームを終わります。")
}

fun getBet(money: Int): Int {
    while (true) {
        print("いくらかけますか? ⇒ ")
        val input = readLine()?.toIntOrNull()
        if (input != null && input > 0 && input <= money) {
            return input
        }
        println("無効な入力です!所持金以内の正しい金額を入力してください。")
    }
}

fun getChoice(): Int {
    while (true) {
        print("丁か半か?(丁:0,半:1) ⇒ ")
        val input = readLine()?.toIntOrNull()
        if (input == 0 || input == 1) {
            return input
        }
        println("無効な入力です!0か1を入力してください。")
    }
}

fun askContinue(): Boolean {
    while (true) {
        print("続けますか?(はい:0,いいえ:1) ⇒ ")
        val input = readLine()?.toIntOrNull()
        if (input == 0) return true
        if (input == 1) return false
        println("無効な入力です!0か1を入力してください。")
    }
}

丁半賭博ゲームのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★☆☆】モンスターとのバトルゲーム

勇者とモンスターが戦うバトルゲームを作成してください。このゲームでは、以下のルールに従います:

  • プレイヤー(勇者)は攻撃または防御の選択が可能です。
  • モンスターはランダムな成功率で攻撃を試みます。
  • 勇者の攻撃が成功すると、モンスターのHPが減少します。
  • 勇者が防御を選択し、モンスターの攻撃が失敗した場合、モンスターの攻撃成功率が増加します。
  • HPが0以下になった方が敗北となり、ゲームは終了します。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

=== モンスターとのバトルゲーム ===
勇者のHP: 100, ドラゴンのHP: 100, ドラゴンの攻撃成功率: 60%
攻撃するか防御するかを選んでください (1: 攻撃, 2: 防御):
1
勇者はドラゴンに20のダメージを与えた!
ドラゴンのHP: 80, 勇者のHP: 100, ドラゴンの攻撃成功率: 60%
ドラゴンの攻撃!
ドラゴンは勇者に40のダメージを与えた!
勇者のHP: 60, ドラゴンのHP: 80, ドラゴンの攻撃成功率: 60%
攻撃するか防御するかを選んでください (1: 攻撃, 2: 防御):
2
勇者は防御を選択した!
ドラゴンの攻撃!
ドラゴンの攻撃がミス!攻撃成功率が80%に上昇!
勇者のHP: 60, ドラゴンのHP: 80, ドラゴンの攻撃成功率: 80%
攻撃するか防御するかを選んでください (1: 攻撃, 2: 防御):
1
勇者はドラゴンに20のダメージを与えた!
ドラゴンのHP: 60, 勇者のHP: 60, ドラゴンの攻撃成功率: 80%
ドラゴンの攻撃!
ドラゴンは勇者に40のダメージを与えた!
勇者のHP: 20, ドラゴンのHP: 60, ドラゴンの攻撃成功率: 60%
攻撃するか防御するかを選んでください (1: 攻撃, 2: 防御):
1
勇者はドラゴンに20のダメージを与えた!
ドラゴンのHP: 40, 勇者のHP: 20, ドラゴンの攻撃成功率: 60%
ドラゴンの攻撃!
ドラゴンは勇者に40のダメージを与えた!
勇者は倒された…ドラゴンの勝利!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Kotlin】確認問題3-☆3:モンスターとのバトルゲームを作ろう【Kotlin】モンスターとのバトルゲームのコードを書く練習問題。勇者(プレイヤー)とスライム(モンスター)のバトルを通じて、Kotlinのクラス定義やメソッド、繰り返し処理、条件分岐を学べます。HPの管理や攻撃成功率の変動といった実践的なゲームロジックをコーディングしながら学習できる内容です。...

モンスターとのバトルゲームのコードは↓↓をクリック

モンスターとのバトルゲームのコード
import kotlin.random.Random

fun main() {
    var playerHp = 100
    val playerAttackPower = 20
    var monsterHp = 100
    val monsterAttackPower = 40
    var monsterAttackSuccessRate = 60

    println("=== モンスターとのバトルゲーム ===")

    while (playerHp > 0 && monsterHp > 0) {
        displayStatus(playerHp, monsterHp, monsterAttackSuccessRate)
        val playerAction = getPlayerAction()
        if (playerAction == 1) {
            monsterHp = attack(monsterHp, playerAttackPower, "勇者", "ドラゴン")
        } else if (playerAction == 2) {
            println("勇者は防御を選択した!")
            val monsterAction = performMonsterAttack(monsterAttackSuccessRate)
            if (monsterAction == "miss") {
                monsterAttackSuccessRate += 20
                println("ドラゴンの攻撃がミス!攻撃成功率が${monsterAttackSuccessRate}%に上昇!")
                continue
            }
        }

        if (monsterHp <= 0) {
            println("ドラゴンは倒された!勇者の勝利!")
            break
        }

        println("ドラゴンの攻撃!")
        val attackResult = performMonsterAttack(monsterAttackSuccessRate)
        if (attackResult == "hit") {
            playerHp = attack(playerHp, monsterAttackPower, "ドラゴン", "勇者")
            monsterAttackSuccessRate = 60
        } else {
            monsterAttackSuccessRate += 20
            println("ドラゴンの攻撃がミス!攻撃成功率が${monsterAttackSuccessRate}%に上昇!")
        }

        if (playerHp <= 0) {
            println("勇者は倒された…ドラゴンの勝利!")
        }
    }
}

fun displayStatus(playerHp: Int, monsterHp: Int, monsterAttackSuccessRate: Int) {
    println("勇者のHP: $playerHp, ドラゴンのHP: $monsterHp, ドラゴンの攻撃成功率: $monsterAttackSuccessRate%")
}

fun getPlayerAction(): Int {
    println("攻撃するか防御するかを選んでください (1: 攻撃, 2: 防御):")
    return readLine()?.toIntOrNull() ?: getPlayerAction() // 再帰的に再入力を促す
}

fun attack(targetHp: Int, attackPower: Int, attacker: String, target: String): Int {
    val newHp = targetHp - attackPower
    println("$attacker は $target に $attackPower のダメージを与えた!")
    return newHp
}

fun performMonsterAttack(successRate: Int): String {
    val chance = Random.nextInt(100) + 1
    return if (chance <= successRate) "hit" else "miss"
}

モンスターとのバトルゲームのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★★☆】ナインゲーム

ナインゲームを作成しましょう。

ナインゲームは、プレイヤーとコンピュータが順番に牌(1から9の数字)を出し合い、どちらの牌が大きいかを比較して得点を競うゲームです。

9回戦行われ、より多くの得点を獲得した方が勝者となります。プレイヤーは自分の手札から牌を選び、コンピュータはランダムで牌を選択します。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

ナインゲームを開始します!
プレイヤーの持ち牌 ⇒「1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9」
コンピュータの持ち牌⇒「1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9」

【第1回戦】
プレイヤーの得点 : 0点
コンピュータの得点: 0点
持ち牌の中から出す牌を選択してください > 9
コンピュータの打牌:5
プレイヤーの打牌:9 > 5:コンピュータの打牌
プレイヤーは9点獲得

プレイヤーの持ち牌 ⇒「1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,-」
コンピュータの持ち牌⇒「1 ,2 ,3 ,4 ,- ,6 ,7 ,8 ,9」
...

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Kotlin】確認問題4-☆1:ナインゲームを作ろう【Kotlin】ナインゲームのコードを書く練習問題。プレイヤーとコンピュータが1から9までの数字を使って競い合うシンプルなゲームを通じて、Kotlinのマップ操作やループ処理、条件分岐を学べます。実践的なゲームロジックをコーディングしながら、Kotlinの基礎を学習できる内容です。...

ナインゲームのコードは↓↓をクリック

ナインゲームのコード
import kotlin.random.Random

fun main() {
    println("ナインゲームを開始します!")

    // プレイヤーとコンピュータの持ち牌を初期化
    val playerTiles = initializeTiles()
    val computerTiles = initializeTiles()

    // スコア初期化
    var playerScore = 0
    var computerScore = 0

    // 9回戦を行う
    for (round in 1..9) {
        println("\n【第${round}回戦】")
        displayScores(playerScore, computerScore)

        // プレイヤーとコンピュータの持ち牌を表示
        displayTiles("プレイヤー", playerTiles)
        displayTiles("コンピュータ", computerTiles)

        // プレイヤーとコンピュータの打牌
        val playerTile = getPlayerTile(playerTiles)
        val computerTile = getComputerTile(computerTiles)

        // 勝敗判定
        val roundResult = judgeRound(playerTile, computerTile)
        println("プレイヤーの打牌:$playerTile > $computerTile:コンピュータの打牌")

        when (roundResult) {
            "player" -> {
                println("プレイヤーは${playerTile}点獲得")
                playerScore += playerTile
            }
            "computer" -> {
                println("コンピュータは${computerTile}点獲得")
                computerScore += computerTile
            }
            else -> println("引き分けです")
        }
    }

    // ゲーム終了後の結果表示
    displayFinalResult(playerScore, computerScore)
}

// 関数:持ち牌を初期化
fun initializeTiles(): MutableMap<Int, Boolean> {
    return mutableMapOf<Int, Boolean>().apply {
        for (i in 1..9) {
            this[i] = true
        }
    }
}

// 関数:得点を表示
fun displayScores(playerScore: Int, computerScore: Int) {
    println("プレイヤーの得点 : ${playerScore}点")
    println("コンピュータの得点: ${computerScore}点")
}

// 関数:持ち牌を表示
fun displayTiles(playerType: String, tiles: Map<Int, Boolean>) {
    print("$playerType の持ち牌⇒「")
    tiles.forEach { (key, value) -> if (value) print("$key ,") else print("- ,") }
    println("」")
}

// 関数:プレイヤーの打牌を取得
fun getPlayerTile(tiles: MutableMap<Int, Boolean>): Int {
    var playerTile: Int
    while (true) {
        print("持ち牌の中から出す牌を選択してください > ")
        playerTile = readLine()!!.toInt()
        if (tiles[playerTile] == true) {
            tiles[playerTile] = false // 使用済みに設定
            return playerTile
        } else {
            println("その牌は既に使われています。別の牌を選んでください。")
        }
    }
}

// 関数:コンピュータの打牌を取得
fun getComputerTile(tiles: MutableMap<Int, Boolean>): Int {
    val computerTile = tiles.filter { it.value }.keys.random()
    tiles[computerTile] = false
    return computerTile
}

// 関数:勝敗判定
fun judgeRound(playerTile: Int, computerTile: Int): String {
    return when {
        playerTile > computerTile -> "player"
        computerTile > playerTile -> "computer"
        else -> "draw"
    }
}

// 関数:最終結果を表示
fun displayFinalResult(playerScore: Int, computerScore: Int) {
    println("\nゲーム終了!")
    println("最終得点:")
    println("プレイヤーの得点 : ${playerScore}点")
    println("コンピュータの得点: ${computerScore}点")

    when {
        playerScore > computerScore -> println("プレイヤーの勝利です!")
        computerScore > playerScore -> println("コンピュータの勝利です!")
        else -> println("引き分けです!")
    }
}

ナインゲームのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★★☆】宝探しゲーム

5×5のグリッド上で宝を探す「宝探しゲーム」を作成しましょう。

このゲームではプレイヤーが1~25の数字を選び、ランダムに配置された宝を見つけ出します。

選択した場所にはマークを付け、プレイヤーにヒントを表示します。プレイヤーは3回の試行内に宝を見つけることを目指します。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

宝探しゲームへようこそ!1から25までの数字で宝を探し当ててください。
宝を探すチャンスは3回です。
現在のグリッド:
01 02 03 04 05
06 07 08 09 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

1から25のマス番号を入力してください: 7
右 下 に宝があります。
残りのチャンス: 2
現在のグリッド:
01 02 03 04 05
06 * 08 09 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

1から25のマス番号を入力してください: 18
おめでとうございます!宝を見つけました!
現在のグリッド:
01 02 03 04 05
06 * 08 09 10
11 12 13 14 15
16 17 ☆ 19 20
21 22 23 24 25

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Kotlin】確認問題4-☆3:宝探しゲームを作ろう【Kotlin】宝探しゲームのコードを書く練習問題。5×5のグリッドで宝を探すゲームを通して、Kotlinの基本構文やランダム生成、リスト操作を学べます。3回の試行で宝を見つけるヒント付きロジックを実装しながら、プログラミングスキルを磨きましょう。初心者から中級者まで楽しめる練習問題です!...

宝探しゲームのコードは↓↓をクリック

宝探しゲームのコード
import kotlin.random.Random

fun main() {
    val gridSize = 5
    val grid = MutableList(gridSize) { row -> MutableList(gridSize) { col -> String.format("%02d", row * gridSize + col + 1) } }
    val treasureX = Random.nextInt(gridSize)
    val treasureY = Random.nextInt(gridSize)
    var attempts = 3
    var treasureFound = false

    println("宝探しゲームへようこそ!1から25までの数字で宝を探し当ててください。")
    println("宝を探すチャンスは3回です。")
    displayGrid(grid)

    while (attempts > 0 && !treasureFound) {
        print("1から25のマス番号を入力してください: ")
        val input = readLine()?.toIntOrNull()

        if (input == null || input < 1 || input > 25) {
            println("無効な番号です。1から25までの数字を入力してください。")
            continue
        }

        val playerX = (input - 1) % gridSize
        val playerY = (input - 1) / gridSize

        if (grid[playerY][playerX] == "*") {
            println("そのマスは既に選択されています。別のマスを選んでください。")
            continue
        }

        if (playerX == treasureX && playerY == treasureY) {
            println("おめでとうございます!宝を見つけました!")
            grid[playerY][playerX] = "☆"
            treasureFound = true
        } else {
            grid[playerY][playerX] = "*"
            println(giveHint(playerX, playerY, treasureX, treasureY))
            attempts--
            println("残りのチャンス: $attempts")
        }

        displayGrid(grid)
    }

    if (!treasureFound) {
        println("残念ながら、チャンスを使い切りました。宝は見つかりませんでした。")
    }
}

fun displayGrid(grid: List<List<String>>) {
    println("現在のグリッド:")
    for (row in grid) {
        println(row.joinToString(" "))
    }
    println()
}

fun giveHint(playerX: Int, playerY: Int, treasureX: Int, treasureY: Int): String {
    val hint = mutableListOf<String>()
    if (playerX < treasureX) hint.add("右")
    if (playerX > treasureX) hint.add("左")
    if (playerY < treasureY) hint.add("下")
    if (playerY > treasureY) hint.add("上")
    return "${hint.joinToString(" ")}に宝があります。"
}

宝探しゲームのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★★★】モンスター捕獲ゲーム

複数のモンスターを捕まえるゲームを作成しましょう。

このゲームではモンスターがサイコロを振り、その結果を見てプレイヤーはサイコロを振るかどうかを決めることができます。

プレイヤーのサイコロの目がモンスターのサイコロの目より大きければ捕獲成功。小さければ失敗でゲーム終了です。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

ゴブリンを捕まえようとしています...
ゴブリンのサイコロ: 4
サイコロを振りますか? (yes/no): yes
プレイヤーのサイコロ: 6
ゴブリンを捕まえました!
スライムを捕まえようとしています...
スライムのサイコロ: 5
サイコロを振りますか? (yes/no): yes
プレイヤーのサイコロ: 3
スライムを捕まえられませんでした...
ゲームオーバー!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Kotlin】確認問題5-☆1:モンスター捕獲ゲームを作ろう【Kotlin】モンスター捕獲ゲームを書く練習問題。プレイヤーがモンスターを捕まえるためにサイコロを振り、結果次第で捕獲できるかどうかを決めるゲームを通じて、Kotlinの抽象クラスや継承、リスト操作、条件分岐を学べます。シンプルなロジックながらKotlinのクラス設計を実践的に学べる内容です。...

モンスター捕獲ゲームのコードは↓↓をクリック

モンスター捕獲ゲームのコード
import kotlin.random.Random

// 抽象クラス Character を定義
abstract class Character(val name: String) {
    // サイコロを振る関数
    fun rollDice(): Int {
        return Random.nextInt(6) + 1  // 1から6までのランダムな数を返す
    }
}

// Character クラスを継承する Monster クラスを定義
class Monster(name: String) : Character(name)

// Character クラスを継承する Player クラスを定義
class Player(name: String) : Character(name)

fun main() {
    // プレイヤーを作成
    val player = Player("勇者")

    // モンスターを作成
    val monster1 = Monster("ゴブリン")
    val monster2 = Monster("スライム")
    val monster3 = Monster("ドラゴン")

    // モンスターを格納するArrayListを作成
    val monsters = arrayListOf(monster1, monster2, monster3)

    // プレイヤーがモンスターを捕まえようとするループ
    for (monster in monsters) {
        println("${monster.name}を捕まえようとしています...")
        val monsterRoll = monster.rollDice()
        println("${monster.name}のサイコロ: $monsterRoll")

        print("サイコロを振りますか? (yes/no): ")
        val response = readLine()?.trim() ?: ""

        if (response.equals("yes", ignoreCase = true)) {
            val playerRoll = player.rollDice()
            println("プレイヤーのサイコロ: $playerRoll")

            if (playerRoll > monsterRoll) {
                println("${monster.name}を捕まえました!")
            } else {
                println("${monster.name}を捕まえられませんでした...")
                println("ゲームオーバー!")
                break
            }
        } else {
            println("${monster.name}を捕まえるのを諦めました。")
        }
    }
}

モンスター捕獲ゲームのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★★★】マルバツゲーム

「マルバツゲーム」を作成しましょう。

このゲームはプレイヤーとコンピュータが対戦し、交互にマス目に「○」または「×」を入れ、縦・横・斜めのいずれかに3つ並べたプレイヤーが勝ちとなります。

コンピュータの手はランダムで決まります。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

  |   |  
---------
  |   |  
---------
  |   |  
プレイヤーのターン (○)
行番号 (0-2) を入力してください:
0
列番号 (0-2) を入力してください:
0
○ |   |  
---------
  |   |  
---------
  |   |  
コンピュータのターン (×)
コンピュータが (1, 1) に配置しました
○ |   |  
---------
  | × |  
---------
  |   |  
プレイヤーのターン (○)
行番号 (0-2) を入力してください:
1
列番号 (0-2) を入力してください:
0
○ |   |  
---------
○ | × |  
---------
  |   |  
コンピュータのターン (×)
コンピュータが (2, 2) に配置しました
○ |   |  
---------
○ | × |  
---------
  |   | ×
プレイヤーのターン (○)
行番号 (0-2) を入力してください:
2
列番号 (0-2) を入力してください:
0
○ |   |  
---------
○ | × |  
---------
○ |   | ×
プレイヤーの勝ち!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Kotlin】確認問題5-☆2:マルバツゲームを作ろう【Kotlin】マルバツゲームを書く練習問題。プレイヤーとコンピュータが交互にマル(○)とバツ(×)を配置して、縦・横・斜めのいずれかを揃えるシンプルなゲームを通じて、Kotlinのクラス設計やループ処理、条件分岐を学べます。勝敗や引き分けの判定、盤面の管理など、実践的なゲームロジックを学ぶことができる内容です。...

マルバツゲームのコードは↓↓をクリック

マルバツゲームのコード
import kotlin.random.Random

// プレイヤーを表すデータクラス
data class Player(val name: String, val mark: Char)

// 盤面を管理するクラス
class Board {
    private val board: Array<CharArray> = Array(3) { CharArray(3) { ' ' } }

    // 盤面を表示するメソッド
    fun displayBoard() {
        for (row in board) {
            println(row.joinToString(separator = " | "))
            println("---------")
        }
    }

    // 指定した位置にマークを配置するメソッド
    fun placeMark(row: Int, col: Int, mark: Char): Boolean {
        if (board[row][col] == ' ') {
            board[row][col] = mark
            return true
        }
        return false
    }

    // 勝敗を判定するメソッド
    fun checkWin(mark: Char): Boolean {
        // 横のラインをチェック
        for (row in board) {
            if (row.all { it == mark }) return true
        }
        // 縦のラインをチェック
        for (col in 0 until 3) {
            if (board.all { it[col] == mark }) return true
        }
        // 斜めのラインをチェック
        if ((board[0][0] == mark && board[ 1][ 1] == mark && board[ 2][ 2] == mark) ||
            (board[0][ 2] == mark && board[ 1][ 1] == mark && board[ 2][0] == mark)
        ) return true

        return false
    }

    // 盤面がいっぱいかどうかをチェックするメソッド
    fun isFull(): Boolean {
        return board.all { row -> row.all { it != ' ' } }
    }
}

// ゲームを管理するクラス
class Game(private val player: Player, private val computer: Player) {
    private val board = Board()
    private var currentPlayer = player

    // ゲームを開始するメソッド
    fun start() {
        while (true) {
            board.displayBoard()
            if (currentPlayer == player) {
                println("${currentPlayer.name}のターン (${currentPlayer.mark})")
                println("行番号 (0-2) を入力してください:")
                val row = readLine()!!.toInt()
                println("列番号 (0-2) を入力してください:")
                val col = readLine()!!.toInt()

                if (board.placeMark(row, col, currentPlayer.mark)) {
                    if (board.checkWin(currentPlayer.mark)) {
                        board.displayBoard()
                        println("${currentPlayer.name}の勝ち!")
                        break
                    } else if (board.isFull()) {
                        board.displayBoard()
                        println("引き分け!")
                        break
                    }
                    currentPlayer = computer
                } else {
                    println("その位置には配置できません。もう一度入力してください。")
                }
            } else {
                println("${currentPlayer.name}のターン (${currentPlayer.mark})")
                val (row, col) = getRandomMove()
                board.placeMark(row, col, currentPlayer.mark)
                println("コンピュータが ($row, $col) に配置しました")

                if (board.checkWin(currentPlayer.mark)) {
                    board.displayBoard()
                    println("${currentPlayer.name}の勝ち!")
                    break
                } else if (board.isFull()) {
                    board.displayBoard()
                    println("引き分け!")
                    break
                }
                currentPlayer = player
            }
        }
    }

    // コンピュータのランダムな手を生成するメソッド
    private fun getRandomMove(): Pair<Int, Int> {
        while (true) {
            val row = Random.nextInt(3)
            val col = Random.nextInt(3)
            if (board.placeMark(row, col, computer.mark)) {
                return row to col
            }
        }
    }
}

fun main() {
    val player = Player("プレイヤー", '○')
    val computer = Player("コンピュータ", '×')
    val game = Game(player, computer)
    game.start()
}

マルバツゲームのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★★★】石取りゲーム

2人のプレイヤーが交互に石を取り合う「石取りゲーム」を作成します。

各プレイヤーは1ターンで1~3個の石を取ることができます。最後の石を取ったプレイヤーが負けとなります。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

残りの石の数: 20
あなた さん、何個の石を取りますか? (1~3個): 
2
残りの石の数: 18
コンピュータ は 3 個の石を取りました
残りの石の数: 15
あなた さん、何個の石を取りますか? (1~3個): 
3
残りの石の数: 12
コンピュータ は 1 個の石を取りました
残りの石の数: 11
あなた さん、何個の石を取りますか? (1~3個): 
2
残りの石の数: 9
コンピュータ は 2 個の石を取りました
残りの石の数: 7
あなた さん、何個の石を取りますか? (1~3個): 
3
残りの石の数: 4
コンピュータ は 1 個の石を取りました
残りの石の数: 3
あなた さん、何個の石を取りますか? (1~3個): 
3
あなた が最後の石を取りました!
あなた の負けです!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Kotlin】確認問題5-☆3:石取りゲームを作ろう【Kotlin】石取りゲームを書く練習問題。プレイヤーが交互に1~3個の石を取り、最後の石を取った方が負けとなるシンプルなゲームを通じて、Kotlinのクラス継承、抽象クラス、ランダム処理、ループ処理などを学べます。プレイヤーとAIがそれぞれのターンで石を取り、残りの石の数を管理しながら進行するゲームロジックを実装。...

石取りゲームのコードは↓↓をクリック

石取りゲームのコード
import kotlin.random.Random

// 抽象クラス Player を定義
abstract class Player(val name: String) {
    // プレイヤーが石を取るための抽象関数
    abstract fun takeStones(totalStones: Int): Int
}

// 人間プレイヤーを表すクラス
class HumanPlayer(name: String) : Player(name) {
    // 人間プレイヤーが石を取る処理を実装
    override fun takeStones(totalStones: Int): Int {
        println("$name さん、何個の石を取りますか? (1~3個): ")
        val stones = readLine()?.toIntOrNull() ?: 1
        return stones.coerceIn(1, 3) // 1~3の範囲に制限
    }
}

// AIプレイヤーを表すクラス
class AIPlayer(name: String) : Player(name) {
    // AIプレイヤーがランダムに石を取る処理を実装
    override fun takeStones(totalStones: Int): Int {
        val stones = Random.nextInt(1, 4) // 1~3のランダムな数
        println("$name は $stones 個の石を取りました")
        return stones
    }
}

// ゲームのロジックを実装するクラス
class Game(val totalStones: Int) {
    private var remainingStones = totalStones

    // ゲームを開始するメンバ関数
    fun startGame(player1: Player, player2: Player) {
        var currentPlayer = player1

        while (remainingStones > 0) {
            println("残りの石の数: $remainingStones")

            val stonesTaken = currentPlayer.takeStones(remainingStones)
            remainingStones -= stonesTaken

            if (remainingStones <= 0) {
                println("${currentPlayer.name} が最後の石を取りました!")
                println("${currentPlayer.name} の負けです!")
                break
            }

            // プレイヤー交代
            currentPlayer = if (currentPlayer == player1) player2 else player1
        }
    }
}

fun main() {
    // 石の数を設定してゲームを開始
    val game = Game(20)

    // 人間プレイヤーとAIプレイヤーを作成
    val human = HumanPlayer("あなた")
    val ai = AIPlayer("コンピュータ")

    // ゲーム開始
    game.startGame(human, ai)
}

石取りゲームのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

Kotlinのテキスト&練習問題集へ戻る
トップページへ戻る