logo

Python でゲームを開発する方法

最も適応性のある言語は Python で、ゲーム開発、Web 開発、機械学習、人工知能、GUI アプリケーションなど、ほぼすべての業界で使用されています。

ゲームは、Python の組み込み機能である pygame パッケージを使用して開発されています。 Python プログラミングの基本的な理解があれば、pygame モジュールを利用して、適切なアニメーション、サウンド効果、音楽を備えた視覚的に魅力的なゲームを作成できます。

ビデオ ゲームの作成には、Pygame と呼ばれるクロスプラットフォーム ライブラリが使用されます。サウンド ライブラリとコンピュータ ビジュアルがあり、プレイヤーに典型的なゲーム体験を提供します。

Pete Shinners は、PySDL の代わりにこれを開発しています。

Pygame の前提条件

Pygame を学習するには、Python プログラミング言語を理解する必要があります。

Javaでのマルチスレッド化

Pygame のインストール

Pygame をインストールするには、コマンドライン ターミナルを開き、次のコマンドを入力します。

 pip install pygame 

IDE 経由でインストールすることもできます。詳しいインストール ガイドについては、完全な pygame チュートリアル ( https://www.javatpoint.com/pygame ) を参照してください。ここでは、pygame の重要な説明がすべて見つかります。

簡単な Pygame の例

以下は、単純な pygame ウィンドウを作成する例です。

 import pygame pygame.init() screen = pygame.display.set_mode((400,500)) done = False while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True pygame.display.flip() 

出力:

Python でゲームを開発する方法

説明:

プレオーダートラバーサル

提供されたコードは、400x500 ピクセルの Pygame ウィンドウを開き、イベントを常に監視するループを開始します。ループは「done」変数を True に変更します。これによりループが終了し、QUIT イベントが検出された場合 (通常はユーザーがウィンドウを終了したとき) にプログラムが終了します。表示を更新し、「pygame.display.flip()」メソッドのおかげで変更が画面に表示されるようにします。簡単に言うと、このコードは、ユーザーが閉じるまでアクティブな状態を保つ小さな Pygame ウィンドウを生成し、イベント駆動型の基本的なプログラム構造を示します。

すべてのグラフィックは pygame ウィンドウに描画されます。

上記のプログラムの基本的な構文を理解しましょう。

windows.open JavaScript
    pygameをインポートします:これは、Pygame のすべての機能へのアクセスを可能にするモジュールです。熱():これは、pygame に必要な各モジュールを初期化するために使用されます。display.set_mode((幅, 高さ)):ウィンドウのサイズを調整するために使用されます。表面上のアイテムを返します。グラフィカル アクションは、サーフェス オブジェクトを通じて実行されます。イベント.get():その結果、空のイベント キューが生成されます。これを呼び出さないと、オペレーティング システムはゲームが応答しないと認識し、ウィンドウ メッセージが蓄積され始めます。やめる:ウィンドウの隅にあるバツボタンをクリックすると、イベントを閉じるために使用されます。ディスプレイ.フリップ():ゲームのアップデートはすべて反映されます。変更を加えるたびにディスプレイにアクセスする必要があります。flip() は関数です。

Pygame の表面には、美しいフォントや画像など、あらゆる形式を描画できます。 Pygame の多数の組み込みメソッドを使用すると、画面上に幾何学的形状を描画できます。これらのフォームは、ゲーム作成の最初のステップを表します。

画面上に描画されるフォームを示す次の図を見てみましょう。

例 -

 import pygame from math import pi pygame.init() # size variable is using for set screen size size = [400, 300] screen = pygame.display.set_mode(size) pygame.display.set_caption('Example program to draw geometry') # done variable is using as flag done = False clock = pygame.time.Clock() while not done: # clock.tick() limits the while loop to a max of 10 times per second. clock.tick(10) for event in pygame.event.get(): # User did something if event.type == pygame.QUIT: # If user clicked on close symbol done = True # done variable that we are complete, so we exit this loop # All drawing code occurs after the for loop and but # inside the main while done==False loop. # Clear the default screen background and set the white screen background screen.fill((0, 0, 0)) # Draw on the screen a green line which is 5 pixels wide. pygame.draw.line(screen, (0, 255, 0), [0, 0], [50, 30], 5) # Draw on the screen a green line which is 5 pixels wide. pygame.draw.lines(screen, (0, 0, 0), False, [[0, 80], [50, 90], [200, 80], [220, 30]], 5) # Draw a rectangle outline pygame.draw.rect(screen, (0, 0, 0), [75, 10, 50, 20], 2) # Draw a solid rectangle pygame.draw.rect(screen, (0, 0, 0), [150, 10, 50, 20]) # This draw an ellipse outline, using a rectangle as the outside boundaries pygame.draw.ellipse(screen, (255, 0, 0), [225, 10, 50, 20], 2) # This draw a solid ellipse, using a rectangle as the outside boundaries pygame.draw.ellipse(screen, (255, 0, 0), [300, 10, 50, 20]) # Draw a triangle using the polygon function pygame.draw.polygon(screen, (0, 0, 0), [[100, 100], [0, 200], [200, 200]], 5) # This draw a circle pygame.draw.circle(screen, (0, 0, 255), [60, 250], 40) # This draw an arc pygame.draw.arc(screen, (0, 0, 0), [210, 75, 150, 125], 0, pi / 2, 2) # This function must write after all the other drawing commands. pygame.display.flip() # Quite the execution when clicking on close pygame.quit() 

出力:

Python でゲームを開発する方法

説明:

指定された Python プログラムは、Pygame パッケージを使用して、さまざまな幾何学的形状が描画されたグラフィカル ウィンドウを作成します。プログラムは 400x300 ピクセルの Pygame ウィンドウを作成し、イベントを常に監視するループを開始し、ユーザーが終了するまでウィンドウが開いたままになるようにします。このループの開始時に画面をクリアし、Pygame の描画ルーチンを使用して、さまざまな色と線幅を持つさまざまなフォームを作成します。これらの形状には、線、多角形、楕円、円、円弧が含まれます。すべてのフォームには、適切な座標とプロパティが定義されています。最後に、「pygame.display.flip()」を使用して表示を更新します。プログラムはウィンドウを閉じると pygame を終了します。

テストの準備をする

このアプリケーションは、Pygame の描画機能の適応性と多様性の一例として機能し、インタラクティブなグラフィカル アプリケーションを開発するためのフレームワークを提供します。開発者は、座標、色、線幅などのパラメータを調整することで、Pygame のグラフィック環境内に広範囲のビジュアル コンポーネントを作成できます。これにより、インタラクティブなマルチメディア アプリケーション、ゲーム、シミュレーションの構築が可能になります。

例 - Pygame を使用したスネーク ゲームの開発

プログラム -

 # Snake Tutorial Using Pygame import math import random import pygame import tkinter as tk from tkinter import messagebox class cube(object): rows = 20 w = 500 def __init__(self, start, dirnx=1, dirny=0, color=(255, 0, 0)): self.pos = start self.dirnx = 1 self.dirny = 0 self.color = color def move(self, dirnx, dirny): self.dirnx = dirnx self.dirny = dirny self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny) def draw(self, surface, eyes=False): dis = self.w // self.rows i = self.pos[0] j = self.pos[1] pygame.draw.rect(surface, self.color, (i * dis + 1, j * dis + 1, dis - 2, dis - 2)) if eyes: centre = dis // 2 radius = 3 circleMiddle = (i * dis + centre - radius, j * dis + 8) circleMiddle2 = (i * dis + dis - radius * 2, j * dis + 8) pygame.draw.circle(surface, (0, 0, 0), circleMiddle, radius) pygame.draw.circle(surface, (0, 0, 0), circleMiddle2, radius) # This class is defined for snake design and its movement class snake(object): body = [] turns = {} def __init__(self, color, pos): self.color = color self.head = cube(pos) self.body.append(self.head) self.dirnx = 0 self.dirny = 1 def move(self): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() keys = pygame.key.get_pressed() # It will manage the keys movement for the snake for key in keys: if keys[pygame.K_LEFT]: self.dirnx = -1 self.dirny = 0 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] elif keys[pygame.K_RIGHT]: self.dirnx = 1 self.dirny = 0 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] elif keys[pygame.K_UP]: self.dirnx = 0 self.dirny = -1 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] elif keys[pygame.K_DOWN]: self.dirnx = 0 self.dirny = 1 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] # Snake when hit the boundary wall for i, c in enumerate(self.body): p = c.pos[:] if p in self.turns: turn = self.turns[p] c.move(turn[0], turn[1]) if i == len(self.body) - 1: self.turns.pop(p) else: if c.dirnx == -1 and c.pos[0] = c.rows - 1: c.pos = (0, c.pos[1]) elif c.dirny == 1 and c.pos[1] &gt;= c.rows - 1: c.pos = (c.pos[0], 0) elif c.dirny == -1 and c.pos[1] <= 0 1 0: c.pos="(c.pos[0]," c.rows - 1) else: c.move(c.dirnx, c.dirny) def reset(self, pos): self.head="cube(pos)" self.body="[]" self.body.append(self.head) self.turns="{}" self.dirnx="0" self.dirny="1" # it will add the new cube in snake tail after every successful score addcube(self): dx, dy="tail.dirnx," tail.dirny if dx="=" and self.body.append(cube((tail.pos[0] 1, tail.pos[1]))) elif -1 + 1: self.body.append(cube((tail.pos[0], tail.pos[1] 1))) -1: self.body[-1].dirnx="dx" self.body[-1].dirny="dy" draw(self, surface): for i, c enumerate(self.body): i="=" c.draw(surface, true) c.draw(surface) drawgrid(w, rows, sizebtwn="w" rows x="0" y="0" l range(rows): draw grid line pygame.draw.line(surface, (255, 255, 255), (x, 0), w)) (0, y), (w, y)) this class define game surface redrawwindow(surface): global width, s, snack is used to surface.fill((0, 0, 0)) s.draw(surface) snack.draw(surface) drawgrid(width, surface) pygame.display.update() randomsnack(rows, item): positions="item.body" while true: len(list(filter(lambda z: z.pos="=" positions)))> 0: continue else: break return (x, y) # Using Tkinter function to display message def message_box(subject, content): root = tk.Tk() root.attributes(&apos;-topmost&apos;, True) root.withdraw() messagebox.showinfo(subject, content) try: root.destroy() except: pass # main() function def main(): global width, rows, s, snack width = 500 rows = 20 win = pygame.display.set_mode((width, width)) s = snake((255, 0, 0), (10, 10)) snack = cube(randomSnack(rows, s), color=(0, 255, 0)) flag = True clock = pygame.time.Clock() while flag: pygame.time.delay(50) clock.tick(10) s.move() if s.body[0].pos == snack.pos: s.addCube() snack = cube(randomSnack(rows, s), color=(0, 255, 0)) for x in range(len(s.body)): if s.body[x].pos in list(map(lambda z: z.pos, s.body[x + 1:])): print(&apos;Score: 
&apos;, len(s.body)) message_box(&apos;You Lost!
&apos;, &apos;Play again...
&apos;) s.reset((10, 10)) break redrawWindow(win) pass main() </=>

出力:

CのASCIIテーブル
Python でゲームを開発する方法

ヘビが自分自身に触れると、ゲームが終了し、次のメッセージが表示されます。

Python でゲームを開発する方法

再開するには、「OK」ボタンをクリックするだけです。 Pycharm ターミナルにスコアが表示されます (ここでは Pycharm IDE を使用しましたが、任意の Python IDE を使用できます)。

Python でゲームを開発する方法

説明:

提供されている Python スクリプトは、Pygame パッケージを使用して簡単な Snake ゲームを作成します。それは、スネークとその体を構成する個別の立方体の両方のクラスを確立します。 Pygame は、グリッド構造と動くヘビを特徴とするゲーム ウィンドウのセットアップに使用されます。 「スナック」キューブを食べるとヘビが伸び、ヘビ自体または境界壁にぶつかるとゲームオーバーです。

ヘビの方向を管理し、グリッド上のランダムな点でスナックを生成し、ヘビの頭と体の衝突を検出し、ゲームの状態を更新し、ゲーム ウィンドウを再描画するために、ゲーム ロジックはユーザー入力を処理する必要があります。ゲームのインタラクションとビジュアル更新を制御するために、スクリプトは Pygame のイベント処理メソッドと描画メソッドを利用します。また、ゲームに負けたときなどに、Tkinter を使用してプレイヤーにメッセージを表示する基本的なメッセージ ボックス機能もあります。全体として、このスクリプトは Pygame ゲーム プログラミングの重要なアイデアを示しており、ビンテージの Snake ゲームの初歩的な表現を提供しています。