Delphi-PRAXiS
Seite 5 von 8   « Erste     345 67     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Snake für die Schule programmieren,Pause;Highscoures einbaun (https://www.delphipraxis.net/71770-snake-fuer-die-schule-programmieren-pause%3Bhighscoures-einbaun.html)

DGL-luke 26. Jun 2006 21:10

Re: Snake für die Schule programmieren,Pause;Highscoures ein
 
Meine Glaskugel ist vor kurzem kaputtgegangen... könntest du bitte ein bisschen code posten?

MarkusUhl 26. Jun 2006 21:13

Re: Snake für die Schule programmieren,Pause;Highscoures ein
 
Delphi-Quellcode:
procedure TForm1.BLinksKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case Key of
  VK_LEFT: Form1.BLinksClick (Sender: TObjcect);
end;
hier da kommt dann dass ich hinter Sender ne ) setzten soll... Mach ich das kommt, es nicht hier nicht anwendbar

DGL-luke 26. Jun 2006 21:33

Re: Snake für die Schule programmieren,Pause;Highscoures ein
 
also ersma lassen ma das Form1 weg, wenn dann kommt da n self hin. selbiges beim sender. Ich habs doch schon groß hingeschrieben:

Delphi-Quellcode:
Schlange_Links(self); //SELF steht da!

Mavarik 27. Jun 2006 07:29

Re: Snake für die Schule programmieren,Pause;Highscoures ein
 
Zitat:

Zitat von MarkusUhl
Delphi-Quellcode:
 VK_LEFT: Form1.BLinksClick (Sender: TObjcect);
end;

Das ist doch ein Aufruf und nicht eine Deklaration...

Also lösch das ":TObject"

Frank

EDatabaseError 27. Jun 2006 07:35

Re: Snake für die Schule programmieren,Pause;Highscoures ein
 
bring ihn nicht durcheinander.

That is what you need:
Delphi-Quellcode:
procedure TForm1.BLinksKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case Key of
  VK_LEFT: BLinksClick(self);
end;

Mfg
ede

Mavarik 27. Jun 2006 07:53

Re: Snake für die Schule programmieren,Pause;Highscoures ein
 
Zitat:

Zitat von DGL-luke
Delphi-Quellcode:
while not bClose do
  begin
    Application.ProcessMessages; //wenn du mit der VCL und mit Stuerelementen arbeiten willst, musst du hier die WIndows-Nachrichten überprüfen
    if GetAsyncKeyState(VK_LEFT) < 0 then //sollte man natürlich in eine Prozedur / Funktion auslagern
      ....
    Render; //Frame malen
  end;

Aber doch nicht bei einem einfachen - nennen wir es mal Timer-Programm.... Dein Beispiel sieht eher nach einem DirectX Ansatz aus... :wink:

btw: Der onKey* ist für derartige Programme auf keinen Fall zu langsamm....

Frank :coder:

DGL-luke 27. Jun 2006 13:56

Re: Snake für die Schule programmieren,Pause;Highscoures ein
 
Klar Mavarik, ich wollte ja ein wenig Hintergrundwissen vermitteln ^^

MarkusUhl 27. Jun 2006 18:13

Re: Snake für die Schule programmieren,Pause;Highscoures ein
 
Zitat:

Zitat von EDatabaseError
bring ihn nicht durcheinander.

That is what you need:
Delphi-Quellcode:
procedure TForm1.BLinksKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case Key of
  VK_LEFT: BLinksClick(self);
end;

Mfg
ede

So hab ich es gemacht, kommt keine Fehlermelgung funzt aber nicht. Muss ich noch was ändern. Hab bei Form1 im OI Key Preview aktiviert. Was muss ich noch ändern? Danke euch!

MarkusUhl 27. Jun 2006 18:16

Re: Snake für die Schule programmieren,Pause;Highscoures ein
 
Achja musst noch ein end; einfügen. Sieht jetzt komisch aus, sonst funzt es aber net...

Kopier mal alles hier rein:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

const
  farben: Array [0..2] of TColor=(clWhite, clLime, clRed);
  stufen: Array [0..2] of Cardinal=(200, 100, 50);
  raster = 7;
  breite = 65;
  hoehe = 45;
  Langsam = 250;
  Mittel = 100;
  Schnell = 50;

