震惊!一小伙用python这么容易就写了个飞机大战?!【含注释】

周末闲来无事,打算写写代码,但是又不知道写啥,眼睛余光无意中扫到书架上尘封已久的pygame书籍,那干脆写个游戏试一试,要写就写经典游戏吧,毕竟难度也不是很大,开搞。

这种射击游戏相信大多数人玩的很多了,其中要素也是很容易拿捏,所以我先是去网上找了所需要的图片,控制的人物,入侵者,背景图,bgm,用ps修改修改参数,然后就是学习pygame了,简单看了看书,敲了几个例子,不就是用它的库嘛,很简单。因为代码有注释很详细,就不赘述了。

游戏人物所需的基本要素定义

import pygame
import random
import math
from pygame import mixer

# init初始化
pygame.init()
mixer.init()

# 建立画布
screen = pygame.display.set_mode((800, 620))

# 背景
background = pygame.image.load('backgroud.png')
# 设置背景音乐,最好添加绝对路径
show_sound = mixer.Sound('backgroud.wav')
show_sound.play()

# 游戏标题
pygame.display.set_caption("Space Fighting")
# 加载飞船图片
icon = pygame.image.load('transport.png')
# 修改显示窗口的图标
pygame.display.set_icon(icon)

# 玩家操控的人物创建
playerimg = pygame.image.load('transport.png')
# 玩家初始位置
playerx = 370
playery = 540
# x轴改变的距离
playerx_change = 0

# 入侵者的创建
enemyimg = []
enemyx = []
enemyy = []
# 保存入侵者每次位置改变结果
enemyx_change = []
enemyy_change = []
# 入侵者数量
number_of_enemies = 6

# 随机生成入侵者在图上的位置
for i in range(number_of_enemies):
    # 加载入侵者图片
    enemyimg.append(pygame.image.load('enemy.png'))
    # x轴上的坐标
    enemyx.append(random.randint(0, 800))
    # y轴上的坐标
    enemyy.append(random.randint(50, 150))
    # 每次移动改变的距离
    enemyx_change.append(0.5)
    enemyy_change.append(10)

# 子弹创建,加载图片
bulletimg = pygame.image.load('bullet.png')
# 初始距离
bulletx = 0
bullety = 420
# 射出的速度,y轴移动的距离
bulletx_change = 0
bullety_change = 2
# 子弹的状态
bullet_state = "ready"

# 分数记录文字字体
score_value = 0
font = pygame.font.Font('freesansbold.ttf', 32)
# 分数的位置
textx = 10
texty = 10

# 游戏结束文字字体
over_font = pygame.font.Font('freesansbold.ttf', 64)


所需要的几个函数

# 展示分数
def show_score(x, y):
    score = font.render("score :" + str(score_value), True, (255, 255, 255))
    # blit,分数粘贴在背景中
    screen.blit(score, (x, y))


# 游戏结束时GAME OVER
def game_over_text():
    over_txt = over_font.render("GAME OVER", True, (255, 255, 255))  # 文字和颜色
    # blit,将over_txt图片粘在背景图上
    screen.blit(over_txt, (200, 250))  # 展示位置


# 玩家的坐标位置
def player(x, y):
    screen.blit(playerimg, (x, y))


# 入侵者的坐标位置
def enemy(x, y, i):
    screen.blit(enemyimg[i], (x, y))


# 子弹轨迹
def fire_bullet(x, y):
    global bullet_state
    bullet_state = "fire"
    screen.blit(bulletimg, (x + 40, y + 10))


# 子弹轨迹与入侵者的判断
def iscollision(enemyx, enemyy, bulletx, bullety):
    # 判断计算方法
    distance = math.sqrt((math.pow(enemyx - bulletx, 2)) + (math.pow(enemyy - bullety, 2)))
    # 返回的结果
    if distance < 27:
        return True
    else:
        return False

效果:
图片还是比较的草率,有兴趣的小伙伴可以自己改哈,图片和BGM都可以加我qq要,qq:2024810652
在这里插入图片描述
代码还是很简单,要完整代码可以加我qq:2024810652。如果觉得好玩有趣,就给个赞吧
🤞🤞🤞🤞🤞🤞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈鸣coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值