pygame简单游戏 飞机大战

这个博客介绍了如何使用pygame库来创建一个简单的飞机大战游戏。游戏包括火箭、敌机、子弹、背景和得分系统。玩家可以左右移动火箭并发射子弹击打敌机,敌机会随机出现并向下移动。当火箭或子弹与敌机碰撞时,敌机消失,玩家得分。游戏界面清晰,操作流畅。

import pygame

import random

import math

from pygame.constants import TIMER_RESOLUTION


 

pygame.init()

score_value = 0

font = pygame.font.Font('freesansbold.ttf', 32)

textX = 10

textY = 10


 

def show_score(x, y):

    score = font.render("Score :" + str(score_value), True, (255, 255, 255))

    screen.blit(score, (x, y))


 

# 屏幕和图片引入

screen = pygame.display.set_mode((1000, 700))

icon = pygame.image.load("master2.jpg")

rocket = pygame.image.load("ship.png")

bulletImg = pygame.image.load("bullet.png")

background = pygame.image.load("background.jpg")

pygame.display.set_icon(icon)

pygame.display.set_caption("油管版外星人大战")


 

# 火箭参数

rocketX = 460

rocketY = 550

player_changex = 0

player_changey = 0

# 敌人参数

enemy_image = []

enemyX = []

enemyY = []

enemy_changex = []

enemy_changey = []

num_of_enemys = 5

for i in range(num_of_enemys):

    enemy_image.append(pygame.image.load("ufo2.png"))

    enemyX.append(random.randint(0, 1000))

    enemyY.append(random.randint(0, 300))

    enemy_changex.append(0.3)

    enemy_changey.append(30)

# 子弹参数

bulletx = 0

bullety = rocketY

bullet_changex = 0

bullet_changey = 1

bullet_state = "ready"

# 火箭函数


 

def rocket_player(x, y):

    screen.blit(rocket, (x, y))

# 敌人函数


 

def enemy_set(x, y, i):

    screen.blit(enemy_image[i], (x, y))

# 子弹函数


 

def fire_bullet(x, y):

    global bullet_state

    bullet_state = "fire"

    screen.blit(bulletImg, (x+50, y))

# 碰撞函数


 

def boom(enemyX, enemyY, bulletx, bullety):

    distance = math.sqrt((math.pow(enemyX-bulletx, 2)) +

                         (math.pow(enemyY-bullety, 2)))

    if distance <= 50:

        return True

    else:

        return False


 

# 主循环

message = True

while message:

    screen.fill((0, 0, 0))

    screen.blit(background, (0, 0))

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            message = False

        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_LEFT:

                player_changex += -1

            if event.key == pygame.K_RIGHT:

                player_changex += 1

            if event.key == pygame.K_SPACE:

                if bullet_state is "ready":

                    bulletx = rocketX

                    fire_bullet(bulletx, bullety)

        if event.type == pygame.KEYUP:

            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:

                player_changex = 0

    rocketX += player_changex

    rocketY += player_changey

    if rocketX <= 0:

        rocketX = 0

    elif rocketX >= 850:

        rocketX = 850

    elif rocketY <= 0:

        rocketY = 0

    elif rocketY >= 550:

        rocketY = 550

    for i in range(num_of_enemys):

        enemyX[i] += enemy_changex[i]

        if enemyX[i] <= 0:

            enemyX[i] = 0.3

            enemy_changex[i] = +0.5

            enemyY[i] += enemy_changey[i]

        work = boom(enemyX[i], enemyY[i], bulletx, bullety)

        if work:

            bullety = rocketY

            bullet_state = "ready"

            score_value += 1

            enemyX[i] = random.randint(0, 1000)

            enemyY[i] = random.randint(0, 300)

        enemy_set(enemyX[i], enemyY[i], i)

        if enemyX[i] >= 850:

            enemyX[i] = 850

            enemy_changex[i] = -0.5

            enemyY[i] += enemy_changey[i]

    if bullety <= 0:

        bullety = rocketY

        bullet_state = "ready"

    elif bullet_state is "fire":

        fire_bullet(bulletx, bullety)

        bullety -= bullet_changey

    rocket_player(rocketX, rocketY)

    show_score(textX, textY)

    pygame.display.update()


 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值