当前位置: 首页 > news >正文

程序设计小学期小计

程序设计小学期小计

昨天奋斗到晚 12 点,算是完成了小游戏的所有功能,小游戏的主体流程算是全部完成了。写一篇小计记录一下。

截至目前,这个项目已经有了 \(233\) 次提交,若干次的合并,构筑起了这个小游戏。

过程

我们组当初提出制作 3D 的网页游戏,这是往届前所未有的,不能用 unity, ue 这些现成的高级引擎,只能自己找一些 npm 的 3D 库来玩。

最后我们使用了 three.jsrapier,前者提供了 3D 场景的渲染,后者提供了物理世界,解决碰撞之类的问题。这两个包算是网页的基础了。

我们的故事设定是在一个时间静止的世界,因此光线是不需要的,正好省去了做模型贴图的成本。

扫描器

img

我们参考了 lidar 这个游戏的显示逻辑,实现了一个类似的扫描系统。扫描系统是全项目修改最多的地方:

  • 扫描系统的前身是用 AI 实现的一个系统,作为 demo。
  • 后来我用精灵模型写了一个扫描系统,但性能非常差劲,几百个点就撑不住了。
  • 后面我们仔细分析了 demo 的实现,发现 demo 用的是网格模型 Points 绘制点阵,这个模型只需要一个 3D 元素,就能绘制一个高密度的点阵,并且性能开销几乎没有,连续写 200w 个点都不是问题。
  • 后面我们发现实现的扫描逻辑不太正常,最后又参考球面散射做出了最终的扫描器。

终端和旁白

整个游戏的剧情提示由终端旁白引出,这里也下了一些功夫。组员提议制作一个类似 bash 的终端系统,不过是阉割的,只接受特定命令,没有参数之类。你可能在想接受命令后的逻辑怎么写,每个命令写一大堆不成史山了,别急,后面的架构会解答。

字幕上,我们不想做成文字剧情游戏那样单独的对话框,还需要按键确认,直接做成电影式的底栏文字,再配个音。配音我们模仿的 史丹利的预言 的旁白音色,用 ai 配了旁白的语音。

img

img

Layer 和 Script

游戏的主要逻辑由 Layer 层和 Script 层支撑。

游戏过程中我们会弹出许许多多的窗口,例如暂停,终端页面等等,每个层之间的逻辑关系很重要,例如:

  • 这个层盖住了另一个层,那每个层的销毁都需要按顺序执行,直接写乱套了。
  • 一个层添加时,输入就要管理,输入是给这个层还是给上一个层。

于是我们写了 Layer ,用栈存储当前存在的层,输入上从栈顶到栈底依次处理输入,若某一层接受了这个输入,那这个输入就不用再下传了。

并且这样实现,销毁也很容易,只需要在 Layer 中把对应层删了就行了。

再说到 Script ,这相当于一个脚本执行器,可以认为我们内嵌了一个控制台,在执行一些逻辑时,你可以像控制台那样把命令编码好,然后直接执行。这样每个方法的实现只需要写几个重要指令,很整洁。

一些感悟

一些 AI 合作

这个项目大规模使用了 Copilot。

小学期正真体会到了 AI 的强大,狂用 AI 以至于这个月的高级请求都用空了。

例如修 bug,写 css,甚至做一个具体的模块出来,AI 的第一版代码都能写的非常好,只需要提出一些要求,修改一些细节就可以了。

我印象比较深的是做结局页面,我是不会写 css 的,整个结局的模块逻辑全是 AI 写的,并且按照我的要求留下了接口和一些参数设计。

AI 写的页面已经有模有样了,他生成了能分多个章节隔章显示的文本显示,还附带了打字机特效,很震撼。

最让我刮目相看的,是 AI 可以自行阅读整个项目的框架,知道一个模块应该如何使用核心调用。例如这个结局框架,他会发现核心有一个 layer 层,需要实现向 layer 丢东西,析构,处理 input 等等核心要求,写出一个符合核心的页面出来,很厉害。

史山

最开始,我们组期望手搓一个引擎出来,但最后以失败告终。

核心的内容非常难设计,必须要有极其长远的打算,核心一旦写好,后面就不可能被更改了。

我们小组在第二周还重构了,全部推翻重来重写了核心。

所以工程开发是一个大学问,还需要很多的探索,像我这种打竞赛的就只会 “面多加水,水多加面”,最后造史了。

结语

开发的道路,道阻且长吧。

我现在都不想再看小学期那坨东西(雾),还有很多东西需要学习。

相关文章:

程序设计小学期小计

小学期游记程序设计小学期小计 昨天奋斗到晚 12 点,算是完成了小游戏的所有功能,小游戏的主体流程算是全部完成了。写一篇小计记录一下。 截至目前,这个项目已经有了 \(233\) 次提交,若干次的合并,构筑起了这个小游戏。 过程 我们组当初提出制作 3D 的网页游戏,这是往届前…...

3dma渲染噪点成因排查及优化方案 - 详解

3dma渲染噪点成因排查及优化方案 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !importa…...

hadoop配置日志聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。日志聚集功能好处:可以方便地查看到程序运行详情,方便开发调试。 注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。[hadoop@hadoop101(192.168.0.101) /opt/modul…...

vxe-tree-select 树形下拉框当使用懒加载数据时如何回显

vxe-tree-select 树形下拉框当使用懒加载数据时如何回显 当使用懒加载或者当某个选项被删除时,显示自定义回显;比如使用懒加载树列表,由于数据未被加载,这时候已选的数据就不能被回显,导致显示了 value值,而不是 label。 还有一种场景就是组织架构人员选择,当选择某个人…...

GPT PMBR 大小不符解决方法

GPT PMBR 大小不符解决方法服务器输入fdisk -l 报GPT PMBR 大小不符(104857599 != 209715199),将用写入予以更正。The backup GPT table is not on the end of the device. This problem will be corrected by write. 通过采用parted -l就行修复,如下图 修复后,fdisk -…...

CodeFormer一款既能图像修复、还能视频增强去码的AI软件(下载介绍)

CodeFormer是一款强大的人工智能工具,主要用于图像和视频的修复和增强。它基于深度学习技术,特别是人脸复原模型,可以轻松修复和增强面部图像,提升照片和视频的质量和视觉效果工作原理 1、通过自动编码器实现人脸的变换,包括色彩化、清晰化、去马赛克修复等功能 2、采用了…...

PCB的导线电阻阻抗批量自动计算EXCEL表格工具 公式

https://wwqx.lanzoul.com/iv1Fg36h5xwh 密码:hcko...

微信协议开发个微API

微信协议开发个微API常见开发功能: 好友管理: 维护好友列表:包括添加、删除、修改好友信息。 分组管理:创建、编辑、删除标签,以便更好地组织好友。 消息管理: 信息发送:支持发送各种类型的消息,包括文本、图片、名片、动图表情、小程序、文件、视频和URL链接及防撤回等…...

Milvus Lite

Milvus (标准版):就像一个部署在专业机房、由多台服务器组成的大型数据中心。它性能强大、稳定可靠、支持高并发,是生产环境的不二之选。部署它,通常需要使用Docker或在Linux服务器上进行。Milvus Lite (轻量版):就像一台功能强大、开箱即用的个人开发笔记本。它把数据中心…...

如何解除 pip install 安装报错 ModuleNotFoundError: No module named ‘win32api’ 问题

如何解除 pip install 安装报错 ModuleNotFoundError: No module named ‘win32api’ 问题pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&quo…...

hbase学习一

什么是HBase? HBase是一个基于HDFS的、分布式、可扩展、面向列的NoSQL数据库。它起源于Google的BigTable论文,是Apache Hadoop生态系统的重要组成部分,专门用于处理海量数据的随机、实时读写访问。为什么需要HBase? Hadoop HDFS适合批处理,但无法进行随机读写。MapReduce适…...

【光照】[漫反射diffuse]以UnityURP为例

这篇文章介绍了Unity URP渲染管线中漫反射光照的实现原理和流程。主要内容包括:1. 漫反射遵循兰伯特定律,通过法线准备、光源方向计算、点积运算等步骤实现;2. URP的具体实现细节,如法线处理、光源计算和多光源支持;3. 关键代码示例,包括漫反射计算和完整光照流程;4. 快…...

OI线下比赛注意事项

这篇写挺好 https://www.cnblogs.com/dengstar/p/17069134.html...

n8n实践-使用n8n搭建一个定时发送天气预报邮件的工作流

前言传统的定时任务,一般是使用linux cron定时运行某个位置的某个脚本。需要准备各种运行环境; 脚本比较分散,管理起来相对麻烦; 需要有一定的代码能力,比如常见的shell、python等等; 不方便接入ai, 更换ai也比较麻烦。工作流的好处是:把定时任务、触发任务等统一管理; …...

Cython-编程学习指南第二版-全-

Cython 编程学习指南第二版(全)原文:zh.annas-archive.org/md5/0bc691743f26fcdcabcb6840b706a834 译者:飞龙 协议:CC BY-NC-SA 4.0前言 Cython 是一个工具,它使得编写 Python 的原生扩展变得和编写 Python 代码一样简单。对于那些不知道的人来说,你可以将 Python 模块实…...

印度尼西亚股票数据API对接实现

环境准备 首先安装必要的依赖包: pip install requests websocket-client pandas numpy基础配置 import requests import json import websocket import threading import time from datetime import datetime# API配置 API_KEY = "YOUR_API_KEY" # 替换为您的实际…...

OpenBMB 发布无分词器 TTS VoxCPM;儿童口语硬件 Dex 融资 480 万美元:拍摄真实物体,对话学习外语丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度的观点」、「有看点的活动」,但内容仅代表编辑的个人观点…...

一天一款实用的AI工具,第1期,AI标题生成工具

本期介绍的是一款专业的标题生成工具,它能帮你产出高质量标题,让点击率提升,让内容被看见。现实问题 在内容创作的世界里,有句话特别扎心: 好的标题=成功的一半。 很多创作者都遇到过这样的困境: 花了一下午写好一篇文章,结果标题平平无奇,点击量惨淡。 明明内容不错,…...

重组蛋白表达避坑指南

重组蛋白表达避坑指南重组蛋白表达是分子生物学、生物技术以及生物医学研究中非常基础却经常“出问题”的环节。一个合适的蛋白表达方案,不仅要能产生足够的产量,还要确保蛋白正确折叠、具有功能、具有良好的纯度与稳定性。一、选择表达系统与宿主:第一个关键决策常见问题不…...

易被忽略的vim中视图模式

常见的都是vim三种模式,但视图模式也不可忽略,主要进行批量操作在 Vim 中,可视模式(Visual Mode)是一种强大的文本选择和编辑模式,允许你高亮选中一段文本,然后对其进行操作(如复制、删除、替换、注释等)。 一:三种可视模式1.字符可视模式 用途: 精确选择字符或单词…...

电商核心业务 - 指南

电商核心业务 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14p…...

一言

一些日常的感想,为了节约时间,为了不暴露太多东西,为了不挑起矛盾,内容会很简洁,在合适的时候公布详情。9.17 说好的向阳而生呢?冷静啊,兄弟。 9.18 你们不相信我,我必将证明我,夺回属于我的荣耀。...

ai

https://qsqs.life/login?redirect=/system/dashboard本文来自博客园,作者:zjxgdq,转载请注明原文链接:https://www.cnblogs.com/zjxzhj/p/19098509...

LlamaIndex 项目深度技术分析 - 详解

LlamaIndex 项目深度技术分析 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important;…...

深入解析:css消除图片下的白边

深入解析:css消除图片下的白边pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font…...

linux增加网卡ip地址

linux增加网卡ip地址example ip addr add 192.168.5.124/24 dev eth0 label eth0:5 ifconfig eth0:5 up ip addr del 192.168.1.100/24 dev eth0 example ip addr add 192.168.10.199/24 dev eth0 label eth0:10 route add default gw 192.168.10.254reference: https://blog.c…...

Python 包与环境管理简史:从混乱到优雅

自动包管理工具的先驱:easy_install 在一切规范化工具出现之前,Python 的包管理是相当原始的。开发者们需要把第三方库的源码下载下来,手动放到项目目录里。 为了解决自动安装包的问题,easy_install 应运而生。 2004年:easy_install——从 0 到 1 的突破 easy_install 是 …...

qoj853 Flat Organization

SOLUTION FROM WUMIN4 题意 给出一个 \(n\) 个点的带权竞赛图(定向完全图),你可以进行任意次操作,每次操作反转一条边,代价为边权,求使得图强连通的最小代价和与方案,或输出无解。 \(n\le 2000\)。 思路 我们先考虑算出这张图的所有 SCC 并进行缩点,容易发现缩点后图是…...

shell命令中循环执行操作的命令

shell命令中循环执行操作的命令reference: for i in $(seq 1 10000); do echo "Iteration $i" && echo "Iteration $i"; done for i in $(seq 1 10000); do cat /sys/class/net/eth0/carrier && sleep 1; done for i in $(seq 1 999999); …...

2025年9月中国数据库排行榜:达梦挺进榜眼位,崖山首入前十强

9月墨天轮排行榜解读已出炉!本月前十变动较大,老将突围、新秀崛起,达梦凭借强劲势头跃升至第二位、TiDB排名上升、崖山首次闯入前十,此外还有一些产品表现亮眼!本月墨天轮社区的中国数据库排行榜再起波澜。达梦凭借强劲势头跃升至第二位,崖山则首次闯入前十,既展现了“老…...

基于QEMU模拟器搭建Builtroot下的QT开发环境

基于QEMU模拟器搭建Builtroot下的QT开发环境https://www.cnblogs.com/arnoldlu/p/17250728.html...

vlan

vlanhttps://zhuanlan.zhihu.com/p/385949949...

OpenSSH漏洞修复

前期准备 (先使用Telnet远程连接工具,连接服务器,确保Telnet连接正常,SSH连接后进行漏洞修复升级(防止修复失败,导致远程连接无法连接时,可以通过另一个远程工具连接进行恢复) telnet安装与开启:https://www.cnblogs.com/aerfazhe/p/19098482 准备离线升级安装包 Open…...

windosw 配置arp绑定

windosw 配置arp绑定配置静态arp绑定 netsh interface ipv4 add neighbors "以太网" "192.168.98.233" "aa-bb-cc-dd-ee-01" store=active...

2024年最受欢迎的渗透测试工具盘点

本文详细介绍了2024年最受欢迎的渗透测试工具,包括Certipy、BloodHound、Impacket等社区工具和CloudFox、Broken Hill等Bishop Fox自研工具,涵盖网络、云环境、API和LLM安全测试领域。我们最喜爱的渗透测试工具:2024版 又到了黑客工具盘点时间!我们征集了专家团队的意见,为…...

Unity学习 5.6 FBX

FBX保存了模型和纹理,没有贴图,贴图作为静态资源单独存在 FBX的使用 演示:选择*.fbx文件,直接拖到层级窗口 观察节点图标 选中节点,观察Inspector中的操作按钮select可以focus资源路径贴图路径有的模型需要贴图文件 贴图文件路径是约定好的与fbx相同目录,或者同级Texture…...

SEERC 2022 题面简要翻译

A. Append / 附件 你有两个字符串 \(s,t\),同时你还有一个字符串数组,这个数组中的第 \(i\) 个字符串是由 \(i\) 个 \(s\) 拼接而成,现在问最小的 \(p\) 使得 \(t\) 是这个字符串数组的第 \(p\) 个字符串。 \(1 \le |s|,|t| \le 5 \times 10^5\)。 时间限制:\(1\text{s}\)。…...

【稳定检索、线上线下参会、马理工主办】第十一届建筑、土木与水利工程国际学术会议(ICACHE 2025)

快速见刊,检索稳定! 第十一届建筑、土木与水利工程国际学术会议(ICACHE 2025) 2025 11th International Conference on Architectural, Civil and Hydraulic Engineering (ICACHE 2025) 在这里看会议官网详情 大会时间:2025年10月17-19日 大会地点:马来西亚 新山 截稿时…...

telnet安装与开启

在 CentOS 中,Telnet 是一种远程登录协议,默认情况下是关闭的。以下是开启 Telnet 服务的步骤。 # 首先检查是否已安装相关软件包 rpm -qa | grep telnet rpm -qa | grep xinetd # 以下命令安装: yum install -y telnet-server xinetd # 启用并启动服务 # 设置 Telnet 和 xi…...

20250917NOIP#21

20250917NOIP#21 T2 题意: 给定一个 \(n\) 个点的树,点上有一个非负整数点权 \(a_i\),表示这个点需要在操作序列中正好被经过 \(a_i\) 次,一次操作为选择两个顶点 \(u,v\) ,从 \(u\) 经过简单路径走到 \(v\) ,求最小操作数。 思路: 见到这个题第一眼想到贪心,可以具象化…...

又一个新项目完结,炸裂!

这是一套以 AI 开发实战 + 后端架构设计 为核心的项目教程。大家好,我是程序员鱼皮。又经过了一段时间的爆肝,我在编程导航的保姆级新项目教程 —— AI 零代码应用生成平台,完结啦! 这是一套以 AI 开发实战 + 后端架构设计 为核心的项目教程,基于 Spring Boot 3 + LangCha…...

阿里云防刷神器ESA搞活动免费领取

最近使用阿里云的边缘安全加速ESA,防刷、访攻击。 所有套餐支持一键防刷、安全事件分析、频次控制等。 最近搞活动,可以不限次数领取基础版代金券,免费领取链接:http://s.tb.cn/e6.0Fu67m测速效果...

报错TypeError: Unknown file extension .ts - broky

当出现这个TypeError: Unknown file extension ".ts"这个报错的时候,可以看看package.json里没有是不是有"type": "module"这个字段,有的话需要去掉...

抗 IgE 单克隆抗体联合变应原免疫治疗(AIT):过敏性疾病治疗的协同新策略

过敏性疾病(如哮喘、慢性荨麻疹、过敏性鼻炎)的发病率在全球范围内持续攀升,传统治疗手段(如抗组胺药、糖皮质激素)虽能缓解症状,却难以从根本上改变机体的过敏状态。变应原免疫治疗(AIT)作为唯一能 “重塑免疫耐受” 的病因治疗方法,通过逐渐增加变应原暴露剂量,诱导…...

php怎么关闭数据库连接

在PHP中,关闭数据库连接是一个很重要的步骤,它可以释放资源并防止不必要的连接浪费。下面是一些关闭数据库连接的常见方法:1. 使用mysqli_close()函数关闭连接:“`$conn = mysqli_connect($servername, $username, $password, $dbname);// 执行完数据库操作后,关闭连接mys…...

代码分析之污点分析 - 教程

代码分析之污点分析 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-siz…...

设计模式 7章

软件设计7大原则 开闭原则:是原则,在设计软件时保持扩展的开放性和修改的封闭性 里式替换原则:要求在继承时不要破坏父类的实现 单一职责原则:要求类的功能要单一 接口隔离原则:要求接口的设计要精简 依赖倒置原则:要求面向抽象编程,即面向接口编程 迪米特原则:提供一种…...

磁盘存储简介-轮子

https://blog.csdn.net/user2025/article/details/142364353...

洛谷 P1967 [NOIP 2013 提高组] 货车运输 题解

洛谷 P1967 [NOIP 2013 提高组] 货车运输 题解原题链接:货车运输 kruskal重构树+LCA做法,树剖不想写 很容易发现原图跑最短路可以解,但是复杂度难以承受,所以考虑如何简化该图。 发现原图边权维护的应该是(u,v)的最小值,并且最优选择是这个最小值最大,所以如果有多条(…...

cherry-pick 合并曾今某一次提交

确认当前分支 git checkout test 找到要合并提交的哈希值 git log --oneline 太长的话点击q 退出 切换到我们要合并的分支 git checkout dev 使用 cherry-pick 应用指定提交 git cherry-pick <提交哈希1> 推送到远程分支 git push origin dev...