Tải bản đầy đủ (.doc) (15 trang)

Tài liệu giới thiệu cách lập trình trò chơi xếp gạch bằng C# ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.02 MB, 15 trang )

Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
LỜI NÓI ĐẦU
Trò chơi Xếp gạch (tên gọi quốc tế: Tetris) là một trò chơi thuộc thể loại trí tuệ. Trò chơi
ra đời vào thập kỉ 80 của thế kỷ trước, nhưng cho đến ngày nay vẫn làm nhiều người mất ăn
mất ngủ. Trò chơi đã được nhiều công ty phần mềm, nhiều cá nhân đã phát triển ngày càng đa
dạng về thể loại cũng như tùy biến về cách chơi. Trên tinh thần đó, nhóm chúng em cũng xin
viết một phiên bản của trò chơi này, đồng thời cũng nhằm thực hiện đồ án bài tập cuối năm
môn Lập trình môi trường Windows.
Tài liệu này nhằm giới thiệu về trò chơi do nhóm chúng em thiết kế (tên gọi là TETRIS
PARTY). Trong tài liệu này, chúng em sẽ trình bày tổng quan về chương trình, ưu, nhược
điểm, vài nét về giao diện, cũng như chức năng chính của trò chơi. Kết thúc tài liệu, chúng em
xin đề ra một số hướng phát triển cho trò chơi trong tương lai.
Vì thời gian để hoàn thành chương trình đồ án này gấp gáp, chúng em phải vừa tìm hiểu
kiến thức và áp dụng chúng vào trong lập trình ngay (mà chưa kiểm tra thử nghiệm một cách
toàn diện) nên chương trình chắc chắn còn nhiều thiếu sót. Chúng em mong thầy và các bạn
giúp đỡ chúng em hoàn thành hoàn chỉnh chương trình trên.
Cuối cùng, chúng em xin chân thành cảm ơn thầy TS. Phạm Thi Vương, giáo viên bộ
môn Lập trình môi trường Window đã hướng dẫn chúng em hoàn thành chương trình đồ án này.
Thay mặt nhóm
Sinh viên: Lê Văn Thương
1
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
MỤC LỤC
Lời nói đầu 3
Mục lục 4
1. Giới thiệu tổng quan về trò chơi Xếp gạch 3
1.1. Lịch sử hình thành và phát triển của trò chơi 3
1.2. Trò chơi Xếp gạch là gì? 3
1.3. Các vấn đề liên quan đến việc lập trình 3
1.3.1. Các yêu cầu khi lập trình 3
1.3.2. Các vấn đề cần giải quyết 3


1.3.3. Thuật toán lập trình 4
2. Giới thiệu về chương trình do nhóm thực hiện – TETRIS PARTY 5
2.1. Giao diện chính 5
2.2. Các chức năng 9
2.3. Phân tích ưu nhược điểm của trò chơi 10
2.3.1. Ưu điểm 10
2.3.2. Nhược điểm 10
3. Phương pháp lập trình 10
3.1. Ý tưởng 10
3.2. Các lớp đối tượng 11
4. Hướng phát triển tiếp theo 14
5. Kết luận 14
1. Giới thiệu tổng quan về trò chơi Xếp gạch
1.1. Lịch sử hình thành và phát triển của trò chơi
2
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
Trò chơi Xếp gạch (tên quốc tế là Tetris) ra đời ở Liên Xô vào năm 1984. Cha đẻ của nó là
kỹ sư máy tính Alexey Pajitnov. Cùng với sự trợ giúp của chiếc máy tính cổ Elektronika 60, ông
đã chính thức hoàn thiện Tetris.
Sau đó ít lâu, trò chơi đã được chuyển đổi sang hệ máy PC của IBM và phổ biến rộng rãi
khắp Liên Xô, Bắc Mĩ và châu Âu. Liên tiếp vào các năm 1988, 1989, Tetris được thương mại
hóa và có mặt trên nền tảng PC, NES tại Nhật, qua nhà xuất bản Henk Rogers.
Năm 1996, cơ quan pháp luật Nga trao quyền sở hữu đích thực của Tetris cho Alexey. Ngay
sau đó, ông cùng Henk Rogers mở công ty Tetris chuyên cấp phép cho những ai muốn khai thác
trò chơi của mình.
Trò chơi Tetris đã có mặt trên hầu hết các hệ máy, và cả trên mobile.
Tính đến hết năm ngoái, Tetris đã có mặt chính thức tại hơn 50 quốc gia với hơn 50 ngôn
ngữ khác nhau, xuất hiện trên 30 nền tảng và có tổng cộng 125 triệu sản phẩm đã được bán ra.
1.2. Trò chơi Xếp gạch là gì?
Xếp gạch là một trò chơi trí tuệ, bao gồm một màn hình chơi game và nhiều khối gạch có

hình dạng khác nhau. Các khối gạch ăn khớp nhau tùy theo các bước chơi của người chơi.
Người chơi có thể ghi điểm bằng cách chèn (fill) đầy 1 hàng ngang và trò chơi kết thúc khi 1
hàng dọc nào đó trên màn hình bị đầy.
1.3. Các vấn đề liên quan đến việc lập trình
1.3.1. Các yêu cầu khi lập trình
Khi lập trình cần tuân thủ các nguyên tắc sau:
- Các khối hình trong trò chơi phải gồm 7 khối sau:
- Khi tăng cấp (level) thì độ khó của game cũng phải tăng lên.
- Khi tăng điểm thì phải tăng tỉ lệ thuận theo số hàng (dòng) ngang được làm đầy.
- Không thể xoay khối gạch khi kích thước của khối gạch xoay vượt quá kích thước của
khung (gameboard) chơi game.
- Khi khối gạch xuất hiện thì phải xuất hiện ở chính giữa khung chơi game.
1.3.2. Các vấn đề cần giải quyết
- Phải giải quyết được các yêu cầu khi lập trình ở trên.
- Cần giải quyết các vấn đề về thông tin người chơi ví dụ như tính điểm, dựa vào điểm để
tăng cấp, xử lý khi tăng cấp, ẩn hiện, tính toán các thông tin về các tiện ích, thời gian
chơi của người chơi.
- Cần xử lý vấn đề về âm thanh của game và âm thanh nền, xử lý khi chỉnh options (độ
khó, thay đổi skin, tên người chơi, chọn nhạc nền,…).
- Cần xử lý sự kiện khi bấm 1 phím : (xoay gạch, sử dụng các tiện ích, các phím tắt,…).
- Cần xử lý sự kiện khi lưu game (save game), chơi lại file lưu (load game).
- Xử lý các tính huống khi chơi game ở chế độ hai người chơi.
1.3.3. Thuật toán lập trình
- Tạo một đối tượng lưu thông tin về các khối gạch (7 khối).
Mỗi khối gạch là một mảng Bool hai chiều với hai trạng thái true và false. Kích thước
mảng cũng chính là chiều dài và chiều rộng của khối gạch.
3
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
o Nếu tại ô M
ij

có trạng thái true thì có nghĩa là ô được hiện màu sắc, hình ảnh (có
thể nhìn thấy được).
o Nếu ô M
ij
có trạng thái false thì ngược lại.
true
true
true
true
- Khung chơi game (hay còn gọi là bảng chơi game hay là gameboard):
Là một mảng Bool 2 chiều với hai trạng thái true và false. Chức năng của gameboard là
để ánh xạ các khối gạch sang gameboard. Với trạng thái true thì có hiện màu sắc, hình ảnh và
false là không hiện. Mảng gameboard có kích thước 10x20.
Các khối gạch sẽ xuất hiện ở vị trí như hình sau:
0 1 2 3 4 5 6 7 8 9
0 false false false false
tru
e
false false false false false
1 false false false false
tru
e
false false false false false
2 false false false false
tru
e
true false false false false
- Cách thức xoay khối gạch được tính toán theo hình sau:
4
true true true

false true false
true true
true true
false true true
true true false
true true false
false true true
false true
false true
true true
Khối I
Khối O
Khối T
Khối S
Khối Z
Khối J
Khối L
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
Nguồn: />2. Giới thiệu về chương trình do nhóm thực hiện – TETRIS PARTY
2.1. Giới thiệu giao diện:
Trong phần này, chúng em xin trình bày sơ lược về giao diện của trò chơi TETRIS PARTY.
Theo đó, chúng em cũng xin minh họa chức năng của các nút bấm chính có trong trò chơi.
Dưới đây là một số hình ảnh chính:
5
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
Hình 1: Giao diện khi khởi động trò chơi
Hình 2: Giao diện Menu của trò chơi
6
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
Hình 3: Giao diện 1 người chơi

Hình 4: Giao diện 2 người chơi
7
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
Hình 5: Giao diện Menu “Help” của trò chơi
Hình 6: Giao diện Menu “Options” của trò chơi
8
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
2.2. Các chức năng chính của chương trình
Trò chơi có những chức năng chơi cơ bản của một trò chơi Xếp gạch cổ điển, gồm có như:
các hệ thống menu, hệ thống giúp đỡ và tùy chỉnh hoàn thiện; chức năng chơi game như một trò
chơi Xếp gạch thực sự: di chuyển gạch, xoay gạch, rơi gạch nhanh, rơi gạch ngay lập tức, ăn
điểm khi đầy dòng, tăng level và độ khó qua mỗi level, gameover khi khối gạch tràn màn hình
chơi,.v.v.
Các chức năng cơ bản:
- Chơi game ở chế độ 1 người chơi, 2 người chơi:
o Chế độ 1 người chơi: Người chơi có đầy đủ tính năng của một trò chơi hoàn
chỉnh. Bắt đầu mới một game, ngừng game, tiếp tục, lưu game, chơi lại file lưu,
tinh chỉnh độ khó, màu gạch, thay đổi thông tin người chơi, thay đổi nhạc nền,…
Người chơi có thể click nút “Ready” để bắt đầu ván chơi. Ngoài ra, người chơi
cũng có thể thoát game, hay trở về menu chính bất cứ lúc nào. Trên màn hình
game, có đồng hồ biểu thị thông tin thời gian chơi.
o Chế độ 2 người chơi: Trong trò chơi TETRIS PARTY này, ngoài chế độ chơi 1
người truyền thống, bạn có thể chọn “2 Player” để vào chế độ 2 người chơi. Ở chế
độ 2 người chơi, bạn có thể tùy chỉnh trò chơi như ở 1 người chơi, nhưng bạn
không thể lưu và chơi lại bản lưu như trong một người chơi được. Ở bản 2 người
chơi, trò chơi hiện tỷ số giữa hai người chơi, cũng như thông báo chúng sau mỗi
màn.
- Chơi game với “phép”: “Phép” là công cụ nhằm cải biến game trở nên sinh động, và
hấp dẫn hơn. “Phép” bao gồm:
o Bom: sử dụng để phá hủy 2x2 ô gạch mà nó tiếp xúc.

o Hủy hình: sử dụng để hủy hình hiện tại, thay khối gạch bằng 1 hình mới.
- Theo dõi hình tiếp theo: Trò chơi cho phép người chơi theo dõi hình khối gạch nào
chuẩn bị rơi tiếp theo để dễ cho người chơi.
Ngoài ra, trò chơi còn có một số tính năng khác như:
- Thay đổi thông tin người chơi: Bạn có thể thay đổi tên người chơi trước khi bắt đầu
game (Trò chơi quy định tên người chơi không thể trống). Nếu bạn không thay đổi tên
trước khi bắt đầu thì trò chơi sẽ load tên người chơi mặc định là “player1”, và “player2”
và bạn có thể thay đổi nó trong phần Options\Settings. Ngoài ra, bạn cũng có thể thay đổi
avatar mặc định của bạn (bằng cách nhấp vào avatar trên màn hình), và chọn đường dẫn
đến file hình ảnh mà bạn muốn. (Các định dạng ảnh có thể thay đổi được: *.jpg, *.png,
*.gif, *.bmp).
- Thay đổi độ khó và màu sắc của khối gạch trong game, thay đổi nhạc nền: Trò chơi
cho phép người chơi tùy chọn những thuộc tính trong game. Độ khó, phong cách, nhạc
nền
o Độ khó của game: Trước mỗi ván chơi, người chơi có thể chọn Options\Settings
và tinh chỉnh độ khó mình muốn. Mặc nhiên, trong lúc chơi game thì không thể
chỉnh được phần độ khó này. Có 3 cấp độ khó:
 Dễ (Easy)
 Trung bình (Normal)
 Khó (Hard)
9
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
o Phong cách (Màu sắc các khối gạch): Trong khi chơi game người chơi có thể
thay đổi màu sắc các khối gạch trong game cho sinh động, phù hợp với sở thích
từng người. Có 3 sự lựa chọn cho bạn.
o Bật, tắt và thay đổi nhạc nền: Người chơi có thể tùy chỉnh bật, tắt nhạc nền
trong game bất kì khi nào muốn. Ngoài ra, người chơi còn có thể tự chọn nhạc nền
cho mình, thay đổi nhạc nền mặc định của trò chơi. (các định dạng file nhạc hỗ
trợ: *.mp3, *.wma).
2.3. Phân tích ưu, nhược điểm của trò chơi

