NetVision-Technik

Zur?ck   NetVision-Technik > Forum > Programmierung > Delphi / Pascal

Antwort
 
Themen-Optionen Ansicht
Alt 20.02.2009, 22:40   #1
Pong Game
Bluesteel Bluesteel ist offline 20.02.2009, 22:40

Hi hier mal nen kleines Pong Game Für 2 Spieler, Steuerung: W/S Spieler1, Hoch/Runter Spieler2, Pause für Pause und ESC = Ende. Anschaulich auch die Anbindung an DirectDraw zum Umschalten in 320x200 Bildpunkte bei 32Bit Farbtiefe.



hier nun mal der code und der rest dann im anhang

Code:
unit PONG1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure IncreasePoints(Player1,Player2: boolean);
    procedure ProcessEscape;
    procedure ProcessPlayer1Up;
    procedure ProcessPlayer1Down;
    procedure ProcessPlayer2Up;
    procedure ProcessPlayer2Down;
    procedure ProcessComputer;
    procedure ProcessPause;
    procedure DrawPaddle(Player: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  Points1: integer = 0;
  Points2: integer = 0;
  Player1Top: integer = 0;
  Player2Top: integer = 0;
  BallX: integer = 0;
  BallY: integer = 0;
  DeltaX: integer = 0;
  DeltaY: integer = 0;
  MinX: integer = 0;
  MaxX: integer = 0;
  MinY: integer = 0;
  MaxY: integer = 0;

procedure BeepEx(dwFreq,dwDuration: integer); stdcall; external 'kernel32.dll' name 'Beep';

procedure TForm1.IncreasePoints(Player1,Player2: boolean);
begin
  if Player1 then Inc(Points1);
  if Player2 then Inc(Points2);
  Label1.Caption:= Format('%d : %d',[Points1,Points2]);
end;

procedure TForm1.ProcessEscape;
begin
  if GetAsyncKeystate(VK_ESCAPE) = 0 then Exit;
  BeepEx(400,100);
  Application.Terminate;
end;

procedure TForm1.ProcessPlayer2Up;
begin
  if GetAsyncKeystate(VK_UP) = 0 then Exit;
  if Player2Top <= Label1.Height then Exit;
  Dec(Player2Top,2);
  DrawPaddle(2);
end;

procedure TForm1.ProcessPlayer2Down;
begin
  if GetAsyncKeystate(VK_DOWN) = 0 then Exit;
  if Player2Top >= ClientHeight-20 then Exit;
  Inc(Player2Top,2);
  DrawPaddle(2);
end;

procedure TForm1.ProcessPlayer1Up;
begin
  if GetAsyncKeystate(Ord('W')) = 0 then Exit;
  if Player1Top <= Label1.Height then Exit;
  Dec(Player1Top,2);
  DrawPaddle(1);
end;

procedure TForm1.ProcessPlayer1Down;
begin
  if GetAsyncKeystate(Ord('S')) = 0 then Exit;
  if Player1Top >= ClientHeight-20 then Exit;
  Inc(Player1Top,2);
  DrawPaddle(1);
end;

procedure TForm1.DrawPaddle(Player: Integer);
var
  dx,dy: integer;
  pr: PRect;
begin
  if Player = 1 then begin
    dx:= 8;
    dy:= Player1Top;
  end else begin
    dx:= ClientWidth-14;
    dy:= Player2Top;
  end;
  New(pr);
  pr^:= Rect(dx-1,Label1.Height-1,dx+5,ClientHeight);
  InvalidateRect(Handle,pr,False);
  Canvas.Brush.Color:= clBlack;
  Canvas.FillRect(pr^);
  Canvas.Brush.Color:= clWhite;
  Canvas.FillRect(Rect(dx,dy,dx+5,dy+19));
  ValidateRect(Handle,pr);
  Dispose(pr);
end;

procedure TForm1.ProcessComputer;
var
  Lose1,Lose2: boolean;
  pr: PRect;
begin
  DrawPaddle(2);
  Inc(BallX, DeltaX);
  Inc(BallY, DeltaY);
  Lose1:= False;
  Lose2:= False;
  if BallX <= MinX then begin
    Lose1:= (BallY < Player1Top-8) or (BallY > Player1Top+19);
    BallX:= MinX;
    DeltaX:= DeltaX*(-1);
  end;
  if BallX >= MaxX then begin
    Lose2:= (BallY < Player2Top-8) or (BallY > Player2Top+19);
    BallX:= MaxX;
    DeltaX:= DeltaX*(-1);
  end;
  if BallY <= MinY then begin
    BallY:= MinY;
    DeltaY:= DeltaY*(-1);
  end;
  if BallY >= MaxY then begin
    BallY:= MaxY;
    DeltaY:= DeltaY*(-1);
  end;
  New(pr);
  pr^:= Rect(MinX,MinY,MaxX+7,MaxY+7);
  InvalidateRect(Handle,pr,False);
  Canvas.Brush.Color:= clBlack;
  Canvas.FillRect(pr^);
  Canvas.Brush.Color:= clWhite;
  Canvas.FillRect(Rect(BallX,BallY,BallX+7,BallY+7));
  ValidateRect(Handle,pr);
  Dispose(pr);
  IncreasePoints(Lose2,Lose1);
  if Lose1 or Lose2 then BeepEx(400,200);
end;

procedure TForm1.ProcessPause;
begin
  if GetAsyncKeyState(VK_PAUSE) = 0 then Exit;
  Label1.Caption:= 'PAUSED';
  Application.ProcessMessages;
  repeat
    Sleep(1);
  until GetAsyncKeyState(VK_PAUSE) = 0;
  repeat
    Sleep(1);
  until GetAsyncKeyState(VK_PAUSE) <> 0;
  repeat
    Sleep(1);
  until GetAsyncKeyState(VK_PAUSE) = 0;
  Label1.Caption:= Format('%d : %d',[Points1,Points2]);
  Application.ProcessMessages;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  dd: IDirectDraw;
  res: HResult;
begin
  Width:= 320;
  Height:= 200;
  Timer1.Enabled:= False;
  Label1.Caption:= '0 : 0';
  Left:= 0;
  Top:= 0;
  Player1Top:= (ClientHeight-Label1.Height-20) shr 1;
  Player2Top:= (ClientHeight-Label1.Height-20) shr 1;
  BallX:= ClientWidth shr 1;
  BallY:= ClientHeight shr 1;
  DeltaX:= 2;
  DeltaY:= 2;
  MinX:= 14;
  MaxX:= ClientWidth-22;
  MinY:= Label1.Height;
  MaxY:= ClientHeight-8;
  Cursor:= crNone;
  res:= DirectDrawCreate(nil,dd,nil);
  if res = DD_OK then dd.SetDisplayMode(320,200,32);
  Label1.Caption:= 'READY ...';
  Application.ProcessMessages;
  Sleep(5000);
  while not Application.Terminated do begin
    ProcessPlayer1Up;
    ProcessPlayer1Down;
    ProcessPlayer2Up;
    ProcessPlayer2Down;
    ProcessEscape;
    ProcessComputer;
    ProcessPause;
    Sleep(1);
    Application.ProcessMessages;
  end;
end;

end.
viel spaß bei Greez Bluesteel

Angeh?ngte Dateien
Dateityp: rar pong.rar (3,3 KB, 5x aufgerufen)

__________________




 
Benutzerbild von Bluesteel
Bluesteel
Super-Moderator
Letzte Erfolge
Registriert seit: 27.05.2008
Ort: zu hause
Beitr?ge: 2.029
Abgegebene Danke: 510
Erhielt 302 Danke für 52 Beiträge
Downloads: 48
Uploads: 2
Nachrichten: 1565
Hits: 23327
Mit Zitat antworten
Folgende 4 Benutzer sagen Danke zu Bluesteel für den nützlichen Beitrag:
$iMpLy (22.02.2009), destination (21.02.2009), DoLo (21.02.2009), LOL (21.02.2009)
Alt 21.02.2009, 14:14   #2
AKFourtySeven
Gesperrt
 
Benutzerbild von AKFourtySeven
 
Registriert seit: 05.02.2009
Beitr?ge: 148
Abgegebene Danke: 13
Erhielt 56 Danke für 7 Beiträge
Downloads: 0
Uploads: 0
Nachrichten: 45
Renommee-Modifikator:
0 AKFourtySeven ist jedem bekanntAKFourtySeven ist jedem bekanntAKFourtySeven ist jedem bekanntAKFourtySeven ist jedem bekanntAKFourtySeven ist jedem bekanntAKFourtySeven ist jedem bekannt
Standard

kannst du das auch fertig kompiliert zur verfügung stellen !?
AKFourtySeven ist offline   Mit Zitat antworten Nach oben
Alt 21.02.2009, 14:40   #3
Cerberus
Administrator
 
Benutzerbild von Cerberus
 
Registriert seit: 07.03.2008
Ort: 3. Bit Links hinter dem Kernel
Alter: 49
Beitr?ge: 9.639
Abgegebene Danke: 1.121
Erhielt 4.499 Danke für 458 Beiträge
Downloads: 18
Uploads: 9
Nachrichten: 2258
Renommee-Modifikator:
10 Cerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes Ansehen
Standard

das geht nicht, da ich die Lizenz von Borland nicht habe, kompilierte Anwendungen vertreiben zu dürfen ...

Sorry
__________________

Fragen gehören ins Forum - und NICHT in mein Postfach !
Ich erteile KEINEN Privatunterricht über e-mail und PN !

Hackliste Br. NV nach Threadstarter u. Aktualität <--+--> Liste Hacks Bereich NV Alphabethisch
Cerberus ist offline   Mit Zitat antworten Nach oben
Alt 21.02.2009, 14:47   #4
AKFourtySeven
Gesperrt
 
Benutzerbild von AKFourtySeven
 
Registriert seit: 05.02.2009
Beitr?ge: 148
Abgegebene Danke: 13
Erhielt 56 Danke für 7 Beiträge
Downloads: 0
Uploads: 0
Nachrichten: 45
Renommee-Modifikator:
0 AKFourtySeven ist jedem bekanntAKFourtySeven ist jedem bekanntAKFourtySeven ist jedem bekanntAKFourtySeven ist jedem bekanntAKFourtySeven ist jedem bekanntAKFourtySeven ist jedem bekannt
Standard

also muss ich mir tatsächlich das Delphi SDK installieren ?

kann man das nicht hintenrum über rapidshare schnell machen ?
AKFourtySeven ist offline   Mit Zitat antworten Nach oben
Alt 21.02.2009, 14:53   #5
Cerberus
Administrator
 
Benutzerbild von Cerberus
 
Registriert seit: 07.03.2008
Ort: 3. Bit Links hinter dem Kernel
Alter: 49
Beitr?ge: 9.639
Abgegebene Danke: 1.121
Erhielt 4.499 Danke für 458 Beiträge
Downloads: 18
Uploads: 9
Nachrichten: 2258
Renommee-Modifikator:
10 Cerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes AnsehenCerberus genießt hohes Ansehen
Standard

Ihr könnt das gern per Mail abwickeln -- aber bitte nicht übers Forum -- die sind da recht drastisch hinter her ....

leider ....

Oder es muß mit der Kostenlosen Version kompiliert werden -- hat aber ne Meldung zur Folge in der EXE
__________________

Fragen gehören ins Forum - und NICHT in mein Postfach !
Ich erteile KEINEN Privatunterricht über e-mail und PN !

Hackliste Br. NV nach Threadstarter u. Aktualität <--+--> Liste Hacks Bereich NV Alphabethisch
Cerberus ist offline   Mit Zitat antworten Nach oben
Alt 21.02.2009, 17:49   #6
Bluesteel
Super-Moderator
Letzte Erfolge
 
Benutzerbild von Bluesteel
 
Registriert seit: 27.05.2008
Ort: zu hause
Beitr?ge: 2.029
Abgegebene Danke: 510
Erhielt 302 Danke für 52 Beiträge
Themenstarter Themenstarter
Downloads: 48
Uploads: 2
Nachrichten: 1565
Renommee-Modifikator:
10 Bluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes Ansehen
Standard

das ist richtig mit der kostenlosen Version sollte es gehen aber wie cerb schon sagte mit meldung in der exe datei
__________________



Bluesteel ist offline   Mit Zitat antworten Nach oben
Alt 21.02.2009, 18:32   #7
LOL
Erfahrener Benutzer
Punkte: 4.654, Level: 43 Punkte: 4.654, Level: 43 Punkte: 4.654, Level: 43
Levelaufstieg: 52% Levelaufstieg: 52% Levelaufstieg: 52%
Aktivität: 0% Aktivität: 0% Aktivität: 0%
Letzte Erfolge
 
Benutzerbild von LOL
 
Registriert seit: 02.06.2008
Beitr?ge: 331
Abgegebene Danke: 290
Erhielt 3 Danke für 1 Beitrag
Downloads: 11
Uploads: 0
Nachrichten: 4
Renommee-Modifikator:
352 LOL befindet sich auf einem aufstrebenden Ast
Standard

Das doch egal wenn nur ne Meldung oder so ist.

Würde es auch gerne mal Testen =)

Mfg
LOL ist offline   Mit Zitat antworten Nach oben
Alt 21.02.2009, 18:34   #8
Bluesteel
Super-Moderator
Letzte Erfolge
 
Benutzerbild von Bluesteel
 
Registriert seit: 27.05.2008
Ort: zu hause
Beitr?ge: 2.029
Abgegebene Danke: 510
Erhielt 302 Danke für 52 Beiträge
Themenstarter Themenstarter
Downloads: 48
Uploads: 2
Nachrichten: 1565
Renommee-Modifikator:
10 Bluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes AnsehenBluesteel genießt hohes Ansehen
Standard

dann runterladen kompilieren und spaß haben
__________________



Bluesteel ist offline   Mit Zitat antworten Nach oben
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, G?ste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beitr?ge zu antworten.
Es ist Ihnen nicht erlaubt, Anh?nge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beitr?ge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:19 Uhr.


Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Template-Modifikationen durch TMS