1. Trang chủ
  2. » Luận Văn - Báo Cáo

bài tập lớn môn học công nghệ java đề tài trò chơi cờ vua

30 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Quy tắc của trò chơi Khi một ván cờ vua bắt đầu, một người chơi sẽ cầm quân đen và người chơi còn lại cầm quân trắng.. Việc chọn lựa ai sẽ cầm quân đen hay trắng phụ thuộc vào thể thức c

Trang 1

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢIKHOA CÔNG NGHỆ THÔNG TIN Giảng viên hướng dẫn: GV Đào Thị Lệ ThủyNhóm sinh viên thực hiện: Đào Văn Dưỡng

Phạm Tô Thế Anh Nguyễn Tiến Đạt

Lớp: 26.2

Hà Nội – 2023

Trang 2

1.3 Quy tắc của trò chơi 4

CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG 10

2.1 Mô tả hoạt động trò chơi “Cờ vua” 10

2.1.1 Mô tả sơ bộ trò chơi 10

2.1.2 Thiết kế thế giới trò chơi 10

2.1.3 Thiết kế cách chơi cơ bản 11

Người chơi thực hiện chọn quân cờ muốn di chuyển Tùy vào quân cờ được chọn sẽ có vị trí đi khác nhau Sau khi đã chọn quân cờ, người chơi thực hiện chọn vị trí quân cờ muốn di chuyển đến Sau đó sẽ đến lượt quân cờ đối diện Cứ tiếp tục đến khi 1 trong 2 bên không còn quân cờ nào trên bàn thì đối phương sẽ chiến thắng 11

2.1.4 Thiết kế khung giao diện cơ bản và 11

2.1.5 Thiết kế quân cờ 12

2.2 Xây dựng chương trình trò chơi 12

2.2.1 Xác định các class chính 12

CHƯƠNG 3: GIAO DIỆN VÀ CÁC CHỨC NĂNG CHÍNH 23

3.1 Giao diện của trò chơi 23

3.1.1 Giao diện khởi động trò chơi 23

3.1.2 Giao diện thông báo chưa chọn quân cờ 24

3.1.3 Giao diện thông báo bước đi không hợp lệ 25

3.1.4 Giao diện thông báo sai lượt 26 1

Trang 3

3.1.5 Giao diện cảnh báo chiếu tướng 27

3.1.6 Giao diện chiến thắng 28

Trang 4

DANH MỤC HÌNH ẢNH

Ảnh 1: Minh họa nước đi quân xe 5

Ảnh 2: Minh họa nước đi quân tượng 6

Ảnh 3: minh họa nước đi quân hậu 6

Ảnh 4: minh họa nước đi quân mã trong cờ vua 7

Ảnh 5: minh họa nước đi quân tốt 7

Ảnh 6: minh họa quân tốt thăng cấp 8

Ảnh 7: minh họa nước đi quân vua 9

Ảnh 13: flow của của hàm checkMateKing 14

Ảnh 14: flow của hàm killCheckmateKing 15

Ảnh 15: flow hàm shieldCheckmateKing 17

Ảnh 16: luồng kiểm tra chung 19

Ảnh 17: Giao diện khi khởi động trò chơi 22

Ảnh 18: Giao diện chưa có quân cờ được chọn 23

Ảnh 19: Giao diện thông báo nước cờ không hợp lệ 24

Ảnh 20: Giao diện thông báo sai lượt 25

Ảnh 21: giao diện thông báo chiếu tướng 26

3

Trang 5

CHƯƠNG 1: TỔNG QUAN VỀ TRÒ CHƠI

1.1 Mô tả trò chơi

Cờ vua (tên tiếng Anh: Chess), trước kia còn được gọi là Cờ quốc tế, là trò chơi quốc tế và là môn thể thao trí tuệ cho 2 người chơi Ngày nay, cờ vua là một trong những trò chơi phổ biến nhất thế giới với hàng triệu người tại nhà riêng, trong câu lạc bộ, trực tuyến, từ xa và trong các giải đấu Trò chơi này diễn ra trên một bảng hình vuông, gọi là bàn cờ, gồm 8 hàng (đánh số từ 1 đến 8) và 8 cột (đánh các chữ cái từ a đến h), tạo ra 64 ô hình vuông với các màu đậm và nhạt xen kẽ nhau, với mỗi người chơi sẽ có ô màu nhạt ở hàng cuối cùng bên tay phải của mình khi ngồi vào bàn chơi cờ Mỗi người sẽ bắt đầu ván cờ với 16 quân cờ và sẽ lần lượt đi các quân của mình sau khi đối phương đã đi xong một nước (hoàn thành nước đi)

Các quân cờ của mỗi bên bao gồm 8 Tốt, 2 Mã, 2 Tượng, 2 Xe, 1 Hậu và 1 Vua Người cầm quân trắng luôn là người đi đầu tiên; người kia cầm quân đen Các quân Hậu và Xe được gọi là quân nặng, còn Tượng và Mã được gọi là quân nhẹ

1.2 Mục đích của trò chơi

Xây dựng trò chơi có cách chơi đơn giản, dễ tiếp cận, nhưng đồng thời cũng cần suy nghĩ, thêm vào đó, trò chơi phải có giao diện trực quan, đơn giản, dễ dàng tiếp cận và sử dụng.

Giúp giải quyết nhu cầu thực tế người dùng: Nhu cầu giải trí và khám phá trò chơi phù hợp với đa số đối tượng người chơi Khiến người chơi có trải nghiệm chơi tốt nhất có thể.

1.3 Quy tắc của trò chơi

Khi một ván cờ vua bắt đầu, một người chơi sẽ cầm quân đen và người chơi còn lại cầm quân trắng Việc chọn lựa ai sẽ cầm quân đen hay trắng phụ thuộc vào thể thức chơi là giải trí hay thi đấu trong hệ thống có tổ chức Nó có thể là do hai người thỏa thuận (giải trí) hoặc do quyết định của trọng tài trong giải đấu Bên cầm quân trắng luôn luôn được đi trước và do đó có ưu thế nhỏ so với bên cầm quân đen Các quân cờ cần phải xếp

4

Trang 6

trên bàn cờ tiêu chuẩn với ô nằm ở hàng cuối cùng bên tay phải người chơi bao giờ cũng có màu nhạt.

Các quân cờ có nước đi khác nhau:

Xe (ký hiệu quốc tế R - Rook) di chuyển theo các đường thẳng dọc theo cột hay hàng tới ô còn trống mà không có quân nào cản trên đường đi hay tới ô bị quân đối phương chiếm giữ (ăn quân) nhưng không thể vượt qua quân đang đứng ở ô đó Ngoại lệ duy nhất là trường hợp nhập thành Khi đó nó có thể nhảy qua quân Vua của mình để đứng cạnh nó Chỉ có Xe mới có nước đi như vậy.

Ảnh 1: Minh họa nước đi quân xe

Tượng (ký hiệu quốc tế B - Bishop) di chuyển theo đường chéo tới ô có cùng màu với nguyên lý tương tự như Xe tới ô còn trống hay ô bị quân đối phương chiếm giữ (ăn quân).

5

Trang 7

Ảnh 2: Minh họa nước đi quân tượng

Hậu (ký hiệu quốc tế Q - Queen) có nước đi là tổ hợp đơn giản của chuyển động của Xe và Tượng Trong một nước đi nó có thể di chuyển theo đường chéo hoặc đường thẳng dọc theo cột hay hàng, với nguyên lý đi và ăn quân giống như Tượng và Xe.

Ảnh 3: minh họa nước đi quân hậu

Mã (ký hiệu quốc tế N - Knight) có thể di chuyển tới ô còn trống hay ô bị quân đối phương chiếm giữ (ăn quân) theo dạng hình chữ (hình chữ nhật 3×2 hay 2×3) Quân MãL không bị cản như trong cờ tướng.

6

Trang 8

Ảnh 4: minh họa nước đi quân mã trong cờ vua

Tốt (không cần ký hiệu) có thể di chuyển thẳng về phía trước chỉ một ô một lần tới

ô còn trống (đi mà không ăn quân), nhưng khi di chuyển quân để ăn quân đối phương thì đi chéo Ví dụ, Tốt trắng tại ô c4 có quyền ăn quân đối phương tại b5 hoặc d5 nếu một trong hai ô này có quân đối phương chiếm hoặc di chuyển xuống ô c5 nếu ô này còn trống, trừ hai trường hợp sau:

Ảnh 5: minh họa nước đi quân tốt

Nó có thể di chuyển 1 hoặc 2 ô nếu nó đi từ vị trí xuất phát ban đầu tới ô chưa bị chiếm giữ, nhưng không thể nhảy qua một quân khác để tới ô đó Ví dụ Tốt trắng tại g2 có thể đi tới g3 hoặc g4 nếu đây là nước đi đầu tiên của nó và các ô này chưa bị chiếm giữ, nhưng nó không thể đi tới g4 nếu ô g3 đã có một quân nào đó chiếm giữ.

Trong trường hợp khi một quân Tốt nào đó của bên trắng đạt tới hàng 5 (ví dụ tới ô e5) và quân Tốt thuộc một trong hai cột của bên đen nằm ngay bên cạnh cột mà Tốt trắng

7

Trang 9

này đang chiếm giữ (trong trường hợp đã cho là cột d và cột f) đi từ vị trí xuất phát đầu tiên (d7 hay f7) nhảy liền 2 ô tới ô d5/f5 thì Tốt trắng tại vị trí e5 ngay tại nước đi sau đó có quyền ăn Tốt đen tại ô d5/f5 và di chuyển tiếp tới ô d6/f6 Quyền này sẽ tự động mất, nếu tại nước đi ngay sau đó quân trắng di chuyển quân khác Tương tự như vậy cho Tốt đen khi nó đã chiếm giữ hàng 4 Đây là trường hợp mà trong cờ vua người ta gọi là bắt tốt qua đường (en passant).

Tốt còn một đặc điểm nữa là khi nó di chuyển đến hàng cuối cùng thì người chơi có quyền phong cấp cho nó thành bất kỳ quân nặng hay nhẹ nào (Hậu, Xe, Tượng, Mã).

Ảnh 6: minh họa quân tốt thăng cấp

Vua (ký hiệu quốc tế là K - King) là quân quan trọng nhất, nếu mất Vua thì người chơi thua cuộc Mỗi lần đi nó có thể ăn quân hoặc di chuyển sang các ô bao quanh ô mà nó hiện tại đang chiếm giữ, nhưng không thể tới ô mà quân của mình đang chiếm giữ hay các ô bị quân đối phương kiểm soát Ngoại lệ duy nhất là trường hợp nhập thành Khi đó nó có thể di chuyển qua hai ô đồng thời với việc di chuyển quân Xe của mình để quân Xe đó đứng bên cạnh nó về phía cột trung tâm Ký hiệu của nhập thành là 0-0 (nhập thành gần) và 0-0-0 (nhập thành xa) Xem thêm nhập thành.

Khi ăn quân đối phương, quân tấn công sẽ di chuyển tới ô đó và thay thế cho quân đối phương tại vị trí này, bắt tốt qua đường (en passant) là ngoại lệ duy nhất Quân bị ăn được loại ra khỏi bàn cờ Vua không thể không bảo vệ khỏi nước chiếu, do đó khi bị chiếu thì người chơi phải thực hiện các biện pháp nhằm cứu Vua (di chuyển Vua khỏi vị trí bị chiếu, ăn quân đang chiếu hay dùng quân khác của mình cản đường chiếu nếu có thể) Nếu không thể có nước đi để cứu Vua thì người chơi bị chiếu bí và thua cuộc.

8

Trang 10

Các ván cờ không phải bao giờ cũng kết thúc bằng chiếu bí Có thể một bên xin thua, có thể thua do hết giờ Có thể xảy ra các ván cờ hòa Một ván cờ vua là hòa khi: do thỏa thuận của hai bên do không bên nào dám mạo hiểm hay khi không đủ lực lượng để chiếu hết, rơi vào trạng thái hết nước đi (stalemate), cả hai bên lặp lại nước đi ba lần.

Ảnh 7: minh họa nước đi quân vua

9

Trang 11

CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG

2.1 Mô tả hoạt động trò chơi “Cờ vua”

2.1.1 Mô tả sơ bộ trò chơi

Khi khởi chạy trò chơi, người dùng có thể sử dụng các tùy chọn: chơi trò chơi và thoát khỏi trò chơi.

Sau khi chọn phần chơi, người chơi sẽ tiến đến mục chọn nhân vật Ở đây, người chơi có thể chọn nhân vật để chơi game hoặc quay lại màn hình tùy chọn ban đầu

Sau khi tiến hành chọn nhân vật xong, người chơi sẽ điều khiển nhân vật để khám phá thế giới trò chơi đã đã được bố trí sẵn địa hình Để lấy các vật phẩm xuất hiện trên địa hình, nhân vật cần được di chuyển chạm vào chúng Ngoài ra, người chơi có thể tương tác với NPC xuất hiện trong game để thu thập một số thông tin chỉ dẫn giúp tìm kiếm những vật phẩm dễ dàng hơn

Khi người chơi bấm nút tạm dừng trên bàn phím, màn hình sẽ hiện ra một giao diện có các nút chơi tiếp, hoặc quay trở về màn hình tùy chọn ban đầu.

2.1.2 Thiết kế thế giới trò chơi

Trò chơi được chia thành 1 bàn cờ gồm 64 ô, 32 ô trắng và 32 ô đen.

