Hoe ka ik het best deze code aanpassen? Bingo kaart met specifieke functionaliteiten

Status
Niet open voor verdere reacties.
Beste,

Dank voor de aanwijzingen. Ik heb de code dan aangepast op de volgende manier:

- Functie voor het vullen van de kaart
- Functie voor het printen van de kaart
- Als de functie voor het vullen van de kaart wat retourneert, laat ik de trekking gaan, en dan wordt de functie voor het printen van de kaart uitvoeren.

Toch krijg ik niets te zien op het scherm (het wordt blijkbaar geen trekking gedaan). Op een of andere manier, lijkt het erop dat de informatie van de ene functie wordt niet meegenomen. Zou je mij hier op kunnen helpen? Ik heb ook de meldingen in de gaten gehouden (ik zie niets in de php-logs van MAMP; eerder wel berichten van 'undefined variables' die nu niet meer te lezen zijn in de logs).

Zie code:

PHP:
<!DOCTYPE html>
<html>
<head>
<title>Bingo</title>
</head>
<body>
<h2>Bingokaart waarop BINGO is gevallen</h2>
<?php
 
$trekking = array();
$DeControlerij = false;
$DeControlecol = false;
$voltooid = false;
 
// initialiseer kaart

$kaart = array();
$rijen = 0;
$regel = 0;
    
function vullenKaart($kaart, $rijen, $regel) {
for ($rijen = 0; $rijen < 6; $rijen++) {
    $kaart[$rijen] = array();
    for($k = 0; $k < 6; $k++) {
        do {
            $regel = rand(($rijen + 1)*10, (($rijen + 1)*10)+9);
        } while(in_array($regel, $kaart[$rijen]));
        $kaart[$rijen][$k] = $regel;
}
}
}
    
$vullenKaart = vullenKaart($kaart, $rijen, $regel);
    
// teken kaart en bewaar score
    
$columns=[];
    
function printKaart($kaart, $columns, $DeControlerij, $DeControlecol, $trekking) {

echo "<table style='border:1px solid blue;'>";
    
$iter = 0;
$weggestreept = 0;
    
foreach ($kaart as $rijkey => $tabelrij) {
    echo "<tr>";
    $iter = 0;
    $weggestreept = 0;
    foreach ($tabelrij as $colkey => $cel) {
        // bewaar nummer v/d cell
        if(!key_exists($iter,$columns)){
            $columns[$iter]=0;
        }
        if (in_array($cel, $trekking)) {
            if($DeControlerij!==false && $DeControlerij ==$rijkey){
                echo "<td style='background:green;color:white;border:1px solid black;'>" . $cel . "</td>";
            }
            elseif($DeControlecol!==false && $DeControlecol==$colkey){
                echo "<td style='background:green;color:white;border:1px solid black;'>" . $cel . "</td>";
            }
            else{
                echo "<td style='border:1px solid blue;'>" . $cel . "</td>";
            }
            $weggestreept++;
            $columns[$iter]++;
        } 
        else {
            //$columns[$iter] += 0;
            echo "<td>" . $cel . "</td>";
        }
        $iter++;
        
    }
    echo "<td style='display:none;'>" . $weggestreept . "</td>";
    echo "</tr>";
}
echo "<tr>";
foreach($columns as $field){
    echo '<td style="display:none;">'.$field.'</td>';
}
echo "</tr>";
echo "</table>";
}
    
$printKaart = printKaart($kaart, $columns, $DeControlerij, $DeControlecol, $trekking);
    
if ($vullenKaart) {
    
do {
    do {
        $rijen = rand(10, 69);
    } while(in_array($rijen, $trekking));
    
    $trekking[] = $rijen;
    $tabelRijen = array(0,0,0,0,0,0);
    $tabelKolommen = array(0,0,0,0,0,0);
   
    foreach($kaart as $rij => $kolommen) {
        foreach($kolommen as $kol => $nummer) {
 
            if(in_array($nummer, $trekking)) {
                $tabelRijen[$rij]++;
                $tabelKolommen[$kol]++;
                if($tabelRijen[$rij] == 6 ){
                  $voltooid = true;
                  $DeControlerij = $rij;  
                }
                if($tabelKolommen[$kol] == 6){
                  $voltooid = true;
                  $DeControlecol = $kol;   
                } 
            }
        }
    }
    }   while(!$voltooid && $vullenKaart);
 
print $printKaart;
    
echo "<br />Getrokken getallen:<table><tr>";
foreach ($trekking as $nummer) {
    if (in_array($nummer, $trekking)) {
    echo "<td>" . $nummer . "</td>";
    }
}
echo "</tr></table>";
echo "<br/>Aantal getallen dat getrokken is: " . count($trekking);
    
}
    
?>
</body>
</html>
 
Laatst bewerkt:
Nu heb ik je volledige design overhoop gehaald.
Ik weet niet of je het bestaan van classes kent maar ik heb het even aangepast...
je moet ook eens nadenken hoe je het gaat opslaan en met meerdere kan spelen.
denk aan sessies en ook aan een script van de server die via een eigen sessie de trekking gaat ondervragen denk eens wat er dan gebeurt.

