Sodoku in php

Devil87

Mitglied
Guten Tag zusammen,
ich hab hier im Forum die Suchfunktion benützt und nichts brauchbares gefunden.
Also, ich soll als Hausaufgabe Sodoku in PHP Programmieren/schreiben, nur ich hab nicht wirklich von PHP ahnung. Bisher hab ich sämtliche Variablen mit rand(1,9) zugewiessen und schon mal die Aufteilungen gemacht, mit Zeilen, Reihen und Feldern, zwar bin ich mir nicht sicher ob ich das richtig gemacht habe, trozdem hoffe ich das ihr mir helfen könnt.
Was ich bisher habe pack ich auch mal hier rein, ich bedanke mich schon mal im voraus für
eure hilfe. Danke an alle.
Code:
<html><head><title>Sodoku</title>
<link rel="stylesheet" type="text/css" href="../css/sodoku.css">
</head>
<body>
<?php
$zahl1_1 =rand(1,9); $zahl1_2 =rand(1,9); $zahl1_3 =rand(1,9);		$zahl1_4 =rand(1,9); $zahl1_5 =rand(1,9); $zahl1_6 =rand(1,9); 		$zahl1_7 =rand(1,9); $zahl1_8 =rand(1,9); $zahl1_9 =rand(1,9);
$zahl2_1 =rand(1,9); $zahl2_2 =rand(1,9); $zahl2_3 =rand(1,9); 		$zahl2_4 =rand(1,9); $zahl2_5 =rand(1,9); $zahl2_6 =rand(1,9); 		$zahl2_7 =rand(1,9); $zahl2_8 =rand(1,9); $zahl2_9 =rand(1,9);
$zahl3_1 =rand(1,9); $zahl3_2 =rand(1,9); $zahl3_3 =rand(1,9); 		$zahl3_4 =rand(1,9); $zahl3_5 =rand(1,9); $zahl3_6 =rand(1,9); 		$zahl3_7 =rand(1,9); $zahl3_8 =rand(1,9); $zahl3_9 =rand(1,9);

$zahl4_1 =rand(1,9); $zahl4_2 =rand(1,9); $zahl4_3 =rand(1,9); 		$zahl4_4 =rand(1,9); $zahl4_5 =rand(1,9); $zahl4_6 =rand(1,9); 		$zahl4_7 =rand(1,9); $zahl4_8 =rand(0,9); $zahl4_9 =rand(1,9);
$zahl5_1 =rand(1,9); $zahl5_2 =rand(1,9); $zahl5_3 =rand(1,9); 		$zahl5_4 =rand(1,9); $zahl5_5 =rand(1,9); $zahl5_6 =rand(1,9); 		$zahl5_7 =rand(1,9); $zahl5_8 =rand(0,9); $zahl5_9 =rand(1,9);
$zahl6_1 =rand(1,9); $zahl6_2 =rand(1,9); $zahl6_3 =rand(1,9); 		$zahl6_4 =rand(1,9); $zahl6_5 =rand(1,9); $zahl6_6 =rand(1,9); 		$zahl6_7 =rand(1,9); $zahl6_8 =rand(0,9); $zahl6_9 =rand(1,9);

$zahl7_1 =rand(1,9); $zahl7_2 =rand(1,9); $zahl7_3 =rand(1,9); 		$zahl7_4 =rand(1,9); $zahl7_5 =rand(1,9); $zahl7_6 =rand(1,9); 		$zahl7_7 =rand(1,9); $zahl7_8 =rand(0,9); $zahl7_9 =rand(1,9);
$zahl8_1 =rand(1,9); $zahl8_2 =rand(1,9); $zahl8_3 =rand(1,9); 		$zahl8_4 =rand(1,9); $zahl8_5 =rand(1,9); $zahl8_6 =rand(1,9); 		$zahl8_7 =rand(1,9); $zahl8_8 =rand(0,9); $zahl8_9 =rand(1,9);
$zahl9_1 =rand(1,9); $zahl9_2 =rand(1,9); $zahl9_3 =rand(1,9); 		$zahl9_4 =rand(1,9); $zahl9_5 =rand(1,9); $zahl9_6 =rand(1,9); 		$zahl9_7 =rand(1,9); $zahl9_8 =rand(0,9); $zahl9_9 =rand(1,9);


$feld1_1=(	$zahl1_1.$zahl1_2.$zahl1_3.$zahl2_1.$zahl2_2.$zahl2_3.$zahl3_1.$zahl3_2.$zahl3_3);
		
$feld1_2=(	$zahl1_4.$zahl1_5.$zahl1_6.$zahl2_4.$zahl2_5.$zahl2_6.$zahl3_4.$zahl3_5.$zahl3_6);
		
