このキングオブザヒルゲームは戦略ゲームであり、水風船を投げて水が飛び散らないようにする必要があります。目標は、ほとんどのポイントを獲得することです。フィールドの地図と水風船の位置が表示されます。特定の方向に水風船にぶつかる(十分近い場合)か、特定の方向に移動したいのかを返すことができます。
具体的には、水風船は (0, 0)
30ユニットの高、落下します。水風船が地面に当たった場合、プレーヤーはランダムに4ポイントを失うように選択され、風船に近い人により大きな重みが与えられます。さらに、バルーンを最後に打ったプレーヤーは3ポイントを獲得します。したがって、風船を真下に当てると、1ポイントを失う可能性が高くなります。
拡張するクラスを作成しますPlayer
。コンストラクターを実装する必要があります。コンストラクターは次のようになります。
public Player1() {
super(/* Some numbers */ 3, 3, 4)
}
これらの番号はdouble
sです。最初の数字はプレイヤーの速度を表し、2番目の数字は強さを表し、3番目の数字は運を表します。合計は10以下である必要があり、ゼロ以下の数値は使用できません。
第二に、あなたは実装する必要があります move
メソッドを。これはmove
メソッドの例です:
@Override
protected Action move(Map<Player, Point2D> map, Balloon b) {
// Get my own location
Point2D myself = map.get(this);
// If I'm close enough to the balloon
// then hit the balloon
if (myself.distanceSq(b.getLocation()) <= 16) {
double d = (r.nextDouble() - 0.5) * 3;
// Random y direction, z direction is what's left
return new Hit(0, d, Math.sqrt(9 - d*d));
} else {
double diffX = b.getLocation().getX() - myself.getX(),
diffY = b.getLocation().getY() - myself.getY();
// Move towards the balloon
return new Movement(Math.signum(diffX)*3/Math.sqrt(2), Math.signum(diffY)*3/Math.sqrt(2));
}
}
ここにはいくつかの重要なことがあります。最初に、フィールドがとして渡されることに注意してくださいMap<Player, Point2D>
。フィールドは無限です-あなたがどこまで行けるかに制限はありません。2次元配列などではありません。さらに、これは、位置として整数以外の座標を持つことを意味します。これはまったく問題ありません。
別の結果は、プレーヤーとバルーンが重なる可能性があることです。実際、2人のプレイヤーがまったく同じ場所にいる可能性があります。
バルーンには一定の速度と方向があります。一般に、3単位/ステップの割合で低下します。また、x
方向とy
方向に移動します。aを返すときHit
、バルーンを押しているx、y、およびz方向を渡します。あなたはそれが本当であればということ、その高さが10以上であるか、その距離ます(2つのだけ次元上)からさらに4より大きいあるバルーンを打つことができないx^2 + y^2 + z^2 > s^2
ところs
あなたの強さで、かつx
、y
とz
あなたがヒットすることを指示しています、アクションは破棄されます。ヒットの力は、0
との間の乱数によって増幅されますluck
(つまり、運が低い場合はダウンする可能性があります)。
同様に、あなたは返すことができMovement
てx
とy
あなたは(あなたが空気中にジャンプすることはできませんのでご注意を)移動していることを座標。もしx^2 + y^2 > s^2
どこにs
あなたの速度で、あなたのアクションが破棄されます。
水風船が地面に当たった場合、ランダムなプレイヤーが選択され、最も近い人にはより多くの重量が与えられますが、運がより良い人にはより少ない重量が与えられます。選択されたプレーヤーは4ポイントを失います。
コントローラ: https //github.com/prakol16/water-balloon-wars/tree/master
ゲームは1000ステップ続きます。最後に、というファイルがありますlog.out
。ゲームを表示するには、このフィドルにデータをコピーして貼り付けます。ます https //jsfiddle.net/prankol57/s2x776dt/embedded/result/
または、3Dで表示することもできます:http : //www.brianmacintosh.com/waterballoonwars //www.brianmacintosh.com/waterballoonwars(BMacのおかげです)
100(以降ではなく、それ以上の場合もあります)ゲームのスコアの合計が最も高いプレーヤーが勝ちます。
ソリューションを送信する場合は、https://github.com/prakol16/water-balloon-wars/tree/masterで本当に具体的な詳細を読むことをお勧めします。
編集3/8:
これらは現在の最終スコアです(プレーヤー1と2を含まない1000回の反復)。投稿を編集したら、コメントすることができます。スコアをやり直します。
{
class players.BackAndForth=-75.343,
class players.Hydrophobe=-0.800,
class players.KeepAway=-53.064,
class players.Weakling=39.432,
class players.Repeller=21.238,
class players.LuckyLoser=-30.055,
class players.AngryPenguin=-49.310
}
勝者はWeakling
平均39ポイントでした。2位はRepeller
21点でした。
speed
し、strength
プレーヤーのコンストラクタインチ
dirX
、dirY
、及びdirZ
(運によって増幅)単にバルーンの速度に添加されます。複数の人がヒットした場合(多少ありそうもない)、3ポイントを獲得する可能性のあるプレイヤーが運で決定されます(具体的な詳細を参照)