Le début d'un formulaire un peu spécial

cs_craso Messages postés 55 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 20 janvier 2009 - 5 déc. 2006 à 13:09
cs_craso Messages postés 55 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 20 janvier 2009 - 11 déc. 2006 à 12:39
bonjour,
il s'agit de la classe d'un formulaire validé par un input type=image, avec pour le moment une option : se déplacer ou combattre. Lorsque la bille se déplace, celle-ci regarde dans la direction de son déplacement, et se place donc à l'opposé de cette direction. Et lorsqu'elle combat, celle-ci reste sur sa position.
Ca, c'est en théorie, car si on se deplace puis on combat, la bille continue de se deplacer, alors qu'elle devrait rester en sa position. Voila son code :
<?php
class formulaire
{
    //les attributs de l'image
    const size=255;
    const milieu=128;

    //l'image php
    private $vue;
    //sa copie en jpg
    private $img;

    //les couleurs
    private $rouge;
    private $jaune;
    private $blanc;
    private $orange;

    //un peu de trigo :p
    private $rad;

    public function __construct()
    {
        //integre une session
        session_start();
       
        //les images créées
        $this->vue = imagecreatetruecolor(self::size,self::size);
        //en fonction de l'id du perso(par ex.:321654.jpg)
        $this->img = 'test.jpg';

        //leurs couleurs
        $this->rouge = imagecolorallocate($this->vue, 255, 0, 0);
        $this->jaune = imagecolorallocate($this->vue, 255, 255, 0);
        $this->blanc = imagecolorallocate($this->vue, 255, 255, 255);
        $this->orange = imagecolorallocate($this->vue, 255, 128, 0);

        //l'épaisseur des traits
        imagesetthickness($this->vue,2);
       
        imageellipse ($this->vue,self::milieu, self::milieu, 210, 210, $this->blanc );
        imagesetpixel($this->vue,self::milieu,self::milieu,$this->blanc);

        if(isset($_POST['action']))
        {
//            $this->exportSession($this->lireAction($_POST['action']));
            $this->lanceAction($_POST['action']);
        }else
        {
            $this->depart();
        }
   
    }

    public function __destruct()
    {
    }

    function depart()
    {
        //charge l'image du perso et recher sa position dans la db
    }

    function lireChangement($var)
    {
    /*    if($var!=$_POST['action'])
        {
            if($_POST['action']=='combattre')
            {
                echo 'lol';
                return $_SESSION['action'] == $var;
            }
        }*/

    }

    function exportSession($bool)
    {
        //lit le resultat de lireAction et exporte les variables session s'il faut
        if($bool)
        {
            $_SESSION['x'] = $this->placeX();
            $_SESSION['y'] = $this->placeY();
        }
    }

    private function calculRad($x,$y)
    {
        $diffX = $x - $_SESSION['x'];
        $diffY = $_SESSION['y'] - $y;
       
        //calcul de la tangente
        $tan = $diffY/$diffX;
       
        //calcul de l'angle (en this->radian)
        if($diffX !=0)
        {
            $this->rad = atan($tan);
        }
        else
        {
            if($diffY>=0)
            {
                $this->rad == M_PI;
            }
            else
            {
                $this->rad == (-M_PI);
            }
        }
       
        //retablissement des valeurs
        if($diffX<0)
        {
            $this->rad+= M_PI;
        }
        elseif($diffY<0)
        {
            $this->rad+= 2*M_PI;
        }
        return $this->rad;
    }

    private function placeX()
    {
        return 128-105*(cos($this->calculRad($_POST['x'],$_POST['y'])));
    }

    private function placeY()
    {
        return     105*(sin($this->calculRad($_POST['x'],$_POST['y'])))+128;
    }

    function lireAction($action)
    {
        return ($action=='se_deplacer')?true:false;
    }
   
    private function lanceAction($action)
    {
        ($this->lireAction($_POST['action']))?$this->deplacement():$this->combat();

    }

    private function deplacement()
    {
        return imagefilledellipse($this->vue,$this->placeX(),$this->placeY(),20,20,$this->jaune);
    }

    private function combat()
    {
        return imagefilledellipse($this->vue,$_SESSION['x'],$_SESSION['y'],20,20,$this->jaune);
    }

    private function formDebut()
    {
        return '<form method="post" name="dum\'n Bublles"><fieldset><legend>Dum\'n Bubbles</legend>';
    }

    private function formFin()
    {
        return '</fieldset></form>';
    }

    private function formAction()
    {
            return '<fieldset><legend>action envisagée</legend><label for="se_deplacer">se deplacer</label><label for="combattre">combattre</label></fieldset>';
    }

    private function formImage()
    {
        return '<fieldset><legend>vue</legend>creationImage().'" alt="zut"/></fieldset>';
    }

    private function creationImage()
    {
        //AFFICHAGE DE VARIABLES

        imagestring($this->vue,5,0,0,$_SESSION['x'],$this->jaune);
        imagestring($this->vue,5,0,10,$_SESSION['y'],$this->jaune);

        imagejpeg($this->vue,$this->img,100);
        return $this->img;
    }

    public function affichForm()
    {
        echo $this->formDebut().$this->formAction().$this->formImage().$this->formFin();

        //affichage de variables

        echo $_SESSION['x'].'
'.$_SESSION['y'];
    }

}
$form = new formulaire();
$form->exportSession($form->lireAction($_POST['action']));;
$form->affichForm();
echo $_SESSION['action'];//n'affiche rien
?>
 Je dois admettre qu'on peut le trouver long, mais je m'en sert pour apprendre, donc je vais "l'élaguer" alors n'hésiter pas à critiquer aussi la forme de ce script.
Il utilise une image jpeg qu'il recrée à chaque page, elle fait 255*255.
C'est le script  à l'heure actuelle, il a sûrment été moins incohérent, et j'espère qu'il tournera.

2 réponses

cs_craso Messages postés 55 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 20 janvier 2009
5 déc. 2006 à 13:18
Une version colorée se trouve sur ce lien : http://rafb.net/paste/results/Ek7O9Z15.html
0
cs_craso Messages postés 55 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 20 janvier 2009
11 déc. 2006 à 12:39
up s'il vous plait :)
0
Rejoignez-nous