Frage zu einem Ballspiel...
-
Hi alle zusammen,
ich habe geplant ein kleines Ballspiel zu schreiben. Da ich noch nicht so lange programmiere, ist es nur ein kleines Spiel.
Ich hatte geplant in der Konsole eine Box auszugeben. Von oben fällt ein Ball gerade runter. Man muss versuchen den Ball mit dem Cursor aufzufangen ansonsten verliert man ein Leben. Wenn man den Ball 3mal nacheinander fängt, dann fällt der Ball von oben immer schneller runter.
Da der Ball immer eine andere Startposition hat, muss man den Cursor ja bewegen.
Wie kann ich es machen, dass er meine Eingabe sofort einliest und man nicht immer ENTER drücken muss?
Nun weiß ich aber nicht, wie man gleichzeitig den Bildschirm löschen , den Cursor bewegen und den Ball fallen lassen soll. Ich habe es erstmal mit ner Endlosschelife versucht, die alle 3 Funktionen nach einander aufruft. Aber das geht nicht, da der Rahmen dann so komisch aufblinkt. Zudem fällt der Cursor zu schnell runter. Gut das habe ich mit ner Sleep()- Funktion gelöst, ich weiß aber nicht, ob man das so machen sollte.Ich hoffe, dass ihr mir hier helfen könnt.
-
So könnte man das machen. Und dann am Contest teilnehmen.
Bye, TGGC (Zu viele Primitive hier.)
-
Gibts für die Konsole überhaupt ein Mousehandle? Naja ich würds mit SDL machen SDL ist einfach zu programmieren und gut für 2d sachen
-
Meinste wirklich?
@all other
Thx... habe das Porgramm fertig... habe mich aber über jede einzelne Antwort sehr gefreut.
-
habe doch noch immer ein kleines problem...
ich habe mir überlegt das Sleep() doch nicht so gut ist, da ja alles "eingefroren" wird und der benutzer dann keine eingabe mehr tätigen kann... ich habe mir überlegt das Sleep() irgendwie durch ein If zu ersetzen. das wollte ich mit time() realisieren, doch dann habe ich mir überlegt, dass der Ball von oben zu langsam runterfallen würde, da er jede sekunde 1 nach untenfällt und mir das noch zu langsam ist... ich wollte dann millisekunden benutzen... kann ich das dann module 1000 von time() machen? also so:
millisek = time(NULL) % 1000; ????ich hoffe, irh könnt mir wieder helfen...
-
die time-Funktion gibt dir nur sekunden zurück
aber es gibt ne Funktion, die gibt time_t zurück (weiß jetzt nicht, wie die heißt) und bei der kannst du auch millisekunden auslesen
-
@ maxi:
und wie soll ich dann die milisekunden auslesen? das ist der einzige knackpunkt in meinem programm, bei dem ich einfach nicht weiterkomme.
P.S. ich bräuchte dann auch noch den Namen der Fkt. Danke!
-
Ein Beispiel, damit müsstest du weiterkommen. Aber nimm anstatt time.h ctime
und schreib using namespace std; davor/* TIMES.C illustrates various time and date functions including: * time _ftime ctime asctime * localtime gmtime mktime _tzset * _strtime _strdate strftime * * Also the global variable: * _tzname */ #include <time.h> #include <stdio.h> #include <sys/types.h> #include <sys/timeb.h> #include <string.h> void main() { char tmpbuf[128], ampm[] = "AM"; time_t ltime; struct _timeb tstruct; struct tm *today, *gmt, xmas = { 0, 0, 12, 25, 11, 93 }; /* Set time zone from TZ environment variable. If TZ is not set, * the operating system is queried to obtain the default value * for the variable. */ _tzset(); /* Display operating system-style date and time. */ _strtime( tmpbuf ); printf( "OS time:\t\t\t\t%s\n", tmpbuf ); _strdate( tmpbuf ); printf( "OS date:\t\t\t\t%s\n", tmpbuf ); /* Get UNIX-style time and display as number and string. */ time( <ime ); printf( "Time in seconds since UTC 1/1/70:\t%ld\n", ltime ); printf( "UNIX time and date:\t\t\t%s", ctime( <ime ) ); /* Display UTC. */ gmt = gmtime( <ime ); printf( "Coordinated universal time:\t\t%s", asctime( gmt ) ); /* Convert to time structure and adjust for PM if necessary. */ today = localtime( <ime ); if( today->tm_hour > 12 ) { strcpy( ampm, "PM" ); today->tm_hour -= 12; } if( today->tm_hour == 0 ) /* Adjust if midnight hour. */ today->tm_hour = 12; /* Note how pointer addition is used to skip the first 11 * characters and printf is used to trim off terminating * characters. */ printf( "12-hour time:\t\t\t\t%.8s %s\n", asctime( today ) + 11, ampm ); /* Print additional time information. */ _ftime( &tstruct ); printf( "Plus milliseconds:\t\t\t%u\n", tstruct.millitm ); printf( "Zone difference in seconds from UTC:\t%u\n", tstruct.timezone ); printf( "Time zone name:\t\t\t\t%s\n", _tzname[0] ); printf( "Daylight savings:\t\t\t%s\n", tstruct.dstflag ? "YES" : "NO" ); /* Make time for noon on Christmas, 1993. */ if( mktime( &xmas ) != (time_t)-1 ) printf( "Christmas\t\t\t\t%s\n", asctime( &xmas ) ); /* Use time structure to build a customized time string. */ today = localtime( <ime ); /* Use strftime to build a customized time string. */ strftime( tmpbuf, 128, "Today is %A, day %d of %B in the year %Y.\n", today ); printf( tmpbuf ); }
-
In der Reihenfolge der Genauigkeit: GetTickCount, timeGetTime oder PerformanceCounter.
Bye, TGGC (Zu viele Primitive hier.)
-
warum nicht einfach clock() >_< Er will ja nicht das aktuelle Datum, sondern einfache eine zeitdifferenz.. Statt dem sleep also z.B.:
int oldTime = clock(); while(clock() - oldTime < 100) {;}
-
ist aber noch immer ein problem.... das U (auffänger) bewegt sich nun genauso abgehackt, wie das o(der ball). aber das U soll unten sich fließend bewegen und das o soll sich verzögert bewegen.... wie soll ich das realisieren?
-
ich weiß ja nicht wie dein programm aufgebaut ist, aber so könnte es z.b. gehn
int lastOMovementTime = -101; while(running) //deine spielschleife { if(clock() - lastOMovementTime > 100) { lastOMovementTime = clock(); moveO(); //O bewegen } moveU; //U bewegen }
-
danke!!!! der pseudocode hat mir auf die sprünge geholfen... ich wusste nämlich anfangs nicht, wie das gemeint war von dir...