hi leute ich habe vor minesweeper zu programmieren und zwar mit html und php…das ganze ohne grafiken…
also ich habe bereits das feld mit buttons erstellt…
nur fehlt mir ein befehl die 10 minen zufällig zu verteilen…
hat einer ne idee? habe schon nen quelltext gefunden doch der is erstens mit grafiken und zweitens steig ich da nicht durch ^^
danke schonmal fürs lesen und hoffentlich antworten
Wir müssten wissen, wie du dein Feld aufgebaut hast. Gib mal deinen bisherigen Code!
MfG Icy
Hi. Willkommen im Forum!
Wie du das genau umsetzt, hängt von deiner Datenstruktur ab. Eine Möglichkeit wäre es, ein zweidimensionales Feld zu nutzen:
[php]<?php
function buildField($sizeX, $sizeY, $numberOfMines)
{
if ($numberOfMines > $sizeX * $sizeY) {
throw new Exception(‚Not all mines will fit on the board.‘);
}
// Create a field of size: $sizeX * $sizeY
$field = array_fill(
0,
$sizeX,
array_fill(
0,
$sizeY,
false
)
);
// Randomly place mines
$i = 0;
while ($i < $numberOfMines) {
$testX = array_rand($field);
$testY = array_rand($field[$testX]);
if (false === $field[$testX][$testY]) {
$field[$testX][$testY] = true;
$i++;
}
}
return $field;
}
$field = buildField(40, 40, 500);
header(‚Content-Type: text/plain‘);
foreach ($field as $row) {
foreach ($row as $cell) {
if (true === $cell) {
echo 'x ';
} else {
echo '. ';
}
}
echo „\n“;
}[/php]
Interessanter ist übrigens die Frage, wie du die Daten eines Spiels über das Neuladen der Seite hinweg speichern möchtest. (Edit: Vergesst die Frage. → Session.)
also erstmal großen dank für den lösungsvorschlag…leider gibt es da funktionn die mir neu sind…muss die gleich nochmal genau analysieren…
aber erstmal hier ein button
kurze frage dazu…wie schaff ich es dass da eine ausgabe im button ist nachdem ich ihn geklickt habe?
ach ja und ich wollte nur nen 8x8 feld mit 10 minen nicht individuel einstellbar…das wäre zu kompliziert^^
kurze frage nochmal an [B]mermshaus[/B] so wie ich jetzt deinen quelltext verstehe würdest du das ganze programm in php schreiben?
kurze frage nochmal an [B]mermshaus[/B] so wie ich jetzt deinen quelltext verstehe würdest du das ganze programm in php schreiben?
naja das wolltest du doch auch oder?
ohne html und css wird es natuerlich nicht gehen, php ist ja rein serverseitig
In meinem Beispiel habe ich lediglich der Einfachheit halber kein HTML verwendet, sondern die Ausgabe als Plaintext generiert. Schließlich ging es in deiner Frage nicht in erster Linie um die Darstellung.
Wie Mad Dog sagt, HTML und CSS wirst du brauchen, sonst sieht man nur unformatierte Buchstaben.
Du hast mehr oder weniger die beiden Möglichkeiten, die Spiellogik komplett in PHP zu schreiben oder komplett in JavaScript. (Mit Ajax wäre auch ein Gemisch möglich, aber das führt hier glaube ich für den Moment zu weit.)
-
Bei der PHP-Version wird bei jedem Klick auf ein Feld die Seite als Formular abgeschickt, ausgewertet und wieder neu geladen. Der Status des Spielfelds wird in einer Session abgelegt. Vorteil: Nicht clientseitig manipulierbar. Nachteil: Langsam und hoher Rechenaufwand, da Seite immerzu neu geladen werden muss.
-
Die JavaScript-Version hält alle Spieldaten clientseitig und aktualisiert die Darstellung des Spielfelds bei Spieleraktionen ohne Seitenreload. Vor- und Nachteile sind gegenüber der PHP-Variante vertauscht.
Sinnvoller ist es, das Spiel in JavaScript zu implementieren, da es flüssiger spielbar wird und die zahlreichen Seitenreloads im Grunde unnötig sind. Das soll dich aber nicht von einer PHP-Version abschrecken. Die ist genauso möglich. Der Aufwand ist in etwa identisch, wenn vergleichbare Kenntnisse in PHP und JavaScript vorhanden sind.
Bevor es bei mir auf der Platte versauert…
Der Ansatz enthält allerdings noch keine Programmierung der Spiellogik.
Nur im Firefox getestet.
[php]<?php
class Minesweeper_Cell
{
public $isMine = false;
public $isRevealed = false;
public $posX = -1;
public $posY = -1;
/**
* TODO Not yet implemented
*
* @var int
*/
public $adjacentMines = 0;
}
function buildField($sizeX, $sizeY, $numberOfMines)
{
if ($numberOfMines > $sizeX * $sizeY) {
throw new Exception(‚Not all mines will fit on the board.‘);
}
// Create a field of size: $sizeX * $sizeY
$field = array_fill(0, $sizeX, array());
$x = 0;
foreach ($field as &$row) {
for ($y = 0; $y < $sizeY; $y++) {
$cell = new Minesweeper_Cell();
$cell->posX = $x;
$cell->posY = $y;
$row[] = $cell;
}
$x++;
}
unset($row);
// Randomly place mines
$i = 0;
while ($i < $numberOfMines) {
$testX = array_rand($field);
$testY = array_rand($field[$testX]);
$cell = $field[$testX][$testY];
if (!$cell->isMine) {
$cell->isMine = true;
$i++;
}
}
return $field;
}
error_reporting(-1);
session_start();
header(‚content-type: text/html; charset=utf-8‘);
// Initialize session data
if (!isset($_SESSION[‚field‘])) {
/* Start new game */
$_SESSION[‚field‘] = buildField(20, 30, 250);
}
// Perform form actions
if (isset($_POST[‚form_id‘])) {
if ($_POST[‚form_id‘] === ‚cell_clicked‘) {
// If anybody knows how do to this in one line, TELL ME
$tmp = array_keys($_POST[‚cell‘]);
$x = array_pop($tmp);
$tmp = array_keys($_POST['cell'][$x]);
$y = array_pop($tmp);
$cell = $_SESSION['field'][$x][$y];
if ($cell->isMine) {
// No explosions yet
$cell->isRevealed = true;
} else {
// No logic yet, either
$cell->isRevealed = true;
}
} else if ($_POST['form_id'] === 'new_game') {
$_SESSION = array();
/* Start new game */
$_SESSION['field'] = buildField(20, 30, 250);
}
}
$field = $_SESSION[‚field‘];
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Minesweeper</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
body {
padding: 60px;
}
.minesweeper {
margin-bottom: 30px;
}
.minesweeper p.row {
clear: both;
}
.minesweeper input.cell {
width: 20px;
height: 20px;
float: left;
border: 1px outset #ccc;
}
.minesweeper input.cell.revealed {
border: 1px inset #ccc;
}
</style>
</head>
<body>
<div class="minesweeper">
<form method="post" action="">
<?php foreach ($field as $row): ?>
<p class="row">
<?php foreach ($row as $cell): ?>
<input class="cell<?php echo ($cell->isRevealed) ? ' revealed' : ''; ?>"
type="submit"
name="cell[<?php echo $cell->posX; ?>][<?php echo $cell->posY; ?>]"
value="<?php
if ($cell->isRevealed) {
if ($cell->isMine) {
echo 'X';
}
}
?>" />
<?php endforeach; ?>
</p>
<?php endforeach; ?>
<input type="hidden" name="form_id" value="cell_clicked" />
</form>
</div>
<form method="post" action="">
<p>
<input type="hidden" name="form_id" value="new_game" />
<input type="submit" value="Neues Spiel beginnen" />
</p>
</form>
</body>
[/php]
danke erstmal für den umfangreichen quelltext mit kommentaren
steige zwar nicht ganz durch an manchen stellen aber ich versuche durchzusteigen…
wie kann ich das jetzt in meinen array einbringen?
hier mein code:
<?php $buttons1 = array( 0 => '.', 1 => '.', 2 => '.', 3 => '.', 4 => '.', 5 => '.', 6 => '.', 7 => '.', 8 => '.', 9 => '.', 10 => '.', ); $buttons2 = array( 0 => '.', 1 => '.', 2 => '.', 3 => '.', 4 => '.', 5 => '.', 6 => '.', 7 => '.', 8 => '.', 9 => '.', 10 => '.', ); $buttons3 = array( 0 => '.', 1 => '.', 2 => '.', 3 => '.', 4 => '.', 5 => '.', 6 => '.', 7 => '.', 8 => '.', 9 => '.', 10 => '.', ); $buttons4 = array( 0 => '.', 1 => '.', 2 => '.', 3 => '.', 4 => '.', 5 => '.', 6 => '.', 7 => '.', 8 => '.', 9 => '.', 10 => '.', ); $buttons5 = array( 0 => '.', 1 => '.', 2 => '.', 3 => '.', 4 => '.', 5 => '.', 6 => '.', 7 => '.', 8 => '.', 9 => '.', 10 => '.', ); $buttons6 = array( 0 => '.', 1 => '.', 2 => '.', 3 => '.', 4 => '.', 5 => '.', 6 => '.', 7 => '.', 8 => '.', 9 => '.', 10 => '.', ); $buttons7 = array( 0 => '.', 1 => '.', 2 => '.', 3 => '.', 4 => '.', 5 => '.', 6 => '.', 7 => '.', 8 => '.', 9 => '.', 10 => '.', ); $buttons8 = array( 0 => '.', 1 => '.', 2 => '.', 3 => '.', 4 => '.', 5 => '.', 6 => '.', 7 => '.', 8 => '.', 9 => '.', 10 => '.', ); $buttons9 = array( 0 => '.', 1 => '.', 2 => '.', 3 => '.', 4 => '.', 5 => '.', 6 => '.', 7 => '.', 8 => '.', 9 => '.', 10 => '.', ); $buttons10 = array( 0 => '.', 1 => '.', 2 => '.', 3 => '.', 4 => '.', 5 => '.', 6 => '.', 7 => '.', 8 => '.', 9 => '.', 10 => '.', ); ?> <?php foreach ($buttons1 as $buttonValue) { echo ''; } ?><?php foreach ($buttons2 as $buttonValue) { echo ''; } ?>
<?php foreach ($buttons3 as $buttonValue) { echo ''; } ?>
<?php foreach ($buttons4 as $buttonValue) { echo ''; } ?>
<?php foreach ($buttons5 as $buttonValue) { echo ''; } ?>
<?php foreach ($buttons6 as $buttonValue) { echo ''; } ?>
<?php foreach ($buttons7 as $buttonValue) { echo ''; } ?>
<?php foreach ($buttons8 as $buttonValue) { echo ''; } ?>
<?php foreach ($buttons9 as $buttonValue) { echo ''; } ?>
<?php foreach ($buttons10 as $buttonValue) { echo ''; } ?>
Willkommen im Forum.
Falls du eine sinnvolle Frage hast, erstell bitte einen eigenen Thread. Dein Code gibt nicht besonders viel her.
Dennoch als Tipp: Schau dir mal mehrdimensionale Arrays an.