Cách xây dựng trò chơi

Một phần của tài liệu Nghiên cứu các kỹ thuật thiết kế trò chơi và ứng dụng thiết kế trò chơi breakout (Trang 58 - 65)

CHƯƠNG 3: CÀI ĐẶT CHƯƠNG TRÌNH ỨNG DỤNG

3.3 Cách xây dựng trò chơi

Trò chơi gồm có 8 lớp: BitmapObject, Ball, Background, Paddle, Block, GameDirectDraw, frmSpaceBreakout, BlockGroup.

Xây dựng lớp Ball

- Định nghĩa bộ khởi dựng Ball + Thiết lập vị trí của bóng

+ Chiều rộng và chiều cao của bóng

public Ball(int intSpriteWidth, int intSpriteHeight, int intStartXPosition, int intStartYPosition)

{

//store the initial x y positions XPosition = intStartXPosition;

YPosition = intStartYPosition;

//initialise surface description with values from constructor InitialiseSurfaceDescription(intSpriteWidth, intSpriteHeight);

}

- Xây dựng phương thức Move xác định sự di chuyển của bóng.

public void Move(int intPaddleX, int intPaddleY, ref int intLives) {

1. If (bóng không chuyển động) then Bóng được đặt trên paddle 2. Else

{

2.1 If Bóng đập vào thành bên trái của cửa sổ then Bóng sẽ di chuyển phản xạ ngược lại

2.2 If Bóng đập vào thành bên phải của cửa sổ then Bóng sẽ di chuyển phản xạ ngược lại

2.3 If Bóng đập vào thành phía bên trên của cửa sổ then Bóng sẽ di chuyển phản xạ ngược lại

2.4 If Bóng đi xuống phía dưới của cửa sổ then {

2.4.1 Bóng sẽ không di chuyển.

2.4.2 Người chơi sẽ mất một mạng.

}

2.5 Lưu lại tọa độ của bóng dựa trên sự di chuyển của bóng }

}

- Xây dựng phương thức có tên là BallPaddleCollision để kiểm tra sự va chạm giữa của bóng và paddle.

- Xây dựng phương thức có tên là BallBlockCollision để kiểm tra sự va chạm giữa bóng và các khối

public void BallBlockCollision( BlocksGroup objBlocksGroup,

DirectDrawSurface7 objBackBuffer, DirectDrawSurface7 objBackground, ref int intCurrentScore)

{

for(int j =0; j < objBlocksGroup.Rows; j++) {

for(int i =0; i < objBlocksGroup.Columns; i++) {

Thiết lập giá trị hiện tại của từng khối như vị trí bắt đầu, chiều dài, chiều cao của khối đó

If (khối đó vẫn hoạt động và có sự va chạm với) then {

Sửa đổi lại trạng thái hoạt động của các khối .

Tăng điểm dựa vào hàng mà các khối xảy ra sự va chạm.

Cập nhật lại tổng số viên gạch còn lại trong level đó.

Hiển thị âm thanh khi bóng được tung lên.

} } } }

- Xây dựng phương thức InitialiseSound để khởi tạo âm thanh

+ Xác định bộ định dạng của loại âm thanh sẽ chứa trong bộ đệm thứ cấp, định dạng của bộ đệm trong DirectSound được miêu tả bằng cấu trúc WAVEFORMATEX .

+ Tạo bộ đệm thứ cấp với lời gọi DirectSoundCreate

+ Thiết lập mức độ hợp tác của DirectSound vì nó cho phép chúng ta truy cập tới thiết bị phần cứng.

- Xây dựng phương thức PlaySound để play âm thanh trong bộ đệm, phương thức này được cung cấp bởi đối tượng DirectSoundBuffer.

Xây dựng lớp Paddle

Sử dụng khai báo các biến để xét xem paddle có được di chuyển không, nếu di chuyển thì sang trái hay sang phải

- Định nghĩa phương thức khởi dựng

public Paddle(int intSpriteWidth, int intSpriteHeight, int intStartXPosition, int intStartYPosition)

{

this.XPosition = intStartXPosition;

this.YPosition = intStartYPosition;

InitialiseSurfaceDescription(intSpriteWidth, intSpriteHeight);

}

- Xây dựng phương thức Move để xác định sự di chuyển của Paddle public void Move()

{

if(m_intPaddleMovement == RIGHT_MOVEMENT)

{

if(XPosition < 550) {

XPosition += 10;

if (XPosition > 550) XPosition = 550;

} else {

m_intPaddleMovement = -1;

} }

else if(m_intPaddleMovement == LEFT_MOVEMENT) {

if(XPosition > 0) {

XPosition -= 10;

if (XPosition < 0) XPosition = 0;

} else

{

m_intPaddleMovement = -1;

} }

}

Xây dựng lớp Block

Khai báo các biến để lưu trữ trạng thái của khối đó, xem khối đó hoạt động hay là không hoạt động.

- Xây dựng phương thức khởi dựng Block

+ Thiết lập trạng thái hoạt động của Block.

+ Thiết lập tọa độ theo trục ox, oy của các khối.

+ Khởi tạo giá trị của bề mặt mô tả

public Block(int intSpriteWidth, int intSpriteHeight, int intStartXPosition, int intStartYPosition)

{

//set the block to active

this.ViewState = VIEW_STATE_ACTIVE;

//set x and y position of block this.XPosition = intStartXPosition;

this.YPosition = intStartYPosition;

//initialise surface description with values from constructor InitialiseSurfaceDescription(intSpriteWidth, intSpriteHeight);

}

Xây dựng lớp BlockGroup

- Định nghĩa bộ khởi dựng BlockGroup.

- Xây dựng phương thức để khởi tạo các khối.

- Xây dựng phương thức để reset lại trạng thái hoạt động của từng khối.

- Khởi tạo các khối bề mặt bằng cách xây dựng phương thức InitialiseSurface - Xây dựng phương thức BltFast nhằm chuyển đổi các khối tới bề mặt bộ đệm nền.

Xây dựng lớp BitmapOjbect

Trước khi sử dụng ứng dụng của DirectDraw để hiển thị lên màn hình, chúng ta phải tạo một bề mặt chính, nó sẽ cung cấp truy cập vào màn hình. Để thực hiện điều này, bạn sẽ tạo ra một mô tả bề mặt bằng cách sử dụng phương thức InitialiseSurfaceDescription() với tham số được truyền vào là chiều rộng và chiều cao của điểm ảnh.

Tiếp theo đó chúng ta đi xây dựng phương thức BltFast(), phương thức này sử dụng để vẽ các điểm ảnh lên trên bề mặt của bộ đệm nền, được cung cấp bởi DirectDrawSurface7().

Sau đó ta sẽ thiết lập giá trị cho các spite surface bằng cách sử dụng phương thức InitialiseSurface ().

Xây dựng lớp GameDirectDraw

- Chúng ta xây dựng phương thức DrawLevel, DrawLives, DrawScore để thiết lập vị trí và giá trị cho các Level, Lives, Score trong đó:

Level: cấp của trò chơi

Lives: số mạng để duy trì trò chơi

Score: lưu số điểm mà người chơi đạt được.

public void DrawLevel(string strText) {

//create rect for text background

RECT objBlackBackRECT = new RECT();

objBlackBackRECT.Left = 230;

objBlackBackRECT.Top = 460;

objBlackBackRECT.Bottom = 479;

objBlackBackRECT.Right = 350;

//draw text

DrawText(200, "Level: " + strText, 230, 463);

}

public void DrawLives(string strText) {

//create rect for text background

RECT objBlackBackRECT = new RECT();

objBlackBackRECT.Left = 140;

objBlackBackRECT.Top = 460;

objBlackBackRECT.Bottom = 479;

objBlackBackRECT.Right = 260;

//draw text

DrawText(200, "Lives: " + strText, 140, 463);

}

public void DrawScore(string strText) {

//create rect for text background

RECT objBlackBackRECT = new RECT();

objBlackBackRECT.Left = 50;

objBlackBackRECT.Top = 460;

objBlackBackRECT.Bottom = 479;

objBlackBackRECT.Right = 150;

//draw text

DrawText(200, "Score: " + strText, 50, 463);

}

public void DrawText(int intColor, string strText, int intX, int intY) {

//set text colour

this.BackBufferSurface.SetForeColor(intColor);

//draw text

this.BackBufferSurface.DrawText(intX, intY, strText, false);

}

- Xây dựng phương thức InitialiseDirectXFullScreen khởi tạo chế độ toàn màn hình.

Để xây dựng phương thức này đầu tiên chúng ta + Tạo đối tượng DirectDraw

+ Thiết lập mức độ hợp tác cho chế độ toàn màn hình.

+ Thiết lập chế độ hiển thị 640 x 480 bít với DirectDraw để xử lý các tần số làm tươi.

+ Định nghĩa các thông số hợp lệ cho các bề mặt và số lượng vùng đệm buffer được tạo.

+ Khởi tạo số lượng vùng đệm buffer được tạo là 1.

+ Và cuối cùng chúng ta tạo bộ đệm nền bằng cách sử dụng bề mặt chính.

- Xây dựng phương thức FlipBackBufferAndPrimary(), phương thức này làm cho bề mặt chính có thể trao đổi với bề mặt bộ đệm phụ.

Một phần của tài liệu Nghiên cứu các kỹ thuật thiết kế trò chơi và ứng dụng thiết kế trò chơi breakout (Trang 58 - 65)

Tải bản đầy đủ (PDF)

(69 trang)