Compite en C con Clase creando tu propio programa

Esta sección está dedicada a un proyecto para desarrollar entre todos los que quieran participar.

La forma que adopta es la de una especie de concurso o competición, aunque sin premios. Ya que este sitio no tiene ánimo de lucro, tampoco hay fondos para crear premios. De modo que el premio se limitará a un reconocimiento más o menos público por parte del resto de los usuarios y administradores de Con Clase.

Es decir, se trata de un premio simbólico. Esperamos que esto no desanime a muchos potenciales concursantes. :-)

¿En qué consiste?

La idea es simple. Hemos creado un programa de un juego (concretamente el de "hundir la flota", o "los barquitos").

La parte del programa que hemos creado, y cuyo código fuente se puede descargar desde la página, consiste en un conjunto de clases que permiten enfrentar a dos jugadores "virtuales", y comprobar cual de ellos gana, cuidando de que se respeten las reglas del juego.

También se incluye una clase base virtual pura para un jugador, de la que se debe derivar cualquier clase creada por ti. Las clases que enfrentan a cada pareja de jugadores usarán polimorfismo de modo que será posible enfrentar a dos clases derivadas cualquiera.

Todo esto se explicará con detalle más abajo, no te preocupes demasiado por ahora.

Para poder depurar tu programa, también se incluye un jugador que permite interactuar a un jugador humano, así como un jugador virtual de ejemplo.

Reglas del juego

Es de suponer que casi todos conocen las reglas del juego que nos ocupa, pero por si acaso las expondremos, ya que existen algunas variantes, y sólo se aceptarán estas:

  • El tablero consiste en una cuadrícula de 10 x 10, en la que se deben situar 10 barcos de distintos tamaños: uno de cuatro casillas, dos de tres, tres de dos y cuatro de uno.
  • Los barcos deben ocupar casillas consecutivas, y no se pueden tocar, ni siquiera en las esquinas.
  • El juego se desarrollará por turnos, independientemente de si un jugador acierta o no a un barco.

Reglas de la competición

Estas son las reglas del concurso, no las del juego:

  • Los programas enviados se enfrentarán en una "liga" de todos contra todos, en la que cada pareja de programas se enfrentará un número determinado de veces, por ejemplo 50. Aún no hemos decidido quién gana, si el que más partidas gane o el que gane a más jugadores.
  • Cualquier programa que provoque una excepción será descalificado. Esto incluye errores en la reserva de memoria dinámica, o transgresión de las reglas del juego, por ejemplo colocar un barco fuera del tablero o de forma ilegal, o disparar varias veces en el mismo barco. (No se considera error disparar varias veces en la misma casilla vacía).
  • Pondremos un calendario de enfrentamientos, asignando ciertas fechas para hacer una competición con los programas recibidos, y designándose un ganador para cada una de ellas.
  • Para cada fecha, los participantes podrán enviar nuevas versiones de sus programas, de modo que puedan mejorar sus algoritmos o corregir los errores que les llevaron a ser descalificados.
  • Mientras se mantenga el mismo juego (es posible que en el futuro lo cambiemos para dar más variedad), no se harán públicos los códigos de cada jugador, sobre todo para evitar "inspiraciones" poco deportivas. Aunque es posible que se pueda compartir el código objeto de ciertos programas, de modo que los aspirantes puedan mejorar sus algoritmos.
  • Será obligatorio respetar las constantes del juego, que se definen en el espacio con nombre "cte". Estas constantes incluyen el tamaño del tablero, de 10 x 10, y el número y tamaño de cada barco: 1 de 4 casillas, 2 de 3, 3 de 2 y 4 de 1. Es decir, un jugador no debe usar la constante 10 literalmente para referirse al ancho del tablero, sino cte::ancho. Esto es importante, se probarán los jugadores con otros juegos de constantes, si fallan serán descartados.