程序设计小学期小计

news/2025/9/18 13:48:57/文章来源:https://www.cnblogs.com/-cchen-/p/19085358

程序设计小学期小计

昨天奋斗到晚 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 等等核心要求,写出一个符合核心的页面出来,很厉害。

史山

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

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

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

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

结语

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

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

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

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

相关文章

企业级实时消息推送系统的架构设计,一文即懂!

企业级实时消息推送系统的架构设计,一文即懂!如果你是技术负责人,该如何搭建一套能解决这些问题的企业级统一消息推送平台?今天我们就从核心挑战出发,拆解一套可落地的统一推送服务架构方案。本文由腾讯云架构师技…

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

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

hadoop配置日志聚集

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

高级版Duplicate Same Files Searcher v10.7.0:秒扫全盘重复档神器 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

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

vxe-tree-select 树形下拉框当使用懒加载数据时如何回显 当使用懒加载或者当某个选项被删除时,显示自定义回显;比如使用懒加载树列表,由于数据未被加载,这时候已选的数据就不能被回显,导致显示了 value值,而不是…

如何解除 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 !importa…

在嵌入式 Linux 上使用容器 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:基于RSim的域控制器HIL测试系统设计方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:新手怎么利用Qt连接汇川Easy系列的小型PLC

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

hbase学习一

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

Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

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

【从UnityURP开始探索游戏渲染】专栏-直达漫反射基本流程 漫反射遵循兰伯特定律(Lamberts Cosine Law),其核心流程如下:‌法线准备‌:获取表面法线向量(通常来自顶点法线或法线贴图) ‌光源方向计算‌:确定光源到表…

OI线下比赛注意事项

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

3D影像地形图的制作:利用ArcGISPro - 指南

3D影像地形图的制作:利用ArcGISPro - 指南2025-09-18 12:52 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: blo…

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 代码…

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

环境准备 首先安装必要的依赖包: pip install requests websocket-client pandas numpy基础配置 import requests import json import websocket import threading import time from datetime import datetime# API配…

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

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

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

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

重组蛋白表达避坑指南

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