Juego de hold'em basado en text en C usando TCP

Así que estoy tratando de crear un juego simple de input de text Texas Hold 'Em que se puede jugar en una Terminal entre varias computadoras. (Perturbe la falta de juegos hold 'em que no requieren la integración de Facebook o un millón de anuncios o micro transactions: c)

Con mi conocimiento actual puedo crear el server TCP y conectar algunos clientes, pero no estoy seguro de cómo proceder desde aquí. ¿Cómo puedo comunicarme entre los clientes y el server por turno usando la input de text de manera efectiva? Mi vaga idea de qué hacer es

  1. Aceptar clientes, almacenar FD en Array
  2. Pasa a través de Id's enviándoles 2 cartas cada una
  3. Crear hilo con una estructura de información del juego, que lea la input de text de los usuarios
  4. Espere a que el hilo termine y el valor de retorno será el movimiento de los jugadores
  5. Actualice la información del juego y repita el paso 3-4 para todos los clientes
  6. Rompe cada vez que quede solo 1 jugador, o todas las fases de las apuestas terminen, luego repite

Este esquema tiene sentido en el server, pero no estoy seguro de cómo build el cliente para que no haga nada hasta que lo solicite la creación del hilo en el server principal while loop. Si alguien tiene algún consejo o enlaces a artículos útiles o código de ejemplo, ¡realmente lo agradecería muchísimo!

Es posible que desee search en máquinas de estado finito .

La idea básica es que su cliente puede estar en uno de los muchos estados diferentes en los que se comporta de manera diferente tanto para el usuario como para el server.

  1. Estado de giro del jugador
    • Muestre al jugador las opciones que tiene (levantar, doblar, verificar …)
    • Espere la input del jugador
    • Cuando el jugador tomó una decisión, qué hacer, envíe esa decisión al server y vaya al estado "Esperando confirmación".
  2. Esperando el estado de confirmación
    • No aceptar input de jugador
    • Mostrar algún indicador de progreso para el jugador
    • Escucha al server y espera una respuesta
    • Cuando el server rechaza la acción, vuelve al turno del jugador
    • Cuando el server confirma la acción, ve al estado de no respuesta del jugador
  3. No es el turno del jugador
    • No aceptar input de jugador
    • Escucha al server por posts
    • Cuando el server envía un post sobre una acción realizada por otro jugador ("jugador 2 elevado por 12". "Jugador 3 doblado" …) o sobre otros events que suceden en el juego ("carta de turno revelada: rey de espadas" "), denuncie eso al jugador.
    • Cuando el server envía un post de que es el turno del jugador otra vez, vaya al estado de turno del jugador .
    • Cuando el server envía un post de que el juego ha concluido, cambia al estado de Juego terminado .
  4. Game Over state
    • Dile al jugador que ganó el juego
    • Espere la input si quieren join a otro juego o salir

Cada estado debe implementarse como una serie de funciones para manejar la input del usuario, la input de networking y el dibujo de la interfaz de usuario. Cuando llegue el momento de llamar a una de estas funciones, compruebe en qué estado se encuentra actualmente el cliente y llame a la function adecuada.