PHP:
<!DOCTYPE html>
<html>
<head>
<title>Bingo</title>
</head>
<body>
<h2>Bingokaart waarop BINGO is gevallen</h2>
<?php
class Trekking{
    private $getrokken = [];
    public function getNr(){
        do{
            $getal = rand(10, 69);
        }while(in_array($getal,$this->getrokken));
        array_push($this->getrokken,$getal);
        return $getal;
    }
    public function __toString(){
        $return= "<br />Getrokken getallen:<table><tr>";
        $return.= "</tr></table>";
        $return.= '<td> '.implode($this->getrokken ,' </td><td> ').' </td>';
        $return.= "<br/>Aantal getallen dat getrokken is: ".count($this->getrokken);
        return $return;
    }
    public function stoptrekking(){
        
    }
}
class Kaart{
    private $data;
    private $checks;
    private $isrow= -1;
    private $iscol= -1;
    private $rowscount=[];
    private $colscount=[];
    private $rowsize;
    private $colsize;
    public function __construct($rows=6,$colums=6){
        $this->rowsize=$rows;
        $this->colsize=$colums;
        $this->data = [];
        $this->checks=[];
        self::create($rows,$colums);
    }
    private function create($rows ,$cols){// initialiseer kaart
        for($rij = 0; $rij < $rows; $rij++) {
            $this->data[$rij] = [];
            $this->rowscount[$rij]=0;
            for($k = 0; $k < $cols; $k++) {
                $this->colscount[$k]=0;
                do {
                    $getal = rand(($rij + 1) * 10, (($rij + 1) * 10) + 9);
                } while(in_array($getal, $this->data[$rij]));
                $this->data[$rij][$k] = $getal;
            }
        }
    }
    public function checkNR($getal){
       $return = false;
       foreach($this->data as $row => $cols){
            foreach($cols as $col => $value){
                if($getal==$value){
                   if(!key_exists($row,$this->checks)){
                        //array_push($this->checks,$row);
                        //$this->checks[$row]=[];
                   }
                   //print $row.','.$col.'<br>';
                   $this->checks[$row][$col]=1;
                   if($this->isbingo($row,$col)){
                       return true; 
                   }
                }
            }
        }
        return false;
    }
    public function isbingo($row,$col){
        $this->rowscount[$row]=0;
        foreach($this->checks[$row] as $key => $coll){
            if($coll ==1){
               $this->rowscount[$row]++; 
            }
        }
        if($this->rowsize==$this->rowscount[$row]){
            return true;
        }
        $this->colscount[$col]=0;
        //$i=0;
        foreach($this->data as $key => $arow){
            if(key_exists($key,$this->checks)&& is_array($this->checks[$key])&&key_exists($col,$this->checks[$key])&&$this->checks[$key][$col]==1 ){
                $this->colscount[$col]++;
            }
        }
        if($this->colscount[$col]==$this->colsize){
            return true;
        }
        return false;
    }
    public function __toString(){
        echo '<table style="border:1px solid blue;">';
        foreach($this->data as $rijkey => $tabelrij) {
            echo '<tr>'."\n";
            //print_r($this->checks);
            foreach ($tabelrij as $colkey => $cel) {
                $td = '<td>' . $cel . '</td>';
                if(key_exists($rijkey,$this->checks)){
                    $arr = $this->checks[$rijkey];
                    if(is_array($this->checks[$rijkey]) && key_exists($colkey,$arr) && $this->checks[$rijkey][$colkey] !== false ){
                        $td='<td style="border:1px solid blue;">'.$cel.'</td>';
                    }
                    if($this->rowscount[$rijkey] == $this->rowsize  || $this->colscount[$colkey] == $this->colsize){
                        $td='<td style="background:green;color:white;border:1px solid black;">'.$cel.'</td>';
                    }
                }
                echo $td;
            }
            echo '<td style="">'.$this->rowscount[$rijkey].'</td>';
            echo '</tr>';
        }
        echo '<tr>';
        foreach ($this->colscount as $field) {
            echo '<td style="">'.$field.'</td>';
        }
        echo '</tr></table>';
    }
}
$trekking = array();
$DeControlerij = false;
$DeControlecol = false;

$voltooid = false;
/**
 * hieronder kan ik de functie print kaart niet vinden maar ook niet de gebruikte vaiablen
*/

$trekking = new trekking();
$kaart1 = new Kaart();
$kaart2 = new Kaart();
$kaart3 = new Kaart();
$i=0;
$nummerstrekken = true;
do {
    $i++;
    $nr =$trekking->getNr();
    if($kaart1->checkNR($nr)!==false){
        $nummerstrekken = false;
    }
    if($kaart2->checkNR($nr)!==false){
        $nummerstrekken = false;
    }
    if($kaart3->checkNR($nr)!==false){
        $nummerstrekken = false;
    }
    /*if($i>30){
        $nummerstrekken = false;
    }*/
} while($nummerstrekken);
print $kaart1->__toString();
print $kaart2->__toString();
print $kaart3->__toString();
print $trekking->__toString();

?>
</body>
</html>
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan