🦔
【PHP初心者】range関数を用いて戦争ゲームのトランプの強さを比較する
はじめに
戦争ゲームは52枚のトランプを使いプレイヤー同士が勝負するゲーム🃏
実装するにあたってカードの強さを比較するときに苦戦したのでまとめてみました!連想配列で試してみた
連想配列のキーと値にカードの数字と強さを紐づけて比べられるかを試してみました!
deck.php
public function __construct() {
$suits = ['スペード','ハート','ダイヤ','クラブ'];
$ranks = ['A' => 14,'K' => 13,'Q' => 12,'J' => 11,'10' => 10,'9' => 9,'8' => 8,'7' => 7,'6' => 6,'5' => 5,'4' => 4,'3' => 3,'2' => 2];
// 内容をcardsに入れていく
foreach ($suits as $suit) {
// Cardクラスのメンバ変数にsuitsとranksを振り分ける
foreach ($ranks as $rank => $strength) {
$this->cards[] = new Card($suit, $rank, $strength);
}
このコードでは$strengthを呼び出して比較させてもなぜかできなかった、、(var_dumpで見ても値は入ってた)
なので、新しく$strengthsを作ってその値と$ranksの値を紐づけよう!と考えました。
そこで使ったのがrange関数です。
range関数を使ってみた
range関数は(開始値、終了値、ステップ)を引数に整数の配列を作ってくれます。
〜ステップは各値の間の差です。(今回は1ずつ減っていくので-1にしています)〜
今回は$ranksにA~2の順番で値が入ってるので、強さも14~2の順番で値を入れてみました。
deck.php
public function __construct() {
$suits = ['スペード', 'ハート', 'ダイヤ', 'クラブ'];
$ranks = ['A', 'K', 'Q', 'J', '10', '9', '8', '7', '6', '5', '4', '3', '2'];
$strengths = range(14, 2, -1);
foreach ($suits as $suit) {
foreach ($ranks as $index => $rank) {
$strength = $strengths[$index]; // 強さはranksの順番に対応
$this->cards[] = new Card($suit, $rank, $strength);
}
これで$strengthを引っ張ってこれるようになりカードの比較がうまくいきました!
終わりに
今回は1人でコードを書いてデータの流れを考えるだけでよかったので大丈夫でしたが、実際の実務ではデータのやり取りが複雑になっていくと思うので今後はデータフローを可視化して実装に入れるようにしたいなと思いました。
今回の戦争ゲームのコードはこちら
Discussion