簡単なゲームプログラムの製作は、プログラミングのよい練習になります。
ChatGPTを使えば、簡単なゲームプログラムのひな型がすぐに作れます。ゲーム作りでPythonプログラミングを学びましょう!
Pythonを実行する方法
Pythonを実行するやりかたは、簡単なものから本格的な方法まで、いろいろあります。好きなやりかたで始めましょう。
ちょっとお試し:PyWeb
PyWebを使うと、Web上でPythonが実行できます。ユーザー登録なども不要です。「利用規約に同意し開始」から開始することができます。
ちょっとだけ試しにやってみようかな、というかたは、PyWebがおススメ。
いろいろお試し:Google Colaboratory
Google Colaboratory(グーグルコラボ)は、Googleが無料で提供している、機械学習の教育や研究用の開発環境です。無償で利用できます。(Googleアカウントは必要)
ノートブックを作成してコードを入力すれば、Pythonプログラムがすぐに実行できます。
グーグルコラボは、色々なライブラリが既に使えるようになっているのが、いいところ。ちょっと分析とか機械学習をやってみたいな、という時には便利です。
本格的プログラミング:Python公式サイト
一番正式なやりかたは、Python公式サイトにある、環境構築ガイドです。
これが本当のPython開発環境です。本格的にプログラミングを始めるなら、Python公式サイトの手順で環境構築しましょう。
ChatGPTにPythonプログラムを書いてもらおう
さて、実行する環境が整ったところで、プログラムを作りましょう。
ChatGPTは、プログラムを書くことができます。こんな風にお願いしましょう。
Pythonで〇〇を作って
〇〇に作ってほしいものを入れてお願いすれば、様々なプログラムを書いてくれます。
簡単なゲームプログラムを、3種類ほど書いてみましょう。
簡単ゲームその1:数当てゲーム
まずは、始めてのプログラミング、というときによく見るお題、数当てゲームです。
お願いChatGPT
Pythonで数当てゲームを作って
import random
def guess_number():
number = random.randint(1, 100) # 1から100までの乱数を生成
tries = 0 # 回答回数の初期化
print("1から100までの数字を当ててください!")
while True:
guess = int(input("予想した数字を入力してください: "))
tries += 1
if guess < number:
print("もっと大きな数字です!")
elif guess > number:
print("もっと小さな数字です!")
else:
print(f"正解です!{tries}回目で当たりました!")
break
guess_number()
コンピュータがランダムな数字を選びます。その数字を当てるゲームです。
遊んでみよう
さっそく動かしましょう。
1から100までの数字を当ててください!
予想した数字を入力してください: 50
もっと大きな数字です!
予想した数字を入力してください: 75
もっと小さな数字です!
予想した数字を入力してください: 63
もっと大きな数字です!
予想した数字を入力してください: 69
もっと大きな数字です!
予想した数字を入力してください: 71
もっと大きな数字です!
予想した数字を入力してください: 73
もっと小さな数字です!
予想した数字を入力してください: 72
正解です!7回目で当たりました!
ちゃんと動きましたね。
プログラムの基本(構造化プログラミング、入力と出力)が凝縮
シンプルですが、プログラミングの基本が凝縮された良問です。
- 入力と出力 入力して(キーボード)、変換して、出力する(ディスプレイ)
- 構造化プログラミング 順次、選択、反復の3つで組み立てる
プログラミングの、大切な最初の一歩です。
簡単ゲームその2:FizzBuzz(フィズバズ)問題
プログラマーに応募した者が、本当にプログラムを書けるのか見極める。そういうために作られたお題です。
お願いChatGPT
PythonでFizzBuzzゲームを作って
def fizzbuzz(n):
for i in range(1, n+1):
if i % 3 == 0 and i % 5 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
n = int(input("ゲームの上限値を入力してください: "))
fizzbuzz(n)
ルールは以下です。
- 数字を1から順番に出力
- 数字が3で割り切れるなら、”Fizz”と表示
- 数字が5で割り切れるなら、”Buzz”と表示
- 数字が3と5の両方で割り切れる場合は、”FizzBuzz”と表示
- それ以外なら、その数字を表示
有名な問題なので、ChatGPTが丁寧な解説をしてくれます。
遊んでみよう
結果はこのような感じ。
ゲームの範囲を入力してください: 15
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
FizzBuzzできると、できるひとっぽい感じ
世界的に有名なFizzBuzz問題。FizzBuzzできると、この人分かってるぞ、感が出ます。
簡単ゲームその3:Numeron(ヌメロン)ゲーム
かつてバラエティ番組で放映されていた、数字をめぐる戦略型推理ゲーム、ヌメロン。熱い頭脳戦が繰り広げられていました。
ヌメロンゲームを再現しましょう。ルールは以下のようになります。(コンピューターゲーム向けにアレンジしています)
- 0-9までの数字のうち3つを使って、3つの番号を作成する
- カードに重複は無いので「550」「377」「999」といった同じ数字を2つ以上使用した番号は作れない
- プレイヤーは、相手の番号を推理してコールする
- コンピューターは、コールされた番号がどの程度合っているかを発表する。
- 数字も桁も合うなら「EAT」(イート)、数字は合うが桁は合わないなら「BITE」(バイト)
- 例として、相手の番号が「765」、コールされた番号が「746」であった場合
- 3桁のうち「7」は桁の位置が合致しているため、EAT
- 「6」は数字自体は合っているが桁の位置が違うため、BITE
- EATが1つ・BITEが1つなので、「1EAT-1BITE」となる
- このように推理し、用意された番号を完全に当てきったら、プレイヤーの勝利となる
お願いChatGPT
ChatGPTに、もうそのまんま、お願いしてみましょう。できるかな?
Pythonでヌメロンゲームを作って
ルールは以下の通り
・0-9までの数字のうち3つを使って、3つの番号を作成する
・カードに重複は無いので「550」「377」「999」といった同じ数字を2つ以上使用した番号は作れない
・プレイヤーは、相手の番号を推理してコールする
・コンピューターは、コールされた番号がどの程度合っているかを発表する。
・数字も桁も合うなら「EAT」(イート)、数字は合うが桁は合わないなら「BITE」(バイト)
・例として、相手の番号が「765」、コールされた番号が「746」であった場合
・3桁のうち「7」は桁の位置が合致しているため、EAT
・「6」は数字自体は合っているが桁の位置が違うため、BITE
・EATが1つ・BITEが1つなので、「1EAT-1BITE」となる
・このように推理し、用意された番号を完全に当てきったら、プレイヤーの勝利となる
import random
def generate_number():
numbers = random.sample(range(10), 3)
return ''.join(map(str, numbers))
def check_guess(target, guess):
eat = 0
bite = 0
for i in range(3):
if guess[i] == target[i]:
eat += 1
elif guess[i] in target:
bite += 1
return eat, bite
def play():
target = generate_number()
attempts = 0
while True:
guess = input("Enter your guess (3-digit number): ")
attempts += 1
if len(guess) != 3 or not guess.isdigit():
print("Invalid guess. Please enter a 3-digit number.")
continue
eat, bite = check_guess(target, guess)
print(f"{eat}EAT-{bite}BITE")
if eat == 3:
print("Congratulations! You guessed the number correctly.")
print(f"Number of attempts: {attempts}")
break
play()
すらすらと書きましたね。
遊んでみよう
戦略的知能ゲーム、スタートです。
Enter your guess (3-digit number): 012
0EAT-2BITE
Enter your guess (3-digit number): 345
0EAT-0BITE
Enter your guess (3-digit number): 678
0EAT-0BITE
Enter your guess (3-digit number): 901
0EAT-2BITE
Enter your guess (3-digit number): 209
1EAT-1BITE
Enter your guess (3-digit number): 291
0EAT-3BITE
Enter your guess (3-digit number): 129
3EAT-0BITE
Congratulations! You guessed the number correctly.
Number of attempts: 7
ちゃんと遊べますね。
だいぶ回数かかっちゃいました…
ちょっと解説:重複のない3桁番号の選びかた
ChatGPTのプログラム、なかなか興味深いです。ちょっと解説しましょう。
- 0-9までの数字のうち3つを使って、3つの番号を作成
- カードに重複は無いので「550」「377」「999」といった同じ数字を2つ以上使用した番号は作れない
いっけん、難しそうなこの部分。プログラムではたった1行で解決しています。
numbers = random.sample(range(10), 3)
このようにやっています。
- range(10)で、[0,1,2,…,9] の配列を作りだす
- そこからrandom.sampleで、3つを無作為に抽出する
あざやかですね。
ちょっと解説:EATとBYTEの判定
この判定はどうやっているのでしょう。
- 数字も桁も合うなら「EAT」(イート)、数字は合うが桁は合わないなら「BITE」(バイト)
ここですね。
def check_guess(target, guess):
eat = 0
bite = 0
for i in range(3):
if guess[i] == target[i]:
eat += 1
elif guess[i] in target:
bite += 1
return eat, bite
3個の配列同士を比較し、
- 同じインデックス位置で等しい(==)なら、EAT
- そうでなくても含まれる(in)なら、BITE
という判定です。Pythonは、こういうところがシンプルに書けていいですね。
本格的なゲーム作りなら、Pygameを使おう
ここまで、テキストを使った簡単なゲームを作ってきました。
「もっと、グラフィカルなゲームを作りたい!」
そんなときは、Pygame を使いましょう。
Pygameは、Pythonでコンピュータグラフィックスと音声を扱うためのライブラリです。これを使うと、さらに本格的なゲームが作れます。
ひとつ注意です。
Python環境が準備できたら、Pygameをインストールしておきます。
pip install pygame
あとは、ChatGPTにお願いしましょう。「Pygame」というキーワードを入れます。
Pygameで〇〇を作って
これで、Pygameを使ったコードを書いてくれます。
簡単ゲームその4:テニスゲーム
それでは、グラフィカルゲームを作りましょう。まずはテニスゲーム。
お願いChatGPT
Pygameでテニスゲームを作って
遊んでみよう
昔なつかしい感じのテニスゲームになりました。
ラケットがちゃんと動かせて、ボールを弾きますよ。
簡単ゲームその5:シューティングゲーム
もう少し、高度なゲームにも挑戦してみましょう。シューティングゲームです。
お願いChatGPT
Pygameでシューティングゲームを作って
遊んでみよう
グラフィックは地味だけど、ちゃんと赤い敵が襲ってくるし、青い自機を動かして弾も打てますよ!
まとめ
ChatGPTは、適切な条件を与えれば、かなり複雑なプログラムも書いてくれます。プログラミングのひな型を作るのに最適です。
さらに、ChatGPTは、世の中にあるノウハウが凝集されたプログラムを書いてくれます。実装のしかたでヒントになるときも多いです。
ゲームを一通り遊んだら、さらに自分のお好みで改造してみましょう。プログラミング力の向上になりますよ。
プログラミングに、AIをおおいに活用しましょう!
コメント