II.1. Thiết lập môi trƣờng phát triển ứng dụng
Môi trường được thiết lập trên các hệ điều hành Windows và cụ thể ở đây tôi dùng Windows 8 bản 64 bit. Để thực hiện việc này bạn cần có các gói cài đặt sau:
JDK Java for windows
Link: http://www.oracle.com/technetwork/java/javase/downloads/index.html
SDK Android for windows
Link: http://developer.android.com/sdk/index.html
IDE Eclipse for Java Developer
Link:http://www.eclipse.org/downloads/
II.2. Các thành phần trong Android Project
II.2.1. Tạo mới Android Project
Mở eclipse, chọn File New Android Application Project (trường hợp không có Android Application Project thì ta bấm vào Orther)
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Hình 1.7: Tạo mới 1 ứng dụng Android
- Application Name: Tên ứng dụng mà bạn mong muốn.
- Project Name: Tự động cập nhập khi chúng ta điền Application Name.
- Package Name: Tên package, bạn đặt sao cũng được nhưng sao cho dễ nhớ và không có các ký tự đặc biệt (chỉ gồm chữ thường và các chữ số từ 0 ~ 9).
- Minimum Required SDK: Phiên bản Android thấp nhất chạy ứng dụng này. - Target SDK: Phiên bản hiện tại của ứng dụng.
- Compile With: Phiên dịch sang phiên bản khác.
Sau khi tạo mới xong 1 Android Application Project ta sẽ tìm hiểu cấu trúc của một Android Project. Một Android Project gồm:
- /src folder: chứa các mã nguồn (source code) là các file Java.
- /gen: Chứa file R.java dùng để quản lý các tài nguyên được tạo ra từ các tập tin nguồn, file này tự tạo nên không được chỉnh sửa, thay đổi.
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
- /Android 4.4: bao gồm các API 4.4 tương ứng với hệ điều hành Android 4.4, các thư viện này được Import khi ta khởi tạo Project bằng cách chọn Target ở
trên.
- /assets: chứa các file tài nguyên như database sẽ đi kèm với Project khi ta đóng gói ứng dụng.
- /res/drawable-hdpi: nơi lưu hình ảnh sử dụng cho ứng dụng hdpi (High dpi: độ phân giải cao) tương thích với điện thoại có màn hình WVGA800 (480x800), WVGA854 (480x854).
- /res/drawable-ldpi: cũng là thư mục để chứa các file ảnh có độ phân giải thấp hơn Low dpi: QVGA (240x320), WQVGA400 (240x400), WQVGA432 (240x432).
- /res/drawable-mdpi: chứa các file ảnh có độ phân giải trung bình Medium dpi: HVGA (320x480), WVGA800 (480x800), WVGA854 (480x854).
- /res/layout/main.xml: file thiết kế giao diện cho ứng dụng, có thể tạo thêm nhiều file khác cho nhưng màn hình khác nhau.
- /res/values/strings.xml: định nghĩa giá trị cho các tài nguyên trong project, giúp tối ưu hóa trong việc quản lý giá trị mặc định các đối tượng String trên mỗi layout.
- /AndroidManifest.xml: file cấu hình cho ứng dụng.
Ngoài ra còn có một số folder và file do người lập trình tự định nghĩa.
II.2.2. Thiết kế giao diện trong Android
Không giống như lập trình java thông thường, lập trình android ngoài các lớp
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
dòng XML nào, nhưng sử dụng XML sẽ đơn giản công việc đi rất nhiều. Đồng thời sử dụng XML sẽ giúp việc chỉnh sửa ứng dụng sau này trở nên dễ dàng.
Về nguyên tắc, khi lập trình ứng dụng ta thiết kế giao diện bằng XML và cài đặt các xử lý khi tương tác với giao diện trong code.
Các Layout
Layout được dùng để quản lý các thành phần giao diện khác theo 1 trật tự nhất định. Layout được sử dụng nhằm mục đích thiết kế giao diện cho nhiều độ phân giải. Thường khi lập trình nên kết hợp nhiều layout với nhau để tạo ra giao diện bạn mong muốn.
FrameLayout: Layout đơn giản nhất, thêm các thành phần con vào góc trên bên trái của màn hình.
LinearLayout: thêm các thành phần con theo 1 chiều nhất định (ngang hoặc dọc). Đây là layout được sử dụng nhiều nhất.
RelativeLayout: thêm các thành phần con dựa trên mối quan hệ với các thành phần khác hoặc với biên của layout.
TableLayout: thêm các thành phần con dựa trên 1 lưới các ô ngang và dọc.
AbsoluteLayout: thêm các thành phần con dựa theo tọa độ x, y.
Một số thuộc tính cơ bản
Layout_width, layout_height: chiều rộng của view fill_parent là to bằng kích thước của layout chứa view này, wrap_content là vừa đủ nội dung cần hiển thị của view).
Orientation: với LinearLayout, việc sắp xếp các view là nằm kề nhau theo hàng ngang hoặc hàng dọc, ta khai báo orientation để chọn sắp theo kiểu nào (horizontal/vertical).
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Gravity: thuộc tính này qui định các view nằm bên trong layout sẽ đặt theo vị trí nào so với layout(trung tâm, trái , phải, trên dưới…).
Weight: để các view phần chia tỉ lệ diện tích hiển thị trên màn hình (tỉ lệ tính theo weight của từng view trên tổng số weight, các view ko khai báo weight thì sẽ xem qua width và height).
Đồ họa trên Android
Android cung cấp cho chúng ta một thư viện đồ họa đầy đủ, đó chính là gói
android.graphics. Bên trong nó chứa các lớp đồ họa như Color, Canvas....
- Color: Color được thể hiện bởi 4 giá trị, đầu tiên là alpha, red, green and blue (AGRB). Mỗi thể hiện gồm 256 giá trị(8 bit) do đó một màu có giá trị cao nhất lên tới 32 bit integer. Với android thuận tiện hơn khi cho phép chúng ta thể hiện giá trị màu bằng một số nguyên thay vì thể hiện theo cách của lớp Color hay dùng.
Để khởi tạo một giá trị màu ta có thể khai báo:
Nếu ta có thể biết độ alpha, thì ta có thể khai báo:
Nhưng trong Android, người ta thường định nghĩa trong file XML, chẳng hạn
color.xml để sau này thuận tiện hơn cho việc sửa chữa.
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
- Paint: Paint là một lớp quan trọng trong Android, một ứng dụng android chẳng khi nào thiếu lớp này. Nó bao gồm các kiểu style, color và những thông tin cần thiết để vẽ bất cứ dạng đồ họa nào như bitmap, text,....
Ví dụ: ta paint cái gì lên screen, muốn vẽ nó với solid color. Ta set nó như sau:
cPaint.setColor(Color.LTGRAY);
- Canvas: Là một lớp quan trọng trong quá trình xây dựng ứng dụng, đặc bệt trong Game. Nếu như lớp Paint cung cấp cho bạn những dụng cụ như color, đường nét, độ to nhỏ của nét để vẽ, thì Canvas cung cấp cho bạn những phương thức để vẽ nên những gì bạn muốn, đường thẳng, đường tròn, hình chữ nhật, ... Để sử dụng Canvas để vẽ, ta cần override lại phương thức View.onDraw()
@Override
Protected void onDraw(Canvas canvas) { // Drawing commands go here
}
Lúc này ta có thể đưa những phương thức vẽ vào onDraw().
- Bitmap: Đối tượng Bitmap là một kiểu tổ chức bộ nhớ hoặc định dạng tập tin để lưu trữ ảnh số. Đối tượng Bitmap đơn giản là một mảng hai chiều, trong đó mỗi phần tử chứa một giá trị màu RGB tương ứng với một điểm màu trên bức ảnh số hoặc điểm màu được vẽ lên màn hình.
Ta dùng BitmapFactory.decodeResource(...) để đối tượng Bitmap từ một tập tin hình ảnh lưu trong thư mục drawable.
@Override
protected void onDraw(Canvas canvas) { Paint bPaint=new Paint();
Bitmap bitmap =
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
R.drawable.image);
Canvas.drawBitmap(bitmap,0,0,bPaint); }
Âm thanh trên Android
Android cung cấp cho chúng ta một thư viện đa phương tiện đầy đủ (audio và video), đó là gói android.media. Phần chính của gói này là lớp MediaPlayer.
Trong một ứng dụng game ta cần sử dụng lớp MediaPlayer để phát âm thanh cho game những lúc cần thiết. Android hổ trợ một số định dạng âm thanh như OGG, MP3, WAV. Để phát được âm thanh trước hết ta phải tạo đối tượng MediaPlayer bằng phương thức MediaPlayer.create(...). Sau đó gọi phương thức start() để bắt đầu phát âm thanh.
MediaPlayer media = MediaPlayer.create(this, R.raw.amthanh);
Media.start();
Phương thức seedTo(...) được gọi với tham số là playbackPosition được truyền vào, khi ta gọi phương thức start() thì mediaPlayer sẽ bắt đầu chơi tại vị trí playbackPosition.
Media.seedTo(5000);
Media.start(); // bat đau phát tu giây thu 5
Ngoài ra lớp MediaPlayer còn chứa phương thức stop() để dừng âm thanh khi cần thiết. Nếu đã gọi phương thức stop() để dừng âm thanh, khi nào muốn phát lại âm thanh thì phải gọi phương thức prepare() trước khi gọi lại start() một lần nữa. Nhưng nếu gọi pause() thì ta có thể gọi start() ngay mà không cần gọi prepare().
media.stop(); //dừng âm thanh lại media.prepare();
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Ngoài ra khi đã sử dụng xong đối tượng MediaPlayer ta gọi phương thức release() để giải phóng đối tượng MediaPlayer.
III. Cờ gánh – trò chơi dân gian
III.1. Giới thiệu về Cờ Gánh
Văn hóa dân gian nói chung, trò chơi dân gian nói riêng là nơi nuôi dưỡng tâm hồn con người Việt Nam từ xưa và vẫn còn nguyên giá trị cho đến ngày hôm nay. Trò chơi dân gian không chỉ là hoạt động giải trí những lúc nhàn rỗi mà còn thể hiện bản lĩnh, trí tuệ và lòng tự hào dân tộc của cha ông ta. Cũng như bao miền quê khác trên mảnh đất Việt Nam, người xứ Quảng cũng góp phần làm nên những hương sắc riêng trong văn hóa dân gian. Trong những giá trị văn hóa ấy, cờ Gánh là một trong những trò chơi thể hiện trí tuệ và tính nhân văn sâu sắc của mảnh đất và con người nơi đây. Cho đến nay không ai biết chắc chắn cờ Gánh xứ Quảng được ra đời từ khi nào. Một giả thiết nguồn gốc của trò chơi này được nghĩ đến đó là từ môn cờ Vây, cờ Tướng của người Trung Hoa, cờ Vua của người phương Tây, người dân xứ Quảng đã được giản cách chơi, kết hợp với các môn cờ dân tộc để làm nên cờ Gánh cho riêng mình chăng? Bởi lẽ trước đây Hội An – Quảng Nam là một thương cảng tấp nập, trên bến dưới thuyền, với sự xuất hiện của cả người Hoa lẫn người phương Tây đã mang theo các môn cờ vào nước ta. Tuy nhiên đây chỉ là những giả thiết và cần được tiếp tục chứng minh qua thời gian và tâm sức của những con người yêu mảnh đất xứ Quảng... Tạm gác lại nguồn gốc của trò chơi, chúng ta có thể thấy thông qua bộ môn cờ Gánh người Quảng đã gửi gắm vào đây sự sáng tạo và cả những bài học nhân văn đầy ý nghĩa.
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Hình 1.9: Các em bé đang chơi cờ gánh trên bãi cát
III.2. Luật chơi game cờ gánh
Bàn cờ có kích thước 5x5, có 16 quân cờ (8 xanh, 8 đỏ)
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Mỗi lượt chơi, mỗi bên chỉ được điều khiển một quân cờ của mình đi một bước duy nhất (lượt chơi thay phiên nhau), phải đi theo đúng đường kẻ trên bàn cờ và không được đi đè lên quan cờ khác.
Hình 1.11: Các nước quân cờ có thể đi theo chiều mũi tên
- Luật gánh: khi một quân cờ của đội này đi vào giữa một(hoặc nhiều) cặp quân cờ của đội bạn thì các cặp quân cờ của đội bạn sẽ bị “gánh”, trở thành quân cờ của đội vừa đi.
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
- Luật bóp chết: khi một(hay một nhóm) quân cờ của một đội bị bao vây bởi các quân cờ của đội bạn và không có khả năng di chuyển một bước nào cả thì sẽ bị “bóp chết” trở thành quân của đội kia.
Hình 1.13: Các quân cờ xanh đã bóp chết tất cả các quân cờ đỏ
- Luật mở: Khi một quân cờ của một đội di chuyển và để lại chổ trống mà mình vừa đi ra một điểm mà quân kia có thể đến “gánh” được chỉ sau một bước đi thì gọi là “mở” tại điểm đó. Khi một đội “mở” thì đội kia bắt buộc phải đi quân vào đó ở lượt chơi tiếp theo sau.
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
PHẦN 2:
THIẾT KẾ VÀ XÂY DỰNG ỨNG DỤNG GAME CỜ GÁNH I. Phân tích hệ thống
I.1. Mô tả bài toán
Xây dựng game cờ gánh trên các dòng điện thoại Android cung cấp các mức độ chơi khó dễ khác nhau giữa ngươi chơi với máy.
Khi bắt đầu trò chơi có hiện một màn hình splash hiện ra trong 5 giây. Sau đó tự chuyển sang trạng thái tiếp theo là Main menu.
Ở trạng thái menu sẽ đưa ra các lựa chọn chính sau:
Bắt đầu chơi: Chọn mức độ để bắt đầu chơi giữa người với máy.
Cài đặt: Tùy chọn âm thanh, mặt định ban đầu là bật âm thanh.
Hƣớng dẫn: Hiển thị thông tin hướng dẫn luật chơi game cờ gánh.
Giới thiệu: Hiển thị thông tin về tác giả.
Thoát.
Để thực hiện các lựa chọn trên người dùng phải trỏ vào menu có tên tương ứng với sự lựa chọn đó.
Khi vào cuộc chơi để thực hiện một nước đi người chơi phải trỏ vào quân cờ mình muốn sử dụng và sau đó trỏ và ô mà mình muốn di chuyển đến.
Ứng dụng sẽ cập nhật các quân cờ bị ăn sau mỗi bước đi. Nếu quân cờ bên nào bị hết trước thì bên đó thua cuộc. Nếu người chơi chiến thắng màn hình chiến thắng xuất hiện, ngược lại màn hình thua xuất hiện.
Trong khi người chơi muốn hủy bỏ ván chơi hiện tại và trở về Menu thì chỉ cần touch vào mục Menu ở bên dưới góc màn hình và xác nhận việc hủy bỏ ván chơi để trở về Menu.
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Để lùi lại 1 bước do đi sai người chơi chỉ cần touch vào nút Lùi dưới góc màn hình. Chương trình chỉ cho phép lùi lại 1 nước đi gần nhất.
I.2. Phân tích yêu cầu
Sau khi mô tả tổng quan các chức năng sẽ được xây dựng trong ứng dụng thì môi trường, hệ thống cần phải có một số yêu cầu như sau:
I.2.1. Yêu cầu phi chức năng
Thiết bị di động sử dụng hệ điều hành Android 2.3 trở lên.
Kích thước màn hình: 480 x 800.
Đồ họa bắt mắt, dễ nhìn.
Dễ dàng sử dụng, chuyển đổi qua lại giữa các trạng thái trong khi chơi game.
I.2.2. Yêu cầu chức năng
Sử dụng touch để thao tác các hoạt động khi chơi game.
Cung cấp chức năng bật hoặc tắt âm thanh.
Hiển thị trạng thái của từng lượt đi.
Hiển thị các nước đi hợp lệ khi có một quân cờ được chọn để người chơi chọn ra một nước đi.
Phải có chức năng undo để quay lại 1 nước đi gần nhất nếu trước đó người chơi đi sai.
Thông báo kết quả chung cuộc khi ván chơi kết thúc.
Ứng dụng phải cung cấp đầy đủ thông tin về luật chơi, hướng dẫn cách chơi và cách sử dụng thiết bị để chơi.
II. Thuật toán tìm kiếm có đối thủ
Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
các trò chơi có đối thủ (có hai người tham gia). Việc giải quyết bài toán này có thể đưa về bài toán tìm kiếm trong không gian trạng thái, tức là tìm một chiến lược chọn các nước đi hợp lệ cho máy tính. Tuy nhiên, vấn đề tìm kiếm ở đây phức tạp hơn so với vấn đề tìm kiếm trong chương trước, vì người chơi không biết trước đối thủ sẽ chọn nước đi nào tiếp theo. Chương này sẽ tìm hiểu một số vấn đề sau:
Chiến lược tìm kiếm phổ biến như Minimax
Phương pháp cắt cụt Alpha – Beta, một kỹ thuật tăng hiệu quả của tìm kiếm Minimax
II.1. Cây trò chơi đầy đủ
Các trò chơi có đối thủ có các đặc điểm: hai người thay phiên nhau đưa ra các nước đi tuân theo các luật của trò chơi (các nước đi hợp lệ), các luật này là như nhau đối với cả hai người chơi, chẳng hạn các trò chơi cờ: cờ vua, cờ tướng, cờ ca rô (tic- tăc-toe), cờ gánh …. Cụ thể, trong chơi cờ gánh, một người điều khiển quân Xanh và