Si te fijas, los dos parámetros que estás pasando al socket hacen lo mismo, por lo que podrías quitar una función como parámetro y utilizarla tanto para el juego local como para el juego del "compañero".
Esta es mi propuesta
function escuchar() {
let elements = document.querySelectorAll('.cat-element');
elements.forEach(element => {
element.addEventListener('click',function() {
if(!this.hasChildNodes()) socket.play(parseInt(this.id.split('-')[1]));
});
});
}
function dibujarFigura(p) {
return p ? 'X' : 'O';
}
function dibujarMovimiento(pos,cFigure) {
let p = document.createElement('p');
p.style.fontWeight ='bold';
p.style.top = '42%';
p.style.right = '47%';
p.style.display = 'inline';
p.style.position = 'absolute';
p.innerHTML = dibujarFigura(cFigure);
document.querySelector('#elemento-' + pos).appendChild(p);
}
var socket = new Socket(dibujarMovimiento,3);
function Socket(movimiento,reinicie) {}
this.play = function(pos) {
socket.emit('nuevo_movimiento',{pos});
movimiento(pos,this.juego);
}
let juego = null;
let socket = io();
socket.on('connect',() => {
socket.on('init',data => {
if(juego == null) escuchar();
this.juego = data.figure;
});
socket.on('alguien_movio',function(data) {
movimiento(data.pos,data.figure);
});
});
}
Esta es mi propuesta
function escuchar() {
let elements = document.querySelectorAll('.cat-element');
elements.forEach(element => {
element.addEventListener('click',function() {
if(!this.hasChildNodes()) socket.play(parseInt(this.id.split('-')[1]));
});
});
}
function dibujarFigura(p) {
return p ? 'X' : 'O';
}
function dibujarMovimiento(pos,cFigure) {
let p = document.createElement('p');
p.style.fontWeight ='bold';
p.style.top = '42%';
p.style.right = '47%';
p.style.display = 'inline';
p.style.position = 'absolute';
p.innerHTML = dibujarFigura(cFigure);
document.querySelector('#elemento-' + pos).appendChild(p);
}
var socket = new Socket(dibujarMovimiento,3);
function Socket(movimiento,reinicie) {}
this.play = function(pos) {
socket.emit('nuevo_movimiento',{pos});
movimiento(pos,this.juego);
}
let juego = null;
let socket = io();
socket.on('connect',() => {
socket.on('init',data => {
if(juego == null) escuchar();
this.juego = data.figure;
});
socket.on('alguien_movio',function(data) {
movimiento(data.pos,data.figure);
});
});
}