elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Ayuda juego Mastermind en C++ en: 10 Diciembre 2017, 19:24 pm
Este es un codigo que hice hace varios años en Pascal, se puede pasar a C muy fácil.

"Regulares" es a lo que tu llamas heridos y "buenos" es muertos.
ObtenerNota haya dichos valores en el codigo, en este caso tiene un largo de seis letras que pueden ir de la A a la H

Código
  1. PROCEDURE ObtenerNota(propuesta, codigo: TipoCodigo; VAR buenos, regulares: RangoBR);

Código
  1. void ObtenerNota(TipoCodigo propuesta, TipoCodigo codigo, RangoBR &buenos, RangoBR &regulares) {

Código
  1. PROGRAM MasterMind (input, output);
  2. CONST
  3. MAXIMO_INTENTOS = 20;
  4. LARGO_CODIGO = 6;
  5. PRIMERA_LETRA = 'A';
  6. ULTIMA_LETRA = 'H';
  7. TYPE
  8. RangoCodigo = 1..LARGO_CODIGO;
  9. TipoCodigo = ARRAY [RangoCodigo] OF Char;
  10.  
  11. RangoBR = 0..LARGO_CODIGO;
  12. TRegistroNota = RECORD
  13. codigo: TipoCodigo;
  14. buenos,
  15. regulares: RangoBR
  16. END;
  17.  
  18.    THistoria = RECORD
  19. info: ARRAY [1..MAXIMO_INTENTOS] OF TRegistroNota;
  20. tope: 0..MAXIMO_INTENTOS
  21. END;
  22.  
  23. ListaNotas = ^CeldaNota;
  24. CeldaNota = RECORD
  25. codigo: TipoCodigo;
  26. buenos,
  27. regulares: RangoBR;
  28. turno: 1..MAXIMO_INTENTOS;
  29. siguiente: ListaNotas
  30. END;
  31. VAR
  32. secreto, codigo: TipoCodigo;
  33. historia: THistoria;
  34. buenos, regulares: RangoBR;
  35. i, intentos: Integer;
  36. exito, fracaso: Boolean;
  37. lista: ListaNotas;
  38.  
  39. FUNCTION EsValido(codigo: TipoCodigo): Boolean;
  40. VAR
  41. i: Integer;
  42. BEGIN
  43. i := 1;
  44. WHILE (i <= LARGO_CODIGO) AND (codigo[i] >= PRIMERA_LETRA) AND (codigo[i] <= ULTIMA_LETRA) DO
  45. i := i + 1;
  46. EsValido :=  i > LARGO_CODIGO
  47. END;
  48.  
  49. PROCEDURE ObtenerNota(propuesta, codigo: TipoCodigo; VAR buenos, regulares: RangoBR);
  50. VAR
  51. i, j, max: Integer;
  52. propuestacopia: TipoCodigo;
  53. BEGIN
  54. buenos := 0;
  55. FOR i := 1 TO LARGO_CODIGO DO
  56. BEGIN
  57. IF propuesta[i] = codigo[i] THEN
  58. buenos := buenos + 1;
  59. propuestacopia[i] := propuesta[i]
  60. END;
  61. max := 0;
  62. FOR i := 1 TO LARGO_CODIGO DO
  63. BEGIN
  64. j := 1;
  65. WHILE (j <= LARGO_CODIGO) AND (codigo[i] <> propuestacopia[j]) DO
  66. j := j + 1;
  67. IF j <= LARGO_CODIGO THEN
  68. BEGIN
  69. max := max + 1;
  70. propuestacopia[j] := ' '
  71. END
  72. END;
  73. regulares := max - buenos
  74. END;
  75.  
  76. PROCEDURE IniciarHistoria(VAR historia: THistoria);
  77. BEGIN
  78. WITH historia DO
  79. tope := 0
  80. END;
  81.  
  82. PROCEDURE GuardarNota(VAR historia: THistoria;
  83. codigo: TipoCodigo;
  84. buenos, regulares: RangoBR);
  85. VAR
  86. i: Integer;
  87. BEGIN
  88. WITH historia DO
  89. BEGIN
  90. tope := tope + 1;
  91. FOR i := 1 TO LARGO_CODIGO DO
  92. info[tope].codigo[i] := codigo[i];
  93. info[tope].buenos := buenos;
  94. info[tope].regulares := regulares
  95. END
  96. END;
  97.  
  98. FUNCTION ListaOrdenada(historia: THistoria): ListaNotas;
  99. VAR
  100. i, j: Integer;
  101. p, actual, anterior, lista: ListaNotas;
  102. BEGIN
  103. lista := NIL;
  104. FOR i := 1 TO historia.tope DO
  105. BEGIN
  106. new(p);
  107. FOR j := 1 TO LARGO_CODIGO DO
  108. p^.codigo[j] := historia.info[i].codigo[j];
  109. p^.buenos := historia.info[i].buenos;
  110. p^.regulares := historia.info[i].regulares;
  111. p^.turno := i;
  112.  
  113. actual := lista;
  114. anterior := lista;
  115. WHILE (actual <> NIL) AND (10 * actual^.buenos + actual^.regulares <= 10 * p^.buenos + p^.regulares) DO
  116. BEGIN
  117. anterior := actual;
  118. actual := actual^.siguiente
  119. END;
  120. IF (anterior = NIL) OR (anterior = actual) THEN
  121. BEGIN
  122. p^.siguiente := anterior;
  123. lista := p
  124. END
  125. ELSE
  126. BEGIN
  127. p^.siguiente := actual;
  128. anterior^.siguiente := p
  129. END
  130. END;
  131. ListaOrdenada := lista
  132. END;
  133.  
  134. PROCEDURE GenerarCodigo(VAR codigo: TipoCodigo);
  135. VAR
  136. i: Integer;
  137. ordprim, ordult: Integer;
  138. BEGIN
  139. ordprim := ord(PRIMERA_LETRA);
  140. ordult  := ord(ULTIMA_LETRA);
  141. FOR i := 1 TO LARGO_CODIGO DO
  142. codigo[i] := chr(ordprim + random(ordult - ordprim + 1))
  143. END;
  144.  
  145. PROCEDURE LeerCodigo(VAR codigo: TipoCodigo);
  146. VAR
  147. i: Integer;
  148. BEGIN
  149. FOR i := 1 TO LARGO_CODIGO DO
  150. Read(codigo[i]);
  151. ReadLn
  152. END;
  153.  
  154. (* ------ Programa Principal ------ *)
  155. BEGIN
  156. Randomize;
  157. IniciarHistoria(historia);
  158. GenerarCodigo(secreto);
  159. intentos := 0;
  160. exito := false;
  161. fracaso := false;
  162. WriteLn('He pensado un codigo, intenta adivinarlo.');
  163. WriteLn('*Pista: tiene ', LARGO_CODIGO, ' letras y estas estan entre la ', PRIMERA_LETRA, ' y la ', ULTIMA_LETRA);
  164. WriteLn('Las letras pueden repetirse o no aparecer en mi codigo, y solo tienes ', MAXIMO_INTENTOS, ' intentos.');
  165. WriteLn;
  166. REPEAT
  167. LeerCodigo(codigo);
  168. WHILE NOT EsValido(codigo) DO
  169. BEGIN
  170. WriteLn('El codigo no es valido, intentalo de nuevo.');
  171. LeerCodigo(codigo)
  172. END;
  173. intentos := intentos + 1;
  174. ObtenerNota(codigo, secreto, buenos, regulares);
  175. IF buenos = LARGO_CODIGO THEN
  176. exito := true
  177. ELSE IF intentos = MAXIMO_INTENTOS THEN
  178. fracaso := true
  179. ELSE
  180. BEGIN
  181. Write('B: ', buenos, '   R: ', regulares);
  182. WriteLn('                      Te quedan ', MAXIMO_INTENTOS - intentos, ' intentos')
  183. END;
  184. GuardarNota(historia, codigo, buenos, regulares)
  185. UNTIL exito OR fracaso;
  186. WriteLn;
  187. WriteLn;
  188. IF exito THEN
  189. WriteLn('***** FELICIDADES, has ganado. *****')
  190. ELSE
  191. BEGIN
  192. WriteLn('--- Demasiados intentos, perdiste. ---');
  193. Write  ('    El codigo secreto era: ');
  194. FOR i := 1 TO LARGO_CODIGO DO
  195. Write(secreto[i])
  196. END;
  197. WriteLn;
  198. WriteLn;
  199. lista := ListaOrdenada(historia);
  200. WHILE lista <> NIL DO
  201. BEGIN
  202. FOR i := 1 TO LARGO_CODIGO DO
  203. Write(lista^.codigo[i]);
  204. Write(' -->  Bs = ', lista^.buenos, ',  Rs = ', lista^.regulares, ' (Turno: ', lista^.turno, ')');
  205. WriteLn;
  206. lista := lista^.siguiente
  207. END;
  208. ReadLn
  209. END.

Me da error al compilar; me da el error de too many decimals on point en la linea 8
2  Programación / Programación C/C++ / Ayuda juego Mastermind en C++ en: 10 Diciembre 2017, 17:13 pm
Buenas, mi compañero y yo hemos empezado este año en TIC y nuestro primer trabajo es programar un juego sencillo, nada del otro mundo y que tenemos que entregar. Sí, somos muy novatos en la programación y apenas hace 1 mes que empezamos y necesitamos acabar el juego.

Nuestra idea es crear un mastermind, con diferentes dificultades desde el modo clásico (4 digitos) hasta añadirles mas niveles pero no damos con la tecla a la hora de introducir el código y el programa revise si en los números hay heridos, muertos etc.


#include <iostream>
#include <windows.h>
#include <sstream>
#include <string>
using namespace std;
int a,b,c,d,N;
int q,w,e,r;

void clasicresp(){
   N=N-1;
   cout<<"Intenta adivinar el codigo. Quedan" <<N<<"intentos" <<endl;
   cin>>q;
   cin>>w;
   cin>>e;
   cin>>r;
   
   if(a=q){
      cout<<"Excelente, todos los números son correctos";
         }
         else{
         clasicresp();   
         }
}

void cla(){
   N=12;
   cout<<"Introduce el codigo"<<endl;
   cin>>a;
   cin>>b;
   cin>>c;
   cin>>d;
   system("cls");
   clasicresp();
}


   
   
   



void jugar(){
        int d;
        system("cls");
      cout<<"****SELECCIONA EL NIVEL DE DIFICULTAD*****"<<endl;
      cout<<""<<endl;
      cout<<"[1] NOOB"<<endl;
      cout<<"[2] CLASICO"<<endl;
       cout<<"[3] DIFICIL"<<endl;
      cout<<"[4] HARDCORE"<<endl;
      cin>> d;
      
      switch(d){
      case 1:
      break;
      case 2: cla();
      break;
      case 3:
      break;
      case 4:
      break;
      default:
      cout<<"Valor no valido"<<endl;
      Sleep(1500);
      system("cls");
      jugar();
   }
      
      
}


void menu(){
   int n;
   cout<<"=============================="<<endl;
   cout<<"Bienvenido a Inspector Numbers"<<endl;
   cout<<"=============================="<<endl;
   cout<<""<<endl;
   cout<<"[1] Jugar"<<endl;
   cout<<"[2] Ayuda"<<endl;
   cin>> n;
   switch(n){
      case 1: jugar();
      break;
      case 2: system("cls");
               cout<<"NO PIERDAS ;)"<<endl;
      break;
      default:
      cout<<"Valor no valido"<<endl;
      Sleep(1500);
      system("cls");
      menu();
   }
   

}

int main(){
menu();
return 0;
}


Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines