【python游戏】让我们一起制作地球联邦阵营的战机,保护希望水晶,为人类的希望而战。

文章介绍了一个基于Pygame的游戏开发项目,背景设定为人类因水晶能源引发的冲突,分为地球联邦和行星同盟两大阵营。开发者分享了游戏中的模块准备、素材和代码,包括飞机、子弹和敌机的创建与移动,以及射击和碰撞检测等关键功能。

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

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

随着人类太空科技的飞速发展,希望水晶被越来越多的科学家当做核心能源来开发使用。

人类社会也因为水晶资源的争夺,开始逐渐分化成两派。

留在地球的普通人成立地球联邦,移居卫星的新人类建立行星同盟,两股势力开始各自发展自己的军备,纷争之势就此展开。

跨越十二星座,一场争夺水晶的战争打响,肆意的战火点燃了静谧的星海。

让我们一起制作地球联邦阵营的战机,保护希望水晶,为人类的希望而战。

【想一键获取素材和源码的,点击文章末尾名片】

模块准备

import pygame, os
import time
import random

素材准备

需要 源码 . 素材 . 点击领取即可

代码展示

因为代码有点多,这里就贴出一小部分代码,完整代码可点击上面或文末名片领取

前期准备

设置开火音乐

 effect = pygame.mixer.Sound('sounds/fire.wav')
 pygame.mixer.Sound.play(effect)

加载BOSS图片

  self.image = pygame.image.load('图片/'+boss_img_name+'.png').convert_alpha()

转换BOSS大小

self.image = pygame.transform.scale(self.image, (1, 12))

生成BOSS矩形框架

self.rect = self.image.get_rect()
self.blood = 1000

boss左右移动的速度

self.speed = 3.5

设置继承精灵

必须设置继承精灵 不然在使用精灵函数时会报错

super().__init__()

获取屏幕对象

self.screen = screen

随机 生成5个编号

alien_num = random.randint(1,5)

随机 加载五个飞机中的某个

self.image = pygame.image.load('图片/alien_' + str(alien_num) + '.png')
# picture = pygame.transform.scale(picture, (1280, 720))
self.image = pygame.transform.scale(self.image,(62,62))

获取飞机的 rect

self.rect = self.image.get_rect()

击落本机获得的分数

  self.score = 10

子弹部分

加载子弹的图片

self.bullet_img = pygame.image.load("图片/alien_bullet.png").convert_alpha()
self.bullet_img = pygame.transform.scale(self.bullet_img, (12, 12))

调节子弹尺寸的代码

picture = pygame.transform.scale(picture, (1280, 720))

生成子弹精灵组合

self.bullets = Group()

敌机射击频率

self.shoot_frequency = 0

飞机出现

def move(self):
    self.rect.top += 5

暂时不用射击

 self.shoot()
 self.moveBullet()

发射子弹

def shoot(self):
    if self.shoot_frequency % 200 == 0:
        bullet = Enemy_Bullet(self.bullet_img, self.rect.midbottom)
        self.bullets.add(bullet)
    self.shoot_frequency += 1
    if self.shoot_frequency > 200:
        self.shoot_frequency = 1

删除子弹

def moveBullet(self):
    for bullet in self.bullets:
        bullet.move()
        if bullet.rect.bottom < 0:
            self.bullets.remove(bullet)

绘制子弹

def drawBullets(self, scr):
    self.bullets.draw(scr)

敌机子弹初始位置设置

self.rect.midbottom = init_pos
self.rect.centery +=36
self.speed = 8

飞机图片

获取屏幕对象

self.screen = screen

获取整张图片

self.image_big = pygame.image.load('图片/hero.png').convert_alpha()
# subsurface 形成大图的子表面框架

获取飞机正面图片

self.image = self.image_big.subsurface(pygame.Rect(120, 0, 318 - 240, 87))

获取飞机正面矩形框架尺寸

self.rect = self.image.get_rect()

获取屏幕对象矩形

self.screen_rect = screen.get_rect()

获取屏幕正中x坐标

self.rect.centerx = self.screen_rect.centerx

获取屏幕底部y坐标

self.rect.centery = self.screen_rect.bottom - self.rect.height

设置飞机初始位置

self.centerX = float(self.rect.centerx)
self.centerY = float(self.rect.centery)

飞机尾焰

self.air = None

设置飞机尾焰位置

self.air_rect = pygame.Rect(self.centerX - 20,self.centerY+int((self.rect.height+72)/2)-10-36,40,72)

玩家所有发射子弹的集合

self.bullets = Group()
self.bullet_image = pygame.image.load('图片/bullet_1.png').convert_alpha()

子弹射击

def shoot(self):

产生一颗子弹实例

bullet = Bullet(self.bullet_image,self.rect.midtop)

在group子弹精灵集合中加入子弹

self.bullets.add(bullet)

子弹删除

def moveBullet(self):

逐个检查子弹精灵集合 到达屏幕顶端的子弹删除

for bullet in self.bullets:
    bullet.move()
    if bullet.rect.bottom < 0:
        self.bullets.remove(bullet)

子弹显示

def drawBullets(self, scr):

将精灵集合中的子弹绘制到屏幕上

self.bullets.draw(scr)

向上飞时,增加喷射火焰

def set_air(self, case):
    if case == 'up':
        air = pygame.image.load('图片/air.png').convert_alpha()
        img = air.subsurface(pygame.Rect(80, 0, 50, 87))
        self.air = img
    elif case == 'remove':
        self.air = None

根据移动方向获取飞机移动状态的图片

    def set_image(self, case):
        if case=='left':
            rect = pygame.Rect(195,0,318-248,87)
            image = self.image_big.subsurface(rect)
        elif case =='right':
            rect = pygame.Rect(195,0,318-248,87)
            image = pygame.transform.flip(self.image_big.subsurface(rect), True, False)
        elif case == 'up' or case == 'down':
            rect = pygame.Rect(120, 0, 318 - 240, 87)
            image = self.image_big.subsurface(rect)
        self.image = image

class Bullet(pygame.sprite.Sprite):
    def __init__(self, bullet_img, init_pos):
        pygame.sprite.Sprite.__init__(self)
        self.image = bullet_img
        self.rect = bullet_img.get_rect()
        self.rect.midbottom = init_pos
        self.speed = 25

    def move(self):
        self.rect.top -= self.speed

初始化pygame

pygame.init()
# pygame.mixer.init()
# pygame.mixer_music.load('sounds/enviro.mp3') # 加载播放音乐
# pygame.mixer.music.play(-1) #-1 为循环播放

设置游戏主题

pygame.display.set_caption('雷电飞机')

初始化屏幕大小

screen = pygame.display.set_mode((512,768))

大概效果就是这样

尾语 💝

要成功,先发疯,下定决心往前冲!

学习是需要长期坚持的,一步一个脚印地走向未来!

未来的你一定会感谢今天学习的你。

—— 心灵鸡汤

本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝

👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值