python小游戏——躲避球(可当课设)

news2024/9/23 3:22:19

游戏简介:

没有美术,画面简洁(懒得做)。玩家控制小球躲避敌人(上下左右,闪避),敌人体积越大速度越慢,随机生成道具球(目前只有生命球),靠近道具球可拾取。

未来展望:

1. 添加其他道具球

2. 添加攻击手段,目前只能闪避。

3. 添加耐力条

4. 添加更多属性

核心代码

玩家移动

def player_move(space_down, player):
    """
    控制玩家移动处理
    :param space_down: 是否按下空格
    :param player: 玩家
    :return:
    """
    global monitor
    if space_down:
        speed = player.dodge_speed
    else:
        speed = player.speed

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.x -= speed
    if keys[pygame.K_RIGHT]:
        player.x += speed
    if keys[pygame.K_UP]:
        player.y -= speed
    if keys[pygame.K_DOWN]:
        player.y += speed

    if player.x < 0:
        player.x = monitor.width + player.x
    elif player.x > monitor.width:
        player.x = player.x - monitor.width

    if player.y < 0:
        player.y = monitor.height + player.y
    elif player.y > monitor.height:
        player.y = player.y - monitor.height

生成小怪

def make_enemy():
    """
    生成小怪
    :return:
    """
    global monitor, score
    boss = False
    if score % 20000 == 0 and score != 0:
        boss = True
    sizeList = [10, 30, 50, 70, 100, 130, 150, 180, 200, 250]
    random_int = random.randint(1, 10) if boss is False else 20
    enemy = Enemy(
        atc=random_int,
        max_health=random_int,
        defense=0,
        speed=(11 - random_int) * 1.5 if boss is False else 1.5,
        attribute=0,
        x=random.uniform(0.1, 1) * monitor.width,
        y=random.uniform(0.1, 1) * monitor.height,
        size=sizeList[random_int - 1] if boss is False else 500
    )
    return enemy

道具球处理

def propBall_handle(propBall_list, window, player):
    """
    道具球处理
    :param propBall_list:
    :param window:
    :param player:
    :return:
    """
    count = 0
    for propBall in propBall_list:
        pygame.draw.circle(window, propBall.color, (propBall.x, propBall.y), propBall.size)
        propBall.moveToPlayer(player.x, player.y)
        if detectIntersect(player, propBall):
            propBall_function(player, propBall)
            del propBall_list[count]
        count += 1
    if score % 200 == 0:
        propBall = generate_propBall()
        if propBall is not None:
            propBall_list.append(propBall)
    return propBall_list

游戏主要逻辑

def main():
    global is_running, is_playing, font, pass_time, pass_time_made, score, start_time, monitor
    propBall_list = []
    window = pygame.display.set_mode((monitor.width, monitor.height))
    pygame.display.set_caption("demo")
    player = init_player()
    health_bal = pygame.Rect(20, 20, player.health * 20, 20)
    enemyList = [make_enemy()]
    button_playAgain = pygame.Rect(monitor.width // 2 - button_width // 2, monitor.height * 0.6,
                                   button_width, button_height)
    button_quit = pygame.Rect(monitor.width // 2 - button_width // 2,
                              monitor.height * 0.6 + 30 + button_height,
                              button_width, button_height)
    buttonList = [button_playAgain, button_quit]

    while is_running:
        score += 1
        window.fill(color_dict['black'])  # 填充黑色
        health_bal.width = player.health * 20
        space_down = False
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                is_running = False
            elif event.type == KEYDOWN:
                if event.key == K_SPACE:
                    space_down = True
            if event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = pygame.mouse.get_pos()
                button_serialNum = button_clicked(buttonList, mouse_pos)
                if button_serialNum == 0:
                    is_playing = True
                    player = init_player()
                    enemyList = [make_enemy()]
                elif button_serialNum == 1:
                    is_running = False

        if is_playing:
            if pass_time_made is False:
                pass_time = 0
                start_time = time.perf_counter()
                pass_time_made = True

            if player.health == 0:
                is_playing = False

            if score % 400 == 0:
                enemyList.append(make_enemy())

            propBall_list = propBall_handle(propBall_list, window, player)
            player_move(space_down, player)  # 玩家移动
            player_twinkle(player, window)  # 玩家绘制
            draw_healthBar(window, player, health_bal)  # 血条更新
            make_enemyThreading(enemyList, window, player)  # 小怪更新
            draw_score(window)
            pass_time = int(time.perf_counter() - start_time)
        else:
            draw_scoreTitle(window)
            draw_button(buttonList, window)
            pass_time_made = False
            propBall_list = []
            enemyList = []

        pygame.display.flip()  # 刷新屏幕
        time.sleep(0.01)
    pygame.quit()

游戏画面

完整代码

有需要者自取,盘内还有打包好的exe文件

链接:https://pan.baidu.com/s/1rZ1xNZJYtvyXPIG9Rgh5Hw
提取码:iq6l

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第T9周:猫狗识别2

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](K同学啊)** 一、前期工作 1. 设置GPU import tensorflow as tfgpus tf.config.list_physical_devices("GPU")if gpus:t…

Linux权限概念与思想,能深度理解“权限”,看这一篇就够啦

目录 一、Linux权限的概念 a.什么是权限&#xff1f; b.权限的本质 c.Linux中的用户 1.从root用户切换到普通用户user&#xff1a; 2.从普通用户user切换到root用户&#xff1a; 3.我不想直接变成root&#xff0c;但是我就是想以root的身份执行一个工作&#xff1f; 4.L…

EXCEL 分组后找出满足条件的行拼接起来

Excel某表格有四列&#xff0c;其中第2列是分组列。 ABCD11a1yet22a2done33a3yet44b1done55b2done66b3done77b4yet88b5done 现在要按第2列分组&#xff0c;找到每组第4列等于"done"的行&#xff0c;将这些行的第3列用逗号拼起来&#xff0c;再与分组名、行号组成新…

Unity动画模块 之 动画层混合

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1.动画层 动画层 - Unity 手册&#xff0c;动画层的作用 混合模式 覆盖和叠加模式&#xff0c;很好理解吧 权重 到底…

若依权限控制前端+后端实现思路梳理(PreAuthorize、hasPermi、v-hasPermi)

一、权限控制引发的思考 引言 最近接手了公司的一个项目&#xff0c;实施反馈说&#xff0c;客户那边要求对不同的权限的用户操作权限做限制。场景就是&#xff0c;比如一个项目列表&#xff0c;这部分数据有可能是针对某个公司某个部门的&#xff0c;对应不同的部门用户能看…

云岚到家 第一天

你的项目是做什么业务的&#xff1f; 家政服务&#xff0c;我的项目是一个家政o2o平台。o2o&#xff08;Online To Offline&#xff09;是将线下商务的机会与互联网的技术结合 什么商业模式&#xff1a; 项目涉及哪些角色&#xff1f; 本项目涉及如下角色&#xff1a; 家政…

技术前沿:WebRTC与H.265编码的兼容性挑战与应对策略

WebRTC&#xff08;Web Real-Time Communication&#xff09;是一种支持网页浏览器进行实时语音通话、视频聊天以及P2P文件共享的技术。然而&#xff0c;标准的WebRTC API在大多数浏览器中默认并不支持H.265&#xff08;也称为HEVC&#xff0c;高效视频编码&#xff09;编码。这…

Android 中native C++创建thread的几种方式

Android native 开发&#xff0c;工作中最常用的两种创建thread的方法&#xff0c;总结如下&#xff1a; 使用 pthread 库 &#xff08;1&#xff09;概念&#xff1a;它是一套在类 Unix 操作系统上进行多线程编程的接口&#xff0c; 而android 基于Linux , Linux就是一个类 U…

用序列模型(GPT Bert Transformer等)进行图像处理的调研记录

Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction 北大和字节团队的一篇VLM&#xff0c;在生成任务上&#xff0c;用GPT范式&#xff0c;声称在FID上超过了DIT&#xff0c;SD3和SORA。开源。首先是multi-scale的VQVAE&#xff0c;然后是…

Datawhale X 李宏毅苹果书 AI夏令营 学习笔记(一)

