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);
}
}
}
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]