ĐĂNG TIN
logo
Online:
Visits:
Stories:
Profile image
Tác giả: nguyenhaiblog
Trang tin cá nhân | Bài đã đăng
Lượt xem

Hiện tại:
1h trước:
24h trước:
Tổng số:
[Đồ hoạ Máy tính] Tetris 3D
Thursday, January 9, 2014 21:15
% of readers think this story is Fact. Add your two cents.


XÂY DỰNG CHƯƠNG TRÌNH TRÒ CHƠI

XẾP HÌNH 3D (TETRIS 3D) BẰNG OPENGL

Trích:

Báo cáo môn Đồ hoạ Máy tính

Nguyễn Trí Hải, MSSV: 11520094

Nguyễn Hoàng Nghĩa, MSSV: 11520603

ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

KHOA KHOA HỌC MÁY TÍNH

OPENGL VÀ TRÒ CHƠI XẾP HÌNH 3D (TETRIS 3D)

1. OpenGL.

        1.1. OpenGL và ứng dụng.

“OpenGL là một thư viện mã nguồn mở về các thủ tục đã được chuẩn hoá đối với các tính năng ba chiều, mỗi tính năng lại bao gồm các phương trình toán học và những phép tính phức tạp.

OpenGL có những thủ tục phục vụ cho các tính năng đồ họa thông thường như: xây dựng các bề mặt ba chiều từ những tam giác cực nhỏ, tạo cho bề mặt một hình nền hay những cạnh trơn nhẵn. Thay vì phải viết những đoạn mã riêng hay tạo lại và thay đổi đặc tả của các phép tính quan trọng mỗi khi cần đến những tính năng như vậy, các nhà phát triển giờ đây chỉ cần gọi thủ tục có sẵn trong OpenGL.”

Computerworld

        OpenGL được thiết kế nhằm thỏa mãn mục đích chính sau:

-      Che giấu sự tương tác phức tạp với các bộ máy xúc tiến 3 chiều bằng cách đưa ra một giao diện lập trình thống nhất.

-      Che giấu các sự khác biệt giữa các phần cứng 3 chiều bằng cách bắt buộc các phần cứng tương thích OpenGL phải hỗ trợ tất cả các chức năng của giao diện OpenGL. Nếu cần, các chức năng chưa được hỗ trợ đầy đủ bởi phần cứng có thể được hỗ trợ bằng phần mềm.

Một số trò chơi được viết với OpenGL: America’s Army, Call of Duty, City of Heroes, City of Villains.

        1.2. Thư viện GLUT.

GLUT (OpenGL Utility Toolkit) là thư viện quản lí cửa sổ, các thao tác nhập xuất như bàn phím, chuột, menu đơn. Cũng như các API liên quan tới việc giao tiếp của người dùng với OpenGL. Nhờ đó giúp người lập trình đễ dàng hơn khi tiếp cận OpenGL.

2. Trò chơi xếp hình 3D (Tetris 3D).

        2.1. Trò chơi xếp hình (Tetris).

        a) Giới thiệu:

Tetris (tiếng Nga: Тетрис) là một trò chơi điện tử đầu tiên được thiết kế và phát triển bởi Alexey Pajitnov.

Một trong những trò chơi xếp hình (Tetris) đầu tiên.

        Trò chơi này (hay một biến thể của nó) được bán cho hầu hết mọi máy trò chơi điện tử và hệ điều hành máy tính, cũng như trong các máy tính đồ họa, điện thoại di động, máy nghe nhạc di động.

Phiên bản đầu tiên của trò xếp hình được xây dựng trên không gian 2D. Trò chơi được xây dựng bởi các tetrimino có dạng gồm 4 khối vuông xếp cạnh nhau. Có 7 dạng tetromino khác nhau.

 

Các dạng tetromino.

        b) Giao diện trò chơi:

Một khối tetromino ngẫu nhiên sẽ rơi từ trên xuống trong một vùng hình chữ nhật đứng (vùng chơi). Mục tiêu của trò chơi là thao tác các khối tetromino này trước khi nó rơi xuống đáy cùa vùng chơi, sao cho có thể tạo được một dòng ngang của vùng chơi được lấp bởi các tetromino. Các thao tác có thể được thực hiện là: Di chuyển sang 2 bên trong vùng chơi và xoay các khối 1 góc 90o. Sau khi một dòng ngang được lấp nó sẽ được xoá, đồng thời các khối vuông thuộc các tetromino trước đó đã rơi phía trên dòng đó sẽ rơi xuống một dòng (thay cho dòng đã xoá). Khi mà một số lượng dòng nhất định được xoá, trò chơi sẽ tăng cấp độ: Các khối tetromino sẽ rơi nhanh hơn.

Trò chơi kết thúc khi các khối tetromino lấp cao đến trên cùng của hình chư nhật, khi đó không có khối tetromino nào có thể rơi xuống được nữa. Một cách khác để kết thúc trò chơi khi vượt qua giới hạn của trò chơi (Cấp độ, điểm số).

Một số phiên  bản sau này có mở rộng thêm về cách chơi nhưng cơ bản vẫn xoay quanh cách chơi ban đầu.

        2.2. Trò chơi xếp hình 3D( Tetris).

        a) Giới thiệu:

Trò chơi xếp hình 3D (Tetris3D).

        Một trong các phiên bản mở rộng của trò chơi xếp hình truyền thống (Tetris) là trò chơi xếp hình 3D (Tetris 3D). Với khả năng tương tác 3 chiều, người chơi sẽ phải dùng nhiều khả năng tưởng tưởng tượng và xử lý hơn với phiên bản truyền thống.

        b) Giao diện trò chơi.

Với giao diện và các chơi tương tự như với cách chơi truyền thống, các đối tượng của trò chơi sẽ mở rộng về không gian 3 chiều.

Vùng chơi thay đổi thành một khối hình hộp chữ nhật đứng (cage). Các tetromino mở rộng (gọi là các shape) được xây dựng bởi các khối lập phương (các block). Các shape cũng được tạo bởi 4 block xếp cạnh nhau theo các chiều. Mục tiêu của trò chơi là lấp đầy một mặt phẳng ngang cao 1 block thuộc vùng chơi. Các thao tác với shape được chấp nhận là: Xoay 90o theo cả 3 chiều (3 trục Ox, Oy, Oz trong hệ trục Oxyz) và di chuyển theo 4 hướng của mặt phẳng ngang.

Trò chơi kết thúc khi các khối shape lấp cao đến trên cùng của cage, lúc đó không còn khối shape mới nào có thể rơi xuống được.

        c) Các chương trình đã xây dựng.

Hiện nay có các website cung cấp chơi trực tuyến cũng như bản cài đặt cho dạng trò chơi xếp hình 3D, cũng như các cách chơi khác cho phiên bản mở rộng 3D.

 

Một số trò chơi xếp hình 3D hiện nay.

 3. Kết chương.

Trò chơi xếp hình (Tetris) đã xuất hiện từ vài chục năm về trước nhưng hiện tại vẫn còn rất nhiều người chơi yêu thích và xây dựng lại trò chơi này. Với phiên bản mở rộng 3D sẽ mang đến nhiều thử thách mới cũng như nâng cao khả năng tương tác 3 chiều của chương trình với người chơi. Nhiều trường hợp xử lý 3 chiều và tương tác, việc xây dựng lại phiên bản trò chơi này giúp tăng khả năng tiếp cận và tìm hiểu về lập trình đồ hoạ, đặc biệt là đồ hoạ 3 chiều.

XÂY DỰNG CHƯƠNG TRÌNH TRÒ CHƠI

XẾP HÌNH 3D (TETRIS 3D) BẰNG OPENGL

1. Mô tả chương trình xây dựng.

Đồ án xây dựng chương trình trò chơi xếp hình 3D (Tetris 3D) bằng OpenGL sử dụng gameplay mở rộng của bản trò chơi xếp hình truyền thống. Gồm các chức năng cơ bản của một trò chơi: người chơi tương tác với trò chơi thông qua bàn phím và chuột, hệ thống thang điểm và cấp độ, lưu thành tích người chơi, âm thanh.

2. Xây dựng các lớp đối tượng.

        2.1. Các lớp đối tượng.

-      Block: Mô tả một khối hình lập phương với cạnh là 1 đơn vị cao. Đây là thành phần cơ bản nhất tạo nên cage và các shape.

-      Cage: Mô tả vùng chơi là một khối hình hộp chữ nhật đứng.

-      Shape: Mô tả các khối hình chính của trò chơi. Mỗi shape Gồm 4 block xếp cạnh nhau trên không gian 3 chiều.

        2.2. Các thuộc tính và phương thức.

Bảng 3.1   Thuộc tính và phương thức của lớp Block

 

Mô tả

Thuộc tính

 

int x;int y;

int z;

- Mô tả vị trí của block
float red;float green;

float blue;

- Mô tả màu của block theo hệ màu RGB.
bool exists; - Thuộc tích của 1 block là hiện (true) hay ẩn (false).

Phương thức

 

Block();

Bảng 3.2   Thuộc tính và phương thức của lớp Cage

 

Mô tả

Thuộc tính

 

Block gameCage[][][]; - Cage là một mảng 3 chiều các block (Bao gồm các block ẩn và các block từ các khối shape trước).
int height;int width;

int depth;

- Các biến định nghĩa chiều cao, chiều rộng và chiều sâu của cage.

Phương thức

 

Cage();void clearCage(); - Phương thức khởi tạo mặc định cage có kích thước 4x4x24.- Chuyển các block hiện trên cage thành ẩn.

Bảng 3.3   Thuộc tính và phương thức của lớp Shape

 

Mô tả

Thuộc tính

 

Block blocks[4];int type; - Mỗi shape tạo thành từ 4 block- Kiểu (hình dạng) của shape

Phương thức

 

Shape(); - Phương thức khởi tạo, tuỳ theo thuộc tính type sẽ khởi tạo hình dạng shape tương ứng.
bool RotateCollision(Block pieces[]);bool DetectCollision(); - Kiểm tra điều kiện xoay (Có va chạm với thành cage hay không).- Kiểm tra va chạm đáy
bool DropOne();bool ShadowDropOne(); - Kiểm tra va chạm và cho shape rơi xuống 1 đơn vị.- Bóng của shape khi rơi xuống đáy
void RotateXCW();void RotateXCCW();

void RotateYCW();

void RotateYCCW();

void RotateZCW();

void RotateZCCW();

- Xoay theo các trục Ox, Oy, Oz (hệ trục Oxyz).CW: Quay cùng chiều kim đồng hồ.

CCW: Quay ngược chiều kim đồng hồ.

void MoveForward();void MoveBack();

void MoveRight();

void MoveLeft();

- Di chuyển trước, sau, trái phải.

3. Các thao tác lập trình chính.

Các thao tác lập trình chính trong hàm Main sử dụng lập trình với OpenGL và sự hỗ trợ của GLUT.

        3.1.Các trạng thái:

Chương trình sử dụng các biến kiểu bool đánh dấu các trạng thái hiện hành của chương trình (Có thể có nhiều trạng thái cùng lúc). Tương ứng với mỗi trạng thái sẽ xử lý riêng biệt khi gọi hàm vẽ (display – thông qua glutDisplayFunc()) Trạng thái được cập nhật theo thời gian (glutTimerFunc) và thao tác của người dùng. Trong đó có 7 trạng thái:

bool isMain = true;        // Trạng thái màn hình chính.

bool isHelp = false; // Trạng thái màn hình trợ giúp.

bool isHighScore = false;// Trạng thái màn hình xem điểm cao.

bool isNewGame = false;    // Trạng thái màn hình chơi chính.

bool isUpdateHighScore = false; // Trạng thái màn hình chính.

bool isGameOver = false; // Trạng thái thua.

bool isPauseGame = false;// Trạng thái tạm dừng.

* Trạng thái isMain, isHelp, isHighScore:

-      Các trạng thái xử lý đơn giản: Load các texture có sẵn hiển thị thông tin cho người chơi. Riệng trạng trái isMain có kết hợp xử lý chuột.

* Trạng thái isNewGame:

Đây là trạng thái chính của chương trình, xử lý màn hình chơi chính. Các thao tác chính nằm trong hàm void drawInGame() gồm các chức năng:

-      Vẽ giao diện chơi: Load chữ(tên, điểm số, cấp độ), texture, … .

-      Dựa vào các biến trạng thái hiển thị trạng thái của cage (góc nhìn, các khối shape trước đó,…), shape (Khối shape hiện tại và tiếp theo), tạo bóng.

-      Thay đổi các biến trạng thái để chuyển sự kiện như: isGameOver, isPauseGame.

* Trạng thái isUpdateHighScore:

-      Xử lý khi đang trong trạng thái ghi lại điểm cao của người chơi. Mặc định chương trình chỉ lưu 5 người điểm cao nhất.

* Trạng thái isGameOver, isPauseGame:

-      Các trạng thái khi chơi tương ứng: Đang thua hay đang tạm dừng.

        3.2. Xử lý chuột, bàn phím:

-      Xử lý chuột, bàn phím dựa vào sự hỗ trợ của GLUT:

// Keyboard

glutKeyboardFunc(processNormalKeys);

glutSpecialFunc(processSpecialKeys);

// Mouse

glutMouseFunc(mouseClick);

glutPassiveMotionFunc(mouseMotion);

-      Các phím được xử lý trong trạng thái isNewGame:

  • Phím A, Q: Quay theo trục Ox, phím S, W: Quay theo trục Oy, phím D, E: Quay theo trục Oz.
  • Phím UP, DOWN, LEFT, RIGHT: di chuyển theo các hướng.
  • Phím P: Tạm dừng trò chơi, phím ESC: Quay về màn hình chính.
  • Các phím đặc biệt: F3 (Bật, tắt âm thanh), F2 (Reset trò chơi).

       

3.3. Một số thao tác khác:

* Xử lý ánh sáng, sử dụng các texture:

-      Xử lý ánh sáng: Sử dụng chiếu sáng của OpenGL với GL_LIGHT0, dùng các thông số:

GLfloat ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f };

GLfloat diffuseLight[] = { 0.8f, 0.8f, 0.8, 1.0f };

GLfloat specularLight[] = { 0.5f, 0.5f, 0.5f, 1.0f };

glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

* Xử lý âm thanh:

Sử dụng hàm xử lý âm thanh của C++:

BOOL PlaySound(

LPCTSTR pszSound,

HMODULE hmod,

DWORD fdwSound

);

Với các cờ trạng thái: SND_ASYNC (không đồng bộ) và SND_SYNC (đồng bộ).

CHƯƠNG IV

HOÀN THIỆN CHƯƠNG TRÌNH

Kết quả thu được sau khi hoàn thiện chương trình.

1. Giao diện chính.

        Giao diện chính của trò chơi gồm liên kết đến 4 chức năng của chương trình: Trò chơi mới, xem điểm cao, hướng dẫn và thoát.

1

Giao diện chính của chương trình.

2. Giao diện “Trò chơi mới”.

        2.1. Giao diện chơi cơ bản.

        Giao diện chơi cơ bản gồm có thể hiện của các lớp đã xây dựng: Block, Cage, Shape, logo, thông tin màn chơi hiện tại: Điểm số, số dòng đã ăn được, shape tiếp theo, … .

2

Màn hình chơi cơ bản.

 2.2. Các cấp độ của trò chơi.

        Trò chơi gồm có nhiều cấp độ, mỗi cấp độ có một hình đại diện khác nhau (Có 9 hình đại diện).

3

Cấp độ 9 của trò chơi.

3. Giao diện “Điểm cao” và “Cao thủ mới”.

        3.1. Giao diện “Điểm cao”.

Giao diện điểm cao hiển thị top 5 cao thủ của trò chơi, được liên kết từ giao diện chính.

4

Giao diện “Xếp hạng”.

3.2. Giao diện “Cao thủ mới”.

        Giao diện cao thủ mới xuất hiện khi người chơi có điểm đạt top sau khi thua. Ghi nhận điểm số, tên đại diện và lưu lại để hiển thị khi xem giao diện điểm cao.

5

Giao diện “Cao thủ mới”.

4. Giao diện “Hướng dẫn”.

        Giao diện cung cấp thông tin về cách phím xử lý thao tác khi chơi, thông tin người lập trình.

6

Giao diện “Hướng dẫn”


 

5. Các chức năng bổ sung.

Các tính năng thêm của chương trình: Pause game, âm thanh,…

7

Pause game

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

1. Kết luận.

Đồ án đã xây dựng ở mức cơ bản về trò chơi xếp hình 3D (Tetris 3D). Nhóm đã tìm hiểu và ứng dụng phần lớn các hàm cơ bản của OpenGL trong môn học đồ hoạ máy tính để xây dựng chương trình, tiếp cận ở bước đầu về lập trình đồ hoạ 3D. Ứng dụng OpenGL với sự hỗ trợ của GLUT cho thấy được khả năng hỗ trợ lập trình sử dụng đồ hoạ, nhất là đồ hoạ 3D của OpenGL.

2. Hướng phát triển.

Có thể tiếp tục phát triển dựa trên chương trình hiện tại cả về kỹ thuật và gamePlay.

* Về mặt kỹ thuật lập trình:

-      Tìm hiểu và ứng dụng OpenAL hoặc các thư viện tích hợp âm thanh dùng chung với OpenGL thay cho sử dụng hàm cơ bản PlaySound trong C++ như hiện tại.

-      Lập trình trên các nền tảng khác.

* Về mặt gamePlay:

-      Mở rộng các màn chơi như hiện tại: Tăng cấp độ, mở rộng cage.

-      Xây dựng hệ thống các Item mở rộng hỗ trợ cho người chơi, thay đổi so vơi cách chơi truyền thống.

PHỤ LỤC

Phụ lục 1. Các cấp độ của trò chơi.

Cách tính điểm:

-      1 Line = 100 điểm * cấp độ.

-      2 Line liên tiếp = 300 điểm * cấp độ.

-      3 Line liên tiếp = 500 điểm * cấp độ.

-      4 Line liên tiếp = 800 điểm * cấp độ.

Cách tính cấp độ: Mỗi 5 Line sẽ lên một cấp.

Cách tính thời gian:

-      Cấp độ 1: 5 giây.

-      Mỗi cấp độ tiếp theo: Trừ 0.2 giây.

-      Tối thiều: 0.6 giây

Phụ lục 2. Danh mục âm thanh được sử dụng.

Bảng P2. Âm thanh được sử dụng.

STT

Tên file

Thời gian phát

Sự kiện phát

1

backMusic.wav 01 phút 30 giây Nhạc nền

2

highScoreMusic.wav 00 phút 02 giây Nhạc ghi điểm mới

3

gameOverMusic.wav 00 phút 03 giây Nhạc thua

4

goalMusic.wav 00 phút 01 giây Nhạc ăn điểm

5

clickMusic.wav 00 phút 01 giây Nhạc click chuột

 

THAM KHẢO

[1] Andreas Lagotzki, Nehe’s OpenGL Tutorials, 2004.

[2] OpenGl and GLUT: http://www.zeuscmd.com,

[3] PlaySound function: http://msdn.microsoft.com,

[4] Tetris: http://en.wikipedia.org/wiki/Tetris,

[5] Tetris game: http://www.codeproject.com,

Link download demo:

http://goo.gl/IxAF00

Tin nổi bật trong ngày
Tin mới nhất

Register

Newsletter

Email this story

If you really want to ban this commenter, please write down the reason:

If you really want to disable all recommended stories, click on OK button. After that, you will be redirect to your options page.