Bewegte Straße
-
Hallo,
ich will ein DOS Programm schreiben, wo man eine bewegte Straße sieht.
Es sind aber noch einige Fehler im Programm.
1. Ich bin zu dumm das zu programmieren
2. Wenn ich die Streifen mit bar zeichne, bleiben diese auf der Straße und werden von den bewegten Streifen überlagert. Wenn ich clearviewport dazuschreibe, sind die festen Streifen weg, aber auch die Wiese an der Seite ist weg.
3. Die Reihe der Streifen bewegt sich nach unten aus dem Bildschirm raus, und erst wenn alle Streifen draußen sind, fangen sie oben wieder an. Sie sollen aber sofort nachdem sie aus dem Bildschirm laufen oben wieder reinkommen.
Am besten ihr guckt euch das Programm mal an, dann ist es vielleicht besser zu verstehen.#include <graphics.h> /* Wird fuer Grafik benoetigt */ #include <stdio.h> #include <stdlib.h> #include <dos.h> #include <conio.h> #include <ctype.h> #include <string.h> #include <ctype.h> #define GRAFIKDRIVER "C:\\TC\\BGI" int errorcode, graphdriver, graphmode; int max_x, max_y; /*****************************************************************/ /* GRAFIKKARTEN-INITIALISIERUNG */ /*****************************************************************/ void graphinit(void) { max_y= 350; graphdriver= DETECT; /* Automatisches Erkennen des Treibers */ initgraph (&graphdriver, &graphmode, GRAFIKDRIVER); /* Graphikinitialisrg.*/ errorcode= graphresult(); /* Abfrage auf Fehler beim Initialisieren */ if (errorcode != grOk) /* Ist Grafikfehler aufgetreten? */ { printf("\n Grafik-Fehler: %s\n", grapherrormsg(errorcode)); exit(2); } /* Grafikfehlerausgang */ if (!((graphdriver == EGA) || (graphdriver == HERCMONO) || (graphdriver == VGA))) { /* Grafik-Art bzw. Treiber geht nicht */ putch('\n'); printf("\n Grafik-Art bzw. -Treiber nicht geeignet !\n"); exit(2); } /* Grafik-Art geht nicht */ switch (graphdriver) { /* Grafikart einstellen */ case EGA: setgraphmode(EGAHI); /* EGA-Graphikkarte */ break; case HERCMONO: /* Hercules-Grafik war eine */ setgraphmode(HERCMONOHI); /* S/W-Grafik mit 720 x 340 */ break; /* Pixeln, wird nicht behandelt */ case VGA: setgraphmode(VGAMED); /* VGA-Grafikkarte */ break; } /* CASE */ errorcode= graphresult(); /* Fehler aufgetreten? */ if (errorcode == -10) { restorecrtmode(); /* bei Fehler: Textmodus an */ printf(" Grafikmodus nicht definiert !\n"); exit(2); } if (((graphdriver==EGA) || (graphdriver==VGA))) { /* VGA oder EGA, max. x-Wert = 640 : */ /* VGA und EGA werden im folgenden GLEICH behandelt, */ setbkcolor(LIGHTGRAY); /* beide haben 640*350 Pixel, 16 Farben und 2 Seiten */ max_x= 639; /* Hercules-Graphik hatte max_x= 719 */ } /* VGA oder EGA , max x-Wert 640 */ setlinestyle (SOLID_LINE, 1, NORM_WIDTH); /* Linienart + -dicke einstellen */ setfillstyle (EMPTY_FILL, 0); /* Kein ausfuellen bei Mustern */ cleardevice(); /* Geraet ruecksetzen */ } /* graphinit */ void strasse () { setcolor(RED); setfillstyle(SOLID_FILL, RED); bar(max_x/2-10,200,max_x/2+10,220); setcolor(BLACK); setfillstyle(SOLID_FILL, BLACK); outtextxy(10,10, "FerrariRevolution.com"); } /* strasse */ void test(void) { setcolor(GREEN); setfillstyle(SOLID_FILL, GREEN); bar(0, 0, max_x/2-100, 350); /* gruener Hintergrund */ setcolor(GREEN); setfillstyle(SOLID_FILL, GREEN); bar(max_x/2+100, 0, 640, 350); /* gruener Hintergrund */ setviewport(max_x/2-5,0,max_x/2+5,350,1); int x1= max_x/2-5, x2= max_x/2+5, y1=0, y2=y1+40; int size, x, y, step; void *rechteck; setcolor(WHITE); setfillstyle(SOLID_FILL, WHITE); while(y1<max_y) { bar(x1,y1,x2,y2); y1= y1+80; y2= y1+40; } size = imagesize(x1,0,x2,350); rechteck = malloc( size ); getimage(x1,0,x2,350, rechteck); putimage(x1, 0, rechteck, NOT_PUT); clearviewport(); x= max_x/2-5; y= 10; step = 10; /* Beweget Rechteck auf dem Bildschirm */ while ( !kbhit() ) { /* solange keine Taste gedrueckt wurde */ putimage(x, y, rechteck, XOR_PUT); /* Zeichne Bild mit Rechteck */ delay(60); /* kleine Pause */ putimage(x, y, rechteck, XOR_PUT); /* Loesche Bild mit Rechteck */ y = y + step; if (y > 350) y= 0; } free( rechteck ); /* Speicherplatz fuer Rechteck freigeben */ } void main(void) { clrscr(); printf("\n\n FR-Racing, Version 0.11\n"); printf("\n weiter --> Taste\n"); getchar(); graphinit(); strasse(); test (); getchar(); closegraph(); }