AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Arkanoid ähnliches Spiel für Schuluntericht
Thema durchsuchen
Ansicht
Themen-Optionen

Arkanoid ähnliches Spiel für Schuluntericht

Ein Thema von umpljn · begonnen am 4. Nov 2008 · letzter Beitrag vom 5. Nov 2008
Antwort Antwort
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
Benutzerbild von Mikescher
Mikescher

Registriert seit: 3. Jun 2008
Ort: Offenburg
265 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Arkanoid ähnliches Spiel für Schuluntericht

  Alt 4. Nov 2008, 20:04
Also richtig verstehen tue ich dein Problem nicht richtig hier ei paar Fragen :

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

2 : Was bedeutet es der Computer dreht durch

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


Edit : Willkommen in der DP
Mike
Operation gelungen, Patient tot.

http://www.mikescher.com
  Mit Zitat antworten Zitat
umpljn

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

Re: Arkanoid ähnliches Spiel für Schuluntericht

  Alt 4. Nov 2008, 20:12
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
  Mit Zitat antworten Zitat
umpljn

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

Re: Arkanoid ähnliches Spiel für Schuluntericht

  Alt 5. Nov 2008, 17:45
So Problem hat sich gelöst habe einfach ein not vergessen bei den zSichtbar
  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 02:01 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