BÁO CÁO TIẾN ĐỘ, BÀI TẬP LỚN java , Xây dựng game Cờ Caro ,bằng công cụ NetBean, ngôn ngữ lập trình Java
Trang 1Báo cáo tiến độ bài tập lớn Java
Trang 2Phụ Lục
Chương I : Giới thiệu 4
I Giới thiệu game Cờ Caro 4
II Ý tưởng và phân chia công việc 4
Chương II : Phân tích và thiết kế game 5
I Yêu cầu của phần mềm 5
II Yêu cầu với người chơi 5
III Sơ đồ User-Case 6
IV Thiết kế giao diện 6
3.1 Giao diện 6
3.2 Chức năng và cách sử dụng 11
IV Xây dựng các Module 13
4.1 Biểu đồ UML các module 13
V Các thuật toán sử dụng 13
5.1 Hàm lượng giá cho toàn bộ bàn cờ 13
5.2 Thuật toán Minimax và cắt tỉa alpha beta 14
VI Những khó khăn gặp phải 14
Phụ lục hình ản
Trang 3Hình 1 Sơ đồ User-Case 6
Hình 2 Giao diện chơi chính 7
Hình 3 Giao diện khi chiến thắng 8
Hình 4 Giao diện khi thua cuộc 9
Hình 5 Thanh công cụ chức năng 9
Hình 6 Menu trợ giúp 11
Hình 7 Biểu đồ UML các module 13
Trang 4Chương I : Giới thiệu
I Giới thiệu game Cờ Caro
Trò chơi cờ caro là một trò chơi quen thuộc nên có thể nhiều người cho rằng xây dựng một phần mềm trò chơi tương tác giữa người và máy là điều không quá khó khăn Tuy nhiên điều đó không hoàn toàn đúng, trò chơi cờ caro là một trò chơi trí tuệ và
nó đòi hỏi người chơi phải có tư duy cao và khả năng phán đoán tình huống tốt Thực thế cho thấy rằng không phải ai cũng có thể chơi giỏi trò chơi này vì thế việc xây dựng một chương trình có khả năng “chơi” với người khác mà dành được chiến thắng đòi hỏi hệ thống phải được lập trình để có thể tư duy và phán đoán giống như một con người thật và hệ thống như vậy được gọi là hệ thống có trí thông minh nhân tạo
II Ý tưởng và phân chia công việc
- Xây dựng game Cờ Caro bằng công cụ NetBean với ngôn ngữ lập trình Java
- Luật chơi:
Xây dựng bàn cờ kẻ các ô vuông với kích thước 20x20, có 2 quân cờ là X và O
Người chơi có thể đánh với máy hoặc hai người chơi với nhau
Người thắng là người đi được 5 quân cờ theo kiểu ngang, dọc, hoặc đường chéo
Hai người hòa nhau khi bàn cờ hết chỗ mà vẫn chưa phân biệt được thắng bại
- Phân chia công việc :
Trang 5 Nguyễn Văn Phương: Thiết kế giao diện và xử lý sự kiện click chuột
Nguyễn Văn Sơn: Tìm hiểu và code các thuật toán sử dụng trong game
Chương II: Phân tích và thiết kế game
I Yêu cầu của phần mềm
- Yêu cầu chức năng:
Phần mềm chạy ổn định, mượt mà
Tốc độ xử lý nhanh
Việc cài đặt và sử dụng phần mềm đơn giản, không yêu cầu máy phải có cấu hình cao
- Yêu cầu phi chức năng
Giao diện xử lý bắt mắt nhưng không quá cầu kì, giúp người chơi thoải mái khi sử dụng
Phần mềm dễ dàng bảo trì, sửa chữa khi gặp lỗi
II Yêu cầu với người chơi
- Game Caro đa phổ biến với rất nhiều người, với nhiều phiên bản game được đưa ra, ở đây em xây dựng game Caro này phù hợp với nhiều đối tượng người chơi
- Chế độ “Chơi với máy“, người chơi lựa chọn thứ tự chơi với máy
và mức độ khó của ván chơi
Trang 6- Người chơi có thể chọn các chức năng của game như: tạo ván mới, trở về nước đi trước hoặc sau
III Sơ đồ User-Case
Chơi game với máy tính
Sử dụng các chức năng hỗ trợ
Tạo lượt chơi mới
Chọn quyền đánh trước
Chọn mức độ khó
Lưu trạng thái cũ
Undo
Redo
Thông báo sự kiện User
Hình 1 Sơ đồ User-Case
IV Thiết kế giao diện
3.1 Giao diện.
- Phần mềm với thiết kế giao diện đơn giản, rõ ràng giúp người chơi dễ sử dụng và thực hiện các thao tác chơi, trong quá trình chơi, game được tính hợp thêm các âm thanh, hình ảnh, giúp người chơi có những phút thư giãn, thoải mái
Trang 7- Một số hình ảnh của game cờ Caro:
Hình 2 Giao diện chơi chính
Trang 8Hình 3 Giao diện khi chiến thắng.
Trang 9Hình 4 Giao diện khi thua cuộc
- Giao diện với 2 thành phần chính : Giao diện chức năng và giao diện người chơi
- Thanh công cụ chức năng bao gồm : menu chức năng và menu trợ giúp người chơi
Hình 5 Thanh công cụ chức năng
Trang 10 Thanh công cụ chức năng gồm có :
Menu Game: tạo ra một ván mới và thoát trò chơi
Menu Turn: Người chơi chọn lượt đi trước hoặc sau máy
Menu Level: Người chơi chọn mức độ khó của trò chơi
Menu Help: Cung cấp cho người chơi các chơi game và thông tin nhóm phát triển game
Menu trợ giúp gồm có : Các nút bấm nhanh hỗ trợ tốt hơn cho người chơi
trong quá trình chơi game như: Tạo nhanh ván mới , chọn lượt đi , đánh lại Tạo sự thuận tiện cho người chơi Menu cũng thể hiện mức độ khó của trò chơi giúp người chơi chọn được mức độ khó phù hợp với trình độ của mình
Trang 11Hình 6 Menu trợ giúp
- Bàn cờ: được thiết kế với kích thước 20x 20 ô, mỗi ô có diện tích 30x30 pixel Kích thước như vậy là vừa phải cho người chơi
có thể thao tác cũng như quan sát để suy nghĩ nước cờ, tránh nhầm lẫn trong các bước đi Nếu màu nền bàn cờ là một màu đơn sắc sang sủa và các quân cờ màu đậm, giúp người chơi dễ dàng phân biệt được quân cờ trong quá trình chơi
- Mỗi khi thắng hoặc thua sẽ có nhạc và hình ảnh minh họa hài hước, hấp dẫn làm cho game hấp dẫn hơn , người chơi được thoải mái khi chơi và làm cho người chơi có hứng chơi tiếp dù thua hay thắng
3.2 Chức năng và cách sử dụng.
- Bất kì game nào cũng cần có chức năng hỗ trợ cho người chơi, giúp người chơi xử lý khi chơi game được thuận tiện, dễ dàng hơn Sản phầm “Cờ Caro” cũng phát triển các chức năng cần thiết để trò chơi hoàn chỉnh và tạo sự thân thiện cũng như hỗ trợ tốt nhất cho nhu cầu của người chơi đối với sản phẩm của chúng em
- Game có những chức năng chính như sau:
Chơi ván mới: Khi một ván đấu kết thúc hoặc bàn cờ đã kín
mà ván chơi kết thúc mà vẫn chưa phân được thằng thua thì cần tạo ra một ván mới để chơi tiếp Người chơi có thể tạo
ra một ván mới bằng cách click vào “Game “ sau đó chọn
Trang 12“New Game” hoặc click vào biểu tượng trên thanh công
cụ để tạo nhanh một ván mới
Lựa chọn lượt đi: Người chơi có thể lựa chọn lượt đi trước hoặc sau máy tùy ý, người choi có thể lựa chọn lượt chơi bằng cách click vào “Turn“ rồi lựa chọn hoặc click vào biểu tượng setting để lựa chọn nhanh hơn
Chọn mức độ chơi: trò chơi gồm có 5 mức độ chơi khác nhau, người chơi có thể chọn các mức độ phù hợp với trình
độ của mình và cũng có thể thử sức với các mức rất khó Để chọn mức độ khó của, người chơi có thể click vào menu
“Level” trên thanh công cụ để lựa chọn
Hướng dẫn cách chơi: tuy đây là trò chơi đơn giản và vô cùng gần gũi với hầu hết tất cả mọi người, nhưng cũng không tránh khỏi có những người chơi lần đầu tiên hoặc là luật chơi của mỗi nơi có sự khác nhau nhất định trong cách chơi, chính vì vậy cần phải hướng dẫn luật chơi để người chơi có thể nắm bắt tránh sự nhầm lẫn khi chơi Người chơi
có thể xem hướng dẫn chơi bằng cách click vào menu
“Help” và chọn “Rule” để xem hướng dẫn Trong menu
“Help” có thêm mục “Information” cung cấp thông tin tác giả nếu người chơi muốn liên hệ đóng góp những ý kiến để game có thể hoàn thiện hơn
Undo game: khi chơi người chơi có thể tính toán nhầm nước
đi hay vô tình nhấn chuột tạo thành một nước đi không như
Trang 13ý, chính vì vậy chức năng undo sẽ giúp người chơi có thể loại bỏ các nước đi không như ý và thay vào đó là một nước
đi khác mà người chơi muốn Người chơi cũng có thể undo 1 lần hoặc nhiều lần tùy ý Để sử dụng chức năng undo người chơi có thể nhấn vào biểu tượng undo trên thanh menu
hỗ trợ
IV Xây dựng các Module
4.1 Biểu đồ UML các module.
Hình 7 Biểu đồ UML các module
Trang 14V Các thuật toán sử dụng.
5.1 Hàm lượng giá cho toàn bộ bàn cờ.
- Hàm tính điểm cho toàn bộ bàn cờ bằng cách sử dụng một xâu lưu trữ các hàng, cột và đường chéo các kí tự, sau đó đếm các trường hợp có trong xâu đó số điểm của bàn cờ tại thời điểm xét sẽ được tính như sau:
Sẽ có 2 loại điểm tương ứng với X và O, với các trường hợp giống nhau thì điểm của X và O là như nhau Giả sử O là máy, X là người chơi, điểm của bàn cờ sẽ bằng: trường hợp
o1*n1 + trường hợp o2*n2 + - trường hợp x1*n3 - trường hợp x2*n4 - (với n là số lần xuất hiện của một trường hợp)
Điểm càng dương tức là lợi thế đang nghiêng về máy, ngược lại nếu điểm càng âm thì lợi thế càng nghiêng về người chơi
- Điểm càng dương tức là lợi thế đang nghiêng về máy, ngược lại nếu điểm càng âm thì lợi thế càng nghiêng về người chơi
5.2 Thuật toán Minimax và cắt tỉa alpha beta
- Đây là thuật toán chính làm lên trí tuệ nhân tạo cho chương trình và tạo ra các mức độ khó khác nhau cho người chơi Giả
sử máy tính sẽ là max, người chơi là min, mỗi khi tới lượt đánh của người chơi, người chơi sẽ cố gắng làm sao để điểm của bàn
cờ nghiêng về mình nhiều nhất có thể (âm nhất có thể) ngược lại đến lượt máy tính thì muốn điểm của bàn cờ là dương nhất
có thể để dẫn đến chiến thắng, từ đó với một độ sâu cho trước, mỗi khi tới lượt máy tính đánh máy lại duyệt trước số nước đi bằng với độ sâu nhằm tìm ra nước đi khiến điểm sau các nước
đi đó đạt cực đại hoặc đạt được chiến thắng
Trang 15- Thuật toán cắt tỉa alpha beta được xây dựng dựa trên ý tưởng
là nếu một nhánh tìm kiếm nào đó không thể cải thiện đối với giá trị mà chúng ta đã tính ở một nhánh khác thì ta không cần xét đến nhánh tìm kiến đó nữa Ở đây, ta sử dụng hai biến giá trị là alpha và beta để so sánh giá trị alpha là giá trị của nước
đi tốt nhất đối với Max tính tới thời điểm hiện tại của nhánh tìm kiếm, nếu một nhánh có giá trị tồi hơn alpha thì Max sẽ bỏ qua nước đi ứng với nhánh đó Beta được định nghĩa tương tự đối với hàm Min
VI Những khó khăn gặp phải.
- Trong quá trình thiết kế, chúng em đã gặp phải rất nhiều khó khăn như ban đầu ý tưởng chỉ là thiết kế hàm lượng giá cho toàn
bộ bàn cờ sau đó sử dụng thuật toán minimax kết hợp alphabeta
để tìm nước đi tiếp theo, tuy nhiên do không loại bỏ bớt các ô cần duyệt lúc đầu nên chương trình chạy rất chậm, rất lâu đề tìm được một nước mới, trong khi đó độ xâu không phải là quá lớn
- Phần thiết kế giao diện chúng em vẫn chưa hoàn thiện một cách hoàn chỉnh được Vẫn còn nhiều lỗi nhỏ, chúng em sẽ cố gắng tìm cách khắc phục trong các tuần tiếp theo