Python游戏1——打飞机

本文介绍了一个使用Python库pygame制作的基本射击游戏,包括飞机控制、敌机生成、子弹发射以及得分系统。玩家通过左右移动和空格键射击,目标是击败随机出现的敌人直到达到70分胜利。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个游戏的效果是可以射出子弹打飞机并能加分数,分数加到70的时候就结束游戏(赢了)。

Python源代码如下:
 

import pygame
import random
import math
pygame.init()
# 1.初始化界面
screen = pygame.display.set_mode((597,648))
pygame.display.set_caption('我打敌机')
icon = pygame.image.load('img_1.png')
pygame.display.set_icon(icon)
xing_image = pygame.image.load('星空.png')
pygame.mixer.music.load('beijing.mp3')
pygame.mixer.music.play(-1)
# 我的可爱音效
bao_sound = pygame.mixer.Sound('ff.wav')
# 3.飞机
player_image = pygame.image.load('玩家.png')
player_image = pygame.transform.scale(player_image,(55,86))
player_x = 300
player_y = 500
player_step = 0
score = 0
font = pygame.font.Font('freesansbold.ttf',32)
#font = pygame.font.SysFont('simsunnsimsun',32)
def show_score():
    text = f"Score:{score}"
    score_render = font.render(text,True,(0,255,0))
    screen.blit(score_render,(200,250))
is_over = False
over_font = pygame.font.Font('freesansbold.ttf',64)
def check_is_over():
    if is_over:
        text = "yes yes yes!"
        render = font.render(text,True,(255,0,0))
        screen.blit(render,(200,200))
# 4.添加敌人
number_of_enemies = 10
class Enemy():
    def __init__(self):
        self.image = pygame.image.load('敌人.png')
        self.image = pygame.transform.scale(self.image,(55,86))
        self.x = random.randint(200,600)
        self.y = random.randint(50,200)
        self.step = random.randint(1,2)
    def reset(self):
        self.x = random.randint(50,300)
        self.y = random.randint(10,150)
enemies = []
for i in range(number_of_enemies):
    enemies.append(Enemy())
def distance(bx,by,ex,ey):
    a = bx - ex
    b = by - ey
    return math.sqrt(a * a + b * b)  # 开根号
class Bullet():
    def __init__(self):
        self.image = pygame.image.load('子弹.png')
        self.image = pygame.transform.scale(self.image,(20,20))
        self.x = player_x + 16
        self.y = player_y + 10
        self.step = 8
    def hit(self):
        for e in enemies:
            global score
            if (distance(self.x,self.y,e.x,e.y) < 30):
                bao_sound.play()
                try:
                    bullet.remove(self)
                except:
                    print("dd")
                e.reset()
                score += 1
                print(score)
bullet = []
def show_bullet():
    for b in bullet:
        screen.blit(b.image,(b.x,b.y))
        b.hit()
        b.y -= b.step
        if b.y < 0:
            bullet.remove(b)
def show_enemy():
    global enemy_x,enemy_step,enemy_y,enemy_image,is_over
    for e in enemies:
        screen.blit(e.image,(e.x,e.y))
        e.x += e.step
        if (e.x > 450 or e.x < 0):
            e.step *= -1
            e.y += 140
            if e.y > 900000:
                is_over = True
                enemies.clear()
            if score == 70:
                is_over = True
                enemies.clear()
def move_player_image():
    global player_x
    player_x += player_step
    if player_x > 450:
        player_x = 450
    if player_x < 0:
        player_x = 0
def process_events():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                player_step = 5
            elif event.key == pygame.K_LEFT:
                player_step = -5
        if event.type == pygame.KEYUP:
            player_step = 0
run = True
# 2.游戏主循环
while run:
    screen.blit(xing_image,(0,0))
    show_score()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                player_step = 5
            elif event.key == pygame.K_LEFT:
                player_step = -5
            elif event.key == pygame.K_SPACE:
                bullet.append(Bullet())
        if event.type == pygame.KEYUP:
            player_step = 0
    screen.blit(player_image,(player_x,player_y))
    move_player_image()  # 移动玩家
    show_enemy()
    show_bullet()
    check_is_over()
    pygame.display.update()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值