Programación General > Java
Tres en Raya Problema
(1/1)
Flashtlk:
Mi problema es que no se ponen la ficha del ordenador
Si hago el primer movimiento en el centro no me aparece la figurita X T_T pero si al comienzo hago click en otro lado si que aparece ...esta ahi pero no se muestra ahi dejo el code haha el algoritmo min y max lo copie del Video de Jorge Rubira haha XD ....espero que me ayuden
--- Código: Java --- import java.awt.*;import java.awt.event.*;; public class principal extends Frame implements ActionListener{ Button arreglobotones[][]; logica obj = new logica(); String sfiguras[]; int tablero[][]; Label l1; Button b1 = new Button("Empezar Partida"); principal() { setVisible(true); setSize(600,400); setLayout(null); iniciarcomponentes(); b1.addActionListener(this); } public void iniciarcomponentes() { l1= new Label(""); arreglobotones= new Button[3][3]; sfiguras=new String[3]; sfiguras[0]=""; sfiguras[1]="0"; sfiguras[2]="X"; for(int i =0 ;i<arreglobotones.length;i++) { for(int j =0 ;j<arreglobotones[i].length;j++) { arreglobotones[i][j]= new Button(); arreglobotones[i][j].addActionListener(this); arreglobotones[i][j].setBounds(80+(80*j),80+(80*i),80,80); add(arreglobotones[i][j]); arreglobotones[i][j].setLabel(sfiguras[0]); } } l1.setBounds(200,60,100,20); add(l1); b1.setBounds(350,120,100,25); add(b1); } public void actionPerformed(ActionEvent ev) { tablero=obj.tableros; Object boton= ev.getSource(); for(int i =0 ;i<arreglobotones.length;i++) { for(int j =0 ;j<arreglobotones[i].length;j++) { if(tablero[i][j]==-1 && arreglobotones[i][j]==boton) { obj.pulsaboton(i,j); obj.ponerfichaordenador(); arreglobotones[i][j].setLabel(sfiguras[tablero[i][j]+1]); } for(int k =0 ;k<arreglobotones.length;k++){ for(int l=0 ;l<arreglobotones[i].length;l++) { if(tablero[k][l]==1) { arreglobotones[i][j].setLabel(sfiguras[tablero[i][j]+1]); } } } ganas(); System.out.print(tablero[i][j] + " "); } System.out.println(); } if(boton==b1) { obj.empezarpartida(); empieza(); } } public void ganas() { int gano = obj.nganador; if(gano==0) { l1.setText("Has Ganado"); } else if (gano==1) { l1.setText("Has perdido"); } } public void empieza() { l1.setText(""); for(int i =0 ;i<arreglobotones.length;i++) { for(int j =0 ;j<arreglobotones[i].length;j++) { arreglobotones[i][j].setLabel(sfiguras[0]); } } } public static void main(String[] args) { principal obj = new principal(); obj.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); } }
--- Código: Java --- public class logica{ public int tableros[][]= new int[3][3]; public int nganador=-1; int ncontar=0; public logica() { empezarpartida(); ncontar=0; } public void empezarpartida() { for(int i =0 ;i<tableros.length;i++) { for(int j =0 ;j<tableros[i].length;j++) { tableros[i][j]=-1; } } nganador=-1; } public void pulsaboton(int i ,int j) { if(i>=0 && j>=0 && j<=3 && i<=3 && tableros[i][j]==-1) { if(nganador==-1) { tableros[i][j]=0; nganador=ganarpartida(); } } } public int ganarpartida() { if(tableros[0][0]!=-1 && tableros[0][0]==tableros[1][1] && tableros[0][0]==tableros[2][2]) { return tableros[0][0]; } if(tableros[0][2]!=-1 && tableros[0][2]==tableros[1][1] && tableros[0][2]==tableros[2][0]) { return tableros[0][2]; } for(int i =0 ;i<tableros.length;i++) { if(tableros[i][0]!=-1 && tableros[i][0]==tableros[i][1] && tableros[i][0]==tableros[i][2]) { return tableros[i][0]; } if(tableros[0][i]!=-1 && tableros[0][i]==tableros[1][i] && tableros[0][i]==tableros[2][i]) { return tableros[0][i]; } } return -1; } //Algoritmo Minimax public boolean tablerocompleto() { for(int i =0 ;i<tableros.length;i++) { for(int j =0 ;j<tableros[i].length;j++) { if(this.tableros[i][j]==-1) { return false; } } } return true; } public boolean finpartida() { return tablerocompleto() || ganarpartida()!=-1; } public void ponerfichaordenador(){ if(!finpartida()) { int f=0,c=0; int v=Integer.MIN_VALUE; int aux; for(int i =0 ;i<tableros.length;i++){ for(int j =0 ;j<tableros[i].length;j++){ if(tableros[i][j]==-1) { tableros[i][j]=1; aux=min(); if(aux>v){ v=aux; f=i; c=j; } tableros[i][j]=-1; } } } tableros[f][c]=1; } nganador=ganarpartida(); } private int max() { if(finpartida()) { if(ganarpartida()!=-1) return -1; else return 0; } int v =Integer.MIN_VALUE; int aux; for(int i =0 ;i<tableros.length;i++){ for(int j =0 ;j<tableros[i].length;j++){ if(this.tableros[i][j]==-1){ tableros[i][j]=1; aux=min(); if(aux>v) v=aux; tableros[i][j]=-1; } } } return v; } private int min() { if(finpartida()) { if(ganarpartida()!=-1) return 1; else return 0; } int v =Integer.MAX_VALUE; int aux; for(int i =0 ;i<tableros.length;i++){ for(int j =0 ;j<tableros[i].length;j++){ if(this.tableros[i][j]==-1){ tableros[i][j]=0; aux=max(); if(aux<v) v=aux; tableros[i][j]=-1; } } } return v; }}
Navegación
Ir a la versión completa