Package View

Source Code of View.GridView

package View;

import Controller.OthelloController;
import Model.Othello.ModeJeu;
import Model.Othello.Ligne;
import Model.Othello.Case;
import Model.Couleur;
import Model.Othello.Pion;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.TextField;
import java.lang.String;

// <editor-fold defaultstate="collapsed" desc=" UML Marker ">
// #[regen=yes,id=DCE.21D3FE72-47F3-0C45-617E-112E9A550479]
// </editor-fold>
public class GridView extends Canvas implements CommandListener, GridViewObserver, ViewInterface {

    private int _lines[]; // The spacing of the lines. Auto Calculated from screen size
    private int _cubeSize;
    private boolean _isReady;  
    private String _text = "Attente du serveur";

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.5C187B4D-A788-7EA7-34FB-3F3A70CF5095]
    // </editor-fold>
    private static final Command NEW_GAME = new Command("Nouvelle partie", Command.SCREEN, 1);

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.D9059ACA-2490-29CB-21E7-38C3FE7B54F8]
    // </editor-fold>
    private static final Command EXIT_GAME = new Command("Quitter", Command.EXIT, 10);

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.5726A974-2B20-B877-7FDD-32223EE4F996]
    // </editor-fold>
    private static int BOARD_COLOR = 0xFFFFFF;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.834E32FA-79A0-77A2-DFED-EB08418C191D]
    // </editor-fold>
    private static int LINE_COLOR = 0x000000;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.009807FF-1E7B-010D-103C-7DA55B57D098]
    // </editor-fold>
    private static int TEXT_ALIGN = Graphics.TOP | Graphics.HCENTER;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.0ED8C370-0386-C677-A2B6-A9B91F0A15AC]
    // </editor-fold>
    private static int CURSOR_COLOR = 0xFF0000;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.641309C4-5CD8-AC36-D8CF-A035E96EC8A8]
    // </editor-fold>
    private String _winText = "Vous avez gagne !!!";

     // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.89E09A9B-A16A-3B1C-9AC1-3659B29D0750]
    // </editor-fold>
    private OthelloController _othelloController;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.88A202D4-B4F3-3D3D-594D-323D2C2AADD6]
    // </editor-fold>
    private Display _display;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.E2C89710-1CE1-C910-6127-A61D4816632D]
    // </editor-fold>
    private ViewInterface _child;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.DA9BE2C6-AB4B-46B3-8C82-F8CCC12DE816]
    // </editor-fold>
    private ViewInterface _parent;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.F1B2CD87-13FD-549C-318D-B970DCC8A0B1]
    // </editor-fold>
    public GridView (Display disp, OthelloController ctrl) {
        super();
        _display = disp;
        _othelloController = ctrl;
        setCommandListener(this);
        addCommand(EXIT_GAME);
        addCommand(NEW_GAME);
        _othelloController.get_gridOthello().setObserver(this);
       
        int largeurGrille = this._othelloController.get_gridOthello().get_lignes().size();
        // Calculate the distance between the lines.
        // Assumes a square screen
        _cubeSize = (getWidth() / largeurGrille) - 2;
        _lines = new int[largeurGrille + 1];
        for (int i = 0; i < largeurGrille + 1; ++i) {
            _lines[i] = (i * _cubeSize);
        }
       
        this.setIsReady(true);
        _text = "" ;
    }

     /**
   * Change l'état de la vue
     * @param state : Etat de la vue true = pret à jouer, sinon false
   * @return
   */
    public void setIsReady(boolean state) {
        _isReady = state;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.812C1C77-4061-8833-AF88-E29DE5AF01D9]
    // </editor-fold>
    public int getCURSOR_COLOR () {
        return CURSOR_COLOR;
    }

     // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.119BB724-A40F-A25D-EE1A-6458C23B939C]
    // </editor-fold>
    public int getTEXT_ALIGN () {
        return TEXT_ALIGN;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.37F8F1F9-E7AC-91D1-5E75-4BB88E1D8A77]
    // </editor-fold>
    public String get_winText () {
        return _winText;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.C8857659-339A-7EC5-7FD5-33EAD05C9D45]
    // </editor-fold>
    public void set_winText (String val) {
        this._winText = val;
    }

     /**
   * Affecte le message affiché dans l'état non pret à jouer
     * @param t : Texte à afficher
   * @return
   */
    public void setText(String t) {
        _text = t ;
        this.othelloCursorMoveEvent();
        System.out.println(_text);
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.5F1400D8-26E5-AC6B-913F-695E2CA3E4C5]
    // </editor-fold>
    public void commandAction (Command c,Displayable d) {
        if (c == EXIT_GAME) {
            if( (this._othelloController.get_modeJeu().get_mode() == ModeJeu.TYPE_JOUER_PLUSIEURS) ||
             (this._othelloController.get_modeJeu().get_mode() == ModeJeu.TYPE_JOUER_PLUSIEURS_SERVEUR)) {
                this._othelloController.notifyDestroyed();
            } else {
                this._parent.display() ;
            }
        } else if (c == NEW_GAME) {
            this.display();
        }
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.403C390D-6B9E-930E-252F-A31A6682722C]
    // </editor-fold>
    public void display () {
        this._display.setCurrent(this);
    }

    public void othelloCursorMoveEvent (){
        this.repaint();
    }

    public void othelloSetPionEvent(){
         boolean partieFinie = false;
         switch(this._othelloController.get_modeJeu().get_mode()){
            case ModeJeu.TYPE_JOUER_PLUSIEURS|ModeJeu.TYPE_JOUER_SEUL:
                if(this._othelloController.get_currentPlayer().equals(this._othelloController.get_blackPlayer())){
                    //tester si le nouveau joueur Rouge peut jouer
                    if( this._othelloController.get_gridOthello().IsCoupPossible( new Pion(new Couleur(Couleur.RED))) ){
                        this._othelloController.set_currentPlayer(this._othelloController.get_redPlayer());
                    }else if(this._othelloController.get_gridOthello().IsCoupPossible( new Pion(new Couleur(Couleur.BLACK)))){
                        //si le joueur noir peut jouer, c'est à son tour
                        this._othelloController.set_currentPlayer(this._othelloController.get_blackPlayer());
                    }else{
                        //aucun joueur ne peut jouer
                        partieFinie = true;
                    }                   
                }else{
                    //tester si le nouveau joueur Noir peut jouer
                    if( this._othelloController.get_gridOthello().IsCoupPossible( new Pion(new Couleur(Couleur.BLACK))) ){
                        this._othelloController.set_currentPlayer(this._othelloController.get_blackPlayer());
                    }else if(this._othelloController.get_gridOthello().IsCoupPossible( new Pion(new Couleur(Couleur.RED)))){
                        //si le joueur noir peut jouer, c'est à son tour
                        this._othelloController.set_currentPlayer(this._othelloController.get_redPlayer());
                    }else{
                        //aucun joueur ne peut jouer
                        partieFinie = true;
                    }
                }
                break;
            case ModeJeu.TYPE_JOUER_PLUSIEURS_SERVEUR:

                break;
        }
       this._othelloController.set_partieFinie(partieFinie);
       this.repaint();
    }

    public void setParentAndChild (ViewInterface p, ViewInterface c) {
        this._child = c;
        this._parent = p;
    }

    /**
   * Dessine la grille
     * @param g : Graphique à utiliser pour le dessin
   * @return
   */
    protected void paint(Graphics g) {
        if ( (this._othelloController.get_modeJeu().get_mode() == ModeJeu.TYPE_JOUER_PLUSIEURS) ||
             (this._othelloController.get_modeJeu().get_mode() == ModeJeu.TYPE_JOUER_PLUSIEURS_SERVEUR) ){
            removeCommand(NEW_GAME);
        } else {
            addCommand(NEW_GAME);
        }
        addCommand(EXIT_GAME);

        // clear background
        g.setColor(BOARD_COLOR);
        g.fillRect(0, 0, g.getClipWidth(), g.getClipHeight());
       
        // draw lines
        g.setColor(LINE_COLOR);
        for (int l = 0; l < _lines.length; ++l) {
            drawGridLines(g,  _lines, l);
        }
        g.setColor(LINE_COLOR);

        // draw cells
        for (int l = 0; l < _lines.length; l += 3) {
            drawGridLines(g, _lines, l);
        }
        g.setColor(LINE_COLOR);
       
        //affichage des pions
        int nbRedPion = 0;
        int nbBlackPion = 0;
        for (int row = 0; row <  this._othelloController.get_gridOthello().get_lignes().size(); ++row) {
            Ligne ligne = (Ligne)this._othelloController.get_gridOthello().get_lignes().elementAt(row);
            for (int col = 0; col < ligne.get_cases().size(); ++col) {
                Case c = (Case)ligne.get_cases().elementAt(col);

                //s'il y a un pion
                if(c.get_pion() == null){
                    //drawCell(g, _grid, _lines, _cubeSize, row, col);
                }else{
                    int codeCouleur = 0x000000;
                    switch(c.get_pion().get_couleur().get_valeur()){
                        case Couleur.BLACK:
                            nbBlackPion++;
                            codeCouleur = 0x000000;
                            break;
                        case Couleur.RED:
                            nbRedPion++;
                            codeCouleur = 0xFF0000;
                            break;
                    }
                     g.setColor(codeCouleur);
                     g.fillArc( (_lines[col] + _cubeSize / 2) - 5, (_lines[row] + _cubeSize / 2) - 5, (_cubeSize / 2) + 4, (_cubeSize / 2) + 4, 0, 360);                   
                }
               
            }
        }

        //affichage des scores
        g.setColor(0x000000); //score du noir
        g.drawString( String.valueOf(nbBlackPion),  g.getClipWidth() - 1040, TEXT_ALIGN);
        g.setColor(0xFF0000); //score du rouge
        g.drawString( String.valueOf(nbRedPion),   g.getClipWidth() - 1070, TEXT_ALIGN);
       
        int codeCouleur = 0x000000;
        String texteJoueur = "";
        if(this._othelloController.get_currentPlayer().equals(this._othelloController.get_blackPlayer())){
            codeCouleur = 0x000000;
            texteJoueur = "JOUEUR NOIR";
        }else if(this._othelloController.get_currentPlayer().equals(this._othelloController.get_redPlayer())){
            codeCouleur = 0xFF0000;
            texteJoueur = "JOUEUR ROUGE";
        }

        //on vérifie si la partie est finie
        if(this._othelloController.get_partieFinie()){
            if(nbBlackPion>nbRedPion){
                codeCouleur = 0x000000;
                texteJoueur = ":) NOIR!!!!!";
            }else if(nbBlackPion<nbRedPion){
                codeCouleur = 0xFF0000;
                texteJoueur = ":) ROUGE!!!!";
            }else{
                codeCouleur = 0xababab;
                texteJoueur = " MATCH NUL !! :( ";
            }

        }
        g.setColor(codeCouleur);
        g.drawString(texteJoueur,  g.getClipWidth() / 2, g.getClipHeight()/2 + 55, TEXT_ALIGN);

        // drawCursor
        g.setColor(CURSOR_COLOR);
        g.drawRect(_lines[_othelloController.get_gridOthello().getCursorCol()], _lines[_othelloController.get_gridOthello().getCursorRow()], _cubeSize, _cubeSize);
        g.drawRect( _lines[_othelloController.get_gridOthello().getCursorCol()]-1, _lines[_othelloController.get_gridOthello().getCursorRow()]-1, _cubeSize, _cubeSize);
        g.drawRect( _lines[_othelloController.get_gridOthello().getCursorCol()]+1, _lines[_othelloController.get_gridOthello().getCursorRow()]+1, _cubeSize, _cubeSize);
        if (!_isReady) {
            g.setColor(BOARD_COLOR);
            g.fillRect(10, (g.getClipHeight() / 2) - 10, g.getClipWidth() - 20, 30);
            g.setColor(LINE_COLOR);
            g.drawRect(10, (g.getClipHeight() / 2) - 10, g.getClipWidth() - 20, 30);
            g.drawString(_text, g.getClipWidth() / 2, g.getClipHeight() / 2, TEXT_ALIGN);
        }
      
    }

    /**
   * Dessine les lignes de la grille
     * @param g : Graphique à utiliser pour le dessin
     * @param lines : Ligne à dessiner
     * @param l : index de la ligne
   * @return
   */
    private void drawGridLines(Graphics g, int lines[], int l) {
        int largeurGrille = this._othelloController.get_gridOthello().get_lignes().size();
        g.drawLine(lines[0], lines[l], lines[largeurGrille], lines[l]);
        g.drawLine(lines[l], lines[0], lines[l], lines[largeurGrille]);
    }

       /**
   * Translation du code de la touche en numéro
     * @param keyCode : code de la touche
   * @return
   */
    protected void keyPressed(int keyCode) {
        //pour gérer le mouvemznt du curseur ainsi que l'appui sur la touche action
        int action = this.getGameAction(keyCode);
        int col = _othelloController.get_gridOthello().getCursorCol();
        int row = _othelloController.get_gridOthello().getCursorRow();
        int largeurGrille = this._othelloController.get_gridOthello().get_lignes().size();

        switch (action) {
            case Canvas.LEFT:
                if (-1 == --col) {
                    col = largeurGrille - 1;
                }
                break;

            case Canvas.RIGHT:
                if (largeurGrille == ++col) {
                    col = 0;
                }
                break;

            case Canvas.UP:
                if (-1 == --row) {
                    row = largeurGrille - 1;
                }
                break;

            case Canvas.DOWN:
                if (largeurGrille == ++row) {
                    row = 0;
                }
                break;
            case Canvas.FIRE:
                int couleurPion = Couleur.RED;
                if(this._othelloController.get_currentPlayer().equals(this._othelloController.get_blackPlayer())){
                    couleurPion = Couleur.BLACK;
                }else if(this._othelloController.get_currentPlayer().equals(this._othelloController.get_redPlayer())){
                    couleurPion = Couleur.RED;
                }
                this._othelloController.get_gridOthello().setCell(row, col, new Pion(new Couleur(couleurPion)));
                break;
        }
        _othelloController.get_gridOthello().setCursorPos(row, col);
    }
}
TOP

Related Classes of View.GridView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.