今回はPythonのpygameモジュールを使用して、飛行機戦争の小さなゲームを完了します。基本的な考え方は、飛行機の左右の動きを制御して、矢印キーで宇宙船を撃つことです。最初に最終的な効果を見てみましょう
初心者が完成できるように、この記事では、作成プロセス全体を記録します。つまり、毎回変更されるコードが含まれ、ほとんどのコードにわかりやすいコメントが追加されます。最終的な単語数を確認してください。
合計40,000文字が入力されましたので、興味のある読者の皆様のお役に立てれば幸いです。
このプロジェクトを完了するには、pygameサードパーティライブラリをインストールする必要があります。まず、コマンドラインツールを使用して、システムがpipツールとともにインストールされているかどうかを確認します。
python -m pip --version
Xiao TianはWindowsシステムであり、ここではWindowsシステムの検出方法のみが提供されています。
インストールされていない場合は、pipツールをインストールします。インストールする場合は、この手順をスキップしてください
python get-pip.py
インストールが完了したら、最初のステップに戻って再確認し、pygameをインストールします
python -m pip install pygame --user
または、pycharmを介して3番目のライブラリをインストールし、pygameをインポートします
import pygame
**目標:**左右に移動できる小型の航空機を作成し、ユーザーはスペースキーを介して弾丸を発射するように航空機を制御できます。
最初に空のpygameウィンドウを作成します。ファイル名はplane_war.pyです。
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
import sys #ゲームを終了するために使用されます
def run_game():
# ゲームを初期化する
pygame.init()
# 画面の解像度を設定します
screen = pygame.display.set_mode((1000,600)) #サイズは1000px×600pxです
# そのタイプを印刷する
# print(type(screen)) # <class'pygame.Surface'>
pygame.display.set_caption("航空機戦争") #題名
# 背景を保存する変数
bg_img = pygame.image.load("./imgs/bg_img.png") #相対パス
print(bg_img)
# ゲームのメインループを開始します
while True:
# 起動直後にゲームウィンドウが閉じないようにするために、ゲームループが追加されています(無限ループ),
for event in pygame.event.get():
# ループするたびに画面を再描画します
screen.blit(bg_img,[0,0]) #画像を描く
if event.type == pygame.QUIT: #QUITユーザーがプログラムを閉じるように要求する
sys.exit()
# フルディスプレイサーフェスを画面に更新します
pygame.display.flip()run_game()
display.set_modeはSurfaceデータタイプを返します
通常、ゲームにはnを超える設定があります。値のいずれかを毎回変更する場合は、メインファイルで簡単に見つけることができます。次に、この情報を保存する新しいファイルsettings.pyを作成します。
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
classSettings:"""飛行機戦争のすべての設定を保存します"""
def __init__(self):
# 画面設定
self.screen_width =1000
self.screen_height =600
self.bg_img = pygame.image.load("./imgs/bg_img.png")
# 今すぐ書き直してください
plane_war.py"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
import sys #ゲームを終了するために使用されます
from settings import Settings #設定のインポート.py
def run_game():
# ゲームを初期化する
pygame.init()
# 画面の解像度を設定します
setting =Settings()
screen = pygame.display.set_mode((setting.screen_width, setting.screen_height))
pygame.display.set_caption("航空機戦争") #題名
# ゲームのメインループを開始します
while True:
# 起動直後にゲームウィンドウが閉じないようにするために、ゲームループが追加されています(無限ループ),
for event in pygame.event.get():
# ループするたびに画面を再描画します
screen.blit(setting.bg_img,[0,0]) #画像を描く
if event.type == pygame.QUIT: #QUITユーザーがプログラムを閉じるように要求する
sys.exit()
# フルディスプレイサーフェスを画面に更新します
pygame.display.flip()run_game()
ここで使用される小さな飛行機
イメージも利用できるようになったので、plane.pyモジュールを作成します。このモジュールには、プレーンのさまざまな動作を格納するためのPlaneクラスがあります。
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
classPlane:
def __init__(self, screen):
# 小さな平面を初期化し、その初期位置を設定します
self.screen = screen
# 画像をロードして、その長方形の領域を取得します
self.img_plane = pygame.image.load("./imgs/plane.png")
self.rect = self.img_plane.get_rect() #小さな平面の長方形の領域を取得します
self.screen_rect = self.screen.get_rect() #画面の長方形の領域を取得します
# 小さな平面を中央下に配置します
self.rect.centerx = self.screen_rect.centerx #水平方向に中央に配置
self.rect.bottom = self.screen_rect.bottom #下
def blitme(self):
# 指定された場所に小さな平面を描きます
self.screen.blit(self.img_plane, self.rect)
get_rectはSurfaceの長方形の領域を返します。.centerxと.bottomはその2つの属性です
plane_war.pyを書き直して、画面に小さな平面を描画します
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
import sys #ゲームを終了するために使用されます
from settings import Settings #設定のインポート.py
from plane import Plane
def run_game():
# ゲームを初期化する
pygame.init()
# 画面の解像度を設定します
setting =Settings()
screen = pygame.display.set_mode((setting.screen_width, setting.screen_height)) #サイズは1000px×600pxです
pygame.display.set_caption("航空機戦争") #題名
# 小さな飛行機を作成する
plane =Plane(screen)
# ゲームのメインループを開始します
while True:
# 起動直後にゲームウィンドウが閉じないようにするために、ゲームループが追加されています(無限ループ),
for event in pygame.event.get():
# ループするたびに画面を再描画します
screen.blit(setting.bg_img,[0,0]) #画像を描く
plane.blitme() #宇宙船を画面に描画します
if event.type == pygame.QUIT: #QUITユーザーがプログラムを閉じるように要求する
sys.exit()
# フルディスプレイサーフェスを画面に更新します
pygame.display.flip()run_game()
plane_war.pyを長くしすぎて読み取りに影響を与えないようにするには、game_func.pyという名前のモジュールを作成し、plane warの関数を使用して、ロジックを理解しやすくします。
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import sys
import pygame
def check_events():
# 起動直後にゲームウィンドウが閉じないようにするために、ゲームループが追加されています(無限ループ),
for event in pygame.event.get():if event.type == pygame.QUIT: #QUITユーザーがプログラムを閉じるように要求する
sys.exit()
def update_screen(screen, bg_img, plane):
# 画面イメージの更新
# ループするたびに画面を再描画します
screen.blit(bg_img,[0,0]) #画像を描く
plane.blitme() #宇宙船を画面に描画します
# フルディスプレイサーフェスを画面に更新します
pygame.display.flip()
check_events関数は、ウィンドウが閉じない関数を完了するために使用され、update_screenは、画像を更新する関数を完了するために使用されます。3つの正式なパラメーター、Surfaceオブジェクト、背景画像、および小さな平面関数があります。
check_eventsはゲームを終了する操作を完了するため、plane_war.pyはsysモジュールを必要としません。更新されたplane_war.pyは次のとおりです。
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
from settings import Settings #設定のインポート.py
from plane import Plane
import game_func as fg
def run_game():
# ゲームを初期化する
pygame.init()
# 画面の解像度を設定します
setting =Settings()
screen = pygame.display.set_mode((setting.screen_width, setting.screen_height)) #サイズは1000px×600pxです
pygame.display.set_caption("航空機戦争") #題名
# 小さな飛行機を作成する
plane =Plane(screen)
# ゲームのメインループを開始します
while True:
# ウィンドウを閉じないでください
fg.check_events()
# 画像を描く
fg.update_screen(screen, setting.bg_img, plane)run_game()
移動は、ユーザーが矢印キーを押すと定期的に変化する小さな平面の座標を変更することで完了します。
ユーザーがキーを押すと、イベントがpygameに登録されます。任意のイベントはpygame.event.get()を介して取得されるため、関数本体のキーごとにKEYDOWNイベントを登録できます。
ここで、check_events関数を書き直して、押されたキーを検出して小さな平面を移動します。
def check_events(plane):
# 起動直後にゲームウィンドウが閉じないようにするために、ゲームループが追加されています(無限ループ),
for event in pygame.event.get():if event.type == pygame.QUIT: #QUITユーザーがプログラムを閉じるように要求する
sys.exit()
elif event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT:
# 小さな飛行機が前後に移動します
plane.rect.centerx +=1
小さな平面をクリックして1ピクセル移動します。通常のゲームでは、送信せずに押すことで移動し続けます。Pygameのpygame.KEYUPは、ユーザーがボタンを離したかどうかを検出できます。次に、KEYDOWNとKEYUPを組み合わせて連続移動を完了します。
ユーザーがボタンを押すかどうかを決定するフラグビットを定義するために、デフォルトでは、ユーザーが私の家を押すことをFlaseが検出すると、それはTrueであり、小さな飛行機は動き続けることができます
小さな平面はplane.pyファイルによって制御されるため、このファイルを書き直してください
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
classPlane:
def __init__(self, screen):
# 小さな平面を初期化し、その初期位置を設定します
self.screen = screen
# 画像をロードして、その長方形の領域を取得します
self.img_plane = pygame.image.load("./imgs/plane.png")
self.rect = self.img_plane.get_rect() #小さな平面の長方形の領域を取得します
self.screen_rect = self.screen.get_rect() #画面の長方形の領域を取得します
# print(self.screen_rect)
# 小さな平面を中央下に配置します
self.rect.centerx = self.screen_rect.centerx #水平方向に中央に配置
self.rect.bottom = self.screen_rect.bottom #下
# フラグビット
self.mv_right = False
# 小さな平面の位置を調整する方法を定義します
def update(self):
# 記号に従って小平面の位置を調整します
if self.mv_right:
self.rect.centerx +=1
def blitme(self):
# 指定された場所に小さな平面を描きます
self.screen.blit(self.img_plane, self.rect)
更新方法は、フラグビットがTrueの場合、小さな平面が動き始めます。
game_func.pyのcheck_events関数を書き直します
def check_events(plane):
# 起動直後にゲームウィンドウが閉じないようにするために、ゲームループが追加されています(無限ループ),
for event in pygame.event.get():if event.type == pygame.QUIT: #QUITユーザーがプログラムを閉じるように要求する
sys.exit()
elif event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT:
# ユーザーがキーを押すと、フラグビットはTrueになります
plane.mv_right = True
elif event.type == pygame.KEYUP:if event.key == pygame.K_RIGHT:
# ユーザーがキーを離すと、それは誤りです
plane.mv_right = False
最後に、plane_war.pyのupdateメソッドを呼び出すだけで、連続移動操作が完了します。
同じ方法を使用して左に移動します
書き直されたplane.pyファイル
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
classPlane:
def __init__(self, screen):
# 小さな平面を初期化し、その初期位置を設定します
self.screen = screen
# 画像をロードして、その長方形の領域を取得します
self.img_plane = pygame.image.load("./imgs/plane.png")
self.rect = self.img_plane.get_rect() #小さな平面の長方形の領域を取得します
self.screen_rect = self.screen.get_rect() #画面の長方形の領域を取得します
# print(self.screen_rect)
# 小さな平面を中央下に配置します
self.rect.centerx = self.screen_rect.centerx #水平方向に中央に配置
self.rect.bottom = self.screen_rect.bottom #下
# フラグビット
self.mv_right = False
self.mv_left = False
# 小さな平面の位置を調整する方法を定義します
def update(self):
# 記号に従って小平面の位置を調整します
if self.mv_right:
self.rect.centerx +=1if self.mv_left:
self.rect.centerx -=1
def blitme(self):
# 指定された場所に小さな平面を描きます
self.screen.blit(self.img_plane, self.rect)
書き直されたgame_func.pyのcheck_events関数
def check_events(plane):
# 起動直後にゲームウィンドウが閉じないようにするために、ゲームループが追加されています(無限ループ),
for event in pygame.event.get():if event.type == pygame.QUIT: #QUITユーザーがプログラムを閉じるように要求する
sys.exit()
elif event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT:
# ユーザーがキーを押すと、フラグビットはTrueになります
plane.mv_right = True
elif event.key == pygame.K_LEFT:
plane.mv_left = True
elif event.type == pygame.KEYUP:if event.key == pygame.K_RIGHT:
# ユーザーがキーを離すと、それは誤りです
plane.mv_right = False
elif event.key == pygame.K_LEFT;
plane.mv_left = False
これで、小さな平面が一度に1pxずつ移動します。速度はかなり遅いです。小さな平面の速度を変更します。
まず、setting.pyに行を追加します
self.plane_speed =2.5
ここでplane.pyに変更を加えます
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
classPlane:
def __init__(self, screen, setting):
# 小さな平面を初期化し、その初期位置を設定します
self.screen = screen
self.setting = setting #インスタンス化された属性
# 画像をロードして、その長方形の領域を取得します
self.img_plane = pygame.image.load("./imgs/plane.png")
self.rect = self.img_plane.get_rect() #小さな平面の長方形の領域を取得します
self.screen_rect = self.screen.get_rect() #画面の長方形の領域を取得します
# print(self.screen_rect)
# 小さな平面を中央下に配置します
self.rect.centerx = self.screen_rect.centerx #水平方向に中央に配置
self.rect.bottom = self.screen_rect.bottom #下
# 浮動小数点数に変更します
self.center =float(self.rect.centerx)
# フラグビット
self.mv_right = False
self.mv_left = False
# 小さな平面の位置を調整する方法を定義します
def update(self):
# 記号に従って小平面の位置を調整します
if self.mv_right:
self.center += self.setting.plane_speed #設定のプロパティ
if self.mv_left:
self.center -= self.setting.plane_speed
# 自己によると.自己を更新するための中心の値.rect.centerx
self.rect.centerx = self.center
def blitme(self):
# 指定された場所に小さな平面を描きます
self.screen.blit(self.img_plane, self.rect)
飛行機_war.pyの平面に属性を追加します
plane =Plane(screen, setting)
これで小さな飛行機は飛んで飛ぶことができますが、彼を制限するものは何もなく、画面から簡単に飛び出すことができます。飛び出さないように、画面に限定します。
plane.pyのupdateメソッドを変更し、game_func.pyのcheck_events関数をリファクタリングするだけです。
小さな平面の機能が増えるにつれ、check_eventsは3つの機能にリファクタリングされ、ユーザーのキーストロークとユーザーのリリースキーをキャプチャするためにそれぞれ2つの機能が定義されています。
再構築後のCheck_events
def check_keydown_events(event, plane):
# ユーザープレスをキャプチャ
if event.key == pygame.K_RIGHT:
# ユーザーがキーを押すと、フラグビットはTrueになります
plane.mv_right = True
elif event.key == pygame.K_LEFT:
plane.mv_left = True
def check_keyup_events(event, plane):
# ユーザーリリースをキャッチ
if event.key == pygame.K_RIGHT:
# ユーザーがキーを離すと、それは誤りです
plane.mv_right = False
elif event.key == pygame.K_LEFT:
plane.mv_left = False
def check_events(plane):
# 起動直後にゲームウィンドウが閉じないようにするために、ゲームループが追加されています(無限ループ),
for event in pygame.event.get():if event.type == pygame.QUIT: #QUITユーザーがプログラムを閉じるように要求する
sys.exit()
elif event.type == pygame.KEYDOWN:check_keydown_events(event, plane)
elif event.type == pygame.KEYUP:check_keyup_events(event, plane)
プレイヤーはスペースを押して弾丸(小さな長方形)を発射します
settings.pyの__init__メソッドに次のデータを追加します
# 弾丸の設定
self.bullet_speed =3 #速度
self.bullet_width =3 #弾丸の幅
self.bullet_height =15 #弾丸の高さ
self.bullet_color =100,100,100 #弾丸の色
弾丸を格納するBulletクラスのbullet.pyファイルを作成します
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
from pygame.sprite import Sprite
classBullet(Sprite): #pygameを継承する.スプライトのスプライトクラス
""" 弾丸管理"""
def __init__(self, setting, screen, plane):super().__init__()
self.screen = screen
# に(0,0)弾丸を表す長方形を作成します
# pygame.Rect
# 長方形の座標を格納するために使用されるPygameオブジェクト
self.rect = pygame.Rect(0,0, setting.self.bullet_width, setting.self.bullet_height)
# 表示位置を設定する
self.rect.centerx = plane.rect.centerx
self.rect.top = plane.rect.top
# 弾丸の位置を小面と重ねると、弾丸が飛び出すと小面から発射されたように見えます
# 弾丸の座標を浮動小数点数に変換します
self.y =float(self.rect.y)
# 弾丸の色
self.color = setting.bullet.color
# 弾丸の速度
self.speed = setting.bullet.speed
def update(self):
# 弾丸を上に移動
self.y -= self.speed
# 自己によると.yの値は自己を更新します.rect.y
self.rect.y = self.y
def draw_bullet(self):"""弾丸を描く"""
# pygame.draw.rect()は長方形の形状を描画します
pygame.draw.rect(self.screen, self.color, self.rect)
Bulletクラスは、pygame.spriteのSpriteクラスを継承します。このクラスは、ゲーム内の要素をグループ化し、グループ内のすべての要素を同時に操作できます。
まず、plane_war.pyにグループを作成して、発射された弾丸を管理できるようにすべての有効な弾丸を保存します。このグループはpygame.sprite.Groupクラスのインスタンスです。pygame.sprite.Groupクラスはリストに似ていますが、リストに似ています。ゲームの開発に役立つ追加機能を提供します。メインループでは、このグループを使用して画面に弾丸を描画し、各弾丸の位置を更新します。
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
from settings import Settings
from plane import Plane
import game_func as fg
from pygame.sprite import Group
def run_game():
# ゲームを初期化する
pygame.init()
# 画面の解像度を設定します
setting =Settings()
screen = pygame.display.set_mode((setting.screen_width, setting.screen_height)) #サイズは1000px×600pxです
pygame.display.set_caption("航空機戦争") #題名
# 弾丸を保存するグループを作成する
bullets =Group()
# 小さな飛行機を作成する
plane =Plane(screen, setting)
# ゲームのメインループを開始します
while True:
# ウィンドウを閉じないでください
fg.check_events(plane, setting, screen, bullets)
# 小さな飛行機の動きの方法を呼び出す
plane.update()
bullets.update()
# 画像を描く
fg.update_screen(screen, setting.bg_img, plane, bullets)run_game()
火
game_func.pyの関数を変更して、弾丸を発射する操作を完了します
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import sys
from bullet import Bullet
import pygame
def check_keydown_events(event, plane, setting, screen, bullets):
# ユーザープレスをキャプチャ
if event.key == pygame.K_RIGHT:
# ユーザーがキーを押すと、フラグビットはTrueになります
plane.mv_right = True
elif event.key == pygame.K_LEFT:
plane.mv_left = True
elif event.key == pygame.K_SPACE:
# 箇条書きを作成し、グループの箇条書きに追加します
new_bullet =Bullet(setting, screen, plane)
bullets.add(new_bullet)
def check_keyup_events(event, plane):
# ユーザーリリースをキャッチ
if event.key == pygame.K_RIGHT:
# ユーザーがキーを離すと、それは誤りです
plane.mv_right = False
elif event.key == pygame.K_LEFT:
plane.mv_left = False
def check_events(plane, setting, screen, bullets):
# 起動直後にゲームウィンドウが閉じないようにするために、ゲームループが追加されています(無限ループ),
for event in pygame.event.get():if event.type == pygame.QUIT: #QUITユーザーがプログラムを閉じるように要求する
sys.exit()
elif event.type == pygame.KEYDOWN:check_keydown_events(event, plane, setting, screen, bullets)
elif event.type == pygame.KEYUP:check_keyup_events(event, plane)
def update_screen(screen, bg_img, plane, bullets):
# 画面イメージの更新
# ループするたびに画面を再描画します
screen.blit(bg_img,[0,0]) #画像を描く
# 弾丸を描く
for bullet in bullets.sprites():
bullet.draw_bullet() #弾丸を描く
plane.blitme() #宇宙船を画面に描画します
# フルディスプレイサーフェスを画面に更新します
pygame.display.flip()
ユーザーがスペースを押すと、弾丸(new_bulletという名前の弾丸インスタンス)が作成され、addメソッドbullets.spritesは、グループ内のすべてのスプライトを含むリストを返し、グループ内のスプライトをトラバースして、パスします。 draw_bullet()が画面に描画します
基本的な撮影機能が完了したので、画面上部に到達すると弾丸は消えましたが、それはpygameが画面外に物を描くことができなかったためです。これらの弾丸は実際に存在し、y座標は負になります。メモリを消費し続けます。
これは.copyによる浅いコピーです。次に、箇条書きが消えるかどうかを確認してから、削除します。
plane_war.pyのwhileステートメントに次の文を追加します。
# 消えた弾丸を削除する
for bullet in bullets.copy():if bullet.rect.bottom <=0:
bullets.remove(bullet)
# print(len(bullets)) #弾丸が削除されているかどうかをテストするために使用されます
注:fg.update_screenの前に追加してください
この小さなゲームを開いたりぶら下げたりしないようにするには、発射される弾丸の数を制限し、settings.pyに行を追加する必要があります。
# 弾丸の数を制限する
self.bullet_allowed =5
check_keydown_events関数の本体に判断を追加します
発射された弾丸をgame_func.pyファイルに移動し、update_bulletsを作成します
def update_bullets(bullets):
# グループ内の各弾丸の弾丸を呼び出す.update()
bullets.update()
# 消えた弾丸を削除する
for bullet in bullets.copy():if bullet.rect.bottom <=0:
bullets.remove(bullet)
現時点では、whileステートメントには4行のコードしかありません。
while True:
fg.check_events(plane, setting, screen, bullets) #ウィンドウを閉じないでください
plane.update() #小さな飛行機の動きの方法を呼び出す
fg.update_bullets(bullets) #弾丸を描く
fg.update_screen(screen, setting.bg_img, plane, bullets)
# 画像を描く
小さな飛行機が作成されたので、小さな飛行機の敵を作成します。また、クラスを使用してすべての動作を制御します。まず、このかわいい宇宙船を見てみましょう。
目標:自由に動くことができるように作成します。宇宙船を撃ち殺すことができます。宇宙船が小さな飛行機GAMEOVERに触れると、宇宙船は地面にもGAMEOVERに触れます。
Spaceshipクラスを格納するためのspaceship.pyというファイルを作成します
"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/4"""
import pygame
from pygame.sprite import Sprite
classSpaceship(Sprite):'''宇宙船を代表するクラス'''
def __init__(self, setting, screen):super().__init__()
self.screen = screen
self.setting = setting
# 宇宙船の画像を追加
self.img = pygame.image.load("./imgs/enemy.png")
# rect属性を取得する
self.rect = self.img.get_rect()
# 各船は最初は画面の左上隅の近くにあります
self.rect.x = self.rect.width #宇宙船の画像の左マージンは画像の幅と同じです
self.rect.y = self.rect.height #宇宙船の本の上マージンは画像の高さと同じです
self.x =float(self.rect.x)
def blitme(self):
# 宇宙船の画像を描く
self.screen.blit(self.img, self.rect)
ここでは、場所が基本的にPlaneクラスと同じであることを除いて
飛行機で宇宙船クラスをインスタンス化します_war.pyにSpaceshipインスタンスを追加します"""
- *- coding:uft-8-*-
author:スウィーティー
date:2020/6/3"""
import pygame
from settings import Settings #設定のインポート.py
from plane import Plane
import game_func as fg
from pygame.sprite import Group
from spaceship import Spaceship
def run_game():
# ゲームを初期化する
pygame.init()
# 画面の解像度を設定します
setting =Settings()
screen = pygame.display.set_mode((setting.screen_width, setting.screen_height)) #サイズは1000px×600pxです
pygame.display.set_caption("航空機戦争") #題名
# 弾丸を保存するグループを作成する
bullets =Group()
# 小さな飛行機を作成する
plane =Plane(screen, setting)
# 宇宙船を作成する
spaceship =Spaceship(setting, screen)
# ゲームのメインループを開始します
while True:
# ウィンドウを閉じないでください
fg.check_events(plane, setting, screen, bullets)
# 小さな飛行機の動きの方法を呼び出す
plane.update()
# 弾丸を描く
fg.update_bullets(bullets)
# 画像を描く
fg.update_screen(screen, setting.bg_img, plane, bullets, spaceship)run_game()
ここに新しく作成されたSpaceshipクラスをインポートし、whileループの外側にインスタンスを作成して、spaceshipのインスタンスをupdate_screenに渡します。
update_screen関数を変更します
def update_screen(screen, bg_img, plane, bullets, spaceship):
# 画面イメージの更新
# ループするたびに画面を再描画します
screen.blit(bg_img,[0,0]) #画像を描く
# 弾丸を描く
for bullet in bullets.sprites():
bullet.draw_bullet() #弾丸を描く
plane.blitme() #宇宙船を画面に描画します
# 宇宙船を引く
spaceship.blitme()
# フルディスプレイサーフェスを画面に更新します
pygame.display.flip()
これは航空機戦争マップを作成するプロセスであり、実装プロセスは後でリリースされます〜
Recommended Posts