Ir al contenido principal

piedra, papel y tijeras en c++

Hola hoy les mostrare como hacer un programa que simule en c++ el juego de piedra, papel y tijera.
en el cual se utilizan la mayoría de los elementos básicos que se usan en c++ para programar.
para nuestro programa se seguirán las reglas tradicionales con tres opciones y haremos que nuestro programa se repita hasta que nosotros decidamos terminar de jugar. Al finalizar les diremos el total de victorias y empates, este juego es de dos personas así que haremos que nuestro ordenador sea el contrincante.

¿piedra, papel y tijeras?
es un juego de manos que se juega entre dos personas.

como les he comentado anteriormente es necesario hacer un pequeño análisis antes de programar.


Análisis

salida: mensaje que indica al ganador, el total de victorias y empates.
entrada: una opción de juego(piedra,papel,tijera)

procedimiento:  
  • declarar variables enteras jugador, maquina, victorias_jugador, victoria_maquina, empates
  • inicializar en 0 variables victorias_jugador, victorias_maquina y empates.
  • Escribir “ingrese la opción del jugador:”
  • Leer opción jugador
  • Calcular la opción del maquina.
  • Comparar jugadas para declarar al ganador.

Aquí ya tenemos un análisis de nuestro programa donde se muestra la salida o el resultado que se quiere obtener con nuestro programa, entrada son los datos que necesito que el usuario del programa proporcione y el procedimiento es donde ponemos los pasos para realizar nuestro juego.

El procedimiento anterior en este caso lo podemos separar en 3 partes

1.-solicitar la jugada del usuario o jugador.
2.-calcular la opción de la maquina
3.-decidir al ganador

solicitar datos de entrada mediante un menú de opciones

para obtener la jugada del usuario vamos a utilizar un menú muy simple con cuatro opciones 

Piedra Papel y Tijeras en C++

breve explicación:

linea 23-28 escribimos en pantalla un menú para mostrar las opciones al jugador, la ( \n ) significa que cuando se ejecute nuestro programa al escribir tendrá un salto de linea.
Linea 29 capturamos la opción del jugador en la variable jugador que debemos declarar con anterioridad.
Linea 32-38 utilizamos una sentencia if para  ver si la opción que dio el jugador es valida y en caso de no serla entonces le escribimos un mensaje avisándole.
Linea 22-39 se utiliza un bloque do-while para repetir las acciones dentro de el, hasta que el jugador escriba un valor entre el 0 y 3 en la variable jugador.

Calcular la jugada de la maquina

para elegir el movimiento que hará la maquina utilizaremos números pseudoaleatorios, como en casi todos los lenguajes existen bibliotecas con funciones que hacen este calculo, nosotros también utilizaremos la que c++ proporciona para esta tarea.

Rand() : esta función genera un numero pseudoaleatorio, el problema es que siempre que ejecutamos nuevamente el programa genera el mismo numero aleatorio.
Esto es así porque rand hace un calculo basado en un numero o valor de entrada el cual es llamado semilla.
La solución seria modificar la semilla y para eso utilizamos la función srand
srand(null): modifica semilla de numero aleatorio, pero tiene un inconveniente ya que si cambiamos el valor de la semilla, si va a cambiar la serie de números pseudoaleatorios, pero solamente sirve una vez.
Solución: debemos darle un numero diferente cada vez que queramos generar un numero aleatorio,
esto se realiza con la función time(); la función time devuelve un valor basado en el reloj el cual cambia cada segundo.

Selección de la maquina

Breve explicación

linea 19 se configura el valor de la semilla de rand
linea 20 se guarda el numero pseudoaleatorio entre el [1-3] en la variable maquina.

cuando se esta programando en windows es necesario incluir la biblioteca <time.h> y si están en ubuntu solamente es necesaria la biblioteca <cstdlib>.
Ya con esto tenemos la opción del jugador y de la maquina ahora solo falta decidir al ganador.

Decidiendo al ganador

una vez obtenidos la jugada del usuario y la maquina entonces las comparamos para decidir al ganador, una manera de hacerlo es la siguiente:

decidiendo al Ganador

linea 43-49 se compara si hubo un empate
linea  50-102 utilizamos bloques switch anidados, primero utilizamos un switch para manejar un evento distinto en todos los casos posibles del valor jugador, dentro de cada caso utilizamos otro switch para escribir distintos resultados dependiendo del valor que tome la variable maquina.

Con esto ya tienen lo mas fundamental del programa que juega piedra papel y tijeras.
Si tienen alguna duda sobre los bloques if-else  , switch, los invito a que pulsen aqui para ver un poco del tema.
si les interesa ver o descargar el código fuente para revisarlo aquí(MediaFire).
si te gusto el post compártelo para que más personas puedan leerlo. 

Comentarios

Publicar un comentario

Entradas más populares de este blog

Programación modular en c++

programación modular Es un paradigma de programación que se basa en un refrán “divide y vencerás” , el cual consiste en dividir un problema grande y difícil de solucionar en varios mas pequeños y simples. cuando tenemos un problema difícil de resolver es muy complicado escribir todo el código en el MAIN (función principal)  la solución es utilizar la programación modular la cual consiste en dividir en pequeñas funciones o subprocesos mas simples. ejemplo.- la función main utiliza varias funciones  ventajas mantenimiento del programa documentación reutilización de código  fallas independientes ya hablamos de la programación modular pero como lo aplicamos en c++ Funciones   las funciones son subprogramas diseñados para resolver un problemas especifico, algunos ejemplos son las bibliotecas estándar de c++ que nos ayudan en tareas como leer datos, calcular números aleatorios. pero nosotros podemos crear nuestras funciones a medida ...

programa c++ mayor de dos numeros

hola en esta entrada les mostrare como hacer un programa que calcule el mayor de dos números utilizando la estructura de control if. ejercicio.- programa que calcula el mayor de dos números reales. análisis salida:mensaje que indique que el mayor de dos números entrada:dos números reales procedimiento: declarar 2 variables reales(float o double) escribir "ingrese numero 1: " leer numero1 escribir "ingrese numero2: " leer numero2 comparar numero1 y numero2 imprimir el mayor es: numero mayor ya que hicimos el procedimiento hay que codificarlo breve explicación linea 1-2 incluimos bibliotecas linea 6 declaramos variables tipo double linea 9-12 solicitamos al usuario que ingrese los numeros y los almacenamos en las variables linea 14-15  comparamos si el numero 1 es mayor que el numero 2 y si se cumple la condicion imprimimos que el mayor es el numero 1. linea 16-17 comparamo...

variables globales y locales

en c++ cuando trabajamos con varias funciones y cientos de variables se suele dar el caso que tenemos variables con el mismo nombre, por esto en algunos casos es confuso saber cual es la variable que estamos utilizando y por lo cual se cometen errores difíciles de detectar. variable local son todas aquellas declaradas dentro de una función, este tipo de variable tiene la característica de ser conocida solamente dentro de la función donde son declaradas, esto significa que pueden ser referenciada solo por dicha función. el ciclo de vida de una variable local: se crea la variable al momento de ejecutar la función a la que pertenece y son destruidas al finalizar la ejecución. variable global estas variables en contraste con las locales, se declaran fuera de todas las funciones antes de ser utilizadas por primera vez y están presentes durante todo el tiempo de ejecución del programa. las variables globales se pueden manipular desde cualquier función....