程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi游戲:乒乓球的代碼實現教程

Delphi游戲:乒乓球的代碼實現教程

編輯:Delphi

Delphi實現乒乓球小游戲:在游戲編寫思路方面,主要分為下面五個部分來實現:
1、游戲的開始和退出
控制游戲開始時的發球和退出時的釋放資源。
2、球拍和界面的更換
主要是設置雙方球拍、球桌、攔網和乒乓球的顏色。
3、電腦對手的設計
電腦根據乒乓球移動的位置調整自身的位置,以便能接住打過來的乒乓球。
4、玩家對球拍的控制
主要是通過↑、↓、←和→四個鍵來實現對球拍的控制,以便接住電腦打過來的乒乓球。
5、球速的設置
玩家根據自身的水平對乒乓球運移速度進行設置。

游戲運行界面:

Delphi乒乓球游戲

Delphi乒乓球游戲的編寫步驟:
1.選擇File|New|Application,新建一個應用程序。
2.添加控件和界面布局。向Form上添加1個RadioButton(乒乓球)、Shape(攔網)、MainMenu和TtrackBar,2個ColorDialog和Label,3個Panel(球拍和球桌)以及6個Timer等控件。
3、控件屬性設置。主要是設置RadioButton的Color和Panel1的Color一致(球和球桌,這樣的設置可以使效果更加逼真一點),TrackBar1的position為4(一個中級水平的難度),然後參照圖4-2設計主菜單。

Delphi乒乓球游戲的具體代碼:在編寫具體的代碼之前,要定義一些必要的全局變量。

var
Form1: TForm1;
vleft,vdown,vup,right:boolean; //檢測小球的運移
vasakult,paremalt:boolean; //檢測電腦的速度
bspeed:integer; //顯示小球的速度
patspeed:real; //球拍的速度
pat:boolean; //檢測球拍
moveup,movedown:boolean; //向上,向下移動
comspeed:real; //電腦的球拍
ballspeed:integer; //小球的原始速度
implementation

下面按照這個游戲的五個部分分別編寫代碼來實現。
(1)游戲的開始和退出。

procedure TForm1.NewGame1Click(Sender: TObject);
begin
//游戲的開始
patspeed:=0;
pat:=false;
ball.left:=panel2.left;
ball.top:=panel2.top+panel2.height div 2;
Timer3.enabled:=true;
computer.enabled:=true;
end;
procedure TForm1.Eit1Click(Sender: TObject);
begin
//游戲的退出。關閉所有時鐘,然後退出程序
Timer1.Enabled:=False;
Timer2.Enabled:=False;
Timer3.Enabled:=False;
Timer4.Enabled:=False;
Timer5.Enabled:=False;
computer.Enabled:=False;
Application.Terminate;
end;

(2)球拍和界面的更換

procedure TForm1.N2Click(Sender: TObject);
begin
If ColorDialog1.Execute Then //更換球台背景
Begin
ball.Color:=ColorDialog1.Color;
Panel1.Color:=ColorDialog1.Color;
end;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
If ColorDialog2.Execute Then //更換球拍顏色
Begin
Panel2.Color:=ColorDialog2.Color;
Panel3.Color:=ColorDialog2.Color;
Shape1.Brush.Color:=ColorDialog2.Color;
end;
end;

(3)電腦對手的設計和玩家對球拍的控制

procedure TForm1.computerTimer(Sender: TObject);
begin
{ panel1是球桌,panel2是電腦的球拍,panel3是你的球拍}
if ball.left<0 then
begin //超過左上端點
Timer2.enabled:=false;
Timer5.enabled:=false;
Timer4.enabled:=False;
Timer3.enabled:=false;
computer.enabled:=false;
Timer1.enabled:=true;
end;
if ball.left+ball.width>panel1.width then
begin //超過右下端點
Timer2.enabled:=false;
Timer5.enabled:=false;
Timer4.enabled:=False;
Timer3.enabled:=false;
computer.enabled:=false;
Timer1.enabled:=true;
end;
//根據球的方向來調整玩家的球拍位置
if vleft=true then
begin
if panel3.left<shape1.left then
panel3.left:=panel3.left+2;
end;
if right=true then
begin
if panel3.left>2 then
panel3.left:=panel3.left-2;
end;
if vdown=true then
begin
if panel3.top+panel3.height<panel1.height-25 then
panel3.top:=panel3.top+4;
end;
if vup=true then
begin
if panel3.top>2 then
panel3.top:=panel3.top-4;
end;
//電腦對手的智能調整
if ball.left>shape1.left then
begin
if panel2.top+panel2.height div 2<ball.top then
begin
if panel2.top+panel2.height<panel1.height-25 then
panel2.top:=panel2.top+4;
end;
if (panel2.top+panel2.height div 2>ball.top) then
begin
if panel2.top>4 then
panel2.top:=panel2.top-4;
end;
end;
bspeed:=4;
bspeed:=bspeed+Trunc(patspeed);
bspeed:=bspeed *10;
end;

(4)球速的設置

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
ballspeed:=trackbar1.Position; //乒乓球的運動速度
end;

此外,本例用到的6個Timer控件都有各自的作用,computer的作用上面已經介紹了。其余5個Timer的作用是:Timer1主管發球,Timer2~Timer5主管對乒乓球的左上移、右下移、右下移和左上移四個方向的控制。下面給出一個乒乓球右下移的操作代碼,其余幾個操作代碼類似。

procedure TForm1.Timer2Timer(Sender: TObject);
begin //乒乓球右下移
ball.left:=ball.left-ballspeed-trunc(patspeed);
ball.top:=ball.top+ballspeed+trunc(patspeed);
if patspeed>0 then patspeed:=patspeed-0.1;
if patspeed<0 then patspeed:=patspeed+0.1;
if ball.left>panel3.left+panel3.width then
begin
if ball.top+ball.height>panel1.height-ball.height then
begin
Timer2.enabled:=False;
Timer5.enabled:=false;
Timer4.enabled:=false;
Timer3.enabled:=true;
end;
end;

if (ball.left<panel3.left+panel3.width+4)and(ball.left>panel3.left)and
(ball.top<panel3.top+panel3.height)and
(ball.top>panel3.top) then
begin
if(movedown=false)and(moveup=false) then
begin
Timer5.enabled:=true;
Timer2.enabled:=false;
Timer3.enabled:=False;
Timer4.enabled:=false;
end;
if moveup=true then
begin
Timer5.enabled:=false;
Timer2.enabled:=false;
Timer3.enabled:=False;
Timer4.enabled:=true;
end;
if movedown=true then
begin
Timer5.enabled:=true;
Timer2.enabled:=false;
Timer3.enabled:=False;
Timer4.enabled:=false;
end;
end;
end;

一個比較完整的游戲開發,其代碼一般是比較復雜的。而且程序設計時最好能遵循模塊化的思想,一個特定的模塊完成的就是一個特定的游戲功能。這個游戲雖然代碼比較長,但是不少部分是類似的。因此,在代碼編寫過程中,如果明白游戲設計思想,代碼編寫是不會費太大的力氣的。由此可以總結一些游戲設計的特點:
1、游戲設計思想比游戲代碼重要;
2、游戲代碼應該在游戲思想的指導下進行模塊設計;
3、游戲的測試也是一個不容忽視的環節;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved