ウェブワーカー戦争

Web Worker Warsは、もちろんJavaScriptで書かれたJavaScriptプログラマー向けに開発したゲームです。

さまざまなゲームMemory Fight。 Google AIチャレンジまたはHabraWarsに似たもの。



Web Worker Wars



機能とルール



1.ゲームは2つ以上のボットのターンベースの戦略です

2.各プレーヤーは、ゲームエンジンから特別なコマンドを受け取り、アクションを返すことができる独自のWeb Workerを作成します

3.ボットには各ターンに4つのアクションポイントがあり、それらをアクションに分配できます。

4.ボットの視野は限られています(ロゴの例は青で強調表示されています)。

-視野に入るすべてのオブジェクトはコールバックアクションに転送され、計算で使用できます

5.ボットは2つのアクションを実行できますが、

-移動1セル左、右、上、下、1 ODのコスト

-最大5セルの距離で狙撃(ケージに当たる)、2 MPのコスト、敵または自分から2ポイントのライフまたはシールドを削除



さらに詳細なルール、ワーカーとデモの例。



6.ボットがODを使い果たすまで、エンジンはボットにアクションを要求します。

-ボットがアクションリクエストの2秒後に応答しなかった場合、そのコースは終了し、ODが焼けます

-アクションに十分なAPがない場合、アクションは実行されず、ボットの進行は完了し、ODは燃え尽きます

-アクションが完了するとすぐに、一定量のMLがボットから削除されます

-ボットが存在しないコマンドを送信した場合、1 ODが削除されます

-ボットは壁や他のプレイヤーの上を歩くことができません

-各アクションの後、ボットは任意の方向に向きを変えることができます

7.最初に行くウォーカーは、最初に初期化されたウォーカーです。

-将来的には、やり直しが予定されています。最小ボリュームワーカーが最初に実行されます。

8.各ボットには10​​個のライフポイントと2個のシールドポイントがあります

-シールドは各フェーズの終了時(全員が去ったとき)に+1で再生成されますが、2を超えることはできません

9.競技場のサイズは、フィールド壁-壁の10 x 10セルです(実際には、フィールドは8 x 8です)。

10.開始時に、ボットはコーナーに配置されます。セル1.1の最初のボット、2番目-8.8

11.ゲームには500の動きの制限があります(すべてのボットで2000 OD)

12.各ボットは異なるイベントを取ることができます:(onDamage、onHit、onAfterMove ...)

-その数は限られていますが



ゲームが試用モードの場合、ルールは変更される場合があります。



労働者の例



その論理は単純です:ワーカーはランダムに歩き、ランダムに向きを変えて敵を探します。敵が視界に入るとすぐに、彼は最後まで射撃を開始します(記事の例からほとんどすべてのコメントが削除され、フルバージョンはデモまたはアーカイブにあります)。

/**#nocode+*/ (function (global) { /**#nocode-*/ /** * Callbacks * * @namespace Callbacks */ var Callbacks = { callback: function (state) { // its own id var id = state.player.name, target, i, c, ok = false, fow = []; // looking for enemy in fow for (i = 0, c = state.fow.length; i < c; i += 1) { // push fow elements to 2d array, required for movements if (!fow[state.fow[i].y]) { fow[state.fow[i].y] = []; } fow[state.fow[i].y][state.fow[i].x] = state.fow[i].object; if (typeof state.fow[i].object === 'object' && state.fow[i].object.name !== id) { // found! target = { x: state.fow[i].x, y: state.fow[i].y }; } } if (target) { // target - shoot! Player.post({ action: 'shoot', // shoot action options: target, // enemy xy direction: state.player.direction // do not change direction }); } else { // no target - seeking for target // make random moves if (Math.random() > 0.5) { // move to x while (!ok) { // check if cell not occupied target = { x: state.player.x + (~~(Math.random() * 3) - 1), y: state.player.y }; if (typeof fow[target.y] === 'undefined' || typeof fow[target.y][target.x] === 'undefined' ) { ok = true; // cell is free } } } else { // or move to y while (!ok) { // check if cell not occupied target = { x: state.player.x, y: state.player.y + (~~(Math.random() * 3) - 1) }; if (typeof fow[target.y] === 'undefined' || typeof fow[target.y][target.x] === 'undefined' ) { ok = true; // cell is free } } } Player.post({ action: 'move', // move action options: target, direction: ~~(Math.random() * 5) // random direction }); } }, onHit: function (param) { }, onDamage: function (param) { }, onKill: function (param) { }, onDead: function () { } }; /** * Player * @namespace Player */ var Player = { post: function (data) { global.postMessage(JSON.stringify(data)); } }; /** * Message listener */ global.onmessage = function (e) { var data = JSON.parse(e.data); if (data.call && typeof Callbacks[data.call] === 'function') { Callbacks[data.call](data.arguments); } }; /**#nocode+*/ }(this)); /**#nocode-*/
      
      





バトルイニシャライザーazproduction.ru/web_worker_wars

デモ2ボット: azproduction.ru/web_worker_wars/arena.html#ZRV1vYGY&ZRV1vYGY

4ボットazproduction.ru/web_worker_wars/arena.html#ZRV1vYGY&ZRV1vYGY&ZRV1vYGY&ZRV1vYGY



デモでの視覚化-以前の労働者の戦いの記録、つまり リアルタイムではありません。



すべてのファイルを含むアーカイブ(旧バージョン): narod.ru/disk/1947680001/web_worker_wars.rar.html

Google プロジェクトcode.google.com/p/web-worker-wars



ゲームについてのあなたの意見、改善のための提案は興味深いです。



UPDこれで、ボットをpastebin.comにアップロードし、 pastebin (http://pastebin.com/ZRV1vYGY)のスクリプトIDを使用して、バトル初期化プログラムazproduction.ru/web_worker_warsでボットを起動できます



All Articles