AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Snake

Ein Thema von terryblack · begonnen am 1. Okt 2006 · letzter Beitrag vom 4. Okt 2006
Antwort Antwort
terryblack

Registriert seit: 27. Sep 2006
9 Beiträge
 
#1

Snake

  Alt 1. Okt 2006, 20:32
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:
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.
//Fragen:
//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]
  Mit Zitat antworten Zitat
MCeddy
(Gast)

n/a Beiträge
 
#2

Re: Snake

  Alt 1. Okt 2006, 20:50
Hallo terryblack.
Schreibe deinen Quellcode bitte mal in [ delphi ] [ /delphi ]-Codeblöcke, dann wird wenigestens die Syntax hervorgehoben.
Bei deinem eigendlichen Problem kann ich dir aber leider nicht weiterhelfen. Schon mal die Suche probiert: Hier im Forum suchensnake. Es gibt sogar ein Tuturial hier im Forum darüber wie man am besten Snake programmiert.

Viele Grüße

MCeddy
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Snake

  Alt 1. Okt 2006, 22:30
Zum 1. : Nimm TSpeedButton an der Stelle von TButton.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
terryblack

Registriert seit: 27. Sep 2006
9 Beiträge
 
#4

Re: Snake

  Alt 4. Okt 2006, 09:31
ok vielen dank für die tipps
werd heut einfach ma meine info lehrerin fragen und mir das tutorial reinziehn
gruß terry
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz