home *** CD-ROM | disk | FTP | other *** search
- PROGRAM Beispiel_1; (* Einlesen der Sprites zur Laufzeit *)
- (* zur Laufzeit des Programms. *)
-
- uses crt,dos,graph;
-
- VAR gd,gm,x,y,i : integer;
- s1,s2,s3,s4 : word; (* Größe der Sprites *)
- p1,p2,p3,p4 : pointer; (* Pointer-Variablen für die Sprites *)
-
- CONST pos1 : Array [1..4] of pointtype =
- ((x:20; y:237),(x:40; y:237),(x:40; y:180),(x:20; y:185));
- (* Die Koordinaten des "Tors" *)
-
- PROCEDURE Load;
- VAR f : file;
- BEGIN
- assign (f,'bild1.SPR'); (* Dateiname zuweisen *)
- reset (f,1); (* Datei öffnen *)
- s1 := filesize (f); (* Dateigröße feststellen *)
- getmem (p1,s1); (* entsprechend Speicher reservieren *)
- blockread (f,p1^,s1); (* Sprite in die Pointer-Variable einlesen *)
- close (f); (* Datei wieder schließen *)
- (* Achtung: Hier ist keine Fehlerabfang- *)
- (* Routine eingebaut. *)
-
- assign (f,'bild2.SPR'); (* Das gleiche noch dreimal... *)
- reset (f,1);
- s2 := filesize (f);
- getmem (p2,s2);
- blockread (f,p2^,s2);
- close (f);
- assign (f,'bild3.SPR');
- reset (f,1);
- s3 := filesize (f);
- getmem (p3,s3);
- blockread (f,p3^,s3);
- close (f);
- assign (f,'ball.SPR');
- reset (f,1);
- s4 := filesize (f);
- getmem (p4,s4);
- blockread (f,p4^,s4);
- close (f);
- END;
-
- BEGIN
- gd := detect;
- initgraph (gd,gm,getenv('bgipfad'));
- (* statt gentenv... muß hier der Pfad zu dem Verzeichnis stehen, in dem *)
- (* sich Ihre BGI-Dateien befinden. Oder Sie lösen das so wie ich; *)
- (* ich habe den Pfad zu meinen BGI- und CHR-Dateien in einer Environment- *)
- (* Variablen mit Namen BGIPFAD gesetzt (das bedeutet: in die Autoexec.bat *)
- (* Datei kommt der Befehl "set bgipfad=C:\PASCAL\BGI", wobei natürlich *)
- (* das richtige Verzeichnis angegeben werden muß). Diese Variable kann *)
- (* man dann bequem mit Getenv('bgipfad') im Programm abfragen. *)
- (* Dies geht allerdings erst ab Turbo Pascal 5.0... *)
- clearviewport;
- Load; (* Sprites laden *)
- line (0,237,getmaxx,237); (* ein bißchen Verzierung... *)
- setfillstyle (8,white);
- fillpoly (4,pos1);
- settextjustify (centertext,centertext);
- outtextxy (getmaxx div 2,50,'Beispiel 1 : Sprites zur Laufzeit laden');
- x := 600; y := 200;
- putimage (260,228,p4^,xorput); (* Ball ausgeben *)
-
- For i := 1 to 21 do (* Der Spieler nimmt Anlauf... *)
- BEGIN
- putimage (x,y,p1^,xorput); (* erst Bild ausgeben... *)
- delay (100-2*i); (* warten... *)
- putimage (x,y,p1^,xorput); (* und wieder löschen. *)
- dec (x,4);
- putimage (x,y,p2^,xorput); (* und jetzt dasselbe nochmal *)
- delay (100-2*i);
- putimage (x,y,p2^,xorput);
- dec (x,4);
- putimage (x,y,p1^,xorput);
- delay (100-2*i);
- putimage (x,y,p1^,xorput);
- dec (x,4);
- putimage (x,y,p3^,xorput);
- delay (100-2*i);
- putimage (x,y,p3^,xorput);
- dec (x,4);
- END;
- putimage (x,y,p3^,xorput);
- y := 228;
- putimage (260,228,p4^,xorput); (* Ball löschen *)
- While x > 30 do
- BEGIN
- putimage (x,y,p4^,xorput); (* und jetzt bewegen *)
- delay ((300 - x) div 4);
- putimage (x,y,p4^,xorput);
- dec(x,4);
- END;
- outtextxy (getmaxx div 2,280,'Bitte Taste drücken...');
- Repeat Until keypressed;
- freemem (p1,s1); freemem (p2,s2); (* Speicher wieder freigeben, *)
- freemem (p3,s3); freemem (p4,s4); (* nur der Vollständigkeit *)
- closegraph; (* halber . . . *)
- END.
-
-