【python游戏制作】快来跟愤怒的小鸟一起攻击肥猪们的堡垒吧

前言

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

为了防止/报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,

仿佛炮弹一样去攻击肥猪们的堡垒,保卫自己的鸟蛋

这个游戏大家没玩过的想必也听说过~

今天就给大家分享一下用python写的愤怒的小鸟游戏吧(简单版)!

完整源码、python资料: 点击此处跳转文末名片获取

前期准备

在开始之前,我们要准备好游戏的相关素材~

没有(不想找)的小伙伴可以点击此处跳转文末名片获取

开发环境:

  • python 3.8 运行代码

  • pycharm 2022.3 辅助敲代码

音乐素材:

字体素材:

图片素材:

代码展示

本次程序一共有五个代码文件:

代码太多,我就不全部放出来啦~只展示部分,可+上方图片群 免费领

配置文件

导入模块

import os

图片路径

IMAGEPATHS = {
    'pig': [
        os.path.join(os.getcwd(), 'resources/images/pig_1.png'),
        os.path.join(os.getcwd(), 'resources/images/pig_2.png'),
        os.path.join(os.getcwd(), 'resources/images/pig_damaged.png'),
    ],
    源码、解答、教程可加Q裙:261823976免费领取
    'bird': [
        os.path.join(os.getcwd(), 'resources/images/bird.png'),
    ],
    'wall': [
        os.path.join(os.getcwd(), 'resources/images/wall_horizontal.png'),
        os.path.join(os.getcwd(), 'resources/images/wall_vertical.png'),
    ],
    'block': [
        os.path.join(os.getcwd(), 'resources/images/block.png'),
        os.path.join(os.getcwd(), 'resources/images/block_destroyed.png'),
    ]
}

字体路径

FONTPATH = {
    'Comic_Kings': os.path.join(os.getcwd(), 'resources/fonts/Comic_Kings.ttf'),
    'arfmoochikncheez': os.path.join(os.getcwd(), 'resources/fonts/arfmoochikncheez.ttf'),
}

背景音乐路径

BGMPATH = os.path.join(os.getcwd(), 'resources/audios/bgm.ogg')

屏幕大小

SCREENSIZE = (1800, 700)

fps

FPS = 60

一些颜色定义

BACKGROUND_COLOR = (51, 51, 51)
主运行文件

导入模块

import sys
import cfg
import pygame
from modules import *

初始化

def main(cfg):
    pygame.init()
    pygame.mixer.init()
    pygame.mixer.music.load(cfg.BGMPATH)
    pygame.mixer.music.play(-1, 0.0)
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('愤怒的小鸟 问题解答学习交流群:261823976 ')

开始游戏

    def startgame():
        game_levels = GameLevels(cfg, screen)
        game_levels.start()

退出游戏

    def quitgame():
        pygame.quit()
        sys.exit()

开始界面

    components = pygame.sprite.Group()
    title_label = Label(screen, 700, 100, 400, 200)
    title_label.addtext('ANGRY BIRDS', 80, cfg.FONTPATH['arfmoochikncheez'], (236, 240, 241))
    components.add(title_label)
    start_btn = Button(screen, 500, 400, 300, 100, startgame, (244, 208, 63), (247, 220, 111))
    start_btn.addtext('START GAME', 60, cfg.FONTPATH['arfmoochikncheez'], cfg.BACKGROUND_COLOR)
    components.add(start_btn)
    quit_btn = Button(screen, 1000, 400, 300, 100, quitgame, (241, 148, 138), (245, 183, 177))
    quit_btn.addtext('QUIT', 60, cfg.FONTPATH['arfmoochikncheez'], cfg.BACKGROUND_COLOR)
    components.add(quit_btn)
    charles_label = Label(screen, cfg.SCREENSIZE[0] - 300, cfg.SCREENSIZE[1] - 80, 300, 100)
    charles_label.addtext('CHARLES', 60, cfg.FONTPATH['arfmoochikncheez'], (41, 41, 41))
    components.add(charles_label)
    clock = pygame.time.Clock()
    源码、解答、教程可加Q裙:261823976免费领取
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                quitgame()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_q:
                    quitgame()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                if start_btn.selected():
                    start_btn.action()
                elif quit_btn.selected():
                    quit_btn.action()
        screen.fill(cfg.BACKGROUND_COLOR)
        for component in components: component.draw()
        pygame.display.update()
        clock.tick(cfg.FPS)

run

if __name__ == '__main__':
    main(cfg)
其他设置文件

导入模块

import math

定义速度向量

class VelocityVector():
    def __init__(self, magnitude=0, angle=math.radians(0)):
        self.angle = angle
        self.magnitude = magnitude

向量相加

def VectorAddition(vector1, vector2):
    x = math.sin(vector1.angle) * vector1.magnitude + math.sin(vector2.angle) * vector2.magnitude
    y = math.cos(vector1.angle) * vector1.magnitude + math.cos(vector2.angle) * vector2.magnitude
    angle = 0.5 * math.pi - math.atan2(y, x)
    magnitude = math.hypot(x, y)
    return VelocityVector(magnitude, angle)

剩下两个文件的代码有点多,我就没全部放出来啦~ 点击此处跳转文末名片获取

效果展示






就截这么多效果啦~后续关卡可自行探索噢!!

尾语 💝

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

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

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

—— 心灵鸡汤

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值