Tring
发表于 2023-11-19 17:49
本帖最后由 Tring 于 2023-11-19 17:53 编辑
游戏引擎本意是指的对游戏中层高复用性代码的一种封装。即使没有封装复用,不代表就没有中层代码,只不过每个游戏都写一遍罢了。事实上即使没有封装,每个公司在自己的产品里还是有一部分复用的。
另外,想简单入门学习游戏代码思路,现在的话其实去看pico8游戏的源码是一个很不错的选择。开源多,架构简单复古,语言(lua)简单,又有不少现代思路,比真FC游戏接地气得多。
Gundamslave
发表于 2023-11-19 17:52
不如想一下,为什么能从纸带打孔机到python?
骑士室卞钛
发表于 2023-11-19 17:59
游戏也不是一开始就这么复杂,早期游戏也很简单
christiny
发表于 2023-11-19 18:29
本帖最后由 christiny 于 2023-11-19 18:33 编辑
楼主是不是把游戏想得太复杂了……
我以前在PC上玩过一个最简单的游戏,只用一个空格键玩。大概比486还要早的时候。
一台小车自动往右开,按下空格跳一下。路面大小不同的坑,通过跳跃躲避,碰到坑就死了。
游戏画面比雅达利那一堆还要简单。
没有任何背景,地面就是凹凸不平的一根线条,小车就是加了两个圆形的长方体。
nanonya2
发表于 2023-11-19 18:42
christiny 发表于 2023-11-19 18:29
楼主是不是把游戏想得太复杂了……
我以前在PC上玩过一个最简单的游戏,只用一个空格键玩。大概比486还要 ...
有一个类似的游戏,PC-DOS附赠,叫做DONKEY.BAS,不过躲的不是坑而是驴,并且是纵向行驶的
Bill Gates亲自参与开发
禾芙绿豆沙
发表于 2023-11-19 18:55
Tring 发表于 2023-11-19 17:49
游戏引擎本意是指的对游戏中层高复用性代码的一种封装。即使没有封装复用,不代表就没有中层代码,只不过每 ...
蔚蓝也是先有pico8版本后有完整版,不过楼主挺像发帖机的,大概发帖机只要在论坛灌水就能灌出一个新游戏了吧。
Tring
发表于 2023-11-19 18:58
christiny 发表于 2023-11-19 18:29
楼主是不是把游戏想得太复杂了……
我以前在PC上玩过一个最简单的游戏,只用一个空格键玩。大概比486还要 ...
其实游戏开发入门,最艰难的部分是从0到1,而不是从1到10甚至到100。
即使是一个最简单的chrome恐龙小游戏,依旧拥有一个完整的游戏架构:
构造主循环,接受输入,维护状态机,输出图像。
这个架构对于没有开发过游戏的人来说,才是真的不太容易理解的部分。
而现代游戏引擎,很多都把这个基础架构给对于开发者隐藏起来了。
eulereld
发表于 2023-11-19 19:07
本帖最后由 eulereld 于 2023-11-19 19:10 编辑
刘仲敬 发表于 2023-11-19 15:58
我也学过编程,为什么想不出来,感觉是个宏大工程。。。第一个想象出电子游戏的人真是天才,首先想到用于 ...
LZ把電子遊戲的發展想得太跳躍了,去了解一下早期電子遊戲發展史,最早的電子遊戲更像是現實的棋類和運動的電子化,什麼創造藝術萬裡挑一恐怕連第一個電子遊戲的製作者也不會吹那麼大,看開頭那種機器限制也不能做很複雜的東西
遊戲的歷史相當久遠,把原有的東西電子化,再一步一步隨著科技的進步發展、複雜化,能玩的花樣越來越多,便成了今天的電子遊戲
你震驚的更多是創意部份,那東西確實很難強求,有創意、創造力的人只有紙筆也能製造、經營遊戲,例如古早的TRPG
舌怪
发表于 2023-11-19 19:08
我家有些80年代的老《无线电》杂志,记得里面有篇教你从头写坦克大战游戏的,硬件似乎是某种街机,我怀疑性能可能比pong高不了多少
小司司
发表于 2023-11-19 19:13
楼主的问题是不是等效于,预制菜发明前,大家怎么做饭的?
plusSharp
发表于 2023-11-19 23:13
java的swing都可以写2D游戏了吧,我记得做个球撞到边缘反弹效果还是很容易的
RTLordCaptain
发表于 2023-11-19 23:20
本帖最后由 RTLordCaptain 于 2023-11-19 23:23 编辑
最早是汇编啊,甚至2D动画都必须用到硬件特性,因为内存极小,连1:1的帧缓存都没有,这种情况下就不存在什么引擎,估计顶多是一些复用的代码,开发下个游戏的时候复制过来再改改用
游戏本质上做的就是检测输入、检测碰撞、绘制场景、绘制角色动画、执行预设逻辑(AI)这几件事,没有引擎这些功能自己写一样可以实现,只是相对不好复用而已
RTLordCaptain
发表于 2023-11-19 23:29
诚司 发表于 2023-11-19 13:17
挺多游戏营销号就喜欢把在古早硬件上写游戏吹的天花乱坠,看多了就会在知乎提个问题,“日本当年的老游戏程 ...
古早游戏主要是资源有限吧,需要各种抠空间、设计障眼法实现某些硬件限制下不容易实现的效果
那个时候所谓高技术力大概就是在鸡蛋上跳舞的技术
跟现在的图形学技术,开放世界无缝加载、大规模的NPC AI之类的技术完全不是一码事了
RTLordCaptain
发表于 2023-11-19 23:33
刘仲敬 发表于 2023-11-19 15:58
我也学过编程,为什么想不出来,感觉是个宏大工程。。。第一个想象出电子游戏的人真是天才,首先想到用于 ...
最早的游戏是pong,就是两个板一个球,不需要什么拟真
历史上确实有很多里程碑式的开创性游戏,但是这些游戏也不是完全从零开始做出来的,一样有模仿对象
Demi.Albertini
发表于 2023-11-19 23:49
玩过FC的学习机么~那里面的game basic不就是某种意义上的引擎嘛
bomsw
发表于 2023-11-20 00:03
本帖最后由 bomsw 于 2023-11-20 00:13 编辑
最早电子游戏都是纯靠电路凑出来的。
图为pong。引擎?模拟?程序?不存在的
禾芙绿豆沙
发表于 2023-11-20 00:05
bomsw 发表于 2023-11-20 00:03
最早电子游戏都是纯靠电路凑出来的。引擎?模拟?程序?不存在的
感觉有点像像状态机连线图
bomsw
发表于 2023-11-20 00:09
本帖最后由 bomsw 于 2023-11-20 00:12 编辑
风怒
Tring
发表于 2023-11-20 00:25
本帖最后由 Tring 于 2023-11-20 00:28 编辑
bomsw 发表于 2023-11-20 00:03
最早电子游戏都是纯靠电路凑出来的。
抬杠来说的话:
现在拿HDL写游戏也不是不可能,硬件逻辑也是逻辑,一样可以用形式化语法描述。
广义上来说一样是在跑程序,只是不符合冯诺依曼架构所定义的程序而已。
事实上Z社出的(以及别家模仿的)那些编程游戏,很多都有这种硬件倾向,拿来写小游戏的人也是有的。
bomsw
发表于 2023-11-20 00:55
Tring 发表于 2023-11-20 00:25
抬杠来说的话:
现在拿HDL写游戏也不是不可能,硬件逻辑也是逻辑,一样可以用形式化语法描述。
广义上来说 ...
确实,严谨的表述应该是代码不存在
—— 来自 S1Fun
Tring
发表于 2023-11-20 02:20
小司司 发表于 2023-11-19 19:13
楼主的问题是不是等效于,预制菜发明前,大家怎么做饭的?
想了下,其实应该更接近,预制酱料发明前大家怎么做菜。
法餐厨师团队里专门有一名负责现场制作酱料的,这件事其实就很反现代家常烹饪直觉。
asdfg
发表于 2023-11-20 04:14
void renderNextFrame() {
while keyPress(key) {
case (key == "control") {
int charState = jump();
if (charState==DEAD) {
showDialog("你摔死了!");
restartGame();
}
...
case key=...
}
}
int jump() {
rising = true;
while (true) {
if (rising && character.yDelta < jumpHeight) {
// 人物正在上升
character.yPosition++; character.yDelta++; character.xPosition++;
checkIfCharacterHitSomething();
} elseif (character.yDelta > 0) {
// 人物正在下降
character.yPosition-- character.yDelta--; character.xPosition++;
checkIfCharacterHitSomething();
} else {
// 跳跃完成
break;
}
nextFrame()
}
}
这就算是个很基本的游戏逻辑了,不用什么引擎啊。
Tring
发表于 2023-11-20 06:03
asdfg 发表于 2023-11-20 04:14
void renderNextFrame() {
while keyPress(key) {
case (key == "control") {
character是全局的,Side-Effect严重,代码评审不通过,打回去重写。
女神アイギス
发表于 2023-11-20 06:35
红白机实际上相当于硬件自带引擎的,毕竟是专业游戏机
Midnight.Coup
发表于 2023-11-20 09:31
女神アイギス 发表于 2023-11-20 06:35
红白机实际上相当于硬件自带引擎的,毕竟是专业游戏机
FC 不是连操作系统都没有吗PS1 也是
Tring
发表于 2023-11-20 09:35
Midnight.Coup 发表于 2023-11-20 09:31
FC 不是连操作系统都没有吗PS1 也是
早年主机游戏的操作系统相当于整合在主机的SDK中的。换句话说就是游戏内自带必要的操作系统功能代码。不过一般也就是一些线程调度和访问内嵌文件系统之类的基本功能了。
女神アイギス
发表于 2023-11-20 09:40
Midnight.Coup 发表于 2023-11-20 09:31
FC 不是连操作系统都没有吗PS1 也是
虽然确实是汇编,但也是有图形库之类轮子的
不需要从0开始实现背景卷轴,手柄控制图形活动块等功能
xbhuang
发表于 2023-11-20 09:49
刘仲敬 发表于 2023-11-19 15:58
我也学过编程,为什么想不出来,感觉是个宏大工程。。。第一个想象出电子游戏的人真是天才,首先想到用于 ...
你的计算机知识简直为零,任何东西都不是空中楼阁,从硬件到操作系统到软件,都是一层层发展出来的,并不是某一天突然出现了游戏引擎然后就能用游戏引擎开发游戏
而是大家本来就是正常的用编程敲出简单的游戏,例如早期的肉鸽甚至就是一堆文字描述加流程选择,然后随着项目越来越大越来越冗余,才会重复利用,形成资源库
但是这也不是游戏首创,只不过是把正常软件开发的先进经验用在了游戏开发上罢了,操作系统的开发更是shi山代码,大规模软件的开发都是逐步发展,并不是某一天一个人灵光一闪就搞出了游戏引擎,而是有人把之前的开发工具集成好打包商业化卖给游戏开发工作室,这明显是商人行为并不值得你去敬佩
—— 来自 S1Fun
小司司
发表于 2023-11-20 10:51
Tring 发表于 2023-11-20 02:20
想了下,其实应该更接近,预制酱料发明前大家怎么做菜。
法餐厨师团队里专门有一名负责现场制作酱料的,这 ...
番茄酱我也会现炒
但是,豆瓣酱,酱油,醋等等等等那需要时间发酵的,不可能现做。
精钢魔像
发表于 2023-11-20 11:33
游戏引擎这个说法最早来自id吧,id的doom代码和数据分离,很方便做mod。然后id把代码授权给一家工作室开发新游戏。那个工作室叫raven,后来做出了使命召唤
id肯定不是最早的,fc上有很多逻辑差不多的游戏,可能都是一套代码改的。但把源码授权甚至开源,id是第一个
asdfg
发表于 2023-11-20 11:34
Tring 发表于 2023-11-19 17:03
character是全局的,Side-Effect严重,代码评审不通过,打回去重写。
然而FC时代马里奥不是全局那不就是内存泄漏吗
Andrue
发表于 2023-11-20 11:45
DOS字符输出图案也能玩啊,这么想很好理解了吧
—— 来自 Xiaomi Redmi K20 Pro, Android 13上的 S1Next-鹅版 v2.5.2-play
oyss
发表于 2023-11-20 11:52
DOS已经是个操作系统了,相当于引擎了
刘仲敬
发表于 2023-11-20 14:02
xbhuang 发表于 2023-11-20 09:49
你的计算机知识简直为零,任何东西都不是空中楼阁,从硬件到操作系统到软件,都是一层层发展出来的,并不 ...
所以上古游戏本质都是很简单的游戏?在上古游戏中最复杂的是哪个?第一款现代意义上复杂的游戏叫什么,游戏是什么时候开始复杂的?
cedarmil1
发表于 2023-11-20 14:22
macos
发表于 2023-11-20 14:28
早期游戏没那么复杂,有从头开始,但后期人员稳定了肯定会复用旧资源
qfqczr
发表于 2023-11-20 15:31
大学学的最怪的一门课是调Windows的api编程图形游戏,也是忘得最快的一门课
Evilgurren
发表于 2023-11-20 16:15
游戏引擎历史确实应该以3D游戏的出现做为一个分隔点,在这之前的游戏编程工作量主要在玩法上,编程大头是为了实现游戏玩法而非画面,很多C语言学习的书籍在学完前几章节后足以让你编程实现诸如贪吃蛇、黑白棋、打字游戏等经典小游戏,能复用的代码并不多自然没有打包成游戏引擎的需求。
计算机图形学发展起来后3D游戏也应运而生,这时3D图形的生成和交互占据了编程大部分的工作量,当制作下一款游戏时再重复一遍编程明显不可取,因此才催生了游戏引擎,这部分历史也可以参考游戏区人手一本的doom启示录。
基本农田
发表于 2023-11-20 16:31
cs50有个游戏开发的课,从lua讲到unity,有兴趣的可以自己尝试下
https://pll.harvard.edu/course/cs50s-introduction-game-development
silver24k
发表于 2023-11-20 16:34
有兴趣了解FC开发的请看旧书《任天堂游戏编程探密》,可以轻易找到PDF的,很好讲解了基于tile的2D专用硬件等的知识(你可以把这种硬件认为就是引擎),这种2D硬件直到NDS都还在用的(普通IBM PC上的2D游戏能达到游戏机上专用硬件的显示效果基本上要到有加速的显卡出现了)。
FC时代开发主要是用汇编,SFC年代就用C加上汇编了,都是直接操纵硬件来达成画面显示、声音、获得输入等等,汇编上有很多奇技yin巧比如自修改代码等。
PC上DOS时代的游戏大多都是直接访问帧缓存的我觉得根本谈不上引擎,在帧缓存上画 位图/透明色/半透明/点/线/文字/卷轴/支持缩放 等就算自己实现根本没多少代码量(许要2D图形学的一些知识就可以了),我觉得是那个时代游戏开发人员的基本素养。
而且那个互联网近似无的年代也没什么公开的商业引擎的,专用机和PC就算有所谓软件引擎(我觉得只能称得上复用的代码)也基本上是各个游戏公司自开发自用。
(现在3D年代背后的图形学/shader/各种光照和物理等就复杂多了,要达到商业级别话面效果个人从底层开始造轮子很难,只为了游戏开发则应该使用成熟引擎)