Autor
|
Tema: Error en ejercicio de clase (Leído 3,003 veces)
|
foreground
Desconectado
Mensajes: 11
|
Buenos días otra vez! Resulta que tengo que hacer un juego para un ejercicio de clase de Programación I y tengo un problema que no logro resolver. El juego consiste en retirar fichas de 1 en 1 de 2 en 2 o de 3 en 3, hasta llegar a 0, el programa actual es tan solo un borrador ya que si le meto valores negativos me suma fichas entre otros errores, no obstante me preocupa el echo de que una vez que retiro todas las fichas en vez decirme quedan 0 fichas el programa me genera un espacio en blanco (quedan fichas) se me ralla y me dicen que quedan -3 o -2. El código en cuestión es: #include <stdio.h> int main(){ int fquitahombre,fquitamaquina,ftotales; char c; printf("Bienvenido al juego de las fichas.\n"); printf("Este juego consiste en ir retirando fichas, de un total de 17, el que retire la ultima ficha pierde.\n"); printf("En cada turno puedes retirar 1,2 o 3 fichas.\n"); printf("Empieza el juego:\n"); ftotales=17; while(ftotales>=0){ printf("Retira las fichas que desees:"); scanf("%d",&fquitahombre); ftotales=ftotales-fquitahombre; printf("Quedan %0.d fichas\n",ftotales); while(ftotales>0){ fquitamaquina=4-fquitahombre; printf("La maquina quita %.0d\n",fquitamaquina); break; } ftotales=ftotales-fquitamaquina; printf("Quedan %0.d fichas\n",ftotales); } printf("Has retirado la ultima ficha, por lo tanto, has perdido."); c=getchar(); c=getchar(); }
El error http://s2.subirimagenes.com/imagen/8056853sin-ttulo.png
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
He respetado en lo posible el "formato" de tu código, ya que yo lo hubiera hecho diferente. Pero bueno, tienes corregido lo de valores negativos y que el usuario no pueda entrar valores que no sean entre 1 y 3. Además no me gusta perder siempre, con lo que le he puesto una variante a la máquina:quita fichas de forma aleatoria, así puedo ganar yo. Puedes desactivar esa opción eliminando el rand y activando la otra opción:#include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int fquitahombre=0,fquitamaquina=0,ftotales=0; char c; srand(time(0)); printf("Bienvenido al juego de las fichas.\n"); printf("Este juego consiste en ir retirando fichas, de un total de 17, el que retire la ultima ficha pierde.\n"); printf("En cada turno puedes retirar 1,2 o 3 fichas.\n"); printf("Empieza el juego:\n"); ftotales=17; while(ftotales>0){ printf("Retira las fichas que desees entre 1 y 3:"); scanf("%d",&fquitahombre); while(fquitahombre > 3 || fquitahombre < 0){ printf("Te dije entre 1 y 3:"); scanf("%d",&fquitahombre); } ftotales=ftotales-fquitahombre; if (ftotales<=0) { printf("Quedan 0 fichas\n"); printf("Has retirado la ultima ficha, por lo tanto, has perdido."); break; } /*fquitamaquina=4-fquitahombre;*/ /*<==tu opcion para perder siempre*/ fquitamaquina=1+rand() % 3 ; /*mi opcion aleatorio, para poder ganar*/ ftotales=ftotales-fquitamaquina; if (ftotales<=0) { printf("Quedan 0 fichas\n"); printf("Has ganado."); break; } printf("La maquina quita %.0d\n",fquitamaquina); printf("Quedan %0.d fichas\n",ftotales); } c=getchar(); c=getchar(); return 0; }
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡buenas!
De hecho el que empieza deberia de perder siempre:
Pierded el que coge la ultima. (Hay 17 fichas) Gana el que coger la penultima. (Reducimos a 16 fichas) Entre una jugada y la.siguente siempre se pueden suma 4 fichas Si el segundo jugador conoce las reglas siempre cogera la 16° ficha y perdera el.que empieza.
sibquieres dar una oportunidad al que empieza añade una ficha, o aumenta a 4 el numero maximo de fichas que se puedan coger. Asi si el que empieza conoce el algoritmo para ganar podra hacerlo y sino, es mas que posible que pierda.
¡saludos!
|
|
« Última modificación: 14 Octubre 2012, 17:00 pm por do-while »
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
bemone
Desconectado
Mensajes: 74
|
En realidad se puede ganar sin que saque random pero depende de la cantidad de fichas que hay en total, si se puede sacar de 3 fichas hay que tratar de obtener la ventaja de ganar. Si queda 1, perdemos. Si quedan 5 tambien perdemos. Entonces es ciclico, hay una lista de valores con la que si caemos obtendremos la desventaja los cuales son: vector[0] = 1; vector = vector[i-1] + 4; 1 5 9 13 17 20 24 28 y asi susesivamente. Si el oponente cae en algunos de esos numeros de la desventaja siempre hay que tratar de descontar 4 fichas para que siga en ese vector de desventajas. Ponele que las fichas que quedan son 17 y le toca sacar a el. El saca 3 por lo que 17-3 = 14. Te toca tu turno y tendrias que sacar 1 para que el vuelva a caer en esa lista de desventaja. Entonces 14-1 = 13 y le vuelve a tocar su turno.
|
|
« Última modificación: 14 Octubre 2012, 17:16 pm por bemone »
|
En línea
|
Odio los tipos de variable de Windows.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Error en declaración de clase :s
Java
|
jclaurian
|
2
|
3,912
|
22 Marzo 2008, 18:57 pm
por jclaurian
|
|
|
Error con clase PHPMailer
PHP
|
Feedeex
|
2
|
7,087
|
3 Enero 2011, 15:11 pm
por AFelipeTrujillo
|
|
|
Duda con ejercicio de clase
Programación C/C++
|
foreground
|
6
|
3,656
|
1 Octubre 2012, 07:02 am
por Caster
|
|
|
Problema con ejercicio de separar interfaz de implementación de una clase
Programación C/C++
|
Mordecai
|
1
|
2,581
|
14 Septiembre 2013, 04:49 am
por erest0r
|
|
|
Ayuda ejercicio clase c++
Programación C/C++
|
LeoHom
|
4
|
3,415
|
6 Diciembre 2021, 19:25 pm
por Eternal Idol
|
|