Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Snake;
- uses
- crt;
- type
- SnakeCell = record
- xCoord: Integer;
- yCoord: Integer;
- end;
- label
- FalscheRichtung;
- const
- up = 1;
- down = 2;
- left = 3;
- right = 4;
- linien = 20; {Anzahl der Linien}
- reihen = 20; {Anzahl der Reihen}
- raum = 0;
- mauer = 1;
- punkt = 2;
- loeschen = -1;
- snakeKopf = 10;
- snakeRest = 11;
- unten = #80;
- oben = #72;
- return = #13;
- esc = #27;
- var
- i, j, h, t, k : integer;
- map: Array[1..25,1..80] of Integer;
- isRunning : boolean;
- snakeA: Array[1..200] of SnakeCell;
- direction: integer;
- punktX, punktY: integer;
- istPunkt: boolean;
- punkte: integer;
- key : char;
- zeichen:char;
- pos : integer;
- gesch:integer;
- procedure einleitung;
- var i,j:integer;
- begin
- textbackground(black);
- writeln;
- writeln('--------------------------------------------------------------------------------');
- writeln(' SNAKE POWERED BY ME' );
- writeln('--------------------------------------------------------------------------------');
- end;
- procedure laden;
- end;
- procedure Optionen;
- begin
- gesch:=150;
- window(1,7,80,25);
- pos:=7;
- write(' SPIELOPTIONEN');
- pos:=2;
- repeat
- clrscr;
- writeln;writeln;writeln;writeln;writeln;
- writeln(' SCHWIERIGKEIT');
- writeln;
- writeln(' LEICHT');
- writeln(' MITTEL');
- writeln(' SCHWIERIG');
- writeln;
- writeln(' SPIELFELD');
- writeln;
- writeln(' HINTERGRUNDFARBE');
- writeln;
- writeln(' BLAU');
- writeln(' GRUEN');
- writeln(' ROT');
- WRITELN(' SCHWARZ');
- writeln;
- writeln(' ZURÜCK');
- writeln;
- gotoxy(49,pos);write('*');
- repeat
- zeichen:=Readkey;
- until zeichen in [oben,unten,esc,return];
- case zeichen of
- oben: if (pos>4) or (pos>12) then begin pos:=pos-1;gotoxy(49,pos);write('*');end else begin pos:=pos-2;gotoxy(49,pos);write('*');end;
- unten: if (pos<6) or (pos<16) then begin pos:=pos+1;gotoxy(49,pos);write('*');end else begin pos:=pos+2;gotoxy(49,pos);write('*');end;
- end;
- until zeichen in [return,esc];
- begin
- case pos of
- 4 : begin gesch:=200; Optionen; end;
- 5 : begin gesch:=150; Optionen; end;
- 6 : begin gesch:=100; Optionen; end;
- 18: exit;
- end;
- end;
- end;
- procedure Spiel;
- var datei : file of THighscore;
- new,hlp: THighscore;
- HighScr: array [1..10] of THighscore;
- i,j : Integer;
- label FalscheRichtung;
- begin
- clrscr;
- window(1,1,80,25);
- textbackground(black);
- TextColor(green);
- istPunkt := false;
- randomize;
- punkte := 0;
- for i:=2 to 200 do
- begin
- snakeA[i].xCoord := -1;
- snakeA[i].yCoord := -1;
- end;
- snakeA[1].xCoord := reihen div 2;
- snakeA[1].yCoord := linien div 2;
- for i:=1 to linien do
- begin
- for j:=1 to reihen do
- begin
- if (i=1) or (j = 1) or (i = linien) or (j = reihen) then
- map[i][j]:=1
- else
- map[i][j] := 0;
- end;
- end;
- for i:=1 to linien do
- begin
- for j:=1 to reihen do
- begin
- if map[i][j] = mauer then
- write(chr(219))
- else
- if map[i][j] = raum then
- write(' ');
- end;
- writeln;
- end;
- readln;
- isRunning := true; {Prüft ob Spiel-Schleife vorhanden ist}
- gotoxy(snakeA[1].xCoord, snakeA[1].yCoord);
- write (chr(157));
- repeat {Spiel-Schleife}
- FalscheRichtung:
- if istPunkt = false then
- begin
- punktX := random(reihen-2) + 2;
- punktY := random(linien-2) + 2;
- istPunkt := true;
- gotoxy(punktX, punktY);
- write ('@');
- end;
- if Keypressed then
- begin
- key := readkey;
- case key of
- #75 : begin if direction = right then goto FalscheRichtung; direction := left; end;
- #72 : begin if direction = down then goto FalscheRichtung; direction := up; end;
- #77 : begin if direction = left then goto FalscheRichtung; direction := right; end;
- #80 : begin if direction = up then goto FalscheRichtung; direction := down; end;
- #27 : break;
- end;
- end;
- gotoxy(snakeA[1].xCoord, snakeA[1].yCoord); write(' ');
- for t:=2 to 200 do
- begin
- if snakeA[t].xCoord <> -1 then
- begin
- gotoxy(snakeA[t].xCoord, snakeA[t].yCoord);
- write(' ');
- end
- else
- break;
- end;
- for j:=200 downto 2 do
- begin
- if snakeA[j].xCoord <> - 1 then
- begin
- snakeA[j].xCoord := snakeA[j-1].xCoord;
- snakeA[j].yCoord := snakeA[j-1].yCoord;
- end;
- end;
- case direction of
- up : snakeA[1].yCoord := snakeA[1].yCoord - 1;
- down : snakeA[1].yCoord := snakeA[1].yCoord + 1;
- left : snakeA[1].xCoord := snakeA[1].xCoord - 1;
- right : snakeA[1].xCoord := snakeA[1].xCoord + 1;
- end;
- gotoxy(snakeA[1].xCoord, snakeA[1].yCoord); write(chr(157));
- for i:=2 to 200 do
- begin
- if snakeA[i].xCoord <> -1 then
- begin
- gotoxy(snakeA[i].xCoord,snakeA[i].yCoord);
- write('X')
- end
- else
- break;
- end;
- for k:=2 to 200 do
- begin
- if snakeA[k].xCoord = -1 then break;
- if (snakeA[k].xCoord = snakeA[1].xCoord) and (snakeA[k].yCoord = snakeA[1].yCoord) then isRunning := false;
- end;
- if (snakeA[1].yCoord = punktY) and (snakeA[1].xCoord = punktX) then
- begin
- istPunkt := false;
- punkte := punkte+1;
- for h:=2 to 200 do
- begin
- if snakeA[h].xCoord = -1 then
- begin
- snakeA[h].xCoord := snakeA[h-1].xCoord; snakeA[h].yCoord :=snakeA[h-1].yCoord;break;
- end;
- end;
- end;
- delay(gesch); {Geschwindigkeit}
- gotoxy(1, linien+1);
- writeln;
- write('Punktzahl: ',punkte);
- if (snakeA[1].xCoord<=1) or (snakeA[1].yCoord<=1) or (snakeA[1].xCoord >= reihen) or (snakeA[1].yCoord>=linien) then
- isRunning := false;
- until isRunning = false;
- readln;
- end;
- procedure menu;
- begin
- window(1,7,80,25); textbackground(blue);textcolor(white);clrscr;
- pos:=7;
- repeat
- clrscr;
- writeln;writeln;writeln;writeln;writeln;writeln;
- writeln(' SPIEL STARTEN');
- writeln;
- writeln(' OPTIONEN');
- writeln;
- writeln(' HIGHSCORE');
- writeln;
- writeln(' BEENDEN');
- writeln;
- gotoxy(49,pos);write('*');
- repeat
- zeichen:=Readkey;
- until zeichen in [oben,unten,esc,return];
- case zeichen of
- oben: if pos>7 then begin pos:=pos-2;gotoxy(49,pos);write('*');end;
- unten: if pos<13 then begin pos:=pos+2;gotoxy(49,pos);write('*');end;
- end;
- until zeichen in [return,esc];
- begin
- case pos of
- 7 : Spiel;
- 9 : Optionen;
- //11: Highscore;
- 13: exit;
- end;
- end;
- end;
- begin
- textbackground(green);
- einleitung;
- //laden;
- Menu;
- //Highscore;
- end.
Advertisement
Add Comment
Please, Sign In to add comment