它开始于Reddit Gamemaker Game Jam的一个想法。它是第一次尝试游戏开发,我甚至不知道从哪里开始,更不用说如何将其集成到Reddit中。最后,我错过了截止日期,但我仍然继续,因为这个想法太有趣了,不值得放弃。
声明,我是一名刚毕业的CS学生。
注意:游戏结构位于文章末尾,如果您想跳过,可以直接看。
我有两个函数来创建字卡和答案卡,以及一个空的字卡对象,包含点击事件和一个变量来判断是否是答案卡还是字卡对象。函数只需将一个新的空字卡对象传入,根据字母名称创建一个新的字卡对象,例如 ("spr_" + a),然后每次都交换每个字母的正确字卡。
var _t = instance_create_layer(500, 500, "Instances", obj_tile);
_t.letter = "a";
_t.source = "deck";
_t.sprite_index = asset_get_index("spr_a");
是的,我很懒。
但是 asset_get_index 函数总是会产生错误,所以我创建了一个字卡映射,并将字卡名称作为值赋给字母键,这些字母后来我才知道是因为我没有引用、分配或使用它们,GameMaker就以为我不使用它们,所以它不将它们添加到映射中。
global.spr_map = {
a: spr_a, b: spr_b, c: spr_c, d: spr_d, e: spr_e,
f: spr_f, g: spr_g, h: spr_h, i: spr_i, j: spr_j,
k: spr_k, l: spr_l, m: spr_m, n: spr_n, o: spr_o,
p: spr_p, q: spr_q, r: spr_r, s: spr_s, t: spr_t,
u: spr_u, v: spr_v, w: spr_w, x: spr_x, y: spr_y,
z: spr_z
};
var _t = instance_create_layer(tx, ty, "TilesDeck", obj_tile);
_t.sprite_index = global.spr_map[$ string_lower(tiles_unique[i])];
_t.source = "deck";
_t.letter = tiles_unique[i];
_t.li = ord(string_lower(tiles_unique[i])) - ord("a");
此外,我遇到一个问题,即清除答案卡和字卡,因为我不想在新一轮中保留旧的字卡,并且会引起内存问题。所以我选择了最简单的方法:创建一个新层,将它们都放在上面,以便只需销毁一次答案卡层和字卡层(是的,我做了)。
然后我去…
鼓声……
"Dafont"。
我花了几个小时或几天时间寻找合适的字体,因为我想找到一个具有中世纪风格、斜切和现代风格的字体。在最后,我不得不在Fiverr上为UI设计支付人工,因为我的颜色调色板和设计选择非常糟糕。虽然那个人提供了出色的质量,但设计超出了我的范围,或许它只是没有在Figma上设计时那么有趣。
按钮就是两个不同的颜色的矩形重叠在一起,包含字母和点数。最初,我只是在空白按钮中创建一个没有字母或点数的按钮(感谢我的懒惰),并在运行时将字母和点数相对于字卡位置放置。但是GameMaker字体显示为锯齿状,扭曲到无法阅读的程度。甚至我都不敢尝试动态改变字卡颜色。所以我不得不回到并重新创建每个字卡的字母、颜色和字体,这绝对是令人讨厌的。
现在我的多巴胺水平很高,因为它开始看起来很棒了,迭代次数约为345次。
然后我遇到一个问题,即在GML中运行JavaScript,因为我不知道要使用JS桥来运行它们。之后我在YouTube上浏览了一些视频,才得知这一点。
此时,我正处于设计的最令人畏惧的部分:“健康条”。经过反复尝试,我决定使用GameMaker的默认健康条,它看起来很好,很好地融入了游戏风格。
对于词汇表,我想我在Gutenberg上找到了一个文件,然后过滤并将其转换为JSON,以便使用。现在我知道我应该实现一个版本控制系统,以便在游戏加载时知道使用哪个文件版本以保证向后兼容性。
嗯,我的代码可以随时进行调整。
游戏本身包含三个房间:一个用于游戏本身和另外两个用于游戏结束显示。一个覆盖层与游戏结束显示分数不兼容,我不想麻烦了,因为在另一个房间中会使我的代码更好,并且工作量很小。
这是我的游戏流程:
游戏从一个空的控制器对象开始,加载词汇表,并检查玩家是否是挑战者还是创造者。然后它进入开始一轮,如果创造者,则加载一个随机词,如果挑战者,则加载创造者的Redis数据。
我们还跟踪了每个字母的字母数量,用于字卡和答案卡,以便在开始一轮时知道如何构建字卡。这样做的原因是为了避免在字卡中重复使用同一个字母,占用了宝贵的空间,所以我决定在字卡中确定每个字母的数量,并限制答案卡为20个字母。
为什么是20个字母呢?朋友,这不是一个拼写比赛,而且还有一些关于单词中字母分布或频率的问题。
一旦开始一轮,字卡脚本和答案卡脚本都会运行,以便构建字卡并响应点击事件。然后一旦计时器过期或玩家点击提交按钮,结束一轮脚本就会运行,计算玩家的分数并保存答案。
这会一直持续到最后一轮或玩家的健康值降至零时,游戏结束脚本就会运行,保存分数并判断玩家是否是挑战者还是创造者。然后它会进入另一个房间,并询问玩家是否要发布他们的游戏。如果玩家是挑战者,则会判断玩家是否赢了、输了还是打平,并进入另一个房间,显示适当的图标并显示他们的最佳答案。
回想起这段时间,我觉得这很容易,但最初它对我来说是一个巨大的任务。
现在我已经迭代了582次(哈哈,一个漏逗号和一个分号就能做到)。
我把它命名为“Battle Lexicon”(哈哈,这是我能想到的最好的名字,并且它是一个战斗来做)。它是一个5轮的词语战斗游戏,使用了一个类似字谜的点数系统,玩家使用同义词攻击,使用反义词进行治疗。
此外,我可能会发布源代码,并欢迎您的反馈,尊敬的Reddit用户。
评论 (0)