ĐẠI HỌC CÔNG NGHỆ THÔNG TIN – ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
BÁO CÁO ĐỒ ÁN LẬP
TRÌNH WIN
The Tetris
Giảng viên hướng dẫn: PHAN NGUYỆT MINH
Thành viên tham gia:
-
Lê Quang Khải – MSSV: 09520134
Phạm Đình Thanh Quang – MSSV: 09520227
Huỳnh Minh Tuấn – MSSV: 09520705
Báo cáo đồ án Lập trình Win
GVHD: Phan Nguyệt Minh
MỤC LỤC
MỞ ĐẦU ............................................................................................................................. 3
CHƢƠNG 1: GIỚI THIỆU .............................................................................................. 4
1.1
Trình bày ý tưởng, mục tiêu................................................................................... 4
1.1.1
Bối cảnh........................................................................................................... 4
1.1.2
CHƢƠNG 3: CÀI ĐẶT VÀ THỬ NGHIỆM ................................................................ 19
3.1
Môi trường ........................................................................................................... 19
3.2
Yêu cầu ................................................................................................................ 19
3.2.1
Phần cứng ...................................................................................................... 19
3.2.1
Phần mềm ...................................................................................................... 19
3.3
Đánh giá ............................................................................................................... 19
CHƢƠNG 4: KẾT LUẬN VÀ HƢỚNG MỞ RỘNG................................................... 20
4.1
Kết luận ................................................................................................................ 20
4.2
Hướng mở rộng .................................................................................................... 20
CHƢƠNG 1: GIỚI THIỆU
1.1
Trình bày ý tƣởng, mục tiêu1
1.1.1 Bối cảnh
Hiện nay, quá trình hội nhập quốc tế đang diễn ra rất mạnh, và một trong số những
yêu cầu trong cần thiết đó chính là vấn đề ngôn ngữ. Và tiếng Anh là ngôn ngữ
phổ biến nhất dùng để giao tiếp giữa các nền văn hóa khác nhau. Tuy nhiên, ở một
số nước, trong đó có cả Việt Nam, việc học, sử dụng tiếng Anh vẫn còn là một rào
cản khá lớn đối với đa số học sinh, sinh viên cũng như những người đã qua tuổi đi
học nhưng lại cần thiết phải biết tiếng Anh để hỗ trợ công việc của mình.
Việc thiếu những kĩ năng cơ bản trong việc sử dụng tiếng Anh có thể dẫn tới một
số tác hại không nhỏ. Đơn cử như giới học sinh và đặc biệt là sinh viên, việc tìm
tòi những kiến thức liên quan đến chuyên ngành của mình là rất quan trọng. Và
hầu hết những tài liệu hay, chi tiết đều được viết bằng tiếng Anh. Do đó, những ai
không thể đọc hiểu được những tài liệu này sẽ trở nên thua kém so với những bạn
đọc hiểu tốt.
Nguyên nhân dẫn đến việc yếu kém về kĩ năng sử dụng tiếng Anh có thể liên quan
đến nhiều khía cạnh, có thể vì họ đã mất căn bản từ khi mới bắt đầu học tiếng
Anh, một số khác có thể gặp vấn đề về khả năng ngôn ngữ hoặc đơn thuần họ
không cảm thấy hứng thú với loại ngôn ngữ quan trọng này. Vậy nên, vấn đề đặt
ra ở đây là tìm một phương pháp hỗ trợ việc tự học tiếng Anh thật hiệu quả, tạo
hứng thú cao cho người học. Những giải pháp để giải quyết vấn đề này không
thiếu, nhưng chúng tôi muốn đề cử một giải pháp khác với hi vọng mang lại
những tín hiệu tích cực cho thế hệ trẻ trong việc cải thiện vốn tiếng Anh của mình.
1.1.2 Giải pháp
Như đã trình bày ở trên, chúng tôi muốn đưa ra giải pháp nhằm tạo cảm hứng cho
người học tiếng Anh. Ý tưởng của chúng tôi đó là bước đầu xây dựng các trò chơi
đơn giản nhưng có thể lồng ghép những cách chơi mới, thông qua đó truyền tải
này là giúp người chơi giải tỏa stress, căn thẳng. Đây cũng chính là mục
đích căn bản của một trò chơi. Bên cạnh chế độ chơi đơn, trò chơi còn cung
cấp chế độ chơi hai người, qua đó giúp người chơi có thể giải trí hiệu quả
hơn khi tham gia thi thố với bạn bè, người thân.
Challenge mode. Đây chính là điểm nhấn quan trọng nhất trong ý tưởng của
chúng tôi. Trong phần chơi này, người chơi hoàn thành các hàng nhanh
nhất có thể để làm xuất hiện nội dung câu hỏi dạng trắc nghiệm. Lúc này,
người chơi có thể có các tùy chọn như bỏ qua hoặc trả lời. Nếu bỏ qua,
người chơi sẽ bị trừ điểm vì không biết nắm lấy cơ hội của mình. Nếu trả
lời sẽ có hai trường hợp, trả lời đúng hoặc trả lời sai. Tuy nhiên, dù trả lời
đúng hay sai, người chơi đều được thưởng điểm vì đã có cố gắng. Về độ
khó, trong phần chơi này sẽ chia ra làm ba mức độ:
o Easy: các câu hỏi với độ khó ở mức căn bản, phù hợp với trình độ
của người mới học hoặc đã bị mất căn bản từ lâu.
o Normal: độ khó của các câu hỏi ở mức bình thường, phù hợp với
giáo trình anh văn của các bạn học sinh cấp trung học phổ thông,
trung học cơ sở.
o Difficult: mức độ này có độ khó cao nhất. Các câu hỏi sẽ nhắm vào
các đối tượng có kiến thức về tiếng Anh nhưng vừa muốn giải trí lại
vừa muốn trau dồi thêm kiến thức. Nội dung các câu hỏi có thể lấy
từ các tài liệu ôn tập các chứng chỉ anh văn phổ biến như TOELF,
TOEIC, IELTS…
Tất nhiên trong chế độ chơi cải tiến này cũng cho phép bạn thi thố cùng với
bạn bè, người thân của mình bởi khả năng hỗ trợ chơi 2 người, nhờ đó tăng
thêm tính cạnh tranh, hấp dẫn cho trò chơi.
5
Báo cáo đồ án Lập trình Win
độ khó Easy, bảng Mover tương ứng với độ khó Normal và bảng Flyer tương ứng với
Difficult.
Thiết kế cơ sở dữ liệu
Về cấu trúc, mỗi bảng đều có số cột và nội dung các cột như nhau:
-
2.2
idQues: số thứ tự của câu hỏi
Question: nội dung câu hỏi
AnswerA, AnswerB, AnswerC và AnswerD: nội dung các đáp án A, B, C và
D.
Result: đáp án chính xác của câu hỏi
QuestionType: loại câu hỏi. Ở đây có 2 loại câu hỏi đó là tìm câu trả lời chính
xác nhất và tìm lỗi sai trong câu cho trước.
Kiến trúc chƣơng trình
2.2.1 Giới thiệu khái quát mô hình MVVM
MVVM là từ viết tắt của Model-View-ViewModel, đây là mô hình 3 lớp này được
áp dụng rộng rãi trong các ứng dụng sử dụng công nghệ WPF (Windows
Presentation Foundation) và Silverlight.
7
Báo cáo đồ án Lập trình Win
GVHD: Phan Nguyệt Minh
khả năng tương tác hiệu quả và làm việc với tính độc lập cao hơn giữa designer và
coder, khả năng sử dụng lại các components (lợi ích này được thể hiện rất rõ ngay
trong đồ án), thiết kế lại giao diện ứng dụng mà không cần hoặc chỉ cần thay đổi
một tí về code. Một lợi ích lớn nữa của MVVM pattern đó là đơn giản hóa công
đoạn Unit Testing.
2.2.2 Kiến trúc của trò chơi Tetris dựa trên mô hình MVVM
2.2.2.1
Model
Trong trò chơi Tetris, các đối tượng dữ liệu mà chương trình thao tác được đặt
trong folder Model. Một số class quan trọng bao gồm:
- PieceType: mỗi khối gạch (chúng em gọi là Piece) trong game được mô
tả bằng một mảng trạng thái 2 chiều có kích thước 5x5. Mỗi viên gạch (block)
của khối gạch tương ứng với một phần tử trong mảng. Tùy theo giá trị của
mảng trạng thái đó để tạo nên hình dạng của một khối gạch nhất định. Ở đây
có 7 kiểu khối gạch, mỗi kiểu tương ứng có 4 kiểu xoay khác nhau, vì vậy nên
một mảng 4 chiều được dùng để lưu trữ thông tin trạng thái của từng kiểu khối
gạch và từng kiểu xoay tương ứng. Các fields còn lại như brush là mảng lưu
trữ đường dẫn đến hình ảnh của tình viên gạch, mảng 3 chiều initPos lưu
trữ vị trí khởi tạo đầu tiên của từng kiểu gạch với các kiểu xoay khác nhau.
- GameInfo lưu trữ các thông tin của game như Score, Level, Interval (tốc
độ rơi của khối gạch)… Các phương thức để tính toán số điểm cần thiết để lên
level, reset lại các thông tin.
- Một số class khác lưu trữ các thông tin dùng để save game, thông tin về
highscore…
9
Báo cáo đồ án Lập trình Win
GVHD: Phan Nguyệt Minh
viên gạch sẽ được hiển thị trên màn hình. Giá trị 0 tương ứng với vị trí chưa
có viên gạch nào và giá trị khác 0 tương ứng với vị trí đã có gạch.
o ObservableCollection<BlockViewModel> InternalBlocks – Đây
là collection lưu trữ DataContext của từng viên gạch (BlockView) sẽ được
hiển thị ở vùng chơi. Collection này có 20x14 phần tử, mỗi phần tử có kiểu
BlockViewModel, những thay đổi đối với collection này sẽ ngay lập tức
được hiển thị trên màn hình. Lúc khởi tạo, từng phần tử BlockViewModel
sẽ được gán giá trị cho các thuộc tính row, column của nó tương ứng với số
hàng, số cột của các đối tượng BlockView sẽ được hiển thị trên grid.
o Class này có 2 constructor, một constructor mặc định dùng để khởi tạo
đối tượng mới hoàn toàn, constructor còn lại dùng để khởi tạo đối tượng
mới dựa trên dữ liệu đã có sẵn.
o public void SetBoard(PieceControl piece) – đây là phương
thức dùng để thay đổi mảng trạng thái playBoard mỗi khi một khối gạch
không thể nào rơi xuống nữa. Hàm này đóng vai trò rất quan trọng để biết
khi nào thì game over, người chơi vừa ăn được bao nhiêu hàng… Tham số
truyền vào chính là khối gạch vừa mới rơi xuống.
o public void UpdateBoard(int rows) – Cập nhật lại mảng trạng
thái khi có một hay nhiều hàng vừa được lấp đầy.
o public
int?[][]
CheckGameStatus(PieceControl
piece)
kiểu xoay và tham chiếu đến GameBoard cho đối tượng đó. Từ các
thông tin về kiểu và kiểu xoay sẽ xác định được mảng trạng thái tương
ứng dựa vào mảng static pType của class PieceType.
PieceControl(PieceSaveData savedData, BoardViewModel
board) – khởi tạo đối tượng mới dựa vào thông tin đã được lưu lại
trong tham số truyền vào hàm savedData.
o Các phương thức di chuyển khối gạch sang trái, phải, rơi xuống.
Menu (thuộc kiểu DynamicMenuViewModel). Đối tượng này dùng để quản lí
menu bên trái trên giao diện của người chơi (hiện ra khi nhấn Escape). Các
thuộc tính quan trọng bao gồm:
o ObservableCollection<CustomButtonViewModel>
ButtonList
–
Danh sách các Button sẽ được hiển thị trên Menu. Ứng với mỗi đối tượng
CustomButtonViewModel được add vào danh sách sẽ có một Button được
hiển thị. Giao diện của mỗi button được quy định bằng thuộc tính Type.
o ObservableCollection<KeyBoardSettingControlViewModel>
KeySettings – Danh sách các đối tượng KeyBoardSettingControl (là
View của KeyBoardSettingControlViewModel) sẽ được hiển thị trong phần
mở rộng của Menu (xuất hiện khi bấm nút Setting).
KeyBoardSettingControlViewModel được dùng để quản lí những thiết
lập về control của người chơi trong game. Trong đó các phím bấm điều
khiển sẽ được lưu trữ bằng một collection loại Dictionary. Ở đây vì
Dictionary thông thường không hỗ trợ tốt cho DataBinding nên giải pháp
ảnh khối gạch tiếp theo.
ChallengeSinglePlayerGameViewModel
13
Báo cáo đồ án Lập trình Win
GVHD: Phan Nguyệt Minh
ChallengeSinglePlayerGameViewModel diagram
Về bản chất, cách chơi và các điều khiển trong phần chơi challenge không có
gì khác so với phần chơi classic. Phần chơi này chỉ thêm vào một số chức
năng mở rộng liên quan đến việc trả lời câu hỏi và làm thế nào để biết khi nào
câu hỏi được mở ra. Chính vì vậy, class này kế thừa lại class
ClassicSinglePlayerGameViewModel. Một số thành phần mở rộng của class
này bao gồm:
RectangleViewModel (thuộc kiểu DualRectangleRacerViewModel) –
đây là DataContext của một thành phần trên View có kiểu là
DualRectangleRacer. Chức năng của class này đó là điều khiển chức năng 2
thanh hình chữ nhật ở phía bên phải màn hình. Cụ thể hơn, mỗi khi người chơi
ăn được 1 hàng, chiều cao hình chữ nhật màu xanh sẽ tăng lên 30px. Khi chiều
cao tăng lên tối đa (được quy định bằng một hằng), đèn sẽ bật, câu hỏi xuất
hiện và chiều cao được reset về ban đầu. Đối thủ của người chơi chính là
computer. Ở đây computer chính là thanh chữ nhật màu đỏ còn lại. Mỗi khi
đồng hồ đếm ngược ở trên về đến 0, chiều cao của thanh này sẽ tăng lên 60px,
tương ứng với việc người chơi ăn được 2 hàng cùng lúc. Trong trường hợp
thanh chữ nhật màu đỏ đặt chiều cao tối đa trước người chơi (đèn đỏ sáng),
14
o public bool IsNameExists: điều khiển hiển thị cửa số thông báo tên
vừa chọn đã có.
o public void SaveProfile(int startFrom): lưu lại thông tin về tên
cũng như số câu hỏi mà người chơi đã trả lời được vào file.
o public int GetQuestionNumber(): lấy số câu hỏi của người chơi
nếu người chơi đó load lại từ một game đã save trước đó.
o Các Command dùng để thực thi các hành động như tạo profile mới, load
profile có sẵn mỗi khi người dùng bấm vào các nút tương ứng trên giao
diện.
Các
class
điều
khiển
các
phần
chơi
chính
còn
lại
như
17
Báo cáo đồ án Lập trình Win
GVHD: Phan Nguyệt Minh
Challenge multiplayers với câu hỏi xuất hiện cho người chơi thứ 2 (bên phải)
18
Báo cáo đồ án Lập trình Win
GVHD: Phan Nguyệt Minh
CHƢƠNG 3: CÀI ĐẶT VÀ THỬ NGHIỆM
3.1 Môi trƣờng
- Microsoft Windows
3.2 Yêu cầu
3.2.1 Phần cứng
-
RAM: 512MB (đề nghị 1GB trở lên)
CPU: Pentium 4 (đề nghị Pentium D trở lên)
Ổ cứng: tối thiểu 30MB
3.2.1 Phần mềm
-
hơn. Với sức mạnh của công nghệ web hiện tại, đặc biệt với công nghệ Silverlight thì vấn
đề này càng trở nên đơn giản. Và khi đó, người chơi sẽ có thể tương tác với nhau mà
không bị giới hạn về địa lý. Họ có thể làm cho mọi người biết đến mình với điểm số cao
ngất ngưỡng (chia sẽ điểm số sẽ chỉ có trong phần chơi Advanced), hay tìm thêm những
người bạn mới… Người chơi offline cũng có thể upload điểm số của mình lên đây để so
kè với người khác.
Hiện tại, Tetris được xây dựng là một game offline hoàn toàn và có cơ sở dữ liệu giới
hạn. Tuy dữ liệu câu hỏi lên đến 2,382 câu hỏi nhưng không có gì có thể bảo đảm sẽ
không được sử dụng hết. Vì vậy, tính năng Auto Update sẽ là một tính năng rất quan
trọng trong phiên bản phát triển tiếp theo.
Tuy nhiên, khả năng mở rộng của ý tưởng này còn có thể lớn hơn nữa. Chúng ta có thể
xây dựng nên một mạng xã hội với game giáo dục. Trong mạng này, bên cạnh những tính
năng căn bản của một mạng xã hội như chia sẽ cảm xúc, hình ảnh, video, người tham gia
còn có thể sử dụng các ứng dụng mang tính giáo dục cao, tương tự như trò chơi Tetris
mà chúng em xây dựng vậy. Các lập trình viên trên khác có thể upload ứng dụng của
mình lên mạng xã hội này, như vậy thư viện ứng dụng sẽ ngày càng phong phú, rộng lớn.
Nói một cách ngắn gọn thì nó cũng tương tự như facebook nhưng các ứng dụng sẽ không
phức tạp, đa chủng loại như Facebook.
Tất nhiên không loại trừ khả năng đưa trò chơi thành một ứng dụng sử dụng công nghệ
điện toán đám mây (SQL Azure) cho các thiết bị di động. Vấn đề này khá khó thực hiện
vì nguồn lực của nhóm không mạnh và vì để sử dụng công nghệ cloud computing đòi hỏi
chi phí về phần cứng rất cao. Vì thế, rất cần các nhà tài trợ giúp đỡ để chúng em tiếp tục
phát triển dự án này.
20