-1

PHPの計算について質問です。テキストベースのゲームを再構築しています。ゲームには現在 2 人の「ネイティブ プレイヤー」がいます。それらはcronファイルによって定期的に挿入されます。挿入は次のとおりです。

//プレイヤー 1 ログイン ID = 54

mysql_query("INSERT INTO {$game}_ships (ship_name,login_name,shipclass,class_name,class_name_abbr,fighters,max_fighters,max_shields,cargo_bays,mine_rate_metal,mine_rate_fuel,config,size,upgrades,move_turn_cost,point_value,location,login_id
    ) values(   'Three 7','A','8','name','WM','4773','4773','8353','2003','5','45','bs:dt:ot','6','99','19','10',FLOOR(RAND() * 298 + 2),'54')");

プレーヤー 2 のインサートは同じで、プレーヤー ID のみが異なります。44 としましょう

それらは、2 から 300 まで変化するランダムな位置FLOOR(RAND() * 298 + 2)に挿入されます。

同じシステムにいるこれら 2 人のプレイヤーから船を選択し、戦闘機の数を比較し、データベースから最も弱いものを削除することで、ゲーム内にAIを作成したいと考えています。

これまでのところ、私は持っています:

mysql_query("SELECT * FROM `{$game}_ships` WHERE `login_id` = 54 AND 54 AND `location` = 234");

しかし、私は残りに関していくつかの問題を抱えています。

コメントやヘルプをいただければ幸いです。

PS:任意にlocation= 234"を選択しました。

4

2 に答える 2

1

すべての場所を反復して各場所をチェックし、各プレイヤーから少なくとも 1 隻の船があるかどうかを確認できます。もしそうなら、あなたは弱いものを破壊します。見る:

for ($i = 2; $i < 300; $i++) {
  $p1 = mysql_fetch_array(mysql_query("SELECT count(*) AS 'q' FROM `{$game}_ships` WHERE `login_id` = 54 AND `location` = " . $i));
  $p2 = mysql_fetch_array(mysql_query("SELECT count(*) AS 'q' FROM `{$game}_ships` WHERE `login_id` = 44 AND `location` = " . $i));
  if ($p1['q'] > 0 && $p2['q'] > 0) {
    //Get the first ship; if you want, can select a ship randomly
    $p1s = mysql_fetch_array(mysql_query("SELECT * FROM `{$game}_ships` WHERE `login_id` = 54 AND `location` = ".i));
    $p2s = mysql_fetch_array(mysql_query("SELECT * FROM `{$game}_ships` WHERE `login_id` = 44 AND `location` = ".i));
    //Here you compare $p1s and $p2s, and check which one is stronger. I am using the 'fighters' value, but you can change it if I misunderstood you
    if ($p1s['fighters'] > $ps2['fighters'])
      mysql_query ("DELETE FROM `{$game}_ships` WHERE `ship_name` = " + $ps2['ship_name']);
    else //Not checking for ties here, you can add it too
      mysql_query ("DELETE FROM `{$game}_ships` WHERE `ship_name` = " + $ps1['ship_name']);
  }
}

あなたのことを完全に理解できたかどうかはわかりませんが、これが少なくともあなたの望みの一部であることを願っています。

于 2012-06-30T22:35:37.007 に答える
1

このクエリは、プレーヤー 54 と 44 の両方が船を持っている場所のリストを提供します。

SELECT distinct p1s.location
FROM `{$game}_ships` p1s JOIN `{$game}_ships` p2s ON p1s.location=p2s.location
WHERE p1s.login_id=54 AND p2s.login_id=44;

そして、このクエリは、234 の位置にあるプレイヤー 54 または 44 の最も弱い船を削除します。

DELETE from `{$game}_ships`
WHERE login_id IN (54, 44) AND location=234
ORDER BY fighters LIMIT 1;
于 2012-06-30T23:05:51.203 に答える