type
  TForm1 = class(TForm)
    Spielfeld: TPaintBox;
    Timer1: TTimer;
    BStart: TButton;
    BOben: TButton;
    BLinks: TButton;
    BRechts: TButton;
    BUnten: TButton;
    PEnde: TButton;
    BPause: TButton;
    BWeiter: TButton;
    PLeicht: TButton;
    PSchwer: TButton;
    PMittel: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure BStartClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure BObenClick(Sender: TObject);
    procedure BLinksClick(Sender: TObject);
    procedure BRechtsClick(Sender: TObject);
    procedure BUntenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure PEndeClick(Sender: TObject);
    procedure BPauseClick(Sender: TObject);
    procedure BWeiterClick(Sender: TObject);
    procedure PLeichtClick(Sender: TObject);
    procedure PMittelClick(Sender: TObject);
    procedure PSchwerClick(Sender: TObject);
    procedure BRechtsKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private-Deklarationen }
    map: Array [0..breite] of Array [0..hoehe] of Integer;
    kopf,
    richtung,
    punkt: TPoint;
    punkte: Integer;
    laenge: Integer;
    ende,
    rand,
    gebissen: Boolean;
    procedure enable_buttons(status: Boolean);
    procedure spiel_ende;
    procedure neuer_punkt;
    procedure paint_map;
    procedure calc_snake;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.enable_buttons(status: Boolean);
begin
  BOben.Enabled := status;
  BRechts.Enabled := status;
  BLinks.Enabled := status;
  BUnten.Enabled := status;
  BPause.Enabled := status;
  BWeiter.Enabled := status;
  PLeicht.Enabled := status;
  PMittel.Enabled := status;
  PSchwer.Enabled := status;
end;

procedure TForm1.spiel_ende;
begin
  ende := True;
  Timer1.Enabled := False;
  BPause.Enabled:=False;
  BWeiter.Enabled:=False;
  PLeicht.Enabled:=False;
  PMittel.Enabled:=False;
  PSchwer.Enabled:=False;
  enable_buttons(False);
  BStart.Enabled := True;

end;

procedure TForm1.neuer_punkt;
begin
  punkt := Point(Random(breite), Random(hoehe));
  while map[punkt.X, punkt.Y]<>0 do
    punkt := Point(Random(breite), Random(hoehe));
  map[punkt.X,punkt.Y] := -1;
end;

procedure TForm1.paint_map;
var
  i, j: Integer;
  color: TColor;
begin
  for i := 0 to breite do
    for j := 0 to hoehe do
    begin
      case map[i, j] of
        -1: color := farben[1];
         0: color := farben[0];
      else
        color := farben[2];
      end;
      Spielfeld.Canvas.Brush.Color:=color;
      Spielfeld.Canvas.FillRect(Rect(i*raster, j*raster, (i+1)*raster, (j+1)*raster));
    end;
end;

procedure TForm1.calc_snake;
var
  i, j: Integer;
begin
  for i := 0 to breite do
    for j := 0 to hoehe do
      if map[i, j]>0 then
        Dec(map[i, j]);
  Inc(kopf.X, richtung.X);
  Inc(kopf.Y, richtung.Y);
  if (kopf.X<0) or (kopf.X>breite) or (kopf.Y<0) or (kopf.Y>hoehe) then
  begin
    spiel_ende;
    ShowMessage('Nicht den Rand berühen!');
    ShowMessage('Du hast '+IntToStr(punkte)+' Punkte erreicht')
  end;
  if (map[kopf.X, kopf.Y]>0) and (not ende) then
  begin
    spiel_ende;
    ShowMessage('Nicht in den Schwanz beißen!');
    ShowMessage('Du hast '+IntToStr(punkte)+' Punkte erreicht')
  end;
  if (kopf.X=punkt.X) and (kopf.Y=punkt.Y) then
  begin
    Inc(laenge);
    neuer_punkt;
    if Timer1.Interval = Langsam then
  Punkte := Punkte + 3
else
if Timer1.Interval = Mittel then
  Punkte := Punkte + 8
else
if Timer1.Interval = Schnell then
  Punkte := Punkte + 12;
  end;
  map[kopf.X, kopf.Y] := laenge;

Label2.Caption := 'Aktueller Punktestand: ' + IntToStr(Punkte);
end;

procedure TForm1.BStartClick(Sender: TObject);
var
  i, j: Integer;
begin
  punkte:=0;
  BStart.Enabled := False;
  for i:=0 to breite do
    for j:=0 to hoehe do
      map[i, j] := 0;
  kopf := Point(1, 1);
  laenge := 5;
  richtung := Point(0, 1);
  map[kopf.X, kopf.Y] := laenge;
  neuer_punkt;
  paint_map;
  enable_buttons(True);
  ende := False;
  Timer1.Enabled := true;
  Timer1.Interval := Mittel;
Form1.PLeicht.Visible:=false;
Form1.PMittel.Visible:=false;
Form1.PSchwer.Visible:=true;
Form1.BOben.Visible:=true;
Form1.BLinks.Visible:=true;
Form1.BRechts.Visible:=true;
Form1.BUnten.Visible:=true;
Form1.BPause.Visible:=true;
Form1.BWeiter.Visible:=false;
Form1.Label1.Visible:=true;


end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  calc_snake;
  if not ende then
    paint_map;
end;

procedure TForm1.BObenClick(Sender: TObject);
begin
  if richtung.Y=0 then
    richtung := Point(0, -1);
end;

procedure TForm1.BLinksClick(Sender: TObject);
begin
  if richtung.X=0 then
    richtung := Point(-1, 0);
end;

procedure TForm1.BRechtsClick(Sender: TObject);
begin
  if richtung.X=0 then
    richtung := Point(1, 0);
end;

procedure TForm1.BUntenClick(Sender: TObject);
begin
  if richtung.Y=0 then
    richtung := Point(0, 1);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;

procedure TForm1.PEndeClick(Sender: TObject);
begin
halt;
end;

procedure TForm1.BPauseClick(Sender: TObject);
begin
Timer1.Enabled := False;
Form1.BPause.Visible:=false;
Form1.BWeiter.Visible:=true;
PLeicht.Enabled:=False;
PMittel.Enabled:=False;
PSchwer.Enabled:=False;
BOben.Enabled:=False;
BLinks.Enabled:=False;
BRechts.Enabled:=False;
BUnten.Enabled:=False;



end;

procedure TForm1.BWeiterClick(Sender: TObject);
begin
Timer1.Enabled := True;
Form1.BPause.Visible:=true;
Form1.BWeiter.Visible:=false;
PLeicht.Enabled:=true;
PMittel.Enabled:=true;
PSchwer.Enabled:=true;
BOben.Enabled:=true;
BLinks.Enabled:=true;
BRechts.Enabled:=true;
BUnten.Enabled:=true;
end;

procedure TForm1.PLeichtClick(Sender: TObject);
begin
Timer1.Interval := Langsam;
calc_snake;
  if not ende then
    paint_map;
Form1.PLeicht.Visible:=false;
Form1.PMittel.Visible:=true;
Form1.PSchwer.Visible:=false;
end;

procedure TForm1.PMittelClick(Sender: TObject);
begin
Timer1.Interval := Mittel;
calc_snake;
  if not ende then
    paint_map;
Form1.PLeicht.Visible:=false;
Form1.PMittel.Visible:=false;
Form1.PSchwer.Visible:=true;
end;

procedure TForm1.PSchwerClick(Sender: TObject);
begin
Timer1.Interval := Schnell;
calc_snake;
  if not ende then
    paint_map;
Form1.PLeicht.Visible:=true;
Form1.PMittel.Visible:=false;
Form1.PSchwer.Visible:=false;
end;

procedure TForm1.BRechtsKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case Key of
  VK_RIGHT: BRechtsClick(self);
end;
end;
end.
Danke euch

Mavarik 27. Jun 2006 18:50

Re: Snake für die Schule programmieren,Pause;Highscoures ein
 
Wenn Du Code innerhalb einer Procedure schreibst die

Procedure TForm1.Wasauchimmer;

heisst....

brauchst Du nicht vor alle Variablen Form1. zu schreiben...

Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:49 Uhr.
Seite 5 von 8   « Erste     345 67     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz