Python+Pygame实战之疯狂吃水果游戏的实现

目录
  • 导语
  • 一、准备中 
    • 1)游戏玩法
    • 2)环境安装
    • 3)素材准备
  • 二、代码展示
    • 三、效果展示

      导语

      嘿嘿!木木子今日闪现——已经给大家写了很多内容啦~

      涉及的人工智能、初学者、爬虫、数据分析(这方面的一般不过审核)游戏........

      PS:

      吃豆人我写过了哈

      Python+Pygame实战之吃豆豆游戏的实现

      切水果我写过了哈

      Python Pygame实战之水果忍者游戏的实现

      今天二者集合,做出一款新游戏,哈哈哈,名字叫做《疯狂吃水果》小游戏,其实听着挺的,但是做出来的效果其实没有想象中那么高大尚呐!(给你们打个预防针)

      本文是基于Pygame写的一款游戏哈!

      一、准备中 

      1)游戏玩法

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

      2)环境安装

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

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

      3)素材准备

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

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

      二、代码展示

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

      主程序

      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)游戏界面

      2)随机截图

      3)消耗结束

      以上就是Python+Pygame实战之疯狂吃水果游戏的实现的详细内容,更多关于Python Pygame疯狂吃水果的资料请关注其它相关文章!

      本文转自网络,如有侵权请联系客服删除。