ChatGPTによるプログラミング学習06:Arcadeに触ってみた
実施結果
Pythonの2Dゲーム開発ライブラリとしてArcadeというのがあるというので触ってみました。ちょっと最後までできていませんが一応の体験として軽く載せておきます。
ChatGPTの大きなメリットとして、ちょっと聞いたことがあるものを、インターネットを探して見たり、書籍を買ったりするとちょっとおっくうになるということがあるのではないでしょうか。そんな時に簡単に触ってみるというのはいいですね。
簡単なサンプル
例によって、簡単なサンプルをお願いしました。
import arcade
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
SCREEN_TITLE = "Arcade Sample"
class Ball:
def __init__(self, x, y, radius, color):
self.x = x
self.y = y
self.radius = radius
self.color = color
def draw(self):
arcade.draw_circle_filled(self.x, self.y, self.radius, self.color)
def update_position(self, x, y):
self.x = x
self.y = y
class MyGame(arcade.Window):
def __init__(self, width, height, title):
super().__init__(width, height, title)
arcade.set_background_color(arcade.color.WHITE)
self.ball = Ball(50, 50, 20, arcade.color.BLUE)
def on_draw(self):
arcade.start_render()
self.ball.draw()
def on_mouse_motion(self, x, y, dx, dy):
self.ball.update_position(x, y)
def main():
game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
arcade.run()
if __name__ == "__main__":
main()
簡単なサンプルの割にはClassを使い、mainを使っていますね。この格調高さがArcadeの特徴かもしれませんね。While TRUE:というループもないですね。ただ、ClassでBallとMyGameを定義しているようです。
実行結果を次に示します。マウスに連れて青いボールが動きます。
サンプル2
次にこのようなサンプルを頼みました。
import arcade
import random
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
SCREEN_TITLE = "Ball Game"
BALL_RADIUS = 20
BALL_COLOR = arcade.color.RED
ARROW_SPEED = 5
ARROW_COLOR = arcade.color.BLACK
class Ball:
def __init__(self, x, y, radius, color):
self.x = x
self.y = y
self.radius = radius
self.color = color
self.velocity_y = -5 # ボールが落ちる速度
def draw(self):
arcade.draw_circle_filled(self.x, self.y, self.radius, self.color)
def update(self):
self.y += self.velocity_y
class Arrow:
def __init__(self, x, y, width, height, color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
def draw(self):
arcade.draw_rectangle_filled(self.x, self.y, self.width, self.height, self.color)
def move_left(self):
if self.x > 0:
self.x -= ARROW_SPEED
def move_right(self):
if self.x < SCREEN_WIDTH:
self.x += ARROW_SPEED
class MyGame(arcade.Window):
def __init__(self, width, height, title):
super().__init__(width, height, title)
arcade.set_background_color(arcade.color.WHITE)
self.ball_list = []
self.arrow = Arrow(SCREEN_WIDTH//2, BALL_RADIUS, BALL_RADIUS*2, BALL_RADIUS, ARROW_COLOR)
self.score = 0
def on_draw(self):
arcade.start_render()
# ボールを描画
for ball in self.ball_list:
ball.draw()
# 矢印を描画
self.arrow.draw()
# スコアを描画
arcade.draw_text(f"Score: {self.score}", 10, SCREEN_HEIGHT-20, arcade.color.BLACK, 16)
def update(self, delta_time):
# ボールを更新
for ball in self.ball_list:
ball.update()
# 上の壁に衝突した場合、スコアを減点
if ball.y < 0:
self.score -= 1
self.ball_list.remove(ball)
# 矢印に衝突した場合、スコアを加点
if ball.y < BALL_RADIUS and abs(ball.x - self.arrow.x) < BALL_RADIUS:
self.score += 5
self.ball_list.remove(ball)
# ボールを追加
if random.randint(1, 50) == 1:
ball = Ball(random.randint(0, SCREEN_WIDTH), SCREEN_HEIGHT+BALL_RADIUS, BALL_RADIUS, BALL_COLOR)
self.ball_list.append(ball)
def on_key_press(self, key, modifiers):
# 矢印キーで矢印を移動
if key == arcade.key.LEFT:
self.arrow.move_left()
elif key == arcade.key.RIGHT:
self.arrow.move_right()
def game_clear(self):
# スコアが20点以上になった
if self.score >= 20:
arcade.draw_text("Game Clear!!", SCREEN_WIDTH//2-70, SCREEN_HEIGHT//2, arcade.color.BLACK, 32)
return True
return False
def main():
game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
arcade.run()
if __name__ == "__main__":
main()
一番目立ったのはARROWというので何かと思いましたが、ボールを矢印キーで動かすというのを乞う誤解したようです。
結果をしめします
結果を見て、ボールがバーに当たれば消滅指せたかったのですが、うまくいきませんでした。バーの動きもぎこちない動きでした。pygameの動きではクリアしている問題なので、このまま終了にしました。
感想
pygameとarcadeの違いについて、ChatGTPに聞きました。
チュートリアルは量も多いけど初心者用にも使いやすくできていると思われます。
是非、こちらで勉強してください。僕も時間があったら覗いてみようと思います。
20230506 記
この記事が気に入ったらサポートをしてみませんか?