#alien_invasion.py
import sys import pygame from settings import Settings from ship import Ship class AlienInvasion: """ゲームのアセットと動作を管理する全体的なクラス""" def __init__(self): """ゲームを初期化し、ゲームのリソースを生成する""" pygame.init() self.settings=Settings() self.screen=pygame.display.set_mode((0,0),pygame.FULLSCREEN) self.settings.screen_width=self.screen.get_rect().width self.settings.screen_height=self.screen.get_rect().height pygame.display.set_caption("エイリアン侵略") self.ship=Ship(self) #背景色を設定する self.bg_color=(230,230,230) def run_game(self): """ゲームのメインループを開始する""" while True : self._check_events() self.ship.update() self._update_screen() def _check_events(self): """キーボードとマウスのイベントに対応する""" for event in pygame.event.get(): if event.type==pygame.QUIT: sys.exit() elif event.type==pygame.KEYDOWN: self._check_keydown_events(event) elif event.type==pygame.KEYUP: self._check_keyup_events(event) def _check_keydown_events(self,event): """キーを押すイベントに対応する""" if event.key==pygame.K_RIGHT: self.ship.moving_right=True elif event.key==pygame.K_LEFT: self.ship.moving_left=True elif event.key==pygame.K_q: sys.exit() def _check_keyup_events(self,event): """"キーを離すイベントに対応する""" if event.key==pygame.K_RIGHT: self.ship.moving_right=False elif event.key==pygame.K_LEFT: self.ship.moving_left=False def _update_screen(self): """画面上の画像を更新し、新しい画面に切り替える""" self.screen.fill(self.settings.bg_color) self.ship.blitme() pygame.display.flip() if __name__== '__main__': #ゲームのインスタンスを生成し、ゲームを実行する ai=AlienInvasion() ai.run_game()
#settings.py
class Settings: """エイリアンの侵略の全設定を格納するクラス""" def __init__(self): """ゲームの初期設定""" #画面に関する設定 self.screen_width=1200 self.screen_height=800 self.bg_color=(230,230,230) self.ship_speed=1.5
#ship.py
import pygame class Ship: """宇宙船を管理するクラス""" def __init__(self, ai_game): """宇宙船を初期化し、開始時の位置を設定する""" self.screen=ai_game.screen self.settings=ai_game.settings self.screen_rect=ai_game.screen.get_rect() #宇宙船の画像を読み込み、サイズを取得する self.image=pygame.image.load('images/ship.bmp') self.rect=self.image.get_rect() #新しい宇宙船を画面下部の中央に配置する self.rect.midbottom=self.screen_rect.midbottom #宇宙船の水平位置の浮動小数点数を格納する self.x=float(self.rect.x) #左右の移動フラグ self.moving_right=False self.moving_left=False def update(self): """移動フラグによって宇宙船の位置を更新する""" #宇宙船のxの値を更新する(rectではない) if self.moving_right and self.rect.right<self.screen_rect.right: self.x +=self.settings.ship_speed if self.moving_left and self.rect.left>0: self.x -=self.settings.ship_speed #self.xからrectオブジェクトの位置を更新する self.rect.x=self.x def blitme(self): """宇宙船を現在位置に描画する""" self.screen.blit(self.image,self.rect)
#質問
alien_invasion.pyで、ゲームをフルスクリーンでプレイできるように設定したところ、キーボードの←、→を押しても宇宙船が動かなくなりました。self.screen=pygame.display.set_mode((0,0),pygame.FULLSCREEN)の画面のサイズのところを(1200,800)に変えてみると動くようになりました。しかし、本には(0,0)と書いてあります。(0,0)で宇宙船を動かすにはどうしたらいいですか?回答よろしくお願いいたします。
python3.7 spyder
実践編 最短距離でゼロからしっかり学ぶ python入門 Eric Matthes 著 より
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/05 06:29