Corsa dei Cavalli

Stato
Discussione chiusa ad ulteriori risposte.

R4z0r_Cr4sH

Utente Electrum
10 Giugno 2007
501
11
6
148
[img=650x230]http://img386.imageshack.us/img386/338/corsacavalli.png[/img]

Semplice,e molto ridumentale quindi decisamente migliorabile,corsa di cavalli basata su una semplice gestione dei Thread e utilizzo della classe Canvas e Graphics.

Corsa:
Codice:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class Corsa extends JFrame implements ActionListener{
    MyCanvas canvas=new MyCanvas(this);
    JButton start=new JButton("START");
    JLabel count=new JLabel("     ");
    JPanel pan=new JPanel();
    
    Cavallo c1,c2,c3,c4;
    
    public Corsa(){
        add(canvas,"Center");
        add(pan,"South");
        pan.add(start);
        pan.add(count);
        canvas.repaint();
        
        start.addActionListener(this);
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Corsa dei cavalli");
        setSize(993,383);
        setLocation(15,139);
        setVisible(true);
        show();
    }
    
    public void actionPerformed(ActionEvent e){
        c1=new Cavallo(canvas,"c1");
        c2=new Cavallo(canvas,"c2");
        c3=new Cavallo(canvas,"c3");
        c4=new Cavallo(canvas,"c4");
        try{Thread.sleep(100);}catch(Exception ex){}
        count.setText("GO!!!");
        c1.start();c2.start();c3.start();c4.start();
    }
    public void win(String win_n){
        JOptionPane.showMessageDialog(null,"Ha vinto il cavallo numero "+win_n+"!!!",
                    "MESSAGGIO:", JOptionPane.ERROR_MESSAGE);   
    }
}

Cavallo:
Codice:
public class Cavallo extends Thread{
    MyCanvas canvas;
    String n_c;
    int end=0;
    public Cavallo(MyCanvas c,String cavallo){
        canvas=c;
        n_c=cavallo;
    }

    public void run(){
        while(end<900){
            int vs=(int)(Math.random()*10);
            canvas.move(n_c,vs);
            int st=(int)(Math.random()*100);
            end+=vs;
            try{sleep(st);}catch(Exception e){}
        }
    }
}
MyCanvas:
Codice:
import javax.swing.*;
import java.awt.*;

public class MyCanvas extends Canvas{
    Image img=Toolkit.getDefaultToolkit().getImage("image/san.png");
    int d_c1=20,d_c2=20,d_c3=20,d_c4=20;
    boolean win=false;
    Corsa corsa;
    
    
    public MyCanvas(Corsa c){
        corsa=c;
    }
    
    public void paint(Graphics g){
        g.setColor(Color.LIGHT_GRAY);//base di partenza
        g.fillRect(5,15,90,280);
           
        g.setColor(Color.GREEN);
        g.fillRect(90,15,880,280);
        
        g.setColor(Color.GRAY); //barre sopra il verde
        g.fillRect(5,2,965,10);
        
        g.fillRect(5,75,965,10);
        g.fillRect(5,150,965,10);
        g.fillRect(5,220,965,10);

        g.fillRect(5,300,965,10);

        g.setColor(Color.BLACK);//barra di partenza
        g.fillRect(80,15,10,280);
        
        int h=0,l=0;
        boolean c=false;
        while(h<280){ //genera la bandiera a scacchi
            for(int i=0;i<3;i++){
                if(c==false){
                    g.setColor(Color.BLACK);
                    c=true;
                }else{
                    g.setColor(Color.WHITE);
                    c=false;
                }
                g.fillRect((880+l),(15+h),10,10);
                l+=10;
            }
            l=0;
            h+=10;
        }
        
        //immagine dei cavalli
        g.drawImage(img,d_c1,20,50,50,Color.RED,this);
        g.drawImage(img,d_c2,95,50,50,Color.ORANGE,this);
        g.drawImage(img,d_c3,165,50,50,Color.YELLOW,this);
        g.drawImage(img,d_c4,235,50,50,Color.BLUE,this);
    }
    public void move(String n_c,int a){
        for(int i=1;i<=a;i++){
            if(n_c.equals("c1")){d_c1++;}
            if(n_c.equals("c2")){d_c2++;}
            if(n_c.equals("c3")){d_c3++;}
            if(n_c.equals("c4")){d_c4++;}
        }
        repaint();
        
        String win_n="";
        if(win==false){
            if(d_c1>=900){win=true;win_n="1";}
            if(d_c2>=900){win=true;win_n="2";}
            if(d_c3>=900){win=true;win_n="3";}
            if(d_c4>=900){win=true;win_n="4";}
            if(win==true){
                corsa.win(win_n);   
            }
        }
    }
}

EDIT: di seguito l'immagine di ogni singolo cavallo (da inserire nella cartella "image" che a sua volta deve trovarsi nella stessa cartella del programma java):
sanh.png
 
grazie...io mi stufo pure a fare ste cose ma la prof di sistemi voleva che lo facessi...stanno molto indietro con il programma...non hanno fatto manco i thread (che si fanno in 4° XD)!
 
R4z0r_Cr4sH ha detto:
grazie...io mi stufo pure a fare ste cose ma la prof di sistemi voleva che lo facessi...stanno molto indietro con il programma...non hanno fatto manco i thread (che si fanno in 4° XD)!

Poverino Razor...costretto a ridursi a creare programmini da frivoli come questi!!:p
Good Job...appena ho due minuti vedo come hai gestito la OOP e qualche altra cosetta!!:)
 
Stato
Discussione chiusa ad ulteriori risposte.