Forum zamknięte. Zapraszamy do grupy na Facebooku
Odpowiedz 
 
Ocena wątku:
  • 1 Głosów - 5 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Kółko i Krzyżyk
02-11-2013, 02:14 PM (Ten post był ostatnio modyfikowany: 02-23-2013 11:15 PM przez kolek.)
Post: #1
Kółko i Krzyżyk
Witam wszystkich forumowiczów.
To jeden z moich pierwszych programów, proszę o konstruktywną krytykę.


Kod:
package kolkoikrzyzykgraf;
/**
*
* @author Kamil
*/
public class KolkoIKrzyzykGraf {
    public static void main(String[] args) {
        ObrazFrame obraz=new ObrazFrame();
        obraz.dzialaj();
    }
}
------------------------------------------------------------------------------------------------------
package kolkoikrzyzykgraf;
import javax.swing.JFrame;
/**
*
* @author Kamil
*/
public class ObrazFrame extends JFrame{
    public ObrazFrame(){
        super("Kółko i Krzyżyk");    
    }
    public void dzialaj(){
        ObrazPanel obrazPanel=new ObrazPanel();
        obrazPanel.setLayout(null);
        this.add(obrazPanel);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        this.setVisible(true);
        obrazPanel.wyswietlaj();
    }
}
------------------------------------------------------------------------------------------------------
package kolkoikrzyzykgraf;
import java.awt.event.MouseEvent;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
/**
*
* @author Kamil
*/
public class ObrazPanel extends JPanel implements MouseListener{
    private ArrayList<JButton> guziki=new ArrayList<JButton>();
    private BufferedImage imagePlansza;
    private ImageIcon iconX = new ImageIcon("krzyzyk.jpg");
    private ImageIcon iconO = new ImageIcon("puste.jpg");
    private ImageIcon iconK = new ImageIcon("kolko.jpg");
    private ImageIcon iconC = new ImageIcon("kolkoc.jpg");
    private ImageIcon iconS = new ImageIcon("krzyzykc.jpg");
    private boolean graczZaczyna=true;
    private boolean ostatniaTura=false;
    private Gra gra=new Gra();
    public ObrazPanel(){
        super();
        addMouseListener(this);
        File imageFileO = new File("plansza.jpg");
        try {
            imagePlansza = ImageIO.read(imageFileO);
        } catch (IOException e) {
            System.err.println("Blad odczytu obrazka");
            //e.printStackTrace();
        }
        Dimension dimension = new Dimension(imagePlansza.getWidth(), imagePlansza.getHeight());
        this.setPreferredSize(dimension);
        wyswietlaj();
    }
    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(imagePlansza, 0, 0, this);
    }
    public void mouseMoved(MouseEvent arg0) {
    }
    public void mouseClicked(MouseEvent e) {
        if(ostatniaTura){
        guziki.get(0).doClick();
         }
    }
    public void mouseEntered(MouseEvent e) {
    }
    public void mouseExited(MouseEvent e) {
    }
    public void mousePressed(MouseEvent e) {
    }
    public void mouseReleased(MouseEvent e) {
    }
    class guz1 implements ActionListener{
        public void actionPerformed(ActionEvent zdarzenie){
            if(!graczZaczyna && ostatniaTura){
                gra.ruchPC();
                wyswietlaj2();
            }
            if(!gra.czyKoniec() && !ostatniaTura){
                int index=guziki.indexOf(zdarzenie.getSource());
                if(gra.plansza[index]==0){
                    gra.plansza[index]=-1;
                    if(gra.plansza[index]==-1){
                        guziki.get(index).setIcon(new ImageIcon("krzyzyk.jpg"));
                    }
                    if(gra.plansza[index]==1){
                         guziki.get(index).setIcon(new ImageIcon("kolko.jpg"));
                    }
                    gra.ruchPC();
                }
            }
            wyswietlaj2();
            ostatniaTura=false;
            if(gra.czyKoniec()){
                guziki.get(gra.kolor[0]).setIcon(iconC);
                guziki.get(gra.kolor[1]).setIcon(iconC);
                guziki.get(gra.kolor[2]).setIcon(iconC);
                gra.plansza=new int[9];
                ostatniaTura=true;
                graczZaczyna=!graczZaczyna;
            }
            if(gra.czyRemis()){
                gra.plansza=new int[9];
                ostatniaTura=true;
                graczZaczyna=!graczZaczyna;
            }    
        }
    }
    public void wyswietlaj(){
        for(int j=0;j<3;j++){
            for(int i=0;i<3;i++){
                if(gra.plansza[i+3*j]==0){
                    JButton guzik=new JButton(iconO);
                    guzik.setBorder(null);
                    guzik.setBounds(10+248*i, 10+235*j, 209, 199);
                    guzik.setRolloverIcon(iconS);
                    guzik.addActionListener(new guz1());
                    guziki.add(guzik);
                }
                else if(gra.plansza[i+3*j]==1){
                    JButton guzik=new JButton(iconK);
                    guzik.setBorder(null);
                    guzik.setBounds(10+248*i, 10+235*j, 209, 199);
                    guzik.setRolloverIcon(iconK);
                    guzik.addActionListener(new guz1());
                    guziki.add(guzik);
                }
            }
        }
        for(int i=0;i<9;i++){
            add(guziki.get(i));
        }
    }  
    public void wyswietlaj2(){
      for(int j=0;j<3;j++){
        for(int i=0;i<3;i++){
          if(gra.plansza[i+3*j]==0){
              guziki.get(i+3*j).setIcon(iconO);
              guziki.get(i+3*j).setRolloverIcon(iconS);
                      }
          else if(gra.plansza[i+3*j]==1){
              guziki.get(i+3*j).setIcon(iconK);
              guziki.get(i+3*j).setRolloverIcon(iconK);
          }
          else if(gra.plansza[i+3*j]==-1){
              guziki.get(i+3*j).setIcon(iconX);
              guziki.get(i+3*j).setRolloverIcon(iconX);
          }
          
        }
      }  
    }  
}
------------------------------------------------------------------------------------------------------
package kolkoikrzyzykgraf;
/**
*
* @author Kamil
*/
public class Gra {
    int[] plansza=new int[9];
    int[] kolor=new int[3];
    public int sprawdzPole(int p1, int p2, int p3, int x){
        int wp1=plansza[p1];
        int wp2=plansza[p2];
        int wp3=plansza[p3];
        if(wp1+wp2+wp3==2*x){
            if(wp1==0){
                return p1;
            }
            else if(wp2==0){
                return p2;
            }
            else if(wp3==0){
                return p3;
            }
        }
        return -1;
    }
    public void ruchPC(){
        if(sprawdzPole(0,1,2,1)>=0){
            plansza[sprawdzPole(0,1,2,1)]=1;
        }
        else if(sprawdzPole(3,4,5,1)>=0){
            plansza[sprawdzPole(3,4,5,1)]=1;
        }
        else if(sprawdzPole(6,7,8,1)>=0){
            plansza[sprawdzPole(6,7,8,1)]=1;
        }
        else if(sprawdzPole(0,3,6,1)>=0){
            plansza[sprawdzPole(0,3,6,1)]=1;
        }
        else if(sprawdzPole(1,4,7,1)>=0){
            plansza[sprawdzPole(1,4,7,1)]=1;
        }
        else if(sprawdzPole(2,5,8,1)>=0){
            plansza[sprawdzPole(2,5,8,1)]=1;
        }
        else if(sprawdzPole(0,4,8,1)>=0){
            plansza[sprawdzPole(0,4,8,1)]=1;
        }
        else if(sprawdzPole(2,4,6,1)>=0){
            plansza[sprawdzPole(2,4,6,1)]=1;
        }
        else if(sprawdzPole(0,1,2,-1)>=0){
            plansza[sprawdzPole(0,1,2,-1)]=1;
        }
        else if(sprawdzPole(3,4,5,-1)>=0){
            plansza[sprawdzPole(3,4,5,-1)]=1;
        }
        else if(sprawdzPole(6,7,8,-1)>=0){
            plansza[sprawdzPole(6,7,8,-1)]=1;
        }
        else if(sprawdzPole(0,3,6,-1)>=0){
            plansza[sprawdzPole(0,3,6,-1)]=1;
        }
        else if(sprawdzPole(1,4,7,-1)>=0){
            plansza[sprawdzPole(1,4,7,-1)]=1;
        }
        else if(sprawdzPole(2,5,8,-1)>=0){
            plansza[sprawdzPole(2,5,8,-1)]=1;
        }
        else if(sprawdzPole(0,4,8,-1)>=0){
            plansza[sprawdzPole(0,4,8,-1)]=1;
        }
        else if(sprawdzPole(2,4,6,-1)>=0){
            plansza[sprawdzPole(2,4,6,-1)]=1;
        }
        else if(plansza[4]==0){
            plansza[4]=1;
        }
        else if(plansza[2]==0){
            plansza[2]=1;
        }
        else if(plansza[8]==0 && plansza[2]==-1){
            plansza[8]=1;
        }
        else if(plansza[2]==1 && plansza[4]==-1 && plansza[6]==-1 && plansza[8]==0){
            plansza[8]=1;
        }
        else if(sprawdzPole(1,4,7,0)>=-1 && plansza[5]==0){
            plansza[5]=1;
        }
        else if(sprawdzPole(3,4,5,0)>=-1 && plansza[1]==0){
            plansza[1]=1;
        }
        //else if(!czyRemis()){
        //    System.out.println("Poddaje się");
        //}      
    }
    public void wypiszTablice(){
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                if(plansza[3*i+j]==1){
                    System.out.print("@");
                }
                else if(plansza[3*i+j]==-1){
                    System.out.print("X");
                }
                else{
                  System.out.print("?");  
                }
            }
            System.out.println();
        }
    }
    public boolean czyKoniec(){
        for(int i=0;i<3;i++){
             if(Math.abs(plansza[0+3*i]+plansza[1+3*i]+plansza[2+3*i])==3){
                 kolor[0]=0+3*i;
                 kolor[1]=1+3*i;
                 kolor[2]=2+3*i;
                 return true;
             }
             if(Math.abs(plansza[0+i]+plansza[3+i]+plansza[6+i])==3){
                 kolor[0]=0+i;
                 kolor[1]=3+i;
                 kolor[2]=6+i;
                 return true;
             }
        }
        if(Math.abs(plansza[0]+plansza[4]+plansza[8])==3){
            kolor[0]=0;
            kolor[1]=4;
            kolor[2]=8;
            return true;
        }
        if(Math.abs(plansza[2]+plansza[4]+plansza[6])==3){
            kolor[0]=2;
            kolor[1]=4;
            kolor[2]=6;
            return true;
        }
        return false;
    }
    public boolean czyRemis(){
        int rem=0;
        for(int i=0;i<9;i++){
            if(plansza[i]!=0){
                rem++;
            }
        }
        if(rem==9){
            return true;
        }
        else{
            return false;
        }
    }
}

Wygląda to mniej więcej tak: KiK


Załączone pliki
.zip  obraz.zip (Rozmiar: 44.87 KB / Pobrań: 41)
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości