Hallo,
Ich bin gerade dabei ein "Spiel" zu coden. Der Spieler hat ein Raumschiff (als Rechteck dargestellt) und kann ballern (ein Punkt der von links nach rechts fährt). Jo. Das wars erstmal.
Erklärung zum Code: Das Raumschiff wird erstellt und befindet sich auf einem eigenen GraphicContext. Danach wird eine Schleife aufgerufen, die mit Escape beendet wird. Wenn man auf die Leertaste drückt, wird die Funktion Schuss() aufgerufen. (Die Funktion Schuss() läuft auf einer extra Ebene ab.)
Damit ergibt sich auch schon mein Problem. Das Programm kehrt erst wieder an den Anfang der Schleife zurück, wenn die Funktion Schuss() beendet wird. Ich will aber, mit der Leertaste sozusagen eine Instanz aufrufen, neben der parallel andere Instanzen laufen können, so dass der, der am schnellsten auf der Leertaste herumhackt, am meisten Schüsse abfeuern kann.
Wie realisiere ich das?
Weiterführend ergibt sich dann das Problem, dass wenn ich einen Gegner einführe, der sich immer hin und her bewegt, sich so nicht realisieren lässt, da ja die Funktion für den Gegner eine Endlosschleife darstellte, die nie verlassen wird und das Programm damit nichtmehr auf Interaktionen reagiert.
Ich bin gerade dabei ein "Spiel" zu coden. Der Spieler hat ein Raumschiff (als Rechteck dargestellt) und kann ballern (ein Punkt der von links nach rechts fährt). Jo. Das wars erstmal.
Erklärung zum Code: Das Raumschiff wird erstellt und befindet sich auf einem eigenen GraphicContext. Danach wird eine Schleife aufgerufen, die mit Escape beendet wird. Wenn man auf die Leertaste drückt, wird die Funktion Schuss() aufgerufen. (Die Funktion Schuss() läuft auf einer extra Ebene ab.)
Damit ergibt sich auch schon mein Problem. Das Programm kehrt erst wieder an den Anfang der Schleife zurück, wenn die Funktion Schuss() beendet wird. Ich will aber, mit der Leertaste sozusagen eine Instanz aufrufen, neben der parallel andere Instanzen laufen können, so dass der, der am schnellsten auf der Leertaste herumhackt, am meisten Schüsse abfeuern kann.
Wie realisiere ich das?
Code:
#include <stdio.h>
#include <vga.h>
#include <vgagl.h>
#include <unistd.h>
#include <vgakeyboard.h>
#define SCANCODE_ESCAPE 1
#define SCANCODE_SPACE 57
int x_box = 0;
int y_box = 90;
int box_breite = 20;
void schuss();
int main () {
vga_init();
vga_setmode(G320x200x256);
keyboard_init();
gl_setcontextvga(G320x200x256);
GraphicsContext physicalscreen;
gl_getcontext(&physicalscreen);
gl_fillbox(x_box, y_box, box_breite, 20, 5);
gl_copyscreen(&physicalscreen);
while (keyboard_keypressed (SCANCODE_ESCAPE) == 0) {
keyboard_update();
if (keyboard_keypressed (SCANCODE_SPACE) == 1) {
schuss();}
};
vga_setmode(TEXT);
return 0;
}
void schuss() {
GraphicsContext shoot;
gl_getcontext(&shoot);
for (int i=box_breite+1; i< 320-box_breite; i++)
{
gl_setpixel(i, 100, 4);
usleep(10000);
gl_setpixel(i-1, 100, 0);
}
vga_waitretrace();
gl_copyscreen(&shoot);
}
Weiterführend ergibt sich dann das Problem, dass wenn ich einen Gegner einführe, der sich immer hin und her bewegt, sich so nicht realisieren lässt, da ja die Funktion für den Gegner eine Endlosschleife darstellte, die nie verlassen wird und das Programm damit nichtmehr auf Interaktionen reagiert.