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.