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

news2024/9/27 14:35:55

前言

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

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

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

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

今天就给大家分享一下用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)

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

效果展示






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

尾语 💝

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

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

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

—— 心灵鸡汤

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年3月份的野兔在线工具系统版本更新

这个是野兔在线工具系统中文版更新,这次更新的功能,和修改的问题还是比较多的,也修复系统部分功能,应该也是目前市面上在线工具比较多的一个系统了。系统名称:野兔在线工具系统系统语言:中文版系统源码&…

做自动化测试选择Python还是Java?

今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言 前言 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的趋势。特别是…

【C语言】每日刷题 —— 牛客(2)

前言 大家好,继续更新专栏c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解。 🏡个人主页:悲伤的猪大肠9的博客…

Hibernate学习(一)

Hibernate学习(一) Hibernate框架的概述: 一:什么是框架:指软件的半成品,已经完成了部分功能。 二:EE的三层架构: 1.EE的三层经典架构: 我在这里主要学的是ssh框架。 三…

Rcpp cannot convert ‘SEXP‘ {aka ‘SEXPREC*‘} to ‘###‘ in return

Rcpp cannot convert SEXP {aka SEXPREC*} to *** in return引言代码说明报错代码两种修改方法代码1代码2引言 Rcpp在使用的过程中可以访问R本地的一些函数,可以帮助我们更高效的进行计算. Rcpp::Environment global Rcpp::Environment::global_env(); 可以在Rcpp…

【CSS】CSS 背景设置 ① ( 背景颜色 | 背景图片 | 背景平铺 )

文章目录一、背景颜色1、语法说明2、代码示例二、背景图片1、语法说明2、代码示例三、背景平铺一、背景颜色 1、语法说明 CSS 的背景颜色样式语法 : 默认的背景颜色是 transparent 透明 ; background-color:颜色值;background-color 属性 可以 定义 文本颜色 , 其颜色值有三种…

MySQL DDL表操作【入门到精通】

目录 一、查询创建 1、查询当前数据库所有表 2、查看指定表结构 3、查询指定表的建表语句 4、创建表结构 二、数据类型 1、数值类型 2、字符串类型 3、日期时间类型 三、表操作-案例 设计一张员工信息表,要求如下: 对应的建表语句如下&#…

解忧杂货铺(二):UML时序图

目录 1、概述 2、UML时序图 2.1、什么是时序图 2.2、时序图的元素 2.2.1 角色(Actor) 2.2.2 对象(Object) 2.2.3 生命线(LifeLine) 2.2.4 控制焦点(Activation) 2.2.5 消息(Message) 2.2.6 自关联消息 2.2.7 组合片段 1、概述 在看AUTOSAR规范的时候发现时序图里面的…

enscape和twinmotion哪个好用?

Twinmotion 和 Enscape这2款渲染软件最近受到了一些初学者的关注。这 2 个软件适用于那些需要 3D 渲染但质量不是他们项目的首要任务的人。在本文中,我们将对Twinmotion 和 Enscape 进行面对面的比较,并帮助您确定哪一个更适合您。什么是 Twinmotion&…

关于算法的一些简单了解

文章目录ALGORITHMBASIC INFORMATIONBasic algorithm design technology穷举法分治法减治法动态规划法贪心法Algorithm design technology based on search回溯法分支限界法PRACTICECONCEPTCALATION*CODEprim&dijkstra&kruskal分治法Q&AT(n)T(n)T(n) 是渐进时间复杂…

Go Signal信号

目录信号信号的种类分类信号种类Go Signalhandlershandler信号的存储信号持有状态的获取信号持有状态的清空NotifyStopIgnore & ResetNotifyContext如何优雅的关闭web app优雅地重启信号 信号(Signal)是Linux, 类Unix和其它POSIX兼容的操作系统中用来进程间通讯的一种方式…

hibernate学习(二)

hibernate学习(二) 一、hibernate常见配置: 1.XML提示问题配置: 二、hibernate映射的配置: (1)class标签的配置: 标签用来建立类与表之间的映射关系属性: 1.name&…

Clickhouse中bitmap介绍以及计算留存Demo

前言 参考了腾迅的大数据分析-计算留存,能够根据用户自定义属性,以及玩家行为进行留存的计算。最初计算留存的方法使用的是clickhosue自带的rentention函数,使用这个函数不用关注太多细节,只需要把留存条件放入函数即可。但是这个如果需要关联用户属性,就比较麻烦了。因此…

如何应对危害机房安全的这几个常见要素?

随着现代化进程的推进,各行业对计算机的依赖性日益增高,计算机系统已经成为业务系统的重要组成部分。 在这种情况下,一旦机房设备出现故障,就会影响机房的正常运行,造成严重后果。尤其是银行、证券、海关等需要实时数据…

前端学习第三阶段-第1、2章 JavaScript 基础语法

01第一章 JavaScript网页编程课前导学 1-1 JavaScript网页编程课前导学 02第二章 JavaScript 基础语法 2-1 计算机基础和Javascript介绍 01-计算机基础导读 02-编程语言 03-计算机基础 04-JavaScript初识导读 05-初始JavaScript 06-浏览器执行JS过程 07-JS三部分组成 08-JS三种…

【微信小程序】-- 页面处理总结(三十一)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

SSL/TLS协议工作原理

SSL/TLS协议工作原理 SLL/TLS协议工作在应用层和传输层之间,应用层数据需要经过SSL/TLS层的加密之后才会发送到传输层。SSL/TLS协议有两个重要协议:握手协议、记录协议。 1. 握手协议 TCP三次握手完成后,才能进行SSL/TLS的握手。 因为&#…

SNAP中根据入射角和干涉图使用波段计算器计算垂直形变--以门源地震为例

SNAP中根据入射角和相干图使用波段计算器计算垂直形变--以门源地震为例0 写在前面1 具体步骤1.1 准备数据1.2 在SNAP中打开波段运算Band Maths1.3 之前计算的水平位移displacement如下图数据的其他处理请参考博文在SNAP中用sentinel-1数据做InSAR测量,以门源地震为例…

【JavaEE初阶】第四节.文件操作 和 IO (下篇)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言三、文件内容的操作 3.1 读文件 3.1.1 使用字节流读文件 3.2 写文件 3.2.1 使用字节流写文件 …

信捷 XDH Ethercat A_VELMOVE

本文描述信捷 EthercatA_VELMOVE指令,以设定的速度持续运行 上图中,在M100的上升沿,执行A_VELMOVE指令。A_VELMOVE HD100 D100 M101 K0HD100输入参数起始地址 ,HD118输入参数末尾地址HD100~HD103,双精度浮点数(64位&am…