ChatGPTでプログラミングをしてみよう1
みなさん、こんにちは。さいたま市の初心者向きプログラミング教室「ツクリウム」です。
さて、今日は話題のAI「ChatGPT」を使ってプログラミングをしてみようというものです。そして今回はかんたんなゲームです。
と、言ってもかんたんです。なぜならAIと軽くお話するだけなのですから。
そんなわけで、さっそく「何かかんたんなゲームをpython、pygameで作ってみて」という感じで質問してみました。
こんな雑な指示でもAIは優秀です。あっという間にコードを書いてしまいます。もちろん、完璧というわけではありません。「ここはこう直して」という感じ手直しをお願いしてやりとりを繰り返します。なお、ゲームオーバーの表示時間がおかしかったのでその処理は軽く人間が手直しはしました。が、ほとんどがAIが書いてくれたのです。
そして完成したのが以下のpythonのコードです。
import pygame
import random
import time
# 初期化
pygame.init()
# ゲーム画面の設定
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("簡単なゲーム")
# ゲームオブジェクトの設定
player_width = 50
player_height = 50
player_x = screen_width / 2 - player_width / 2
player_y = screen_height - player_height
player_speed = 5
player = pygame.Rect(player_x, player_y, player_width, player_height)
obstacle_width = 50
obstacle_height = 50
obstacle_x = random.randint(0, screen_width - obstacle_width)
obstacle_y = 0
obstacle_speed = 5
obstacle = pygame.Rect(obstacle_x, obstacle_y, obstacle_width, obstacle_height)
score = 0
font = pygame.font.SysFont(None, 30)
# ゲームループ
game_running = True
game_over_time = None # ゲームオーバー時刻
clock = pygame.time.Clock()
while game_running:
clock.tick(60)
screen.fill((0, 0, 0))
# イベント処理
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_running = False
# キー入力処理
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player.x > 0:
player.x -= player_speed
if keys[pygame.K_RIGHT] and player.x < screen_width - player_width:
player.x += player_speed
# 障害物の移動とスコア加算
obstacle.y += obstacle_speed
if obstacle.y > screen_height:
obstacle.x = random.randint(0, screen_width - obstacle_width)
obstacle.y = 0
score += 1
# プレイヤーと障害物の衝突判定
if player.colliderect(obstacle):
game_running = False
game_over_time = pygame.time.get_ticks() # ゲームオーバー時刻を取得
# ゲームオブジェクトの描画
pygame.draw.rect(screen, (0, 0, 255), player)
pygame.draw.rect(screen, (255, 0, 0), obstacle)
# スコアの表示
score_text = font.render("Score: " + str(score), True, (255, 255, 255))
screen.blit(score_text, (10, 10))
# 衝突判定時に"Game Over"の表示
if not game_running:
#人間が追加 終了表示を2秒にする。
game_over_text = font.render("Game Over", True, (255, 0, 0))
screen.blit(game_over_text, (screen_width // 2 - game_over_text.get_width() // 2, screen_height // 2 - game_over_text.get_height() // 2))
pygame.display.update()
time.sleep(2)
break
pygame.display.update()
# ゲーム終了処理
pygame.quit()
できあがったゲームは以下のような画面です。プレイヤーは青の四角で左右のキーで横に動きます。
そして、画面の上から落ちてくる赤い四角にあたらないように続けるゲームで1つかわすごとに1点が追加されるというものです。何やら英文の難しそうに見えるかもしれませんが、これらは少し勉強すれば意味がわかるようになります。また、pythonは変数や関数などは日本語も使えますので以下のように書くこともできます。これもChatGPTに頼むとあっという間に書き直してくれます(もちろん問題なく動作します。)
import pygame
import random
import time
# 初期化
pygame.init()
# ゲーム画面の設定
画面幅 = 800
画面高さ = 600
画面 = pygame.display.set_mode((画面幅, 画面高さ))
pygame.display.set_caption("簡単なゲーム")
# ゲームオブジェクトの設定
プレイヤー幅 = 50
プレイヤー高さ = 50
プレイヤー位置_x = 画面幅 / 2 - プレイヤー幅 / 2
プレイヤー位置_y = 画面高さ - プレイヤー高さ
プレイヤー速度 = 5
プレイヤー = pygame.Rect(プレイヤー位置_x, プレイヤー位置_y, プレイヤー幅, プレイヤー高さ)
障害物幅 = 50
障害物高さ = 50
障害物位置_x = random.randint(0, 画面幅 - 障害物幅)
障害物位置_y = 0
障害物速度 = 5
障害物 = pygame.Rect(障害物位置_x, 障害物位置_y, 障害物幅, 障害物高さ)
スコア = 0
フォント = pygame.font.SysFont(None, 30)
# ゲームループ
ゲーム中 = True
ゲームオーバー時刻 = None # ゲームオーバー時刻
時計 = pygame.time.Clock()
while ゲーム中:
時計.tick(60)
画面.fill((0, 0, 0))
# イベント処理
for イベント in pygame.event.get():
if イベント.type == pygame.QUIT:
ゲーム中 = False
# キー入力処理
キー入力 = pygame.key.get_pressed()
if キー入力[pygame.K_LEFT] and プレイヤー.x > 0:
プレイヤー.x -= プレイヤー速度
if キー入力[pygame.K_RIGHT] and プレイヤー.x < 画面幅 - プレイヤー幅:
プレイヤー.x += プレイヤー速度
# 障害物の移動とスコア加算
障害物.y += 障害物速度
if 障害物.y > 画面高さ:
障害物.x = random.randint(0, 画面幅 - 障害物幅)
障害物.y = 0
スコア += 1
# プレイヤーと障害物の衝突判定
if プレイヤー.colliderect(障害物):
ゲーム中 = False
ゲームオーバー時刻 = pygame.time.get_ticks() # ゲームオーバー時刻を取得
# ゲームオブジェクトの描画
pygame.draw.rect(画面, (0, 0, 255), プレイヤー)
pygame.draw.rect(画面, (255, 0, 0), 障害物)
# スコアの表示
スコアテキスト = フォント.render("Score: " + str(スコア), True, (255, 255, 255))
画面.blit(スコアテキスト, (10, 10))
# 衝突判定時に"ゲームオーバー"の表示
if not ゲーム中:
ゲームオーバーテキスト = フォント.render("Game Over", True, (255, 0, 0))
画面.blit(ゲームオーバーテキスト, (画面幅 // 2 - ゲームオーバーテキスト.get_width() // 2, 画面高さ // 2 - ゲームオーバーテキスト.get_height() // 2))
pygame.display.update()
time.sleep(2)
break
pygame.display.update()
#ゲーム終了処理
pygame.quit()
ざっと目を通してみるだけでも違いは感じると思います。
英語ばかりだとチンプンカンプンだったものでも、なんとなくしていることのイメージがつかめるのではないでしょうか?
未経験者や初心者であれば、プログラミングの知識はほとんどないにも関わらずこの違いはことのほか大きいものです。
(もちろん就職や受験などが大きな目標の場合、こうした書き方は問題は問題となることもありますが、健康や趣味が目的であればこうしたプログラミングのあり方でも全く問題ないと思います。自分が理解できるプログラムを書くことが大切だからです。)
さて、ゲームそのものはとてもシンプルなものです。が、重要なのはやはり今までのプログラミングの手法が大きく変わりつつある、というよりも変わってしまったというのが実感です。当然ながら、学びの在り方も大きく変わろうとしています。そして今までは挑戦できなかった人に新しいチャンスがやってきたとも言えるのです。
入会、または、体験会のお申込み
プログラミング教室「ツクリウム」ではスクラッチやPythonなどを学ぶ、小学生、中学生、高校生、主婦やシニアなどの初心者向けの講座を通学形式やオンライン形式で開講しています。
お問いあわせ・ご入会・体験会のお申込みは下記のリンクからお願いいたします。
画像をクリックするとお問い合わせページにジャンプします。