导语

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

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

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疯狂吃水果的资料请关注Devmax其它相关文章!

Python+Pygame实战之疯狂吃水果游戏的实现的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  3. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  4. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  7. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  8. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  9. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

  10. 在android studio中使用python代码构建android应用程序

    我有一些python代码和它的机器人,我正在寻找一种方法来使用android项目中的那些python代码.有没有办法做到这一点!?解决方法有两种主要工具可供使用,它们彼此不同:>QPython>Kivy使用Kivy,大致相同的代码也可以部署到IOS.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部