$feld1_3=(	$zahl1_7.$zahl1_8.$zahl1_9.$zahl2_7.$zahl2_8.$zahl2_9.$zahl3_7.$zahl3_8.$zahl3_9);

$feld2_1=(	$zahl4_1.$zahl4_2.$zahl4_3.$zahl5_1.$zahl5_2.$zahl5_3. $zahl6_1.$zahl6_2.$zahl6_3); 
		
$feld2_2=(	$zahl4_4.$zahl4_5.$zahl4_6.$zahl5_4.$zahl5_5.$zahl5_6.$zahl6_4.$zahl6_5.$zahl6_6);
		
$feld2_3=(	$zahl4_7.$zahl4_8.$zahl4_9.$zahl5_7.$zahl5_8.$zahl5_9.$zahl6_7.$zahl6_8.$zahl6_9);

$feld3_1=(	$zahl7_1.$zahl7_2.$zahl7_3.$zahl8_1.$zahl8_2.$zahl8_3.$zahl9_1.$zahl9_2.$zahl9_3); 
		
$feld3_2=(	$zahl7_4.$zahl7_5.$zahl7_6.$zahl8_4.$zahl8_5.$zahl8_6.$zahl9_4.$zahl9_5.$zahl9_6);
		
$feld3_3=(	$zahl7_7.$zahl7_8.$zahl7_9.$zahl8_7.$zahl8_8.$zahl8_9.$zahl9_7.$zahl9_8.$zahl9_9); 



$x1=($zahl1_1.$zahl1_2.$zahl1_3.$zahl1_4.$zahl1_5.$zahl1_6.$zahl1_7.$zahl1_8.$zahl1_9);
$x2=($zahl2_1.$zahl2_2.$zahl2_3.$zahl2_4.$zahl2_5.$zahl2_6.$zahl2_7.$zahl2_8.$zahl2_9);
$x3=($zahl3_1.$zahl3_2.$zahl3_3.$zahl3_4.$zahl3_5.$zahl3_6.$zahl3_7.$zahl3_8.$zahl3_9);
$x4=($zahl4_1.$zahl4_2.$zahl4_3.$zahl4_4.$zahl4_5.$zahl4_6.$zahl4_7.$zahl4_8.$zahl4_9);
$x5=($zahl5_1.$zahl5_2.$zahl5_3.$zahl5_4.$zahl5_5.$zahl5_6.$zahl5_7.$zahl5_8.$zahl5_9);
$x6=($zahl6_1.$zahl6_2.$zahl6_3.$zahl6_4.$zahl6_5.$zahl6_6.$zahl6_7.$zahl6_8.$zahl6_9);
$x7=($zahl7_1.$zahl7_2.$zahl7_3.$zahl7_4.$zahl7_5.$zahl7_6.$zahl7_7.$zahl7_8.$zahl7_9);
$x8=($zahl8_1.$zahl8_2.$zahl8_3.$zahl8_4.$zahl8_5.$zahl8_6.$zahl8_7.$zahl8_8.$zahl8_9);
$x9=($zahl9_1.$zahl9_2.$zahl9_3.$zahl9_4.$zahl9_5.$zahl9_6.$zahl9_7.$zahl9_8.$zahl9_9);


$y1=($zahl1_1.$zahl2_1.$zahl3_1.$zahl4_1.$zahl5_1.$zahl6_1.$zahl7_1.$zahl8_1.$zahl9_1);
$y2=($zahl1_2.$zahl2_2.$zahl3_2.$zahl4_2.$zahl5_2.$zahl6_2.$zahl7_2.$zahl8_2.$zahl9_2);
$y3=($zahl1_3.$zahl2_3.$zahl3_3.$zahl4_3.$zahl5_3.$zahl6_3.$zahl7_3.$zahl8_3.$zahl9_3);
$y4=($zahl1_4.$zahl2_4.$zahl3_4.$zahl4_4.$zahl5_4.$zahl6_4.$zahl7_4.$zahl8_4.$zahl9_4);
$y5=($zahl1_5.$zahl2_5.$zahl3_5.$zahl4_5.$zahl5_5.$zahl6_5.$zahl7_5.$zahl8_5.$zahl9_5);
$y6=($zahl1_6.$zahl2_6.$zahl3_6.$zahl4_6.$zahl5_6.$zahl6_6.$zahl7_6.$zahl8_6.$zahl9_6);
$y7=($zahl1_7.$zahl2_7.$zahl3_7.$zahl4_7.$zahl5_7.$zahl6_7.$zahl7_7.$zahl8_7.$zahl9_7);
$y8=($zahl1_8.$zahl2_8.$zahl3_8.$zahl4_8.$zahl5_8.$zahl6_8.$zahl7_8.$zahl8_8.$zahl9_8);
$y9=($zahl1_9.$zahl2_9.$zahl3_9.$zahl4_9.$zahl5_9.$zahl6_9.$zahl7_9.$zahl8_9.$zahl9_9);



?>
<div id="sodoku">
<table border="2">
	<tr><td><?php echo $zahl1_1; ?></td><td><?php echo $zahl1_2; ?></td><td><?php echo $zahl1_3; ?></td>		<td><?php echo $zahl1_4; ?></td><td><?php echo $zahl1_5; ?></td><td><?php echo $zahl1_6; ?></td>		<td><?php echo $zahl1_7; ?></td><td><?php echo $zahl1_8; ?></td><td><?php echo $zahl1_9; ?></td></tr>
	<tr><td><?php echo $zahl2_1; ?></td><td><?php echo $zahl2_2; ?></td><td><?php echo $zahl2_3; ?></td>		<td><?php echo $zahl2_4; ?></td><td><?php echo $zahl2_5; ?></td><td><?php echo $zahl2_6; ?></td>		<td><?php echo $zahl2_7; ?></td><td><?php echo $zahl2_8; ?></td><td><?php echo $zahl2_9; ?></td></tr>
	<tr><td><?php echo $zahl3_1; ?></td><td><?php echo $zahl3_2; ?></td><td><?php echo $zahl3_3; ?></td>		<td><?php echo $zahl3_4; ?></td><td><?php echo $zahl3_5; ?></td><td><?php echo $zahl3_6; ?></td>		<td><?php echo $zahl3_7; ?></td><td><?php echo $zahl3_8; ?></td><td><?php echo $zahl3_9; ?></td></tr>
	
	<tr><td><?php echo $zahl4_1; ?></td><td><?php echo $zahl4_2; ?></td><td><?php echo $zahl4_3; ?></td>		<td><?php echo $zahl4_4; ?></td><td><?php echo $zahl4_5; ?></td><td><?php echo $zahl4_6; ?></td>		<td><?php echo $zahl4_7; ?></td><td><?php echo $zahl4_8; ?></td><td><?php echo $zahl4_9; ?></td></tr>
	<tr><td><?php echo $zahl5_1; ?></td><td><?php echo $zahl5_2; ?></td><td><?php echo $zahl5_3; ?></td>		<td><?php echo $zahl5_4; ?></td><td><?php echo $zahl5_5; ?></td><td><?php echo $zahl5_6; ?></td>		<td><?php echo $zahl5_7; ?></td><td><?php echo $zahl5_8; ?></td><td><?php echo $zahl5_9; ?></td></tr>
	<tr><td><?php echo $zahl6_1; ?></td><td><?php echo $zahl6_2; ?></td><td><?php echo $zahl6_3; ?></td>		<td><?php echo $zahl6_4; ?></td><td><?php echo $zahl6_5; ?></td><td><?php echo $zahl6_6; ?></td>		<td><?php echo $zahl6_7; ?></td><td><?php echo $zahl6_8; ?></td><td><?php echo $zahl6_9; ?></td></tr>
	
	<tr><td><?php echo $zahl7_1; ?></td><td><?php echo $zahl7_2; ?></td><td><?php echo $zahl7_3; ?></td>		<td><?php echo $zahl7_4; ?></td><td><?php echo $zahl7_5; ?></td><td><?php echo $zahl7_6; ?></td>		<td><?php echo $zahl7_7; ?></td><td><?php echo $zahl7_8; ?></td><td><?php echo $zahl7_9; ?></td></tr>
	<tr><td><?php echo $zahl8_1; ?></td><td><?php echo $zahl8_2; ?></td><td><?php echo $zahl8_3; ?></td>		<td><?php echo $zahl8_4; ?></td><td><?php echo $zahl8_5; ?></td><td><?php echo $zahl8_6; ?></td>		<td><?php echo $zahl8_7; ?></td><td><?php echo $zahl8_8; ?></td><td><?php echo $zahl8_9; ?></td></tr>
	<tr><td><?php echo $zahl9_1; ?></td><td><?php echo $zahl9_2; ?></td><td><?php echo $zahl9_3; ?></td>		<td><?php echo $zahl9_4; ?></td><td><?php echo $zahl9_5; ?></td><td><?php echo $zahl9_6; ?></td>		<td><?php echo $zahl9_7; ?></td><td><?php echo $zahl9_8; ?></td><td><?php echo $zahl9_9; ?></td></tr>
</table>
</div>
</body>
</html>
 
Statt der vielen Variablen kannst du auch mehrdimensionale Arrays verwenden. Das sähe dann zB so aus:
Code:
zellen[reihe][spalte].
Durch die kannst du dann iterieren.

In der Praxis könnte das folgendermaßen aussehen, aber bitte nicht so übernehmen, da die Zufallszahlen mit höchster Wahrscheinlichkeit kein gültiges Sudokurätsel ergeben!

Wie sowas geht, verrät Wikipedia

PHP:
<html>
<head>
  <title>Sodoku</title>
  <link rel="stylesheet" type="text/css" href="../css/sodoku.css">
</head>
<body>
<?php
// Array für Felder erzeugen
$cell = array();

// Felder via rand() füllen statt dieser einzelnen Variablen
// Aber: Ergibt höcshtwahrscheinlich kein gültiges Sudoku!
for ($x = 1; $x <= 9; ++$x) {
    for ($y = 1; $y <= 9; ++$y) {
        $cell[$x][$y] = rand (1, 9);
    }
}

?>
  <div id="sodoku">
    <table border="2">
<?php
// Zeilenweise ausgeben
for ($y = 1; $y <= 9; ++$y):
?>
      <tr>
<?php
    for ($x = 1; $x <= 9; ++$x):
?>
        <td><?php echo $cell[$x][$y]; ?></td>
<?php
    endfor;
?>
      </tr>
<?php
endfor;
?>
    </table>
  </div>
</body>
</html>

Frage mich nur, in welchem Fach man als Hausaufgabe
a) ein Sudoku-Rätsel erstellen muss und
b) das auch noch in PHP (ist wohl mitunter am ungeeignetsten dafür, wenn man Brainf* und Whitespace ausschließt :D )
 
Hi

du benutzt glaub ich gerade einen sehr schwierigen Weg; aber egal;

Mit php ein Sudoku zu programmieren ist gar nicht leicht, da sich der Webserver höchstwahrscheinlich eher aufhängt als das er eine Lösung anzeigt.

Zumindestens solltest du bei den $zahl1_1 =rand(1,9);....
gleich mit angeben, dass die 2. Zahl nicht gleich der ersten sein soll.

Und wenn du bei der 2. Reihe bist, dass die 2.reihe-1.zahl ungleich der 1.reihe-1zahl ist....

Ich würde aber lieber gleich zu beispielsweise array_flip oder so raten, dass der Webserver die Zahlen im Array[zahlen von 1 bis 9] selber vertauscht.

//mom lese gerade den Post von maeTimmae
 
Hallo,

was genau soll das Programm denn machen? Ein Sudoku-Rätsel erzeugen? Ein Sudoku-Rätsel lösen? Oder soll man damit Sudoku über den Browser spielen können?

Grüße,
Matthias
 
Also der eine Code ist ja nur eine verkürzter Code als meiner, wenn ich das richtig sehe, oder?
Das Hauptproblem besteht ja für mich, die Gleichheit und Ungleichheit der Variablen fest zustellen. Das später Lücken noch kommen, mach ich mir erst später gedanken drüber, dass wird wahrscheinlich nicht so schwer werde, die Lücken zu machen.
Um die Gleichheit und Ungleichheit der Variablen zu prüfen, habe ich ja deswegen die x1...x9 , y1...y9 und die jeweiligen felder Variablen deklartirt bzw. noch mal zugeordnet.
Damit hoffte ich, mir das etwas leichter zu machen... was ja es nicht tut.... -.-
 
Meinen Debugger hat es eben gekillt :D

Und das ist nur ein Beispiel mit 4 x 4 :rolleyes:
PHP:
<?php
$cell = array();

for ($x = 0; $x < 4; ++$x) {
    for ($y = 0; $y < 4; ++$y) {
        while (true) {
            $cell[$x][$y] = rand(1, 4);

            $row = $col = array();
            
            for ($i = 0; $i < 4; ++$i) {
                $col[] = $cell[$x][$i];
                $row[] = $cell[$i][$y];
            }

            if (!in_array($cell[$x][$y], $row) AND !in_array($cell[$x][$y], $col)) {
                break;
            }
        }
    }
}
?>
<table>
<?php
for ($y = 0; $y < 4; ++$y):
?><tr><?php
    for ($x = 0; $x < 4; ++$x):
?><td><?php echo $cell[$x][$y]; ?></td><?php
    endfor;
?></tr>

<?php
endfor;
?>
</table>
 
Zuletzt bearbeitet:
Bitte nicht übel nehmen aber ich glaub der Code für den 4x4 Sodoku plättet die Server oder? Zumindest treib der Code mein xampp zum schwitzen und hat noch kein Bild ausgegeben, oder liegt das wegen den break?....
 
Zurück