2.3.1. Ưu điểm:
- Giao diện thân thiện, dễ sử dụng, nhiều tính năng.
- Có tùy chọn chế độ chơi (1 người chơi, 2 người chơi).
- Có thể linh hoạt thay đổi thông tin người chơi; tùy chỉnh độ khó khi chơi, màu sắc cũng
như thay đổi nhạc nền mặc định.
- Có menu hướng dẫn cụ thể, (có ngôn ngữ tiếng Việt và tiếng Anh), có hướng dẫn nút
bấm bằng hình ảnh trực quan.
Các ưu điểm khác biệt so với các chương trình trò chơi Xếp gạch khác:
o Có chế độ “phép”.
o Tùy chỉnh thông tin skin của khối gạch, độ khó của trò chơi.
o Thay đổi nhạc nền tùy thích.
o Thay đổi avatar tùy thích.
o Có chế độ 2 người chơi.
o Có tiện ích save game, load game.
2.3.2. Nhược điểm
- Trong chế độ 2 người chơi, 2 người không thể cùng lúc nhấn 1 phím ngay tại 1 thời điểm.
Vì lý do đó cho nên, nếu người chơi nào nhấn phím trước thì được quyền thực hiện hành
động của mình. (Ví dụ như người chơi 1 nhấn và giữ phím xuống trước thì người chơi 2
không thể nhấn và thực hiện hành động cho viên gạch di chuyển nhanh xuống được). Do
đó, trong chế độ 2 người chơi, cần có yêu cầu là từng người chơi phải nhấn phím và thả
phím liên tục.
- Thỉnh thoảng, với một số máy tính riêng biệt, có thể xảy ra một số lỗi không kiểm soát
được. (đặc biệt là với máy tính dùng hệ điều hành Windows XP SP1,2).
3. Phương pháp lập trình
3.1. Ý tưởng
Ý tưởng chính dựa vào thuật toán lập trình đã nêu ở trên.
Ngoài ra còn phải phát triển thêm như sau:
Mỗi khối gạch có 2 biến lưu vị trí đỉnh của khối gạch so với gameboard và biến lưu vị trí
cạnh trái của khối gạch so với gameboard. Mục đích của 2 biến này là để ánh xạ các khối gạch
vào mảng gameboard với vị trí xác định.

Dùng timer để xác định thời gian cho khối gạch di chuyển. Qua một lần timer_tick (một
khoảng thời gian timer.interval nhất định) thì khối gạch di chuyển xuống 1 hàng trong
gameboard. Cập nhật vị trí mới của khối gạch trong gameboard và hình ảnh xuất hiện của khối
gạch này được vẽ lại.
Việc làm sao để khối gạch không bị đặt ra ngoài mảng của gameboard (có nghĩa là khi cập
nhật vị trí của các khối gạch khi xoay, di chuyển trái, di chuyển phải không được vượt quá kích
10
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
thước mảng) là một vấn đề khó khăn. Cách của em là sẽ tăng kích thước của gameboard thêm 1
hàng dọc và 1 hàng ngang (thành mảng Bool 11x21), kiểm soát lỗi và kiểm soát điều kiện để các
khối gạch hiện đúng vị trí.
Các ý tưởng cho các phần phụ có thể tìm hiểu thông qua source code của chương trình.
Về ý tưởng xử lý sự kiện phím:
Thiết lập một hàm trong 1 class, dùng để xử lý sự kiện phím.
Trong Form chơi game, khi nhấp một phím bất kì thì sẽ gọi hàm xử lý sự kiện phím trong
class mới được thiết lập ở trên.
Về ý tưởng thiết kế giao diện trò chơi:
Vẽ ra giao diện background cho form bằng chương trình Photoshop. Sau đó chèn (add) vào
form. Chỉnh các thuộc tính của form để có một giao diện như ý.
3.2. Các lớp đối tượng (class)
Xem sơ đồ sau:
Sơ đồ trên giới thiệu về các lớp đối tượng (class) trong chương trình. Sơ đồ cũng miêu tả
phần nào thứ tự và hướng viết của các lớp đối tượng.
Cụ thể về các lớp đối tượng như sau:
- Lớp Hinh: là đối tượng class dùng để lưu thông tin các khối hình (hình dạng, kích thước,
…)
Tên biến Kiểu dữ liệu Ý nghĩa Ghi chú
rong int Chiều rộng của 1 khối gạch
dai int Chiều dài của 1 khối gạch
tren int Vị trí trên của khối gạch so với gameboard

