Bueno pues este sera el momento de nuestro primer juego! que tal un juego de dados? o un traga monedas?
Tal vez puedas hacer los dos, o tal vez mas! usa tu imaginación y tu lógica, También puedes comentar tus aplicaciones en la sección de
y bueno ahora, ya que estamos animados, comencemos con el tuto.
Que ocuparemos para poder llegar a nuestro objetivo: Random.
Libreria: stdlib.h
Contiene prototipos de la funcion para la convercion de numero a texto y texto aa numeros, asignacion de memoria, numeros aleatorios entre otras funciones.Funcion: rand Intrucción: i = rand ();
rand genera un numero entero sin signo entre 0 y RAND_MAX (definida en el encabezado <stdlib.h>)Valor de escalamiento rand() % x
el valor debe ser menor que 32767, siendo eso todos los numero tienen la misma oportunidad de salir, sera solo cuestión de suerte.
(x equibale a cualquier numero que queramos poner) si cambiamos ese x por un 6, cualquier numero ubicado entre 0 y 6 (RAND_MAX) podrá salir con la posibilidad de 1/7 % cada uno. para poder iniciar el rango en 1 necesitamos ponerlo asi:con código seria algo así:
1 + (rand () % 6) ahora si el rango sera de entre 1 y 6 y tendrá 1/6 % de posibilidad de salir cada numero ubicado entre esos 2
# include <stdio.h>el código anterior genera esto en pantalla(supongamos):
# include <stdlib.h>
int main ()
{
int i;
for(i = 1; i <= 5; i++){
printf("%10d", 1 + (rand() % 6);
}
return 0;
}
5 6 2 4 3
5 numero aleatorios de entre 1 y 6, pero en realidad no es random, estos valores se volverán a poner cada vez que se abra el programa, nada es lo que parece. solo parecen random pero ya vimos que no es así.
¿como hacer random en realidad?
una forma es mediante la entrada de daros por el usuario, esto se llama semilla.
para esto ocuparemos unsigned int. que aunque finito es un numero muy extenso, de 0 a 4294967295, para poder hacer la randomización mas extensa. el tipo de dato de representacion es "%u" como el "%d" en el entero común.
pero en realidad de esta forma no seria random en realidad, tampoco, como fue en el anterior.
Ya deja de jugar conmigo me tienes levantado de los pelos... ¿como hago un random verdadero?!
Ok, dejare tus pelos en paz, explicar lo anterior era necesario para comprender el porque de esta forma siguiente.
Ahora ocuparemos otras cosas, aparte de las anteriores.
Libreria: <time.h>
Todo lo referente al tiempo: Fecha y horaFuncion: time () ---> time (NULL)
time () pone la hora del día en formato de Horas:Minutos:Segundos, al poner el NULL entre el parentesis lo que estamos haciendo es romper el formato dejándolo solo en Segundos. dividiendo las horas entre 60, los minutos entre 60 y dejando la cantidad de segundos.
_______________ESO SERA TODO LO NECESARIO_______________
Ahora vamos a programar nuestro juego! Esta ves sera un traga monedas en linea recta de 3 filas y de 6 figuras. recordemos las reglas del juego: para poder sacar un premio (dependiendo la figura que se saque) tiene que ser en linea recta de 3 valores iguales:
- A-A-A (premio maximo! gana 1,000,000 y 10 fichas mas!)
- B-B-B (gana 100,000 puntos!)
- X-X-X (gana 50,000 puntos!)
- G- - - ( ganaran 1,000 puntos, solo si uno de los 3 es G)
- Z-Z-Z (gana 2 fichas mas!)
- F-F-F (gana 1 ficha,(otra oportunidad))
Ya se establecieron los valores, cabe mencionar que el juego es de mi autoría, ahora vamos a empezar el codigo.
se empieza el juego con 20 fichas, al final del juego (cuando se acaben las fichas) se dice cuantos puntos se acumularon
- /* Programa 4.0: juego traga monedas de casino*/
- # include <stdio.h>
- # include <stdlib.h>
- # include <time.h>
- int main ()
- { /*Declarando variables */
- int fichas;
- int jt;
- int cas1;
- int cas2;
- int cas3;
- int puntos;
- int A = 'A', B = 'B', X = 'X', G = 'G', Z = 'Z', F = 'F';
- /* fin de declaracion */
- fichas = 20;
- puntos = 0;
- /* utilizando el segundos del día para randomizar */
- srand (time(NULL));
- printf (" Tu estatus actual es Fichas: %d, Puntos: %d\n", fichas, puntos);
- while (fichas > 0) {
- printf("Para jalar la palanca del traga monedas escriba: 1");
- scanf("%d\n",&jt);
- if(jt != 1) {
- printf("Error 001: no se introdujo 1, usted itrodujo:%d", jt);
- }
- else {
- --fichas; /* resta una ficha y abajo ramdomiza */
- cas1 = 1 + (rand () % 6);
- cas2 = 1 + (rand () % 6);
- cas3 = 1 + (rand () % 6);
- /* lanza a pantalla las letras */
- /* casilla 1 */
- if (cas1 == 1) {
- printf("%c", A);
- }
- else
- if (cas1 == 2) {
- printf("%c", B);
- }
- else
- if (cas1 == 3) {
- printf("%c", X);
- }
- else
- if (cas1 == 4) {
- printf("%c", G);
- }
- else
- if (cas1 == 5) {
- printf("%c", Z);
- }
- else
- if (cas1 == 6) {
- printf("%c", F);
- }
- /* casilla 2 */
- if (cas2 == 1) {
- printf("-%c", A);
- }
- else
- if (cas2 == 2) {
- printf("-%c", B);
- }
- else
- if (cas2 == 3) {
- printf("-%c", X);
- }
- else
- if (cas2 == 4) {
- printf("-%c", G);
- }
- else
- if (cas2 == 5) {
- printf("-%c", Z);
- }
- else
- if (cas2 == 6) {
- printf("-%c", F);
- }
- /* casilla 3 */
- if (cas3 == 1) {
- printf("-%c\n", A);
- }
- else
- if (cas3 == 2) {
- printf("-%c\n", B);
- }
- else
- if (cas3 == 3) {
- printf("-%c\n", X);
- }
- else
- if (cas3 == 4) {
- printf("-%c\n", G);
- }
- else
- if (cas3 == 5) {
- printf("-%c\n", Z);
- }
- else
- if (cas3 == 6) {
- printf("-%c\n", F);
- }
- /* calcula los premios */
- if (cas1 == 1 && cas2 == 1 && cas3 == 1) {
- printf("Premio Mayor! Ganaste 1millon de puntos y 10 fichas\n");
- fichas = fichas + 10;
- puntos = puntos + 1000000;
- }
- else
- if (cas1 == 2 && cas2 == 2 && cas3 == 2) {
- printf("Ganaste 100,000 puntos!\n");
- puntos = puntos + 100000;
- }
- else
- if (cas1 == 3 && cas2 == 3 && cas3 == 3) {
- printf("Ganaste 50,000 puntos!\n");
- puntos = puntos + 50000;
- }
- else
- if (cas1 == 4 || cas2 == 4 || cas3 == 4) {
- printf("Ganaste 1,000 puntos!\n");
- puntos = puntos + 1000;
- }
- else
- if (cas1 == 5 && cas2 == 5 && cas3 == 5) {
- printf("Ganaste 2 fichas!\n");
- fichas = fichas + 2;
- }
- else
- if (cas1 == 6 && cas2 == 6 && cas3 == 6) {
- printf("Ganaste 1 ficha!\n");
- fichas = fichas + 1;
- }
- else
- printf("Lo siento, vuelve a intentarlo\n");
- }
- printf(" Tu estado actual del juego es: Fichas: %d - Puntos: %d\n", fichas, puntos);
- }
- if (fichas == 0){
- printf("FIN DEL JUEGO!\n"); /* finaliza el juego */
- }
- return 0;
- } /* fin main */
Resultado del juego:
fichas: 20, puntos: 0
Para jalar la palanca escriba 1 [_7_]
Error 001: no se introdujo 1, usted introdujo: 7
Para jalar la palanca escriba 1 [_1_]
A-B-Z
Lo siento, vuelve a intentarlo
Tu estado actual del juego es: fichas: 19, puntos: 0
Para jalar la palanca escriba 1 [_1_]
A-A-A
Premio Mayor! Ganaste 1millon de puntos y 10 fichas
Tu estado actual del juego es: fichas: 28, puntos: 1 000 000
Para jalar la palanca escriba 1 [_1_]
B-G-Z
Ganaste 1,000 puntos!
Tu estado actual del juego es: fichas: 27, puntos: 1 001 000
... (27 y un poco mas fichas despues)
Para jalar la palanca escriba 1 [_1_]
Z-Z-B
Lo siento, vuelve a intentarlo
Tu estado actual del juego es: fichas: 0, puntos: 7 553 000
FIN DEL JUEGO!
y así termina el programa, tiene una simple función, demasiado largo no? tal vez aya formas de optimizarlo, de forma que se ocupen menos funciones. y no esta para menos que 1:30 horas haciéndolo, de hecho eso me tarde. espero que lo puedan comprender, me rompí la cabeza haciéndolo y un buen juego que tengo en mente sera una suite casino para ipod, android, ubuntu y windows. lo publicare en mis proyectos en un blog en el que estoy trabajando.
y bueno este es el final de la entrada mas extensa que eh hecho, pero disfrute haciéndola, espero que sientas lo mismo estudiándola y comprendiéndola.
Saludos!
____________________EDITO POR OPTIMIZACIÓN!____________________
Una mejor forma de resolver el problema es usando la sentencia switch para optimizar el programa, osea hacerlo mas estable, y que ocupe menos ram al ejecutarse.
- /* Programa 4.0: juego traga monedas de casino con switch*/
- # include <stdio.h>
- # include <stdlib.h>
- # include <time.h>
- int main ()
- { /*Declarando variables */
- int fichas;
- int jt;
- int cas1;
- int cas2;
- int cas3;
- int puntos;
- int A = 'A', B = 'B', X = 'X', G = 'G', Z = 'Z', F = 'F';
- /* fin de declaracion */
- fichas = 20;
- puntos = 0;
- /* utilizando el segundos del día para randomizar */
- srand (time(NULL));
- printf (" Tu estatus actual es Fichas: %d, Puntos: %d\n", fichas, puntos);
- while (fichas > 0) {
- printf("Para jalar la palanca del traga monedas escriba en numero 1:\n");
- scanf("%d\n",&jt);
- if(jt != 1) {
- printf("Error 001: no se introdujo 1, usted itrodujo:%d", jt);
- }
- else {
- --fichas; /* resta una ficha y abajo ramdomiza */
- cas1 = 1 + (rand () % 6);
- cas2 = 1 + (rand () % 6);
- cas3 = 1 + (rand () % 6);
- /* lanza a pantalla las letras */
- /* casilla 1 */
- switch (cas1) {
- case 1:
- printf("%c", A);
- break;
- case 2:
- printf("%c", B);
- break;
- case 3:
- printf("%c", X);
- break;
- case 4:
- printf("%c", G);
- break;
- case 5:
- printf("%c", Z);
- break;
- case 6:
- printf("%c", F);
- break;
- }
- /* casilla 2 */
- switch (cas2) {
- case 1:
- printf("-%c", A);
- break;
- case 2:
- printf("-%c", B);
- break;
- case 3:
- printf("-%c", X);
- break;
- case 4:
- printf("-%c", G);
- break;
- case 5:
- printf("-%c", Z);
- break;
- case 6:
- printf("-%c", F);
- break;
- }
- /* casilla 3 */
- switch (cas3 ) {
- case 1:
- printf("-%c\n", A);
- break;
- case 2:
- printf("-%c\n", B);
- break;
- case 3:
- printf("-%c\n", X);
- break;
- case 4:
- printf("-%c\n", G);
- break;
- case 5:
- printf("-%c\n", Z);
- break;
- case 6:
- printf("-%c\n", F);
- break;
- }
- /* calcula los premios */
- if (cas1 == 1 && cas2 == 1 && cas3 == 1) {
- printf("Premio Mayor! Ganaste 1millon de puntos y 10 fichas\n");
- fichas = fichas + 10;
- puntos = puntos + 1000000;
- }
- else
- if (cas1 == 2 && cas2 == 2 && cas3 == 2) {
- printf("Ganaste 100,000 puntos!\n");
- puntos = puntos + 100000;
- }
- else
- if (cas1 == 3 && cas2 == 3 && cas3 == 3) {
- printf("Ganaste 50,000 puntos!\n");
- puntos = puntos + 50000;
- }
- else
- if (cas1 == 4 || cas2 == 4 || cas3 == 4) {
- printf("Ganaste 1,000 puntos!\n");
- puntos = puntos + 1000;
- }
- else
- if (cas1 == 5 && cas2 == 5 && cas3 == 5) {
- printf("Ganaste 2 fichas!\n");
- fichas = fichas + 2;
- }
- else
- if (cas1 == 6 && cas2 == 6 && cas3 == 6) {
- printf("Ganaste 1 ficha!\n");
- fichas = fichas + 1;
- }
- else
- printf("Lo siento, vuelve a intentarlo\n");
- }
- printf(" Tu estado actual del juego es: Fichas: %d - Puntos: %d\n", fichas, puntos);
- }
- if (fichas == 0){
- printf("FIN DEL JUEGO!\n"); /* finaliza el juego */
- }
- return 0;
- } /* fin main */
Ayuda amigos con este programa!
ResponderEliminarcódigo en C con la que el usuario pueda adivinar en un máximo de 7 oportunidades un número entero comprendido entre 1 y 100.En cada ciclo la computadora le dirá que el número que capturo el usuario es mayor o menor que el número que tiene la computadora.Utilice la función rand y srand para calcular el número a adivinar (recordar que el mismo tiene que ser entre 1 y 100). Utilice además la repetitiva Hacer-mientras.
Gracias por su ayuda!
http://programing-street.blogspot.mx/2012/05/resolviendo-problema-de-usuario-anonimo.html
EliminarAhi esta tu respuesta bro, ojala la puedas ver!
Saludos!
Hey, nice site
ResponderEliminarbtw, this program would much simple you use switch instead of a chain (if and else)
switch(cas3){
case 3: method1();break;
case 2: method2();break;
default:method3();break;
}
Thanks, its better!
Eliminari will optimize it
Amigo ocupo este programa! Agradeceria mucho tu ayuda! Gracias!
ResponderEliminarDeclare una estructura, que tendrá como elementos los datos siguientes: Nombre, Departamento, Sueldo diario, Días trabajados, Horas extras. Realice una función CAPTURAR en la que solicite los datos. Se deben almacenar al menos 40 registros.
Debe existir una función llamada Calcular, donde se realizarán las siguientes operaciones:
Sueldo bruto = salario diario * días trabajados
Pago de horas extras = (salario diario/8)*2*horas extras
Percepciones = Sueldo bruto + pago de horas extras
Cuota del IMSS =percepciones * 3%
Cuota del ISPT = Percepciones *7%
Deducciones = Cuota de IMSS +Cuota de ISPT
Sueldo Total = Percepciones -Deducciones
Y la función MOSTAR que despliegue la información del trabajador y el desglose de su sueldo