見出し画像

いろんなゲーム用ライブラリーに触ってみた

プロローグ

いままでに、簡単にpygame ,arcadeライブラリーを使ったサンプルを作ってみた。ここでちょっと寄り道をしてどんなライブラリーがあるのか聞いてみた。

ゲーム用のライブラリーはどういうのがあるか

とりあえず、次のお願いをCHATで行った
「Pythonのいろんなゲーム作成に使われるライブラリーモジュールを教えてください」

Pythonでゲームを作成する際に使われる代表的なライブラリやモジュールは以下の通りです:
1. Pygame:
2Dゲーム開発に広く使われるライブラリ。
サウンド、グラフィックス、イベント処理などの機能を提供。
2. Pyglet:
2Dおよび3Dゲームの開発に使われるライブラリ。
OpenGLを使用して高性能なグラフィックスを提供。
Arcade:
シンプルで使いやすい2Dゲーム開発ライブラリ。
Pygletの上に構築されている。
4. Panda3D:
3Dゲーム開発に使われるエンジン。
ディズニーとカーネギーメロン大学が共同開発。
5. Godot (Pythonバインディング):
GodotエンジンのPythonバインディングを使用してゲームを開発。
高度な2Dおよび3Dゲームエンジン。

pygameの簡単なサンプルとチュートリアル

質問

簡単なサンプルとチュートリアルをCTRL+Kでお願いしました。

# Pygameの簡単なサンプル

import pygame
import sys

# 初期化
pygame.init()

# 画面サイズの設定
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Pygameサンプル")

# 色の定義
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)

# メインループ
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 画面を白で塗りつぶす
    screen.fill(WHITE)

    # 青い円を描く
    pygame.draw.circle(screen, BLUE, (320, 240), 50)

    # 画面を更新
    pygame.display.flip()

# 終了処理
pygame.quit()
sys.exit()

# Pygameチュートリアル
# 1. Pygameの公式ドキュメントを参照してください: https://www.pygame.org/docs/
# 2. Pygameのチュートリアルサイト: https://www.pygame.org/wiki/tutorials
# 3. YouTubeで「Pygame tutorial」と検索して、ビデオチュートリアルを見つけてください。
# 4. PygameのサンプルコードをGitHubで探して、実際に動かしてみてください。
# 5. Pygameコミュニティフォーラムで質問してみてください: https://www.pygame.org/wiki/info
生成された円

プログラムは最初、変数を設定し, while running で青い円を繰り返し表示しています。ゲームの終了は上のタイトルを表示している右の✖をクリックします。
文法的な制約も感じられず、ある程度、分かり易い作りになっています。

なお、sysというモジュールが使われています。
sysモジュールはPythonの標準ライブラリの一部で、システム固有のパラメータや関数にアクセスするために使用されます。pygameと一緒に使われる場合、通常はプログラムの終了処理を行うために使用されます。

具体的には、sys.exit()を使ってプログラムを終了させることが一般的です。以下のコードのように、pygame.quit()でPygameを終了した後にsys.exit()を呼び出してプログラム全体を終了します。

チュートリアルもあります。こういう場合、よくうそをつかれる場合もあります。皆さんで確認してください(^^♪

 pygletの簡単なサンプルとチュートリアル

質問

同じプログラムをpygletで書いてもらいました

# Pygletの簡単なサンプル

import pyglet

# ウィンドウの作成
window = pyglet.window.Window(640, 480, "Pygletサンプル")

# 色の定義
WHITE = (255, 255, 255, 255)
BLUE = (0, 0, 255, 255)


# 青い円を描くためのサークルオブジェクトを作成
circle = pyglet.shapes.Circle(320, 240, 50, color=(0, 0, 255))

@window.event
def on_draw():
    # 画面を白で塗りつぶす
    window.clear()
    pyglet.gl.glClearColor(*WHITE)
    # 青い円を描く
    circle.draw()

# 終了処理
@window.event
def on_close():
    pyglet.app.exit()

# メインループの開始
pyglet.app.run()

# Pygletチュートリアル
# 1. Pygletの公式ドキュメントを参照してください: https://pyglet.readthedocs.io/
# 2. Pygletのチュートリアルサイト: https://pyglet.readthedocs.io/en/latest/programming_guide/index.html
# 3. YouTubeで「Pyglet tutorial」と検索して、ビデオチュートリアルを見つけてください。
# 4. PygletのサンプルコードをGitHubで探して、実際に動かしてみてください。
# 5. Pygletコミュニティフォーラムで質問してみてください: https://groups.google.com/forum/#!forum/pyglet-users
生成サンプル

プログラムはevent関数を定義して、実行は pyglet.app.run()で一括して処理をしてくれるようです。ある意味、分かり易いかと思います。
2Dおよび3Dゲームの開発に使われるライブラリ。 OpenGLを使用して高性能なグラフィックスを提供とのことです。
皆さんとやっていく機会があればやってみたいと思います。

OpenGLという言葉が出てきます。これも聞いてみると次のような返事です。


OpenGL(Open Graphics Library)は、2Dおよび3Dグラフィックスを描画するためのクロスプラットフォームのAPI(アプリケーションプログラミングインターフェース)です。以下はOpenGLの主な特徴です:

1.クロスプラットフォーム:Windows、macOS、Linuxなど、さまざまなオペレーティングシステムで動作します。

2.リアルタイムレンダリング:リアルタイムで高品質なグラフィックスを描画するために最適化されています。

3. ハードウェアアクセラレーション:GPU(グラフィックスプロセッシングユニット)を利用して高速な描画を実現します。

4.オープンスタンダード:Khronos Groupによって管理されているオープンスタンダードであり、広く普及しています。

OpenGLは、ゲーム開発、シミュレーション、CAD(コンピュータ支援設計)、VR(仮想現実)など、さまざまな分野で使用されています。

Cursorの50トークンをオーバーしました

ここまでCursorを便利に使ってきましたが、CursorのGPT-4oのトークン制限50個に達してしまいました。

cursor-small というのなら毎月200トークン、使えるようです。これが何者か?、CHATで聞いてもちょっと意味不明だった。まあ、これでも使えるのかもと思ったが、将来的には不安があったので、とりあえずは、gpt-4o-miniを使うことにした。
また、ChatGPTにPythonというGPTがあり、ここではgpt-4oが使われるようなので、こっちも併用して使うことにした。

arcadeで簡単なサンプルとチュートリアル

質問

「arcadeを使って、arcadeの特徴を示す簡単なサンプルを作ってください。また、チュートリアルがあったら教えてください」

import arcade

# ウィンドウのサイズ
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480

# アプリケーションクラス
class MyGame(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Arcadeサンプル")
        arcade.set_background_color(arcade.color.WHITE)

    def on_draw(self):
        arcade.start_render()
        # 青い円を描く
        arcade.draw_circle_filled(320, 240, 50, arcade.color.BLUE)

    def update(self, delta_time):
        pass

# メイン関数
def main():
    game = MyGame()
    arcade.run()

if __name__ == "__main__":
    main()

# Arcadeチュートリアル
# 1. Arcadeの公式ドキュメントを参照してください: https://arcade.academy/
# 2. Arcadeのチュートリアルサイト: https://arcade.academy/tutorials/index.html
# 3. YouTubeで「Arcade tutorial」と検索して、ビデオチュートリアルを見つけてください。
# 4. ArcadeのサンプルコードをGitHubで探して、実際に動かしてみてください。
# 5. Arcadeコミュニティフォーラムで質問してみてください: https://arcade.academy/community/index.html
gpt-4o-miniで作成

このarcadeで初めて、classが出てきました。そして、最後にmain関数が定義されます、そして、次に実行されます。

if __name__ == "__main__":
    main()

このちょっと変わったおまじないの意味をCHATで聞いてみましょう。

if __name__ == "__main__": は、Pythonスクリプトが直接実行されたときにのみ、以下のコード(この場合は main() 関数)を実行するための条件文です。

具体的には:

  • スクリプトが他のモジュールからインポートされた場合、この条件は False になり、main() 関数は実行されません。

  • スクリプトが直接実行された場合、この条件は True になり、main() 関数が呼び出されます。

これにより、モジュールとしての再利用性が高まります。

シンプルで使いやすい2Dゲーム開発ライブラリ。
Pygletの上に構築されている。

arcadeの特徴として、最初、このように述べられていました。Pygletの場合と同じく、関数定義でdefが使われているのもその名残でしょうか。


Panda3Dの簡単なサンプルとチュートリアル

質問

「panda3Dを使って、panda3Dの特徴を示す簡単なサンプルを作ってください。また、チュートリアルがあったら教えてください」

Cursor(Gpt-4o-mini)ではえらーが出てうまくいかなかったので、ChatGPTのPython GPTを使って行った。

panda3Dについて、ChatGPTの説明


Panda3Dは、PythonとC++で記述されたオープンソースのゲームエンジンで、リアルタイム3Dアプリケーションの開発に特化しています。レンダリング、物理、アニメーション、オーディオ、AIなど、ゲーム開発に必要な機能を多く持っているのが特徴です。

サンプルコード: 簡単な3Dシーンの表示

以下は、Panda3Dを使って簡単な3Dモデルをロードし、回転させるサンプルコードです。

from direct.showbase.ShowBase import ShowBase
from panda3d.core import DirectionalLight, AmbientLight
from panda3d.core import Vec4

class MyApp(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)

        # 3Dモデルの読み込み
        self.model = self.loader.loadModel("models/panda-model")
        self.model.reparentTo(self.render)
        self.model.setScale(0.005, 0.005, 0.005)  # モデルのスケールを調整
        self.model.setPos(0, 10, 0)  # モデルの位置を調整

        # 環境光と方向光を追加
        ambient_light = AmbientLight("ambient_light")
        ambient_light.setColor(Vec4(0.3, 0.3, 0.3, 1))
        self.render.setLight(self.render.attachNewNode(ambient_light))

        directional_light = DirectionalLight("directional_light")
        directional_light.setColor(Vec4(0.8, 0.8, 0.8, 1))
        directional_light_node = self.render.attachNewNode(directional_light)
        directional_light_node.setHpr(0, -60, 0)
        self.render.setLight(directional_light_node)

        # モデルを回転させるタスクを設定
        self.taskMgr.add(self.spin_task, "spin_task")

    def spin_task(self, task):
        angle_degrees = task.time * 50.0
        self.model.setHpr(angle_degrees, 0, 0)
        return task.cont

app = MyApp()
app.run()

コードの説明

  1. ShowBase: Panda3Dの基本的なアプリケーションのクラスで、レンダリングや入力管理などの基本的な機能を提供します。

  2. Modelのロードと表示: loader.loadModelを使用して3Dモデルをロードし、reparentTo(self.render)でシーンに追加します。

  3. Lighting: 環境光と方向光を設定して、シーンにリアルな照明効果を追加します。

  4. モデルの回転: taskMgr.addを使用して、毎フレーム実行されるタスクを設定し、モデルを回転させます。

チュートリアル

Panda3Dの公式チュートリアルは非常に充実しており、基本から応用まで幅広く学ぶことができます。以下のリンクからアクセスできます。

  • Panda3D公式チュートリアル

このチュートリアルでは、シンプルな3Dシーンの作成、カメラ操作、照明設定、アニメーション、コリジョン(衝突)検出、シェーダーの使用など、Panda3Dの主要な機能をステップバイステップで学ぶことができます。

Panda3Dは非常にパワフルなエンジンであり、使いこなすことで高度なリアルタイム3Dアプリケーションを構築することが可能です。

いつか使ってみたいモジュールと言えるであろう(^^♪

godotの簡単なサンプルとチュートリアル

質問

godotを使って、godotの特徴を示す簡単なサンプルを作ってください。また、チュートリアルがあったら教えてください。

Godotは、シンプルで強力なゲームエンジンであり、2Dおよび3Dのゲーム開発に適しています。Godotの特徴を示すために、以下のようなシンプルな2Dゲームのサンプルを作成できます。このサンプルでは、画面上でプレイヤーキャラクターが矢印キーで移動するという基本的な機能を実装します。

1. Godotのインストール

まず、Godotをインストールする必要があります。公式サイトからダウンロードできます。

2. 新しいプロジェクトの作成

Godotを起動し、「New Project」をクリックして新しいプロジェクトを作成します。プロジェクトの名前を入力し、保存するディレクトリを選択します。

3. シンプルな2Dキャラクター移動スクリプト

以下に、簡単な2Dキャラクター移動スクリプトの例を示します。

Step 1: Nodeの配置

  1. Godotのエディタで、「2D Scene」を選択します。

  2. 「+」アイコンをクリックし、「Node2D」を追加します。これがルートノードになります。

  3. ルートノードを選択し、さらに「+」アイコンをクリックして「Sprite」と「KinematicBody2D」を追加します。

  4. Spriteに適切な画像(キャラクター)を設定します。

Step 2: キャラクター移動スクリプト

KinematicBody2Dに新しいスクリプトを追加し、以下のコードを記述します。

extends KinematicBody2D

# キャラクターの速度
var speed = 200

func _physics_process(delta):
    var velocity = Vector2.ZERO

    if Input.is_action_pressed("ui_right"):
        velocity.x += 1
    if Input.is_action_pressed("ui_left"):
        velocity.x -= 1
    if Input.is_action_pressed("ui_down"):
        velocity.y += 1
    if Input.is_action_pressed("ui_up"):
        velocity.y -= 1

    velocity = velocity.normalized() * speed
    move_and_slide(velocity)

4. インプットマッピングの設定

  1. Godotの上部メニューから、「Project」 > 「Project Settings」を選択します。

  2. 「Input Map」タブに移動し、「ui_right」「ui_left」「ui_down」「ui_up」をそれぞれ設定します。デフォルトでは、これらのアクションは矢印キーにマッピングされていますが、カスタマイズが可能です。

5. シーンの実行

シーンを保存し、再生ボタンを押してゲームを実行します。矢印キーを使用して、スプライトが画面上で移動することを確認できます。

Godotチュートリアルリソース

Godotを学ぶために、以下の公式ドキュメントとチュートリアルを参照することをお勧めします。

  1. Godot公式ドキュメント

    • Godotの基本概念から、スクリプティング、ツールの使い方まで幅広いトピックがカバーされています。

  2. Godotステップバイステップ

    • 初心者向けにGodotの使用方法をステップバイステップで解説するチュートリアル。

  3. YouTubeチャンネル - Godot Engine

    • 動画形式のチュートリアルやデモを通じて、より直感的に学ぶことができます。

このサンプルを元に、Godotの基本を理解し、より高度な機能に挑戦してみてください。

まずは次の次といった感じかな・・・( ノД`)シクシク…

エピローグ

5つのゲーム用ライブラリーとして紹介してくれたが、とりあえずはpygameである程度の経験を積み、arcadeを使ってプログラム練習になるのかな。panda3Dは周辺が難しそうであり、個人的にはGodotに進みそうな感じがある。

補足

今までのPythonの勉強ではtKinterとかPyselとかを聞いたことがある。これらについても整理しておこう。

Tkinter

同じことを聞いてみた。
「tKinterを使って、tKinterの特徴を示す簡単なサンプルを作ってください。また、チュートリアルがあったら教えてください。」

🗒️ Answer

Tkinterは、PythonでGUIアプリケーションを作成するための標準ライブラリです。以下に、簡単なTkinterアプリのサンプルコードを示します。このサンプルでは、ボタンをクリックするとラベルにテキストが表示されます。

サンプルコード

import tkinter as tk

def on_button_click():
    label.config(text="Button clicked!")

# メインウィンドウの作成
root = tk.Tk()
root.title("Tkinter Sample")

# ラベルの作成
label = tk.Label(root, text="Hello, Tkinter!")
label.pack()

# ボタンの作成
button = tk.Button(root, text="Click me", command=on_button_click)
button.pack()

# メインループの開始
root.mainloop()

このコードを実行すると、ウィンドウが開き、ボタンをクリックするとラベルのテキストが変わる簡単なGUIアプリケーションが動作します。Tkinterの基本的な使い方を学ぶのに最適です。

最初の画面
clickされた後の画面

チュートリアルのリソース

Tkinterの詳細を学ぶには、以下のチュートリアルを参照してください:

  1. Tkinterの使い方: 基本的なGUIアプリ作成方法【3】.

  2. Tkinterのチュートリアル【2】.

  3. Python公式ドキュメント - Tkinter【6】.

これらのリソースを活用して、Tkinterでより高度なアプリケーションを作成するスキルを磨いてください。

🌐 Sources

  1. qiita.com - PythonのTkinterを使って簡単なGUIプログラムを作ってみた

  2. qiita.com - 【執筆中】【Python/GUI】Tkinterのチュートリアル

  3. pythonsoba.tech - 【Tkinterの使い方】PythonでGUIアプリを作成する方法を ...

  4. [youtube.com - Make your own desktop application! Easy with Tkinter! For ...

  5. isc.meiji.ac.jp - step04 tkinterライブラリの使い方

  6. python.org - 25.1. tkinter --- Tcl/Tk の Python インタフェース


GUIアプリとは、「Graphical User Interface」(グラフィカル・ユーザー・インターフェース)を持つアプリケーションのことです。これは、ユーザーが視覚的な要素(ボタン、ウィンドウ、メニュー、テキストボックスなど)を操作することでアプリケーションとやり取りするタイプのアプリケーションです。

GUIアプリの特徴

  • 視覚的な操作: ユーザーはマウスやキーボードを使って、画面上の視覚的な要素をクリックしたり、入力したりすることで操作を行います。

  • インタラクティブな要素: ボタンをクリックするとアクションが実行される、スライダーで値を変更できるなど、ユーザーとのインタラクションが中心となります。

  • 複数のウィンドウ: 一つ以上のウィンドウを使って、情報を表示し、ユーザーに選択肢を提供することができます。

  • 直感的な操作: コマンドラインインターフェース(CLI)とは異なり、複雑なコマンドを覚える必要はなく、直感的に操作できるのが特徴です。

GUIアプリの例

  • テキストエディタ: メモ帳やWordなど、テキストを入力して編集できるアプリ。

  • Webブラウザ: ChromeやFirefoxなど、ウェブサイトを表示して閲覧できるアプリ。

  • 電卓: 数値を入力して計算を行うシンプルなアプリ。

GUIアプリは、ユーザーが日常的に使用するアプリケーションの大半に該当します。これらは視覚的に豊かなインターフェースを提供し、ユーザーエクスペリエンスを向上させる役割を果たします。


この記事が気に入ったらサポートをしてみませんか?