本周我的班级正在进行机器人竞赛,我们应该让我们的机器人赢得所有人的机器人。比赛是摇滚,纸,剪刀,炸药,水气球。除了水气球和水气球只能击败炸药,炸药击败一切。老师写了战斗竞技场,其他一些机器人,智能机器人,打印机(纸)机器人,随机机器人和他的机器人向我们展示了一些例子。我喜欢智能机器人,我用它来创建我的机器人,显然我需要在机器人中做更多。我不知道还有什么可以添加,以及如何使我的机器人获胜。我还需要跟踪我有多少炸药。
我的问题如下:我可以添加到机器人中以使其获胜以及如何跟踪炸药? 这是我的机器人:
public class herro1cb extends Bot {
public herro1cb(int dynamiteQuantity) {
super(dynamiteQuantity);
_dynamiteLeft = dynamiteQuantity;
setName("Chelsea");
}
@Override
public Move doMove(Move opponentsPrior, int points) {
switch( opponentsPrior ){
case Dynamite:
return _dynamiteLeft > 0 ? Move.Dynamite : Move.WaterBalloon;
case WaterBalloon:
return Move.Scissors;
case Scissors:
return Move.Rock;
case Paper:
return Move.Scissors;
case Rock:
return Move.Paper;
default:
return _dynamiteLeft > 0 ? Move.Rock : Move.Dynamite;
}
}
}
以下是扩展内容:
public abstract class Bot implements Comparable<Bot> {
private String _name;
protected int _dynamiteLeft = 0;
public Bot( int dynamiteQuantity ){
_dynamiteLeft = dynamiteQuantity;
}
public String getName(){
return this._name;
}
public void setName(String value){
this._name = value;
}
public abstract Move doMove(Move opponentsPrior,int points);
public void reset(int dynamiteRenewal){
_dynamiteLeft = dynamiteRenewal;
}
@Override
public int compareTo(Bot o) {
return +Integer.compare( this.hashCode() , o.hashCode() );
}
}
提前致谢!
答案 0 :(得分:0)
如果每个人都试图制造一个“比对手更深思熟虑”的机器人,那么你应该尝试保留所选动作的历史记录。试着找出其他机器人想到的迭代次数。没有什么可以阻止你评估每一步动作的整个动作历史。
通过说比对手更进一步思考,我的意思是:
我只选择了剪刀,但对手选择了摇滚,所以他打败了我。在 为了获胜,我应该换成纸,但对手会知道 那,并将挑选剪刀。为了击败他的“聪明”举动, 选择摇滚。
如果其他机器人基于这个算法,你可以击败他们,如果你能找到他们正在思考的迭代次数。
我想你无法做出足够智能的东西来击败随机机器人。
备注:现在你的代码中的逻辑基本上胜过了对手之前的动作。