软件价值12-射箭游戏

射箭游戏,按空格键发射,打击移动靶,左上角显示成绩状态。

代码:

import pygame
import sys
import random

# 初始化Pygame
pygame.init()

# 设置窗口大小
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("射箭游戏")

# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

# 设置靶子的参数
target_width = 50
target_height = 100
target_x = SCREEN_WIDTH - target_width - 20
target_y = SCREEN_HEIGHT // 2 - target_height // 2
target_speed = 0.1
target_hit = False
hit_count = 0
arrow_count = 0

# 设置箭的参数
arrow_width = 50
arrow_height = 10
arrow_x = 50
arrow_y = SCREEN_HEIGHT // 2 - arrow_height // 2
arrow_speed = 0.5
arrow_direction = "right"
arrow_fired = False

# 设置计时器
clock = pygame.time.Clock()
FPS = 60

# 初始化内置声音
hit_sound = pygame.mixer.Sound("sound/beep.mp3")
shoot_sound = pygame.mixer.Sound("sound/shoot.mp3")


# 绘制靶子
def draw_target():
    pygame.draw.rect(screen, RED, (target_x, target_y, target_width, target_height))


# 绘制箭
def draw_arrow():
    pygame.draw.rect(screen, BLUE, (arrow_x, arrow_y, arrow_width, arrow_height))


# 检查箭是否击中靶子
def check_hit():
    global target_hit, hit_count, arrow_count
    if not target_hit and arrow_x + arrow_width >= target_x and arrow_y + arrow_height >= target_y and arrow_y <= target_y + target_height:
        target_hit = True
        hit_count += 1
        # 播放音效
        hit_sound.play()


# 显示箭支数和成功率
def show_hit_info():
    global arrow_count, hit_count
    font = pygame.font.SysFont(None, 25)
    text = font.render("Hits: " + str(hit_count), True, BLACK)
    screen.blit(text, (10, 50))
    if arrow_count > 0:
        hit_rate = hit_count / arrow_count * 100
    else:
        hit_rate = 0
    text = font.render("Hit Rate: {:.2f}%".format(hit_rate), True, BLACK)
    screen.blit(text, (10, 90))


# 显示击中次数
def show_arrow_count():
    font = pygame.font.SysFont(None, 25)
    text = font.render("Arrows: " + str(arrow_count), True, BLACK)
    screen.blit(text, (10, 10))


# 主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE and not arrow_fired:
                arrow_fired = True
                arrow_count += 1
                shoot_sound.play()

    # 清屏
    screen.fill(WHITE)

    # 绘制靶子
    draw_target()

    # 绘制箭
    draw_arrow()

    # 移动靶子
    target_y += target_speed * clock.get_time()
    if target_y <= 0:
        target_speed = abs(target_speed)
    elif target_y >= SCREEN_HEIGHT - target_height:
        target_speed = -abs(target_speed)

    # 移动箭
    if arrow_fired:
        if arrow_direction == "right":
            arrow_x += arrow_speed * clock.get_time()
            if arrow_x >= SCREEN_WIDTH:
                arrow_fired = False
                target_hit = False
                arrow_x = 50
        elif arrow_direction == "left":
            arrow_x -= arrow_speed * clock.get_time()
            if arrow_x <= 0:
                arrow_fired = False
                target_hit = False
                arrow_x = 50

    # 检查箭是否击中靶子
    check_hit()

    # 如果箭击中靶子,显示成功,并计数
    if target_hit:
        font = pygame.font.SysFont(None, 36)
        text = font.render("Hit!", True, GREEN)
        screen.blit(text, (SCREEN_WIDTH // 2 - 50, SCREEN_HEIGHT // 2))
        target_y = 0
        target_speed = random.uniform(0.1, 0.9)

    # 显示击中次数
    show_hit_info()

    # 显示箭支数和成功率
    show_arrow_count()

    # 更新画面
    pygame.display.flip()

    # 控制帧率
    clock.tick(FPS)

截图:

运行:

 

射箭游戏

改进:

可以增加射箭的力度输入等来增加乐趣与难度。

基于pygame的射击小游戏制作(二)射击子弹 在本篇文章中,将学习如何创建子弹移动的元素,如何在屏幕中让子弹向上飞驰,如何删除超过屏幕边界的子弹。 1.编程思路 1.1 创建一个子弹 功能描述:玩家将按空格键时发射子弹,子弹在屏幕中向上穿行,抵达屏幕边缘后消失。 在settings.py文件中,的init方法中加入子弹(Bullet)的值:速度,宽度、高度、颜色、允许发射的最大子弹数量 #子弹设置 self.bullet_speed_factor = 1 self.bullet_width = 3 sel 阅读详情

相关推荐

程序员如何用工程思维学射箭:从技术栈选型到系统调试

在软件工程中,技术栈选型、系统设计和调试优化是构建稳定应用的核心。这些概念不仅适用于代码世界,也能迁移到物理技能的学习中。以射箭为例,弓的类型选择如同编程语言与范式的选型,反曲弓、复合弓、传统弓分别对应着清晰上手、开箱即用和纯粹自由的开发体验。箭的参数化配置则类似服务器参数的精细调整,挠度匹配、材质选择直接影响“数据包”的交付精度。更重要的是,构建稳健的射箭动作如同编写鲁棒的函数,需要明确的输入、稳定的处理和一致的输出。通过站姿、握弓、靠位等“常量定义”确保动作一致性,再通过瞄准器调试进行“参数校准”,这正

weixin_33417488的博客 328

【Python小游戏】《弓箭手生存小游戏》怎么玩?好玩有趣的Python休闲类战斗射箭射击卡通游戏攻略已上线,手把手教你做一个人见人爱的射手小骑士~(附源码)

这个游戏十分锻炼手速和反应能力,小编已经放心大胆的交给我侄子玩儿了呢!今天的内容就到这里结束了哈,老规矩,源码基地滴滴我即可获取完整的免费资料哦~

顾木子吖的博客 1661

康耐视外包转二开:从现场调试到视觉软件工程师的进阶路线

二次开发是制造业数字化浪潮中的核心能力,它基于成熟平台进行定制化扩展,让工程师能快速响应产线需求。无论是ERP系统、CAD工具还是机器视觉平台,二次开发的底层逻辑都是理解平台能力、调用接口、实现业务闭环。在机器视觉领域,康耐视(Cognex)作为行业头部厂商,其外包岗位看似只是现场调试,实则接触的是相机、光源、VisionPro工具链和整套成像逻辑。通过主动积累项目经验、理解坐标变换与标定原理、补足C#编程和通讯知识,外包工程师完全可以将日常“脏活累活”转化为二开岗位的核心竞争力。从调参到写代码,从操作员到

weixin_28292761的博客 222

Unity射箭小游戏制作

射箭是一款益智游戏,玩家需要在界面中点击右键来进行视角移动,分别点击W、A、S和D来进行人物前后左右的移动,玩家可在预设的两个射击点长按左键进行蓄力,松开左键进行射击,箭在射中靶子后就能得分。

qq3098320650的博客 399

亚马逊棋入门指南:规则、练棋路径与AI引擎解析

抽象策略棋类游戏往往以简单规则承载复杂博弈,从国际象棋到围棋无一例外。而亚马逊棋更是将“每回合移动+射箭”的极简规则,演化为一场对有限空间的瓜分战。它的分支因子远超国际象棋,中盘常达300以上,这让传统棋类AI的搜索评估面临巨大挑战。理解亚马逊棋的移动与射箭逻辑,不仅有助于提升空间规划与残局计算能力,也能为设计博弈引擎评估函数提供有趣样本。无论是线上对弈平台还是开源项目,都能支撑爱好者快速上手。本文将从规则细节、练棋路径到AI技术视角,系统梳理实战工具与方法。

weixin_33507732的博客 148

C++亚马逊棋游戏系统:从源码解析到AI实现与二次开发

棋类游戏开发是学习编程算法与软件工程的重要实践领域,其核心在于将游戏规则转化为可执行的计算模型。通过数据结构(如二维数组、向量)表示棋盘状态,并运用搜索算法(如极大极小算法)实现智能决策,是构建棋类AI的基础原理。这类技术在游戏开发、人工智能教学及算法竞赛中具有广泛的应用价值。本文以亚马逊棋项目为例,深入探讨了其**游戏逻辑层**的实现与**Alpha-Beta剪枝**优化,展示了如何从源码编译、架构解析到功能扩展的全过程,为C++学习者与游戏开发爱好者提供了一个完整的实战案例参考。

weixin_34205826的博客 324

12岁的少年教你用Python做小游戏

本文由 伯乐在线 - 伯乐在线读者 翻译自 Julian Meyer。转载请参见文章末尾处的要求。 【感谢@贱圣OMG 的热心翻译。如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线。】 你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂! 在这个教程里,你要学做一个叫《兔子和獾》的塔防游戏,兔子作为英雄,需要在城堡里抵御獾的进攻。

chengfangang的专栏 2280

自动驾驶开发者必看:nuscenes数据集23类物体标注全解析(附避坑指南)

本文深入解析nuscenes数据集的23类物体标注系统,为自动驾驶开发者提供全面的标注规范解读和实战避坑指南。涵盖多模态数据组织、类别细分规则、属性系统应用技巧以及标注质量验证方法,帮助开发者高效利用这一标杆数据集提升模型性能。

weixin_29041767的博客 256

加密货币和交互性娱乐行业:为什么游戏领域非常有前景?

为什么游戏是一个令人振奋的领域?

BosenDaniel的博客 258

AI初识—LLM、Ollama、Llama都是些个啥?

LLM指的是大语言模型(Large Language Model),是一种基于深度学习的模型,能够理解和生成自然语言。它通过大量文本数据进行训练,具备了理解上下文、生成连贯文本和回答问题的能力。著名的LLM包括OpenAI的GPT系列和Google的BERT。在AI技术快速发展的背景下,LLM、Ollama和Llama代表了现代自然语言处理的不同方面。LLM为我们提供了强大的语言理解能力,Ollama为模型的部署和管理提供了便利,而Llama则在效率和多样性上不断推进。

小蜗牛的珍贵百宝箱 4629

正负数据如何归一化_生信干货 | LC-MS代谢组学QI软件下机数据代谢物筛选和归一化如何做?...

上海·2019第一届多层组学前言技术发展华东区客户研讨会倒计时1天LC-MS非靶向代谢组学数据下机啦~~拿到一堆数据怎么办?不会高端代码,也不会自己写脚本,我怎么处理数据?​本期小编带来了LC-MS非靶向代谢组学下机数据处理实用干货,包括:下机定性结果表格的解析、代谢物筛选如何做?以及定量数据如何做归一化?实用干货,赶紧来抢~~话不多说,赶紧来学习吧~~非靶向LC-MS代谢组学的分析流程LC-MS...

weixin_36441329的博客 2983

VR设备长期价值指南:如何选购不落灰的虚拟现实装备

虚拟现实(VR)技术通过模拟三维环境,为用户提供沉浸式交互体验,其核心原理在于头戴显示设备、空间定位与动作捕捉系统的协同工作。这项技术的价值不仅在于硬件参数,更在于其作为下一代人机交互平台的潜力,广泛应用于游戏娱乐、教育培训、工业设计和远程协作等场景。要实现VR设备的长期使用价值,关键在于选择内容生态健康、系统兼容性强的产品。内容生态决定了设备能否持续提供新鲜体验,而系统兼容性则保障了设备能够接入更广阔的PC VR资源库,避免因平台封闭而快速过时。对于追求长期高回报的用户,应重点关注设备的社区活跃度、模组支

weixin_33875564的博客 287

Gemini 2.5 Pro国内免魔法直连教程:5分钟搞定专业级PPT图表(附折线图/柱状图案例)

本文详细介绍了如何利用Gemini 2.5 Pro快速生成专业级PPT图表,包括折线图和柱状图等常见商业图表。通过自然语言交互和智能图表生成功能,用户可以在5分钟内完成数据可视化,大幅提升工作效率。文章还提供了实战案例和高级技巧,帮助用户轻松应对各种商业场景需求。

weixin_30733003的博客 460

HY-Motion 1.0应用场景:从游戏到影视制作

本文介绍了如何在星图GPU平台上自动化部署HY-Motion 1.0:基于流匹配的3D动作生成大模型。该平台简化了部署流程,用户可快速利用此镜像,通过文本描述一键生成专业级3D骨骼动画,显著提升游戏角色动作设计、影视动画预演等场景的内容创作效率。

weixin_30978239的博客 350

零基础教你学RDMA驱动开发--第8篇:队列对(QP)、完成队列(CQ)与工作请求(WR)机制剖析

本文深入剖析了RDMA(远程直接内存访问)中的核心机制:队列对(QP)、完成队列(CQ)和工作请求(WR)。QP作为通信端点包含发送队列(SQ)和接收队列(RQ);WR是用户提交的操作指令,转换为工作队列元素(WQE)后由网卡异步执行;CQ则提供完成通知机制。文章详细介绍了三者的协作原理,包括QP状态机、WR提交方式、CQ轮询机制,以及关键的信号控制技术(Signaled Mode)来优化性能。同时对比了SEND/RECV和RDMA WRITE两种模式的差异,提供了调试技巧和最佳实践。这些机制共同构成了RD

amy_mhd的博客 156

基于DeepFashion2数据集的服装检测系统:YOLOv11实现与UI界面开发

80万张高质量服装图片13个服装类别:短袖上衣、长袖上衣、短袖外套、长袖外套、背心、短裤、长裤、短裙、长裙、袜子、帽子、鞋、包包每张图片包含边界框、分割掩码、landmarks等标注多样化的场景:商业图片、街拍图片、消费者图片更高效的Backbone网络改进的特征金字塔网络(FPN)自适应训练样本分配策略更精确的损失函数以下是YOLOv11的模型定义:python复制下载# 模型参数self.nc = nc # 类别数。

YOLO 455

体育训练软件测试:AI分析运动员数据的可靠性深度评估

AI体育测试正经历从经验训练到数据驱动的范式变革。测试验证需关注三个维度:1)数据采集层验证传感器精度和环境适应性;2)分析层确保动作识别准确率>95%,指标误差≤1.5°;3)应用层验证实时反馈延迟(战术指导≤500ms)和训练建议有效性。专项测试需针对不同运动特点设计,如足球战术分析准确率、射箭力度偏差≤±0.3kg等。同时要重视数据匿名化、算法公平性等伦理合规要求。建议建立包含硬件校准、算法验证和应用反馈的三级持续验证体系,重点关注动态环境模型衰减和版本升级后的指标漂移检测。

2501_94261392的博客 322

【网络与爬虫 53】Scrapy-Prometheus实战指南:打造企业级爬虫监控体系的终极解决方案

本文深入探讨Scrapy-Prometheus集成技术,通过费曼学习法从监控痛点出发,详细讲解如何在Scrapy爬虫中集成Prometheus指标收集系统。涵盖从基础配置到企业级监控体系的完整实战指南,帮助开发者构建可观测性强、可维护性高的分布式爬虫监控平台,实现爬虫性能的精准监控和智能告警。

熵数实验室 1584

高延迟游戏PvP制胜策略:从信息差攻击到逆境工程思维

在网络延迟和系统性能优化中,**延迟**和**信息差**是核心挑战。延迟导致数据同步滞后,信息差则源于数据不一致性。其技术价值在于,通过理解并利用这些约束,可以设计出更鲁棒的系统架构和交互策略。在应用场景上,这不仅体现在**高延迟PvP游戏**中,通过预判和区域覆盖攻击来制造优势;更广泛适用于遗留系统优化、弱网络环境开发等工程实践,体现了在资源受限条件下寻找最优解的通用解题思路。

weixin_33882452的博客 415

在 Windows 11 下运行 OminiParse V2,详细教程【含问题解决细节】

OmniParser V2 是微软推出的 GUI 智能体解析工具,可将屏幕截图转换为结构化元素,帮助 LLM 理解和操作界面。它在检测小图标和推理速度上显著提升,延迟降低 60%,并支持多种 LLM。

简简单单Onlinezuozuo 1090

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

发软著真的很难??——如何像印钞一样生产软件著作?

虚假的基金:今天又亏了两个点真正的基金:打开版权局,哈哈又下证了,又可以拿学校和合伙人的奖金了鸽了很久的软著制造机系列终于来了,话不多说,直接上图:这是本月下的第四件,已经是第23件了,上半年和下半年写的东西估计会以这个为结尾,很可能不会再有产出了。真的很难吗?真的很难吗?我觉得未必,如果看过我之前的文章的朋友可能还记得我曾提到过:“有价值的是前三个软著”。因为软著本身是极容易产出的东西,它或许跟几种专利能五五开,但跟论文啥的绝对差了几十个量级。

2302_82050581的博客 1393

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

赛场竞技与场馆运营一体化管控 | 图扑数字体育合集

本文介绍图扑数字体育依托自研 HT 轻量化数字孪生平台,以 “感知 — 建模 — 仿真 — 控制” 一体化闭环,赋能智慧体育。其技术应用于奥运竞技仿真、冰壶互动体验、奥运文化数字化留存,还实现场馆智能运营,助力体育产业数字化转型,技术已获权威认证与工程验证。

HT for Web 3D 410

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

RL 大模型逆袭!搞定真实软件工程任务,成功率从 20% 飙到 39%,无需教师模型蒸馏

当前,把强化学习(RL)用在大型语言模型(LLM)上的研究大多还停在“单回合”任务——比如做一道数学题或一次性生成一段代码。这类任务虽然也能被包装成多回合的马尔可夫决策过程,但本质上环境几乎不给任何中间反馈,属于最“退化”的多轮交互。然而,像软件工程(SWE)这样的真实场景,需要与“有状态”的环境进行丰富的多轮交互:每执行一步,环境都会给出复杂且信息量不小的回应。

王哥儿聊AI的博客 1137

Unity策略模式实战:解耦游戏角色行为与AI状态机设计

在软件工程中,设计模式是解决常见问题的可复用方案,其中策略模式专注于将算法或行为封装成独立对象,使其能够相互替换。其核心原理在于定义一个策略接口,让具体策略类实现该接口,而上下文类则持有接口引用,从而在运行时动态切换行为,实现开闭原则。这一模式的技术价值在于显著提升代码的模块化、可测试性和可维护性,尤其适用于行为频繁变化的场景。在游戏开发领域,策略模式广泛应用于角色技能系统、AI行为决策、资源加载策略等模块。本文以Unity引擎为例,深入探讨如何利用策略模式结合MonoBehaviour组件化架构,实现游戏

weixin_34262482的博客 374

软件设计实战指南:从模糊需求到可落地的技术方案

软件设计不是对SOLID、DDD等抽象原则的教条复刻,而是将业务诉求转化为可测量、可验证、可证伪的技术契约的过程。其核心原理在于目标分层(业务层→系统层→实现层)与途径匹配(约束驱动的暴力解法),技术价值体现在降低交付风险、控制复杂度膨胀、提升线上稳定性。典型应用场景包括高频变更的促销规则配置、读多写少的商品详情页缓存、跨系统强事务保障、海量IoT日志查询及不稳第三方API集成。本文聚焦真实项目中的目标拆解方法、五类高频场景的参数化选型策略,以及四张驱动表构成的设计闭环机制。

a6t2007的博客 581

想做好软件测试,需要具备什么能力呢?送你必备的四点能力

和大家聊下想要成为QA需要具备什么能力。 第一点是产品感,什么是产品感呢,产品感是不是真实存在的东西呢?

公众号:【伤心的辣条】 306
上一篇: 知识价值2-什么是IDE?新手用哪个IDE比较好?
下一篇: 机器学习12-基本感知器
dracularking
博客等级 码龄20年 1592粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dracularking

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值