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

CT239 NIÊN LUẬN CƠ SỞ GAME NIM

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 (625.72 KB, 22 trang )

TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA
CÔNG NGHỆ THÔNG TIN VÀ TRUYỀNTHÔNG
-----🕮------

NIÊN LUẬN CƠ SỞ NGÀNH
KỸ THUẬT PHẦN MỀM

ĐỀ TÀI

GAME NIM
Giảng viên hướng dẫn

Sinh viên thực hiện

HỌC KỲ II, 2021-2022


ĐÁNH GIÁ CỦA GIẢNG VIÊN
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................


.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................


MỤC LỤC
CHƯƠNG 1: TỔNG QUAN

1

1.1


Mơ tả bài tốn

1

1.2

Mục tiêu cần dạt được

1

1.3

Hướng giải quyết

1

1.4

Lên kế hoạch thực hiện

1

CHƯƠNG 2: LÝ THUYẾT
2.1

MỘT SỐ KHÁI NIỆM LIÊN QUAN ĐẾN BÀI TỐN

2
2


2.1.1

Trị chơi tổ hợp cân bằng

2

2.1.2

Trò chơi Nim chuẩn

2

2.1.3

Định lý Bouton

2

2.1.4

Phép bitwise XOR

2

2.2

VẬN DỤNG VÀO BÀI TỐN

CHƯƠNG 3: ỨNG DỤNG
3.1


PHÂN TÍCH U CẦU BÀI TOÁN

3
4
4

3.1.1

Tổng quan về ứng dụng

4

3.1.2

Yêu cầu chức năng

4

3.1.3

Yêu cầu phi chức năng

4

3.1.4

Giả định và phụ thuộc

5


3.2

XÂY DỰNG CẤU TRÚC DỮ LIỆU

3.2.1
3.3

Tổ chức dữ liệu cần thiết

KIẾN TRÚC HỆ THỐNG

5
5
6

3.3.1

Mảng trong java

6

3.3.2

Sự kiện (Event) trong Java Swing

6

3.3.3


Thiết kế giải thuật

7

3.4

GIỚI THIỆU CHƯƠNG TRÌNH

3.5

QUY TRÌNH SỬ DỤNG

11

CHƯƠNG 4: KẾT LUẬN VÀ ĐÁNH GIÁ

12

PHỤ LỤC

13

5.1

HƯỚNG DẪN SỬ DỤNG

TÀI LIỆU THAM KHẢO

8


13
17



DANH MỤC HÌNH
Hình 1 Lưu đồ giải thuật xử lý máy đánh
Hình 2 Giao diện chính của game.
Hình 3 Giao diện khi nhấn THỐT
Hình 4 Giao diện game khi chọn chơi với NGƯỜI hoặc với MÁY
Hình 5 Quy trình chức năng game
Hình 6 Giao diện chính
Hình 7 Nút HƯỚNG DẪN
Hình 8 Nội dung hướng dẫn
Hình 9 Nút hướng dẫn
Hình 10 Yêu cầu xác nhận
Hình 11 Chọn chế độ chơi
Hình 12 Giao diện bàn cờ
Hình 13 Sau khi bỏ 2 viên sỏi cuối cùng ở hàng 1
Hình 14 Nút bắt đầu
Hình 15 Nút tạo lại
Hình 16 Nút trở lại

CHƯƠNG 1: TỔNG QUAN
1.1 Mơ tả bài tốn
Hiện nay với sự phát triển mạnh mẽ của công nghệ thông tin, mọi
vấn đề từ cơng việc, quản lý,… đến giải trí cũng được thay thế gần như hồn
tồn bởi các ứng dụng từ cơng nghệ được phát triển qua các năm gần đây. Quả
thật nếu so sánh đơn giản thì từ khi có được sự hỗ trợ của các cơng nghệ, phần
mềm thì hiệu quả làm việc, giải trí đã tăng lên rất nhiều.

Nói riêng về mảng giải trí, việc ứng dụng cơng nghệ đã làm thay đổi
hoàn toàn cách tiếp cận của mọi người đối với nó. Khi cơng nghệ thơng tin
chưa được phát triển, khơng có nhiều lựa chọn nhưng hiện nay thơng qua các
ứng dụng như youtobe, spotify,.. thì đã có sự khác biệt hồn tồn. Ngay cả đối
với game thì cũng xuất hiện nhiều thể loại như Gacha, RPG, MOBA,...
Giải trí là một trong những nhu cầu thiết yếu của con người và nó ảnh
hưởng nhiều đến mọi người. Chẳng hạn như khi làm việc căng thẳng, mệt mỏi
thì chơi game, nghe nhạc,.. sẽ giúp thư giãn và tiếp tục công việc hiệu quả hơn.
1.2 Mục tiêu cần dạt được
Nắm bắt được vấn đề cần giải quyết cùng với mong muốn ứng dụng
những kiến thức đã học được vào thực tế. Vì thế mục tiêu của đề tài này là
xây dựng trị chơi đơn giản để giải trí. Bên cạnh đó ứng dụng cần có giao
diện đồ họa đơn giản, dễ sử dụng, giúp người dùng dễ dàng tương tác. Và đặc
biệt có áp dụng giải thuật Lý thuyết trị chơi game Nim để giải quyết vấn đề.

7
8
9
10
11
13
13
13
14
14
14
14
15
15
15

16


1.3 Hướng giải quyết
Xây dựng giao diện deskop thân thiện dễ sử dụng.
Xử lý cách người chơi tương tác, chọn chế độ chơi giữa người với người
và người với máy để tăng hứng thú.
1.4 Lên kế hoạch thực hiện
Bước 1: Đầu tiên xác định kỹ lại yêu cầu, nghiên cứu lại giải pháp giải
quyết, cách ứng dụng lý thuyết trò chơi game nim vào bài toán.
Bước 2: Thiết kế ứng dụng, mơ hình tổng thể về ứng dụng. Phát họa
giao diện, chức năng, tìm kiếm cách xử lý.
Bước 3: Lập trình: Tiến hành viết code, xử lý thành lập các chức năng
của ứng dụng cũng như giao diện đồ họa.
Bước 4: Kiểm tra lại ứng dụng, xử lý các lỗi.
Ngoài ra, trong quá trình thực hiện cần nghiên cứu các tài liệu tham khảo, đồng
thời viết báo cáo khoa học

2 CHƯƠNG 2: LÝ THUYẾT
2.1 MỘT SỐ KHÁI NIỆM LIÊN QUAN ĐẾN BÀI TỐN
2.1.1 Trị chơi tổ hợp cân bằng
Trị chơi tổ hợp là trò chơi gồm: hai người chơi (gọi người chơi trước là
A, người sau là B), một tập hữu hạn các trạng thái S có thể đạt được của trị
chơi. Mỗi người chơi có một tập hợp các bước di chuyển hợp lệ Q để di chuyển
từ trạng thái này sang trangj thái khác và một tập các trạng thái kế thúc gọi là T
⊂ S. Hai người chơi sẽ luân phiên di chuyển từ trạng thái này sang trạng thái
khác. Người đến được trạng thái kết thúc trước sẽ là người chiến thắng.
2.1.2 Trị chơi Nim chuẩn
Có n đống sỏi, mỗi đống lần lượt có p1,p2,..pn sỏi, trong đó mỗi số pi là
một số ngun khơng âm. Mỗi trạng thái trò chơi tương ứng với mỗi bộ n cho

biết số sỏi của từng đống này.
Có hai người chơi thay phiên nhau bỏ sỏi. Người chơi trong lượt hiện tại
có thể loại bỏ bao nhiêu sỏi tùy thích, miễn là tất cả các sỏi đều cùng một đống.
Hình thức hơn, người chơi sẽ chọn một đống sỏi i và số lượng sỏi j để loại bỏ
khỏi đống (0 < j <= pi) sau đó thay pi bằng pi – j. Chú ý rằng người chơi sẽ
không thể bỏ qua lượt của mình mà khơng bỏ sỏi nào cả. Sau đó, đến lượt người


chơi kia loại bỏ sỏi, lần lượt như vậy tới khi trị chơi kết thúc.
Trị chơi kết thúc khi khơng còn sỏi trên bàn chơi. Người chiến thắng là
người lấy được viên sỏi cuối cùng. Nói cách khác, người thua cuộc là người đầu
tiên không thể lấy sỏi trong lượt của mình.
2.1.3 Định lý Bouton
Trạng thái của trị chơi Nim (p1, p2,…pn) thuộc P (tập các trạng thái x
∈ S sao cho nếu trạng thái ban đầu của trò chơi là x thì người chơi sau ln
thắng ) khi và chỉ khi tổng Nim S = 0.
2.1.4 Phép bitwise XOR
Phép tốn thao tác bit XOR lấy hai dãy bit có cùng độ dài và thực hiện
phép toán logic bao hàm XOR trên mỗi cặp bit tương ứng. Kết quả ở mỗi vị trí
là 1 chỉ khi bit đầu tiên là 1 hoặc nếu chỉ khi bit thứ hai là 1, nhưng sẽ là 0 nếu
cả hai là 0 hoặc cả hai là 1.
2.2 VẬN DỤNG VÀO BÀI TOÁN
Trong phép bitwise XOR chúng ta sẽ sử dụng các tính chất sau :
● Tính chất 1: (A ⊕ B) ⊕ C = A ⊕ (B ⊕ C)
● Tính chất 2: A ⊕ 0 = A
● Tính chất 3: A ⊕ A = 0
Chú thích: ⊕ là kí hiệu phép XOR.
Để có thể ứng dụng các quy tắc trên để giải quyết bài toán game Nim
chúng ta sẽ vận dụng các khái niệm trên để làm rõ các u cầu của bài tốn.
Ví dụ từ một bài toán thực tế, giả sử một trị chơi Nim có 4 đống sỏi với

số sỏi lần lượt là 4, 5, 7, 9 ta được :
n1 có p1 = 4 ⬄ 0100
n2 có p2 = 5 ⬄ 0101
n3 có p3 = 7 ⬄ 0111
n4 có p4 = 9 ⬄ 1001
Vậy => S = 1111 = 15
Ta có p1 ⊕ S = 1011 = 11 > 4 (n1)
P2 ⊕ S = 1010 = 10 > 5 (n2)
P3 ⊕ S = 1100 = 12 > 7 (n3)


P4 ⊕ S = 0110 = 6 < 9 (n4)
Vậy n4 chính là hàng cần được xử lý. Cách xử lý đó là từ n4 sẽ lấy ra
9– 6=3 viên tương ứng với công thức j = pi – (pi ⊕ S) ( điều kiện pi ⊕ S < pi
). Sau đó cập nhật lại số đá ở pi = pi – j.
Sau khi thực hiện các thao tác trên thì bàn cờ sẽ được cập nhật lại thành
N1 có p1 = 4 ⬄ 0100
N2 có p2 = 5 ⬄ 0101
N3 có p3 = 7 ⬄ 0111
N4 có p4 = 6 ⬄ 0110
Vậy => S = 0000 (đây là trạng thái mà chúng ta cần đạt được hay còn gọi là yêu
cầu để thắng dựa theo định lý Bouton)
Ghi chú:
- 4 ⬄ 0100 là chuyển từ 4 thành dạng nhị phân
- p1 ⊕ S = 1011 dựa theo tính chất của phép XOR

3 CHƯƠNG 3: ỨNG DỤNG
3.1 PHÂN TÍCH YÊU CẦU BÀI TOÁN
3.1.1 Tổng quan về ứng dụng
Ứng dụng giải quyết yêu cầu là dựa vào giải thuật được nêu trên để tạo

ra hai trạng thái game người x người và người x máy. Trong đó người x máy thì
máy sẽ dựa vào giải thuật trên để có thể tự đưa ra quyết định.
Sau khi truy cập vào game người dùng có thể thực hiện các cơng việc
sau: Xem hướng dẫn chơi game, chọn chơi với người, chơi với máy và thoát.
3.1.2 Yêu cầu chức năng
Yêu cầu chức năng 1
● Mô tả
Ứng dụng phải đảm bảo rằng các bottom hoạt động đúng chức năng.
Yêu cầu chức năng 2


Mô tả
Phải sinh ra bàn cờ ngẫu nhiên.

Yêu cầu chức năng 3


● Mơ tả
Đối với chức năng người với máy thì luôn ưu tiên cho người đi trước.
Yêu cầu chức năng 4
● Mơ tả
Đối với các botton như THỐT phải u cầu người dùng xác nhận.
3.1.3 Yêu cầu phi chức năng
Yêu cầu giao diện
Giao diện đơn giản, thân thiện, giúp người dùng dễ thao tác và sử dụng.
Yêu cầu hiệu suất
Không có yêu cầu.

Yêu cầu phần cứng
Bộ xử lý 32 bit (x86) hoặc 64 bit (x64)

Bộ nhớ trong: đĩa cứng có dung lượng trống 20GB trở lên
Yêu cầu phần mềm
Hệ điều hành : Window, macOS.
3.1.4 Giả định và phụ thuộc
Các giả định và phụ thuộc
Máy tính có cài sẵn NetBean.
3.2 XÂY DỰNG CẤU TRÚC DỮ LIỆU
3.2.1 Tổ chức dữ liệu cần thiết
Để tương tác với đối tượng cần sử dụng một số hàm cần thiết như:
addButton(): Để có thể thêm một chuối các button vào bàn cờ.
NguoiActionPerformed(ActionEvent evt): Tạo sự kiện cho button
NGƯỜI.
MayActionPerformed(ActionEvent evt): Tạo sự kiện cho button MÁY.
HuongDanActionPerformed(ActionEvent evt): Tạo sự kiện cho button
HƯỚNG DẪN.
ThoatActionPerformed(ActionEvent evt): Tạo sự kiện cho button
THOÁT


JOptionPane.showConfirmDialog(rootPane, evt, title, WIDTH): Tạo
Dialog để đưa ra thông báo.
Getjbutton(): Trả về button.
setjButton(JButton button): Thiết lập button.
TroLaiActionPerformed(ActionEvent evt): Tạo sự kiện để quay trở lại
giao diện chính.
BatDauActionPerformed(ActionEvent evt): Tạo sự kiện để bắt đầu
game.
TaoLaiActionPerformed(ActionEvent evt): Tạo mới bàn cờ.

3.3 KIẾN TRÚC HỆ THỐNG

3.3.1 Mảng trong java
Mảng là một loại dữ liệu tập hợp nhiều phần tử, trong đó mỗi phần tử sẽ
được đánh dấu bằng vị trí chỉ mục. Nếu mảng có 10 phần tử thì số thứ tự các
phần tử sẽ là từ [0->9].
Chúng ta thường sử dụng mảng để lưu trữ dữ liệu dạng danh sách. Ví dụ
để lưu trữ danh sách tên sinh viên trong một lớp nào đó thì có thể sử dụng
mảng, mỗi phần tử sẽ là tên của một thành viên trong lớp.
Khai báo mảng đê chứ các button:
List<JButton> list = new ArrayList<>();
Yêu cầu để sử dụng mảng là phải import các thư viện Jbutton, List và
ArrayLisst.
3.3.2 Sự kiện (Event) trong Java Swing
Sự kiện là một hành động tác động đến các đối tượng xuất hiện trong
giao diện như là button, CheckBox,… Qua đó ta có thể bắt được sự kiện và yêu
cầu java swing thực thi một thao tác nào đó.
Mỗi sự kiện có thể gán nhiều hành động. Ví dụ ở nút botton với chức
năng thoát, khi nhấn vào botton sẽ xuất hiện bảng u cầu xác nhận có thốt
hay khơng.
Ví dụ code cho nút thoát:
private void ThoátActionPerformed(java.awt.event.ActionEvent evt) {


int result = JOptionPane.showConfirmDialog(null, "BẠN CĨ
CHẮC
CHẮN
MUỐN
THỐT"
,"XÁC
NHẬN"
,

JOptionPane.YES_NO_OPTION);
if(result == JOptionPane.YES_OPTION){
System.exit(0);
}
}

3.3.3 Thiết kế giải thuật
Đầu vào của ứng dụng
Người dùng chọn một trong các nút NGƯỜI, MÁY, HƯỚNG DẪN,
THOÁT trong giao diện đầu tiên.
Đầu ra của ứng dụng
Tử thao tác Click của người dùng vào mỗi botton hệ thống sẽ xử lý
tương ứng. Ví dụ như khi nhấn vào HƯỚNG DẪN sẽ xuất hiện bảng để hiển thị
quy tắc chơi.
Lưu đồ giải thuật xử lý máy đánh


Hình 1 Lưu đồ giải thuật xử lý máy đánh

Giải thuật xử lý máy đánh được thể hiện ở hình trên. Đầu tiên gọi ba
biến int là take (số sỏi lấy), S (nimsum). Bước đầu tiên kiểm tra S có khác 0 hay
khơng? Nếu khác khơng thì kiểm tra số sỏi ở hàng 1 XOR với S có lớn hơn số
sỏi hiện có hay khơng. Nếu nhỏ hơn thì tiến hành take = SoSoi – (SoSoi^S) và
cập nhật lại SoSoi = SoSoi – take, nếu điều kiện là lớn hơn thì chuyển qua đống
sỏi tiếp theo và quay lại kiểm tra tiếp. Đối với ngoại lệ của điều kiện if là S = 0
thì take = rand(SoSoi) + 1 (lấy ngẫu nhiên sỏi ), SoSoi = SoSoi – take.
3.4 GIỚI THIỆU CHƯƠNG TRÌNH


Các tinh năng nổi bật

Ứng dụng có nhứng chức năng đáp ứng đủ nhu cầu cơ bản của người
dùng mong muốn như xem hướng dẫn, chọn chế độ đấu với người hay với máy.
Giao diện của game thân thiện với người dùng, dễ sử dụng, đơn giản
giúp người dùng có trải nghiệm ứng dụng một cách thoải máy, dễ chịu.
Giao diện của ứng dụng
Sau khi vào game giao diện chính sẽ được thể hiện bao gồm các phần
chính là các button “NGƯỜI”, “MÁY”, “HƯỚNG DẪN”, “THỐT”.

Hình 2 Giao diện chính của game.


Hình 3 Giao diện khi nhấn THỐT


Khi người dùng chọn chức năng NGƯỜI hoặc MÁY thì sẽ xuất hiện
giao diện game.

Hình 4 Giao diện game khi chọn chơi với NGƯỜI hoặc với MÁY
Trong giao diện có các nút BẮT ĐẦU (xác nhận chọn bàn chơi), TẠO
LẠI (để tạo lại trận cờ), TRỞ VỀ (trở lại giao diện chính).

3.5 QUY TRÌNH SỬ DỤNG
Game Nim là ứng dụng được viết cho người sử dụng với mục đích là
giải trí. Do vậy các bước quy trình khơng q phức tạp. Đầu tiên người dùng sẽ


vào game, chọn chức năng mong muốn, chơi game theo chế độ chọn và thốt ra
nếu muốn.

Hình 5 Quy trình chức năng game



4 CHƯƠNG 4: KẾT LUẬN VÀ ĐÁNH GIÁ
Xã hội ngày càng phát triển kéo theo áp lực trong công việc và học tập
cũng ngày càng tăng theo để có thể thích ứng với xã hội. Vì thế, game nim được
làm ra là vơ cùng thích hợp có thể phần nào giảm được những căng thẳng trong
quá trình lao động và học tập.
Niên luận đã nghiêm cứu và trình bày những kiến thức cơ bản về khái
niệm trò chơi game Nim, định lý Bouton, giới thiệu biwise XOR để áp dụng
vào cách chơi cũng như đưa ra hướng giải quyết thỏa đáng nhất cho vấn đề cách
để chơi thắng trong game. Game bao gồm các chức năng như chơi với người,
với máy, xem hướng dẫn,.. Bên cạnh đó giao diện của game thân thiện dễ sử
dụng, giúp người dùng có trải nghiệm tốt nhất.
Kết quả đạt được về chuyên môn, biết cách phân tích bài tốn, tìm ra
hướng giải quyết vấn đề được đặt ra. Nắm vững các kiến thức về cấu trúc dữ
liệu, giải thuật, tìm hiểu về Java Swing, vẽ giao diện trong NetBean, Event
trong Java. Ngoài ra cải thiện kỹ năng đọc hiểu tài liệu, tìm ra phương pháp cho
từng vấn đề cần giải quyết, biết thêm về nhiều thủ thuật xây dựng giao diện
thân thiện, đẹp mắt, tránh các lỗi khơng đáng có làm ảnh hưởng tới trải nghiệm
người dùng.
Kết quả đạt được về kỹ năng lập trình, viết code đơn giản, hình thành
thói quen comment ở các dòng code. Giúp dễ dàng đọc hiểu, dễ sửa đổi, bảo trì
và nâng cấp.
Ưu điểm của ứng dụng là giao diện được thiết kế để người dùng cảm
thấy thích thú, không gây nhàm chán. Tạo được cảm giác trải nghiệm tốt nhất.
Hạn chế của ứng dụng là không được kết nối cơ sở dữ liệu nên không thể
ghi nhận lại lịch sử của các trận đấu. Vì thế trong tương lai sẽ cải thiện lại để có
thể đáp ứng nhu cầu của người dùng cũng như để phần mềm được hồn chỉnh
cả về chức năng lẫn hình thức.



5 PHỤ LỤC
5.1 HƯỚNG DẪN SỬ DỤNG
Truy cập vào ứng dụng
Mở game trên NetBean và thực thi để truy cập vào giao diện chính của
game.

Hình 6 Giao diện chính
Xem hướng dẫn

Hình 7 Nút HƯỚNG DẪN
Sau khi nhấn vào sẽ xuất hiện thơng báo để đưa ra hướng dẫn.

Hình 8 Nội dung hướng dẫn


Thốt ứng dụng

Hình 9 Nút hướng dẫn
Khi nhấn vào sẽ hiện thơng báo u cầu xác nhận.

Hình 10 u cầu xác nhận
Chọn chế độ chơi

Hình 11 Chọn chế độ chơi
Khi lựa chọn chế độ chơi sẽ xuất hiện giao diện bàn cờ

Hình 12 Giao diện bàn cờ



Cách chơi game
Muốn xóa bỏ bao nhiêu viên sỏi ở hàng nào chỉ cần đếm từ bên phải qua và nhấn
vào nút ở vị trí đó. Ví dụ ở hàng 1 muốn bỏ 2 viên sỏi thì từ bên phải qua ấn vào viên sỏi
số 2 thì hai viên cuối cùng sẽ được xóa bỏ.

Hình 13 Sau khi bỏ 2 viên sỏi cuối cùng ở hàng 1
Bắt đầu chơi game

Hình 14 Nút bắt đầu
Khi nhấn vào nút bắt đầu thì mới có thể bắt đầu chơi.
Tạo lại trận đấu

Hình 15 Nút tạo lại
Do bàn cờ được sinh ngẫu nhiên nên nút tạo lại có thể giúp người chơi chủ động
được việc lựa chọn độ khó khi chơi.


Trở về giao diện chính

Hình 16 Nút trở lại
Khi khơng còn muốn chơi nữa hoặc muốn lựa chọn chế độ chơi khác thì người
dùng có thể chọn nút trở lại để quay trở lại giao diện chính.


6 TÀI LIỆU THAM KHẢO
[1]Nguyễn Thị Tú Mi. Lập trình Java Swing.
[2]Website: o/wiki/algo/math/game-theory.md
[3]Website:
/>oi-nim.htm
[4]Website:

/>ava/toan-tu-thao-tac-bit-trong-java/
[5]Website: />


×