Pygame實(shí)戰(zhàn)之實(shí)現(xiàn)經(jīng)典外星人游戲
前言
說說外星人那些事兒....
你以為的外星人......他們都是乘坐UFO來地球的,長的嗯哼可能比較有特色。也許長這樣

害!其實(shí)可能也或許不長這樣。
圖片的話借鑒的大眾認(rèn)知的這一款。當(dāng)然你們還可以自己來!下面我們來做一款簡單的《外星人入侵》小游戲吧!
正文
安裝環(huán)境
下載python3,或如Anaconda3(64 bit),導(dǎo)入pygame游戲包。

主要代碼
1.外星人設(shè)置,alien.py,代碼:
import pygame
from pygame.sprite import Sprite
class Alien(Sprite):
"""表示單個(gè)外星人的類"""
def __init__(self,ai_settings,screen):
"""初始化外星人并設(shè)置其他位置"""
super(Alien,self).__init__()
self.screen = screen
self.ai_settings = ai_settings
#加載外星人圖像,并設(shè)置其rect屬性
self.image = pygame.image.load('images/alien.bmp')
self.rect = self.image.get_rect()
#每個(gè)外星人最初都在屏幕左上角附近
self.rect.x = self.rect.width
self.rect.y = self.rect.height
#存儲(chǔ)外星人的準(zhǔn)確位置
self.x = float(self.rect.x)
def blitme(self):
"""在指定位置繪制外星人"""
self.screen.blit(self.image,self.rect)
def check_edges(self):
"""如果外星人位于屏幕邊緣,就返回True"""
screen_rect = self.screen.get_rect()
if self.rect.right >= screen_rect.right:
return True
elif self.rect.left <= 0:
return True
def update(self):
"""向右移動(dòng)外星人"""
self.x += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction)
self.rect.x = self.x
2.游戲主程序,alien_invasion.py,代碼:
import pygame
from settings import Settings
from game_stats import GameStats
from button import Button
from ship import Ship
from pygame.sprite import Group
import game_functions as gf
from scoreboard import Scoreboard
def run_game():
pygame.init() # 初始化背景設(shè)置
ai_settings = Settings() # 全局設(shè)置
screen = pygame.display.set_mode( # 創(chuàng)建screen顯示窗口
(ai_settings.screen_width,ai_settings.screen_height)
)
pygame.display.set_caption('Alien Invasion') # 標(biāo)題
#新建Play按鈕
play_button = Button(ai_settings,screen,"Play")
#創(chuàng)建一個(gè)用于存儲(chǔ)游戲統(tǒng)計(jì)信息的實(shí)例,并創(chuàng)建記分牌
stats = GameStats(ai_settings)
sb = Scoreboard(ai_settings, screen, stats)
# 創(chuàng)建飛船
ship = Ship(ai_settings,screen)
# 創(chuàng)建子彈編組
bullets = Group()
#創(chuàng)建一個(gè)外星人
aliens = Group()
#創(chuàng)建外星人群
gf.create_fleet(ai_settings,screen,ship,aliens)
# 開始游戲主循環(huán)
while True:
# 監(jiān)視鍵盤和鼠標(biāo)事件
gf.check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets)
if stats.game_active:
# 移動(dòng)飛船
gf.update_ship(ship)
# 更新子彈位置
gf.update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets)
#更新外星人
gf.update_aliens(ai_settings,stats,screen,sb,ship,aliens,bullets)
# 更新屏幕
gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button)
run_game()
3.設(shè)置子彈,bullet.py,代碼:
import pygame
from pygame.sprite import Sprite
import time
class Bullet(Sprite):
'''飛船子彈進(jìn)行管理'''
def __init__(self,ai_settings,screen,ship):
super(Bullet,self).__init__()
self.screen = screen
# 創(chuàng)建子彈矩形初始位置(0,0,3,15)分別對(duì)應(yīng)lef,top,寬,高
self.rect = pygame.Rect(0,0,
ai_settings.bullet_width, ai_settings.bullet_height)
self.rect.centerx = ship.rect.centerx # 設(shè)置中心點(diǎn)x軸坐標(biāo)跟飛船一致
self.rect.top = ship.rect.top # 設(shè)置y軸坐標(biāo)頂部跟飛船一致
# 設(shè)置成小數(shù)進(jìn)行計(jì)算
self.top = float(self.rect.top)
self.color = ai_settings.bullet_color
self.speed_factor = ai_settings.bullet_speed_factor
def update(self):
self.top -=self.speed_factor
self.rect.top = self.top
print(self.rect.top)
def draw_bullet(self):
pygame.draw.rect(self.screen,self.color,self.rect)
#略.....................................其實(shí)還有幾頁的源碼量,代碼很多,需要的話直接找我會(huì)比較好~
效果展示:

