TP2 J2ME MIDP IHM bas niveau 1 ) Ecrire une MIDlet qui présente un GoBan c'est à dire un plateau de jeu pour jouer au Go. La couleur de fond du GoBan sera 0xDCB35C. On doit obtenir : Solution : Le code de cette MIDlet est habituel : import javax.microedition.lcdui.display; import javax.microedition.midlet.midlet; import javax.microedition.midlet.midletstatechangeexception; public class GoBanMIDlet extends MIDlet { private boolean started; protected Display display;; protected void destroyapp(boolean arg0) throws MIDletStateChangeException { protected void pauseapp() { { protected void startapp() throws MIDletStateChangeException if (!started) { GoBan gb = new GoBan(); display = Display.getDisplay(this); display.setcurrent(gb); started = true; 1/5
Elle crée un GoBan et l'affiche. La classe GoBan dessine un plateau colloré et des traits verticaux et horizontaux : public class GoBan extends Canvas { private int foreground = 0xDCB35C; private int black = 0x000000; private int white = 0xFFFFFF; private int widthgoban; private int heigthgoban; private int largeurcarre; public GoBan() { widthgoban = getwidth(); heigthgoban = getheight(); protected void paint (Graphics g) { g.setcolor(foreground); g.fillrect(0, 0, widthgoban, heigthgoban); dessinetraits(g); void dessinetraits(graphics g){ int minhauteurlargeur = widthgoban > heigthgoban? heigthgoban : widthgoban; largeurcarre = minhauteurlargeur / Constantes.NOMBRE_MIN_CARRE; g.setcolor(black); // dessin des lignes horizontales for (int i = largeurcarre ; i < heigthgoban; i += largeurcarre){ g.drawline(0, i, widthgoban, i); // dessin des lignes verticales for (int j = largeurcarre ; j < widthgoban; j += largeurcarre){ g.drawline(j, 0, j, heigthgoban); Cette classe utilise uniquement une interface de Constantes : public interface Constantes { public int NOMBRE_MIN_CARRE = 8; 2/5
2 ) Faire apparaître un pierre et faites la déplacer avec les touches UP, DOWN, LEFT, RIGHT. On doit obtenir : Solution Il faut ajouter quelques lignes à la classe GoBan qui permet de créer et d'afficher une nouvelle pierre ainsi que la gestion des touches clavier (ci dessous en gras) : public class GoBan extends Canvas { private int foreground = 0xDCB35C; private int black = 0x000000; private int white = 0xFFFFFF; private int widthgoban; private int heigthgoban; private int numerocoup = 0; private int largeurcarre; private Pierre nouvellepierre; private boolean nouvellepierreaposer = true; public GoBan() { widthgoban = getwidth(); heigthgoban = getheight(); protected void paint (Graphics g) { g.setcolor(foreground); g.fillrect(0, 0, widthgoban, heigthgoban); dessinetraits(g); 3/5
if (nouvellepierreaposer){ nouvellepierre = creeetplacenouvellepierre(); nouvellepierre.dessine(g); void dessinetraits(graphics g){ int minhauteurlargeur = widthgoban > heigthgoban? heigthgoban : widthgoban; largeurcarre = minhauteurlargeur / Constantes.NOMBRE_MIN_CARRE; g.setcolor(black); // dessin des lignes horizontales for (int i = largeurcarre ; i < heigthgoban; i += largeurcarre){ g.drawline(0, i, widthgoban, i); // dessin des lignes verticales for (int j = largeurcarre ; j < widthgoban; j += largeurcarre){ g.drawline(j, 0, j, heigthgoban); private Pierre creeetplacenouvellepierre(){ nouvellepierreaposer = false; int couleurpierre; if (numerocoup % 2 == 0){ couleurpierre = white; else { couleurpierre = black; numerocoup++; int placement = Constantes.NOMBRE_MIN_CARRE - 1; placement *= largeurcarre; Pierre lanouvellepierre = new Pierre(couleurPierre, placement, placement, largeurcarre); return lanouvellepierre; protected void keypressed(int keycode) { if (getgameaction(keycode) == Canvas.DOWN) { nouvellepierre.downmove(); else if (getgameaction(keycode) == Canvas.UP) { nouvellepierre.upmove(); else if (getgameaction(keycode) == Canvas.LEFT) { nouvellepierre.leftmove(); else if (getgameaction(keycode) == Canvas.RIGHT) { nouvellepierre.rightmove(); else if (getgameaction(keycode) == Canvas.FIRE) { // on pourrait ici positionner la pierre et en créer une nouvelle qui sera déplacée // il faudra penser à stocker les pierres désormais fixes pour les redessiner // comme on dessine les traits. // bref c'est la suite de l'exercice!! repaint(); 4/5
On a donc défini une classe Pierre : public class Pierre { private int couleurpierre; private int x; private int y; private int diametre; private int largeurcarre; // nécessaire pour pouvoir déplacer la pierre Pierre(int couleurpierre, int x, int y, int largeurcarre){ this.couleurpierre = couleurpierre; this.x = x; this.y = y; this.largeurcarre = largeurcarre; this.diametre = (int)(largeurcarre / 1.2); public void dessine(graphics g){ g.fillarc((int)(x - diametre / 2.0), (int)(y - diametre / 2.0), diametre, diametre, 0, 360); public void downmove(){ y += largeurcarre; public void upmove(){ y -= largeurcarre; public void leftmove(){ x -= largeurcarre; public void rightmove(){ x += largeurcarre; 5/5