Pythonを使用して飛行機の戦争ゲームを作成する

今回はPythonのpygameモジュールを使用して、飛行機戦争の小さなゲームを完了します。基本的な考え方は、飛行機の左右の動きを制御して、矢印キーで宇宙船を撃つことです。最初に最終的な効果を見てみましょう

初心者が完成できるように、この記事では、作成プロセス全体を記録します。つまり、毎回変更されるコードが含まれ、ほとんどのコードにわかりやすいコメントが追加されます。最終的な単語数を確認してください。

合計40,000文字が入力されましたので、興味のある読者の皆様のお役に立てれば幸いです。

01****Pygameをインストール

このプロジェクトを完了するには、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

02****小さな飛行機を作る

**目標:**左右に移動できる小型の航空機を作成し、ユーザーはスペースキーを介して弾丸を発射するように航空機を制御できます。

背景を作成する###

空の背景を作成する####

最初に空の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データタイプを返します

03 設定クラスを作成

通常、ゲームには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()

小さな飛行機を追加する###

ここで使用される小さな飛行機

04****小さな平面を描く

イメージも利用できるようになったので、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()

05 実行中の関数を格納するモジュールを作成します

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()

06 小さな飛行機を制御する

移動は、ユーザーが矢印キーを押すと定期的に変化する小さな平面の座標を変更することで完了します。

移動する小さな平面を制御します####

ユーザーがキーを押すと、イベントが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

07****速度を調整する

これで、小さな平面が一度に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)

08 小さな飛行機の活動範囲を制限する###

これで小さな飛行機は飛んで飛ぶことができますが、彼を制限するものは何もなく、画面から簡単に飛び出すことができます。飛び出さないように、画面に限定します。

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)

09 完全な撮影機能

プレイヤーはスペースを押して弾丸(小さな長方形)を発射します

箇条書きの設定を追加する####

settings.pyの__init__メソッドに次のデータを追加します

# 弾丸の設定
self.bullet_speed =3  #速度
self.bullet_width =3  #弾丸の幅
self.bullet_height =15  #弾丸の高さ
self.bullet_color =100,100,100  #弾丸の色

Bulletクラスを作成する####

弾丸を格納する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関数の本体に判断を追加します

plane_war.py ####のwhileステートメントを簡略化します

発射された弾丸を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) 
  # 画像を描く

小さな平面を追加した効果###

10 宇宙船の製作

小さな飛行機が作成されたので、小さな飛行機の敵を作成します。また、クラスを使用してすべての動作を制御します。まず、このかわいい宇宙船を見てみましょう。

目標:自由に動くことができるように作成します。宇宙船を撃ち殺すことができます。宇宙船が小さな飛行機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

Pythonを使用して飛行機の戦争ゲームを作成する
パイソンを使って航空機戦争ゲームを実現する
Python3は飛行機戦争ゲームを実現します
パイソンタプルの使い方
pythonスレッドプールの使用方法
pythonを使用してOracleデータベースにクエリを実行します
C ++を使用してPython3拡張機能を作成する
pythonを使用して段階的な回帰を実現します
PythonでSQLiteを使用する方法
Pythonで地球を作る方法
およびおよびまたはPythonでの使用方法
PYTHONを使用してニュース記事をクロールする方法
Python |コレクションはとても使いやすいです! !
Pythonを使用してDouyinキャラクタービデオを生成してください!
superminを使用してCentOSDockerイメージを作成します
Python初心者はライブラリの使い方を学びます
Pythonを使用して画像をすばやく切り取る
python3を使用してubuntuに3番目をインストールします
pythonでround関数を使用する方法
乾物| Pythonを使用してmysqlデータベースを操作する
Pythonでzip関数を使用する方法
01.Pythonの概要
pythonでformat関数を使用する方法
pythonでアシスタントを実行するコードを使用する方法
航空機戦争を達成するための500行のPythonコード
Pythonクローラー-美しいスープの使用
pythonでゲームを書く方法を教えてください
pythonを使用して名刺管理システムを実現する
Pythonの紹介
Centos 6.4 python2.6を2.7にアップグレード
Pythonは宇宙船戦争を実現します
Centos 6.4 python2.6を2.7にアップグレード
Python3外部モジュールの使用
pythonはゲームを開発できますか
Pythonは地雷除去ゲームを実装しています