You are on page 1of 27

TRƯỜNG ĐẠI HỌC PHÚ YÊN

KHOA KỸ THUẬT – CÔNG NGHỆ

TIỂU LUẬN

ỨNG DỤNG LẬP TRÌNH DI ĐỘNG


TRÊN TRÒ CHƠI TICTACTOE

Sinh viên thực hiện : Nguyễn Thị Phúc Loan


Thongmaha Soutthida
Amnard Sipaserd
Giảng viên hướng dẫn : ThS. Nguyễn Quốc Dũng

Phú Yên, 2022


TRƯỜNG ĐẠI HỌC PHÚ YÊN
KHOA KỸ THUẬT – CÔNG NGHỆ

TIỂU LUẬN

ỨNG DỤNG LẬP TRÌNH DI ĐỘNG


TRÊN TRÒ CHƠI TICTACTOE

Sinh viên thực hiện : Nguyễn Thị Phúc Loan


Thongmaha Soutthida
Amnard Sipaserd
Giảng viên hướng dẫn : ThS. Nguyễn Quốc Dũng

Phú Yên, 2022


2
MỤC LỤC
A) MỞ ĐẦU..................................................................................................................6
1. Mục tiêu....................................................................................................................6
2. Đối tượng..................................................................................................................6
3. Phạm vi.....................................................................................................................6
4. Nội dung...................................................................................................................6
B) NỘI DUNG..............................................................................................................7
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT.............................................................................7
1.1. Sơ lược về lập trình di động trên nền tảng Android...................................7
1.2. Phương thức làm việc với cơ sở dữ liệu thời gian thực Firebase............10
CHƯƠNG 2: PHÂN TÍCH BÀI TOÁN VÀ KẾT QUẢ.........................................12
2.1. Mô tả bài toán và tường minh vấn đề...........................................................12
2.1.1. Mô tả bài toán...................................................................................................12
2.1.2. Tường minh chi tiết các giải thuật trong mã chương trình..........................12
2.2. Phân tích kết quả cần đạt được.....................................................................24
CHƯƠNG 3: TRIỂN KHAI MÔ HÌNH GIAO DIỆN ỨNG DỤNG TRONG MÃ
CHƯƠNG TRÌNH BẰNG NGÔN NGỮ JAVA.......................................................25
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN................................................................27

3
DANH MỤC BẢNG BIỂU, HÌNH ẢNH VÀ CHỮ VIẾT TẮT
Hình 1.1. Lập trình android ………………………………………………………………….…………..….7
Hình 1.2. Lập trình java ……………………………………………………………………………….….…..8
Hình 1.3. Lập trình kotlin …………………………………………………….….....9
Hình 1.4. Hình ảnh đại diện cho nền tảng cơ sở dữ liệu Firebase ………………...10
Hình 2.1. Hình ảnh biểu diễn cấu trúc thư mục dẫn đến tệp xml của hộp thoại ......15
Hình 2.2. Hình ảnh biểu diễn nút bắt đầu vòng chơi ………………………….......15
Hình 2.3. Hình biểu diễn bắt đầu khám phá cơ sở dữ liệu Firebase bước đầu ........16
Hình 2.4. Hình biểu diễn thêm mới nền cơ sở dữ liệu ……………………….…....16
Hình 2.5. Bước tạo mới cơ sở dữ liệu ………………………………….……….…17
Hình 2.6. Ẩn chia sẻ thông tin hoặc không cung cấp dữ liệu đến các nhà phân tích
Google ……………………………………………………………….………….…17
Hình 2.7. Dựng cung cấp đủ các mối liên quan cho cơ sở dữ liệu ………………..18
Hình 2.8. Biểu diễn màn hình đã sẵn sàng để kết nối cơ sở dữ liệu đến ứng dụng miền
đơn ………………………………………………………………………………...18
Hình 2.9 Cài cắm cơ sở dữ liệu đã tạo vào ứng dụng ……………………………..19
Hình 2.10. Màn hình hiển thị nơi lấy mã ứng dụng ……….………………………19
Hình 2.11. Màn hình đăng ký ứng dụng …………………………………………..20
Hình 2.12. Tải về tệp Google.json …………………………………………….…..20
Hình 2.13. Hình ảnh biểu diễn nạp tệp json phải tồn tại thì hệ thống nhận ứng
dụng ………………………………………………………………………………..21
Hình 2.14. Cấu hình phân lớp dựng …………………………………………….…21
Hình 2.15. Màn hình hoàn thành tác vụ kết nối cơ sở dữ liệu …………………….22
Hình 2.16. Hình ảnh biểu thị quy tắc thiết lập đọc – ghi của từng child để nạp và đẩy
dữ liệu ……………………………………………………………………………...23
Hình 2.17. Biểu diễn mã chương trình bổ nghĩa cho phương thức chuyển đổi lượt
chơi trên giao diện ứng dụng trò chơi ……………………………………………..25
4
Hình 3.1. Hình ảnh biểu thị 2 màn hình máy ảo chạy song hanh ………………… 25
Hình 3.2. Hình ảnh hiển thị bên thắng, bên thua …………………………………. 26
Hình 3.3. Hình ảnh hiển thị trực tiếp giá trị sự kiện lắng nghe được nạp đọc-ghi trên
cơ sở dữ liệu thời gian thực Firebase …………………………………………….. 26

STT Từ viết tắt Chữ viết đầy đủ


1 Json JavaScript Object Notation - kiểu dữ liệu mở trong JavaScript
2 Id identification
3 SDK Software Development Kit
4 AVD Android Virtual Device

5
A) MỞ ĐẦU
1. Mục tiêu
- Hiểu biết và ứng dụng được các hàm của ngôn ngữ Java trên nền tảng lập
trình di động Android.
- Tạo trò chơi TicTacToe cho hai người chơi theo địa chỉ local của Firebase.

2. Đối tượng
- Môi trường lập trình ứng dụng di động Android.
- Trò chơi và hình thức của bài toán.
- Các biểu tượng X và O đôi một từng cặp hoặc đối tượng đôi một khác
được đặt trên lưới ma trận 3x3.

3. Phạm vi
- Dạng thuật toán ở mức hiểu biết xác suất.
- Báo cáo của dự án này chỉ dừng ở mức độ mô phỏng thuật toán bằng
phương pháp trình bày và giải quyết bài toán.
- Nền tảng di động Android.
4. Nội dung
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. Sơ lược về lập trình di động trên nền tảng Android
1.2. Phương thức làm việc với cơ sở dữ liệu thời gian thực Firebase
CHƯƠNG 2: PHÂN TÍCH BÀI TOÁN VÀ KẾT QUẢ
2.1 Mô tả bài toán và tường minh vấn đề
2.2 Phân tích kết quả cần đạt được
CHƯƠNG 3: TRIỂN KHAI MÔ HÌNH GIAO DIỆN ỨNG DỤNG TRONG MÃ
CHƯƠNG TRÌNH BẰNG NGÔN NGỮ JAVA

6
B) NỘI DUNG
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. Sơ lược về lập trình di động trên nền tảng Android
Android là hệ điều hành trên điện thoại di động (và hiện nay là cả trên một số đầu
phát HD, HD Player, TV) phát triển bởi Google và dựa trên nền tảng Linux. Lập trình
android là một lập trình ứng dụng di động phổ biến. Trước đây, Android được phát
triển bởi công ty liên hợp Android ( sau đó được Google mua lại vào năm 2005).
Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ Java. Sự ra
mắt của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập của liên minh
thiết bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm và viễn
thông nhằm mục đính tạo nên một chuẩn mở cho điện thoại di động trong tương lai.

Hình 1.1. Lập trình android


Kiến trúc cơ bản của hệ điều hành Android gồm 5 phần chính được chứa trong 4 lớp:

