JSFiddle - React, Tailwind, and code Playground

HTML

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<body>
	<h3 id="talking_box">!Cuando quieras!</h3>
</body>
</html>

CSS

*
{
	margin: 0; /*Resetea los márgenes de todos los elementos en la página*/
}
body
{
	background-color: #AA7639;
	color:#884900;
	font-size: 46px;
	text-align: center;
	-webkit-user-select: none; /*Para que no se pueda seleccionar el texto interior de las fichas*/
  	user-select: none; 
}
#game_board
{
	background-color: #884900;
	border-radius: 5px;
	margin: 20px auto;
	position: relative;
}
#piece_container
{
	background-color: #AA7639;
	font-size: 0;
	height: 96%; /*El alto del div interior que conforma el tablero para dar la sensación de un borde grueso*/
	left: 2%;
	position: absolute;
	top:2%;
	width: 96%; /*El ancho del div interior que conforma el tablero para dar la sensación de un borde grueso*/
}
#talking_box
{
	background-color: #FFF3E6;
	border: 5px solid #884900;
	border-radius: 5px;
	color: #FF8901;
	height:auto;
	margin: 10px auto;
	padding-bottom: 5px;
	width: 500px;
}
.game_piece
{	
	background-color: #FFF3E6;
	border: 2px groove #737679;
	box-sizing: border-box; /*Propiedad que hace que los bordes cuenten en el tamaño total de cada ficha*/
	display: inline-block;		
	height: 25%; /*Ancho de la ficha: la cuarta parte del tablero		*/
	position: absolute;		
	width: 25%;
}
.number_container
{	
	color: #FF8901;
	cursor: default;
	font-size: 50px;
	height: 50%;
	left: 50%;
	margin: -25% 0 0-25%;
	position: absolute;
	text-align: center;
	top: 50%;
	width: 50%;
}

JavaScript

//Función hecha para desorganizar un vector de cualquier tamaño
function Random(array)
{
	var length = array.length; //Se obtiene el tamaño del vector
	var aux; //Variable auxiliar que permite el intercambio entre valores internos del vector
	var randomPos; //variable que guarda el número aleatorio generado
	//	Se recorre todo el vector
	for(var i=0;i<length;i++)
	{
		aux = array[i]; //Se almacena el valor del vector en la posición actual i
		randomPos = Math.floor(Math.random() * length); //Se genera un número aleatorio entre 0 y el tamaño - 1
		array[i] = array[randomPos]; //Se coloca el valor del vector en la posición random como valor del vector en la posición actual
		array[randomPos] = aux; //Se coloca el valor del vector en la posición actual como valor del vector en la posición random
	}
	return array; //Se devuelve un vector con orden diferente al inicial
}
var Piece = function(value,rigthPosX,rigthPosY,posX,posY)
{
	this.value = value; //Valor numérico de la ficha
	this.isRigthPosition = false; //Variable que indica si la ficha se encuentra en la posición correcta
	this.posX = posX; //Variable que indica la fila actual en la que se encuentra la ficha (tablero 4x4)
	this.posY = posY; //Variable que indica la columna actual en la que se encuentra la ficha (tablero 4x4)
	this.rigthPosX = rigthPosX; //Variable que indica la fila en la que debería esta la ficha para estar en la posición correcta
	this.rigthPosY = rigthPosY; //Variable que indica la columna en la que debería esta la ficha para estar en la posición correcta
}
var Game = function()
{
	this.isWrongCount = 0; //Cuenta el número de fichas que se encuentran actualmente en la posición incorrecta
	this.piecesArray = new Array(); //Vector que contiene las 15 fichas y el espacio (simulado como otra ficha)

	//Este método permite hacer las configuraciones iniciales del juego. Ejemplo: repartir las fichas aleatoriamente.
	this.initializeGame = function()
	{
		var randomArray = new Array(); //Variable...