资讯专栏INFORMATION COLUMN

Python+Pygame实操之玩命吃水果游戏的完成

89542767 / 535人阅读

  吃豆人和削苹果这两个游戏想必大家都知道吧,本文运用Python里的Pygame控制模块编写出一个融合吃豆人+切水果的新手游:玩命吃苹果,有兴趣的话可以认识一下


  引言


  哈哈哈!木木子今天浮现——早已来给大家看了不少具体内容啦~


  涉及到的人工智能、新手、网络爬虫、数据统计分析(这一块的通常但是审批)手机游戏...


  PS:


  吃豆人我写过了哈


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


  切水果我写过了哈


  PythonPygame实战之水果忍者游戏的实现


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


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


  一、筹备中


  1)游戏的玩法


  任意爆出:甜瓜????大大加分、红提????扣分、定时炸弹????1条血量原始为二。鼠标点击挪动。加减法考多少分实际就等着大家自己去玩了哈,都剧透了就没意思了撒!每一次的游戏代码也给大家留一点儿底,哈哈,自己琢磨嘛~


  2)环境安装


  我应用的生活环境:Python3、Pycharm社区版、tkinter、Pygame控制模块,一部分内置控制模块不展现。


  控制模块组装:pipinstall-ihttps://pypi.douban.com/simple/+控制模块名


  3)素材内容提前准备


  安排了音乐伴奏更有劲儿啦!还记得seven这首歌曲嘛,还挺好听。

01.png

  二、代码展示


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


  主程序


  importtkinter
  importrandom
  importtime
  importParam
  importImage
  importBonus
  importDeduction
  importBean
  importBomb
  importpygame
  #定义物质列表(包含加分西瓜和消分葡萄和炸弹)
  bonusth=[]
  deductionth=[]
  bigbombs=[]
  #定义bean变量,保存豆豆对象
  bean=""
  #定义当前用户的初始分数
  score=0
  life=2
  #定义游戏状态
  game_state=Param.GAME_START
  #创建窗体
  game_window=tkinter.Tk()
  #窗口文字设置
  game_window.title('ILOVEFRUIT')
  #窗口位置处理
  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
  defcreate_fruit():#生成水果
  globalcount
  globalnum
  globalscore
  ifscore%10==1:
  ifnum>=8:
  num-=8
  count+=1
  ifcount%num==0:
  c=random.randint(1,10)
  ifc<=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)
  elifc<=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)
  defstep_fruit():
  #遍历所有的物质,调用移动的方法
  forbonusinbonusth:
  bonus.step(window_canvas)
  fordeductionindeductionth:
  deduction.step(window_canvas)
  forbigbombinbigbombs:
  bigbomb.step(window_canvas)
  defjudge_state(event):
  globalgame_state
  ifgame_state==Param.GAME_START:
  game_state=Param.GAME_RUNNING
  #画分
  window_canvas.create_text(20,20,text="分数:%d"%(score),anchor=tkinter.NW,fill="white",\
  font="time12bold",tag="SCORE")
  #画生命
  window_canvas.create_text(20,50,text="生命:%d"%(life),anchor=tkinter.NW,fill="white",\
  font="time12bold",tag="LIFE")
  #删除启动图片
  window_canvas.delete("Start")
  elifgame_state==Param.GAME_STOP:
  window_canvas.delete("bean")
  window_canvas.delete("STOP")
  game_state=Param.GAME_START
  game_start()
  defbean_move(event):
  ifgame_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)
  defout_of_bounds():
  #获取所有物质,判断是否越界
  fordeductionindeductionth:
  ifdeduction.out_of_bounds():
  window_canvas.delete(deduction.tag)
  deductionth.remove(deduction)
  forbonusinbonusth:
  globaloutnum
  ifbonus.out_of_bounds():
  outnum+=1
  window_canvas.delete(bonus.tag)
  bonusth.remove(bonus)
  ifoutnum>=5:
  game_state=Param.GAME_STOP
  #画游戏结束的状态
  game_over()
  forbigbombinbigbombs:
  ifbigbomb.out_of_bounds():
  window_canvas.delete(bigbomb.tag)
  bigbombs.remove(bigbomb)
  defbomb_action():
  globalscore
  globallife
  globalbean
  globalgame_state
  #加分
  forbonusinbonusth:
  ifbonus.bomb(bean):
  window_canvas.delete(bonus.tag)
  bonusth.remove(bonus)
  score+=3
  #减分
  fordeductionindeductionth:
  ifdeduction.bomb(bean):
  window_canvas.delete(deduction.tag)
  deductionth.remove(deduction)
  ifscore-5<0:
  score=0
  game_state=Param.GAME_STOP
  #画游戏结束的状态
  game_over()
  else:
  score-=5
  forbigbombinbigbombs:
  ifbigbomb.bomb(bean):
  window_canvas.delete(bigbomb.tag)
  bigbombs.remove(bigbomb)
  #如果分数或生命小于0游戏结束
  iflife-1<=0:
  life=0
  game_state=Param.GAME_STOP
  #画游戏结束的状态
  game_over()
  else:
  life-=1
  defdraw_action():
  #画分
  window_canvas.delete("SCORE")
  #画生命
  window_canvas.delete("LIFE")
  window_canvas.create_text(20,20,text="分数:%d"%(score),anchor=tkinter.NW,fill="white",font="time12bold",tag="SCORE")
  window_canvas.create_text(20,50,text="生命:%d"%(life),anchor=tkinter.NW,fill="white",font="time12bold",tag="LIFE")
  defgame_over():
  globalgame_state
  game_state=Param.GAME_STOP
  fordeductionindeductionth:
  window_canvas.delete(deduction.tag)
  forbonusinbonusth:
  window_canvas.delete(bonus.tag)
  forbigbombinbigbombs:
  window_canvas.delete(bigbomb.tag)
  deductionth.clear()
  bonusth.clear()
  bigbombs.clear()
  window_canvas.create_image(0,0,anchor=tkinter.NW,image=Stop,tag="STOP")
  ifpygame.mixer.music.get_busy()==True:
  pygame.mixer.music.stop()#停止播放
  defgame_start():
  globalscore
  globallife
  globalnum
  globaloutnum
  num=30
  score=0
  life=2
  outnum=0
  #画游戏背景
  window_canvas.create_image(0,0,anchor=tkinter.NW,image=background_image,tag="background")
  #创建豆豆对象
  globalbean
  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')#加载背景音乐
  ifpygame.mixer.music.get_busy()==False:
  pygame.mixer.music.play(300,0)#重复300次,从第一秒开始播放
  defgame():
  ifgame_state==Param.GAME_START:
  game_start()
  #鼠标监听
  window_canvas.bind("<Motion>",bean_move)
  window_canvas.bind("<Button-1>",judge_state)
  whileTrue:
  ifgame_state==Param.GAME_RUNNING:
  #物质入场
  create_fruit()
  #物质动起来
  step_fruit()
  #删除越界的物质
  out_of_bounds()
  #检测碰撞
  bomb_action()
  ifscore>=0:
  #画分和生命
  draw_action()
  #更新显示
  game_window.update()
  time.sleep(0.04)
  if__name__=="__main__":
  game()
  game_window.mainloop()


  三、效果展示


  1)游戏界面

02.png

  2)随机截图

03.png

  3)消耗结束

04.png

  综上所述,这篇文章就给大家介绍完毕,希望可以给大家带来帮助

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128813.html

相关文章

  • Python+Pygame怎么实现豆豆游戏

      小编写这篇文章的一个主要目的,主要是用来给大家去做个相关的介绍,介绍的内容主要是涉及到相关的游戏实现,比如怎么去做游戏呢?比如说,怎么去做打豆豆的游戏呢?关于这方面的内容,下面就给大家详细解答下。  序言  前天晚上,玩起了在我们的学生时代经常玩的一些游戏,吃豆豆,但是我发现,在一局游戏当中,我们命的条数是比较少的,我根本不能吃完所有的豆豆,总是被敌人吃掉  于是,我在想怎么能够保证我达到吃完...

    89542767 评论0 收藏0
  • Python面向对象练习-通过pygame改良乌龟

    摘要:先看看最后效果图片的话是从网上小鱼儿那个案例里面拿的,实现的功能如下是通过方向键操作乌龟,进行吃鱼吃鱼的时候根据乌龟的坐标和鱼的进行检测,在碰撞区域则干掉这条鱼背景音乐和吃鱼音乐的播放分数累积鱼的平滑游动控制帧频实现代码导入一些常用的函数乌 先看看最后效果 图片的话是从网上小鱼儿那个案例里面拿的,实现的功能如下: 是通过方向键操作乌龟,进行吃鱼 吃鱼的时候根据乌龟的x,y坐标和鱼的x...

    jk_v1 评论0 收藏0
  • 首次公开,整理12年积累博客收藏夹,零距离展示《收藏夹灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • Python操之各种音频文件格式免费转换

      Pydub是1个根据ffmpeg的Python数字音频处理控制模块,封装形式了很多ffmpeg最底层插口,因而用这个方法做歌曲格式转化会十分方便。今日为大家介绍它歌曲格式转化作用,基本上适用所有歌曲音频文件格式,所需要的可以了解一下  Pydub是1个根据ffmpeg的Python数字音频处理控制模块,封装形式了很多ffmpeg最底层插口,因而用这个方法做歌曲格式转化会十分方便,假如你阅读文章...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<