Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Arkanoid ähnliches Spiel für Schuluntericht (https://www.delphipraxis.net/123575-arkanoid-aehnliches-spiel-fuer-schuluntericht.html)

umpljn 4. Nov 2008 19:50


Arkanoid ähnliches Spiel für Schuluntericht
 
Liste der Anhänge anzeigen (Anzahl: 1)
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

Mikescher 4. Nov 2008 20:04

Re: Arkanoid ähnliches Spiel für Schuluntericht
 
Also richtig verstehen tue ich dein Problem nicht richtig hier ei paar Fragen : :zwinker:

1 : Was ist Arkanoid eigentlich für ein Spiel (kenn ich nicht)

2 : Was bedeutet es der Computer dreht durch :gruebel:

3 : Was genau ist denn nun deine Frage

MfG Mikescher

PS: Lass dich von mir nicht irritieren aber ich bin Abends immer ein bischen schwer von Begriff :mrgreen:
:nerd: :freak: :nerd:

:dancer: Edit : Willkommen in der DP :dancer2:

umpljn 4. Nov 2008 20:12

Re: Arkanoid ähnliches Spiel für Schuluntericht
 
Ja ok zu FRage 1 : Das Spielprnzip ist es mit einem Schläger Steine mit einem Ball zutreffen glaube so ein Spiel gibt es auch auf dem Ipod
Zu Frage2: Das mit dem Durchdrehen war vielleicht übertireben naja also das Programm macht nicht das was es tun soll sobald mit dem unteren quellcode die steine eingefügt werden sollen springt der Ball im Zick Zack hin und her ohne wirklichen sinn obwohl das ohne den quellcode also ohne stein super ging.

zu Frage 3: Wie kann ich nun die Steine so einfügen, samt blocks usw, dass der nicht diese Zock Zack bewegungen macht

umpljn 5. Nov 2008 17:45

Re: Arkanoid ähnliches Spiel für Schuluntericht
 
So Problem hat sich gelöst habe einfach ein not vergessen bei den zSichtbar


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 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