|
Antwort |
Registriert seit: 21. Okt 2008 3 Beiträge |
#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:
Ich hoffe ihr könnt mir helfen
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. 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 |
Zitat |
Registriert seit: 3. Jun 2008 Ort: Offenburg 265 Beiträge Delphi 2009 Professional |
#2
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
|
Zitat |
Registriert seit: 21. Okt 2008 3 Beiträge |
#3
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 |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |