Tải bản đầy đủ (.pdf) (20 trang)

Báo cáo đồ án lập trình win the tetris

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.33 MB, 20 trang )

ĐẠ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


Giải pháp ......................................................................................................... 4

1.2

Các chức năng chính .............................................................................................. 5

1.3

Phân tích yêu cầu ................................................................................................... 6

CHƢƠNG 2: THIẾT KẾ .................................................................................................. 7
2.1

Cơ sở dữ liệu ......................................................................................................... 7

2.2

Kiến trúc chương trình .......................................................................................... 7

2.2.1

Giới thiệu khái quát mô hình MVVM ............................................................. 7

2.2.2

Kiến trúc của trò chơi Tetris dựa trên mô hình MVVM ................................. 9

2.2.2.1 Model ............................................................................................................. 9
2.2.2.2 ViewModel ................................................................................................... 10
2.2.2.3 View ............................................................................................................. 15

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


2


Báo cáo đồ án Lập trình Win

GVHD: Phan Nguyệt Minh

MỞ ĐẦU
Nhóm chúng em quyết định chọn đề tài này làm đồ án cho môn lập trình Win của mình
được đưa ra vì trong thời gian đăng kí đề tài, 1 thành viên trong nhóm đang xây dựng ứng
dụng trên Windows để tham gia cuộc thi ImagineCup 2011 của Microsoft tổ chức (vào
đến bán kết). Nhận thấy không đủ thời gian để hoàn thành vừa sản phẩm cho cuộc thi lẫn
đồ án nên chúng em quyết định lấy lại và hoàn thiện thêm ứng dụng đó cho đồ án của
mình.
Nội dung của ứng dụng này là dựa trên tựa game Tetris (xếp gạch) cổ diển để xây dựng
một trò chơi giúp người chơi có thêm hứng thú để học tiếng Anh – loại ngôn ngữ quốc tế
rất cần thiết cho học tập và công việc.
Xét về tình hình phát triển, ứng dụng ban đầu để tham gia cuộc thi ImagineCup đã hoàn
thành cơ bản các yêu cầu đặt ra, tuy nhiên đó chỉ là một ứng dụng WPF (Windows
Presentation Foundation) bình thường, cấu trúc lộn xộn, khó nâng cấp, mở rộng và kiểm
thử. Đến khi phát triển thêm để làm đồ án cho môn lập trình Win, nhóm em quyết định
xây dựng lại ứng dụng theo mô hình 3 lớp Model-View-ViewModel (MVVM) của công
nghệ WPF. Có thể nói nhóm đã hoàn thành tốt mục tiêu đặt ra.

3


Báo cáo đồ án Lập trình Win

GVHD: Phan Nguyệt Minh


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

những kiến thức tiếng Anh đến người chơi một cách nhẹ nhàng, hiệu quả. Bước
đầu tiên, chúng tôi sẽ xây dựng trò chơi xếp gạch – tetris với cách chơi có thêm
những cải tiến, đi kèm với việc ứng dụng các công nghệ mạnh mẽ của Microsoft
như WPF, .NET… để tạo ra giao diện bắt mắt, hấp dẫn. Tuy nhiên, chúng tôi
muốn khẳng định lại một điều đó là giải pháp của chúng tôi nhắm vào việc tạo
cảm hứng cho người học tiếng Anh, không phải là một phương pháp học tiếng
Anh mới.

1

Nội dung được trích dẫn từ văn bản đề xuất ý tưởng tham gia cuộc thi ImagineCup 2011 – ImagineCup_2011.docx

4


Báo cáo đồ án Lập trình Win

1.2

GVHD: Phan Nguyệt Minh

Các chức năng chính
Về nội dung, trò chơi cung cấp 2 chế độ chơi khác riêng biệt cho 2 mục đích khác
nhau:
Trò chơi xếp gạch mà chúng tôi đề cập trong phần trình bày ý tưởng là bước đầu
tiên trong quá trình thực hiện giải pháp lâu dài mà chúng tôi đã đưa ra. Tất nhiên,
cách chơi của trò chơi không hề thay đổi. Về hình thức, chúng tôi sẽ xây dựng hai
chế độ chơi riêng biệt:
 Classic mode. Trong phần chơi này, người chơi sẽ tham gia vào một game
xếp gạch cổ điển, không có gì thay đổi trong lối chơi. Mục đích của chế độ

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


GVHD: Phan Nguyệt Minh

Trò chơi cung cấp các tính năng save game – lưu lại trạng thái hiện tại của trò
chơi, load game – nạp lại phần chơi trước đó, hoặc new game – tạo phần chơi mới.

1.3

Phân tích yêu cầu
Trò chơi phải đạt được một số yêu cầu sau:
- Chơi được.
- Có chế độ Save và Load ở các phần chơi đơn.
- Kết nối được vào cơ sở dữ liệu MS SQL để lấy nội dung câu hỏi.
- Đảm bảo xây dựng theo đúng nguyên tắc của mô hình 3 lớp MVVM
- Một số yêu cầu phát sinh trong quá trình xây dựng

6


Báo cáo đồ án Lập trình Win

GVHD: Phan Nguyệt Minh

CHƢƠNG 2: THIẾT KẾ
2.1

Cơ sở dữ liệu

Chương trình sử dụng hệ quản trị cơ sở dữ liệu Microsoft SQL Server. Database bao gồm
3 bảng như hình vẽ bên dưới, trong đó bảng Beginner cung cấp nội dung câu hỏi cho mức

độ 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


MVVM Datagram

Trong đó:
 Model chính là các thực thể dữ liệu, thông tin mà chúng ta cần phải thao tác
trên ứng dụng của mình. Ví dụ như Contact (thông tin liên lạc) với các thuộc tính
như số điện thoại, email, địa chỉ nhà… chính là đối tượng mà ta cần thao tác
(thêm, xóa, sửa). Các đối tượng này khi đưa vào lập trình chính là các class. Một
lưu ý đó là model chỉ lưu giữ thông tin mà thôi, nó không quan tâm đến các hoạt
động hay dịch vụ có thể thay đổi, điều khiển các thông tin đó. Ví dụ như nó không
có trách nhiệm phải định dạng đoạn văn bản hiển thị như thế nào, hay làm sao để
lấy một danh sách các item về từ remote server.
 ViewModel là class định nghĩa cách dữ liệu tương tác với người dùng thông
qua View. Nói cách khác ViewModel là model của View. Một lưu ý quan trọng đó
8


Báo cáo đồ án Lập trình Win

GVHD: Phan Nguyệt Minh

là ViewModel không mô tả giao diện sẽ trông như thế nào. Nó chỉ mô tả cách mà
view hoạt động và thông tin nào sẽ được cung cấp cho người dùng. ViewModel có
thể được xem như là thông dịch viên giữa View và Model vì những thay đổi từ
View lên Model được thực hiện dán tiếp thông qua nó.
 View là thành phần duy nhất mà người dùng có thể tương tác được trong
chương trình, nó chính là thành phần mô tả dữ liệu. Trong WPF, view có thể là
một UserControl, Window hay Page, tuy nhiên cần lưu ý mặc dù View chính là
UserControl nhưng không nhất thiết UserControl phải là View. View thực hiện
việc kết nối dữ liệu đến ViewModel thông qua DataContext của nó.
Việc áp dụng pattern này vào lập trình đem lại một số lợi ích cho developer như

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

2.2.2.2

GVHD: Phan Nguyệt Minh

ViewModel

ClassicSinglePlayerGame:

ClassicSinglePlayerGameViewModel class diagram

ClassicSinglePlayerGameViewModel chính là ViewModel của
ClassicSinglePlayerGame – giao diện của phần chơi đơn mode classic.

