亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python實戰(zhàn)之外星人入侵游戲示例代碼

 更新時間:2022年01月14日 08:48:59   作者:億是守候?&?億是承諾  
這篇文章主要介紹了利用Python編寫的外星人入侵游戲的示例代碼,文中的代碼講解詳細,對我們學習Python有一定的幫助,感興趣的可以學習一下

0.前言

最近學習的python第一個項目實戰(zhàn),《外星人入侵》,成功實現所有功能,給大家提供源代碼

環(huán)境安裝:python 3.7+ pygame

安裝 pygame

pip install -- user pygame

或者

conda install --user pygame

1.效果展示

先展示效果,消滅外星人,有三條命,按Q是退出全屏,空格鍵是子彈,按下play鍵開始游戲,擊敗外星人飛船會有積分加,三條命之后需要點擊play才能再次啟動

2.實現代碼

外星人入侵小游戲文件排版如下,先創(chuàng)建這幾個.py文件

2.1 image

2.2 alien_invasion.py

import sys
from time import sleep

import pygame

from settings import Settings
from ship import Ship
from bullet import Bullet
from alien import Alien
from game_stats import GameStats
from button import Button
from scoreboard import Scoreboard

class AlienInvasion:
? ? '''管理游戲資源和行為的類'''
? ? def __init__(self):
? ? ? ? '''初始化游戲并創(chuàng)建游戲資源'''
? ? ? ? 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('Alien Invasion')

? ? ? ? '''創(chuàng)建存儲游戲統(tǒng)計信息的實例'''
? ? ? ? '''并創(chuàng)建記分牌'''
? ? ? ? '''創(chuàng)建一個用于存儲游戲統(tǒng)計信息的實例'''
? ? ? ? self.stats =GameStats(self)
? ? ? ? self.sb = Scoreboard(self)

? ? ? ? self.ship =Ship(self)
? ? ? ? self.bullets = pygame.sprite.Group()
? ? ? ? self.aliens = pygame.sprite.Group()

? ? ? ? self._create_fleet()

? ? ? ? '''創(chuàng)建play按鈕'''
? ? ? ? self.play_button = Button(self,"Play")

? ? ? ? # '''設置背景色'''
? ? ? ? # self.bg_color = (self.settings.bg_color) cuowu

? ? def _ship_hit(self):
? ? ? ? '''響應飛船被外星人撞到'''
? ? ? ? if self.stats.ships_left >0:
? ? ? ? ? ? '''將ship_left減1并更新記分牌'''
? ? ? ? ? ? self.stats.ships_left -= 1
? ? ? ? ? ? self.sb.prep_ships()

? ? ? ? ? ? '''清除余下的外星人和子彈'''
? ? ? ? ? ? self.aliens.empty()
? ? ? ? ? ? self.bullets.empty()

? ? ? ? ? ? '''創(chuàng)建一群新的外星人,并將飛船放到屏幕底端的中央'''
? ? ? ? ? ? self._create_fleet()
? ? ? ? ? ? self.ship.center_ship()

? ? ? ? ? ? '''暫停'''
? ? ? ? ? ? sleep(0.5)
? ? ? ? else:
? ? ? ? ? ? self.stats.game_active = False
? ? ? ? ? ? pygame.mouse.set_visible(True)

? ? def _create_fleet(self):
? ? ? ? '''創(chuàng)建外星人群'''
? ? ? ? '''創(chuàng)建一個外星人并計算一行可容納多少個外星人'''
? ? ? ? '''外星人的間距為外星人寬度'''
? ? ? ? alien = Alien(self)
? ? ? ? alien_width, alien_height = alien.rect.size
? ? ? ? available_space_x = self.settings.screen_width - (2 * alien_width)
? ? ? ? number_aliens_x = available_space_x // (2 * alien_width )

? ? ? ? '''計算屏幕可容納多少行外星人'''
? ? ? ? ship_height = self.ship.rect.height
? ? ? ? available_space_y = (self.settings.screen_height -
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(3 * alien_height) - ship_height)
? ? ? ? number_rows = available_space_y // (2 * alien_height)

? ? ? ? '''創(chuàng)建外星人群'''
? ? ? ? for row_number in range(number_rows):
? ? ? ? ? ? '''創(chuàng)建第一行外星人'''
? ? ? ? ? ? for alien_number in range(number_aliens_x):
? ? ? ? ? ? ? ? self._create_alien(alien_number,row_number)

? ? def _create_alien(self,alien_number,row_number):
? ? ? ? '''創(chuàng)建一個外星人并將其加入當前行'''
? ? ? ? alien = Alien(self)

? ? ? ? alien_width, alien_height =alien.rect.size
? ? ? ? alien.x = alien_width + 2 * alien_width * alien_number
? ? ? ? alien.rect.x = alien.x
? ? ? ? alien.rect.y =alien.rect.height + 2 * alien.rect.height * row_number
? ? ? ? self.aliens.add(alien)

? ? def run_game(self):
? ? ? ? '''開始游戲的主循環(huán)'''
? ? ? ? while True:
? ? ? ? ? ? '''監(jiān)視鍵盤和鼠標事件'''
? ? ? ? ? ? self._check_events()

? ? ? ? ? ? if self.stats.game_active:
? ? ? ? ? ? ? ? '''調用飛船的方法'''
? ? ? ? ? ? ? ? self.ship.update()
? ? ? ? ? ? ? ? '''子彈更新'''
? ? ? ? ? ? ? ? self._update_bullets()
? ? ? ? ? ? ? ? '''讓外星人移動'''
? ? ? ? ? ? ? ? self._update_aliens() #suojin+weizhi
? ? ? ? ? ? '''每次循環(huán)時都會重繪屏幕'''
? ? ? ? ? ? self._update_screen()


? ? def _check_fleet_edges(self):
? ? ? ? '''有外星人到達邊緣時采取相應的措施'''
? ? ? ? for alien in self.aliens.sprites():
? ? ? ? ? ? if alien.check_edges():
? ? ? ? ? ? ? ? self._change_fleet_direction()
? ? ? ? ? ? ? ? break

? ? def _change_fleet_direction(self):
? ? ? ? '''將整群人外星人下一,并改變它們的方向'''
? ? ? ? for alien in self.aliens.sprites():
? ? ? ? ? ? alien.rect.y += self.settings.fleet_drop_speed
? ? ? ? self.settings.fleet_direction *= -1

? ? def _update_aliens(self):
? ? ? ? '''檢測是否有外星人位于屏幕邊緣,更新外星人群中所有外星人的位置'''
? ? ? ? self._check_fleet_edges()
? ? ? ? self.aliens.update()

? ? ? ? '''檢測外星人和飛船之間的碰撞'''
? ? ? ? if pygame.sprite.spritecollideany(self.ship, self.aliens):
? ? ? ? ? ? self._ship_hit()

? ? ? ? '''檢查是否有外星人到達了屏幕底端'''
? ? ? ? self._check_aliens_bottom() #suojin

? ? 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)
? ? ? ? ? ? elif event.type == pygame.MOUSEBUTTONDOWN:
? ? ? ? ? ? ? ? mouse_pos = pygame.mouse.get_pos()
? ? ? ? ? ? ? ? self._check_play_button(mouse_pos)

? ? def _check_play_button(self,mouse_pos):
? ? ? ? '''在玩家單機play按鈕時開始新游戲'''
? ? ? ? button_clicked = self.play_button.rect.collidepoint(mouse_pos)
? ? ? ? if button_clicked and not self.stats.game_active:
? ? ? ? ? ? '''重置游戲設置'''
? ? ? ? ? ? self.settings.initialize_dynamic_settings()

? ? ? ? ? ? '''重置游戲統(tǒng)計信息'''
? ? ? ? ? ? self.stats.reset_stats()
? ? ? ? ? ? self.stats.game_active = True
? ? ? ? ? ? self.sb.prep_score()
? ? ? ? ? ? self.sb.prep_level()
? ? ? ? ? ? self.sb.prep_ships()

? ? ? ? ? ? '''清空余下的外星人和子彈'''
? ? ? ? ? ? self.aliens.empty()
? ? ? ? ? ? self.bullets.empty()

? ? ? ? ? ? '''創(chuàng)建一群新的外星人并讓飛船居中'''
? ? ? ? ? ? self._create_fleet()
? ? ? ? ? ? self.ship.center_ship()

? ? ? ? ? ? '''隱藏鼠標光標'''
? ? ? ? ? ? pygame.mouse.set_visible(False)

? ? def _check_aliens_bottom(self):
? ? ? ? '''檢查是否有外星人到達了屏幕底端'''
? ? ? ? screen_rect =self.screen.get_rect()
? ? ? ? for alien in self.aliens.sprites():
? ? ? ? ? ? if alien.rect.bottom >= screen_rect.bottom:
? ? ? ? ? ? ? ? '''像飛船被撞一樣處理'''
? ? ? ? ? ? ? ? self._ship_hit()
? ? ? ? ? ? ? ? break

? ? 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()
? ? ? ? elif event.key == pygame.K_SPACE:
? ? ? ? ? ? self._fire_bullet()

? ? 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 _fire_bullet(self):
? ? ? ? '''創(chuàng)建一顆子彈,并將其加入編組bullets中'''
? ? ? ? if len(self.bullets) < self.settings.bullets_allowed:
? ? ? ? ? ? new_bullet = Bullet(self)
? ? ? ? ? ? self.bullets.add(new_bullet)

? ? def _update_bullets(self):
? ? ? ? '''更新子彈的位置并刪除消失的子彈'''
? ? ? ? '''更新子彈的位置'''
? ? ? ? self.bullets.update()
? ? ? ? '''刪除消失的子彈'''
? ? ? ? for bullet in self.bullets.copy():
? ? ? ? ? ? if bullet.rect.bottom <= 0:
? ? ? ? ? ? ? ? self.bullets.remove(bullet)

? ? ? ? self._check_bullet_alien_collisions()

? ? def _check_bullet_alien_collisions(self):
? ? ? ? '''檢查是否有子彈擊中了外星人
? ? ? ? 如果是,就刪除相應的子彈和外星人'''
? ? ? ? collisions = pygame.sprite.groupcollide(self.bullets, self.aliens, True,True)
? ? ? ? if collisions:
? ? ? ? ? ? for aliens in collisions.values():
? ? ? ? ? ? ? ? self.stats.score += self.settings.alien_points * len(aliens)
? ? ? ? ? ? self.sb.prep_score()
? ? ? ? ? ? self.sb.check_high_score()
? ? ? ? if not self.aliens:
? ? ? ? ? ? '''刪除現有的子彈并新建一群外星人'''
? ? ? ? ? ? self.bullets.empty()
? ? ? ? ? ? self._create_fleet()
? ? ? ? ? ? self.settings.increase_speed()

? ? ? ? ? ? '''提高等級'''
? ? ? ? ? ? self.stats.level += 1
? ? ? ? ? ? self.sb.prep_level()

? ? def _update_screen(self):
? ? ? ? '''更新屏幕上的圖像,并切換到新屏幕'''
? ? ? ? self.screen.fill(self.settings.bg_color)#loule settings.
? ? ? ? self.ship.blitme()
? ? ? ? for bullet in self.bullets.sprites():
? ? ? ? ? ? bullet.draw_bullet()
? ? ? ? self.aliens.draw(self.screen)

? ? ? ? '''顯示得分'''
? ? ? ? self.sb.show_score()

? ? ? ? '''如果游戲處于非活動狀態(tài),就繪制Play按鈕'''
? ? ? ? if not self.stats.game_active:
? ? ? ? ? ? self.play_button.draw_button()

? ? ? ? '''讓最近繪制的屏幕可見'''
? ? ? ? pygame.display.flip()

