First commit
This commit is contained in:
commit
be32760a48
94
index.html
Normal file
94
index.html
Normal file
@ -0,0 +1,94 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
<script src="js/vendors/vue.min.js"></script>
|
||||
<script src="js/main.js" defer></script>
|
||||
|
||||
<style>
|
||||
body{
|
||||
background-color: #14bdac;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
text-align: center;
|
||||
font-family: Arial;
|
||||
|
||||
}
|
||||
.grid{
|
||||
display: grid;
|
||||
grid-template: 1fr 1fr 1fr/1fr;
|
||||
background-color: #0da192;
|
||||
grid-gap: 1rem;
|
||||
height: 20rem;
|
||||
width: 20rem;
|
||||
}
|
||||
.grid__casilla{
|
||||
display: grid;
|
||||
grid-template: 1fr /1fr 1fr 1fr;
|
||||
grid-gap: 1rem;
|
||||
}
|
||||
.equis{
|
||||
background-image: url("https://cdn.pixabay.com/photo/2016/10/10/01/49/x-1727490_960_720.png");
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-size: 3rem;
|
||||
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
}
|
||||
.circulo{
|
||||
background-image: url("https://cdn.pixabay.com/photo/2015/08/27/10/30/ban-909970_960_720.png");
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-size: 3rem;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
button{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #14bdac;
|
||||
border: none;
|
||||
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main id="app">
|
||||
<h1 style="color: white; ">Tres en Raya</h1>
|
||||
<hr style="margin-bottom: 3rem">
|
||||
<!--Jugadores-->
|
||||
<select v-model="jugador">
|
||||
<option value="1">Jugador1</option>
|
||||
<option value="2">Jugador2</option>
|
||||
</select>
|
||||
<!--Tablero-->
|
||||
<div class="grid">
|
||||
<div v-for="(x,indiceX) in casillas" class="grid__casilla">
|
||||
<button @click="marcar(indiceX,indiceY)" v-for="(y,indiceY) in x">
|
||||
<span v-if=" y === 0"></span>
|
||||
<span v-if=" y === 1" class="equis"></span>
|
||||
<span v-if="y === 2" class="circulo"> </span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
69
js/main.js
Normal file
69
js/main.js
Normal file
@ -0,0 +1,69 @@
|
||||
const miWebSocket = new WebSocket('ws://localhost:8080');
|
||||
//0 - Bacio
|
||||
//1 - Jugador 1
|
||||
//2 - Jugador 2
|
||||
//3 - Desactivada
|
||||
|
||||
const casillasInicio = [
|
||||
[0,0,0],
|
||||
[0,0,0],
|
||||
[0,0,0]
|
||||
]
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
data: {
|
||||
jugador: '1',
|
||||
casillas: casillasInicio,
|
||||
},
|
||||
mounted: function (){
|
||||
this.iniciarWebSocket();
|
||||
},
|
||||
methods: {
|
||||
marcar: function (x,y){
|
||||
this.casillas[x][y] = parseInt(this.jugador);
|
||||
this.$forceUpdate();
|
||||
this.enviarDatos(x,y);
|
||||
},
|
||||
iniciarWebSocket: function (){
|
||||
function open () {
|
||||
// Abre conexión
|
||||
console.log("WebSocket abierto.");
|
||||
}
|
||||
|
||||
const message = (evento) => {
|
||||
// Se recibe un mensaje
|
||||
console.log("WebSocket ha recibido un mensaje");
|
||||
// Mostrar mensaje en HTML
|
||||
const datosRecibidos = JSON.parse(evento.data);
|
||||
this.casillas[datosRecibidos.x][datosRecibidos.y] = datosRecibidos.jugador;
|
||||
this.$forceUpdate();
|
||||
}
|
||||
|
||||
function error (evento) {
|
||||
// Ha ocurrido un error
|
||||
console.error("WebSocket ha observado un error: ", evento);
|
||||
}
|
||||
|
||||
function close () {
|
||||
// Cierra la conexión
|
||||
console.log("WebSocket cerrado.");
|
||||
}
|
||||
|
||||
|
||||
// Eventos de WebSocket
|
||||
miWebSocket.addEventListener('open', open);
|
||||
miWebSocket.addEventListener('message', message);
|
||||
miWebSocket.addEventListener('error', error);
|
||||
miWebSocket.addEventListener('close', close);
|
||||
},
|
||||
enviarDatos: function (x,y){
|
||||
miWebSocket.send(JSON.stringify({
|
||||
x: x,
|
||||
y: y,
|
||||
jugador: parseInt(this.jugador),
|
||||
}));
|
||||
|
||||
},
|
||||
}
|
||||
});
|
6
js/vendors/vue.min.js
vendored
Normal file
6
js/vendors/vue.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
16
package.json
Normal file
16
package.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "tres-enraya",
|
||||
"version": "1.0.0",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "node server.js"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"description": "",
|
||||
"dependencies": {
|
||||
"ngrok": "^3.4.0",
|
||||
"ws": "^7.4.3"
|
||||
}
|
||||
}
|
25
server.js
Normal file
25
server.js
Normal file
@ -0,0 +1,25 @@
|
||||
// Importaciones
|
||||
const WebSocket = require('ws');
|
||||
const http = require('http');
|
||||
|
||||
// Creamos una instacia del servidor HTTP (Web)
|
||||
const server = http.createServer();
|
||||
// Creamos y levantamos un servidor de WebSockets a partir del servidor HTTP
|
||||
const wss = new WebSocket.Server({ server });
|
||||
|
||||
// Escuchamos los eventos de conexión
|
||||
wss.on('connection', function connection(ws) {
|
||||
// Escuchamos los mensajes entrarntes
|
||||
ws.on('message', function incoming(data) {
|
||||
// Iteramos todos los clientes que se encuentren conectados
|
||||
wss.clients.forEach(function each(client) {
|
||||
if (client.readyState === WebSocket.OPEN) {
|
||||
// Enviamos la información recibida
|
||||
client.send(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Levantamos servidor HTTP
|
||||
server.listen(8080);
|
Loading…
Reference in New Issue
Block a user