1. 程式人生 > 其它 >python飛機大戰小遊戲

python飛機大戰小遊戲

在這個遊戲中需要安裝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