到此這篇關(guān)于Pygame實(shí)戰(zhàn)之實(shí)現(xiàn)經(jīng)典外星人游戲的文章就介紹到這了,更多相關(guān)Pygame外星人游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 基于Pygame中Pygame模塊的大戰(zhàn)外星人實(shí)戰(zhàn)
- Python?Pygame實(shí)戰(zhàn)之打磚塊游戲的實(shí)現(xiàn)
- Python Pygame實(shí)戰(zhàn)之塔防游戲的實(shí)現(xiàn)
- Python Pygame實(shí)戰(zhàn)之超級(jí)炸彈人游戲的實(shí)現(xiàn)
- Python Pygame實(shí)戰(zhàn)之賽車游戲的實(shí)現(xiàn)
- Python?Pygame實(shí)戰(zhàn)之歡樂打地鼠游戲
- Python?Pygame實(shí)戰(zhàn)之打磚塊小游戲
- Python Pygame實(shí)戰(zhàn)之水果忍者游戲的實(shí)現(xiàn)
- pygame外星人入侵小游戲超詳細(xì)開發(fā)流程
相關(guān)文章
舉例講解Linux系統(tǒng)下Python調(diào)用系統(tǒng)Shell的方法
這篇文章主要介紹了舉例講解Linux系統(tǒng)下Python調(diào)用系統(tǒng)Shell的方法,包括用Python和shell讀取文件某一行的實(shí)例,需要的朋友可以參考下2015-11-11
Python編程中的文件讀寫及相關(guān)的文件對(duì)象方法講解
這篇文章主要介紹了Python編程中的文件讀寫及相關(guān)的文件對(duì)象方法講解,其中文件對(duì)象方法部分講到了對(duì)文件內(nèi)容的輸入輸出操作,需要的朋友可以參考下2016-01-01
Python實(shí)現(xiàn)批量讀取HDF多波段柵格數(shù)據(jù)并繪制像元直方圖
這篇文章主要為大家詳細(xì)介紹了如何基于Python語言gdal模塊,實(shí)現(xiàn)多波段HDF柵格圖像文件的讀取、處理與像元值可視化(直方圖繪制)等操作,需要的可以參考一下2023-03-03
pycharm2020.1.2永久破解激活教程,實(shí)測(cè)有效
很多使用pycharm2020.1.2版本的朋友,不知道如何激活破解,這篇文章主要介紹了pycharm2020.1.2永久破解激活教程,經(jīng)小編實(shí)測(cè)有效,需要的朋友可以參考下2020-10-10
Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解
這篇文章主要介紹了Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python神經(jīng)網(wǎng)絡(luò)相關(guān)概念、原理及解決文本分類具體操作技巧,需要的朋友可以參考下2020-01-01
python的tkinter布局之簡單的聊天窗口實(shí)現(xiàn)方法
這篇文章主要介紹了python的tkinter布局之簡單的聊天窗口實(shí)現(xiàn)方法,對(duì)于tkinter用法做了初步的介紹與應(yīng)用展示,需要的朋友可以參考下2014-09-09

