外星人入侵 二

2021-08-21 20:38:55 字數 4018 閱讀 8173

思路:當按下特定的方向鍵後,飛船向指定的方向移動,可以允許不斷移動,為實現不斷移動,需要設定乙個移動標誌,預設為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 單位長...