![見出し画像](https://assets.st-note.com/production/uploads/images/104850719/rectangle_large_type_2_fa30bff27f946447e8c3f0650a71c6b0.png?width=1200)
ChatGPTによるプログラミング学習06:Arcadeに触ってみた
実施結果
Pythonの2Dゲーム開発ライブラリとしてArcadeというのがあるというので触ってみました。ちょっと最後までできていませんが一応の体験として軽く載せておきます。
ChatGPTの大きなメリットとして、ちょっと聞いたことがあるものを、インターネットを探して見たり、書籍を買ったりするとちょっとおっくうになるということがあるのではないでしょうか。そんな時に簡単に触ってみるというのはいいですね。
簡単なサンプル
例によって、簡単なサンプルをお願いしました。
![](https://assets.st-note.com/img/1683347772638-APnAIlrLAS.png?width=1200)
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
次にこのようなサンプルを頼みました。
![](https://assets.st-note.com/img/1683349733892-3jDAxJV3qP.png?width=1200)
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に聞きました。
ArcadeとPygameは、どちらもPythonで2Dゲームを作成するためのライブラリですが、いくつかの違いがあります。
1.設計思想の違い
Arcadeは、プログラマーがコードを書きやすくすることを目的とした、直感的で簡単なAPIを提供することに特化しています。一方で、Pygameは、柔軟性とカスタマイズ性を重視しており、プログラマーが自由に機能を拡張できるように設計されています。2.アニメーションの実装方法の違い
Arcadeは、アニメーションの実装に便利なSpriteクラスを提供しています。Spriteクラスは、画像やアニメーションのフレームを保持し、簡単に表示や操作を行うことができます。一方、Pygameは、アニメーションの実装にSurfaceクラスを使用することが多く、Spriteクラスはデフォルトで提供されていません。
3.描画速度の違い
Arcadeは、Pygameよりも描画速度が速いとされています。これは、ArcadeがOpenGLを使用しているためで、GPUのハードウェアアクセラレーションを活用することができるためです。一方、Pygameは、CPUのみで描画を行うため、高速な描画が求められる場合には、パフォーマンスの制限がある場合があります。
以上が、ArcadeとPygameの主な違いです。どちらも優れたライブラリであり、ゲーム開発には役立ちますが、目的や用途に応じて選択することが重要です。
![](https://assets.st-note.com/img/1683353035760-nnsDjGxcbc.png?width=1200)
チュートリアルは量も多いけど初心者用にも使いやすくできていると思われます。
是非、こちらで勉強してください。僕も時間があったら覗いてみようと思います。
20230506 記
この記事が気に入ったらサポートをしてみませんか?