Juego en lenguaje C, solo me falta una libreria o algo para acabarlo

Iniciado por josereci, 4 Abril 2012, 19:11 PM

0 Miembros y 1 Visitante están viendo este tema.

josereci

Hola, como estan colegas de la programación...Bueno requiero de su ayuda en un juego que al parecer es muy sencillo. Es una lluvia de letras (una sola), ellas van callendo de la pantalla hasta llegar al final y es trabajo del usuario ingresar la letra que cae para que se vuelva a iniciar el juego cada vez más rápido. Lo tengo todo casi ello, el unico problema es el siguiente:

¿Como hago para que pase la siguiente secuencia...imprime letra, espera 2 segundos, si el usuario no ingresa nada -> continua el ciclo, si el usuario ingresa algo entonces debe comparar si la letra es igual a la que da aleatoriamente el programa (esto es lo de menos).
Lo más importante es la parada, esos 2 segundos de espera...Gracias


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#include <windows.h>
#include <conio.h>

char aleatorio (void);


int main(void)
{

char n, i, k;
int band=0, p, veces=0;

do
{

     n=aleatorio();

     for (i=0;i<3;i++)
    {
         if (band>=1)
         {
          for(p=0;p<band;p++)
               printf("\n");
          }

      printf("%c %i \n", n, time());
      Sleep(2000);

       system("cls");
       band++;

     }
    band=0;
    veces++;

}while(veces<3);

system("PAUSE");
return 0;

}


char aleatorio (void){
char c;
srand(time(0));
c=rand()%26+97;
return c;
}

Runex

Si no te importa te adjunto el mismo programa en Python, ahora me pondré a ver tu petición e intentaré solucionartela :).

Código (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time,random,os
class juego:

def bucle(self,tiempo):
self.diccionario = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p",
"q","r","s","t","u","v","w","x","y","z"]
self.tiempo = tiempo
self.repeticiones = 0
self.vidas = 3
self.indice = random.randint(0,25)
while self.repeticiones < 10:
try:
time.sleep(self.tiempo)
except:
os.system("clear")
print "Juego Finalizado"
exit(0)
raw_input()
print self.diccionario[self.indice]
self.repeticiones += 1
os.system("clear")
self.insertar()
def insertar(self):
os.system("clear")
while self.vidas > 0:
print "Introduce la letra:"
self.letra = raw_input("Letra>")
if self.letra == self.diccionario[self.indice]:
print "Letra correcta, ahora mas rapido :)"
raw_input()
os.system("clear")
if self.tiempo == 0.2 or self.tiempo == 0.3:
self.tiempo = tiempo = self.tiempo - 0.1
self.bucle(tiempo)
else:
self.tiempo = tiempo = self.tiempo - 0.030
self.bucle(tiempo)
else:
print "Letra erronea, otro intento"
self.vidas -= 1
                                if self.vidas == 0:
                                    print "Juego Terminado :)"
                                    raw_input()
                                    exit(0)

if __name__ == '__main__':
tiempo = 0.3
instancia = juego()
instancia.bucle(tiempo)


EDITO: Lo siento, he intentado mirarlo pero no me había fijado que usas librerias como windows.h, conio.h etc y estoy con Linux por tanto no puedo.

De todas formas, lo que tu quieres hacer son 2 procesos o threads al mismo tiempo (Programación Paralela), así que mira esto, te puede servir:

http://www.youtube.com/watch?v=X9qFDSo6crA
"No renunciaría al bambú.
Nunca renuciaría a ti.
No te compares con otros" "El me dijo:
El bambú tenía un propósito diferente al del
helecho, sin embargo eran necesarios y
hacían del bosque un lugar hermoso".

josereci

Interesante tu codigo en python, de echo le metiste vidas y todo, un añadido!, pero pues mirando bien el problema del tiempo veo que podes hacer una especie de intervalo para poder meter la letra...eso es lo que quiero hacer pero en C. Se que debe ser alguna libreria absurda o un simple codigo que al ingresar la letra (ojo sin undir enter) haga la comparación y en cualquier momento...creo que antes del sleep, de cierto modo creo que el sleep estaria estorbando, en fin, todos mis colegas de la clase andamos con esta misma duda...

Gracias amigo x ayudarme! ;-)

Runex

Cita de: josereci en  4 Abril 2012, 23:25 PM
Interesante tu codigo en python, de echo le metiste vidas y todo, un añadido!, pero pues mirando bien el problema del tiempo veo que podes hacer una especie de intervalo para poder meter la letra...eso es lo que quiero hacer pero en C. Se que debe ser alguna libreria absurda o un simple codigo que al ingresar la letra (ojo sin undir enter) haga la comparación y en cualquier momento...creo que antes del sleep, de cierto modo creo que el sleep estaria estorbando, en fin, todos mis colegas de la clase andamos con esta misma duda...

Gracias amigo x ayudarme! ;-)

Librerias en C creo que hay una tal Boost o algo parecido pero te aconsejo lo que te he dicho antes, los threads que te permiten implementar multitarea :).

Un saludo josereci :)

EDITO: Más o menos lo que quieres es algo así no?, Te lo escribo en diferentes funciones para no liarte con clases y tonterias :)

Código (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-


from threading import Timer # Modulo API multitarea
import random,os
def Goodbye(): # Funcion Contador
os.system("clear")
print "No ha introducido nada en 5s retomando el juego"
juego() # LLama a la funcion donde se ejecuta el "juego"
def juego():
diccionario = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p",
"q","r","s","t","u","v","w","x","y","z"]
contador = 0
aleatorio = random.randint(0,25)
while contador < 10:
print diccionario[aleatorio]
contador += 1
print "\n Inserte la letra"
letra = raw_input("Letra>")
if letra == diccionario[aleatorio]:
print "Correcto"
raw_input()
exit(0)
else:
print "incorrecto"
raw_input()
exit(0)
myTimer = Timer(5,Goodbye)
myTimer.start()
juego()


Pruébalo y si es así aseguramelo y te lo escribo parecido en C :)
"No renunciaría al bambú.
Nunca renuciaría a ti.
No te compares con otros" "El me dijo:
El bambú tenía un propósito diferente al del
helecho, sin embargo eran necesarios y
hacían del bosque un lugar hermoso".