Получить из базы данных цвет многоугольника PHP - PullRequest
0 голосов
/ 18 декабря 2011

У меня есть база данных со следующей структурой.

Index    Output

  1       1
  2       2
  3       1
  4       1
  5       3
  6       1
  7       2
  8       1
  9       3
 10       2
 11       2
 12       3

Я хочу создать матрицу квадратов 3X4 (что-то вроде игры в крестики-нолики и раскрасить их в соответствии с выходными данными). Поэтому, если на выходе будет 1, я закрашу этот квадрат красным, если на выходе 2, я закраслю этот квадрат синим, а если на выходе будет 3, я закраслю этот квадрат зеленым. Квадраты выглядят примерно так (за исключением того, что я использую графику)

 -- -- --
|  |  |  |
 -- -- --
|  |  |  |
 -- -- --
|  |  |  |
 -- -- -- 
|  |  |  |
 -- -- --

Я понимаю, что могу использовать функцию многоугольника для рисования и заливки фигур, но могу ли я написать 12 массивов, определяющих 12 различных наборов четырех координат, или есть более простой способ

Я сейчас делаю следующее

<?php

$user_name = "root";
$password = "pass";
$database = "db";
$server = "127.0.0.1";

$db_handle = mysql_connect($server, $user_name, $password);
$db_found = mysql_select_db($database, $db_handle);

$blue = imagecolorallocate($image, 0, 0, 255);
$red = imagecolorallocate($image, 255, 0, 0);
$green = imagecolorallocate($image, 0, 255, 0);
$image = imagecreatetruecolor(400, 300);
$col_poly = imagecolorallocate($image, 255, 255, 255);

if ($db_found) {
for ($i = 0 ; $i<=12 ; $i=$i+1) {

    $SQL = "SELECT * FROM table1 where index like " . $i
    $result = mysql_query($SQL);
    while ($db_field = mysql_fetch_assoc($result)) {
        if  ($db_field['Result'] == 1) { // and similarly for blue and green 

            imagepolygon($image, array(
                 0,   0,
                     0,  10,
                 10, 10,
                 10, 0
            ),
            4,
        $col_poly);

imagefilledpolygon($image, $values, 6, $red
}
 // and so on for others 
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>

Спасибо

1 Ответ

0 голосов
/ 18 декабря 2011

Немного математики должно помочь!Если мы посчитаем, в каком столбце и строке должно появиться данное число, то все остальное должно быть довольно простым.Эти две строки должны помочь:

$col = ($i-1)%3;
$row = floor(($i-1)/3);

И чтобы поместить их в контекст, я думаю, что что-то вроде ниже должно работать:

while ($db_field = mysql_fetch_assoc($result)) {
    switch($db_field['Result']) {
        case 1: $colour = $blue; break;
        case 2: $colour = $red; break;
        case 3: $colour = $green; break;
    }
    $i = $db_field['index'];
    $col = ($i-1)%3;
    $row = floor(($i-1)/3);
    imagefilledpolygon($image, array(
        $row*10, $col*10,
        $row*10, $col*10+10,
        $row*10+10, $col*10+10,
        $row*10+10, $col*10
    ),4,$colour);
}
...