繁体   English   中英

如何在二维数组中留下某种标记,该标记会告诉程序在该位置执行某些操作

[英]How can I leave some kind of a mark in two-dimensional array that will tell the program to do something in this location

我正在开发一款小游戏,该游戏在我们使用的棋盘上使用二维阵列。 我实现了“ Undo方法,每次单击“按钮”都会逐步返回历史记录。 问题是在某些情况下,“ Undo方法必须在特殊情况下执行其他操作,并且在游戏过程中可能会多次发生。

我知道一种方法是存储“ x”和“ y”(它们在板上的位置),当我到达那里时,如果我们稍后再回到这里,则需要做一些其他事情。 然后在“ Undo Action Listener中添加if ,如果位置我们回到.equals存储的xy任何一个,则执行该操作。 但是我要说的是效率.equal ,我想知道是否有一种方法可以留下标记来告诉程序,当我回到这里时,我创建的Boolean.equal true并且可以执行该操作。

这是董事会的概述: 董事会概况

我不明白为什么if语句效率低下。 我将在undo操作中添加恒定时间(如果只有equals方法具有恒定时间),因此操作的big-o时间不会被修改。

但是,如果您更喜欢另一种方法,则可以在每个单元格中保存一个对象。 object应具有一个布尔属性,您在执行undo操作时将对其进行检查。

我更喜欢使用if语句,但是取决于您。

您正在使用二维数组-什么是数组? 考虑到您的图片中有字母,我假设使用String [] []之类的东西。

但是,您也可以自己创建一个数组。 类似于“单元”类。 给这个类两个成员-首先是有效载荷(也就是您当前拥有的数据),其次是布尔值作为标记。

单独关注。 董事会不必也保存其历史记录。 记录动作,并有一种方法可以将它们反向播放。

关系数据库正是这样来满足回滚的。 他们会记录所有更改,并可以撤消其中的所有内容。 日志通常是更改数据状态的快照。 在您的情况下,实现它的一种简单方法是存储每个板的快照,而撤消将简单地将历史板换成当前板。

这看似“沉重”,但它是大型高事务处理率数据库执行此操作的方式,并且实现起来更简单且防弹,因为您不需要知道如何撤消特定操作。 此外,这意味着董事会需要了解的更少,实际上,他们甚至不需要知道可以撤消这些事务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM