【python游戏】新的一年快来变身兔兔战士打败獾守护兔兔吧~

news/2024/11/17 4:27:30/

前言

大家早好、午好、晚好吖 ❤ ~

一只快乐兔, 来到快乐山,喝了快乐泉,

又到快乐殿,吃了快乐莲,遇到快乐仙,

听了快乐言:快乐很简单,快乐在身边,快乐无极限,快乐在兔年!

新的一天当然是从游戏开始啦!

现在带大家做一款兔子游戏/Rabbit Rush ——

小兔子保卫,赶走獾(敌人)。

准备素材

(一)背景图片素材

(二)来点儿MUSIC:

代码展示

‘’‘配置文件’‘’

模块导入

import os

FPS

FPS = 100

屏幕大小

SCREENSIZE = (640, 480)

游戏图片路径

IMAGE_PATHS = {'rabbit': os.path.join(os.getcwd(), 'resources/images/dude.png'),'grass': os.path.join(os.getcwd(), 'resources/images/grass.png'),'castle': os.path.join(os.getcwd(), 'resources/images/castle.png'),'arrow': os.path.join(os.getcwd(), 'resources/images/bullet.png'),'badguy': os.path.join(os.getcwd(), 'resources/images/badguy.png'),'healthbar': os.path.join(os.getcwd(), 'resources/images/healthbar.png'),'health': os.path.join(os.getcwd(), 'resources/images/health.png'),'gameover': os.path.join(os.getcwd(), 'resources/images/gameover.png'),'youwin': os.path.join(os.getcwd(), 'resources/images/youwin.png')
}

游戏声音路径

SOUNDS_PATHS = {'hit': os.path.join(os.getcwd(), 'resources/audio/explode.wav'),'enemy': os.path.join(os.getcwd(), 'resources/audio/enemy.wav'),'shoot': os.path.join(os.getcwd(), 'resources/audio/shoot.wav'),'moonlight': os.path.join(os.getcwd(), 'resources/audio/moonlight.wav')
}

‘’‘初始化’‘’

from .interfaces import showEndGameInterface
from .Sprites import BadguySprite, ArrowSprite, BunnySprite

‘’’
Function:
定义游戏开始结束等界面
‘’’
模块导入

import sys
import pygame

‘’‘游戏结束界面’‘’

def showEndGameInterface(screen, exitcode, accuracy, game_images):font = pygame.font.Font(None, 24)text = font.render(f"Accuracy: {accuracy}%", True, (255, 0, 0))text_rect = text.get_rect()text_rect.centerx = screen.get_rect().centerxtext_rect.centery = screen.get_rect().centery + 24while True:screen.fill(0)for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if exitcode:screen.blit(game_images['youwin'], (0, 0))else:screen.blit(game_images['gameover'], (0, 0))screen.blit(text, text_rect)pygame.display.flip()

‘’’
Function:
定义游戏精灵类
‘’’

‘’‘模块导入’‘’

import math
import pygame

‘’‘定义兔子类’‘’

class BunnySprite(pygame.sprite.Sprite):def __init__(self, image, position, **kwargs):pygame.sprite.Sprite.__init__(self)self.image = imageself.rect = self.image.get_rect()self.rect.left, self.rect.top = positionself.speed = 5self.rotated_position = position'''移动兔子'''def move(self, screensize, direction):if direction == 'left':self.rect.left = max(self.rect.left-self.speed, 0)elif direction == 'right':self.rect.left = min(self.rect.left+self.speed, screensize[0])elif direction == 'up':self.rect.top = max(self.rect.top-self.speed, 0)elif direction == 'down':self.rect.top = min(self.rect.top+self.speed, screensize[1])'''画到屏幕上'''def draw(self, screen, mouse_pos):angle = math.atan2(mouse_pos[1]-(self.rect.top+32), mouse_pos[0]-(self.rect.left+26))image_rotate = pygame.transform.rotate(self.image, 360-angle*57.29)bunny_pos = (self.rect.left-image_rotate.get_rect().width/2, self.rect.top-image_rotate.get_rect().height/2)self.rotated_position = bunny_posscreen.blit(image_rotate, bunny_pos)

‘’‘定义弓箭类’‘’

class ArrowSprite(pygame.sprite.Sprite):def __init__(self, image, position, **kwargs):pygame.sprite.Sprite.__init__(self)self.angle = position[0]self.image = pygame.transform.rotate(image, 360-position[0]*57.29)self.rect = self.image.get_rect()self.mask = pygame.mask.from_surface(self.image)self.rect.left, self.rect.top = position[1:]self.speed = 10'''更新弓箭'''def update(self, screensize):velx = math.cos(self.angle) * self.speedvely = math.sin(self.angle) * self.speedself.rect.left += velxself.rect.top += velyif self.rect.right < 0 or self.rect.left > screensize[0] or self.rect.top > screensize[1] or self.rect.bottom < 0:return Truereturn False

‘’‘定义獾类’‘’

class BadguySprite(pygame.sprite.Sprite):def __init__(self, image, position, **kwargs):pygame.sprite.Sprite.__init__(self)self.image = imageself.rect = self.image.get_rect()self.mask = pygame.mask.from_surface(self.image)self.rect.left, self.rect.top = positionself.speed = 7'''更新獾'''def update(self):self.rect.left -= self.speedif self.rect.left < 64:return Truereturn False

效果展示

控制鼠标可移动射击方向

连点鼠标键可射出弓箭,按“A” “W” “D” “S” 键可控制兔子移动位置

血条无,游戏结束

小惊喜:

兔年快乐烟花:http://gujiukeji.com/love/2023/

跨年烟花:https://corestudi0.github.io/newyear/#pt_1672488003277

尾语 💝

好了,今天的分享就差不多到这里了!

完整代码、更多资源、疑惑解答直接点击下方名片自取即可。

宁外给大家推荐一个好的教程:

【48小时搞定全套教程!你和大佬只有一步之遥【python教程】

有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!


http://www.ppmy.cn/news/8442.html

相关文章

迎接2023,用JAVA演奏“新年”

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;2023年快要到来啦&#xff0c;再此祝大家诸事顺遂&#xff0c;所见所盼皆如愿。 &#x1f514;本文讲解如何使用Java演奏一首歌曲&#xff0c;一起卷起来叭&#xff01; 众所周…

CSS 奇技淫巧Box-shadow实现圆环进度条

CSS 奇技淫巧Box-shadow实现圆环进度条 文章目录CSS 奇技淫巧Box-shadow实现圆环进度条一、Box-shadow圆环进度条二、效果预览三、原理刨析四、实际应用五、总结六、参考资料&#x1f498;七、推荐博文&#x1f357;一、Box-shadow圆环进度条 实现圆环进度条的方法用很多种&am…

【Mongoose笔记】Websocket 服务器

【Mongoose笔记】Websocket 服务器 简介 Mongoose 笔记系列用于记录学习 Mongoose 的一些内容。 Mongoose 是一个 C/C 的网络库。它为 TCP、UDP、HTTP、WebSocket、MQTT 实现了事件驱动的、非阻塞的 API。 项目地址&#xff1a; https://github.com/cesanta/mongoose学习 …

shell第五天作业——函数与数组

题目 一、编写函数&#xff0c;实现打印绿色OK和红色FAILED 二、编写函数&#xff0c;实现判断是否有位置参数&#xff0c;如无参数&#xff0c;提示错误 三、编写函数实现两个数字做为参数&#xff0c;返回最大值 四、编写函数&#xff0c;实现两个整数为参数&#xff0c;…

windows11 wsl kali子系统 adb调试

环境准备 在Windows中 安装usbipd 参考资料&#xff1a;https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb 方法一&#xff1a; 在powershell中执行winget install --interactive --exact dorssel.usbipd-win 方法二&#xff1a;去https://github.com/dorssel/usbi…

从umati 看德国人如何玩OPCUA的

到目前为止&#xff0c;机器的联网标准缺乏统一的协议和语义标准。比较知名的要数每个的MTConnect。fanuc机床的focas协议。未来的发展方向是OPCUA协议。但是实现这个目标并非一日之功。德国的umati 社区也许给我们一些启发。 为了推进机床行业的数字化进程&#xff0c;VDW&…

Good Bye 2022: 2023 is NEAR

A.B略 C.鸽巢原理中国剩余定理 首先,显然所有数必须两两相同,不然加上任何整数必定会产生gcd > 2的组合 然后我们手玩可以发现奇偶性,我们至少不能使得有两个数同时是偶数,如果出现两个偶数,两个奇数,例如2 4 5 7,那么无论x选择什么,都至少会出现两个偶数,进一步地,我们发…

Linux多进程编程之exec函数族使用

Linux多进程编程之exec函数族使用1.exec函数族是什么2.execl函数具体使用3.execlp4.exec后面不同字母所代表的含义1.exec函数族是什么 顾名思义&#xff0c;它并不只是一个函数&#xff0c;而是以exec开头的六个函数&#xff0c;并且是没有exec这个函数的&#xff08;就像TCP/…