Entwickler-Ecke

Sonstiges (Delphi) - standart ping pong


teddy500 - Sa 17.03.07 16:17
Titel: standart ping pong
hi leute,

habe ein problem.
bin nicht der beste in informatik hab aber 5. prüfungsfach und muss ein programm schreiben.
habe mir überlegt ping pong zu nehmen.

PROBLEM: wie bewege ich das image über die tastatur ? (soll der schläger sein)


.....................bitte helft mir............


Xion - Sa 17.03.07 16:20

OnKeyPress=>wenns <- ist dann Img.Left-1, bei -> +1 (<- = 37 , -> = 39)

:motz: :eyecrazy: :bawling: Informatik als 5.prüfungsfach :bawling: bei uns gibts nichtmal nen Grundkurs


hui1991 - Sa 17.03.07 18:28

Ich würde net Ping Pong nehmen.
Habe mich daran versucht, aber naja...
Versuche doch lieber nen Memory mit Karten auf und zu decken ^^
8x8 mit 32 verschiedenen Bildern wovon 2 immer gleich sind.
Das denke ich geht mit einem Array wenn du ein Object erstellst ganz einfach.
TKarte oder so.
Davon machste ein Array und noch a weng Programmieren.
Den style verbessern und tada haste was ganz feines.

Naja du deiner eigentlichen Frage ist es am besten, wenn du die Tasten mit KeyDown abfängst.
Sonst fällt mir nichts ein. Oder nach einer bestimmten Zeit schauen ob die entsprechende Taste gedrückt wurde.

MfG
hui1991


teddy500 - Mo 19.03.07 10:42

ey jungs ganz ganz langsam....
ich bin ahnungslos!!!
wie mache ich dass mit dem Image???
meine form ist mein spielfeld.
und hier eine kleine skizze wie es aussehen soll.






Bitte um hilfe!!!!!!!!!!1


ZeitGeist87 - Di 20.03.07 18:11

Hallo!

Da ich grad mein Delphi installier, ich aber trotzdem antworten will und ich nicht weiß, ob das Image ein OnKey-Press-Ereignis hat:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TImage.onKeyPress(Key: Char; Sender: TObject);
const pos: integer = 2;
begin;
 { Oben und unten einen Rand lassen - würd ich so machen }
 
 { nach Oben }
 if key = VK_UP {don´t know} then
 begin
  //Bild nach oben bewegen
  if MeinBild.top+pos >= (MeinForm.Top+5 { +5 entspricht Rand }then
   MeinBild.top:= MeinBild.top + pos; 
 end;

 { nach Unten }
 if key = VK_DOWN {don´t know} then
 begin
  //Bild nach oben bewegen
  if (MeinBild.top+MeinBild.height)-pos <= (MeinForm.Height+5 {= Rand }then
   MeinBild.top:= MeinBild.top - pos; 
 end;
 
end;


Wenn du kurz wartest, programmier ich schnell n Beispiel

LG
Stefan


teddy500 - Di 20.03.07 18:50
Titel: DER DANK
herzlichen dank für deinen quelltext!
wenn du das mit bsp hinkriegebn würdest waere ich dir sehr sehr dankbar.....
muss jetzt leider weg, aber bin spätestens morgen wieder on.

bis dann viel spaß noch beim programmieren.....


Shorty - Di 20.03.07 20:02

Und hättest du mal nach Suche in: Delphi-Forum PONG gesucht, hättest du meinen Pong-Klon in der Open-Source-Spalte entdeckt, das ist soweit komplett und mit Quelltext :wink:


teddy500 - Mi 21.03.07 15:23

alles klar ich danke dir werd mir das mal angucken.
hoffentlich werd daraus schlau...
falls nicht hoert ihr bald wieder was von mir....



danke


Fighter#1 - Mi 21.03.07 15:53
Titel: Re: standart ping pong
user profile iconteddy500 hat folgendes geschrieben:
bin nicht der beste in informatik hab aber 5. prüfungsfach und muss ein programm schreiben.
habe mir überlegt ping pong zu nehmen.


Nur so, Info 5. Prüfungsfach!! GEIL! Echt ne tolle Sache! Aber dann PingPong ??? Du bist doch auf dem Gymnasium?
Also PingPong kann jeder nach spätestens einem halben Jahr selber schreiben!
Lass dir lieber was komplexeres einfallen!


teddy500 - Fr 23.03.07 13:34
Titel: !!!VERY IMPORTANT!!!
hey jungs neues bzw altes problem!!
ich zeig euch die unit und stell dazu ein paar fragen.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
type
  TForm1 = class(TForm)
    Image1: TImage;
    Balken_1: TImage;
    Balken_2: TImage;
    Ball: TImage;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  var Key: Word;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Canvas.Brush.Color:=clgreen;
  Image1.Canvas.rectangle(0,0,Image1.Width,Image1.Height);
  Balken_1.Canvas.Brush.Color := clblack;
  Balken_1.Canvas.Rectangle(0,0,Balken_1.Width,Balken_1.Height);
  Balken_2.Canvas.Brush.Color := clblack;
  Balken_2.Canvas.Rectangle(0,0,Balken_2.Width,Balken_2.Height);
  ball.Canvas.Brush.Color:=clskyblue;
  ball.canvas.Rectangle(0,0,ball.Width,ball.height);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
 begin
    case Key of
    68 : timer1.Enabled:=true;
    87 : begin
          if balken_1.top >= Image1.top then
         Balken_1.Top := Balken_1.Top - 10 ;   //Taste W
         end  ;
    83 : begin

          if (Balken_1.top + Balken_1.height) <= (Image1.top + Image1.height) then
         Balken_1.Top := Balken_1.Top + 10;   //Taste S
         end;
    VK_UP : begin
              if balken_2.Top >= Image1.Top then
              Balken_2.Top := Balken_2.Top - 10;
            end;
    VK_DOWN : begin
               if (Balken_2.Top + balken_2.Height) <= (Image1.Top + Image1.Height) then
                 Balken_2.Top := Balken_2.Top + 10;
              end;
    VK_ESCAPE : close;
  end;
end;
"SO AB HIER GEHTS LOS!"
procedure TForm1.Timer1Timer(Sender: TObject);
var i : integer;
begin
i:=10;
     While ((ball.Left)+(ball.Width)) < (balken_2.left) do
      ball.left:=ball.left + (i) ;
if ((ball.Left)+(ball.Width)) >= (balken_2.left) then
 begin
      repeat
    ball.left:=ball.left - i ;
    ball.Top:=ball.Top - 0;
    until (ball.left) < ((balken_1.left)+(balken_1.Width));
end;
end;
end.



SO 1) WIE SAG ICH DAS DER BALL IMMER AM SCHLÄGER(BALKEN_1) STARTET????
2) ABPRALLEN AM SCHLÄGER UND ABPRALLEN AN WAND????
3) ABBRUCH BEDINGUNG & NEU START???

WENN IHR MIR DA HELFEN KÖNNTET DAS WÄR SEHR NETT

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


ZeitGeist87 - Fr 23.03.07 13:37

Drück mal auf Capslock und verwende die delphi Tags :)


teddy500 - Fr 23.03.07 13:38

sorry der ball soll nicht immer an schläger 1 starten sondern wenn der rechte schläger den ball nicht bekommt dann soll der ball am 2. schläger starten???


hilffe


teddy500 - Fr 23.03.07 13:40


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Balken_1: TImage;
    Balken_2: TImage;
    Ball: TImage;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  var Key: Word;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Canvas.Brush.Color:=clgreen;
  Image1.Canvas.rectangle(0,0,Image1.Width,Image1.Height);
  Balken_1.Canvas.Brush.Color := clblack;
  Balken_1.Canvas.Rectangle(0,0,Balken_1.Width,Balken_1.Height);
  Balken_2.Canvas.Brush.Color := clblack;
  Balken_2.Canvas.Rectangle(0,0,Balken_2.Width,Balken_2.Height);
  ball.Canvas.Brush.Color:=clskyblue;
  ball.canvas.Rectangle(0,0,ball.Width,ball.height);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
 begin
    case Key of
    68 : timer1.Enabled:=true;
    87 : begin
          if balken_1.top >= Image1.top then
         Balken_1.Top := Balken_1.Top - 10 ;   //Taste W
         end  ;
    83 : begin
          if (Balken_1.top + Balken_1.height) <= (Image1.top + Image1.height) then
         Balken_1.Top := Balken_1.Top + 10;   //Taste S
         end;
    VK_UP : begin
              if balken_2.Top >= Image1.Top then
              Balken_2.Top := Balken_2.Top - 10;
            end;
    VK_DOWN : begin
               if (Balken_2.Top + balken_2.Height) <= (Image1.Top + Image1.Height) then
                 Balken_2.Top := Balken_2.Top + 10;
              end;
    VK_ESCAPE : close;
  end;



end;
procedure TForm1.Timer1Timer(Sender: TObject);
var i : integer;
begin
i:=10;
     while ((ball.Left)+(ball.Width)) < (balken_2.left) do

    ball.left:=ball.left + (i) ;


if ((ball.Left)+(ball.Width)) >= (balken_2.left) then
 begin
      repeat
    ball.left:=ball.left - i ;
    ball.Top:=ball.Top - 0;

    until (ball.left) < ((balken_1.left)+(balken_1.Width));


//Startbedingung wo ist der Ball???
//abprallen

end;

end;


end.


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt