Hier soir, j'ai essaye un jeu que j'avais telecharge je ne sais plus ou. Il s'agit d'un jeu de robots dans lequel chaque joueur doit programmer son robot. ca m'a bien plu, et j'ai commence a programer un jeu dans le meme genre en Java.

Il y a une Applet nommee Arene , une classe abstraite Robot, et chaque joueur programme son engin qui "extends Robot". Dans l'arene, j'ai fait un Object[] dans lequel je place une instance de chaque classe-joueur, que je traduis de cette maniere:

Robot rtmp= (Robot)tableau[i]; rtmp.joue();

J'ai l'impression que ca ne marche pas encore.

La couleur de l'applet, c'est juste un debogage du Thread, je n'ai pas encore fait d'interface graphique

-----------------------------------------
Arene.java:
-----------------------------------------

import java.awt.*;
import java.applet.*;
public class Arene extends Applet implements Runnable{
        Thread th;
        int periode=500;
        int nb_robots=2;
        Object[] t=new Object[nb_robots];
        int largeur=400;
        int hauteur=400;
        public void init(){
                t[0]=new Robot1();
                t[1]=new Robot2();
                for(int i=0;i<nb_robots;i++){
                        Robot r=(Robot)(t[i]);
                        r.donneCarte(largeur,hauteur);//fournit des renseignements preliminaires aux robots
                        r.init();
                }
        }
        public void start() {
            th = new Thread(this);
            th.start();
        }
        
        public void stop() {
            th = null;
        }
        public void run(){
                Thread me=Thread.currentThread();
            while(th==me){
                        try{Thread.currentThread().sleep(periode);}
                        catch(InterruptedException e){}
                        try{tops();}
                        catch(NullPointerException e){}
            }
        }
        private void tops(){
                this.setBackground(new Color((int)(255*Math.random()),(int)(255*Math.random()),(int)(255*Math.random())));
                for(int i=0;i<nb_robots;i++){
                        Robot r=(Robot)(t[i]);
                        r.signalRadar(chercheImageRadar(r));
                        r.topprivate();//accorde la permission de tirer une fois et bouger une fois par mvt possible
                        r.top();//c'est là que la programmation du joueur intervient
                        if(r.jeveuxparler){showStatus(r.jeparle);}//affichage msg, debogage du joueur
                }
        }
        private ImageRadar chercheImageRadar(Robot r){
                //calculer
                return new ImageRadar(false,0,"");
        }
}


-----------------------------------------
ImageRadar.java
-----------------------------------------

public class ImageRadar extends Object{
        boolean signal=false;
        int distance=0;
        String analyse=""; //on pourrait passer un Robot, plus dangereux
        ImageRadar(boolean signal_,int distance_, String analyse_){
                signal=signal_;
                distance=distance_;
                analyse=analyse_;
        }
        void raz(){
                signal=false;
        }
}


-----------------------------------------
Robot.java
-----------------------------------------

abstract class Robot{
        
        int x;
        int y;
        double arobot;
        double aradar;
        double acanon;
        ImageRadar imageRadar;
        double tmax_robot=Math.PI/8;//increment angle maxi pendant une periode ( 1 top() )
        double tmax_radar=Math.PI/8;
        double tmax_canon=Math.PI/8;
        int largeurCarte;
        int hauteurCarte;
        int dommageCanon=3;
        int nb_balles=10;
        private boolean t_robot=false;//empeche de tourner plus d'une fois a chq top (idem pour tirer)
        private boolean t_radar=false;//comment les remettre a false a chq top ?
        private boolean t_canon=false;
        
        int etat=20; //  20/20=parfait, 0/20=>mort
        private boolean vivant=true;
        int score=0;
        
        abstract void init();
        abstract void top();
        
         public void topprivate(){//il faudrait le mettre en private car le robot peut ici appelerlui-meme cette methode et continuer a faire ce qu'il veut 
                t_robot=false;        //mais en private, on ne peut plus acceder
                t_radar=false;        //solution: un compteur de topprivate qui s'incremente a chq passage et est verifie et comparé par l'arene a chq tour de jeu
                t_canon=false;
        }
        
        void donneCarte(int largeur_,int hauteur_){
                largeurCarte=largeur_;
                hauteurCarte=hauteur_;
        }
        
        boolean jeveuxparler=false;
        String jeparle="";
        void dit(String msg){
                jeveuxparler=true;
                jeparle=msg;
        }
        
        void avance(){
                x+=Math.cos(arobot);
                y+=Math.sin(arobot);
        }
        
        void tourneRobot(int d){
                if(Math.abs(d)<tmax_robot){
                        t_robot=true;
                        arobot+=d;
                }
        }
        void tourneRadar(int d){
                if(Math.abs(d)<tmax_radar){
                        t_radar=true;
                        arobot+=d;
                }
        }
        void tourneCanon(int d){
                if(Math.abs(d)<tmax_canon){
                        t_canon=true;
                        arobot+=d;
                }
        }
        
        void signalRadar(ImageRadar imageRadar_){imageRadar=imageRadar_;}//methode appelée par l'Arene pour renseigner le Robot
        
        String nom="Albert";//ce nom ne sera pas gardé
        void nomme(String nom_){nom=nom_;}
        
/////////// fonctions utilisables par les robots
        String iS(int i){return new Integer(i).toString();}
}

-----------------------------------
Robot1.java
-----------------------------------

public class Robot1 extends Robot{
        
        void init(){
                nomme("SuperWarrior (1)");
                dit("Je connais la carte: ("
                        +iS(largeurCarte)+","
                        +iS(hauteurCarte)+")");
        }
        void top(){
                dit("Ici "+this.nom+", je suis en ("+iS(x)+","+y+").");
        }
        
        //etc... 
        
}

---------------------------------------
Robot2.java
---------------------------------------

public class Robot2 extends Robot{
        
        void init(){
                nomme("MegaMonkey (2)");
                dit("Je connais la carte: ("
                        +iS(largeurCarte)+","
                        +iS(hauteurCarte)+")");
        }
        void top(){
                dit("Ici "+this.nom+", je suis en ("+iS(x)+","+y+").");
        }
        
}