python飛機大戰小遊戲
阿新 • • 發佈:2022-03-27
在這個遊戲中需要安裝pygame。
在準備工作中可以建立一個(Plane Wars game)資料夾。
在這個資料夾下建立兩個py檔案和一個資料夾(用來存放圖片),分別為(test1),(test2),(pictures)。
在test1中
import pygame#插入遊戲模組
from test2 import *#插入test2
class PlaneGame(object):
def __init__(self):
# 建立一個遊戲視窗
self.screen = pygame.display.set_mode((480, 700))
# 建立時鐘物件
self.clock = pygame.time.Clock()
#建立精靈和精靈組
self.__create_sprites()
#設定一個時鐘 每隔1000毫秒 產生一個ENEMY_EVENT事件
pygame.time.set_timer(ENEMY_EVENT, 1000)
pygame.time.set_timer(FIRE, 500)
def __create_sprites(self):
# print("建立精靈組")
bg = BackGound('./pictures/background.png')插入圖片
bg1 = BackGound('./pictures/background.png', True)
self.bg_group = pygame.sprite.Group(bg, bg1)
#建立敵機精靈組
self.en_group = pygame.sprite.Group()
self.hero = Hero("./pictures/me1.png")
self.hero_group = pygame.sprite.Group(self.hero)
def start(self):
while True:
#設定重新整理幀率
self.clock.tick(60)
#事件監聽
self.__event_handler()
# 3. 碰撞檢測
self.__check_collide()
# 4. 更新/繪製精靈組
self.__update_sprites()
# 5. 更新顯示
pygame.display.update()
def __event_handler(self):
#獲取按鍵
keyspressed = pygame.key.get_pressed()
if keyspressed[pygame.K_LEFT]:
self.hero.speed = -2
elif keyspressed[pygame.K_RIGHT]:
self.hero.speed = 2
else:
self.hero.speed = 0
event_list = pygame.event.get()
for event in event_list:
if event.type == ENEMY_EVENT:
#建立一架敵機
enemy = Enemy("./pictures/enemy1.png", random.randint(1, 3))
self.en_group.add(enemy)
elif event.type == pygame.QUIT:
pygame.quit()
elif event.type == FIRE:
#建立子彈
self.hero.fire()
def __check_collide(self):
pygame.sprite.groupcollide(self.hero.bullet_group, self.en_group, True, True)
ret = pygame.sprite.groupcollide(self.en_group, self.hero_group, True, True)
#如果敵機和英雄飛機相撞 遊戲結束
if len(ret):
pygame.quit()
def __update_sprites(self):
self.bg_group.update()
self.bg_group.draw(self.screen)
self.en_group.update()
self.en_group.draw(self.screen)
self.hero_group.update()
self.hero_group.draw(self.screen)
self.hero.bullet_group.update()
self.hero.bullet_group.draw(self.screen)
if __name__ == '__main__':
pygame.init()
game = PlaneGame()
game.start()
pygame.quit()
在test2中
import pygame import random ENEMY_EVENT = pygame.USEREVENT FIRE = pygame.USEREVENT + 1 class GameSprite(pygame.sprite.Sprite): '''描述遊戲中元素的類''' def __init__(self, image_name, speed = 1): super().__init__() self.image = pygame.image.load(image_name) #self.rect: 控制圖片的那個矩形(圖片所在的矩形) self.rect = self.image.get_rect() self.speed = speed def update(self, *args): self.rect.y += self.speed class BackGound(GameSprite): '''背景圖片類''' def __init__(self, image_name, alt=False): super().__init__(image_name) #設定背景圖片的起始位置 如果alt==True,就將這種背景圖片放到螢幕的上方 if alt: self.rect.bottom = 0 #背景圖片如果飛出了螢幕的底部就要挪動到螢幕的頂部 def update(self, *args): super().update() if self.rect.y >= 700: #self.rect.y = -700 self.rect.bottom = 0 class Enemy(GameSprite): def __init__(self, image_name, speed=1): super().__init__(image_name, speed) #敵機出現在螢幕的頂部 self.rect.bottom = 0 #隨機出現在螢幕的水平方向上(x座標是隨機) max = 480-self.rect.width self.rect.x = random.randint(0, max) def update(self, *args): super().update() #判斷敵機是否衝出了螢幕 if self.rect.y >= 700: self.kill() class Bullet(GameSprite): def __init__(self, x, y, image_name, speed=2): super().__init__(image_name, speed) self.rect.centerx = x self.rect.bottom = y def update(self, *args): self.rect.y -= self.speed class Hero(GameSprite): def __init__(self, image_name, speed=0): super().__init__(image_name, speed) self.rect.y = 700-self.rect.height-30 self.rect.x = 240-self.rect.width//2 self.bullet_group = pygame.sprite.Group() def update(self, *args): self.rect.x += self.speed if self.rect.x <= 0: self.rect.x = 0 if self.rect.x >= 480-self.rect.width: self.rect.x = 480-self.rect.width def fire(self): print("發射子彈") for x in range(3): b = Bullet(self.rect.centerx, self.rect.y-x*20, "./pictures/bullet1.png")
self.bullet_group.add(b)
在pictures