|
Registriert seit: 27. Sep 2006 9 Beiträge |
#1
bin grad am snake programmieren für die schule und hab 2 probleme. erstma erklär ich aber wie mein programm funktioniert. also ich habe ein image erstellt und darauf ein rechteck gezeichnet und eine ellipse.das rechteck wird mit den pfeiltasten gesteuert über den Timer. jedesma wenn das rechteck über die ellipse läuft kommt ein neues rechteck hinzu und läuft hintendran mit.
1.problem. ich habe auf dem formular einen button eingefügt. jetzt kann cih aber nich mehr die snake bewegen weil wenn ich auf die pfeiltasten drücke , markiert das programm nur den button und geht nicht mehr auf das image. 2.problem. ich wollte einen button einfügen der das image komplett löscht und wieder "weiß" macht und wieder ein rechteck und eine ellipse entsteht, quasi einen neustartbutton.hab aber keine ahnung wie man das macht, bitte helft mir hier mein programm:
Delphi-Quellcode:
//Fragen:
unit u_snake;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, u_apfelklasse, u_snakeklasse, Menus; type TSpielfeld = class(TForm) Bild: TImage; Timer1: TTimer; Button1: TButton; Punkte: TLabel; Label1: TLabel; MainMenu1: TMainMenu; SPIEL1: TMenuItem; Bild1: TMenuItem; Neustart1: TMenuItem; Beenden1: TMenuItem; Screenshot1: TMenuItem; Screenshotffnen1: TMenuItem; Pause1: TMenuItem; Weiter1: TMenuItem; GeschwindigkeitvonSnake1: TMenuItem; SaveDialog1: TSaveDialog; OpenDialog1: TOpenDialog; Button2: TButton; Button4: TButton; Button5: TButton; Extra1: TMenuItem; Uhrzeit2: TMenuItem; Datum1: TMenuItem; Hilfe1: TMenuItem; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Button1Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Pause1Click(Sender: TObject); procedure Weiter1Click(Sender: TObject); procedure Screenshot1Click(Sender: TObject); procedure Screenshotffnen1Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Datum1Click(Sender: TObject); procedure Uhrzeit2Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Hilfe1Click(Sender: TObject); procedure GeschwindigkeitvonSnake1Click(Sender: TObject); procedure Neustart1Click(Sender: TObject); procedure Button5Click(Sender: TObject); private {private-Deklarationen} public { Public-Deklarationen } end; var Spielfeld: TSpielfeld; snake: Tsnake; apfel: Tapfel; x, y : array[1..100] of integer; vx, vy, r: integer; implementation {$R *.dfm} procedure TSpielfeld.FormCreate(Sender: TObject); {In dieser Prozedure wird mit "Bild.Canvas.pen.Width:=5" die Breite der zu zeichnenden Linie "um" Snake bestimmt. Mit "Bild.Canvas.Brush.COlor:=clWhite" wird die Farbe des Spielfeldes auf die Farbe Weiß festgelegt. Mit "Bild.Canvas.pen.Width:=2" wird die Breite der Linie um das ganze SPielfeld bestimmt. Mit "Bild.Canvas.Rectangle (0,0,Bild.Width,Bild.Height)" werden die Koordinaten des Spielfeldes festgelegt. Mit "Bild.Canvas.Pen.Mode:=pmNOTXOR" wird das "alte" Snake übermalt.} begin Bild.Canvas.pen.Width:=5; Bild.Canvas.Brush.COlor:=clWhite; Bild.Canvas.Brush.Style:=bsSolid; Bild.Canvas.pen.Width:=2; Bild.Canvas.Rectangle (0,0,Bild.Width,Bild.Height); Bild.Canvas.Pen.Mode:=pmNOTXOR; snake.init (clRed,Random(30)*20,Random(20)*20,0,0,10); snake.zeigedich(Bild.Canvas); apfel.init (clblue,Random(30)*20,Random(20)*20,10); {hier wird der apfel neu gezeichnet} apfel.zeigedich(Bild.Canvas); end; procedure TSpielfeld.Timer1Timer(Sender: TObject); {In dieser Procedure wird nach der "procedure snake.zeigedich" die "procedure snake.bewegedich" aufgerufen, da sich Snake als erstes zeigt und dann wie in der "procedure snake.bewegedich" festgelegt bewegt. Anschließend wird wieder die "procedure snake.zeigedich" auf gerufen, damit das "alte" Snake übermalt wird und das "neue" sichtbar wird.} begin snake.zeigedich(Bild.Canvas); snake.bewegedich(bild); snake.zeigedich(Bild.Canvas); if ((snake.x[1] = apfel.x)and (snake.y[1] = apfel.y)) then {wenn die X-Koordinate von Snake auf der X-Koordinate vom APfel liget, dann wird der Apfel mit dem Befehl "apfel.zeigedich" übermalt und anschließend wird mit "apfel.init (clblue,Random(30)*20,Random(20)*20,10)" und "apfel.zeigedich" ein neuer Apfel gemalt.} begin apfel.zeigedich(bild.Canvas); apfel.init (clblue,Random(30)*20,Random(20)*20,10); apfel.zeigedich(bild.Canvas); label1.Caption:=inttostr(strtoint(label1.caption)+1); Timer1.interval := Timer1.interval - 1; snake.laenge:=snake.laenge+1; end; end; procedure TSpielfeld.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin {mit Hilfe dieser Prozedur kann man Snkae mit den Pfeiltasten steuern} case key of 37: begin {hier wird festgelegt, wenn man die Taste 37 (Pfeiltaste links) drückt, dass sich snake in x-Richtung um -1 und in y-Richtung um 0 bewegt.} snake.vx:= -1; snake.vy:= 0; end; 38: begin {hier wird festgelegt, wenn man die Taste 38 (Pfeiltaste hoch) drückt, dass sich snake in x-Richtung um 0 und in y-Richtung um -1 bewegt.} snake.vx:=0; snake.vy:=-1; end; 39: begin {hier wird festgelegt, wenn man die Taste 39 (Pfeiltaste rechts) drückt, dass sich snake in x-Richtung um 1 und in y-Richtung um 0 bewegt.} snake.vx:=1; snake.vy:=0; end; 40: begin {hier wird festgelegt, wenn man die Taste 40 (Pfeiltaste unten) drückt, dass sich snake in x-Richtung um 0 und in y-Richtung um 1 bewegt.} snake.vx:=0; snake.vy:=1; end; end; end; procedure TSpielfeld.Button1Click(Sender: TObject); begin close; end; procedure TSpielfeld.Beenden1Click(Sender: TObject); begin Close end; procedure TSpielfeld.Pause1Click(Sender: TObject); begin Timer1.Interval:= 0; end; procedure TSpielfeld.Weiter1Click(Sender: TObject); begin Timer1.Interval := 100; end; procedure TSpielfeld.Screenshot1Click(Sender: TObject); begin Timer1.Interval:= 0; showmessage ('Beim Speichern: Hinter dem Namen des Bildes noch ".bmp" eintippen sonst wird es nicht als Bilddatei gespeichert'); if Spielfeld.savedialog1.execute then bild.picture.bitmap.savetofile(Spielfeld.savedialog1.filename) ; Timer1.Interval:= 100; end; procedure TSpielfeld.Screenshotffnen1Click(Sender: TObject); begin Timer1.Interval:= 0; if Spielfeld.opendialog1.execute then Bild.picture.bitmap.loadfromfile(Spielfeld.opendialog1.filename); Timer1.Interval:= 100; end; procedure TSpielfeld.Button4Click(Sender: TObject); begin Timer1.Interval := 100; end; procedure TSpielfeld.Button2Click(Sender: TObject); begin Timer1.Interval:= 0; end; procedure TSpielfeld.Datum1Click(Sender: TObject); var sDatum : string; begin Timer1.Interval:= 0; sDatum:=DateToStr(Date); Showmessage('aktuelles Datum: '+sDatum); Timer1.Interval:= 100; end; procedure TSpielfeld.Uhrzeit2Click(Sender: TObject); var sZeit : string; begin Timer1.Interval:= 0; sZeit:=TimeToStr(Time); Showmessage('aktuelle Zeit: '+sZeit); Timer1.Interval:= 100; end; procedure TSpielfeld.Edit1Change(Sender: TObject); var zahl: integer; begin zahl:=strtoint(Spielfeld.edit1.text); Timer1.Interval:=zahl; end; procedure TSpielfeld.Hilfe1Click(Sender: TObject); begin Timer1.Interval:=0; Showmessage ('Snake wird mit den Pfeiltasten gesteuert. Ziel des Spieles ist es soviele Äpfel wie möglich zu essen. Man Kann durch die Wände gehen aber nicht durch sich selbst!'); Timer1.Interval:=100; end; procedure TSpielfeld.GeschwindigkeitvonSnake1Click(Sender: TObject); begin Timer1.Interval:=0; Showmessage ('Bitte geben Sie in das Feld "Geschwindigkeit" eine Zahl ziwschen 1 und 1000 ein. WObei 1 für sehr schnell und 1000 für sehr langsam steht. DIe Geschwindigkeit ist standardmäßig auf 100 eingestellt'); Timer1.Interval:=100; //noch abändern end; procedure TSpielfeld.Neustart1Click(Sender: TObject); begin //wie kann man alles aufeinmal übermalen??? //alles dann neuaufrufen end; procedure TSpielfeld.Button5Click(Sender: TObject); begin Bild.Canvas.Pen.Mode:=pmNOTXOR; snake.laenge:=1; snake.zeigedich(Bild.Canvas); snake.bewegedich(bild); snake.zeigedich(Bild.Canvas); end; initialization randomize; snake:=tsnake.Create; {hier wird snake und apfel erstellt} apfel:=tapfel.Create; finalization snake.Destroy; apfel.Destroy; {hier wird snake und apfel zerstört} end. //wenn auf Button, dann gehst nicht weiter //mindest Grenze für Timer1.Interval //procedure TSpielfeld.Edit1Change(Sender: TObject); //Fehlermeldung wenn man durch sich selbst durch geht //neustart [edit=Phoenix]Delphi-Tags eingefügt. Mfg, Phoenix[/edit] |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |