Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Napraviti da racunalo bude pametnije "igra" x/o

[es] :: Java :: Napraviti da racunalo bude pametnije "igra" x/o

[ Pregleda: 1764 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

DavorPro

Član broj: 118716
Poruke: 55
87.252.137.*



Profil

icon Napraviti da racunalo bude pametnije "igra" x/o11.02.2007. u 16:43 - pre 209 meseci
Narode ovo je igrica x/o no kod je napisan tako da se kompjutera uvijek moze pobjedit .
Problem je sljedeci treba napraviti logiku programa da racunalo bude pametnije od igraca.
Ako neko zna kako i u kojoj metodi to postaviti neka podjeli sa svima nama .
Logika bi trebala imati devet linija koda za devet solucija ili mogucnosti dobitka.
Pa neka igra zapocne . Da bi igrali igru morate napraviti dvije slicice 100x100pixels jedna za x a druga o te dvije slicice
treba staviti u projekt.


Program je pisan sa pseudo - kodom

Code:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TicTacToe extends JFrame {
    //definiraj polje labela, ali samo referencu
    JLabel [] labele;
    //definiraj sliku iks
    ImageIcon ja = new ImageIcon("x.jpg");
    //definiraj sliku oks
    ImageIcon comp = new ImageIcon("o.jpg");
    
    public TicTacToe() {
        //iniciraj komponente
        initComponents();
    }
    
    
    public void initComponents(){
        //postavi granice komponenti
        this.setBounds(200,200,350,350);
        //postavi komandu za zatvaranje prozora
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //postavi panel da bude Content panel
        //postavi gridLayout na panel
        this.getContentPane().setLayout(new GridLayout(3,3));
        //postavi referencu labela da pokazuje na novi objekat polje labela i to velicine 9
        labele= new JLabel [9];
        //popuni grid sa labelama
        popuniSaLabelama();
        //postavi naslov
        this.setTitle("Malo zabave uz IKS  i  OKS");
        //postavi da se vidi
        this.setVisible(true);
    }
    
    private void popuniSaLabelama(){
        //za svaki član u polju labela
        for(int i=0; i<labele.length;i++){
            //stvori novu JLabelu
            labele[i]=new JLabel();
            //postavi horizontal Aligment na CENTER
            labele[i].setHorizontalAlignment(JLabel.CENTER);
            //postavi labeli okvir
            labele[i].setBorder(BorderFactory.createLineBorder(Color.BLACK,2));
            //postavi opacitet
            labele[i].setOpaque(true);
            //postavi background boju
            labele[i].setBackground(Color.lightGray);
            //dodaj slušaća na labelu
            labele[i].addMouseListener(new ObradjivacKlika());
            //dodaj labelu u tablicu
            this.getContentPane().add(labele[i]);
            
            //
        }
    }
    
    public static void main(String[] args){
        //stvori novi objekt u novo threadu
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TicTacToe();
            }
        });
    }
    
    private boolean slobodnihPolja(){
        //prolazimo kroz sva polja i ispitujemo ima li slobodnih mjesta
        for(int i=0; i<labele.length; i++){
            if(labele[i].getIcon()==null) return false;
        }
        
        return true;
    }
    
    private void kompjuterIgra(){
        //provjeri dali ima slobodnih polja, ako nema proglasi neriješeno
        if(slobodnihPolja()){
            ispisiPobjednika("NERIJEŠENO!");
            return;
        }
        //idi kroz while petlju stalno
        while(true){
            int rnd =(int)(Math.random()*9);
            if(labele[rnd].getIcon()==null){
                labele[rnd].setIcon(comp);
                break;
            }
        }
        if (dobitnaKombinacija()){
            ispisiPobjednika("POBJEDA KOMPJUTERA  :( ");
        }
        //random broj*9
        //ispitaj dali je pod tim prazna labela
        //postavi komjuterovu ikonu
        //izađi sa breake
        //
        //
        //ako je dobitna kombinacija
        //ispiši da je kompjuter pobjedio
        
        
    }
    
    private boolean dobitnaKombinacija(){
        //ispitaj dali je dobitna kombijacija ili ne
        //ispitaj horizontalu
        if(labele[0].getIcon()!=null && labele[1].getIcon()==labele[0].getIcon() && labele[1].getIcon()==labele[2].getIcon()) return true;
        if(labele[3].getIcon()!=null && labele[4].getIcon()==labele[3].getIcon() && labele[4].getIcon()==labele[5].getIcon()) return true;
        if(labele[6].getIcon()!=null && labele[7].getIcon()==labele[6].getIcon() && labele[7].getIcon()==labele[8].getIcon()) return true;
        
        //ispitaj vertikalu
        if(labele[0].getIcon()!=null && labele[3].getIcon()==labele[0].getIcon() && labele[3].getIcon()==labele[6].getIcon()) return true;
        if(labele[1].getIcon()!=null && labele[4].getIcon()==labele[1].getIcon() && labele[4].getIcon()==labele[7].getIcon()) return true;
        if(labele[0].getIcon()!=null && labele[5].getIcon()==labele[0].getIcon() && labele[5].getIcon()==labele[8].getIcon()) return true;
        
        //ispitaj dijagonale
        if(labele[0].getIcon()!=null && labele[4].getIcon()==labele[0].getIcon() && labele[8].getIcon()==labele[4].getIcon()) return true;
        if(labele[2].getIcon()!=null && labele[4].getIcon()==labele[2].getIcon() && labele[6].getIcon()==labele[4].getIcon()) return true;
        
        return false;
    }
    
    class ObradjivacKlika implements MouseListener{
        public void mouseClicked(MouseEvent e) {
            //koja je labela kliknuta
            JLabel l = (JLabel)e.getSource();
            //provjeri dali je ikona null; ako ikona nije null==>return
            if(l.getIcon()!=null)return;
            //postavi ikonu
            l.setIcon(ja);
            //ispitaj dali je dobitna kombinacija
            if(dobitnaKombinacija()){
                //ako je ispiši da sam ja pobjedio
                ispisiPobjednika("MOJA POBJEDA!!");
               }else{
                //ako nije neka comp odigra potez
                kompjuterIgra();
               }
                      
        }
        
        public void mousePressed(MouseEvent e) {
        }
        
        public void mouseReleased(MouseEvent e) {
        }
        
        public void mouseEntered(MouseEvent e) {
        }
        
        public void mouseExited(MouseEvent e) {
        }

       
        }
      public void ispisiPobjednika(String s) {
            this.setTitle(s);  
            JDialog d= new JDialog(this,s,true);
            JLabel label=new JLabel(s);
            label.setHorizontalAlignment(JLabel.CENTER);
            d.add(label);
            d.setBounds(300,300,200,150);
            d.setVisible(true);
            obrisiPlocu();
    }
    
   private void obrisiPlocu(){
       for(int i=0; i<labele.length;i++){
           labele[i].setIcon(null);
       }
   }
      
}





