Thiết kế hệ thống thông tin

Một phần của tài liệu Xây dựng game cờ gánh dân gian trên điện thoại Android. (Trang 48 - 60)

III.1. Xây dựng kiến trúc chƣơng trình

Kiến trúc của hệ thống menu trong ứng dụng game

Main Menu About Help Options New game Exit

Choose difficulty Game

Options Game Help Game About In Game

Hình 19: Kiến trúc menu trong game

MIN MAX 2 3 3 3 0 0 2 2 3 5 0 2 1 MAX MIN A D E B C

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

Khi bắt Khi bắt đầu vào ứng dụng game sau trạng thái Splash là trạng thái MainMenu. Tại đây User có thể chọn New game, Options, Help, About, Exit.

New game: Bắt đầu vào chơi game, người chơi sẽ chọn mức độ khó để chơi với máy.

Options: Là một menu con bao gồm các lựa chọn như: Sound Options.

Help: Cung cấp thông tin về luật chơi, cách chơi của game, thông tin về cách sử dụng, chức năng của các phím.

About: Cung cấp thông tin về bản quyền (thời gian sản xuất ra ứng dụng, tên tác giả…).

Exit: Cho phép User thoát khỏi game.

Kiến trúc của Game Loop (Vòng lặp game)

Input Handling

A.I. Decisions

Sounds

Update

Draw

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

Draw: vẽ lên màn hình giá trị của các biến trạng thái. Việc vẽ phụ thuộc vào vị trí, sự định hướng, trạng thái. Draw sẽ được vẽ lại khi validate() được gọi.

Update: có nhiệm vụ thay đổi toàn trạng thái của game, không liên quan đến việc draw. Nó bao gồm A.I, Input, và Sound.

A.I. Decisions: A.I tạo ra những quyết định của máy như: di chuyển tới đâu, đánh giá vị trí của quân cờ.

Input Handling: Các hành động của User sẽ được phân tích và xử lý. Nếu lệnh hợp lệ sẽ được thực hiện ngay lập tức, ngược lại chương trình sẽ đưa ra thông tin phản hồi cho User.

Sounds: hiệu ứng âm thanh bao gồm nhạc nền, sound lúc di chuyển 1 quân cờ sẽ được cập nhật mỗi khi cần.

Kiến trúc thuộc tính đối tƣợng

CurrentPos Index PreviousPos Item CurSelectedPos CurTouchPos movedPos isSelected isLoad isPreviousLoad .... indexYou depthInit isPlay Chessboard

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

ChessBoard được tạo nên từ các thuộc tính và đối tượng Item. Đối tượng Item mô tả quân cờ, vị trí hiện tại và vị trí trước đó của quân cờ.

Item

Index: Biểu diễn quân cờ của bên xanh hay đỏ.

CurrentPos: Vị trí hiện tại của quân cờ.

PreviousPos: Vị trí trước đó của quân cở.

ChessBoard

CurSelectedPos: Vị trí hiện tại đang chọn.

CurTouchPos: Vị trí trỏ (touch) lên màn hình.

movedPos: Vị trí quân cờ vừa di chuyển.

isSelected: Kiểm tra quân cờ nào đang chọn không.

isLoad: Kiểm tra nước mới đi mở gánh hay không.

isPreviousLoad: Trạng thái mở gánh trước đó.

indexYou: Màu quân cờ của bạn xanh hay đỏ.

depthInit: Độ sâu (độ khó) của thuật toán tìm kiếm Minimax.

isPlay: Kiểm tra có phải đến lượt bạn đi hay không.

III.2. Xây dựng cấu trúc dữ liệu và thuật toán

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

Bắt đầu

Kết thúc

Khởi tạo độ sâu cần tìm kiếm

nước đi

Thực hiện nước đi tốt nhất cho máy Tăng độ sâu 1 đơn vị Chọn nước đi tốt nhất cho người Đánh giá các nước đi Đánh giá các nước đi Đánh giá các nước đi Thực hiện nước đi

tốt nhất cho máy Tăng độ sâu 1 đơn vị Độ sâu = độ sâu ban đầu Lần lượt thực hiện từng nước đi trong tập các nước đi của máy. Giảm

độ sâu đi 1 đơn vị

Lần lượt thực hiện các nước đi tiếp

theo. Tiếp tục giảm độ sâu 1 đơn

vị

Lần lượt thực hiện các nước đi tiếp

theo. Tiếp tục giảm độ sâu 1 đơn

vị Độ sâu = 0 hoặc ở trạng thái máy chiến thắng Độ sâu = 0 hoặc ở trạng thái người chiến thắng Độ sâu = 0 hoặc ở trạng thái máy chiến thắng Đúng Sai Đúng Đúng Đúng Sai Sai Sai

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

Thiết kế dữ liệu

Mỗi quân cờ item sẽ có các thuộc tính (indexBitmap, currentCol, currentRow, previousCol, previousRow) chi tiết như sau:

- indexBitmap: Biễu diễn giá trị quân xanh là 1, quân đỏ là 2. - currentCol: Vị trí cột hiện tại của quân cờ.

- CurrentRow: vị trí hàng hiện tại của quân cờ. - previousCol: Vị trí cột trước đó quân cờ vừa rời đi. - previousRow: Vị trí dòng trước đó quân cờ vừa rời đi.

Khởi tạo bàn cờ

Bàn cờ ChessBoard là một tập hợp Items gồm 16 quân cờ. Ta sẽ khởi tạo Items là mảng gồm 16 phẩn tử kiểu Item tương ứng với 16 quân cờ trên bàn cờ.

Ta khởi tạo giá trị ban đầu cho bàn cờ như sau:

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

Ta tạo được mảng như sau:

Item[] = { item1(1, 0, 0, x, x), item2(1, 1, 0, x, x), item3(1, 2, 0, x, x), item4(1, 3, 0, x, x), item5(1, 4, 0, x, x), item6(1, 0, 1, x, x), item7(1, 4, 1, x, x), item8(1, 0, 2, x, x), item9(2, 4, 2, x, x), item10(2, 0, 3, x, x), item11(2, 4, 3, x, x), item12(2, 0, 4, x, x), item13(2, 1, 4, x, x), item14(2, 2, 4, x, x), item15(2, 3, 4, x, x), item16(2, 4, 4, x, x) }  Nƣớc đi hợp lệ

Để xác định những nước mà quân cờ có thể đi ta dựa vào vị trí hiện tại của quân cờ. Nước đi hợp lệ là nước đi từ 1 quân cờ đến 1 vị trí kề nó, phải đi theo đường kẻ trên bàn cờ và không được đè lên quân cờ khác.

Nhìn vào bàn cờ ta thấy nếu quân cờ đang đứng ở vị trí dòng currentRow và vị trí cột currentCol thì:

 Nếu tổng số dòng và số cột (currentCol+currentRow) là một số lẻ thì quân cờ đó chỉ có thể đi theo hàng ngang hoặc cột dọc.

 Nếu tổng số dòng và số cột (currentCol+currentRow) là một số chẵn thì ngoài đi ngang, đi dọc thì quân cờ đó còn có thể đi theo đường chéo.

Chỉ đi trong phạm vi bàn cờ nên vị trí đi tới phải thỏa mãn số dòng và số cột nằm trong khoảng từ 0 đến 4.

Ví dụ 2: Quân cờ sau đang nằm ở vị trí (2,1) có tổng số dòng và cột là 3 (số lẻ) nên chỉ có thể đi ngang hoặc dọc

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

Hình 24: Ví dụ quân cờ chỉ di chuyển theo hàng ngang, cột dọc

Ví dụ 3: Quân cờ sau lại có thể di chuyển theo hàng ngang cột dọc và đường chéo vì nằm ở vị trí (3,1) có tổng số dòng và cột là 4 (số chẵn).

Hình 25:Nước đi hợp lệ của quân cờ

Sau mỗi nước đi ta thay đổi vị trí của quân cờ đó. Giả sử di chuyển quân cờ item1 đến vị trí mới (i, j) ta sẽ thay đổi giá trị của item1 như sau:

item1.previousCol = item1.currentCol; item1.previousRow = item1.currentRow;

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

Tương tự như việc di chuyển các quân cờ, việc ăn các gánh cũng phụ thuộc vào vị trí mà quân cờ di chuyển đến.

Mở gánh

Để kiểm tra nước vừa đi có phải là nước mở gánh hay không, ta cần kiểm tra các điều kiện sau:

- Có ít nhất 1 quân cờ của đối phương có thể di chuyển đến vị trí cũ mà quân cờ vừa rời khỏi

- Nếu quân cờ của đối phương di chuyển tới vị trí đó thì phải gánh được ít nhất 1 gánh

Nếu thỏa mãn cả 2 điều kiện trên thì quân cờ vừa đi sẽ là nước mở gánh tại điểm đó (vị trí mà quân cờ vừa rời khỏi), bắt buộc đối phương phải di chuyển vào vị trí mở gánh để ăn gánh.

Vi dụ 4: Trường hợp sau đây là mở gánh: Khi quân xanh ở vị trí (1,1) đi lên vị trí (1,0) thì mở gánh tại vị trí (1,1) để quân đỏ đi vào vị trí (1,1) này sẽ ăn gánh. Nên bắt buộc quân đỏ phải đi vào ăn gánh, không được đi vào ô khác khi đang mở gánh.

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

Bóp chết

Để kiểm tra nước vừa đi có bóp chết được quân cờ nào của đối phương hay không, ta lần lượt thực hiện:

- Ăn các gánh có thể của đối phương (chuyển các quân cờ bị gánh thành quân cờ của mình).

- Tạo một mảng tạm ItemsTemp[] để thực hiện việc kiểm tra các quân cờ bị kẹt. Ban đầu ta gán mảng tạm ItemsTemp[] bằng giá trị mảng Items[] chứa trạng thái hiện tại của các quân cờ.

- Thực hiện việc loại bỏ các quân cờ có thể di chuyển của đối phương ra khỏi mảng tạm ItemsTemp[] cho đến khi nào không còn quân cờ nào của đối phương có thể di chuyển được nữa thì dừng lại.

- Kiểm tra mảng tạm ItemsTemp[] xem còn tồn tại quân cờ nào của đối phương hay không. Tất cả những quân cờ của đối phương còn tồn tại trong mảng tạm ItemsTemp[] chính là những quân cờ bị bóp chết, sẽ trở thành quân cờ của mình.

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

III.3. Biểu đồ trạng thái

 Biểu đồ trạng thái của Ingame

Trạng thái InGame sẽ tồn tại cho đến khi ván chơi kết thúc hoặc User nhấn nút Exit. Sau khi ván chơi kết thúc nếu User chọn Continue thì trạng InGame sẽ được khởi động lại, ngược lại User chọn Exit lập tức sẽ chuyển đến trạng thái MainMenu (kết thúc trạng thái InGame).

Hình 28: Biểu đồ trạng thái InGame

Biểu đồ trạng thái cho cả hệ thống

Bắt đầu ứng dụng là trạng thái Splash, sau đó sẽ đến trạng thái MainMenu. Ở trạng thái MainMenu sẽ phân nhánh ra thành nhiều trạng thái con: New game, Options, Help, About. Từ các trạng thái con đó có thể quay trở về MainMenu. Từ MainMenu chọn Exit sẽ chuyển sang trạng thái kết thúc.

Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến

Một phần của tài liệu Xây dựng game cờ gánh dân gian trên điện thoại Android. (Trang 48 - 60)