Guest User

Problem

a guest
Dec 4th, 2014
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.87 KB | None | 0 0
  1. program Snake;
  2.  
  3. uses
  4. crt;
  5.  
  6. type
  7. SnakeCell = record
  8. xCoord: Integer;
  9. yCoord: Integer;
  10.  
  11. end;
  12. label
  13. FalscheRichtung;
  14. const
  15. up = 1;
  16. down = 2;
  17. left = 3;
  18. right = 4;
  19.  
  20. linien = 20; {Anzahl der Linien}
  21. reihen = 20; {Anzahl der Reihen}
  22. raum = 0;
  23. mauer = 1;
  24. punkt = 2;
  25. loeschen = -1;
  26. snakeKopf = 10;
  27. snakeRest = 11;
  28.  
  29. unten = #80;
  30. oben = #72;
  31. return = #13;
  32. esc = #27;
  33.  
  34. var
  35. i, j, h, t, k : integer;
  36. map: Array[1..25,1..80] of Integer;
  37. isRunning : boolean;
  38. snakeA: Array[1..200] of SnakeCell;
  39. direction: integer;
  40. punktX, punktY: integer;
  41. istPunkt: boolean;
  42. punkte: integer;
  43. key : char;
  44. zeichen:char;
  45. pos : integer;
  46. gesch:integer;
  47.  
  48. procedure einleitung;
  49. var i,j:integer;
  50. begin
  51. textbackground(black);
  52. writeln;
  53. writeln('--------------------------------------------------------------------------------');
  54. writeln(' SNAKE POWERED BY ME' );
  55. writeln('--------------------------------------------------------------------------------');
  56. end;
  57. procedure laden;
  58. end;
  59.  
  60. procedure Optionen;
  61. begin
  62. gesch:=150;
  63. window(1,7,80,25);
  64. pos:=7;
  65. write(' SPIELOPTIONEN');
  66. pos:=2;
  67. repeat
  68. clrscr;
  69. writeln;writeln;writeln;writeln;writeln;
  70. writeln(' SCHWIERIGKEIT');
  71. writeln;
  72. writeln(' LEICHT');
  73. writeln(' MITTEL');
  74. writeln(' SCHWIERIG');
  75. writeln;
  76. writeln(' SPIELFELD');
  77. writeln;
  78. writeln(' HINTERGRUNDFARBE');
  79. writeln;
  80. writeln(' BLAU');
  81. writeln(' GRUEN');
  82. writeln(' ROT');
  83. WRITELN(' SCHWARZ');
  84. writeln;
  85. writeln(' ZURÜCK');
  86. writeln;
  87. gotoxy(49,pos);write('*');
  88. repeat
  89. zeichen:=Readkey;
  90. until zeichen in [oben,unten,esc,return];
  91. case zeichen of
  92. 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;
  93. 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;
  94. end;
  95. until zeichen in [return,esc];
  96. begin
  97. case pos of
  98. 4 : begin gesch:=200; Optionen; end;
  99. 5 : begin gesch:=150; Optionen; end;
  100. 6 : begin gesch:=100; Optionen; end;
  101. 18: exit;
  102. end;
  103.  
  104. end;
  105.  
  106. end;
  107.  
  108. procedure Spiel;
  109. var datei : file of THighscore;
  110. new,hlp: THighscore;
  111. HighScr: array [1..10] of THighscore;
  112. i,j : Integer;
  113. label FalscheRichtung;
  114. begin
  115. clrscr;
  116. window(1,1,80,25);
  117. textbackground(black);
  118. TextColor(green);
  119. istPunkt := false;
  120. randomize;
  121. punkte := 0;
  122. for i:=2 to 200 do
  123. begin
  124. snakeA[i].xCoord := -1;
  125. snakeA[i].yCoord := -1;
  126. end;
  127. snakeA[1].xCoord := reihen div 2;
  128. snakeA[1].yCoord := linien div 2;
  129. for i:=1 to linien do
  130. begin
  131. for j:=1 to reihen do
  132. begin
  133. if (i=1) or (j = 1) or (i = linien) or (j = reihen) then
  134. map[i][j]:=1
  135. else
  136. map[i][j] := 0;
  137. end;
  138. end;
  139.  
  140. for i:=1 to linien do
  141. begin
  142. for j:=1 to reihen do
  143. begin
  144. if map[i][j] = mauer then
  145. write(chr(219))
  146. else
  147. if map[i][j] = raum then
  148. write(' ');
  149. end;
  150. writeln;
  151. end;
  152. readln;
  153. isRunning := true; {Prüft ob Spiel-Schleife vorhanden ist}
  154. gotoxy(snakeA[1].xCoord, snakeA[1].yCoord);
  155. write (chr(157));
  156. repeat {Spiel-Schleife}
  157. FalscheRichtung:
  158. if istPunkt = false then
  159. begin
  160. punktX := random(reihen-2) + 2;
  161. punktY := random(linien-2) + 2;
  162. istPunkt := true;
  163. gotoxy(punktX, punktY);
  164. write ('@');
  165. end;
  166.  
  167. if Keypressed then
  168. begin
  169. key := readkey;
  170. case key of
  171. #75 : begin if direction = right then goto FalscheRichtung; direction := left; end;
  172. #72 : begin if direction = down then goto FalscheRichtung; direction := up; end;
  173. #77 : begin if direction = left then goto FalscheRichtung; direction := right; end;
  174. #80 : begin if direction = up then goto FalscheRichtung; direction := down; end;
  175. #27 : break;
  176. end;
  177. end;
  178.  
  179. gotoxy(snakeA[1].xCoord, snakeA[1].yCoord); write(' ');
  180.  
  181. for t:=2 to 200 do
  182. begin
  183. if snakeA[t].xCoord <> -1 then
  184. begin
  185. gotoxy(snakeA[t].xCoord, snakeA[t].yCoord);
  186. write(' ');
  187. end
  188. else
  189. break;
  190. end;
  191.  
  192. for j:=200 downto 2 do
  193. begin
  194. if snakeA[j].xCoord <> - 1 then
  195. begin
  196. snakeA[j].xCoord := snakeA[j-1].xCoord;
  197. snakeA[j].yCoord := snakeA[j-1].yCoord;
  198. end;
  199. end;
  200.  
  201. case direction of
  202. up : snakeA[1].yCoord := snakeA[1].yCoord - 1;
  203. down : snakeA[1].yCoord := snakeA[1].yCoord + 1;
  204. left : snakeA[1].xCoord := snakeA[1].xCoord - 1;
  205. right : snakeA[1].xCoord := snakeA[1].xCoord + 1;
  206. end;
  207.  
  208. gotoxy(snakeA[1].xCoord, snakeA[1].yCoord); write(chr(157));
  209. for i:=2 to 200 do
  210. begin
  211. if snakeA[i].xCoord <> -1 then
  212. begin
  213. gotoxy(snakeA[i].xCoord,snakeA[i].yCoord);
  214. write('X')
  215. end
  216. else
  217. break;
  218. end;
  219.  
  220. for k:=2 to 200 do
  221. begin
  222. if snakeA[k].xCoord = -1 then break;
  223. if (snakeA[k].xCoord = snakeA[1].xCoord) and (snakeA[k].yCoord = snakeA[1].yCoord) then isRunning := false;
  224. end;
  225.  
  226. if (snakeA[1].yCoord = punktY) and (snakeA[1].xCoord = punktX) then
  227. begin
  228. istPunkt := false;
  229. punkte := punkte+1;
  230. for h:=2 to 200 do
  231. begin
  232. if snakeA[h].xCoord = -1 then
  233. begin
  234. snakeA[h].xCoord := snakeA[h-1].xCoord; snakeA[h].yCoord :=snakeA[h-1].yCoord;break;
  235. end;
  236. end;
  237.  
  238.  
  239. end;
  240.  
  241. delay(gesch); {Geschwindigkeit}
  242. gotoxy(1, linien+1);
  243. writeln;
  244. write('Punktzahl: ',punkte);
  245. if (snakeA[1].xCoord<=1) or (snakeA[1].yCoord<=1) or (snakeA[1].xCoord >= reihen) or (snakeA[1].yCoord>=linien) then
  246. isRunning := false;
  247. until isRunning = false;
  248. readln;
  249. end;
  250.  
  251. procedure menu;
  252. begin
  253. window(1,7,80,25); textbackground(blue);textcolor(white);clrscr;
  254. pos:=7;
  255. repeat
  256. clrscr;
  257. writeln;writeln;writeln;writeln;writeln;writeln;
  258. writeln(' SPIEL STARTEN');
  259. writeln;
  260. writeln(' OPTIONEN');
  261. writeln;
  262. writeln(' HIGHSCORE');
  263. writeln;
  264. writeln(' BEENDEN');
  265. writeln;
  266. gotoxy(49,pos);write('*');
  267. repeat
  268. zeichen:=Readkey;
  269. until zeichen in [oben,unten,esc,return];
  270. case zeichen of
  271. oben: if pos>7 then begin pos:=pos-2;gotoxy(49,pos);write('*');end;
  272. unten: if pos<13 then begin pos:=pos+2;gotoxy(49,pos);write('*');end;
  273. end;
  274. until zeichen in [return,esc];
  275. begin
  276. case pos of
  277. 7 : Spiel;
  278. 9 : Optionen;
  279. //11: Highscore;
  280. 13: exit;
  281. end;
  282. end;
  283.  
  284.  
  285. end;
  286.  
  287. begin
  288. textbackground(green);
  289. einleitung;
  290. //laden;
  291. Menu;
  292. //Highscore;
  293.  
  294. end.
Advertisement
Add Comment
Please, Sign In to add comment