Hoy les presento a un juego que tiene mucha historia.
Esta vez, el juego lo he construido yo, de arriba a abajo. ![]()
Tiene 2 tipos de juego: Dos Jugadores, para jugar 2 personas desde el mismo PC; y Un Jugador, contra la Inteligencia Artificial que programé. ![]()
Nota: La inteligencia Artificial buena, es la de nivel 3 U_U
Algunas referencias para entender el código:
Para trabajar mejor con el tablero, lo representé virtualmente como una matriz 3x3:
-
var t:Array = new Array();
-
t = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];
Cuando una posición del tablero (matriz) esta vacía, (no ha sido ocupada) le asigno un valor de 0.
Cuando una posición del tablero (matriz) ha sido ocupada por una cruz, le doy valor -1.
Cuando una posición del tablero (matriz) ha sido ocupada por una circunferencia, le doy valor 1.
Como podrán ver en el código de la IA, al trabajar con estos valores para la matriz, nos facilita mucho mas las cosas que trabajando con, por ejemplo: undefined , true y false
Les pongo el código de la IA con las funciones que utiliza:
-
stop();
-
-
restart();
-
//-->Game
-
function evaluar(t) {
-
var res:Number = 0;
-
if (t[0][0] == t[1][1] && t[1][1] == t[2][2]) {
-
res = t[0][0];
-
}
-
if (t[0][2] == t[1][1] && t[1][1] == t[2][0]) {
-
res = t[0][2];
-
}
-
if (t[0][0] == t[0][1] && t[0][1] == t[0][2]) {
-
res = t[0][0];
-
}
-
if (t[1][0] == t[1][1] && t[1][1] == t[1][2]) {
-
res = t[1][0];
-
}
-
if (t[2][0] == t[2][1] && t[2][1] == t[2][2]) {
-
res = t[2][0];
-
}
-
if (t[0][0] == t[1][0] && t[1][0] == t[2][0]) {
-
res = t[0][0];
-
}
-
if (t[0][1] == t[1][1] && t[1][1] == t[2][1]) {
-
res = t[0][1];
-
}
-
if (t[0][2] == t[1][2] && t[1][2] == t[2][2]) {
-
res = t[0][2];
-
}
-
return res;
-
}
-
-
function posicion_libre(t) {
-
var res:Boolean = false;
-
var i:Number = 0;
-
var j:Number = 0;
-
for (i=0; i<3; i++) {
-
for (j=0; j<3; j++) {
-
if (t[i][j] == 0) {
-
res = true;
-
}
-
}
-
}
-
return res;
-
}
-
-
function disable() {
-
for (i=0; i<3; i++) {
-
for (j=0; j<3; j++) {
-
_root["_"+i+"_"+j].enabled = false;
-
}
-
}
-
}
-
-
function cruz(i, j) {
-
_root["_"+i+"_"+j].gotoAndStop("cruz");
-
t[i][j] = -1;
-
turno = 1;
-
turno_mc.gotoAndStop("p1");
-
trace(i+","+j);
-
}
-
function circulo(i, j) {
-
_root["_"+i+"_"+j].gotoAndStop("circulo");
-
t[i][j] = 1;
-
turno = 2;
-
turno_mc.gotoAndStop("p2");
-
}
-
-
function pulsar(i, j) {
-
if (!fin) {
-
if (turno == 1) {
-
circulo(i,j);
-
if (evaluar(t) == 0) {
-
IA();
-
}
-
}
-
}
-
switch (evaluar(t)) {
-
case 0 :
-
if (!posicion_libre(t)) {
-
//trace("empate");
-
turno_mc.gotoAndStop("empate");
-
reiniciar.play();
-
fin = true;
-
disable();
-
}
-
break;
-
case -1 :
-
-
//trace("ganan cruzes");
-
turno_mc.gotoAndStop("cruces");
-
reiniciar.play();
-
fin = true;
-
disable();
-
break;
-
case 1 :
-
-
//trace("ganan criculos");
-
turno_mc.gotoAndStop("circulos");
-
reiniciar.play();
-
fin = true;
-
disable();
-
break;
-
default :
-
-
trace("OMG! GRAN ERROR!");
-
break;
-
}
-
}
-
-
function restart() {
-
turno = 1;
-
fin = false;
-
turno_mc.gotoAndStop("p1");
-
for (i=0; i<3; i++) {
-
for (j=0; j<3; j++) {
-
_root["_"+i+"_"+j].enabled = true;
-
_root["_"+i+"_"+j].gotoAndStop(1);
-
t[i][j] = 0;
-
}
-
}
-
}
-
-
_0_0.onPress = function() {
-
pulsar(0,0);
-
};
-
-
_0_1.onPress = function() {
-
pulsar(0,1);
-
};
-
_0_2.onPress = function() {
-
pulsar(0,2);
-
};
-
_1_0.onPress = function() {
-
pulsar(1,0);
-
};
-
_1_1.onPress = function() {
-
pulsar(1,1);
-
};
-
_1_2.onPress = function() {
-
pulsar(1,2);
-
};
-
_2_0.onPress = function() {
-
pulsar(2,0);
-
};
-
_2_1.onPress = function() {
-
pulsar(2,1);
-
};
-
_2_2.onPress = function() {
-
pulsar(2,2);
-
};
-
reiniciar.onPress = function() {
-
restart();
-
if (cont) {
-
reiniciar.play();
-
}
-
};
-
-
menu.onPress = function() {
-
gotoAndStop("tablero");
-
};
-
-
/*----------I A ------------*/
-
function IA() {
-
var fet:Boolean = false;
-
var a:Number = 0;
-
var b:Number = 0;
-
-
if (d != 1 && d != 2) {//si no es facil ni normal
-
if (t[1][1] == 0 && !fet) {//coloca el medio
-
cruz(1,1);
-
fet = true;
-
}
-
if (!fet) {
-
a = 0;
-
for (i=0; i<3; i++) {
-
for (j=0; j<3; j++) {
-
if (t[i][j] == 0) {
-
a++;
-
}
-
}
-
}
-
if (a == 8 && (t[0][0] == 0 || t[2][0] == 0 || t[0][2] == 0 || t[2][2] == 0)) {
-
b = Math.floor(Math.random()*3);
-
switch (b) {
-
case 0 :
-
if (t[0][0] == 0 && !fet) {
-
cruz(0,0);
-
fet = true;
-
}
-
break;
-
case 1 :
-
if (t[0][2] == 0 && !fet) {
-
cruz(0,2);
-
fet = true;
-
}
-
break;
-
case 2 :
-
if (t[2][0] == 0 && !fet) {
-
cruz(2,0);
-
fet = true;
-
}
-
break;
-
case 3 :
-
if (t[2][2] == 0 && !fet) {
-
cruz(2,2);
-
fet = true;
-
}
-
break;
-
default :
-
trace("Error Switch");
-
break;
-
}
-
}
-
}
-
//a partir de aquí ataca->>>>>>
-
if (d != 1) {// si no es fácil (normal)
-
if (((t[0][0])+(t[1][1])+(t[2][2])) == -2 && !fet) {// diagonal 1 (\)
-
for (a=0; a<3; a++) {
-
b = a;//equación (condición de los puntos para que pertenezcan) a la recta de la diagonal 1 (y=x)
-
if (t[a][b] == 0 && !fet) {
-
cruz(a,b);
-
fet = true;
-
}
-
}
-
}
-
if (((t[0][2])+(t[1][1])+(t[2][0])) == -2 && !fet) {//diagonal 2 (/)
-
for (a=0; a<3; a++) {
-
b = 2-a;
-
if (t[a][b] == 0 && !fet) {
-
cruz(a,b);
-
fet = true;
-
}
-
}
-
}
-
b = 0;
-
while (b<3 && !fet) {
-
if (((t[0][b])+(t[1][b])+(t[2][b])) == -2 && !fet) {//horitzontals
-
for (a=0; a<3; a++) {
-
if (t[a][b] == 0 && !fet) {
-
cruz(a,b);
-
fet = true;
-
}
-
//endif
-
}//endfor
-
}
-
//endifyelse
-
b++;
-
}//endwhile
-
a = 0;
-
while (a<3 && !fet) {
-
if (((t[a][0])+(t[a][1])+(t[a][2])) == -2 && !fet) {
-
for (b=0; b<3; b++) {
-
if (t[a][b] == 0 && !fet) {
-
cruz(a,b);
-
fet = true;
-
}
-
}
-
}
-
a++;
-
}//endwhile
-
//a partir de aquí se defiende->>>>>>
-
if (Math.abs((t[0][0])+(t[1][1])+(t[2][2])) == 2 && !fet) {// diagonal 1 (\)
-
for (a=0; a<3; a++) {
-
b = a;//equación (condición de los puntos para que pertenezcan) a la recta de la diagonal 1 (y=2-x)
-
if (t[a][b] == 0 && !fet) {
-
cruz(a,b);
-
fet = true;
-
}
-
}
-
}
-
if (Math.abs((t[0][2])+(t[1][1])+(t[2][0])) == 2 && !fet) {//diagonal 2 (/)
-
for (a=0; a<3; a++) {
-
b = 2-a;
-
if (t[a][b] == 0 && !fet) {
-
cruz(a,b);
-
fet = true;
-
}
-
}
-
}
-
b = 0;