首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扫雷舰战争

扫雷舰战争
EN

Code Golf用户
提问于 2017-02-28 02:46:32
回答 1查看 804关注 0票数 5

我们在制作扫雷游戏上遇到了麻烦。

我们解决了这些扫雷游戏的问题。

现在..。

是时候在扫雷游戏上和其他人战斗了!

您的程序必须用Java运行。从本质上说,每个玩家都可以在每一个回合中做一个动作。

  1. 你可以移动到任何接触你的空间,包括角落。这块木板不会被包裹起来。
  2. 你可以在你目前占据的地方放置一个地雷,然后到任何接触你的地方,包括角落。
  3. 你可以在与你相邻的任何空间,包括角落,放置一个矿井。
  4. 你可以拆除与你相邻的任何空间的地雷,包括角落。如果你拆除一个空位,这个回合就白费了。(这个回合如果你试图拆除一个地点与某人在上面,但这不需要明确声明,因为不会有一个活着的机器人在矿井上.)
  5. 你可以什么都不做。

您必须在扩展类MineBot的类中创建机器人。MineBot看起来是这样的:

代码语言:javascript
复制
public abstract class MineBot {
    private int x, y;

    public abstract int changeMines(int[][] field);

    public abstract int[] proceed(int[][] field);

    public final int getX() {
        return x;
    }

    public final void setX(int x) {
        this.x = x;
    }

    public final  int getY() {
        return y;
    }

    public final void setY(int y) {
        this.y = y;
    }
}

(您必须保留最终方法才能使您的提交有效)

MineBot#changeMines(int[][])首先被问到。结果是一个单一的int,表示您是否愿意执行涉及地雷的操作。这可能是放置地雷,或拆除地雷。0的意思是不,1的意思是解除,2的意思是放地雷。(2或任何不是01的东西)

然后,执行MineBot#proceed(int[][])。以下情况按以下顺序进行:

  1. 首先,正在拆除地雷的机器人开始行动。所有被清道夫袭击的地点现在都安全了。
  2. 接下来,正在埋设地雷的机器人开始行动。机器人可能不会在刚刚拆除的地方放置炸弹。
  3. 最后,所有其他机器人移动。空格对bot计数没有限制,所以所有试图移动的机器人都保证移动。

然后,在这些配置被更新之后,占据一个有地雷的位置的所有机器人都会被淘汰(包括那些呆在原地,把地雷放在下面的机器人),并且它将继续迭代。

在每次迭代中,点数都会增加。当机器人被淘汰时,当前迭代中的点数就变成了它的分数。

在每次测试运行期间,所有n机器人都将由n+10板放置在n+10上。每次运行时,将记录每个机器人的得分。总分是n测试运行的总和。获胜者将不断更新,所以在至少有3份意见书或它已经过了3月14日(Pi日),我会接受一个答案,但这可以随时改变!

输入/输出格式

输入

给定的数组是一个int[][]。最右边的四位(k & 15)表示与该方块相邻的地雷数量(包括角)。右边的第五个位((k & 16) >> 4)是1 (如果有机器人),而0 (如果没有)。记住,板子不会绕来绕去。

输出

所谓“输出”,实际上是指函数返回的内容。同样,您的机器人代码将有两个函数:int changeMines(int[][])int[] proceed(int[][])。以下是对这两种情况的详细解释:

int changeMines(int[][])返回一个整数,表示下一步要执行的移动类型。也就是说,如果您想移动位置或空闲,则返回0;如果要拆除地雷,则返回1;如果要放置地雷,则返回2

int[] proceed(int[][])返回长度为12的数组,这取决于您是否希望保持空闲状态。假设此方法的返回值名为int[] i。然后,i[0]表示您想根据问题顶部的列表进行何种类型的移动。如果适用的话,i[1]表示要在哪个空间上执行操作。当您仍然处于空闲状态时,不会检查这一点,因为它不适用。按照这张表:

代码语言:javascript
复制
1: top-left
2: top
3: top-right
4: right
5: bottom-right
6: bottom
7: bottom-left
8: left

(你只能在以自己为中心的3x3正方形内行动。)

游戏代码可以在我的GitHub回购这里上找到。下载代码后,它应该是一个有效的eclipse项目(与EclipseNeon.2一起运行)。源代码在/tree/master/MinesweeperKOTH/src中。更改src/game/Game.java中的源代码,以便String[] botnames包含所有机器人的名称。我每隔一段时间更新一次,以节省您的打字时间。机器人在/src/programmed_bots中运行,必须扩展bot.MineBot。你的机器人不能抛出任何异常,否则它将以0死亡(不会给你的机器人提供无效的参数)。

规则

  • 不使用任何形式的反射!
  • 不使用Runtime调用系统上的进程!
  • 不要使用你的机器人读取任何东西的源文件!
  • 很明显,你可以读别人的节目。你也可以专门针对一个特定的人工智能,但请以尊重的方式这样做,也导致了我的下一个观点.
  • 您不能尝试调用另一个bot的实例并运行其AI。
  • 适用标准漏洞

KOTH-ing快乐!

注意:这个问题现在存在于沙箱中,以获得更多的建议。

EN

回答 1

Code Golf用户

发布于 2017-02-28 02:47:46

TestBot

此提交是为了帮助您确定一个有效的提交可能是什么样子!

代码语言:javascript
复制
import bot.MineBot;

public class TestBot extends MineBot {
    public int changeMines(int[][] field) {
        return 2;
    }

    public int[] proceed(int[][] field) {
        return new int[] { 2, (int) (Math.random() * 8) };
    }
}

这个机器人只是做一个随机行走,按它的方式放置地雷。通常会回到自己的轨道上自杀。

票数 0
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/111591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档