Là một ViewModel, đối tượng thuộc kiểu này có nhiệm vụ cung cấp các thuộc
tính cho phép View kết nối tới thông qua data binding và hiển thị dữ liệu ra
bên ngoài cho người dùng. Class này kế thừa từ class BaseGameViewModel,
trong đó BaseGameViewModel lại kế thừa từ BaseViewModel nên nó sẽ có
thêm một vài phương thức và thuộc tính để quản lí việc lưu, load các tùy chọn
về âm thanh, điều khiển của người chơi. Các thuộc tính quan trọng nhất (cũng
là các ViewModel) bao gồm
 GameBoard (thuộc kiểu BoardViewModel). Một số fields, properties và
methods chính của class này bao gồm:
o private byte[,] playBoard – mảng 2 chiều kiểu byte (kích thước
20x14) lưu trữ trạng thái của toàn bộ vùng chơi. Mỗi cell tương ứng với 1

10



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ểm tra tình trạng hiện tại của game. Nếu game over, kết quả trả về null.
Ngược lại, mảng jagged 2 chiều chứa các phần thử int nullable này sẽ trả về
số hàng mà người chơi vừa ăn được cùng với số thứ tự của hàng đó trong
mảng trạng thái.
o Cùng một số phương thức khác liên quan đến điều khiển giao diện người
chơi (HideBlock, DrawBlock, UpdateVisibility…)
 CurrentPiece (thuộc kiểu PieceControl) . Đối tượng này có các thuộc
tính, phương thức chính sau:
o byte[,] blocks – Mảng 2 chiều kích thước 5x5 lưu trữ trạng thái các
viên gạch thuộc khối gạch. Hình bên dưới là ví dụ về hình dạng lúc hiển thị
và các giá trị được lưu trong mảng trạng thái.

11


Báo cáo đồ án Lập trình Win

GVHD: Phan Nguyệt Minh

o BoardViewModel board – Reference đến đối tượng BoardViewModel

của game để kiểm tra tính hợp lệ khi di chuyển (sang trái, sang phải, rơi
xuống).
o Các biến lưu trữ kiểu gạch, kiểu xoay hiện tại của đối tượng.
o Constructors
 PieceControl(int type, int rotation, BoardViewModel
board) – khởi tạo đối tượng mới, cung cấp các thông tin về kiểu,


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


12


Báo cáo đồ án Lập trình Win

GVHD: Phan Nguyệt Minh

là sử dụng ObservableDictionary – một class mở rộng của Dictionary và hỗ
trợ rất tốt cho DataBinding.
o Các thuộc tính IsMenuOpened, IsSettingOpened để quản lí và điều khiển
việc đóng mở menu chính và menu setting.
o Các thuộc tính có kiểu ICommand chính là các Command được bind vào
các button tương ứng. Khi click chuột vào button thì command mà button
đó đã kết nối vào sẽ được thực thi.
o Constructor: DynamicMenuViewModel(BaseViewModel
gameModeViewModel, params ObservableDictionaryobject>[] keySetting) dùng để khởi tạo đối tượng mới. Tham số đầu

tiên nhận 1 đối tượng được kế thừa từ class BaseGameViewModel, trong
trường hợp này chính là class ClassicSinglePlayerGameViewModel. Tham
số thứ 2 là các đối tượng có kiểu ObservableDictionary, từ khóa
params được dùng ở đây vì số đối tượng keySetting của một game mode
có thể khác nhau. Ví dụ như ở các mode chơi đơn sẽ chỉ có một
ObservableDictionary lưu trữ các phím của người chơi, trong khi trong chế
độ chơi 2 người sẽ cần đến 2 đối tượng như vậy.
 NextBoard (thuộc kiểu NextBoardViewModel) – Đối tượng quản lí và điều
khiển việc hiển thị khối gạch tiếp theo sẽ ra. Đối tượng thuộc class này cơ bản
giống với đối tượng thuộc kiểu BoardViewModel về cấu trúc. Tuy nhiên class
này chỉ có một số phương thức đơn giản điều khiển để hiển thị và xóa hình

ả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



Báo cáo đồ án Lập trình Win

GVHD: Phan Nguyệt Minh

người chơi sẽ mất đi cơ hội trả lời câu hỏi và bắt đầu đua lại từ đầu. Các thuộc
tính, phương thức chính:
o public int Second: DataContext của chiếc đồng hồ trên giao diện
của người chơi. Mỗi 1 giây, giá trị Second này sẽ giảm đi 1.
o public int MaxSecond: Số giây tối đa để thanh chữ nhật màu đỏ của
computer gia tăng chiều cao. Cụ thể mỗi khi số điểm của người chơi vượt
quá giá trị của biến LimitScore thì giá trị của MaxSecond sẽ giảm đi 1,
đồng thời giá trị LimitScore tăng lên 5000 điểm.
o public bool IsReverse: biến bool kiểm tra nếu người chơi lựa chọn
chơi theo kiểu ngược lại. Nghĩa là thay vì thanh màu đỏ của computer đạt
chiều cao tối đa thì câu hỏi sẽ xuất hiện còn nếu thanh màu xanh của người
chơi đạt max height sẽ đưa cả 2 về vị trí xuất phát.
o Các phương thức dùng để raise các event.
 ProfileSelector (thuộc kiểu
ChallengeSingleProfileSelectionViewModel). Đây là đối tượng quản lí

và điều khiển hoạt động của cửa sổ yêu cầu xác định tên người chơi mỗi khi
bắt đầu game. Mục đích của việc này là load các câu hỏi có số thứ tự bắt đầu
từ số câu hỏi mà người chơi đó đã trải qua trong mỗi độ khó khác nhau. Các
thuộc tính, phương thức chính bao gồm:
o public string CurrentPlayerName: Tên cuối cùng mà người chơi
chọn cho mình trước khi bắt đầu game (có thể lấy từ một trong số các tên có
sẵn hoặc đặt tên mới).
o public bool Visible: điều khiển hiển thị giao diện của class này ra
bên ngoài.

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ư


ClassicMultiPlayersViewModel, ChallengeMultiplayersViewModel đều

sử dụng lại phần lớn các components sẵn có và được giới thiệu ở trên.
2.2.2.3

View

15


Báo cáo đồ án Lập trình Win

GVHD: Phan Nguyệt Minh

Main Menu

Classic Single Player Game

16


Báo cáo đồ án Lập trình Win

GVHD: Phan Nguyệt Minh

Challenge Single Player Game

Classic multiplayers game


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ệ điều hành: Windows XP trở lên (Cấu hình đề nghị: Windows 7)
Microsoft .NET Framework 4
Microsoft SQL Server Express 2008 hoặc Microsoft SQL Server 2008
Microsoft Installer 4.5
Ngôn ngữ cài đặt: Microsoft Visual C# 4.0
Độ phân giải màn hình: 1366 × 768

3.3 Đánh giá
-

Chương trình hoạt động tốt trên các máy chạy Windows XP, Windows Vista (32
bit và 64 bit) và Windows 7 (32 bit và 64 bit) với độ phân giải tối thiểu 1366 ×
768.

19


Báo cáo đồ án Lập trình Win

GVHD: Phan Nguyệt Minh

CHƢƠNG 4: KẾT LUẬN VÀ HƢỚNG MỞ RỘNG
4.1 Kết luận
Trò chơi đã đáp ứng được các yêu cầu tối thiểu cả về mặt cấu trúc xây dựng bên trong lẫn
yêu cầu về mặt tương tác bên ngoài. Đảm bảo được tính đúng đắn của mô hình MVVM
khi xây dựng ứng dụng. Tuy nhiên trò chơi vẫn còn thiếu tính năng chơi qua mạng và vấn
đề hiển thị không tốt trên các máy tính có độ phân giải màn hình thấp.
4.2 Hƣớng mở rộng
Xét về khả năng mở rộng, trước tiên trò chơi có thể được mở rộng từ một game offline
thành một trò chơi trực tuyến, qua đó mang trò chơi đến với nhiều người hơn và tiện lợi

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



×