思路:當按下特定的方向鍵後,飛船向指定的方向移動,可以允許不斷移動,為實現不斷移動,需要設定乙個移動標誌,預設為false,當按下時,則為true,實現其方向鍵的移動,除此之外,還要限制飛船的活動範圍,防止飛出邊界,為此需要更改**ship.py完整**如下
import pygame
class
ship
():def
__init__
(self,ai,screen):
"""初始化飛船並設定其初始位置"""
self.screen=screen
self.ai=ai
#載入飛船影象
self.image=pygame.image.load('e:\外星人入侵\images\ship.bmp')
#獲取飛船影象的長寬尺寸
self.rect=self.image.get_rect()
#獲取遊戲螢幕的尺寸
self.screen_rect=screen.get_rect()
#將每艘新飛船放在螢幕底部的**
#飛船的x座標=螢幕的x中間位置座標
self.rect.centerx=self.screen_rect.centerx
#飛船的y座標=螢幕的底部y值
self.rect.bottom=self.screen_rect.bottom
#在飛船的屬性center中儲存最小數值
# self.center=float(0)
#飛船移動標誌
self.moving_right=false
self.moving_left =false
self.moving_down = false
self.moving_up = false
defupdate
(self):
"""根據移動標誌調整飛船的位置"""
#更新飛船的center值而不是rect
if self.moving_right and self.rect.right1
#self.center+=self.ai.speed
if self.moving_left and self.rect.left>0:
self.rect.centerx-=1
if self.moving_up and self.rect.top>self.screen_rect.top:
self.rect.centery -= 1
# self.center+=self.ai.speed
if self.moving_down and self.rect.bottom1
#self.center -= self.ai.speed
#根據self.center更新rect物件
#self.rect.centerx+=self.center
defblitme
(self):
"""指定位置繪製飛船"""
#blit(影象,影象繪製的位置座標)
self.screen.blit(self.image,self.rect)
新增update()函式,根據上下左右移動標誌,進行飛船的上下左右移動game_functions.py完整**如下
import sys
import pygame
defcheck_keydown_evnet
(event,ship):
if event.key == pygame.k_right:
# 向右移動飛船
ship.moving_right = true
elif event.key == pygame.k_left:
# 向右移動飛船
ship.moving_left = true
elif event.key==pygame.k_up:
ship.moving_up = true
elif event.key==pygame.k_down:
ship.moving_down = true
defcheck_keyup_event
(event,ship):
if event.key == pygame.k_right:
# 向右移動飛船
ship.moving_right = false
elif event.key == pygame.k_left:
# 向右移動飛船
ship.moving_left = false
elif event.key==pygame.k_up:
ship.moving_up = false
elif event.key==pygame.k_down:
ship.moving_down = false
defcheck_evens
(ship):
"""響應按鍵和滑鼠事件"""
for event in pygame.event.get():
if event.type == pygame.quit:
sys.exit()
#檢測是否有按鍵按下
elif event.type==pygame.keydown:
check_keydown_evnet(event, ship)
elif event.type==pygame.keyup:
check_keyup_event(event, ship)
defupdate_screen
(ai_settings,screen,ship):
"""每次更新螢幕上的影象,並切換到新螢幕"""
# 背景填充顏色
screen.fill(ai_settings.bg_color)
# 將飛船繪製到螢幕上
ship.blitme()
# 讓最近繪製的螢幕可見,否則是看不見的
pygame.display.flip()
進行相應的按鍵事件處理,新增判斷按鍵是否按下與鬆開的相關處理事件,從而實現飛船的上下左右移動alien_invasion.py完整**如下
import sys
import pygame
#匯入設定類
from settings import settings
from ship import ship
import game_functions as gf
defrun_game
():#初始化遊戲並建立乙個螢幕物件
pygame.init()
#例項化settings物件
ai=settings()
#建立遊戲視窗大小
screen=pygame.display.set_mode((ai.screen_width,ai.screen_height))
#建立遊戲標題
pygame.display.set_caption("外星人大戰")
#例項化飛船物件ship,傳入螢幕實參
ship=ship(ai,screen)
#開始遊戲的主迴圈
while
true:
#監視鍵盤和滑鼠的事件
gf.check_evens(ship)
ship.update()
gf.update_screen(ai,screen,ship)
if __name__ == '__main__':
run_game()
最後實現的效果圖如下
實現飛船的上下左右移動,以及邊界限制
外星人入侵
今天是乙個週末,宿舍的人全部都出去玩了,而我因為太懶乙個人留在了宿舍,連床都不起,吃飯靠的是點外賣。不過,為了好玩,我跟著書本學習打了乙個2d小遊戲,並加入了一點自己的東西。一 遊戲頁面 剛開始我把所有的遊戲螢幕設定都放在了下面 裡,這使得 看起來非常長,和雜亂,所以為了使遊戲方便擴充套件和整個 邏...
Pygame 外星人入侵(7)外星人壓境
二 更加合理地移動 三 小結 在之前的博文中,實現了在螢幕上繪製一大群外星人,現在我們想讓這群外星人動起來,它們的移動遵循著一定的規律。我們首先要實現的是,如何讓一群外星人一起向螢幕右側移動。遊戲引數性質的變數統一存放在 設定模組中的設定類中 6 外星人的屬性 6。1 外星人移動的速度 self.a...
外星人入侵 Standard IO
description 外星人入侵地球。可怕的吃人外星人正在全國各地依次序建立它們的基地。全國共有n 1 n 10,000 座城市,城市編號1 n。城市之間有m 0 m 100,000 條雙向道路相連。外星人計畫建立a 0 a n 個基地。你只有在距離當前所有外星人基地至少k 1 k 100 單位長...