Delphi Snake

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Delphi Snake

    Hey Leute,
    habe da ein klitzekleines großes Problem und bitte mal ganz kleinlaut um Hilfe... ich bin in einer Informatik-Ag, in der man jedoch sogut wie kein Wort versteht und wenn man sich auch dann zu Hause alles selbt erarbeitet, so kommt man auf Dauer jedoch auch nicht wirklich hinterher und nachdem ich als ziemlicher Anfänger endlich Galgenraten hinter mich gebracht habe, so habe ich nun das gleiche Problem mit Snake. :(
    Ich brauche eine relativ simple Ausführung davon. Bzw. es wäre sehr, sehr hilfreich. Nur leider brauche ich dazu nicht nur den Quelltext, sondern wäre furchtbar froh, wenn mir jemand alle dazugehörigen Dateien vllt. geben könnte. Ansonsten wäre ich aber natürlich auch für kleine Tipps sehr dankbar.
    Bis denne.
  • Hallo zusammen
    ich habe ein ähnliches Problem wie Glenraven, wenn nicht sogar dass gleiche. Ich bin in einem Informatikkurs und muss das Spiel Snake programmieren, habe jedoch keine Ahnung, wie ich das anstellen soll.. :oops:
    Ich habe keine grossen Programmierkenntnisse und das Programm sollte daher ziemlich einfach sein, jetzt habe ich gehofft, dass mir vielleicht jemand helfen kann. Wenn bereits jemand ein solches Programm oder einen Teil davon hat, wäre es wahnsinnig nett, wenn er oder sie es mir schicken könnte, denn ich bin wirklich verzweifelt :(
  • @Max123: Na eine ganz normale Delphiprogrammierung. Die Informatik-Ag läuft bereits ca. 6 Monate und eigentlich sind soweit auch alle Funktionen bekannt. Problem ist hauptsächlich, dass sie ziemlich schlecht erklärt werden, man zurzeit auch niemanden fragen kann und das man von den Leiterinnen nur solche Antworten bekommen würde, mit denen man einfach absolut nicht anfangen kann und die einen vollkommen verwirren. Wir bekommen auch keinerlei Beispiele oder etwas in dieser Art. Sie wollen, dass man es einfach alles ausprobiert. Aber auf die Dauer hat das keinen Zweck, besonders, wenn man schon manche Hintergründe nicht versteht. Bei Galgenraten hatte ich eine passende Sache vor Augen, damit kann man es nach ein paar Minuten vollkommen verstehen, doch ohne alles sicher nicht. Bereits gehen nur noch 3 Personen zu diesem Kurs, da der Rest aus Verzweiflung schon ausgestiegen ist.

    @wulfgang: Vielen Dank... nur brauche ich bzw. wir (chräbs ja auch, denke ich) alle dazugehörigen Dateien. Quelltext, Form, Programm und so weiter... irgendeinen Vorschlag?
  • Hi also ich muss momentan exakt das selbe machen bin aber schon etwas weiter^^
    Wenn euch eine Version von Snake recht ist in der Snake ein Punkt ist, der sich *noch* nicht verlängern kann, äpfel fressen kann...score und länge angezeigt wird und durch wände gehen kann dann versuchst mal damit:

    Wems hilft:
    Bevor man das unten "abschreiben" kann muss man erstmal ein Image(Bild) und einen Timer(Timer1) reinmachen und dann auch noch wie man rauslesen kann benennen alles...
    Der Startbildschirm is ja eher unwichtigund kann einfach gelöscht werdn...
    also folgende Prozedur am besten löschn damits einfach funktioniert:
    procedure TSpielfeld.b_startClick

    Quellcode

    1. unit Unit1;
    2. interface
    3. uses
    4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    5. Dialogs, ExtCtrls, StdCtrls;
    6. type
    7. Trichtung = (Hoch,Runter,Links,Rechts);
    8. TSpielfeld = class(TForm)
    9. Bild: TImage;
    10. Timer1: TTimer;
    11. Panel1: TPanel;
    12. Label1: TLabel;
    13. m_start: TMemo;
    14. l_start: TLabel;
    15. b_start: TButton;
    16. Label2: TLabel;
    17. procedure FormCreate(Sender: TObject);
    18. procedure Timer1Timer(Sender: TObject);
    19. procedure FormKeyDown(Sender: TObject; var Key: Word;
    20. Shift: TShiftState);
    21. procedure b_startClick(Sender: TObject);
    22. end;
    23. tsnake = class
    24. x,y:array[1..100] of integer;
    25. vx,vy,r,laenge:integer;
    26. farbe:tcolor;
    27. richtung:trichtung;
    28. procedure init(fneu:tcolor; xneu, yneu, vxneu, vyneu, rneu:integer);
    29. procedure zeigedich;
    30. procedure bewegedich;
    31. procedure wachsen;
    32. end;
    33. tapfel = class
    34. x,y,r,score:integer;
    35. farbe:tcolor;
    36. procedure ini; overload;
    37. procedure ini(fneu:tcolor; xneu, yneu, rneu:integer); overload;
    38. procedure zeigediche;
    39. procedure fressen;
    40. end;
    41. var
    42. Spielfeld: TSpielfeld;
    43. snake : Tsnake;
    44. apfel : Tapfel;
    45. big : bool;
    46. implementation
    47. {$R *.dfm}
    48. // -------------------------------------------------------------------------- //
    49. // alle Prozeduren, die ausschließlich mit "Snake" zu tun haben
    50. // -------------------------------------------------------------------------- //
    51. procedure tsnake.init(fneu:tcolor; xneu, yneu, vxneu, vyneu, rneu:integer);
    52. begin
    53. laenge:= 1;
    54. farbe:= fneu;
    55. x[laenge] := xneu;
    56. y[laenge] := yneu;
    57. vx := vxneu;
    58. vy := vyneu;
    59. r := rneu;
    60. end;
    61. procedure tsnake.zeigedich;
    62. var i:integer;
    63. begin
    64. Spielfeld.Bild.Canvas.Brush.Color:=Farbe;
    65. for i:=1 to snake.laenge do
    66. begin
    67. Spielfeld.Bild.Canvas.Rectangle(x[i], y[i], x[i]+2*r, y[i]+2*r);
    68. end;
    69. end;
    70. procedure tsnake.bewegedich;
    71. begin
    72. case snake.richtung of
    73. Links: begin //Links
    74. snake.vx:=-1;
    75. snake.vy:= 0;
    76. end;
    77. Hoch: begin //Hoch
    78. snake.vx:= 0;
    79. snake.vy:= -1;
    80. end;
    81. Rechts: begin //Rechts
    82. snake.vx:= 1;
    83. snake.vy:= 0;
    84. end;
    85. Runter: begin //Runter
    86. snake.vx:= 0;
    87. snake.vy:= 1;
    88. end;
    89. end;
    90. //Bewegungsberechnung
    91. x[1] := x[1] + 2*r*vx;
    92. y[1] := y[1] + 2*r*vy;
    93. if (x[1]>Spielfeld.Bild.Width-2*r) then
    94. begin
    95. x[1] := 0;
    96. end;
    97. if x[1]<0 then
    98. begin
    99. x[1] := Spielfeld.Bild.Width-2*r;
    100. end;
    101. if (y[1] > Spielfeld.Bild.Height-2*r) then
    102. begin
    103. y[1] := 0;
    104. end;
    105. if y[1] < 0 then
    106. begin
    107. y[1] := Spielfeld.Bild.Height-2*r;
    108. end;
    109. end;
    110. //wachsen
    111. procedure Tsnake.wachsen;
    112. var i:integer;
    113. begin
    114. laenge:= laenge +1;
    115. spielfeld.Label2.Caption:='Länge : ' + inttostr(laenge);
    116. //Array erweitern
    117. for i:=1 to laenge do
    118. begin
    119. x[i+1]:=x[i];
    120. y[i+1]:=y[i];
    121. Spielfeld.Bild.Canvas.Rectangle(x[i], y[i], x[i]+2*r, y[i]+2*r);
    122. end;
    123. end;
    124. procedure TSpielfeld.FormKeyDown(Sender: TObject; var Key: Word;
    125. Shift: TShiftState);
    126. begin
    127. case key of
    128. 27:close;
    129. 37: begin //Links
    130. if snake.richtung <> Rechts then snake.richtung:=Links;
    131. end;
    132. 38: begin //Hoch
    133. if snake.richtung <> Runter then snake.richtung:=Hoch;
    134. end;
    135. 39: begin //Rechts
    136. if snake.richtung <> Links then snake.richtung:=Rechts;
    137. end;
    138. 40: begin //Runter
    139. if snake.richtung <> Hoch then snake.richtung:=Runter;
    140. end;
    141. end;
    142. end;
    143. // -------------------------------------------------------------------------- //
    144. // Alle Prozeduren, die ausschließlich mit "Apfel" zu tun haben
    145. // -------------------------------------------------------------------------- //
    146. procedure tapfel.ini;
    147. begin
    148. farbe:= clGreen;
    149. x := Random(30)*20;
    150. y := Random(20)*20;
    151. r := 10;
    152. end;
    153. procedure tapfel.ini(fneu:tcolor; xneu, yneu, rneu:integer);
    154. begin //
    155. farbe:= fneu;
    156. x := xneu;
    157. y := yneu;
    158. r := rneu;
    159. end;
    160. procedure tapfel.zeigediche; //
    161. begin
    162. Spielfeld.Bild.Canvas.Brush.Color:=clGreen;
    163. Spielfeld.Bild.Canvas.ellipse(x, y, x+2*r, y+2*r);
    164. end;
    165. procedure tapfel.fressen;
    166. begin
    167. if (x = snake.x[1]) and (y = snake.y[1]) then
    168. begin
    169. score:= score +1;
    170. spielfeld.label1.caption:='Score : ' + inttostr(score);
    171. apfel.zeigediche;
    172. apfel.ini;
    173. apfel.zeigediche;
    174. big:= true;
    175. end;
    176. end;
    177. // -------------------------------------------------------------------------- //
    178. // Durch diese Prozedur wird das Spiel gestartet und der Anfangsbildschirm ausgeblendet
    179. // -------------------------------------------------------------------------- //
    180. procedure TSpielfeld.b_startClick(Sender: TObject);
    181. begin
    182. l_start.Visible:=false;
    183. b_start.Visible:=false;
    184. m_start.Visible:=false;
    185. panel1.Visible:=true;
    186. bild.Visible:=true;
    187. end;
    188. // -------------------------------------------------------------------------- //
    189. // Diese Prozedur bringt die Bewegungs- und Fressprozeduren in Gang(regelmäßig
    190. // -------------------------------------------------------------------------- //
    191. procedure TSpielfeld.Timer1Timer(Sender: TObject);
    192. begin
    193. //spielfeld.Timer1.Enabled:=false;
    194. //
    195. snake.zeigedich;
    196. snake.bewegedich;
    197. snake.zeigedich;
    198. apfel.fressen;
    199. if big = true then
    200. begin
    201. snake.wachsen;
    202. big:= false;
    203. end;
    204. //spielfeld.Timer1.Enabled:=true;
    205. end;
    206. // -------------------------------------------------------------------------- //
    207. // Alles was von Anfang an existieren soll ist hier aufgeführt
    208. // -------------------------------------------------------------------------- //
    209. procedure TSpielfeld.FormCreate(Sender: TObject);
    210. begin //
    211. with bild.Canvas do
    212. begin
    213. pen.Width:=5;
    214. Brush.Color:=clWhite;
    215. Brush.Style:=bsSolid;
    216. Pen.Width:=2;
    217. Pen.Mode:=pmNOTXOR;
    218. Rectangle(0,0,Bild.width,Bild.Height);
    219. end;
    220. snake.init(clRed, Random(30)*20, Random(20)*20,0,0,10);
    221. snake.zeigedich;
    222. apfel.ini;
    223. apfel.zeigediche;
    224. end;
    225. initialization //
    226. randomize;
    227. snake := tsnake.Create;
    228. apfel := tapfel.Create;
    229. big:= false;
    230. end.
    Alles anzeigen


    // Bin selber alles andere als begabt (was man wahrscheinlich auch sieht)^^

    Bin jetzt mittlerweile seid nen paar Tagen daran zu probieren, wie ich diese Schlange länger bekommen kann wenn sie einen Apfel gefressen hat bin aber bisher kläglich gescheitert...das einzige wassich hinbekomme ist, dass meine Schlange bei jedem 2ten Apfel den sie frisst ein grünes QUadrat zurücklässt...

    Ich fände es sehr nett wenn sich vll mal jemand die Mühe machen würde bei meinen Programmierversuchen durchzublicken um mir zu sagen was ich falsch mache und wie ich das endlich hinkriegen kann... weil ich bekomms einfach nich weiter gebacken...
    Wie gesagt würde mich echt riesig freun wenn mir jemand helfen könnte...

    mfg Taipi
  • Vielen Dank für die Aufbereitung der Codes (wusste leider nicht, dass man das so machen kann^^ ) Nur sehr schade, dass noch keiner geantwortet hat :(
    Nen kleiner Tip warum es nicht funktioniert oder wie man das Problem auch anders und einfacher lösen könnte würde mir ja vollkommen reichen^^
    Wie gesagt würde mich echt über ne Antwort freuen...

    mfg Taipi