Python跳跳兔小游戏源代码,兔年必玩小游戏,兔年大吉

Python跳跳兔小游戏源代码,兔年必玩小游戏,兔年大吉,小兔子跳跳,按空格键向上跳跃,按键盘方向键进行左右移动,以避开飞弹,以防被炸,还可以捡到火箭道具哦。
在这里插入图片描述
完整程序下载地址:Python跳跳兔小游戏源代码

main.py

import pygame as pg
import random
import os
from settings import *
from sprites import *class Game:def __init__(self):pg.init()pg.mixer.init()self.screen = pg.display.set_mode((WIDTH, HEIGHT))pg.display.set_caption(TITLE)self.clock = pg.time.Clock()self.running = True# 设置绘制时使用的字体self.font_name = pg.font.match_font(FONT_NAME)self.load_data()def load_data(self): # 加载数据self.dir = os.path.dirname(__file__)filepath = os.path.join(self.dir, HS_FILE)with open(filepath, 'r') as f:try:self.highscore = int(f.read())except:self.highscore = 0img_dir = os.path.join(self.dir, 'img')# 加载精灵图片self.spritesheet = Spritesheet(os.path.join(img_dir, SPRITESHEET))# 加载云彩图片self.cloud_images = []for i in range(1, 4):self.cloud_images.append(pg.image.load(os.path.join(img_dir, 'cloud{}.png'.format(i))).convert())# 加载音乐self.snd_dir = os.path.join(self.dir, 'snd')# 跳跃时音效self.jump_sound = pg.mixer.Sound(os.path.join(self.snd_dir, 'Jump33.wav'))# 使用道具时音效self.boost_sound = pg.mixer.Sound(os.path.join(self.snd_dir, 'Boost16.wav'))def new(self):self.score = 0# self.all_sprites = pg.sprite.Group()# 层次添加,避免元素重叠显示(如背景云遮挡住平台与玩家)self.all_sprites = pg.sprite.LayeredUpdates()self.platforms = pg.sprite.Group()self.powerups = pg.sprite.Group() # 急速飞跃道具self.mobs = pg.sprite.Group() # 敌人对象self.clouds = pg.sprite.Group() # 云彩对象self.player = Player(self)self.all_sprites.add(self.player)for plat in PLATFORM_LIST:p = Platform(self, *plat)# self.all_sprites.add(p)# self.platforms.add(p)self.mob_timer = 0# 游戏的背景音乐pg.mixer.music.load(os.path.join(self.snd_dir, 'Happy Tune.ogg'))# 创建云彩for i in range(8):c = Cloud(self)c.rect.y += 500self.run()def run(self):# loops表示循环次数,-1表示音乐将无限播放下去pg.mixer.music.play(loops=-1)self.playing = Truewhile self.playing:self.clock.tick(FPS)self.events()self.update()self.draw()# 退出后停止音乐,fadeout(time)设置音乐淡出的时间,该方法会阻塞到音乐消失pg.mixer.music.fadeout(500)def update(self):self.all_sprites.update()# 产生敌人now = pg.time.get_ticks()# 通过时间间隔来判断是否要产生敌人if now - self.mob_timer > 5000 + random.choice([-1000, -500, 0, 500, 1000]):self.mob_timer = nowMob(self)# 碰撞检测 - 如果碰撞到了敌人,游戏结束mob_hits = pg.sprite.spritecollide(self.player, self.mobs, False, pg.sprite.collide_mask)if mob_hits:self.playing = False# 玩家在界面中时(y>0),进行碰撞检测,检测玩家是否碰撞到平台if self.player.vel.y > 0:hits = pg.sprite.spritecollide(self.player, self.platforms, False)if hits:lowest = hits[0]for hit in hits:if hit.rect.bottom > lowest.rect.bottom:lowest = hit # 保存最小的值# 避免平移效果 - 兔子最底部没有小于碰撞检测中的最小值,则不算跳跃到平台上if self.player.pos.y < lowest.rect.centery:self.player.pos.y = lowest.rect.topself.player.vel.y = 0self.player.jumping = False# 会产生平移效果# if hits:#     self.player.pos.y = hits[0].rect.top#     self.player.vel.y = 0# 玩家到达游戏框 1/4 处时(注意,游戏框,头部为0,底部为游戏框长度,到到游戏框的1/4处,表示已经到达了顶部一部分了)if self.player.rect.top <= HEIGHT / 4:# 玩家位置移动(往下移动)# self.player.pos.y += abs(self.player.vel.y)self.player.pos.y += max(abs(self.player.vel.y), 2)# 随机生成新云朵if random.randrange(100) < 10:Cloud(self)# 云彩同步移动for cloud in self.clouds:cloud.rect.y += max(abs(self.player.vel.y / 2), 2)# 敌人位置同步往下移动for mob in self.mobs:mob.rect.y += max(abs(self.player.vel.y), 2)# 平台在游戏框外时,将其注销,避免资源浪费for plat in self.platforms:# 平台移动位置(往下移动,移动的距离与玩家相同,这样玩家才能依旧站立在原本的平台上)# plat.rect.y += abs(self.player.vel.y)plat.rect.y += max(abs(self.player.vel.y), 2)if plat.rect.top >= HEIGHT: plat.kill()# 分数增加 - 平台销毁,分数相加self.score += 10# 碰撞检测 - 玩家碰撞到急速飞跃道具pow_hits = pg.sprite.spritecollide(self.player, self.powerups, True)for pow in pow_hits:# 道具类型 - 不同道具可以实现不同的效果if pow.type == 'boost':self.boost_sound.play() # 播放相应的音效self.player.vel.y = -BOOST_POWER # 快递移动的距离self.player.jumping = False # 此时不为跳跃状态# 死亡 - 玩家底部大于游戏框高度if self.player.rect.bottom > HEIGHT:for sprite in self.all_sprites:sprite.rect.y -= max(self.player.vel.y, 10)# 元素底部小于0 - 说明在游戏框外面,将其删除if sprite.rect.bottom < 0:sprite.kill()# 平台个数为0,游戏结束if len(self.platforms) == 0:self.playing = False# 判断平台数,产生新的平台while len(self.platforms) < 6:width = random.randrange(50, 100)# 平台虽然是随机生成的,但会生成在某一个范围内p = Platform(self, random.randrange(0, WIDTH - width),random.randrange(-75, -30))self.platforms.add(p)self.all_sprites.add(p)# 事件处理def events(self):for event in pg.event.get():# 关闭if event.type == pg.QUIT:if self.playing:self.playing = Falseself.running = False# 跳跃if event.type == pg.KEYDOWN:if event.key == pg.K_SPACE:self.player.jump()# 按钮抬起,减小跳跃速度,从而实现,快速点击,短跳,长按,长跳的效果if event.type == pg.KEYUP:if event.key == pg.K_SPACE:self.player.jump_cut()def draw(self):# 绘制self.screen.fill(BGCOLOR)self.all_sprites.draw(self.screen)# 绘制文字 - 具体的分数self.draw_text(str(self.score), 22, WHITE, WIDTH / 2, 15)# 翻转pg.display.flip()# 开始游戏的钩子函数def show_start_screen(self):pg.mixer.music.load(os.path.join(self.snd_dir, 'Yippee.ogg'))pg.mixer.music.play(loops=-1)self.screen.fill(BGCOLOR) # 填充颜色# 绘制文字self.draw_text(TITLE, 48, WHITE, WIDTH / 2, HEIGHT / 4)self.draw_text("Left and right button move, space bar jump", 22, WHITE, WIDTH / 2, HEIGHT / 2)self.draw_text("Press any key to start the game", 22, WHITE, WIDTH / 2, HEIGHT * 3 / 4)# 画布翻转pg.display.flip()self.wait_for_key() # 等待用户敲击键盘中的仍以位置pg.mixer.music.fadeout(500)def wait_for_key(self):waiting = Truewhile waiting:self.clock.tick(FPS)for event in pg.event.get():if event.type == pg.QUIT: # 点击退出,结束等待循环waiting = Falseself.running = Falseif event.type == pg.KEYUP: # 按下键盘,结束等待循环waiting = Falsedef show_go_screen(self):# game over/continueif not self.running: # 是否在运行returnpg.mixer.music.load(os.path.join(self.snd_dir, 'Yippee.ogg'))pg.mixer.music.play(loops=-1)self.screen.fill(BGCOLOR) # 游戏框背景颜色填充# 绘制文字self.draw_text("GAME OVER", 48, WHITE, WIDTH / 2, HEIGHT / 4)self.draw_text("Score: " + str(self.score), 22, WHITE, WIDTH / 2, HEIGHT / 2)self.draw_text("Press a key to play again", 22, WHITE, WIDTH / 2, HEIGHT * 3 / 4)# 判断分数if self.score > self.highscore:self.highscore = self.scoreself.draw_text("NEW HIGH SCORE!", 22, WHITE, WIDTH / 2, HEIGHT / 2 + 40)# 记录新的最高分到文件中 - 持久化with open(os.path.join(self.dir, HS_FILE), 'w') as f:f.write(str(self.score))else:self.draw_text("High Score: " + str(self.highscore), 22, WHITE, WIDTH / 2, HEIGHT / 2 + 40)# 翻转pg.display.flip()# 等待敲击任意键,self.wait_for_key()pg.mixer.music.fadeout(500)# 绘制文字def draw_text(self, text, size, color, x, y):font = pg.font.Font(self.font_name, size) # 设置字体与大小text_surface = font.render(text, True, color) # 设置颜色text_rect = text_surface.get_rect() # 获得字体对象text_rect.midtop = (x, y) # 定义位置self.screen.blit(text_surface, text_rect) # 在屏幕中绘制字体g = Game()
g.show_start_screen()
while g.running:g.new()g.show_go_screen()pg.quit()

完整程序下载地址:Python跳跳兔小游戏源代码

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序源码:2022虎年新UI春节送祝福

这是一款网友用以前小编发过的一款端午送祝福改的一款小程序 里面的背景图包括祝福语都已经修改成与虎年相关的内容了 总体来说找的背景图还是可以的,不过有些地方和细节小编也给完善了一下 然后小编测试的时候发现还没有流量主,所以小编也给加了几个流量主进去 到时候大家直…

2023兔年头像框制作生成小程序源码+多模板/抓住红利

正文: 2023了&#xff0c;到了兔年那么也该换新的头像框拉&#xff0c;今天给大家带来兔年的头像框制作小程序&#xff0c;支持一键获取头像支持用户上传头像&#xff0c;丰富的模板&#xff0c;不只于兔年头像框还有其它的&#xff0c;早点给大家发出来也好让大家早点抓住这波…

头像生成器微信小程序代码

微信小程序需要wxml&#xff0c;wxss&#xff0c;js三种类型代码 1&#xff0c;wxml <view class"container"><view class"title">兔年头像生成器</view><view class"description">选择一张图片&#xff0c;生成你的兔…

Python生成兔年祝福词云图,快拿去发给小姐姐吧!祝大家兔年大吉,桃花运多多

今年是兔年&#xff0c;所以今年我们拜年主题就是以兔为主&#xff0c;为了能够在兔年拜年做好准备祝福语可是少不了&#xff0c;发太多的文字已经让人们感到厌烦&#xff0c;所以不如利用自己所学只是做一张兔年的词云图&#xff0c;来去给小姐姐们拜个年。 话不多说&#xff…

2023最新兔年新春好友送祝福小程序源码+文案很多

正文: 去年的时候也发过虎年的送祝福小程序&#xff0c;这不马上2023兔年了所以给大家发兔年的送祝福小程序&#xff0c;早点发也好让大家早点抓住新春的流量福利。 程序: wwxras.lanzoum.com/iPWHz0l7t5ra 图片:

【OpenVI】AIGC纪元,兔年AI绘画实践

团队模型、论文、博文、直播合集&#xff0c;点击此处浏览 一、背景 AIGC指的是AI Generated Content&#xff0c;即由AI创作的内容&#xff0c;是继UGC(User Generated Content用户创造内容&#xff0c;如抖音b站等平台)、PGC(Professional Generated Content专业生产内容&…

2023 兔年春节倒计时微信小程序源码

马上也到2023年兔年了 增加一下喜庆,其实这种小程序还是有流量的 每天看一看倒计时,数着过年 另外还有一个简单的绘画功能

2023兔年新春好友送祝福微信小程序源码

源码简介&#xff1a; 马上2023兔年了所以站长给大家发兔年的送祝福小程序 早点发也好让大家早点抓住新春的流量福利 好了不多说,感兴趣的抓紧下载吧! 原文链接&#xff1a;2023兔年新春好友送祝福微信小程序源码-主题模板站 源码截图&#xff1a;

2023兔年新年春节倒计时微信小程序源码

简介&#xff1a; 马上也到2023年兔年了 给大家分享一个春节倒计时的小程序 增加一下喜庆,其实这种小程序还是有流量的 每天看一看倒计时,数着过年 另外还有一个简单的绘画功能 下方是小编的测试演示图! https://www.skpan.cn/bBibst11KsJ 图片&#xff1a;

2023兔年春节倒计时小程序源码

源码简介&#xff1a; 马上到2023年兔年了 站长给大家分享一个春节倒计时的小程序 增加一下喜庆,其实这种小程序还是有流量的 每天看一看倒计时,数着过年 另外还有一个简单的绘画功能 源码截图&#xff1a;

这么好看的客服组件,还是觉得接入ChatGPT,把它放在博客中那就完美了

我们在使用ChatGPT时&#xff0c;它的返回方式是采用流式回复。感觉这个效果不错。之前做的全都是的等全部结果请求完成&#xff0c;再一次性返回给用户。今天就通过流式回复的效果重写之前的程序。 前端 前端采用一个网页版的客服组件&#xff0c;整体的效果如下&#xff1a;…

C#接入ChatGPT编程实际应用

一&#xff0c;介绍ChatGPT的API可以在前端&#xff0c;以及一些后端进行API的接入&#xff0c;本篇主要介绍基于ChatGPT的API的C#接入研究。 学习更多的科技知识可以来知新文学 最火的莫过于ChatGPT的相关讨论&#xff0c;这个提供了非常强大的AI处理&#xff0c;并且整个平…

Java快速接入Chatgpt简单案例

Chatgpt介绍 ChatGPT是一种由OpenAI训练的大型语言模型。它的原理是基于Transformer架构&#xff0c;通过预训练大量文本数据来学习如何生成人类可读的文本&#xff0c;然后通过接受输入并生成输出来实现对话。 ChatGPT的用途非常广泛&#xff0c;可以用于自然语言处理&#xf…

SpringBoot 接入chatGPT API

SpringBoot 接入chatGPT API 一、准备工作二、补全接口示例三、申请API-KEY**四、JavaScript调用API**五、SpringBoot整合ChatGPT六、使用curl模拟请求ChatGPT平台已经为技术提供了一个入口了,作为一个Java程序员,我们第一时间想到的就是快速开发一个应用,接入ChatGPT的接口…

ChatGPT 克隆方案,开源了!开箱即用

什么是 ChatGPT ChatGPT是一种基于人工智能技术的大型语言模型&#xff0c;它能够理解和处理人类自然语言&#xff0c;并且在回答问题、生成文本和模拟对话等方面表现出色。ChatGPT使用的是GPT-3.5架构&#xff0c;它在训练过程中接触了大量的语言数据&#xff0c;并利用这些数…

上海亚商投顾:沪指失守3300点 传媒、游戏板块逆市大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日继续调整&#xff0c;沪指午后跌超1%&#xff0c;失守3300点整数关口&#xff0c;创业板指一度跌逾2%…

汇正财经骗局?大盘六连阳,周线完美收官

盘面回顾&#xff1a; 沪深两市成交额连续第四个交易日突破1万亿元&#xff0c;收盘沪指涨0.45%&#xff0c;深成指涨0.85%&#xff0c;创业板指涨0.84%。创新药、地产、光伏发电、游戏、数据确权等板块表现不错&#xff0c;ChatGPT概念股再度走强&#xff0c;游戏、影视等应用…

上海亚商投顾:沪指延续反弹涨0.67% AI概念股掀跌停潮

指数今日低开高走&#xff0c;沪指午后一度涨超1%&#xff0c;以保险为首的大金融板块拉升&#xff0c;中国平安在一季报驱动下&#xff0c;迎来久违涨停&#xff0c;成交超120亿元。医药股全天强势&#xff0c;何氏眼科、金石亚药、普蕊斯、天宇股份20CM涨停&#xff0c;第一医…

拉伯证券|A股大涨!外资30分钟爆买百亿!汽车股狂飙

在很多利好音讯的轮番影响下&#xff0c;兔年首个交易日&#xff0c;A股迎来大涨。沪指开盘便站上3300点整数关口&#xff0c;尔后继续高位震动。深证成指、创业板指涨势更甚&#xff0c;到午盘涨幅均超1.5%。 外资继续“高调”抢筹。Choice数据显现&#xff0c;今天开盘仅5分…