[Ovu poruku je menjao hyle dana 12.02.2007. u 08:53 GMT+1]
 
Odgovor na temu

augustus
Novi Sad - Beograd

Član broj: 101581
Poruke: 358
*.ns.ac.yu.



+46 Profil

icon Re: Napraviti da racunalo bude pametnije "igra" x/o12.02.2007. u 18:43 - pre 209 meseci
Poz!
Da li ovo radis iz zabave ili zato sto moras?
Ovaj problem se bez problema resava upotrebom pretrage npr. prvi u dubinu i prvi u sirinu.Pogledaj malo sam o cemu se tacno radi.Problem je stvarno trivijalan upotrebom ovih pretraga tako da ces ih poprilicno shvatiti kad ovo resis.Ja sam resavao sahovske probleme i lavirinte upotrebom ovih algoritama(plus jos neki po potrebi).Tih dana sam se bas zabavljao(samo ne pitaj moju okolinu sta su o meni mislili u to vreme..)Ako se malo pomucis oko ovoga rado se upustam u igranje!!

Sorry ako je odgovor tipa znam ali uradi sam,nemam trenutno vremena da radim ispocetka(jer sam malko zaboravio materiju),ali ako me ti poteras rado cu ti se pridruziti!

p.s.
nema sanse da pobedis kompjuter posle ovoga...

"Čovek je biće koje se na sve navikava, i ja mislim da je ovo njegova najbolja definicija."
Fjodor M. Dostojevski
 
Odgovor na temu

[es] :: Java :: Napraviti da racunalo bude pametnije "igra" x/o

[ Pregleda: 1764 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.