ScratchからPython へ・・・その1 熊さんが動いた!
いきさつ
ChatGPTなどのテキスト生成AIを使ってPythonのプログラミングの入門的なことを個人のYoutube,このnoteなどで発表してきた。個人的にはPythonのプログラミングの経験はほどんど練習問題程度で生成AIがどこまでできるのか判断できず、そのための試行錯誤的な部分が多かった。
今回、Youtubeに専門チャンネルを立ち上げてることにした。最初の投稿はYouTubeだけの説明では個々のコードの理解も難しいかと思うのでこのnoteにはそのコードの理解を主として書いて行こうと思う。
プログラムの基本的なコード構造
まず最初にリートンに次の質問をした。
具体的なコード
import pygame
from pygame.locals import *
# ゲームの初期化
pygame.init()
screen_width, screen_height = 640, 480
screen = pygame.display.set_mode((screen_width, screen_height))
clock = pygame.time.Clock()
# ゲームループ
running = True
while running:
# イベントの処理
for event in pygame.event.get():
if event.type == QUIT:
running = False
# ゲームオブジェクトの更新
# 画面の描画
screen.fill((0, 0, 0)) # 背景を黒で塗りつぶす
# 画面更新
pygame.display.flip()
# フレームレートの調整
clock.tick(60)
# ゲーム終了
pygame.quit()
上記の普通の言語による構造と、プログラムによる構造をよく見比べてみてください。若干の英語力が必要ですけど、わからないのはBingを開いて聞いて行けばと思います。
Editorの選択
上記の示されたプログラムを実行するにはeditorに書き込んで実行する必要があります。
テキスト・プログラミングが初めてでしたら、まずはMu-editorをお勧めします。
このメニューの中で、新規・開く・保存・実行(停止)位を知ればとりあえずは使えますね。また、実力が上がってこれでは物足りないなどとなれば、つぎの高級エディターを使いこなすようになればいいかと思います。
なお、左上にモードというボタンがありますね。これをクリックしてPythonになっているか確認してください。
では、editorがきまれば、上のコードを打ち込んでみてください。コピペでもいけますが、、まずは、努力です。頑張ってください。出来た時の楽しみを味わってください。
実行
コードを打ったら、保存→実行の順で行ってください。タイプミスがあってもあんまりはっきりわからないかもしれませんね。一生懸命に考えてもわからないときはコピペで行きましょう。生成AIは必ずしも正しい答えを示さないといいますから、将来のためには、こういう誤り探しはやはり大事です。
さて、この結果として、つぎの結果が出ました。
真っ黒な画面が出てきました。これは正しい結果でしょうか。何か、エラーでこういう図が出てきたのでしょうか?
プログラムには次の行があります。
# 画面の描画
screen.fill((0, 0, 0)) # 背景を黒で塗りつぶす
(0,0,0)は色のRGB表記で黒を表します。これで画面が黒になったことは間違いとは言えないですね。でも、ちょっと寂しい(^^♪。
もう少し、進みましょう。
赤い四角形を動かす
次の質問・お願いをしました。
ミスして、プログラムをつけ忘れました( ノД`)シクシク…
が、つぎの回答をしてくれました。
import pygame
from pygame.locals import *
# Pygameを初期化
pygame.init()
# 画面サイズの設定
screen = pygame.display.set_mode((600, 400))
# 動きのスピード
speed = [2, 0]
# 四角形の初期位置
rect = pygame.Rect(50, 50, 60, 60)
# メインループ
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
# 四角形の位置を更新
rect.move_ip(speed)
# 画面の端で跳ね返る動き
if rect.left < 0 or rect.right > 600:
speed[0] = -speed[0]
# 画面の描画
screen.fill((0, 0, 0)) # 背景を黒で塗りつぶす
pygame.draw.rect(screen, (255, 0, 0), rect) # 四角形を描画
# 画面更新
pygame.display.flip()
# Pygameを終了
pygame.quit()
ミスをしましたが、ちゃんと前のコード・スニペット(というのかな)を使って作ってくれました。
前のプログラムに変更点を入れて修正してください。いい勉強になるかと思います。
実行結果です。
※ うまく埋め込みが機能しなかった?のでこれで勘弁してください。
速度などを変えていいかもしれませんね。
順調にプログラムが進んでいます。
熊さんを動かす
今度はScratch素材を使ってみましょう。
・ 赤い四角を熊さんに変更します
・ 黒い背景を砂漠の絵にします。
import pygame
from pygame.locals import *
# Pygameを初期化
pygame.init()
# 画面サイズの設定
screen = pygame.display.set_mode((600, 400))
# 背景画像の設定
background = pygame.image.load('background.png')
# オブジェクトの画像と速度を設定
bear = pygame.image.load('bear.png')
bear_rect = bear.get_rect()
speed = [1, 0] # 速度を遅く設定
flip_bear = False # オブジェクトの初期向き
# メインループ
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
# 四角形の位置を更新
bear_rect.move_ip(speed)
# 画面の端で跳ね返る動き
if bear_rect.left < 0 or bear_rect.right > 600:
speed[0] = -speed[0]
flip_bear = not flip_bear # 姿勢を反転
# 画面の描画
screen.blit(background, (0, 0)) # 背景画像を描画
screen.blit(pygame.transform.flip(bear, flip_bear, False), bear_rect) # 四角形を描画
# flip_bearがTrueのとき、画像は水平に反転します。Falseのときは通常通りの向きです。
# 画面更新
pygame.display.flip()
# Pygameを終了
pygame.quit()
bear.svg が望ましくないとのことですが、svg形式でうまくいきますので、実際はbear.svgで使いました。また、何か問題があった時に考えましょう。
プログラムの実行結果です。
うまく、埋め込みができていませんが、これで見れればありがたいです。
※ 見えないときは連絡願えるとありがたいです。
まとめ
最初のステップとしてゲームつくりの構造を学び、Scratch素材を使っての簡単なプログラムを例示した。Scratchでは簡単にできますが、Pythonではそれなりのコードになりますね。
今回は簡単な結果でしたが、次回はこれを動物も増やして運動会的なものを作ってみましょう。
リンク
2023/12/07
この記事が気に入ったらサポートをしてみませんか?