返回资讯中心
外部精选
软件工程
#社区热议

C64 BASIC 地牢游戏教程新增关卡与升级系统

来源标题:C64 Basic Dungeon Crawler: Stairs, Levels and Levelling Up (Part 11)

教程系列第 11 部分为 C64 BASIC 地牢游戏加入多关卡、难度递增和角色属性成长,改变此前只有单一地图、通关即重置的玩法。读者可在 RGC 在线 IDE 加载 part11a.bas 运行并查看完整代码。

Hacker Newsibobev2026/11/2 · 昨天19 分钟阅读

以下正文由 AI 翻译自 Hacker News(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

给 C64 BASIC 地牢游戏加入新关卡和进度感

进度感是游戏乐趣的重要组成部分。我不太确定“进度感”是不是一个词,但你懂我的意思!

这就是“拿起就玩的迷你游戏”和“哇,看看时间,我刚刚把整个工作日都花在这上面了!”之间的区别。假设如此。

到目前为止,我们的 C64 BASIC 地牢没有升级、没有角色成长,只有一张地图。别误会,很多有趣的游戏只有一个屏幕、没有角色成长,但它们通常会随着游戏时间增加难度。

所以接下来我们需要加入进度、难度递增和角色属性增益。

你可以在 RGC 在线 IDE 中加载 part11a.bas 来游玩并查看最终代码清单。如果你错过了,也看看上一部分(第十部分)。

虽然我们只有一张地图,但它现在是可玩的。当你找到圣杯时,游戏以“YOU WIN”和再玩一次的提示结束。

选择再玩一次会重新掷出一个新角色并生成新地图。你的所有进度都会被清除,本质上和按‘N’开始新游戏是一样的。

你现在可以跟着教程,直接在网页浏览器中用 Online Retro IDE 编辑代码 ——无需下载、配置等,而且免费!

在这个版本中,我们改为五个关卡。每一关都使用与第十部分相同的生成器生成新地图,但在物体放置和创建方面有更多规则。

不再是一个圣杯,现在要离开一个关卡,你需要拾取地牢中的每一个圣杯,只有这样才能走上楼梯。圣杯的数量随着关卡上升而增加,而且为了有趣,它不是简单的 +1:

LV 是关卡编号,CL 是剩余圣杯数。INT 丢弃小数部分,所以第 1 关和第 2 关给 1 个,第 3 关和第 4 关给 2 个,第 5 关给 3 个。

CL=INT((LV+1)/2)

你的角色现在只要还活着就会持续存在,保留你的生命值、属性、金币、钥匙和魔法。

目前,第 5 关的楼梯能让你离开地牢并赢得游戏。

无论输赢,我们现在还会显示你到达的关卡以及获得的黄金。

在第十部分中,我在两个地方设置玩家并绘制地图:开始游戏时,以及按 N 键开始新游戏时。

那段代码现在被拆成两部分。INITPLAYER 负责角色相关的一切,每局游戏只运行一次。BUILDLEVEL 现在负责每个关卡的一切,每关运行一次。

BUILDLEVEL: PX=10 : PY=11 : OX=PX : OY=PY WN=0 : LA=0 CL=INT((LV+1)/2) POKE 53280,0 : POKE 53281,0 GOSUB MAPBLANK GOSUB MAPROLL GOSUB DISPLAY GOSUB POPULATE GOSUB DRAWPLAYER RETURN

PX、PY 把玩家放回起始格子。WN 是“离开本关”标志。LA 是消息日志的行数,因为屏幕刚被清除所以为零。

新游戏是 GOSUB INITPLAYER 然后 GOSUB BUILDLEVEL。走下楼梯则是单独 GOSUB BUILDLEVEL。

这就是重置游戏和重置关卡的区别,也是让角色在地图生成过程中完好存活的原因。

💬 有问题或评论?前往社区讨论!

楼梯被放置在四个角落房间之一,随机选择。你的玩家从中央房间开始,所以楼梯永远不会在你起始的房间里。

EX=4*INT(RND(1)2) : EY=4INT(RND(1)*2)

INT(RND(1)*2) 是 0 或 1。乘以 4 就变成 0 或 4,即横向的第一个或最后一个房间,纵向同理。

第十部分的地图规则已经让每个房间都能从其他房间到达,所以任何选中的房间都应该是安全的选择。我不检查楼梯是否可达,因为按这个逻辑它们总是可达的。

我确实强制楼梯房间为开放房间类型,并且楼梯被放置在其中心格子。

IF RX=EX AND RY=EY THEN MT=1

原因是楼梯在圣杯被收集之前会阻挡移动。我们不想因为把楼梯放在糟糕的位置而阻挡移动。

获取那个中心格子的位置来自房间编号。一个房间宽 4 个格子(包括其左墙),地图从屏幕第 2 行开始。

ROW=EY4+4 : COL=EX4+2

收集圣杯并激活楼梯

每个圣杯仍然价值 10 黄金,并使 CL 递减。当它减到零时,日志会告诉你“FIND THE STAIRS”。

POPULATE 放置关卡所需数量的圣杯,然后将 CL 设置为实际放置的数量。PLACEONE 在 200 次寻找空地板失败后放弃,所以在拥挤的地图上圣杯实际上可能无法出现。只计算成功添加的数量意味着关卡仍然可以完成。

Q=CL : CL=0 IT$="{PURPLE}(" : FOR N=1 TO Q : GOSUB PLACEONE : CL=CL+PF : NEXT N

PF 是 PLACEONE 的“成功”标志,1 或 0,所以累加它就统计了成功次数。

在还有圣杯未拾取时走进楼梯会把玩家弹回,并显示“CHALICES LEFT”和数量。

当没有剩余圣杯时,楼梯设置 WN=1 并返回。WN 最初在第十部分中表示“won”(获胜),现在它表示关卡获胜,而不是整个游戏!

主循环看到该标志后跳转到 NEXTLEVEL。这与我们在第十部分中用于获胜的标志后跟 GOTO 的方法相同。楼梯是在 GOSUB 内部找到的,从那里构建新关卡会让那个 GOSUB 每次都在 BASIC 的栈上未完成。

目前,每个新关卡奖励角色等于你体质一半(向下取整)的生命值。我们还在偶数关卡给力量 +1,在奇数关卡给敏捷 +1。

这主要是为了展示目前可以怎么做,我们可以在之后的打磨阶段更深入地考虑什么才真正有益。

HL=INT(STATS(2)/2) : HP=HP+HL S=LV AND 1 : STATS(S)=STATS(S)+1 AC=10+INT((STATS(1)-10)/2)

STATS(0) 是力量,STATS(1) 是敏捷,STATS(2) 是体质。

LV AND 1 对奇数返回 1,对偶数返回 0。AND 逐位比较两个数字,任何奇数的最低位都是 1。所以结果也是要提升的属性数组索引。

护甲等级之后会重新计算,因为它是由你的敏捷推导出来的。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →