python3 航空機戦争のソースコードとソースコード使用のチュートリアル(白人に最初の小さなゲームを作らせる)。
2022-02-14 10:32:48
python3飛行機バトル
I. ソースコードの使い方と環境設定に関するチュートリアル
1. 環境設定
pycharmを開き、ファイルに移動し、設定を開きます。
プロジェクトインタプリタを開き、右上の+記号をクリックします。
pygame モジュールの検索とインポート
この時点で、環境は設定されています。
2. ソースコードの使い方のチュートリアル
新しいPythonフォルダを作成し、名前を"airplane"とします。
新しいフォルダの下に、ゲーム用の画像を保存するために "images" という名前の別のフォルダを作成します。
以下の画像をデスクトップにダウンロードし(必ずリネームしてください)、"images"フォルダにドラッグします(直接ドラッグ&ドロップしてもかまいません)。
画像の名前をbackgroundに変更し、png形式で保存します。
画像の名前を bullet1 に変更し、png 形式で保存します。
画像を enemy1 にリネームし、png 形式で保存します。
画像の名前をme1に変更し、png形式で保存します。
次に、"plane" フォルダに "plane_main" という名前の Python ファイルを作成します。
そして、次のコードをコピーして、完了です。
II. ソースコード
import random
import pygame
# Constants for screen size
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
# Frame rate for refresh
FRAME_PER_SEC = 60
# Timer constants for creating enemy machines
CREATE_ENEMY_EVENT = pygame.USEREVENT
# Hero fires bullet events
HERO_FIRE_EVENT = pygame.USEREVENT + 1
class GameSprite(pygame.sprite:)
"""Airplane Wars Game Sprite"""
def __init__(self, image_name, speed=1):
# Call the initialization method of the parent class
super(). __init__()
# Define the properties of the object
self.image = pygame.image.load(image_name)
self.rect = self.image.get_rect()
self.speed = speed
def update(self):
# Move in the vertical direction of the screen
self.rect.y += self.speed
class Background(GameSprite):
"""Game background sprite"""
def __init__(self, is_alt=False):
# 1. call parent class methods to implement sprite creation (image/rect/speed)
super(). __init__(". /images/background.png")
# 2. determine if it is an alternate image, if so, need to set the initial position
if is_alt:
self.rect.y = -self.rect.height
def update(self):
# 1. call the parent class method to implement
super().update()
# 2. determine whether to move out of the screen, if so, set the image to the top of the screen
if self.rect.y >= SCREEN_RECT.height:
self.rect.y = -self.rect.height
class Enemy(GameSprite):
"""Enemy sprite"""
def __init__(self):
# 1. call the parent class method, create the enemy sprite, and specify the enemy picture
super(). __init__(". /images/enemy1.png")
# 2. specify the initial random speed of the enemy aircraft 1 ~ 3
self.speed = random.randint(1, 3)
# 3. specify the initial random position of the enemy aircraft
self.rect.bottom = 0
max_x = SCREEN_RECT.width - self.rect.width
self.rect.x = random.randint(0, max_x)
def update(self):
# 1. call parent method to keep vertical flight
super().update()
# 2. determine whether to fly out of the screen, if so, need to remove enemy aircraft from the sprite group
if self.rect.y >= SCREEN_RECT.height:
# print("fly out of the screen, need to remove from the sprite group ... ")
# The kill method removes the sprite from all sprite groups, and the sprite is automatically destroyed
self.kill()
def __del__(self):
# print("Enemy machine hung %s" % self.rect)
pass
class Hero(GameSprite):
"""HeroSprite"""
def __init__(self):
# 1. call parent class method to set image&speed
super(). __init__(". /images/me1.png", 0)
# 2. set the initial position of the hero
self.rect.centerx = SCREEN_RECT.centerx
self.rect.bottom = SCREEN_RECT.bottom - 120
# 3. create a sprite group of bullets
self.bullets = pygame.sprite.Group()
def update(self):
# Hero moves horizontally
self.rect.x += self.speed
# Control that the hero cannot leave the screen
if self.rect.x < 0:
self.rect.x = 0
elif self.rect.right > SCREEN_RECT.right:
self.rect.right = SCREEN_RECT.right
def fire(self):
print("Firing bullets... ")
for i in (0, 1, 2):
# 1. create bullet sprite
bullet = Bullet()
# 2. set the position of the sprite
bullet.rect.bottom = self.rect.y - i * 20
bullet.rect.centerx = self.rect.centerx
# 3. Add sprites to the sprite group
self.bullets.add(bullet)
class Bullet(GameSprite):
"""Bullet sprite"""
def __init__(self):
# Call parent class method, set bullet image, set initial velocity
super(). __init__(". /images/bullet1.png", -2)
def update(self):
# Call the parent method to make the bullet fly in the vertical direction
super().update()
# Determine if the bullet is flying off the screen
if self.rect.bottom < 0:
self.kill()
def __del__(self):
print("Bullet was destroyed... ")
class PlaneGame(object):
"""Plane Wars main game"""
def __init__(self):
print("Game initialization")
# 1. create the game's window
self.screen = pygame.display.set_mode(SCREEN_RECT.size)
# 2. create the game's clock
self.clock = pygame.time.Clock()
# 3. call private methods, sprite and sprite group creation
self.__create_sprites()
# 4. set timer event - create enemy 1s
pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)
pygame.time.set_timer(HERO_FIRE_EVENT, 500)
def __create_sprites(self):
# Create background sprites and sprite groups
bg1 = Background()
bg2 = Background(True)
self.back_group = pygame.sprite.Group(bg1, bg2)
# Create a sprite group of enemy planes
self.enemy_group = pygame.sprite.Group()
# Create sprites and sprite groups for heroes
self.hero = Hero()
self.hero_group = pygame.sprite.Group(self.hero)
def start_game(self):
print("Game started... ")
while True:
# 1. set the refresh frame rate
self.clock.tick(FRAME_PER_SEC)
# 2. listen to events
self.__event_handler()
# 3. collision detection
self.__check_collide()
# 4. update/draw sprite groups
self.__update_sprites()
# 5. update the display
pygame.display.update()
def __event_handler(self):
for event in pygame.event.get():
# Determine whether to exit the game
if event.type == pygame.QUIT:
PlaneGame.__game_over()
elif event.type == CREATE_ENEMY_EVENT:
# print("Enemy aircraft out... ")
# Create enemy sprite
enemy = Enemy()
# Add enemy sprites to the enemy sprite group
self.enemy_group.add(enemy)
elif event.type == HERO_FIRE_EVENT:
self.hero.fire()
# elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:
# print("Move right.
III. ゲームエフェクトのショーケース
IV. 結論
この記事が役に立ったら、ブロガーに「いいね!」を押してください!!!
関連
-
[解決済み】TypeError:'type'オブジェクトはiterableではありません - オブジェクトインスタンスを繰り返し処理する。
-
Python初心者のための関数の定義
-
配列を連続した数値の集合に分割するPythonの練習問題
-
[解決済み] データ型「datetime64[ns]」と「<M8[ns]」との違い?
-
[解決済み] Pythonのnumpy.exp関数におけるオーバーフローエラー
-
[解決済み] キーボード入力でタイムアウト?
-
[解決済み] AttributeError: 'DataFrame' オブジェクトには 'map' という属性がありません。
-
[解決済み] Pythonでのファイルのパーミッション変更
-
[解決済み] Pythonでvirtualenvの名前を変更する方法は?
-
NameError:名前 'xrange' が定義されていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Pip - ランチャーで致命的なエラーが発生しました。Unable to create process using '"'.
-
LinAlgErrorです。特異行列_Mr.horseのブログ - プログラマの秘密
-
[解決済み] ValueErrorです。ブーリアン値のみのDataFrameを渡さなければならない
-
[解決済み] Pythonで関数を繰り返す
-
[解決済み] モジュール Seaborn には '<any graph>' という属性がありません。
-
[解決済み] Pythonでテキストファイルを連結する方法は?
-
[解決済み] Pythonの[]と[[]]の違いについて
-
[解決済み] Pythonのサブプロセスpopenの使い方 [重複]。
-
[解決済み] Pythonプロジェクトに.gitignoreファイルを追加するためのベストプラクティス?[クローズド]。
-
[解決済み] Pythonの新スタイルのプロパティで「属性を設定できない」ことがある