我的班级这周有一个机器人比赛,我们应该让我们的机器人赢得每个人自己的机器人。比赛是石头,布,剪刀,炸药,水球。炸药可以击败任何东西,除了水球和水球只击败炸药。老师编写了战斗竞技场,以及其他一些机器人,一个智能机器人,一个打印机(纸张)机器人,一个随机机器人,以及他的机器人,给我们展示了一些例子。我喜欢这个聪明的机器人,我用它来创建我的机器人,显然我需要在我的机器人中做更多的事情。我不知道还能添加什么,也不知道如何让我的机器人成为赢家。我还需要跟踪我有多少炸药。
我的问题如下:我可以向机器人添加什么来使其获胜,以及如何跟踪炸药?这是我的机器人:
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() );
}
}提前感谢!
发布于 2013-12-09 05:54:11
如果每个人都在尝试制作一个“比对手思考得更远”的机器人,那么你应该尝试保留所选动作的历史记录。尝试找出另一个机器人提前考虑了多少次迭代。没有什么能阻止你评估你的每一步动作的整个历史。
我说比对手思考得更远,意思是这样的:
我刚刚选择了剪刀,但对手选择了石头,所以他打败了我。为了获胜,我应该换成纸,但对手会知道这一点,并会选择剪刀。为了击败他的“聪明”的举动,选择石头代替。
如果其他机器人基于这个算法,你可以击败他们,如果你能找出他们提前考虑了多少次迭代。
我猜你无法做出足够智能的东西来击败一个随机的机器人。
备注:你现在在代码中的逻辑基本上击败了对手之前的走法。
https://stackoverflow.com/questions/20459537
复制相似问题