局部极小值与鞍点 在优化过程中&#xff0c;模型可能会遇到局部极小值(local minima)或鞍点(saddle point)&#xff0c;这些位置梯度为零&#xff0c;使得模型停止进步或训练缓慢。 局部极小值是损失函数的局部最低点&#xff0c;而鞍点则是梯度为零但不是局部极小/极大值的点…

Leetcode JAVA刷刷站(80)删除有序数组中的重复项 ||

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;我们可以使用双指针技术。一个指针&#xff08;我们称之为i&#xff09;用于遍历数组&#xff0c;另一个指针&#xff08;我们称之为j&#xff09;用于记录不重复或只重复一次的元素应该放置的位置。同时&#xff0c;我…

创新实践:流媒体服务器如何推动WebRTC支持H.265及JS硬软解码(MSE硬解、WASM软解)

为了实现这一全面的解决方案&#xff0c;我们投入了近半年的时间进行调研与研发。我们的主要目标是&#xff1a;让流媒体服务器能够直接传输H.265编码的视频&#xff0c;而无需将其转码为H.264&#xff0c;从而使Chrome浏览器能够无缝解码并播放H.265视频。 值得注意的是&#…

TinaSDKV2.0 自定义系统开发

TinaSDKV2.0 自定义系统开发 什么是自定义系统&#xff1f; TinaSDK Kconfig界面配置 Tina Linux采用 Kconfig 机制对 SDK 和内核进行配置。 Kconfig 是一种固定格式的配置文件。Linux 编译环境中的 menuconfig 程序可以识别这种格式的配置文件&#xff0c;并提取出有效信息…

Flink常见数据源(source)使用教程(DataStream API)

前言 一个 Flink 程序,其实就是对 DataStream 的各种转换。具体来说,代码基本上都由以下几部分构成,如下图所示: 获取执行环境(execution environment)读取数据源(source)定义基于数据的转换操作(transformations)定义计算结果的输出位置(sink)触发程序执行(exec…

探索上门回收旧衣物系统源码开发的创新与挑战

在当今社会&#xff0c;随着环保意识的日益增强和可持续发展的全球趋势&#xff0c;旧衣物回收与再利用成为了一个备受关注的议题。为了响应这一需求&#xff0c;开发一套高效、便捷的上门回收旧衣物系统&#xff0c;不仅有助于减少环境污染&#xff0c;还能促进资源的循环利用…

[数据集][目标检测]电力场景输电线导线散股检测数据集VOC+YOLO格式3890张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3890 标注数量(xml文件个数)&#xff1a;3890 标注数量(txt文件个数)&#xff1a;3890 标注…

Koa商城项目-商城模块(前端)

项目地址 koa_system: &#x1f525;&#x1f525;&#x1f525;Koa2 React商城项目前端-React Antd前端-Vue2 Element-plus后端-Koa2 Sequelizehttps://gitee.com/ah-ah-bao/koa_system 欢迎大家点击查看,方便的话点一个star~ 项目结构 Vue2Admin和Vue3Admin版本的后台还…

Deep-Live-Cam启动

实验环境 实验时间&#xff1a;2024年8月windows 10 专业版能跟老外对喷的网络环境基于 Anaconda 创建 Python 3.10.x 环境 其它依赖 下载生成工具&#xff1a;https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/安装单个组件&#xff1a;共三个。 安装ffm…

Python酷库之旅-第三方库Pandas(093)

目录 一、用法精讲 396、pandas.Series.to_frame方法 396-1、语法 396-2、参数 396-3、功能 396-4、返回值 396-5、说明 396-6、用法 396-6-1、数据准备 396-6-2、代码示例 396-6-3、结果输出 397、pandas.Series.to_xarray方法 397-1、语法 397-2、参数 397-3、…

算法的学习笔记—二叉树中和为某一值的路径

&#x1f600;前言 在二叉树中寻找和为某一特定值的路径问题是一个经典的面试题&#xff0c;考察了对二叉树的遍历能力以及递归和回溯算法的理解和应用。本文将详细解析这一问题&#xff0c;并提供一个Java实现。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1…