外星人入侵

2022-06-17 03:54:13 字數 4231 閱讀 3817

今天是乙個週末,宿舍的人全部都出去玩了,而我因為太懶乙個人留在了宿舍,連床都不起,吃飯靠的是點外賣。

不過,為了好玩,我跟著書本學習打了乙個2d小遊戲,並加入了一點自己的東西。

一、遊戲頁面

剛開始我把所有的遊戲螢幕設定都放在了下面**裡,這使得**看起來非常長,和雜亂, 所以為了使遊戲方便擴充套件和整個**邏輯更容易理解,我將整個遊戲分為了幾個檔案。下面就是主程式檔案

import

sysimport

pygame

from settings import

settings

from ship import

ship

import

game_functions as gf

defrun_game():

#初始化遊戲並建立乙個螢幕物件

pygame.init()#

初始化背景設定,讓pygame能夠正長工作

#screen=pygame.display.set_mode((1200,800))#實參(1200,800)是乙個元組,制定了遊戲視窗的尺寸

ai_settings=settings()

screen =pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))

pygame.display.set_caption(

"外星人入侵")

#建立一艘新飛船

ship=ship(screen)

#設定背景色

#bg_color=(230,250,250)

#開始遊戲的主迴圈

while

true:

#監視鍵盤和滑鼠事件

#for event in pygame.event.get():

#if event.type==pygame.quit:#如果使用者點叉號,則退出

#sys.exit()

gf.check_events(ship)

ship.update()

#每次迴圈時重繪螢幕

#screen.fill(bg_color)

#screen.fill(ai_settings.bg_color)

#ship.blitme()##

#讓最近繪製的螢幕可見

#pygame.display.flip()

gf.update_screen(ai_settings,screen,ship)

run_game()

二、螢幕設定類settings.py

class

settings(object):

'''儲存這個遊戲的所有設定類

'''def

__init__

(self):

'''初始化遊戲設定

'''#

螢幕設定

self.screen_width=450self.screen_height=640

#self.bg_color=(230,250,250)

#self.ship_speed_factor=1.5

本身我跟隨書本裡做的時候,它提供的是背景顏色,但是我覺得背景顏色太難看了,所以就自己進行了修改,修改在下一部分裡

三、建立ship類

在這個類裡,我們將飛船顯示在螢幕上,並進行螢幕的更新,在這基礎上,我在這個類裡給遊戲加上了背景,記住一定要先繪製背景,在繪製飛船,不然會顯示不出飛船

import

pygame

class

ship(object):

def__init__

(self,screen):

'''初始化飛船,並設定其初始位置

'''self.screen=screen

#載入飛船影象,並獲取其外接矩形

獲取飛船外接矩形

self.screen_rect=screen.get_rect()#

獲取表示螢幕的矩形

self.screen_image_rect=self.screen_image.get_rect()

#將每艘新飛船放在螢幕底部**

self.screen_image_rect.centerx=self.screen_rect.centerx

self.screen_image_rect.bottom =self.screen_rect.bottom

self.rect.centerx=self.screen_rect.centerx

self.rect.bottom=self.screen_rect.bottom

#移動標示

self.moving_right=false

self.moving_left=false

self.moving_up =false

self.moving_down =false

defupdate(self):

'''根據移動標示移動飛船

'''if

self.moving_right:

self.rect.centerx+=1

ifself.moving_left:

self.rect.centerx-=1

ifself.moving_up :

self.rect.bottom-=1

ifself.moving_down :

self.rect.bottom+=1

defblitme(self):

'''在指定位置繪製飛船

'''self.screen.blit(self.screen_image, self.screen_image_rect)

self.screen.blit(self.image, self.rect)

#blitme(),根據self.rect將繪製到螢幕上。

四、遊戲操作

既然是電腦遊戲,則肯定是要通過鍵盤來控制飛船的移動,我們需要響應按鍵。每當使用者按鍵時,都將在pygame中註冊乙個事件。

import

sysimport

pygame

defcheck_events(ship):

for event in

pygame.event.get():

if event.type == pygame.quit: #

如果使用者點叉號,則退出

sys.exit()

elif event.type==pygame.keydown:

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

elif event.type==pygame.keyup:

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

defupdate_screen(ai_settings,screen,ship):

#screen.fill(ai_settings.bg_color)

ship.blitme()

#讓最近繪製的螢幕可見

pygame.display.flip()

這就是我這一天所學習的,至於限制飛船不出螢幕,填裝彈藥以及外星人的建立,要等到下次了。

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 單位長...

外星人入侵 二

思路 當按下特定的方向鍵後,飛船向指定的方向移動,可以允許不斷移動,為實現不斷移動,需要設定乙個移動標誌,預設為false,當按下時,則為true,實現其方向鍵的移動,除此之外,還要限制飛船的活動範圍,防止飛出邊界,為此需要更改 ship.py完整 如下 import pygame class sh...