Наконец то я сделал это. Без всякой графики, всё в одном файле. Играйте на здоровье.
| Код | <html> <head> <title>BattleShip</title> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" > <? $fleet1 = $_POST['fleet1']; $fleet2 = $_POST['fleet2']; $fire1 = $_POST["fire1"]; $fire2 = $_POST["fire2"]; $selected1 = $_POST["selected1"]; $selected2 = $_POST["selected2"]; $selectedA = $_POST["selectedA"]; $selectedB = $_POST["selectedB"]; $turn = $_POST["turn"];
function addShip($theShip, $dir){ //attempt to add a ship to the board or return false if failed global $board;
$itWorked = TRUE;
switch ($dir){ case "E": //col from 0 to board width - ship lenth //row from 0 to board height $newCol = rand(0, 9 - strlen($theShip)); $newRow = rand(0, 9);
for ($i = 0; $i < strlen($theShip); $i++){ //new character same row, initial column + $i $boardNumber = $board[$newRow][$newCol + $i]; $shipNumber = substr($theShip, $i, 1);
//check for legal values in current space on board if (($boardNumber == $shipNumber) || ($boardNumber == ".")){ $board[$newRow][$newCol + $i] = $shipNumber; } else { $itWorked = FALSE; } // end if } // end for loop break;
case "S": //col from 0 to board width //row from 0 to board height - ship length $newCol = rand(0, 9); $newRow = rand(0, 9 - strlen($theShip)); //print "south:\tRow: $newRow\tCol: $newCol<br>\n";
for ($i = 0; $i < strlen($theShip); $i++){ //check for a legal move $boardNumber = $board[$newRow + $i][$newCol]; $shipNumber = substr($theShip, $i, 1); if (($boardNumber == $shipNumber) || ($boardNumber == ".")){ $board[$newRow + $i][$newCol] = $shipNumber; } else { $itWorked = FALSE; } // end if } // end for loop break;
} // end switch return $itWorked; } // end addShip
function fillBoard(){ //fill board with ships by calling addShip() for each ship //or return false if failed global $ships; $direction = array("S","E"); $itWorked = TRUE; $counter = 0; $keepGoing = TRUE; while($keepGoing){ $dir = rand(0, 1); $result = addShip($ships[$counter], $direction[$dir]); if ($result == FALSE){ //print "failed to place $ship[$counter]"; $keepGoing = FALSE; $itWorked = FALSE; } // end if $counter++; if ($counter >= count($ships)){ $keepGoing = FALSE; } // end if } // end while return $itWorked; } // end fillBoard
function makeBoard($theBoard){ //given a board array, return an HTML table based on the array $fleet = ""; $fleet .= "<table border = 1>\n"; //check logic here for ($row = 0; $row < 10; $row++){ $fleet .= "<tr>\n"; for ($col = 0; $col < 10; $col++){ $fleet .= " <td width = 20>{$theBoard[$row][$col]}</td>\n"; } // end col for loop $fleet .= "</tr>\n"; } // end row for loop $fleet .= "</table>\n"; return $fleet; } // end makeBoard;
$ships = array ("22","333","4444","55555","666666");
if ($turn == 1) { $turn1 = " disabled='disabled'"; $turn2 = ""; $turn = 2; } else { $turn2 = " disabled='disabled'"; $turn1 = ""; $turn = 1; }
if ($fleet1){
//seporatly save vlaue of each cel for ($row = 0; $row < 10; $row++){ for ($col = 0; $col < 10; $col++){ echo "<input type='hidden' name='a$row$col' value='{$_POST["a$row$col"]}'>\n"; } // end col for loop echo "\n"; } // end row for loop } else { $legalBoard = FALSE; //keep trying to build a board until you get a legal result while ($legalBoard == FALSE){ //initialize board with a . in each cell for ($row = 0; $row < 10; $row++){ for ($col = 0; $col < 10; $col++){ $board[$row][$col] = "."; } // end col for loop } // end row for loop $legalBoard = fillBoard(); } // end while
//make the final fleet $fleet1 = makeBoard($board);
for ($row = 0; $row < 10; $row++){ for ($col = 0; $col < 10; $col++){ echo "<input type='hidden' name='a$row$col' value='{$board[$row][$col]}'>\n"; } // end col for loop echo "\n"; } // end row for loop } if ($fleet2){ //seporatly save vlaue of each cel for ($row = 0; $row < 10; $row++){ for ($col = 0; $col < 10; $col++){ echo "<input type='hidden' name='b$row$col' value='{$_POST["b$row$col"]}'>\n"; } // end col for loop echo "\n"; } // end row for loop } else { $legalBoard = FALSE; while ($legalBoard == FALSE){ //initialize board with a . in each cell for ($row = 0; $row < 10; $row++){ for ($col = 0; $col < 10; $col++){ $board[$row][$col] = "."; } // end col for loop } // end row for loop $legalBoard = fillBoard(); } $fleet2 = makeBoard($board);
//seporatly save vlaue of each cel for ($row = 0; $row < 10; $row++){ for ($col = 0; $col < 10; $col++){ echo "<input type='hidden' name='b$row$col' value='{$board[$row][$col]}'>\n"; } // end col for loop echo "\n"; } // end row for loop } //end if
//print out page to user with fleet on it echo <<<HERE <center> <h1>BattleShip</h1> <h3>Ships</h3> <table border = 5><tr> HERE; //print ship list foreach ($ships as $theShip){ echo "<td>$theShip</td>\n"; } // end foreach echo "</tr></table>"; echo "<table border='1'><tr><td>"; echo " Player 1"; if (is_numeric($_POST[$fire1])) { echo " YOU HIT SHIP #$_POST[$fire1]!<table border='1'>";} else {echo "<table border='2'>";} $selected1 = explode('.', $selected1); $selectedA = explode('.', $selectedA); for ($i = 0; $i < 10; $i++){ echo "<tr>"; for ($j = 0; $j < 10; $j++){ if ($fire1 == "a" . $i . $j && is_numeric($_POST[$fire1]) || in_array($i . $j, $selectedA)) { array_push($selectedA, $i . $j); echo "<td><input type='checkbox' checked='checked' disabled='disabled' value='c$i$j' name='c$i$j'></td>"; } else if($fire1 == "a" . $i . $j || in_array($i . $j, $selected1)) { array_push($selected1, $i . $j); echo "<td><input type='checkbox' disabled='disabled' value='c$i$j' name='c$i$j'></td>"; } else { echo "<td><input type='radio' $turn1 value='a$i$j' name='fire1'></td>"; }
} // end for loop echo "</tr>"; } // end for loop $selected1 = implode('.', $selected1); $selectedA = implode('.', $selectedA); echo "</table>";
echo "</td><td>"; echo " Player 2"; if (is_numeric($_POST[$fire2])) { echo " YOU HIT SHIP #$_POST[$fire2]!<table border='2'>";} else {echo "<table border='2'>";} $selected2 = explode('.', $selected2); $selectedB = explode('.', $selectedB); for ($i = 0; $i < 10; $i++){ echo "<tr>"; for ($j = 0; $j < 10; $j++){ if ($fire2 == "b" . $i . $j && is_numeric($_POST[$fire2]) || in_array($i . $j, $selectedB)) { array_push($selectedB, $i . $j); echo "<td><input type='checkbox' checked='checked' disabled='disabled' value='d$i$j' name='d$i$j'></td>"; } else if($fire2 == "b" . $i . $j || in_array($i . $j, $selected2)) { array_push($selected2, $i . $j); echo "<td><input type='checkbox' disabled='disabled' value='d$i$j' name='d$i$j'></td>"; } else { echo "<td><input type='radio' $turn2 value='b$i$j' name='fire2'></td>"; }
} // end for loop echo "</tr>"; } // end for loop $selected2 = implode('.', $selected2); $selectedB = implode('.', $selectedB); echo "</table>";
?></td></table> <input type="submit" value="FIRE"></center> <input type='hidden' name='fleet1' value='<?=$fleet1?>'> <input type='hidden' name='fleet2' value='<?=$fleet2?>'> <input type="hidden" name="selected1" value="<?=$selected1?>" /> <input type="hidden" name="selected2" value="<?=$selected2?>" /> <input type="hidden" name="selectedA" value="<?=$selectedA?>" /> <input type="hidden" name="selectedB" value="<?=$selectedB?>" /> <input type="hidden" name="turn" value="<?=$turn?>" />
</form> </body> </html>
|
Может быть код не очень чистый, зато работает. |