I. Ngôn ngữ lập trình C II. Lập trình đồ họa với C III. Sprite IV. Phát hiện va chạm game bắn cung V. Phát âm thanh VI. Tạo Map VII. Vẽ Map Cuộn Map Kiểu dữ liệu cơ bản (giống với C) Có thêm kiểu bool, kích thước các kiểu dữ liệu được mở rộng thêm. Cấu trúc điều khiển (giống với C) Thêm vòng lặp foreach để duyệt mảng Xử lý ngoại lệ Thêm cơ chế bắt lỗi và xử lý lỗi Cấu trúc và lớp
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HCM KHOA ĐIỆN- ĐIỆN TỬ
NGÀNH KỸ THUẬT ĐIỆN – ĐIỆN TỬ
BÁO CÁO TỐT NGHIỆP
LẬP TRÌNH GAME
GVHD: Nguyễn Minh Chương
SVTH : Nguyễn Thanh Dâng
Đỗ Thanh Sơn Trương Quang Kim Hoàn
1
Trang 2• VI Tạo Map
• VII Vẽ Map & Cuộn Map
NỘI DUNG THUYẾT TRÌNH
2
Trang 3• Kiểu dữ liệu cơ bản (giống với C)
– Có thêm kiểu bool, kích thước các kiểu dữ liệu được mở rộng thêm.
• Cấu trúc điều khiển (giống với C)
– Thêm vòng lặp foreach để duyệt mảng
Trang 4• Cho phép tạo các kiểu dữ liệu riêng của người dùng.
• Cấu trúc và lớp gần như giống nhau hoàn toàn
• Điểm khác biệt
– Cấu trúc là kiểu giá trị
– Lớp là kiểu tham chiếu.
Cấu trúc và Lớp
4
Trang 6• C# sử dụng thư viện GDI+ (Graphical Device Interface) cho việc xử lý đồ họa
II Lập trình đồ họa với C#
Hình 1 Vai trò của GDI+ Hình 2 GDI+ namespace
6
Trang 7Hệ tọa độ GDI+
Hình 3 Hệ tọa độ GDI+
7
Trang 8• Alpha biểu diễn độ trong suốt của màu
– Giá trị 0 nghĩa là màu hoàn toàn trong suốt
– và ngược lại.
Màu sắc – Lớp Color
Hình 4 Các thành phần của màu sắc
8
Trang 9Kết quả thử nghiệm các hàm đồ họa
9
Trang 10• Sprite và những vật thể có thể di chuyển và tương tác trong game (người chơi, kẻ thù, …).
• Phân biệt nó với các đối tượng tĩnh, tức là những đối tượng cứng không tương tác hay thay đổi trong game
III SPRITE
Hình 5 Minh họa Sprite
10
Trang 11• Dùng các phần mềm đồ họa cùng với các phần mềm chuyên dụng để tạo Sprite.
• Sử dụng công cụ Google tìm kiếm hình ảnh để tìm các ảnh tạo Sprite bằng từ khóa: “Sprite
Sheet”
• Trang web sau cung cấp các hình ảnh đồ họa cho việc lập trình Game:
http://www.reinerstilesets.de/2d-grafiken/2d-animals/
Ảnh tạo Sprite
11
Trang 12• Thực chất ra, Sprite chỉ gồm các hình ảnh liên tiếp nhau của một chuyển động, được vẽ liên tiếp nhau.
• Mỗi một chuyển động cần khoảng 8÷10 ảnh
• Ảnh nên tách bỏ nền và lưu dưới dạng PNG
• Để dễ quản lý, mỗi Sprite chỉ sử dụng một ảnh, mỗi dòng của ảnh là các frame của một hành động
III SPRITE (tt)
12
Trang 13while(!p_gameOver) {
Update_Game();
Application.DoEvents();
} Game_End();
• Vòng lặp Game được đặt ở cuối sự kiện Form Load, khi đó tất cả dữ liệu đã được tải lên Form.
Vòng lặp “Game Loop”
13
Trang 14• Do chương trình được viết là ứng dụng Windows Form, nếu trong chương trình chứa các vòng lặp vô tận (endless loop, or super loop) sẽ làm cho Form bị đứng.
• Phương thức Application.DoEvents() sẽ xử lý tất cả các sự kiện phát sinh do người dùng
hoặc chương trình khác tác động lên Form (xử
lý phím, chuột, vẽ lại màn hình,…)
Application.DoEvents()
14
Trang 15Kết quả thử nghiệm Sprite
15
Trang 16• Cần tạo một hình bao hình chữ nhật dựa trên
vị trí và kích thước của Sprite
• Dùng phương thức IntersectsWith() của lớp Rectangle để kiểm tra va chạm
IV PHÁT HIỆN VA CHẠM
Hình 6: Hai hình bao giao nhau => Có va chạm
16
Trang 17Game bắn cung
17
Trang 18• Sử dụng âm hệ thống
• Sử dụng lớp SoundPlayer trong namespace System.Media Chỉ phát được định dạng file wav
• Sử dụng Windows Media Player Phát được nhiều định dạng hơn
V PHÁT ÂM THANH
18
Trang 19• Chúng ta đã tạo được một game đơn giản, với map chỉ đơn giản là một bức hình.
• Việc tạo map giống như chúng ta đang lợp gạch (tile) cho nền nhà Với mỗi viên gạch một hoa văn, khi ghép chúng lại với nhau sẽ tạo ra cái sàn nhà đẹp mắt
• Các viên gạch (tile) được lấy từ một thùng chứa (Palette) và lần lượt được đặt ra form
VI TẠO MAP
19
Trang 20VI TẠO MAP (tt)
Palette Tile
20
Trang 21• Lưu dưới dạng file ảnh
• Lưu dưới dạng file XML
– Số thứ tự của tile
– Tọa độ của tile trên Map
– Cho phép Sprite đi qua không (Collidable)
– Có phải cổng hay không và tọa độ cổng
– File Map mà cổng nhảy tới (*) Cần phải lưu file Palette chung với file Map
Lưu file MAP
21
Trang 22VI VẼ MAP VÀ CUỘN MAP
Toàn bộ Map (4096x4096)
Màn hình hiển thị (800x600) (x,y)
22
Trang 23VẼ MAP VÀ CUỘN MAP (tt)
(x,y) 23
Trang 24VẼ MAP VÀ CUỘN MAP (tt)
Màn hình hiển thị
Bộ đệm 24
Trang 25KẾT LUẬN
• Kết luận
Tạo được các game 2-D đơn giản
Thiết kế được các lớp trên C#
Tuy nhiên:
Vẫn chưa hoàn chỉnh, còn nhiều lỗi cần khắc phục
• Định hướng phát triển
Tạo các tay cầm chơi game.
Cải tiến công cụ tạo Map.
Thêm các giải thuật điều khiển cho các nhân vật
trong game.
25
Trang 26 THE END!!!
#include<studio.h>
int main() {
while(IsLastPage(ThisPage)) {
printf(“Xin cảm ơn quí thầy cô
printf("\n");
} return 0;
}
26