嗨喽~大家好呀,这里是魔王呐 ❤ ~!
为了防止/报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,
仿佛炮弹一样去攻击肥猪们的堡垒,保卫自己的鸟蛋
这个游戏大家没玩过的想必也听说过~
今天就给大家分享一下用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 = angleself.magnitude = magnitude
向量相加
def VectorAddition(vector1, vector2):x = math.sin(vector1.angle) * vector1.magnitude + math.sin(vector2.angle) * vector2.magnitudey = math.cos(vector1.angle) * vector1.magnitude + math.cos(vector2.angle) * vector2.magnitudeangle = 0.5 * math.pi - math.atan2(y, x)magnitude = math.hypot(x, y)return VelocityVector(magnitude, angle)
剩下两个文件的代码有点多,我就没全部放出来啦~ 点击此处跳转文末名片获取
就截这么多效果啦~后续关卡可自行探索噢!!
要成功,先发疯,下定决心往前冲!
学习是需要长期坚持的,一步一个脚印地走向未来!
未来的你一定会感谢今天学习的你。
—— 心灵鸡汤
本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