温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python+Pygame怎么实现疯狂吃水果游戏

发布时间:2022-06-29 09:51:11 来源:亿速云 阅读:242 作者:iii 栏目:开发技术

这篇文章主要介绍“Python+Pygame怎么实现疯狂吃水果游戏”,在日常操作中,相信很多人在Python+Pygame怎么实现疯狂吃水果游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python+Pygame怎么实现疯狂吃水果游戏”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    一、准备中 

    1)游戏玩法

    随机掉落:西瓜????加分、葡萄????减分、炸弹????一条生命值初始为二。鼠标右键移动。加减多少分具体就等你们自己玩儿了哈,都剧透了就不好玩了撒!每次的游戏代码都给你们留点儿底,嘻嘻,自己摸索嘛~

    2)环境安装

    小编使用的环境:Python3、Pycharm社区版、tkinter、Pygame模块,部分自 带模块不展示。

    模块安装:pip install -i https://pypi.douban.com/simple/+模块名

    3)素材准备

    准备了背景音乐更有劲儿啦!记得seven这首歌嘛,还挺好听的。

    Python+Pygame怎么实现疯狂吃水果游戏

    准备好的素材图片背景掉落的物品等。

    Python+Pygame怎么实现疯狂吃水果游戏

    二、代码展示

    代码超级多的!仅展示部分

    主程序

    import tkinter import random import time import Param import Image import Bonus import Deduction import Bean import Bomb import pygame # 定义物质列表(包含加分西瓜和消分葡萄和炸弹) bonusth = [] deductionth = [] bigbombs = [] # 定义bean变量,保存豆豆对象 bean =  "" # 定义当前用户的初始分数 score = 0 life = 2 # 定义游戏状态 game_state = Param.GAME_START   # 创建窗体 game_window = tkinter.Tk() # 窗口文字设置 game_window.title('I LOVE FRUIT') # 窗口位置处理 screenwidth = game_window.winfo_screenwidth() screenheight = game_window.winfo_screenheight() size = '%dx%d+%d+%d' % (Param.GAME_WIDTH, Param.GAME_HEIGHT, (screenwidth-Param.GAME_WIDTH)/2, 50) game_window.geometry(size) # 加载游戏用到的所有的图片 background_image,bean_image,Bonus_image,Bomb_image,Deduction_image= Image.load_image(tkinter) Start,Stop = Image.load_state_image(tkinter)   # 获取画布 window_canvas = tkinter.Canvas(game_window) # 画布包装方式 window_canvas.pack(expand=tkinter.YES, fill=tkinter.BOTH)   # 时间标志 count = 0 num = 30    def create_fruit():# 生成水果     global count     global num     global score     if score % 10 ==1:         if num >= 8:             num -= 8     count += 1     if count % num == 0:         c = random.randint(1,10)         if c <= 5:             # 加分水果生成             bonus = Bonus.Bonus(Bonus_image)             bonusth.append(bonus)    # 物质添加到列表中             window_canvas.create_image(bonus.x,bonus.y,anchor = tkinter.NW,image=bonus.image,tag=bonus.tag)         elif c<=8:             # 销分水果生成             deduction = Deduction.Deduction(Deduction_image)             deductionth.append(deduction)             window_canvas.create_image(deduction.x,deduction.y,anchor = tkinter.NW,image=deduction.image,tag=deduction.tag)         else:             #炸弹生成             bigbomb = Bomb.BigBomb(Bomb_image)             bigbombs.append(bigbomb)             window_canvas.create_image(bigbomb.x,bigbomb.y,anchor = tkinter.NW,image=bigbomb.image,tag=bigbomb.tag)   def step_fruit():     # 遍历所有的物质,调用移动的方法     for bonus in bonusth:         bonus.step(window_canvas)     for deduction in deductionth:         deduction.step(window_canvas)     for bigbomb in bigbombs:         bigbomb.step(window_canvas)   def judge_state(event):     global game_state     if game_state == Param.GAME_START:         game_state = Param.GAME_RUNNING         # 画分         window_canvas.create_text(20, 20, text="分数:%d" % (score), anchor=tkinter.NW, fill="white",\         font="time 12 bold",tag="SCORE")         # 画生命         window_canvas.create_text(20, 50, text="生命:%d" % (life), anchor=tkinter.NW, fill="white",\         font="time 12 bold",tag="LIFE")         # 删除启动图片         window_canvas.delete("Start")       elif game_state == Param.GAME_STOP:         window_canvas.delete("bean")         window_canvas.delete("STOP")         game_state = Param.GAME_START         game_start()   def bean_move(event):     if game_state == Param.GAME_RUNNING:         now_x = bean.x         now_y = bean.y         bean.x = event.x - bean.w/2         bean.y = event.y - bean.h/2         window_canvas.move("bean", bean.x-now_x, bean.y-now_y)   def out_of_bounds():     # 获取所有物质,判断是否越界     for deduction in deductionth:         if deduction.out_of_bounds():             window_canvas.delete(deduction.tag)             deductionth.remove(deduction)     for bonus in bonusth:         global outnum         if bonus.out_of_bounds():             outnum += 1             window_canvas.delete(bonus.tag)             bonusth.remove(bonus)         if outnum >= 5:             game_state = Param.GAME_STOP                 # 画游戏结束的状态             game_over()     for bigbomb in bigbombs:         if bigbomb.out_of_bounds():             window_canvas.delete(bigbomb.tag)             bigbombs.remove(bigbomb)   def bomb_action():     global score     global life     global bean     global game_state     #加分     for bonus in bonusth:         if bonus.bomb(bean):             window_canvas.delete(bonus.tag)             bonusth.remove(bonus)             score += 3     #减分     for deduction in deductionth:         if deduction.bomb(bean):             window_canvas.delete(deduction.tag)             deductionth.remove(deduction)             if score - 5 < 0:                 score = 0                 game_state = Param.GAME_STOP                 # 画游戏结束的状态                 game_over()             else:                 score -= 5                      for bigbomb in bigbombs:         if bigbomb.bomb(bean):             window_canvas.delete(bigbomb.tag)             bigbombs.remove(bigbomb)             # 如果分数或生命小于0 游戏结束             if life - 1 <= 0:                 life = 0                 game_state = Param.GAME_STOP                 # 画游戏结束的状态                 game_over()             else:                 life -= 1               def draw_action():     # 画分     window_canvas.delete("SCORE")     # 画生命     window_canvas.delete("LIFE")     window_canvas.create_text(20,20,text="分数:%d"%(score),anchor=tkinter.NW,fill="white",font="time 12 bold",tag="SCORE")     window_canvas.create_text(20,50,text="生命:%d"%(life),anchor=tkinter.NW,fill="white",font="time 12 bold",tag="LIFE")      def game_over():     global game_state     game_state = Param.GAME_STOP     for deduction in deductionth:         window_canvas.delete(deduction.tag)     for bonus in bonusth:         window_canvas.delete(bonus.tag)     for bigbomb in bigbombs:         window_canvas.delete(bigbomb.tag)     deductionth.clear()     bonusth.clear()     bigbombs.clear()     window_canvas.create_image(0,0,anchor=tkinter.NW,image=Stop,tag="STOP")     if pygame.mixer.music.get_busy() == True:         pygame.mixer.music.stop()#停止播放      def game_start():     global score     global life     global num     global outnum     num = 30     score = 0     life = 2     outnum = 0     # 画游戏背景     window_canvas.create_image(0, 0, anchor=tkinter.NW, image=background_image, tag="background")     # 创建豆豆对象     global bean     bean = Bean.Bean(bean_image)     window_canvas.create_image(bean.x, bean.y, anchor=tkinter.NW, image=bean.image, tag="bean")     window_canvas.create_image(0, 0, anchor=tkinter.NW, image=Start, tag="Start")         pygame.mixer.init()     pygame.mixer.music.load('Seve(钢琴版).mp3') #加载背景音乐     if pygame.mixer.music.get_busy() == False:         pygame.mixer.music.play(300,0)#重复300次,从第一秒开始播放      def game():     if game_state == Param.GAME_START:         game_start()         # 鼠标监听         window_canvas.bind("<Motion>",bean_move)         window_canvas.bind("<Button-1>",judge_state)       while True:         if game_state == Param.GAME_RUNNING:             # 物质入场             create_fruit()             # 物质动起来             step_fruit()             # 删除越界的物质             out_of_bounds()             # 检测碰撞             bomb_action()             if score >= 0:                 # 画分和生命                 draw_action()                 # 更新显示         game_window.update()         time.sleep(0.04)   if __name__ == "__main__":     game()     game_window.mainloop()

    三、效果展示

    1)游戏界面

    Python+Pygame怎么实现疯狂吃水果游戏

    2)随机截图

    Python+Pygame怎么实现疯狂吃水果游戏

    3)消耗结束

    Python+Pygame怎么实现疯狂吃水果游戏

    到此,关于“Python+Pygame怎么实现疯狂吃水果游戏”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI