PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Sudoku (Grundlage steht) (http://www.selfphp.de/forum/showthread.php?t=24451)

darkii 26.10.2011 08:56:07

Sudoku (Grundlage steht)
 
Hallo liebes Selfphp team,

ich versuche gerade ein Sudoku zu erstellen und hab bisslang auch alles geschaft. Jetz fehlen mir noch folgende Dinge:

- Ich bekomme schon ausgegeben in welcher Zeile und Spalte die Fehler sind und möchte diese jetzt rot färben und genau das falsche Kästchen dunkel rot.

- Ich möchte verhindern das der User die eingabe manipulieren kann (Da brauch ich eure Hilfe nicht das ist kein Problem)

-Das die neu eingegebenen Zahlen weiß bleiben (kein Problem aber) und sie da nach umschreibar sind (muss ich warsch meine Anfangsschleife umschreiben aber das sollte ich erst machen wenn ich Punkt 1 habe )

Hier mal mein PhP-Code:
PHP-Code:

<?php session_start(); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sudoku</title>
<link rel="STYLESHEET" type="text/css" href="sudoku.css">
<script type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
function FensterOeffnen (Adresse) {
  MeinFenster = window.open(Adresse, "Zweitfenster", "width=700,height=700,scrollbars=yes");
  MeinFenster.focus();
}
</script>
<!------------------------------------- Anfang Tabellenerstellung ------------------------------------------->
<div id=sudoku>
  <table width="266" height="117" border=0>
  <tr>
    <td><center>
      <table width="266" height="117" border=0>
        <tr>
          <td><center>
            <h1 class=sudoku>Sudoku</h1>
          </center></td>
        </tr>
        <tr>
          <td><center>
          </center></td>
        </tr>
        <tr>                                                          
          <td class="sudoku">
<?php 
ini_set
('memory_limit''-1');          

function 
getSudoku ()
{
    
$anzahl_benoetigter_zeichen 162;                          //Anzahl der Zeichen
    
$inhalt_datei "sudoku.txt";                               //Die Zeichen aus der Datei in einer variablen speichern
    
$zeichen_dokument filesize ($inhalt_datei);                           //Die Anzahl der Zeichen in der Variablen bestimmen
    
$moegliche_sudokus_z $zeichen_dokument $anzahl_benoetigter_zeichen;   //Anzahl der möglichen Sudokus
    
$rand rand(0$moegliche_sudokus_z);                                    //Zufällige Zahl aus .....                 
    
$handle fopen ($inhalt_datei"r");                                     //Öffnet den Inhalt und setzt Dateizeiger an den Anfang
    
$position_zeiger $anzahl_benoetigter_zeichen $rand;                   //Berechnet die Stelle für den Dateizeiger
    
fseek ($handle$position_zeigerSEEK_SET);                              //Platziert den Dateizeiger
    
$contents fread ($handle$anzahl_benoetigter_zeichen);                 //Holt die benötigten Zeichen für ein Sudoku
    
fclose ($handle);
    return 
$contents;
}


$sudokustr getSudoku ();
$sudoku    explode(";"$sudokustr);
$_SESSION['sudoku'] = $sudoku;
if (isset(
$_POST['sudoku']))
 {
    
$_SESSION['sudoku'] = $_POST;
    
//var_dump ($_SESSION['sudoku']);
 
}
 
//var_dump($_SESSION['sudoku']);
echo "<form method=post>";
echo 
"<table cellspacing=0 cellpadding=1 border=0 bgcolor=#000000>";
$count 0;
for (
$zeile 0$zeile 9$zeile++)
{
    echo 
"<tr>";
    for (
$kasten 0$kasten 9$kasten++)
    {
        echo 
"<td><div class=cell>";
        
$data "";
        if (
$kasten == || $kasten == 5)               //Nach  2 und nach 5 Kästchen dicker Strich
        
{
            
$border "border-right:2px solid #000000;";
        } else {
            
$border "";    
            
$border "";    
        }    
        if (
$zeile == || $zeile == 5)                //Nach der 2ten und nach der 3ten dicker Unterstrich auf der ganzen Zeile
        
{
            
$border .= "border-bottom:2px solid #000000;";
        }    
        if (
intval($_SESSION['sudoku'][$count]) > )
        {
            
$data "value='" $_SESSION['sudoku'][$count] . "'readonly style='background:#6E6E6E; " $border "'";
        } else {
            
$data "style='" $border "'";                                                                   
        }                                           
        echo 
"\r\n<input valign=middle type=text id=i" $count " name=" $count " " $data " size=5 maxlength=1  
              class=cell onkeyup='fontsize(this, this.value)'>\r\n"
//überflüssiges entfernen
        
echo "</div></td>";
        
$count ++;
    }
    echo 
"</tr>";
}
echo 
"</table>";
echo 
"<input type='submit' value='OK' name='sudoku' >";
echo 
"</form>";

$array_pruefen = array(1,2,3,4,5,6,7,8,9);

//--------------------------Ende Tabellenerstellung----------------------------------------------------------------------
//------------------------------------Zeilen-----------------------------------------------------------------------------
$a 0;
while (
$a )
{
$zeilaaaa1[] = $_SESSION['sudoku'][$a];
$a++; 
}

$b 9;
while (
$b 18 )
{
$zeilaaaa2[] = $_SESSION['sudoku'][$b];
$b++; 
}

$c 18;
while (
$c 27 )
{
$zeilaaaa3[] = $_SESSION['sudoku'][$c];
$c++; 
}

$d 27;
while (
$d 36 )
{
$zeilaaaa4[] = $_SESSION['sudoku'][$d];
$d++; 
}

$e 36;
while (
$e 45 )
{
$zeilaaaa5[] = $_SESSION['sudoku'][$e];
$e++; 
}

$f 45;
while (
$f 54 )
{
$zeilaaaa6[] = $_SESSION['sudoku'][$f];
$f++; 
}

$g 54;
while (
$g 63 )
{
$zeilaaaa7[] = $_SESSION['sudoku'][$g];
$g++; 
}

$h 63;
while (
$h 72 )
{
$zeilaaaa8[] = $_SESSION['sudoku'][$h];
$h++; 
}

$i 72;
while (
$i 81 )
{
$zeilaaaa9[] = $_SESSION['sudoku'][$i];
$i++; 
}

$zeilaaaa = array ($zeilaaaa1$zeilaaaa2$zeilaaaa3$zeilaaaa4$zeilaaaa5$zeilaaaa6$zeilaaaa7$zeilaaaa8$zeilaaaa9);
//--------------------------Ende Zeilen----------------------------------------------------------
//------------------------------Spalten----------------------------------------------------------

$aa 0;
while (
$aa 73 )
{
$spalteeee1[] = $_SESSION['sudoku'][$aa];
$aa $aa 9
}


$bb 1;
while (
$bb 74 )
{
$spalteeee2[] = $_SESSION['sudoku'][$bb];
$bb $bb 9
}

$cc 2;
while (
$cc 76 )
{
$spalteeee3[] = $_SESSION['sudoku'][$cc];
$cc $cc 9
}

$dd 9;
while (
$dd 77 )
{
$spalteeee4[] = $_SESSION['sudoku'][$dd];
$dd $dd 9
}

$ee 4;
while (
$ee 78 )
{
$spalteeee5[] = $_SESSION['sudoku'][$ee];
$ee $ee 9
}

$ff 5;
while (
$ff 79 )
{
$spalteeee6[] = $_SESSION['sudoku'][$ff];
$ff $ff 9
}

$gg 6;
while (
$gg 80 )
{
$spalteeee7[] = $_SESSION['sudoku'][$gg];
$gg $gg 9
}

$hh 7;
while (
$hh 81 )
{
$spalteeee8[] = $_SESSION['sudoku'][$hh];
$hh $hh 9
}

$ii 8;
while (
$ii 82 )
{
$spalteeee9[] = $_SESSION['sudoku'][$ii];
$ii $ii 9
}

$spalteeee = array ($spalteeee1$spalteeee2$spalteeee3$spalteeee4$spalteeee5$spalteeee6$spalteeee7$spalteeee8$spalteeee9);
//------------------------------Ende Spalte----------------------------------
//-----------------------------Überprüfungsarray-----------------------------

$array_pruefen = array(1,2,3,4,5,6,7,8,9);

//--------------------------Ende Überprüfungsarray---------------------------
//------------------------Zeilenprüfung--------------------------------------
$aaaa ;
while (
$aaaa 9)
{
    
$resultZ array_diff($array_pruefen$zeilaaaa[$aaaa]);
    
    if (empty(
$resultZ))
    {
    echo 
"Zeile" $aaaa "ist voll ok man" ;
    echo 
"<br/>";     
    }
    else
    {
    echo 
"Zeile" $aaaa "ist aber mal gar nicht richtig" ;
    echo 
"<br/>";
    }
    
$aaaa++;
     
}

//---------------------------Ende der Zeilenprüfung-------------------------
//---------------------------Anfang Spaltenprüfung-------------------------
$iiii ;
while (
$iiii 9)
{
    
$resultS array_diff($array_pruefen$spalteeee[$iiii]);
    
    if (empty(
$resultS))
    {
    echo 
"Spalte" $iiii "ist voll ok man" ;
    echo 
"<br/>";     
    }
    else
    {
    echo 
"Spalte" $iiii "ist aber mal gar nicht richtig" ;
    echo 
"<br/>";
    }
    
$iiii++;
     
}
?>
<a href="try.php" onclick="FensterOeffnen(this.href); return false">Neues Fenster</a>

 
        </td>
      </td>
    </tr>
    <tr>
      <td height=28 valign=bottom><center>
          <form method=post> 
            <input type="button" value="Lösung zeigen" onClick="">
            <input type="button" value="Prüfung" href="try.php" onClick="FensterOeffnen(this.href); return false">
            <input type="submit" value="Neues Sudoku" onClick"">    
            <input type="button" value="Fertig" onClick="">
            
      
<div id=bild>
<img src="bilder/Android.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild2>
<img src="bilder/Android2.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild3>  
<img src="bilder/Android3.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>
<div id=bild4>  
<img src="bilder/Android4.png" alt="Das Bild kann leider nicht angezeigt werden O.o" width="135">
</div>
<div id=bild5>  
<img src="bilder/hintergrund.png" alt="Das Bild kann leider nicht angezeigt werden O.o">
</div>

</body>
</html>


Ihr müsst mir jetzt keine Fertigen Lösungen schreiben mir reicht es wenn ihr mich auf eine Idee bringt ;) Wobei eine Lösung wäre natürlich einfacher :P

vt1816 26.10.2011 13:47:04

AW: Sudoku (Grundlage steht)
 
Hallo und willkommen hier im Forum.


Zitat:

Zitat von darkii (Beitrag 142304)
[..]
Ihr müsst mir jetzt keine Fertigen Lösungen schreiben mir reicht es wenn ihr mich auf eine Idee bringt ;) ...

Bringe die Prüfung (Zeile/Spalte) vor die Erstellung der Tabelle und verwende bei der Anzeige entsprechende (Farb-)Formatierungen (CSS).


Weitere Hinweise:
PHP-Code:

$dd 9
while (
$dd 77 

$spalteeee4[] = $_SESSION['sudoku'][$dd]; 
$dd $dd 9;  


Hier muss es richtig $dd = 3 (für 4. Spalte) heißen.


PHP-Code:

$bb 1
while (
$bb 74 

$spalteeee2[] = $_SESSION['sudoku'][$bb]; 
$bb $bb 9;  


$cc 2
while (
$cc 76 

$spalteeee3[] = $_SESSION['sudoku'][$cc]; 
$cc $cc 9;  


$dd 9
while (
$dd 77 

$spalteeee4[] = $_SESSION['sudoku'][$dd]; 
$dd $dd 9;  


Hier sollte es mit < 75 und nicht mit < 76 weitergehen.

darkii 26.10.2011 16:05:17

AW: Sudoku (Grundlage steht)
 
Erst mal danke für die Schreibfehlerkorrektur ;)

Den Code hab ich nun so umgestellt aber ich komme nicht drauf wie ich das ganze jetzt umsetzte. Egal welchen Gedankenweg ich gehe ich komm auf Probleme über Probleme.

Hatte auch schon eine Idee hatt mir aber alles zerstört. Und dadurch das ich seit 7 Stunden an dem Code wieder sitze bin ich leicht gebrainfucked :D

Habt ihr da noch ne idee oder nen tipp ? mir egal was Hauptsache Hilfe :D

PS: Den veränderten Code füge ich oben in den ersten post ein
PS2: Kann den ersten Code nicht editieren füge ihn dann (auch wen es etwas unübersichtlicher wird) hier ein.

PHP-Code:

<?php session_start(); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sudoku</title>
<link rel="STYLESHEET" type="text/css" href="sudoku.css">
<script type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
function FensterOeffnen (Adresse) {
  MeinFenster = window.open(Adresse, "Zweitfenster", "width=1000,height=800,scrollbars=no");
  MeinFenster.focus();
}
</script>
<!------------------------------------- Anfang Tabellenerstellung ------------------------------------------->
//gekürzt
<!----------------------------------- Unterbrechung Tabellenerstellung ------------------------------------->          
<?php 
//----------------------------------- Anfang Datensuche ----------------------------------------------------
ini_set('memory_limit''-1');          

define("KONSTANTE1" );
define("KONSTANTE2" );
define("KONSTANTE3" );
define("KONSTANTE4" );
define("KONSTANTE5" );
define("KONSTANTE6" );
define("KONSTANTE7" );
define("KONSTANTE8" );
define("KONSTANTE9" );


function 
getSudoku ()
{
    
$anzahl_benoetigter_zeichen 162;                          //Anzahl der Zeichen
    
$inhalt_datei "sudoku.txt";                               //Die Zeichen aus der Datei in einer variablen speichern
    
$zeichen_dokument filesize ($inhalt_datei);                           //Die Anzahl der Zeichen in der Variablen bestimmen
    
$moegliche_sudokus_z $zeichen_dokument $anzahl_benoetigter_zeichen;   //Anzahl der möglichen Sudokus
    
$rand rand(0$moegliche_sudokus_z);                                    //Zufällige Zahl aus .....                 
    
$handle fopen ($inhalt_datei"r");                                     //Öffnet den Inhalt und setzt Dateizeiger an den Anfang
    
$position_zeiger $anzahl_benoetigter_zeichen $rand;                   //Berechnet die Stelle für den Dateizeiger
    
fseek ($handle$position_zeigerSEEK_SET);                              //Platziert den Dateizeiger
    
$contents fread ($handle$anzahl_benoetigter_zeichen);                 //Holt die benötigten Zeichen für ein Sudoku
    
fclose ($handle);
    return 
$contents;
}


$sudokustr getSudoku ();
$sudoku    explode(";"$sudokustr);
$_SESSION['sudoku'] = $sudoku;
if (isset(
$_POST['sudoku']))
 {
    
$_SESSION['sudoku'] = $_POST;
    
//var_dump ($_SESSION['sudoku']);
 
}
//---------------------------------Ende Datensuche-----------------------------------------------------------------------
//------------------------------------Zeilen-----------------------------------------------------------------------------
$a 0;
while (
$a )
{
$zeilaaaa1[] = $_SESSION['sudoku'][$a];
$a++; 
}

$b 9;
while (
$b 18 )
{
$zeilaaaa2[] = $_SESSION['sudoku'][$b];
$b++; 
}

$c 18;
while (
$c 27 )
{
$zeilaaaa3[] = $_SESSION['sudoku'][$c];
$c++; 
}

$d 27;
while (
$d 36 )
{
$zeilaaaa4[] = $_SESSION['sudoku'][$d];
$d++; 
}

$e 36;
while (
$e 45 )
{
$zeilaaaa5[] = $_SESSION['sudoku'][$e];
$e++; 
}

$f 45;
while (
$f 54 )
{
$zeilaaaa6[] = $_SESSION['sudoku'][$f];
$f++; 
}

$g 54;
while (
$g 63 )
{
$zeilaaaa7[] = $_SESSION['sudoku'][$g];
$g++; 
}

$h 63;
while (
$h 72 )
{
$zeilaaaa8[] = $_SESSION['sudoku'][$h];
$h++; 
}

$i 72;
while (
$i 81 )
{
$zeilaaaa9[] = $_SESSION['sudoku'][$i];
$i++; 
}

$zeilaaaa = array ($zeilaaaa1$zeilaaaa2$zeilaaaa3$zeilaaaa4$zeilaaaa5$zeilaaaa6$zeilaaaa7$zeilaaaa8$zeilaaaa9);
//--------------------------Ende Zeilen----------------------------------------------------------
//------------------------------Spalten----------------------------------------------------------

$aa 0;
while (
$aa 73 )
{
$spalteeee1[] = $_SESSION['sudoku'][$aa];
$aa $aa 9
}


$bb 1;
while (
$bb 74 )
{
$spalteeee2[] = $_SESSION['sudoku'][$bb];
$bb $bb 9
}

$cc 2;
while (
$cc 75 )
{
$spalteeee3[] = $_SESSION['sudoku'][$cc];
$cc $cc 9
}

$dd 3;
while (
$dd 76 )
{
$spalteeee4[] = $_SESSION['sudoku'][$dd];
$dd $dd 9
}

$ee 4;
while (
$ee 77 )
{
$spalteeee5[] = $_SESSION['sudoku'][$ee];
$ee $ee 9
}

$ff 5;
while (
$ff 78 )
{
$spalteeee6[] = $_SESSION['sudoku'][$ff];
$ff $ff 9
}

$gg 6;
while (
$gg 79 )
{
$spalteeee7[] = $_SESSION['sudoku'][$gg];
$gg $gg 9
}

$hh 7;
while (
$hh 80 )
{
$spalteeee8[] = $_SESSION['sudoku'][$hh];
$hh $hh 9
}

$ii 8;
while (
$ii 81 )
{
$spalteeee9[] = $_SESSION['sudoku'][$ii];
$ii $ii 9
}

$spalteeee = array ($spalteeee1$spalteeee2$spalteeee3$spalteeee4$spalteeee5$spalteeee6$spalteeee7$spalteeee8$spalteeee9);
//------------------------------Ende Spalte----------------------------------
//-----------------------------Überprüfungsarray-----------------------------

$array_pruefen = array(1,2,3,4,5,6,7,8,9);

//--------------------------Ende Überprüfungsarray---------------------------
//------------------------Zeilenprüfung--------------------------------------
$aaaa ;
while (
$aaaa 9)
{
    
$resultZ array_diff($array_pruefen$zeilaaaa[$aaaa]);
    
    if (empty(
$resultZ))
    {
    echo 
"Zeile" $aaaa "ist voll ok man" ;
    echo 
"<br/>";     
    }
    else
    {
    
var_dump($resultZ);    
    echo 
"Zeile" $aaaa "ist aber mal gar nicht richtig" ;
    echo 
"<br/>";
    }
    
$aaaa++;
     
}

//---------------------------Ende der Zeilenprüfung-------------------------
//---------------------------Anfang Spaltenprüfung-------------------------
$iiii ;
while (
$iiii 9)
{
    
$resultS array_diff($array_pruefen$spalteeee[$iiii]);
    
    if (empty(
$resultS))
    {
    echo 
"Spalte" $iiii "ist voll ok man" ;
    echo 
"<br/>";     
    }
    else
    {
    echo 
"Spalte" $iiii "ist aber mal gar nicht richtig" ;
    echo 
"<br/>";
    }
    
$iiii++;
     
}
//-----------------------Ende der Spaltenpberprüfung------------------------ 
//var_dump($_SESSION['sudoku']);
echo "<form method=post>";
echo 
"<table cellspacing=0 cellpadding=1 border=0 bgcolor=#000000>";
$count 0;
for (
$zeile 0$zeile 9$zeile++)
{
    echo 
"<tr>";
    for (
$kasten 0$kasten 9$kasten++)
    {
        echo 
"<td><div class=cell>";
        
$data "";
        if (
$kasten == || $kasten == 5)               //Nach  2 und nach 5 Kästchen dicker Strich
        
{
            
$border "border-right:2px solid #000000;";
        } else {
            
$border "";    
            
$border "";    
        }    
        if (
$zeile == || $zeile == 5)                //Nach der 2ten und nach der 3ten dicker Unterstrich auf der ganzen Zeile
        
{
            
$border .= "border-bottom:2px solid #000000;";
        }    
        if (
intval($_SESSION['sudoku'][$count]) > )
        {
            if (
intval($_SESSION['sudoku'][$count]) == 1)
                {
                    
$data "value='" KONSTANTE1 "'readonly style='background:#6E6E6E; " $border "'";
                }
            if (
intval($_SESSION['sudoku'][$count]) == 2)
                {
                    
$data "value='" KONSTANTE2 "'readonly style='background:#6E6E6E; " $border "'";
                }
            if (
intval($_SESSION['sudoku'][$count]) == 3)
                {
                    
$data "value='" KONSTANTE3 "'readonly style='background:#6E6E6E; " $border "'";
                }
            if (
intval($_SESSION['sudoku'][$count]) == 4)
                {
                    
$data "value='" KONSTANTE4 "'readonly style='background:#6E6E6E; " $border "'";
                }
            if (
intval($_SESSION['sudoku'][$count]) == 5)
                {
                    
$data "value='" KONSTANTE5 "'readonly style='background:#6E6E6E; " $border "'";
                }
            if (
intval($_SESSION['sudoku'][$count]) == 6)
                {
                    
$data "value='" KONSTANTE6 "' readonly style='background:#6E6E6E; " $border "'";
                }
            if (
intval($_SESSION['sudoku'][$count]) == 7)
                {
                    
$data "value='" KONSTANTE7 "'readonly style='background:#6E6E6E; " $border "'";
                }
            if (
intval($_SESSION['sudoku'][$count]) == 8)
                {
                    
$data "value='" KONSTANTE8 "'readonly style='background:#6E6E6E; " $border "'";
                }
            if (
intval($_SESSION['sudoku'][$count]) == 9)
                {
                    
$data "value='" KONSTANTE9 "'readonly style='background:#6E6E6E; " $border "'";
                }
        } else {
            
$data "style='" $border "'";                                                                   
        }                                           
        echo 
"\r\n<input valign=middle type=text id=i" $count " name=" $count " " $data " size=5 maxlength=1  
              class=cell onkeyup='fontsize(this, this.value)'>\r\n"
//überflüssiges entfernen
        
echo "</div></td>";
        
$count ++;
    }
    echo 
"</tr>";
}
echo 
"</table>";
echo 
"<input type='submit' value='OK' name='sudoku' >";
echo 
"</form>";
$array_pruefen = array(1,2,3,4,5,6,7,8,9);
....

Code gekürzt weil er zulang war ;)

darkii 27.10.2011 16:11:06

AW: Sudoku (Grundlage steht)
 
erbarmt sich keiner und hilft mir ?

Ckaos 28.10.2011 08:02:38

AW: Sudoku (Grundlage steht)
 
Hi

ich bau ja auch gern Dinge selber um zu lernen aber das O.o
Hol dir hier doch ideen...
Sudoku

mfg

CKaos

darkii 28.10.2011 08:22:21

AW: Sudoku (Grundlage steht)
 
Möchte ich nicht. Lieber selber lösen bislang giegs ja auch ohne einfach abzugucken

darkii 02.11.2011 08:29:16

AW: Sudoku (Grundlage steht)
 
Hatt noch wer tipps oder einen Lösungsansatz ?

DokuLeseHemmung 02.11.2011 08:59:58

AW: Sudoku (Grundlage steht)
 
http://www.php-resource.de/forum/php...tur-steht.html

vt1816 02.11.2011 10:36:06

AW: Sudoku (Grundlage steht)
 
Zitat:

Zitat von DokuLeseHemmung (Beitrag 142375)

Crossposting!

[mod: closed]


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:04:02 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.