Ảnh 8: Minh họa bàn cờ

10

Trang 12

2.1.3 Thiết kế cách chơi cơ bản

Người chơi thực hiện chọn quân cờ muốn di chuyển Tùy vào quân cờ được chọn sẽ có vị trí đi khác nhau Sau khi đã chọn quân cờ, người chơi thực hiện chọn vị trí quân cờ muốn di chuyển đến Sau đó sẽ đến lượt quân cờ đối diện Cứ tiếp tục đến khi 1 trong 2 bên không còn quân cờ nào trên bàn thì đối phương sẽ chiến thắng

2.1.4 Thiết kế khung giao diện cơ bản và

Khung giao diện của trò chơi có các thành phần chính như sau: - Bàn cờ: Jpanel kích thước 600x600px

- Các ô cờ: Jpanel được chia đều thành 8 hàng 8 cột

Ảnh 9: thiết kế giao diện trong trò chơi 11

Trang 13

o Class Chessgame: Tại hàm tạo tạo ra một đối tượng cửa sổ có kiểu là JFrame, sau đó thêm đối tượng chessBoard vào cửa sổ đó để hiển thị toàn bộ giao diện game.

- Package: entity

o Class GamePanel: Lớp ChessPiece lưu trữ các thông tin của một quân cờ bao gồm loại quân cờ, màu sắc và vị trí

Ảnh 11: Thiết kế thuộc tính cho các quân cờ

o Class ChessCheckMate: lưu trữ đối tượng vua bị chiếu , quân cờ chiếu và vị trí chiếu

12

Trang 14

Ảnh 12: Class ChessCheckMate - Package: service

o CheckmateService:

Function checkMateKing(): Mục đích xây dựng để kiểm tra khi có một nước đi thay đổi thì có xảy ra thế cờ chiếu tướng hay không

13

Trang 15

Ảnh 13: flow của của hàm checkMateKing

14

Trang 16

Function killCheckmateKing(): mục đích kiểm tra xem có quân cờ nào có thể ăn được quân cờ đối thủ đang chiếu quân vua hay không, tham số truyền vào là quân cờ đang chiếu vua

Ảnh 14: flow của hàm killCheckmateKing

Function shieldCheckmateKing (): sử dụng để kiểm tra xem có quân cờ nào phía quân vua bị chiếu có thể chắn giữa quân cờ chiếu vua và quân vua hay không.

15

Trang 17

Tham số truyền vào là quân vua bị chiếu và quân đang chiếu quân vua Các quân có khả năng chiếu vua mà tạo khoảng cách ở giữa là quân hậu, xe , tượng ngoài ra còn quân tốt và quân mã Quân tốt thì không tạo khoảng trống vì nước đi đặc biệt và quân mã thì không thể bị chặn ở giữa được.

Ảnh 15: flow hàm shieldCheckmateKing

16

Trang 18

- Class StepService:

Bao gồm các function dung để kiểm tra nước đi có hợp lệ đối với quân cờ đang được chọn đặc điểm chung của các hàm đều nhận vào 4 tham số bao gồm trục x băn đầu, trục y băn đầu, trục x muốn di chuyển đến, trục y muốn di chuyển đến Và trong các function đều kiểm tra xem giữa vị trí băn đầu và vị trí muốn di chuyển đến có tồn tại quân cờ nào ở giữa không Nếu tồn tại trả về false

17

Trang 19

o Flow chung cho kiểm tra nước đi:

Ảnh 16: luồng kiểm tra chung o Function isValidQuanTuong():

Đối với quân tượng sẽ thực hiện kiểm tra :

Nếu | start_row – end_row | = | start_column – end_column | thì đó là nước đi hợp lệ Trong đó start_row là dòng vị trí băn đầu, end row là vị trí muốn di chuyển đến, start column là cột băn đầu, end column là cột muốn di chuyển đến.

o Function isValidQuanXe():

18

Trang 20

Xảy ra 2 trường hợp, quân xe đi ngang và đi dọc khi quân xe đi dọc thì cột giữ nguyên, dòng sẽ thay đổi Và ngược lại khi quân xe đ ingang thì dòng giữ nguyên, cột sẽ thay đổi Dựa vào 2 trường hợp này ta có điều kiện

(start_row – end_row) == 0 thì (start_column – end_column ) != 0 Hoặc

(start_row – end_row) != 0 thì (start_column – end_column ) == 0 o Function isValidQuanHau():

Kiểm tra nước đi cho quân hậu xảy ra 2 trường hợp là giống quân xe hoặc giống quân tượng Ta sử dụng lại 2 hàm kiểm tra cho 2 loại quân cờ này là có thể kiểm tra được nước đi cho quân hậu

o Function isValidQuanMa();

Kiểm tra nước đi hợp lệ cho quân mã Quân mã có nước đi khá đặc biệt Đi hình chữ L nên ta có điều kiện như sau:

| start_row – end_row | = 1 và | start_column – end_column | = 2 Hoặc

| start_row – end_row | = 2 và | start_column – end_column | = 1 o Function isValidQuanVua();

Kiểm tra nước đi hợp lệ cho quân vua Quân vua có thể đi được 9 ô cờ xung quanh bản than nó Nên ta có điều kiện như sau:

| start_row – end_row | = 1 và | start_column – end_column | = 0 Hoặc

| start_row – end_row | = 0 và | start_column – end_column | = 1 o Function isValidQuanTot();

Kiểm tra nước đi hợp lệ cho quân tốt Quân tốt có nước đi khá đặc biệt vì khi lần đầu di chuyển quân tốt có thể đi được 2 nước cờ và có điều kiện là

| start_row – end_row | = 2

Trong các nước đi tiếp theo quân tốt chỉ có thể di chuyển 1 ô cờ và có điều kiện là | start_row – end_row | = 1

19

Trang 21

Quân tốt có thể ăn 1 quân cờ khi quân cờ đó nằm chéo quân tốt và không cách bất kỳ ô cờ nào Và có điều kiện là:

| start_row – end_row | = 1 và | start_column – end_column | = 1

Khi quân tốt di chuyển đến vị trí row 0 hoặc 7 thì quân tốt có thể thăng cấp trở thành 1 trong 4 quân cờ: Hậu, xe , tượng, mã

- Class Utils:

o Function InitDefaultChessMan():

Sử dụng để tạo ra các quân cờ khi trò chơi vừa khởi động

chessPieces.add(new ChessPiece("XE", Color.WHITE, 0)); chessPieces.add(new ChessPiece("MA", Color.WHITE 0 1, , )); chessPieces.add(new ChessPiece("TUONG", Color.WHITE 0 2, , )); chessPieces.add(new ChessPiece("HAU", Color.WHITE 0 3, , )); chessPieces.add(new ChessPiece("VUA", Color.WHITE 0 4, , )); chessPieces.add(new ChessPiece("TUONG", Color.WHITE 0 5, , )); chessPieces.add(new ChessPiece("MA", Color.WHITE 0 6, , )); chessPieces.add(new ChessPiece("XE", Color.WHITE 0 7, , )); chessPieces.add(new ChessPiece("TOT", Color.WHITE 1 0, , )); chessPieces.add(new ChessPiece("TOT", Color.WHITE 1 1, , )); chessPieces.add(new ChessPiece("TOT", Color.WHITE 1 2, , )); chessPieces.add(new ChessPiece("TOT", Color.WHITE 1 3, , )); chessPieces.add(new ChessPiece("TOT", Color.WHITE 1 4, , )); chessPieces.add(new ChessPiece("TOT", Color.WHITE 1 5, , )); chessPieces.add(new ChessPiece("TOT", Color.WHITE 1 6, , )); chessPieces.add(new ChessPiece("TOT", Color.WHITE 1 7, , )); //Hết bên trắng

//Bên đen

chessPieces.add(new ChessPiece("TOT", Color.BLACK, 0)); chessPieces.add(new ChessPiece("TOT", Color.BLACK 6 1, , )); chessPieces.add(new ChessPiece("TOT", Color.BLACK 6 2, , )); chessPieces.add(new ChessPiece("TOT", Color.BLACK 6 3, , )); chessPieces.add(new ChessPiece("TOT", Color.BLACK 6 4, , )); chessPieces.add(new ChessPiece("TOT", Color.BLACK 6 5, , )); chessPieces.add(new ChessPiece("TOT", Color.BLACK 6 6, , )); chessPieces.add(new ChessPiece("TOT", Color.BLACK 6 7, , )); chessPieces.add(new ChessPiece("XE", Color.BLACK 7 0, , )); chessPieces.add(new ChessPiece("MA", Color.BLACK 7 1, , )); chessPieces.add(new ChessPiece("TUONG", Color.BLACK 7 2, , )); chessPieces.add(new ChessPiece("HAU", Color.BLACK 7 3, , ));

20

Ngày đăng: 22/04/2024, 22:12

HÌNH ẢNH LIÊN QUAN

Hình 3.1: Giao diện chiến thắng - bài tập lớn môn học công nghệ java đề tài trò chơi cờ vua
Hình 3.1 Giao diện chiến thắng (Trang 29)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w