Dev - C++ - Ayuda juego de números random en c++

   
Vista:

Ayuda juego de números random en c++

Publicado por Fercside (3 intervenciones) el 30/11/2014 04:12:13
tengo un problema en c++. quizá este mal es porque soy nuevo en este lenguaje y estoy lleno de dudas XD.
el fin es hacer un codigo que te solicite un número entre el 1 y el 10, y si el número coinside con el numero que calculó la computadora, se aumenta una vida, y si no es así, se disminuye una vida, empiezas el juego con 5 vidas y si las vidas llegan a ser 0 se muestra un mensaje "FIN DEL JUEGO", ahí esta el problema, todo funciona bien pero cuando las vidas están en 0 no se muestra el mensaje que declare en el codigo.
Este es mi código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
 
int apuesta;
int apuesta_c;
int vidas=5; .
bool a=1; //no se si use bien esto, pero el punto era darle un nombre a lo que el bucle va repetir más adelante.
using namespace std;
 
int main(){
	srand(time(NULL));
	if(vidas!=0)
	{
		for(a=1;vidas!=0;a++)
		{
			cout << "Vidas: " << vidas << "\n" << endl;
			cout << "Apuesta!" << endl;
			scanf("%d", &apuesta);
			apuesta_c = rand() %10;
				if (apuesta==apuesta_c)
					{
						cout << "Felicidades. +1 \n" << endl;
						vidas=vidas+1;
					}
					else
					{
						cout << "Has perdido, apuesta de la computadora: " << apuesta_c << endl;
						vidas=vidas-1;
					}
		}
	}
	else
	{
		cout << "FIN DEL JUEGO" << endl;
	}
	system("PAUSE");
	return 0;
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp

Ayuda juego de números random en c++

Publicado por vangodp (287 intervenciones) el 30/11/2014 06:11:22
Bueno... no voy a liar mas jaj aqui lo tiene: http://codepad.org/1SXMh1xa

Ni por asomo se parece al tuyo pero sigue un padron al que sigue la mayoria de los juegos.
Todo o sino casi todos los juegos van dentro de un bucle llamado gameloop. No es mas que un bucle while.
Para detener el game loop hay varios medios como un break o bien un return o cambiando el valor de la condicion del game loop entre otros.

Un juego basicamente esta compuesto por ese sistema:
bool salir = 0;
while (!salir){
//Entrada

//Lógica

//Salida
}

Salir bien puede ser un bool que inicia su valor en FALSE ya que hay mas logica que salgamos cuando salir sea TRUE. Eso es lo que hace el operador de negacion, invertir el valor de salir.
Luego checamos si (vidas == 0) salir = TRUE; pero como while funciona con TRUE ponemos el ! delante de salir (!salir) para que cuando sea TRUE en realidad para while sera false y el bucle se va al carajo. XDDD

En ENTRADA se mira las teclas pulsadas. Por si el juego fuera de pulsar teclas claro! Como el tuyo es de entrar texto, es lo mismo, es entrada.

En la parte de la Logica es donde hacemos el trabajo "pesado"... Comparaciones, asignaciones etc etc.

En la parte de salida es donde se muestra los cambios al usuario y por eso no eleji imprimir los mensajes en la parte anterior. Lo normal es que sigas una forma de programar de manera ordenada. Ya has imaginado si tu programa crece algunos cientos de lineas y tienes Logica mesclado con mensajitos.... Te vas a volver loco.

Si es entrada a la entrada, si es Lógia a la lógica, si es salida a la salida y asi seras mas feliz y tu código quedara mas pulido.

Ademas faltan cosas en ese código. Por ejemplo no pregunta si la persona desea salir del juego sin tener que estar ejecutando una y otra vez el programa. Eso seria un bucle mas y nuestro bucle estaria dentro de el, antes de salir se preguntaria si la persona quiere jugar alguna vez mas y de ser que si incluso un contador de partidas ganadas por ti y por el pc no vendria mal.

Te doy una idea para otro juego... el ordenador elije un numero R de 1 a 20 o como quieras mejor. Luego tienes que adivinar cual numero es y el ordenador lo mismo. Solo que gana un punto el que se advine o se acerque mas al numero R. Seria 2 rand(), uno para escojer el valor R y otro que seria el player NPC, o non player control(jugador no controlado por computadora).
10 intentos y el que tenga mas puntos gana.
Puede ser que el que acierte gane 2 puntos mientras el que llegue mas cerca y no acerte ninguno solo un punto. Hay un mar de posibilidades.

Si te animas hasta lo podias hacer de forma grafica con una libreria 2d como esta: http://miniwin.readthedocs.org/en/latest/

Aqui estan sus funciones: http://miniwin.readthedocs.org/en/latest/Utilizacion.html

Y aqui unos videos al final de la pagina en la parte de juegos que te explican como hacer cosas con esta libreria: http://www.minidosis.org/#/

Esta pagina es muy buena para aprender C++.

Bueno no alargo mas esto.
Suerte, si necesitas mas ayuda sigue preguntando ;).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda juego de números random en c++

Publicado por Fercside (3 intervenciones) el 30/11/2014 08:17:11
Muchas gracias!!!
Pero me puse a pensar y el juego que tu me dices es más fácil que el que estaba haciendo

yo lo hice así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <math.h>
#include <time.h>
#include <stdlib.h>
 
int num_u;
int num_u_c;
int num_c;
int num_c_u;
int puntos_c=0;
int puntos_u=0;
int i=1;
 
using namespace std;
 