11
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
trai int Vị trí trái của khối gạch so với gameboad
shape bool[,] Lưu thông tin về hình dạng của khối gạch
kichThuoc Int Lưu kích thước của 1 ô gạch (pixel) static
hinh Image Lưu hình ảnh skin của 1 khối gạch
Tên hàm Ý nghĩa
VeHinh Vẽ 1 hình image trong 1 ô gạch thuộc khối gạch
- Lớp NguoiChoi: là đối tượng lưu thông tin của người chơi (tên, điểm số, cấp, …)
Tên biến Kiểu dữ liệu Ý nghĩa
tenNguoiChoi string Lưu tên của người chơi
diemSo int Lưu thông tin điểm số của người chơi
cap int Lưu thông tin cấp độ của người chơi
boom int Lưu thông tin về số quả boom của người chơi
huyHinh int Lưu thông tin về số lần hủy hình của người chơi
- Lớp ChoiNhac: (lớp static) dùng để tạo chương trình phát nhạc cho trò chơi.
Sử dụng 2 thư viện: …
Tên biến Kiểu dữ liệu Ý nghĩa
music WindowsMediaplayerClas
s
Biến chơi nhạc nền trong game
sound ISoundEngine Biến chơi nhạc hiệu ứng trong game
Tên hàm Ý nghĩa
PlayMusic Phát nhạc nền trong game (*.mp3, *.wav)
PlaySound Phát nhạc hiệu ứng trong game (*.wav)
PauseMusic Tạm ngừng nhạc nền
Resume Tiếp tục phát nhạc nền
12
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
StopMusic Dừng nhạc nền

- Lớp userXepGach: (là một user control) đối tượng xử lý tất cả các sự kiện của
gameboard và các khối gạch
Tên biến Kiểu dữ liệu Ý nghĩa
nguoiChoi NguoiChoi Thông tin về người chơi
hinhHienTai Hinh Lưu hình hiện tại đang có trong gameboard
hinhTiepTheo Hinh Lưu hình tiếp theo đang chuẩn bị vào gameboard
gameBoard bool[,] Mảng gameboard của trò chơi
pictureBox PictureBox[,] Lưu vị trí, cách thức hiện của hình tiếp theo
- Lớp frm1Player: (là 1 windows form): thực hiện tất cả những gì trong chế độ 1 người
chơi
Tên biến Kiểu dữ liệu Ý nghĩa
userXepGach1 userXepGac
h
Dùng để sử lý sự kiện chơi game của người chơi
- Lớp frm2Player: (là 1 windows form): thực hiện tất cả những gì trong chế độ 2 người
chơi
Tên biến Kiểu dữ liệu Ý nghĩa
userXepGach1 userXepGac
h
Dùng để sử lý sự kiện chơi game của người chơi 1
userXepGach2 userXepGac
h
Dùng để sử lý sự kiện chơi game của người chơi 2
- Lớp frmOptions (là 1 windows form): thực hiện việc tinh chỉnh cấu hình của trò chơi.
- Lớp frmMain: (là 1 windows form): Cung cấp giao diện và các tùy chỉnh menu cho
người chơi.
- Lớp frmHelp: (là 1 windows form): Cung cấp thông tin về cách chơi, luật chơi, phép
bấm, thông tin tác giả.
- Lớp frmLogin: (là 1 windows form): chỉ là thực hiện form dạng nháy (cho đẹp mà thôi).
Thông tin về các bước chạy khi chương trình chạy:

13
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương
4. Hướng phát triển tiếp theo
Trong thời gian tới, chúng em sẽ tiếp tục phát triển trò chơi trên theo các hướng sau:
- Thêm một số chức năng mới như: tinh chỉnh âm lượng trong game, thêm tính năng tắt bật
nhạc khi chơi game (sound).
- Thêm phần save, load của chế độ 2 người chơi.
- Thêm chức năng chứng ngại vật. Mỗi khi lên level (cấp) thì trò chơi tự động thêm vào
một, hai, ba hàng với những khối gạch bất kì nhằm mục đích gây khó cho người chơi.
- Thêm Highscore cho 2 chế độ chơi: 1 người chơi và 2 người chơi.
5. Kết luận
Với kiến thức hiện có của chúng em hiện tại nên việc phát triển trò chơi còn hạn chế. Tuy
nhiên trò chơi cũng đã đáp ứng phần nào yêu cầu cơ bản của một trò chơi thực sự: có khả
năng chơi được và ít bị lỗi. Chúng em sẽ phát triển trò chơi dựa trên một số ý tưởng đã có.
Cuối cùng, một lần nữa chúng em xin gửi lời cảm ơn đến thầy Vương đã giúp đỡ chúng em
hoàn thành chương trình đồ án này.
14
Tài liệu nghiên cứu trò chơi Xếp gạch GVHD: TS. Phạm Thi Vương

15

×