Einzelnen Beitrag anzeigen

umpljn

Registriert seit: 21. Okt 2008
3 Beiträge
 
#1

Arkanoid ähnliches Spiel für Schuluntericht

  Alt 4. Nov 2008, 19:50
Hallo Ihr,

ich bräuchte eure Hilfe für ein Arkanoid ähnliches Spiel. Es geht um folgendes Problem und zwar um Die Steine bzw Blocks welche man treffen muss damit diese verschwinden. Das ganze muss mit Canvas Draw geschehen.
Hier ist der Quellcode
Delphi-Quellcode:
unit mcanvanoid;

interface

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

type
  TForm1 = class(TForm)
    BtBall_bewegen: TButton;
    TiBall: TTimer;
    ImZeichenflaeche: TImage;
    ImPaddle_Leben1: TImage;
    ImPaddle_Leben2: TImage;
    ImPaddle_Leben3: TImage;
    LbPunkte: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure BtBall_bewegenClick(Sender: TObject);
    procedure TiBallTimer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    Stone_green: TIcon;
    Stone_orange: TIcon;
    Ball: TIcon;
    Level1: TJpegImage;
    Level2: TJpegImage;
    Level3: TJpegImage;
    Startscreen: TJpegImage;
    Game_Over_lava: TJpegImage;
    Paddle: TIcon;
    zX: integer; {Ball X Position}
    zY: integer; {Ball Y Postion}
    zBewegungX: integer ; {Ball X Richtung}
    zBewegungY: integer ; {Ball Y Richtung}
    zPaddleX: integer; {xPosition paddle}
    x_gedrueckt: boolean; {Paddle xTaste}
    y_gedrueckt: boolean; {Paddle yTaste}
    zX_start: integer;
    zY_start: integer;
    zLevel: integer;
    zPunkte: integer;
    zSteine: integer;
    zSichtbar1: integer;
    zSichtbar2: integer;
    zSichtbar3: integer;
    zSichtbar4: integer;
    zSichtbar5: integer;
    zSichtbar6: integer;
    zSichtbar7: integer;
    zSichtbar8: integer;
    zSichtbar9: integer;
    zSichtbar10: integer;
    zSichtbar11: integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
     Ball := TIcon.Create;
     Ball.LoadFromFile ('Ball.ico');
     Level1 := TJpegImage.Create;
     Level1.LoadFromFile ('Level1.jpeg');
     Level2 := TJpegImage.Create;
     Level2.LoadFromFile ('Level2.jpeg');
     Level3 := TJpegImage.Create;
     Level3.LoadFromFile ('Level3.jpeg'); {Laden der Bilder}
     Paddle := TIcon.Create;
     Paddle.LoadFromFile ('Paddle.ico');
     Startscreen := TJpegImage.Create;
     Startscreen.LoadFromFile ('Startscreen.jpg');
     Game_Over_lava := TJpegImage.Create;
     Game_Over_lava.LoadFromFile ('Game_Over_lava.jpeg');
     Stone_green := TIcon.Create;
     Stone_green.LoadFromFile ('Stone_green.ico');
     Stone_orange := TIcon.Create;
     Stone_orange.LoadFromFile ('Stone_orange.ico');
     keypreview:=true;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
     TiBall.enabled := False;
     y_gedrueckt := False;
     x_gedrueckt := False;
    Form1.ImZeichenflaeche.Canvas.Draw (0,0,Startscreen);
    BtBall_bewegen.Caption := ' Start ';
    zLevel := 1;
    zSichtbar1:= 1;
    zSichtbar2:= 1;
    zSichtbar3:= 1;
    zSichtbar4:= 1;
    zSichtbar5:= 1;
    zSichtbar6:= 1;
    zSichtbar7:= 1;
    zSichtbar8:= 1;
    zSichtbar9:= 1;
    zSichtbar10:= 1;
    zSichtbar11:= 1;
    zSteine := 0;
    zPunkte := 0;
end;

procedure TForm1.BtBall_bewegenClick(Sender: TObject);
begin
    If TiBall.Enabled = True
     then TiBall.Enabled := false
      else TiBall.Enabled := True;
           zX := zX_Start;
           zY := zY_Start;
           ImPaddle_Leben1.Visible := True;
           ImPaddle_Leben2.Visible := True;
           ImPaddle_Leben3.Visible := True;
           zLevel := 1;
           zSichtbar1:= 1;
           zSichtbar2:= 1;
           zSichtbar3:= 1;
           zSichtbar4:= 1;
           zSichtbar5:= 1;
           zSichtbar6:= 1;
           zSichtbar7:= 1;
           zSichtbar8:= 1;
           zSichtbar9:= 1;
           zSichtbar10:= 1;
           zSichtbar11:= 1;
           zSteine := 0;
           zPunkte := 0;
       Label2.Caption:= IntToStr(zPunkte);
       
    If TiBall.Enabled = True
     then BtBall_bewegen.Caption := ' Neustart '
      else BtBall_bewegen.Caption := ' Start ';
    If TiBall.Enabled = true
      then zLevel :=1;
    If zPunkte =30
     then zLevel := 2;
    If zPunkte =60
     then zLevel := 3;
    if zLevel = 1
     then zBewegungX := +5; {Ball Bewegungen }
           zBewegungY := +5;
    zPunkte := 0;
    zX_Start := 0;
    zY_start := 250;
    zX := zX_Start; {Start Ball}
    zY := zY_start;
    zPaddleX := 250; {Paddle X Start}

end;

procedure TForm1.TiBallTimer(Sender: TObject);
begin
    If zLevel= 1 then begin
     Form1.ImZeichenflaeche.Canvas.Draw (0,0,Level1);
     Form1.ImZeichenflaeche.Canvas.Draw (zX,zY,Ball);
     Form1.ImZeichenflaeche.Canvas.Draw (zPaddleX,460,Paddle);
     zX := zX+zBewegungX ;
     zY := zY+zBewegungY ;
        if (y_gedrueckt = true)and (zPaddleX >= 0)
          then zPaddleX := zPaddleX -10;

        if (X_gedrueckt = true)and (zPaddleX <= ImZeichenflaeche.Width -65 )
          then zPaddleX := zPaddleX +10;

       If (zX <= 0) or (zX >= ImZeichenflaeche.Width -13)
         then zBewegungX := -zBewegungX;

       If (zY <= 0)
         then zBewegungY := -ZBewegungY;

       If (zY >= 447)and (zY >= 445 ) and (zX >= zPaddleX)
       and not (zX > zPaddleX + 65)
        then zBewegungY := -ZBewegungY;

       If (zY >= ImZeichenflaeche.Height + 2) and (ImPaddle_Leben3.Visible = True)
        then begin ImPaddle_Leben3.Visible := False;
            zY := zy_start;
            zX := zx_start;
          end;

       If (zY>=ImZeichenflaeche.Height+3) and (ImPaddle_Leben2.Visible = True)
        then begin ImPaddle_Leben2.Visible := False;
            zY := zy_start;
            zX := zx_Start;
          end;

       If (zY >= ImZeichenflaeche.Height+4)and (ImPaddle_Leben1.Visible = True)
        then begin ImPaddle_Leben1.Visible := False;
            zY := zy_start;
            zX := zx_Start;
          end;

        If (zY >= ImZeichenflaeche.Height+5) and (ImPaddle_Leben1.Visible = False)
         then begin
            Form1.ImZeichenflaeche.Canvas.Draw (0,0,Game_Over_lava);
            TiBall.enabled := False;
           end;

[color=#ff001f] if zSichtbar1 = 1
          then begin Form1.ImZeichenflaeche.Canvas.Draw (50,100,Stone_green);

          if (zY >= 95)and (zY >= 105 ) and (zX >= 50)
            and not (zX >= 85)and (zX >= 85)and not (zX >= 120)
             then zBewegungY := -ZBewegungY;
                     zPunkte := zPunkte +1;
                     zSichtbar1 := 0;
                     zSteine:= zSteine +1;
           end;

         if zSichtbar2 = 1
          then begin Form1.ImZeichenflaeche.Canvas.Draw (85,100,Stone_green);

            if (zY >= 95)and (zY >= 105 )
                then zBewegungY := -ZBewegungY;
                     zPunkte := zPunkte +1;
                     zSichtbar2 := 0;
                     zSteine:= zSteine +1;
             end;
         if zSichtbar3 = 1
          then begin Form1.ImZeichenflaeche.Canvas.Draw (120,100,Stone_green);

            if (zY >= 95)and (zY >= 105 ) and (zX >= 120)
              and not (zX >= 155)
                then zBewegungY := -ZBewegungY;
                     zPunkte := zPunkte +1;
                    zSichtbar3 := 0;
                    zSteine:= zSteine +1;
            end;
        if zSichtbar4 = 1
          then begin Form1.ImZeichenflaeche.Canvas.Draw (155,100,Stone_green);

            if (zY >= 95)and (zY >= 105 ) and (zX >= 155)
              and not (zX >= 190)
                then zBewegungY := -ZBewegungY;
                     zPunkte := zPunkte +1;
                    zSichtbar4 := 0;
                    zSteine:= zSteine +1;
           end;
         if zSichtbar5 = 1
          then begin Form1.ImZeichenflaeche.Canvas.Draw (190,100,Stone_green);

            if (zY >= 95)and (zY >= 105 ) and (zX >= 190)
              and not (zX >= 225)
                then zBewegungY := -ZBewegungY;
                     zPunkte := zPunkte +1;
                    zSichtbar5 := 0;
                    zSteine:= zSteine +1;
           end;
         if zSichtbar6 = 1
          then begin Form1.ImZeichenflaeche.Canvas.Draw (225,100,Stone_green);

            if (zY >= 95)and (zY >= 105 ) and (zX >= 225)
              and not (zX >= 260)
                then zBewegungY := -ZBewegungY;
                     zPunkte := zPunkte +1;
                     zSichtbar6 := 0;
                     zSteine:= zSteine +1;
             end;
         if zSichtbar7 = 1
          then begin Form1.ImZeichenflaeche.Canvas.Draw (260,100,Stone_green);

            if (zY >= 95)and (zY >= 105 ) and (zX >= 260)
              and not (zX >= 295)
                then zBewegungY := -ZBewegungY;
                     zPunkte := zPunkte +1;
                     zSichtbar7 := 0;
                     zSteine:= zSteine +1;
          end;
        if zSichtbar8 = 1
          then begin Form1.ImZeichenflaeche.Canvas.Draw (295,100,Stone_green);

            if (zY >= 95)and (zY >= 105 ) and (zX >= 295)
              and not (zX >= 330)
                then zBewegungY := -ZBewegungY;
                     zPunkte := zPunkte +1;
                     zSichtbar8 := 0;
                     zSteine:= zSteine +1;
          end;
       if zSichtbar9 = 1
          then begin Form1.ImZeichenflaeche.Canvas.Draw (330,100,Stone_green);
            if (zY >= 95)and (zY >= 105 ) and (zX >= 330)
              and not (zX >= 365)
                then zBewegungY := -ZBewegungY;
                     zPunkte := zPunkte +1;
                     zSichtbar9 := 0;
                     zSteine:= zSteine +1;
         end;
       if zSichtbar10 = 1
          then begin Form1.ImZeichenflaeche.Canvas.Draw (365,100,Stone_green);

            if (zY >= 95)and (zY >= 105 ) and (zX >= 365)
              and not (zX >= 400)
                then zBewegungY := -ZBewegungY;
                     zPunkte := zPunkte +1;
                     zSichtbar10 := 0;
                     zSteine:= zSteine +1;
         end;
         if zSichtbar11 = 1
          then begin Form1.ImZeichenflaeche.Canvas.Draw (400,100,Stone_green);

           if (zY >= 95)and (zY >= 105 ) and (zX >= 400)
             and not (zX >= 435)
               then zBewegungY := -ZBewegungY;
                     zPunkte := zPunkte +1;
                     zSichtbar11 := 0;
                     zSteine:= zSteine +1;
           end;
    if zSteine = 6
     then begin zSteine := 0 ;
                zSichtbar1:= 1;
                zSichtbar2:= 1;
                zSichtbar3:= 1;
                zSichtbar4:= 1;
                zSichtbar5:= 1;
                zSichtbar6:= 1;
                zSichtbar7:= 1;
                zSichtbar8:= 1;
                zSichtbar9:= 1;
                zSichtbar10:= 1;
                zSichtbar11:= 1;
        end; [/color]

  end;

end;


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
 begin
       if (key = ORD(89))
        then begin
             y_gedrueckt := true;
         end;
       if (key = ORD(88))
        then begin
             x_gedrueckt := true;
         end;
 end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
       if (key = ORD(89))
        then begin
             y_gedrueckt := false;
         end;
       if (key = ORD(88))
        then begin
             x_gedrueckt := false;
         end;
end;


end.
Ich hoffe ihr könnt mir helfen
PS das mit Level braucht ihr nicht zubeachten
EDIT:
HAb jetzt die ein wenig überarbeitete Version reingstellt naja trotzdem habe ich immer noch das PRoblem das einmal am ANfang gezeichnet die Blöcke gezeichnet werden aber dnach sofort wieder verschwinden.


Edit 2: So im Anhang ist jetzt Das Spiel soweit wie ich es hinbekommen habe könnt euch ja slebst den Fehler ansehn
Angehängte Dateien
Dateityp: rar arkanoid_277.rar (457,3 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat