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.
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, … .
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).
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.
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.
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.
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,…
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
2015-01-13 05:13:16
Nguồn: https://nguyenhaiblog.wordpress.com/2014/01/10/do-an-do-hoa-may-tinh-tetris-3d/