if __name__ == "__main__":
? ? '''創(chuàng)建游戲實例并運行游戲'''
? ? ai = AlienInvasion()
? ? ai.run_game()

2.3 alien.py

import pygame
from pygame.sprite import Sprite

class Alien(Sprite):
? ? '''表示單個外星人的類'''

? ? def __init__(self,ai_game):
? ? ? ? '''初始化外星人并設置其起始位置'''
? ? ? ? super().__init__()
? ? ? ? self.screen = ai_game.screen
? ? ? ? self.settings = ai_game.settings
? ? ? ? '''加載外星人圖像并設置其rect屬性'''
? ? ? ? self.image = pygame.image.load('image/alien.bmp')
? ? ? ? self.rect =self.image.get_rect()

? ? ? ? '''每個外星人最初都在屏幕左下角附近'''
? ? ? ? self.rect.x = self.rect.width
? ? ? ? self.rect.y = self.rect.height

? ? ? ? '''存儲外星人的精確水平位置'''
? ? ? ? self.x = float(self.rect.x)

? ? def check_edges(self):
? ? ? ? '''如果外星人位于屏幕邊緣,就返回True'''
? ? ? ? screen_rect = self.screen.get_rect()
? ? ? ? if self.rect.right >= screen_rect.right or self.rect.left <= 0:
? ? ? ? ? ? return True

? ? def update(self):
? ? ? ? '''向左或者向右移動外星人'''
? ? ? ? self.x += (self.settings.alien_speed * self.settings.fleet_direction)

? ? ? ? # self.x += self.settings.alien_speed向右移動外星人
? ? ? ? self.rect.x = self.x

2.4 bullet.py

import pygame
from pygame.sprite import Sprite

class Bullet(Sprite):
? ? '''管理飛船所發(fā)射子彈的類'''
? ? def __init__(self,ai_game):
? ? ? ? '''在飛船當前位置創(chuàng)建一個子彈對象'''
? ? ? ? super().__init__()
? ? ? ? self.screen = ai_game.screen
? ? ? ? self.settings = ai_game.settings
? ? ? ? self.color =self.settings.bullet_color

? ? ? ? '''在(0,0)處創(chuàng)建一個表示子彈的矩形,在設置正確的位置'''
? ? ? ? self.rect =pygame.Rect(0,0,self.settings.bullet_width,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?self.settings.bullet_height)
? ? ? ? self.rect.midtop =ai_game.ship.rect.midtop

? ? ? ? '''存儲用小數表示子彈位置'''
? ? ? ? self.y =float(self.rect.y)

? ? def update(self):
? ? ? ? '''向上移動子彈'''
? ? ? ? '''更新表示子彈位置的小數值'''
? ? ? ? self.y -= self.settings.bullet_speed
? ? ? ? '''更新表示子彈的rect的位置'''
? ? ? ? self.rect.y = self.y

? ? def draw_bullet(self):
? ? ? ? '''在屏幕上繪制子彈'''
? ? ? ? pygame.draw.rect(self.screen, self.color, self.rect)

2.5 button.py

import pygame.font

class Button:

? ? def __init__(self,ai_game,msg):
? ? ? ? '''初始化按鈕的屬性'''
? ? ? ? self.screen = ai_game.screen
? ? ? ? self.screen_rect = self.screen.get_rect()

? ? ? ? '''設置按鈕的尺寸和其他屬性'''
? ? ? ? self.width, self.height = 200,50
? ? ? ? self.button_color = (0,255,0)
? ? ? ? self.text_color =(255,255,255)
? ? ? ? self.font = pygame.font.SysFont(None,48)

? ? ? ? '''創(chuàng)建按鈕的rect對象,并使其居中'''
? ? ? ? self.rect = pygame.Rect(0,0,self.width,self.height)
? ? ? ? self.rect.center = self.screen_rect.center

? ? ? ? '''按鈕的標簽只需要創(chuàng)建一次'''
? ? ? ? self._prep_msg(msg)

? ? def _prep_msg(self,msg):
? ? ? ? '''將msg渲染為圖像,并使其在按鈕上居中'''
? ? ? ? self.msg_image = self.font.render(msg,True,self.text_color,self.button_color)
? ? ? ? self.msg_image_rect = self.msg_image.get_rect()
? ? ? ? self.msg_image_rect.center = self.rect.center

? ? def draw_button(self):
? ? ? ? '''繪制一個用顏色填充的按鈕,再繪制文本'''
? ? ? ? self.screen.fill(self.button_color, self.rect)
? ? ? ? self.screen.blit(self.msg_image,self.msg_image_rect)

2.6 game_stats.py

class GameStats:
? ? '''跟蹤游戲的統(tǒng)計信息'''

? ? def __init__(self,ai_game):
? ? ? ? '''初始化統(tǒng)計信息'''
? ? ? ? self.settings = ai_game.settings
? ? ? ? self.reset_stats()
? ? ? ? '''游戲剛啟動時處于活動狀態(tài)'''
? ? ? ? self.game_active = False
? ? ? ? '''任何情況下都不應該重置最高得分'''
? ? ? ? self.high_score = 0

? ? def reset_stats(self):
? ? ? ? '''初始化在游戲運行期間可能變化的統(tǒng)計信息'''
? ? ? ? self.ships_left = self.settings.ship_limit
? ? ? ? self.score = 0
? ? ? ? self.level = 1

2.7 scoreboarf.py

import pygame.font
from pygame.sprite import Group
from ship import Ship

class Scoreboard:
? ? '''顯示得分信息的類'''

? ? def __init__(self,ai_game):
? ? ? ? '''初始化顯示得分涉及的屬性'''
? ? ? ? self.ai_game = ai_game
? ? ? ? self.screen = ai_game.screen
? ? ? ? self.screen_rect = self.screen.get_rect()
? ? ? ? self.settings = ai_game.settings
? ? ? ? self.stats = ai_game.stats

? ? ? ? '''顯示得分信息時使用的字體設置'''
? ? ? ? self.text_color = ?(30,30,30)
? ? ? ? self.font = pygame.font.SysFont(None,48)
? ? ? ? '''準備包含最高得分和當前得分的圖像'''
? ? ? ? self.prep_score()
? ? ? ? self.prep_ships()
? ? ? ? self.prep_high_score()
? ? ? ? self.prep_level()#cuowu

? ? def prep_ships(self):
? ? ? ? '''顯示還剩下多少艘飛船'''
? ? ? ? self.ships = Group()
? ? ? ? for ship_number in range(self.stats.ships_left): #cuowu
? ? ? ? ? ? ship =Ship(self.ai_game)
? ? ? ? ? ? ship.rect.x = 10 + ship_number * ship.rect.width
? ? ? ? ? ? ship.rect.y = 10
? ? ? ? ? ? self.ships.add(ship) #cuowu

? ? def prep_high_score(self):
? ? ? ? '''將最高得分轉換為渲染的圖像'''
? ? ? ? high_score =round(self.stats.high_score, -1)
? ? ? ? high_score_str = "{:,}".format(high_score)
? ? ? ? self.high_score_image = self.font.render(high_score_str,True,
? ? ? ? ? ? ? ? ? ? self.text_color,self.settings.bg_color)

? ? ? ? '''將最高得分放在屏幕頂部中央'''
? ? ? ? self.high_score_rect = self.high_score_image.get_rect()
? ? ? ? self.high_score_rect.centerx = self.screen_rect.centerx
? ? ? ? self.high_score_rect.top = self.score_rect.top

? ? def prep_score(self):
? ? ? ? '''將得分轉換成一副渲染的圖像'''
? ? ? ? rounded_score = round(self.stats.score, -1)
? ? ? ? score_str ="{:,}".format(rounded_score)
? ? ? ? self.score_image =self.font.render(score_str,True,
? ? ? ? ? ? ? ? self.text_color,self.settings.bg_color)
? ? ? ? '''在屏幕右下顯示得分'''
? ? ? ? self.score_rect =self.score_image.get_rect()
? ? ? ? self.score_rect.right = self.screen_rect.right - 20
? ? ? ? self.score_rect.top = 20

? ? def show_score(self):
? ? ? ? '''在屏幕上顯示得分和等級和余下的飛船數'''
? ? ? ? self.screen.blit(self.score_image, self.score_rect)
? ? ? ? self.screen.blit(self.high_score_image, self.high_score_rect)
? ? ? ? self.screen.blit(self.level_image, self.level_rect )
? ? ? ? self.ships.draw(self.screen)

? ? def check_high_score(self):
? ? ? ? '''檢查是否誕生了新的最高得分'''
? ? ? ? if self.stats.score > self.stats.high_score:
? ? ? ? ? ? self.stats.high_score = self.stats.score
? ? ? ? ? ? self.prep_high_score()

? ? def prep_level(self):
? ? ? ? '''將等級轉化為渲染的圖像'''
? ? ? ? level_str = str(self.stats.level)
? ? ? ? self.level_image = self.font.render(level_str,True,
? ? ? ? ? ? ? ? self.text_color, self.settings.bg_color)

? ? ? ? '''將等級放在得分下面'''
? ? ? ? self.level_rect = self.level_image.get_rect()
? ? ? ? self.level_rect.right = self.score_rect.right
? ? ? ? self.level_rect.top = self.score_rect.bottom +10

2.8 settings.py

class Settings:
? ? '''存儲游戲《外星人入侵》中所有設置的類'''

? ? def __init__(self):
? ? ? ? '''初始化游戲的靜態(tài)設置'''
? ? ? ? '''屏幕設置'''
? ? ? ? self.screen_width = 1200
? ? ? ? self.screen_height =800
? ? ? ? self.bg_color = (230,230,230)

? ? ? ? self.ship_limit = 3

? ? ? ? self.bullet_width = 3
? ? ? ? self.bullet_height = 15
? ? ? ? self.bullet_color = (60, 60, 60)
? ? ? ? self.bullets_allowed = 3 ?# 設置存儲的最大子彈數為3

? ? ? ? self.fleet_drop_speed = 10
? ? ? ? '''加快游戲節(jié)奏的速度'''
? ? ? ? self.speedup_scale = 1.1

? ? ? ? self.score_scale = 1.5

? ? ? ? self.initialize_dynamic_settings()

? ? ? ? # '''設置飛船速度'''
? ? ? ? # self.ship_speed = 1.5
? ? ? ? # '''子彈設置'''
? ? ? ? # self.bullet_speed = 1.5
? ? ? ? # self.alien_speed = 1.0
? ? ? ? # '''fleet_direction為1表示向有意,-1表示向左移'''
? ? ? ? # self.fleet_direction = 1 cuowu

? ? def initialize_dynamic_settings(self):
? ? ? ? '''初始化隨游戲進行而變化的設置'''
? ? ? ? self.ship_speed = 1.5
? ? ? ? self.bullet_speed =3.0
? ? ? ? self.alien_speed = 1.0
? ? ? ? '''fleet_direction為1表示向右,為-1表示向左'''
? ? ? ? self.fleet_direction = 1
? ? ? ? # '''計分'''
? ? ? ? self.alien_points = 50

? ? def increase_speed(self):
? ? ? ? '''提高速度設置和外星人分數'''
? ? ? ? self.ship_speed *= self.speedup_scale
? ? ? ? self.bullet_speed *= self.speedup_scale
? ? ? ? self.alien_speed *= self.speedup_scale

? ? ? ? self.alien_points = int(self.alien_points * self.score_scale)
? ? ? ? # print(self.alien_points) cuowu

2.9 ship.py

import pygame
from pygame.sprite import Sprite

class Ship(Sprite):
? ? '''管理飛船的類'''

? ? def __init__(self,ai_game):
? ? ? ? '''初始化飛船并設置其初始化位置'''
? ? ? ? super().__init__()
? ? ? ? self.screen = ai_game.screen
? ? ? ? '''設置飛船速度'''
? ? ? ? self.settings = ai_game.settings

? ? ? ? self.screen_rect = ai_game.screen.get_rect()

? ? ? ? '''加載飛船圖像并獲取其外接矩陣'''
? ? ? ? self.image = pygame.image.load('image/ship.bmp')
? ? ? ? self.rect = self.image.get_rect()

? ? ? ? '''對于每艘新飛船,都將其放在屏幕底部的中央'''
? ? ? ? self.rect.midbottom = self.screen_rect.midbottom

? ? ? ? '''在飛船的屬性x中存儲小數值'''
? ? ? ? self.x = float(self.rect.x)

? ? ? ? '''移動標志'''
? ? ? ? self.moving_right = False
? ? ? ? self.moving_left = False

? ? def update(self):
? ? ? ? '''根據移動標志調整飛船的位置'''
? ? ? ? '''更新飛船而不是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)

? ? def center_ship(self):
? ? ? ? '''讓飛船在屏幕底端劇中'''
? ? ? ? self.rect.midbottom = self.screen_rect.midbottom
? ? ? ? self.x = float(self.rect.x)

以上就是Python實戰(zhàn)之外星人入侵游戲示例代碼的詳細內容,更多關于Python外星人入侵游戲的資料請關注腳本之家其它相關文章!

相關文章

  • 如何使用Python實現數據透視表、音頻文件格式轉換

    如何使用Python實現數據透視表、音頻文件格式轉換

    這篇文章主要介紹了用Python實現數據透視表、音頻文件格式轉換,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • Tensorflow進行多維矩陣的拆分與拼接實例

    Tensorflow進行多維矩陣的拆分與拼接實例

    今天小編就為大家分享一篇Tensorflow進行多維矩陣的拆分與拼接實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python?Opencv基于透視變換的圖像矯正

    Python?Opencv基于透視變換的圖像矯正

    這篇文章主要為大家詳細介紹了Python?Opencv基于透視變換的圖像矯正,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • python中WSGI是什么,Python應用WSGI詳解

    python中WSGI是什么,Python應用WSGI詳解

    這篇文章主要介紹一下python中的WSGI, 小編在網上找了幾篇非常好的關于WSGI介紹,整理一下分享給大家。
    2017-11-11
  • python分割一個文本為多個文本的方法

    python分割一個文本為多個文本的方法

    這篇文章主要為大家詳細介紹了python分割一個文本為多個文本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Pycharm中配置遠程Docker運行環(huán)境的教程圖解

    Pycharm中配置遠程Docker運行環(huán)境的教程圖解

    這篇文章主要介紹了Pycharm中配置遠程Docker運行環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 教你用python控制安卓手機

    教你用python控制安卓手機

    不久前,我在思考如何通過向好友發(fā)送幾分鐘的垃圾郵件來惹惱我的朋友,而在做一些研究的過程中,我遇到了Android調試橋.在本快速指南中,我將向您展示如何使用Python與之交互以及如何創(chuàng)建2個快速腳本.需要的朋友可以參考下
    2021-05-05
  • Python可視化神器pyecharts繪制漏斗圖

    Python可視化神器pyecharts繪制漏斗圖

    這篇文章主要介紹了Python可視化神器pyecharts繪制漏斗圖,漏斗圖是由Light等在1984年提出,一般以單個研究的效應量為橫坐標,樣本含量為縱坐標做的散點圖
    2022-07-07
  • Python的Django中將文件上傳至七牛云存儲的代碼分享

    Python的Django中將文件上傳至七牛云存儲的代碼分享

    七牛云存儲可以幫助服務器轉存圖片等數據,類似于Dropbox等存儲服務,這里就帶給大家Python的Django中將文件上傳至七牛云存儲的代碼分享,需要的朋友可以參考下
    2016-06-06
  • 虛擬環(huán)境及venv和virtualenv的區(qū)別說明

    虛擬環(huán)境及venv和virtualenv的區(qū)別說明

    這篇文章主要介紹了虛擬環(huán)境及venv和virtualenv的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論