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