- Nhân Linux: Đây là nhân nền tảng mà hệ điều hành Android dựa vào nó để
phát triển. Đâu là lớp chứa tất cả các thiết bị giao tiếp ở mức thấp dùng để điều
khiển các phần cứng khác trên thiết bị Android.
- Thư viện: Chứa tất cả các mã cái mà cung cấp cấp những tính năng chính của
hệ điều hành Android, đôi với ví dụ này thì SQLite là thư viện cung cấp việc
hộ trợ làm việc với database dùng để chứa dữ liệu. Hoặc Webkit là thư viện
cung cấp những tính năng cho trình duyệt Web.
- Android runtime: Là tầng cùng với lớp thư viện Android runtime cung cấp một
tập các thư viện cốt lỗi để cho phép các lập trình viên phát triển viết ứng dụng
bằng việc sử dụng ngôn ngữ lập trình Java. Android Runtime bao gốm máy ảo
Dalvik(ở các version < 4.4, hiện tài là phiên bản máy ảo ART được cho là
7
mạnh mẽ hơn trong việc xử lý biên dịch). Là cái để điều khiển mọi hoạt động
của ứng dụng Android chạy trên nó(máy ảo Dalvik sẽ biên dịch ứng dụng để
nó có thể chạy(thực thi) được , tương tự như các ứng dụng được biên dịch trên
máy ảo Java vậy). Ngoài ra máy ảo còn giúp tối ưu năng lượng pin cũng như
CPU của thiết bị Android
- Android framework: Là phần thể hiện các khả năng khác nhau của Android(kết
nối, thông báo, truy xuất dữ liệu) cho nhà phát triển ứng dụng, chúng có thể
được tạo ra để sử dụng trong các ứng dụng của họ.
- Application: Tầng ứng dụng là tầng bạn có thể tìm thấy chuyển các thiết bị
Android như Contact, trình duyệt…Và mọi ứng dụng bạn viết đều nằm trên
tầng này.

Ngôn ngữ lập trình là một tập con của ngôn ngữ máy tính, được thiết kế và
chuẩn hóa để truyền các chỉ thị cho các máy có bộ xử lý (CPU), nói riêng là máy
tính. Ngôn ngữ lập trình được dùng để lập trình máy tính, tạo ra các chương trình
máy nhằm mục đích điều khiển máy tính hoặc mô tả các thuật toán để người
khác đọc hiểu.
Nếu bạn muốn phát triển ứng dụng di động android, bạn cần biết các ngôn ngữ
lập trình để xây dựng nó. Các ngôn ngữ lập trình adroid gồm có:
- Java

Hình 1.2. Lập trình java


Dựa vào chỉ số TIOBE, Lập trình Java là ngôn ngữ lập trình phổ biến nhất tính
đến tháng sáu năm 2017. Nếu bạn đang có ý định xây dựng một ứng dụng Android, tỉ
lệ lớn là bạn sẽ làm việc với Java. Với một cộng đồng developer lớn mạnh được
thành lập từ khá lâu, bạn sẽ dễ dàng nhận được sự hỗ trợ và giúp đỡ về chuyên môn.

8
Vậy nên khi bạn phát triển ứng dụng di động bằng Java, bạn có thể thỏa sức
sáng tạo để xây dựng bất kì loại ứng dụng nào mà bạn muốn. Hạn chế duy nhất chỉ có
thể chính là sức sáng tạo của bạn hay sự hạn chế trong kiến thức của bạn về Java.

- Kotlin

Hình 1.3. Lập trình kotlin

Kotlin là ngôn ngữ lập trình được phát triển bởi JetBrains, một công ty Cộng
Hòa Czech phát triển ItelliJ IDEA, một IDE khá nổi tiếng. Đội ngũ lập trình Android
của Google gần đây đã thông báo về việc họ đang chính thức thêm hỗ trợ cho Kotlin.
Kotlin được phát triển để giải quyết một vài vấn đề tồn tại trong Java. Theo đa
số người ủng hộ việc dùng Kotlin, thì syntax của nó đơn giản và gọn hơn, do đó ít
dẫn tới xảy ra việc dòng code rườm rà, dài dòng. Điều này có tác dụng giúp người
viết tâp trung trong việc giải quyết vấn đề hơn là cố xoay sở với những câu lệnh dài
dòng phức tạp. Ngoài ra, bạn còn có thể kết hợp Kotlin và Java cùng nhau trong dùng
một dự án, khai thác hết thế mạnh của cả 2 ngôn ngữ.

9
1.2. Phương thức làm việc với cơ sở dữ liệu thời gian thực Firebase

Hình 1.4. Hình ảnh đại diện cho nền tảng cơ sở dữ liệu Firebase
Firebase Realtime database là một cloud hosted database hỗ trợ đa nền tảng:
Android, IOS và Web. Tất cả dữ liệu được lưu trữ ở định dạng JSON và với bất kể
một sự thay đổi dữ liệu nào thì có sự phản hồi ngay lập tức, hiển thị đồng bồ trên các
nền tảng và các thiết bị. Bài hướng dân này xây dựng nhằm thể hiện sự phản hồi theo
thời gian tực của apps một cách đơn giản khi sử dụng Firebase Realtime database.

- Dữ liệu được lưu trữ như nào - Định dạng Json


Firebase realtime database lưu trữ dữ liệu theo định dạng JSON. Về cơ bản thì
toàn bộ dữ liệu là một JSON tree lớn cùng với nhiều điểm node. Nên khi bạn xây
dựng dữ liệu, bạn cần chuẩn bị một cấu trúc json để dễ dàng cho việc truy cập tránh
việc các node con bị lồng nhau
Dưới đây là một ví dụ về việc lưu trữ danh sách các hồ sơ người dùng và các
bài viết trong cây json. Bạn có thể tìm hiểu về cấu trúc dữ liệu tại đây để thực hành.

- Dữ liệu offline
Firebase cung cấp sự hỗ trợ tuyệt vời khi nói đến dữ liệu offline. Nó tự động
lưu trữ offline khi không có kết nối internet. Tuy nhiên nó sẽ cho phép lưu trữ vào ổ
đĩa persistence khi data offline thậm chí khi ứng dụng restart. Ổ đĩa persistence có thể
gọi đến bởi dòng code ở phía dưới.

10
- Thực hiện các thao tác CRUD
Trước khi thực hành. Tôi sẽ hướng dẫn các bạn những thông tin cơ bản về việc
thực thi các phương thức CRUD
Để thực hiện bất kỳ phương thức nào trên cơ sở dữ liệu cho dù đó có thể được
đọc hoặc ghi, bạn cần phải có được các tham chiếu đến cơ sở dữ liệu. Các mã dưới
đây cho phép bạn tham chiếu đến nút trên cùng của cơ sở dữ liệu JSON. Từ đây bạn
cần phải sử dụng các tên nút con phải đi qua các nút khác.

11
CHƯƠNG 2: PHÂN TÍCH BÀI TOÁN VÀ KẾT QUẢ
2.1. Mô tả bài toán và tường minh vấn đề
2.1.1. Mô tả bài toán
Trong game này sẽ có hai người tham gia. Trong đó 1 người sẽ chơi với ký
hiệu X và 1 người dùng ký hiệu O, người chơi sẽ nhấn vào mỗi ô để chọn nước đi
cho lượt chơi của minh trên bản đồ ma trận 3x3, khi chọn ô tại phía người chơi sẽ giữ
nút chơi tại vị trí đó với biểu tượng dấu X và nạp dữ liệu theo mã kết nối trên cơ sở
dữ liệu thời gian thực, ngược lại đối với đối thủ chơi cùng. Lượt chơi sẽ kết thúc khi
một bên người chơi lấp đầy một đường thẳng trùng nhau 3 biểu tượng có nghĩa là
Người nào tạo được liên tiếp 3 ký tự trên cùng một đường thẳng có thể là ngang hoặc
dọc hoặc chéo sẽ là người giành chiến thắng hoặc 9 ô trong ma trận 3x3 được lấp đầy
thì thông báo đẩy sẽ là hòa nhau.
Như vậy, trò chơi sẽ được thành lập trên giao diện thực thi mã thuộc trình diện
hỗ trợ nền tảng ứng dụng Android.
2.1.2. Tường minh chi tiết các giải thuật trong mã chương trình
Chương trình đã cá nhân hóa Manifest ràng buộc lớp đối tượng PlayerName
(Người chơi) được xử lý ưu tiên trước khi thực hiện khởi tạo lớp hoạt động chính
MainAcitivity để đúng về mặt kỹ thuật logic trò chơi cần xác định và phân biệt hai
đối tượng người chơi.
<activity
android:name=".PlayerName"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity">
</activity>

12
Các biến đầu vào:

- Các biến đầu vào ở MainActivity:


private LinearLayout player1Layout, player2Layout;
private ImageView image1, image2, image3, image4, image5, image6, image7,
image8, image9;
// Mục đích của việc xếp khai báo biến đầu vào như trên để có màn hình chơi trò
chơi tương thích và trực quan với từng khung kích cỡ ứng dụng điện thoại, bao gồm
các khung ảnh cho mỗi nút trên ma trận X_O.

private TextView player1TV, player2TV; // sử dụng để biểu thị cho khung nhập tên
người chơi vào
private final List<int[]> combinationsList = new ArrayList<>(); // khai báo danh
sách để biết thắng (danh sách xác định mặc định một loạt 3 vị trí thẳng hàng nhau
trên bàn cờ ma trận trò chơi 3x3)
private final List<String> doneBoxes = new ArrayList<>(); // khi bấm ô để chọn nó
sẽ lưu trong doneBoxes (có nghĩa là danh sách chứa các ô và nước đi đã hoàn thanh)
sau đó nạp vào combinnationList để biết thắng thua
private boolean opponentFound = false; // là biến tìm thành tố người chơi
private String status = "matching"; // biến biểu thị mã trạng thái đã ghép 2 đối tượng
mã người chơi
private String opponentUniqueId = "0"; // biến người chơi ban đầu
private String playerTurn = ""; // biển trả lời ô của bên thứ nhất đã chọn về màn hình
chơi bên người chơi thứ hai
private String connectionId =""; // biển để thực thi truy vấn ra mã kết nối
ValueEventListener turnsEventListener, wonEventListener; // sự kiện giá trị biến để
lắng nghe child với cơ sở dữ liệu
private final String[]boxesSelectedBy = {"","","","","","","","",""}; //Chuỗi ô trong
ma trận ban đầu thiết lập mặc định trống hoàn toàn, để có một bàn cờ cho vòng chơi
mới, không chứa các giá trị
Chúng tôi xác định một mảng số nguyên có tên gamestate có 9 giá trị (vì có 9 lưới).
Tất cả chín phần tử của mảng sẽ được khởi tạo thành ''(rỗng).
//selected boxes by players. empty fields will be replaced by player id
private final String[]boxesSelectedBy = {"","","","","","","","",""};
13
Chúng tôi có tổng cộng 8 vị trí chiến thắng trong trò chơi. và các vị trí này được lưu
trữ trong một danh sách có tên “combinationsList”
{0,1,2}(ngang),{3,4,5}(ngang),{6,7,8,}(ngang),{0,3,6,}(dọc),{1,4,7}(dọc), {2,5,8,}
(dọc),{0,4,8}(đường chéo),{2,4,6}(đường chéo)
// rule.Generating winning combinations – Luật phổ ô mặc định cho xác định
chiến thắng chung cuộc
combinationsList.add(new int[]{0,1,2});
combinationsList.add(new int[]{3,4,5});
combinationsList.add(new int[]{6,7,8});
combinationsList.add(new int[]{0,3,6});
combinationsList.add(new int[]{1,4,7});
combinationsList.add(new int[]{2,5,8});
combinationsList.add(new int[]{2,4,6});
combinationsList.add(new int[]{0,4,8});

- Các biến đầu vào ở PlayerName:


final EditText playerNameEt = findViewById(R.id.playerNameEt); // người chơi
nhập tên
final AppCompatButton startGameBtn = findViewById(R.id.startGameBtn);
// người chơi bấm start để bắt đầu game khi ở màn hình đợi vào lượt, vòng chơi
(splash screen)
final String getPlayerName = playerNameEt.getText().toString(); // biến xác nhận tên
người chơi và chuyển thành dạng chuỗi

- Các biến đầu vào ở WinDialog: //Lớp hộp thoại thông báo
this.message = message; //message – biểu diễn thông điệp gửi đến người chơi mỗi
vòng chơi (round playing-game) để người chơi biết được tình hình hiển thị trên set
chơi của họ.
progressDialog.setMessage("Waiting for Opponent");

this.mainActivity =((MainActivity)context);

14
private final String message;
private final MainActivity mainActivity;
final TextView messageTV = findViewById(R.id.messageTV);
<TextView
android:id="@+id/messageTV"… // Đoạn mã biểu diễn định danh cho id messageTV
– nơi sẽ hiển thị các chuỗi thông điệp

Hình 2.1. Hình ảnh biểu diễn cấu trúc thư mục dẫn đến tệp xml của hộp thoại
final Button startBtn = findViewById(R.id.startNewBtn);
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/startNewBtn" // Đoạn mã biểu diễn định danh nút bắt đầu vòng
chơi mới sau khi hiển thị thông điệp

Hình 2.2. Hình ảnh biểu diễn nút bắt đầu vòng chơi

- Cách đăng ký và khởi tạo tệp google.json


15
Bước 1: Đi đến đường dẫn chính của nền tảng cơ sở dữ liệu FireBase
https://firebase.google.com/

Hình 2.3. Hình biểu diễn bắt đầu khám phá cơ sở dữ liệu Firebase bước đầu
Bước 2: Khởi tạo dự án lưu trữ cơ sở dữ liệu

Hình 2.4. Hình biểu diễn thêm mới nền cơ sở dữ liệu

Bước 3: Tạo mới với tên cơ sở dữ liệu tùy ý

16
Hình 2.5. Bước tạo mới cơ sở dữ liệu
Bước 4: Bước chọn “Disable” để ẩn không cho phép Google phân tích nguồn dữ liệu
đang thực hiện

Hình 2.6. Ẩn chia sẻ thông tin hoặc không cung cấp dữ liệu đến
các nhà phân tích Google

Bước 5: Bước ngắt quãng chờ trình dựng cung cấp đủ các mối liên quan cho cơ sở dữ
liệu
17
Hình 2.7. Dựng cung cấp đủ các mối liên quan cho cơ sở dữ liệu
Bước 6: Chọn Android để tiếp tục

Hình 2.8. Biểu diễn màn hình đã sẵn sàng để kết nối cơ sở dữ liệu
đến ứng dụng miền đơn

Bước 7: Cài cắm cơ sở dữ liệu đã tạo vào ứng dụng

18
Hình 2.9 Cài cắm cơ sở dữ liệu đã tạo vào ứng dụng
Bước 8: Lấy mã Id của ứng dụng

Hình 2.10. Màn hình hiển thị nơi lấy mã ứng dụng

Bước 9: Đăng ký ứng dụng với cơ sở dữ liệu


19
Hình 2.11. Màn hình đăng ký ứng dụng
Bước 10: Hệ thống của Google được cấp phép sinh ra một tệp json, tải về tệp này

Hình 2.12. Tải về tệp Google.json

Bước 11: Đưa tệp json vừa tải về vào ứng dụng miền
20
Hình 2.13. Hình ảnh biểu diễn nạp tệp json phải tồn tại thì hệ thống nhận ứng dụng
Bước 12: Cấu hình phân lớp dựng các thiết lập thư viện dựng độc lập

Hình 2.14. Cấu hình phân lớp dựng

Bước 13: Thành công kết nối ứng dụng với cơ sở dữ liệu thời gian thực Firebase.

21
Hình 2.15. Màn hình hoàn thành tác vụ kết nối cơ sở dữ liệu

- Class MainActivity :
Thao tác nạp kết nối và xử lý từng vòng chơi
+ Đầu tiên sẽ kiểm tra các người chơi, nếu không có sẽ đợi người chơi tham gia,
+ Nếu chỉ có 1 người chơi, thì phải đợi để có đối thủ tham gia,
+ Khi đã có đối thủ tham gia thì kết nối sẽ thành công với 2 người chơi,
+ Kiểm tra nếu ID đối thủ trùng với ID kết nối thì sẽ xem thông tin người chơi,
+ Nếu kết nối đã có, thì xóa kết nối khỏi cơ sở dữ liệu,
+ Đặt tên của đối thủ vào TextView,
+ Đặt lượt đi và lượt thắng vào cơ sở dữ liệu,
+ Lượt đi đầu tiên sẽ là người tạo phòng.
Trình bày thao tác sự kiện lắng nghe theo child turns & won trong vòng
chơi đang hiện
- Đầu tiên sẽ lấy dữ liệu về toàn bộ lượt đi trong trận nếu có lượt đi từ người chơi, sẽ
lấy dữ liệu về vị trí lượt đi đó.
- Sử dụng hàm selectbox là hàm tính toán lưu trữ vị trí ô đã chọn và id của người chơi
tại vị trí chọn đó và nén lại thành mã chọn chuyển ra child “turns” đưa lên cơ sơ dữ
liệu.

22
String getWinPlayerId = snapshot.child("player_id").getValue(String.class);
- Viết khai báo chuỗi Id người thắng , getWinPlayerId nó chuyền chuỗi người thắng,
lấy chuỗi id người chơi trong ván đấu khi đã nhận được trên cơ sở dữ liệu id của
người chơi, nếu id người chơi mà cơ sở dữ liệu trả về bởi child “won” (đẩy ra từ hàm
thuật toán checkPlayerWin) trùng khớp với một trong hai id người chơi thì thông báo
chiến thắng với bên player_id thắng dòng thông điệp “You won the game!” bên đối
phương còn lại không nhận được id khớp với id của nó thì sẽ thông báo
“Oh,Opponent won!”

Hình 2.16. Hình ảnh biểu thị quy tắc thiết lập đọc – ghi của từng child
để nạp và đẩy dữ liệu
Phương thức playerTap(applyPlayerTurn) sẽ kiểm tra thẻ của lưới được người
chơi chạm vào và chuyển đổi thẻ đó thành số nguyên. Và nếu lưới chứa (2 tức là null)
thì nó sẽ lưu giá trị của activePlayer trong trạng thái trò chơi và sẽ thay đổi giá trị của
activePlayer từ 0 thành 1 và ngược lại. Ở mỗi lượt, nó sẽ đặt hình ảnh của X khi giá
trị của activePlayer là 0 và sẽ đặt hình ảnh của O khi giá trị của activePlayer là 1.

Hình 2.17. Biểu diễn mã chương trình bổ nghĩa cho phương thức chuyển đổi
23
lượt chơi trên giao diện ứng dụng trò chơi
2.2. Phân tích kết quả cần đạt được
Trình bày nhanh về 2 hàm thuật toán mô tuýp của trò chơi
Kết quả đạt được cần được trình diễn rõ ràng từng key kết nối và key đọc và ghi được
trong tiến trình kết nối đến cơ sở dữ liệu thời gian thực firebase:
selectBox |
boxesSelectedBy[selectedBoxPosition - 1] = selectedByPlayer;
// Tối ưu vị trí đã chọn để người chơi nhận biết nước đi đã sử dụng
if (doneBoxes.size() == 9)
// Ràng buộc các ô đã chọn được lấp đầy thì thông báo đẩy ngừng lượt chơi đối với
người chơi và không xác định người thắng, ván đầu hòa
Ghép ký hiệu biểu tượng cross (X) cho người đang chơi và ngược lại luôn thể hiện
bên ô chơi đối phương là zero (O)
checkPlayerWin |
Hàm kiểm tra người thắng : thể hiện trong một vòng lặp combinationsList, và định
nghĩa mẫu theo như danh sách gom nhóm 3 giá trị mặc định tương đồng với
combinationsList thì biến người chơi thắng là đúng, hàm này hỗ trợ chuyển đổi bên
trong hàm chọn ô (selectBox) để đọc kết hợp ghi child “won” vào cơ sở dữ liệu.

24
CHƯƠNG 3: TRIỂN KHAI MÔ HÌNH GIAO DIỆN ỨNG DỤNG TRONG MÃ
CHƯƠNG TRÌNH BẰNG NGÔN NGỮ JAVA
Chương trình ứng dụng được thực hiện trên nền tảng android và lập trình mã di động
trên trình biên dịch mã Android Studio:
Dựng ứng dụng cần thiết lập Android SDK tối thiếu là 19 và bao gồm 2 giao diện
AVD để chứa đựng 2 bên phía thao tác chơi trò chơi trong vòng chơi

Hình 3.1. Hình ảnh biểu thị 2 màn hình máy ảo chạy song hành

25
Hình 3.2. Hình ảnh hiển thị bên thắng, bên thua

Hình 3.3. Hình ảnh hiển thị trực tiếp giá trị sự kiện lắng nghe được nạp đọc-ghi trên
cơ sở dữ liệu thời gian thực Firebase

26
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
1. Kết luận
Qua quá trình nghiên cứu, chúng em đã vận dụng bản thiết kế cơ sở dữ
liệu thời gian thực để xây dựng ứng dụng trò chơi X_O trên nền tảng Android.
Kết quả đạt được bao gồm:
- Lý thuyết:
- Phát biểu và mô tả được quy cách hoạt động cơ sở dữ liệu thời
gian thực Firebase.
- Biểu diễn bài toán bằng định nghĩa và định lượng hướng đi.
- Phân tích thiết kế bài toán một cách đầy đủ, theo đúng quy trình.
- Thiết kế được các giao diện cập nhật dữ liệu và các mẫu báo cáo.
- Chương trình:
- Sử dụng trình hoạt động cơ sở dữ liệu Firebase.
- Sử dụng ngôn ngữ Java để thực hiện mã lập trình.
- Hệ thống đã được cài đặt thử nghiệm với một số dữ liệu chạy thông
suốt và cho ra kết quả, đáp ứng được các yêu cầu bài toán đặt ra như mỗi vòng
chơi có giữ định danh từng phía người chơi, giới hạn 2 phía qua lại, giữ từng
giá trị chọn và trình diễn kết quả trên ma trận và trọng số chơi, tính điểm trực
quan biến động và xuất thông báo.
2. Hướng phát triển
Vì thời gian có hạn, kinh nghiệm thực tế chưa nhiều nên việc phân tích bài
toán về cơ bản đã thực hiện tương đối đầy đủ, tuy nhiên chưa thể mô tả đầy đủ mọi
khía cạnh của vấn đề, điển hình không thể thay đổi lượt chơi tùy biến, đồng thời ma
trận trò chơi chỉ đạt mức tối đa là 3x3 mà không thể đổi liên tục, vì đã gán giá trị giải
thuật kiểm tra chiến thắng mặc định từ trước đó. Dựng ứng dụng nhưng chỉ với các
chức năng chính, có những chức năng còn chưa đầy đủ: có nhiều báo cáo cần thiết,
nhưng chỉ lập được một báo cáo. Nhiều chức năng có nhưng chưa tiện dụng, đơn
giản. Sau này có điều kiện, chúng em sẽ bổ sung thêm các chức năng còn thiếu, hoàn
thiện các chức năng đã có và đưa vào sử dụng để hoàn thiện tính tiện dụng của ứng
dụng trò chơi di động này.

27

You might also like