int main () {
	srand(time(NULL));
	for(;i<10;i++)
	{
	cout << "¿Que numero estas pensando?" << endl;
	cin >> num_u;
	cout << "¿Que numero esta pensando la computadora?" << endl;
	cin >> num_u_c;
	num_c=rand() %10;
	num_c_u=rand() %10;
	if (num_u_c==num_c)
	{
		puntos_u=puntos_u+1;
		cout << "\n\n    +1 punto para el usuario \n\n" << endl;
	}
	else
	{
		puntos_u=puntos_u+0;
	}
	cout << "Numero pensado por la computadora: " << num_c << "\nNumero que la computadora dice que piensas: " << num_c_u << endl;
	if (num_u==num_c_u)
	{
		puntos_c=puntos_c+1;
		cout << "\n\n    +1 punto para la computadora \n\n" << endl;
	}
	else
	{
		puntos_c=puntos_c+0;
	}
 
	}
	cout << "\n\nFIN DEL JUEGO \n\nPUNTOS DEL USUARIO: " << puntos_u << "\nPUNTOS DE LA COMPURADORA:" << puntos_c << endl;
	if(puntos_c==puntos_u)
	{
		cout << "\nEMPATE\n" << endl;
	}
	else
	{
	if (puntos_c>puntos_u)
	{
		cout << "\nGANADOR: COMPUTADORA\n" << endl;
	}
	else
	{
		cout << "\nGANADOR: USUARIO\n" << endl;
	}
	}
 
 
	system("PAUSE");
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

Ayuda juego de números random en c++

Publicado por vangodp (287 intervenciones) el 30/11/2014 17:12:24
Sisi.. son muy faciles.
Te dejo otro... XD
El juego se trata de ese; http://es.wikipedia.org/wiki/Juego_del_15

Hay que organizar esto:
[02][01][03][04]
[05][06][07][08]
[09][10][11][12]
[13][14][15][00]

y dejar en esto:
[01][02][03][04]
[05][06][07][08]
[09][10][11][12]
[13][14][15][00]

la casilla 00 no existe. Es un espacio que puedes mover las "piedras" adjacentes.
Si entras aqui tienes el juego para probarlo: http://www.buscar-juegos.com/juego.php?minijuego=1620

puedes hacerlo por ejemplo... muestras eso por pantalla:
[02][01][03][04]
[05][06][07][08]
[09][10][11][12]
[13][14][15][00]

elijes una piedra cualquiera la 12 por ejemplo.
1º debes ver si la puedes mover. Solo hay un movimiento posible para la 12 y es hacia abajo.
al escojer 12 cambia de posicion con la 00.

Eso ya es mas dificil he jejej.
Aqui ayude una vez a una persona a hacerlo pero esta en portugues: https://br.answers.yahoo.com/question/index?qid=20140601185307AAv80BG

Pero el codigo es mas facil para entenderlo: http://codepad.org/081WV9qx
Esta incompleto. Intenta terminarlo tu o hacerlo desde cero. Por ejemplo no implemente nada que mire las piedras de al lado para saber si se puede mover. vasicamente el juego pregunta la posicion de la piedra en la matriz y pregunta la direcion para moverla, pero si la direcion tiene una piedra que no es la 00 no deberia dejar hacer el cambio y deberia pedir una nueva piedra =).
Suerte ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda juego de números random en c++

Publicado por Fercside (3 intervenciones) el 06/12/2014 05:19:00
Pues es cierto que ese ultimo juego esta mucho más difícil jeje XD.
Pero ya pudo solucionar el problema del primer juego, lo hice con el while como dijiste, y tuve un montón de problemas porque siempre fallaba algo, pero todo era porque ponía el valor inicial de vidas fuera del primer while (el primer while es el que encierra al while original, con el proposito de repetir el juego si se presiona la R, y al estar fuera de ese while al momento de repetir el bucle del primer while tomaba las vidas como en el ultimo valor en el que se quedaron, lo cual contradecía la condiciones que le di al segundo while).
El codigo me quedo así (le agregue un montón de cosas nuevas XD );

#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>


char repet='r';
int vidas;
int num_u;
int num_c;

using namespace std;
int main() {
srand(time(NULL));
while (repet=='r' or repet=='R'){
vidas=8;
cout << "VIDAS: " << vidas << "\n" << endl;
while (vidas>0 and vidas<10)
{


cout << "APUESTA!" << endl;
cin >> num_u;
num_c=rand() %10;

if(num_c==num_u)
{
cout << "FELICIDADES\n +2 VIDA\n" << "VIDAS: " << endl;
vidas=vidas+2;
cout << vidas << "\n" << endl;
}
else
{
cout << "Perdiste\n" << "Apuesta de la computadora: " << num_c << "\n" << "VIDAS: " << endl;
vidas=vidas-1;
cout << vidas << "\n" << endl;
}

switch (vidas)
{
case 0:
cout << "\n\n\nFIN DEL JUEGO \n\n\n";
break;
case 10:
cout << "\n\nGANASTE!\n\n\nFIN DEL JUEGO\n\n";
break;
case 11:
cout << "\n\nGANASTE!\n\n\nFIN DEL JUEGO\n\n";
break;
}

}



cout << "\n\n\n PRESIONA R PARA VOLVER A JUGAR Y CUALQUIER OTRA TECLA PARA SALIR\n";
cin >> repet;
cout << "\n";
}

system("PAUSE");
return 0;

}


aun no tengo idea de a que te referias como eso de game loop XD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar