sábado, 17 de enero de 2015

Cómo hacer un tres en raya con CSS y JavaScript

Primero haremos el cuerpo de nuestra página,podeis cambiar los colores,y las posiciones..

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title></title>
    <script type="text/javascript" src="script.js"></script>
    <link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
    <select id="selectorColor">
        <option>Black</option>
        <option>Blue</option>
        <option>Fuchsia</option>
        <option>Green</option>
        <option>Lime</option>
        <option>Maroon</option>
        <option>Navy</option>
        <option>Olive</option>
        <option>Orange</option>
        <option>Purple</option>
        <option>Red</option>
        <option>Silver</option>
        <option>Teal</option>
        <option>Yellow</option>
    </select>
    <br>
    <button id="botonColorAzar">colores al azar</button>
    <br>
    <button id="botonIntercambiarColores">Intercambiar colores</button>
    <br>
    <button id="botonColor1">1ยบ jugador</button>
    <div class="muestracolor" id="colorelegido1"></div>

    <button id="botonColor2">2ยบ jugador</button>
    <div class="muestracolor" id="colorelegido2"></div>
    <button id="botonEmpezar">empezar</button>
    <br>
    <button id="botonFinalizar">finalizar</button>
    <div id="contenedorTabla">
        <table>
            <tr>
                <td id="celda1"></td>
                <td id="celda2"></td>
                <td id="celda3"></td>
            </tr>
            <tr>
                <td id="celda4"></td>
                <td id="celda5"></td>
                <td id="celda6"></td>
            </tr>
            <tr>
                <td id="celda7"></td>
                <td id="celda8"></td>
                <td id="celda9"></td>
            </tr>
        </table>
        <p id="texto"></p>
    </div>
</body>
</html>

Ahora abriremos un enlace nuevo y añadiremos las siguientes líneas,le hemos llamado tresenraya.komodoproyect.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Komodo Project File - DO NOT EDIT -->
<project id="8fe900b6-84f4-4d93-a54f-b09d38c0d76d" kpf_version="5" name="tresenraya.komodoproject">
</project>

Luego abriremos otro documentonuevo para insertar css, que lo llamaremos style.css
.muestracolor
{
    height:50px;
    width: 50px;
    border: double 3px blue;
}
#colorelegido1
{
    background-color: gold;
}
#colorelegido2
{
    background-color: silver;
}
td
{
    width: 50px;
    height: 50px;
    border: dashed green 3px;
}
table
{
    border: double blue 5px;
}
div#contenedorTabla
{
    position: absolute;
    top: 0%;
    left: 35%;
}

Y por último abriremos otro documento añadiendo las variables y definiendo cada jugada, a este documento lo llamaremos script.js. Es importante que todos estos documentos estén bien enlazados.

var color1 = "orange";
var color2 = "silver";
var jugador = 1;
var fichasJ1 = 0;
var fichasJ2 = 0;
var idCeldas;
var bgcCeldas;
var muestraMensaje;
var ganador;
var contadorMensaje;

window.onload = function ()
{
    var selector;
    var i;
    selector = document.getElementById("contenedorTabla");
    selector.onmouseover = mueveDiv;
    selector = document.getElementById("botonColorAzar");
    selector.onclick = colorAzar;
    selector = document.getElementById("botonIntercambiarColores");
    selector.onclick = intercambiarColores;
    selector = document.getElementById("botonColor1");
    selector.onclick = color1Jugador;
    selector = document.getElementById("botonColor2");
    selector.onclick = color2Jugador;
    selector = document.getElementById("botonEmpezar");
    selector.onclick = empezarJuego;
    selector = document.getElementById("botonFinalizar");
    selector.onclick = finalizarJuego;
    selector = document.getElementsByTagName("td");
    idCeldas = new Array (selector.length)
    for (i=0;i<selector.length;++i) {
        idCeldas[i] = selector[i].id; 
    }
    bgcCeldas = new Array(3);
    for (i=0;i<3;i++)
    {
        bgcCeldas[i]= new Array(3);
    }
    muestraMensaje = document.getElementById("texto").innerHTML;
    
}
function mueveDiv()
{
    var aleatorio;
    this.style.left = (parseInt(Math.random()*50)+25)+"%";
    this.style.top = (parseInt(Math.random()*60))+"%";
}
function colorAzar()//aleatoriamente cambia los 2 colores de los jugadores
{
    var selector;
    var contenedor;
    var aleatorio;
    selector = document.getElementById("selectorColor");
    aleatorio = parseInt(Math.random()*13);
    color1 = selector[aleatorio].value;
    color1 = color1.toLowerCase(color1);
    aleatorio = parseInt(Math.random()*13);
    color2 = selector[aleatorio].value;
    color2 = color2.toLowerCase(color2);
    if (color1==color2)
    {
        colorAzar();
    }
    else
    {
        contenedor = document.getElementById("colorelegido1");
        contenedor.style.backgroundColor=color1;
        contenedor = document.getElementById("colorelegido2");
        contenedor.style.backgroundColor=color2;        
    }
}
function intercambiarColores()//intercambia el color del jugador 1 con el color del jugador 2 
{
    var auxiliar;
    auxiliar = color1;
    color1 = color2;
    color2 = auxiliar;
    contenedor = document.getElementById("colorelegido1");
    contenedor.style.backgroundColor=color1;
    contenedor = document.getElementById("colorelegido2");
    contenedor.style.backgroundColor=color2; 
}
function color1Jugador()//funcion para cambiar el color del 1º jugador
{
    var contenedor;
    var selector;
    selector = document.getElementById("selectorColor");
    color1 = selector.value;
    color1 = color1.toLowerCase(color1);
    contenedor = document.getElementById("colorelegido1");
    contenedor.style.backgroundColor=color1;
}
function color2Jugador()//funcion para cambiar el color del 2º jugador
{
    var contenedor;
    var selector;
    selector = document.getElementById("selectorColor");
    color2 = selector.value;
    color2 = color2.toLowerCase(color2);
    contenedor = document.getElementById("colorelegido2");
    contenedor.style.backgroundColor=color2;
}
function partidaEmpezada()
{
    alert("no puedes cambiar el color ya que la partida ha comenzado")
}
function empezarJuego()//funcion para poner todas las variables iniciales y activar funciones para empezar la partida
{
    if (color1==color2)
    {
        alert("los dos jugadores no pueden tener el mismo color");
        return;
    }
    var selector;
    var i;
    var j;
    var celdas;
    selector = document.getElementById("contenedorTabla");
    selector.onmouseover = "";
    selector.style.left = "35%";
    selector.style.top = "0%";
    selector = document.getElementById("botonColorAzar");
    selector.onclick = partidaEmpezada;
    selector = document.getElementById("botonIntercambiarColores");
    selector.onclick = partidaEmpezada;
    selector = document.getElementById("botonColor1");
    selector.onclick = partidaEmpezada;
    selector = document.getElementById("botonColor2");
    selector.onclick = partidaEmpezada;
    celdas = document.getElementsByTagName("td"); //me faltaba esta linea
    for (i=0;i<celdas.length;++i)
    {
        celdas[i].style.backgroundColor="white";
        celdas[i].onclick=cambiaColor;
    }
    for (i=0;i<bgcCeldas.length;++i)
    {
        for (j=0;j<bgcCeldas[i].length;++j)
        {
            bgcCeldas[i][j]="white";
        }
    }
    jugador = 1;
    fichasJ1 = 0;
    fichasJ2 = 0;
    ganador = false;
    document.getElementById("texto").innerHTML="Empieza el jugador 1";
}
function finalizarJuego()//funcion para desactivar las funciones del juego y activar las de eleccion de color para acabar la partida
{
    var selector;
    var i;
    var celdas;    
    selector = document.getElementById("contenedorTabla");
    selector.onmouseover = mueveDiv;
    selector = document.getElementById("botonColorAzar");
    selector.onclick = colorAzar;
    selector = document.getElementById("botonIntercambiarColores");
    selector.onclick = intercambiarColores;
    selector = document.getElementById("botonColor1");
    selector.onclick = color1Jugador;
    selector = document.getElementById("botonColor2");
    selector.onclick = color2Jugador;
    celdas = document.getElementsByTagName("td");
    for (i=0;i<celdas.length;++i)
    {
        celdas[i].onclick="";
    }
}
//------------------------------------------
//---------------3 en raya------------------
//------------------------------------------
function cambiaColor()//funcion principal que cambia el color y la principal del juego que llama a diferente funciones para que todo funcione
{
    var color;
    color = this.style.backgroundColor;
    if (jugador==1 && fichasJ1==3)
    {
        if (color==color1)
        {
            this.style.backgroundColor = "white";
            cambiaComprobador(this);
            fichasJ1--
        }
    }
    else if (jugador==2 && fichasJ2==3)
    {
        if (color==color2)
        {
            this.style.backgroundColor = "white";
            cambiaComprobador(this);
            fichasJ2--
        }
    }
    else if (jugador==1 && color=="white") 
    {
        this.style.backgroundColor=color1;
        jugador=2;
        fichasJ1++;
        cambiaComprobador(this);
        ganador = comprobarGanador(this);
        contadorMensaje = 0;
    }
    else if (jugador==2 && color=="white")
    {
        this.style.backgroundColor=color2;
        jugador=1;
        fichasJ2++
        cambiaComprobador(this);
        ganador = comprobarGanador(this);
        contadorMensaje = 0;
    }
    cambiaMensaje(this);
}
function cambiaComprobador(casilla)//funcion para cambiar la matriz creada para comprobar el 3 en raya
{
    var i;
    var j;
    var x;
    x = 0;
    for (i=0;i<bgcCeldas.length;++i)
    {
        for (j=0;j<bgcCeldas[i].length;++j)
        {
            if (casilla.id==idCeldas[x])
            {
                bgcCeldas[i][j] = casilla.style.backgroundColor;
                return;
            }
            ++x
        }
    }
}
function comprobarGanador(casilla)//comprueba en la matriz todas las opciones posibles por si hubiese un ganador
{
    var color;
    var i;
    color = casilla.style.backgroundColor;
    for (i=0;i<3;++i)
    {
        if (bgcCeldas[i][0]==color && bgcCeldas[i][1]==color && bgcCeldas[i][2]==color)
        {
            return true;
        }
        if (bgcCeldas[0][i]==color && bgcCeldas[1][i]==color && bgcCeldas[2][i]==color)
        {
            return true;
        }
    }
    if (bgcCeldas[0][0]==color && bgcCeldas[1][1]==color && bgcCeldas[2][2]==color)
    {
        return true;
    }
    if (bgcCeldas[0][2]==color && bgcCeldas[1][1]==color && bgcCeldas[2][0]==color)
    {
        return true;
    }
}

function cambiaMensaje(casilla)//escribe el mensaje para saver que a de hacer el jugador al que le toque
{
    var color;
    color = casilla.style.backgroundColor;
    if (ganador)
    {
        if (jugador!=1)
        {
            document.getElementById("texto").innerHTML = "Ha ganado el jugador 1";
            finalizarJuego();
        }
        else
        {
            document.getElementById("texto").innerHTML = "Ha ganado el jugador 2";
            finalizarJuego();
        }
    }
    else if (jugador==1 && fichasJ1==3)
    {
        document.getElementById("texto").innerHTML = "Has de borrar una ficha de tu color, jugador 1";
    }
    else if (jugador==2 && fichasJ2==3)
    {
        document.getElementById("texto").innerHTML = "has de borrar una ficha de tu color, jugador 2";
    }
    else if (jugador==1)
    {
        if (contadorMensaje<1)
        {
            document.getElementById("texto").innerHTML = "le toca al jugador 1";
            contadorMensaje++
        }
        else
        {
            document.getElementById("texto").innerHTML = "solo puedes poner ficha en una celda blanca";
        }
    }
    else if (jugador==2)
    {
        if (contadorMensaje<1)
        {
            document.getElementById("texto").innerHTML = "le toca al jugador 2";
            contadorMensaje++
        }
        else
        {
            document.getElementById("texto").innerHTML = "solo puedes poner ficha en una celda blanca";
        }
    }
}

No hay comentarios:

Publicar un comentario

¡Danos tu opinión!