Trang Chủ Tài chính Cá nhân Java Programming Challenge: Thêm các mảng vào chương trình Tic-Tac-Toe đơn giản

Java Programming Challenge: Thêm các mảng vào chương trình Tic-Tac-Toe đơn giản

Video: Coding Challenge #31: Flappy Bird 2025

Video: Coding Challenge #31: Flappy Bird 2025
Anonim

Thách thức lập trình Java dựa trên những thách thức trước đây trong loạt bài Tic-Tac-Toe này và kiểm tra khả năng sử dụng mảng của bạn - hai trong số đó, trên thực tế.

Trong Java Programming Challenge: Trò chơi đơn giản với Tic-Tac-Toe và Lập trình Java: Thêm lớp vào chương trình Tic-Tac-Toe Đơn giản bạn sẽ được yêu cầu viết một chương trình để chơi trò chơi đơn giản của Tic-Tac-Toe.

Là một trò chơi, Tic-Tac-Toe kêu lên cho việc sử dụng một mảng để thể hiện tình trạng của trò chơi. Nếu không có mảng, bạn phải sử dụng một biến riêng biệt để biểu diễn mỗi hình vuông của bảng. Với một mảng, bạn có thể sử dụng một biến duy nhất để biểu diễn tất cả chín ô vuông.

Thách thức lập trình này rất đơn giản: Viết một phiên bản cải tiến của chương trình sử dụng các mảng. Bạn phải sử dụng ít nhất hai mảng trong giải pháp của bạn:

  1. Bạn phải sử dụng một mảng để biểu diễn bảng. Có nhiều khả năng, bạn sẽ muốn sử dụng một mảng một chiều với chín phần tử, như sau:

    0 | 1 | 2 --- | --- | --- 3 | 4 | 5 --- | --- | --- 6 | 7 | 8
    

    Nói cách khác, hình vuông phía trên bên trái (A1) được lưu trữ trong phần tử mảng 0, và hình vuông phía dưới bên phải (C3) được lưu trong phần tử mảng 8.

  2. Bạn cũng phải sử dụng một mảng để biểu diễn tám vectơ có thể có ba trong một hàng.

    Sau đó bạn có thể sử dụng mảng này để xác định liệu một trong hai người chơi có thắng cuộc chơi hay không. Rất có thể, bạn sẽ muốn sử dụng một mảng hai chiều cho nhiệm vụ này. Mảng sẽ chứa tám, ba mảng phần tử, mỗi mảng đại diện cho ba chỉ số của một vector đặc biệt ba trong một hàng.

    Mảng hoàn chỉnh sẽ chứa các dữ liệu sau:

    0 1 2 3 4 5 6 7 8 0 3 6 1 4 7 2 5 8 0 4 8 2 4 6
    

Một yêu cầu bổ sung của chương trình này là lớp TicTacToeBoard bạn tạo cho thách thức này phải hoàn toàn tương thích với lớp bạn đã tạo cho thử thách trước đó. Nói cách khác, nó phải thực hiện chính xác cùng một phương pháp. Để thuận tiện cho bạn, các phương pháp này được lặp lại trong bảng sau.

Vì những phương pháp này đề cập đến các ô vuông của bảng tic-tac-toe sử dụng các tên cột như A1 hoặc B2, việc triển khai của bạn sẽ phải lập bản đồ các chỉ định này cho các số chỉ mục. Ví dụ, nếu chuỗi A1 được truyền vào phương thức playAt, chương trình phải đánh dấu phát ở chỉ số 0 trong mảng.

TicTacToeBoard Class
Constructor Mô tả
TicTacToeBoard

Tạo một TicTacToeBoard mới với tất cả các ô vuông trống.
Phương pháp Mô tả
void reset () Đặt lại trạng thái của mỗi ô vuông để trống.
void playAt (String square, int player) Đánh dấu ô xác định (A1, A2, A3, B1, B2, B3, C1, C2, C3) cho người chơi đã chỉ định (1 cho X, 2 O). Ném IllegalArgumentException nếu hình vuông không phải là một trong các giá trị cho phép, người chơi không phải là 1 hoặc 2, hoặc hình vuông được chỉ định không rỗng.
int isGameOver () Xác định xem trận đấu đã kết thúc hay không. Trả về 0 nếu trận đấu kết thúc, 1 nếu X đã thắng, 2 nếu O thắng, và 3 nếu trận đấu là hòa. Các điều kiện kết thúc trò chơi như sau:

1: Nếu bất kỳ hàng, cột hoặc đường chéo nào chứa tất cả các X.

2: Nếu bất kỳ hàng, cột hoặc đường chéo nào chứa tất cả các chữ O.

3: Nếu không có ô vuông trống và X và O cũng không thắng.

int getNextMove () Trả về một số nguyên đại diện cho bước tiếp theo của máy tính đối thủ. Phương pháp này nên thực hiện một nỗ lực thô sơ để chọn một động thái tốt, theo chiến lược sau:

* Nếu trung tâm (vuông B2) trống rỗng, hãy chơi vuông trung tâm.

* Nếu trung tâm không rỗng nhưng bất kỳ góc nào trong bốn góc (ô vuông A1, A3, C1, hoặc C3) đều trống rỗng, hãy chơi một trong các góc (không quan trọng).

* Nếu trung tâm không rỗng và không có góc nào, hãy chơi một trong các cạnh (hình vuông A2, B1, B3, hoặc C2).

Chuỗi toString () Trả về một chuỗi đại diện cho hiện trạng của bảng. Chuỗi bao gồm các ký tự dòng mới để hiển thị các dòng cũng như các đường phân cách trên các dòng điều khiển riêng, như trong ví dụ này:

O | | O

- | - | -

| X |

- | - | -

| X |

Là một thách thức nữa, đối với phiên bản thử thách TicTacToeBoard này, người chơi máy tính nên sử dụng một chiến lược thông minh hơn chống lại đối thủ của con người. Xác định lối chơi của máy tính như sau:

  1. Nếu máy tính có thể giành chiến thắng trong lần chơi tiếp theo, máy tính nên chơi ở vị trí chiến thắng.

  2. Nếu có thể đối thủ của con người giành chiến thắng trên vở kịch tiếp theo của mình, máy tính nên chơi trong chiến thắng của con người vuông để ngăn chặn giành chiến thắng.

  3. Nếu có hình vuông trung tâm, máy tính nên lấy hình vuông giữa.

  4. Nếu có bất kỳ góc vuông nào, máy tính nên chơi ở một trong những góc có sẵn.

  5. Máy tính nên chơi trong một cạnh vuông có sẵn.

Lưu ý rằng để thực hiện chiến lược này, bạn cần phải phát triển một quy trình có thể xác định xem một trong hai người chơi có thể giành chiến thắng trong lần di chuyển tiếp theo của mình hay không. Để làm được điều này, bạn phải xem xét mỗi vectơ tám, ba trong một hàng để xác định xem vector có chứa một ô vuông trống và nếu mỗi ô vuông kia chứa các dấu cho cùng một đối thủ (là, hai của X hoặc hai của O).

Bạn có thể làm điều đó bằng cách sử dụng 0 để biểu diễn một hình vuông rỗng, 1 đại diện cho một X, và 2 để biểu diễn một O. Nhưng điều đó đòi hỏi phải có logic khá phức tạp - một cái gì đó như thế này sẽ được yêu cầu, giả sử rằng s1, s2, và s3 là các số nguyên có chứa nội dung của ba ô vuông của một trong tám, ba trong một hàng vectơ:

if (s1 == 0 & s2 == 1 & s3 == 1) // X có thể thắng bằng cách chơi s1 nếu (s2 == 0 & s1 == 1 & s3 == 1) // X có thể thắng bằng cách chơi s2 nếu (s3 == 0 & s1 == 1 & s2 == 1) // X có thể thắng bằng cách chơi s3

Vì vậy, đây là một mẹo: Thay vì sử dụng 0, 1, và 2 để biểu diễn một hình vuông rỗng, X và O, sử dụng các số nguyên tố 2, 3 và 5.Sau đó, để xác định liệu một người chơi có thể giành chiến thắng trên một vector nhất định, chỉ cần nhân ba giá trị cho vector đó. Nếu kết quả là 18, X có thể giành chiến thắng (233 = 18). Nếu kết quả là 50, O có thể giành chiến thắng (255 = 50).

Lưu ý rằng mặc dù chiến lược này là một cải tiến đối với chiến lược được sử dụng cho các phiên bản trước của chương trình nhưng nó vẫn không phải là một chiến lược hoàn hảo: Bạn vẫn có thể đánh bại máy tính với đúng trình tự chơi. Nếu bạn muốn có một thách thức bổ sung, hãy cân nhắc chiến lược bổ sung nào sẽ là cần thiết để làm cho trò chơi không thể bị tấn công, và sau đó đưa ra một cách để thực hiện chiến lược mới.

Bạn có thể tìm giải pháp cho thử thách này trên tab Tải xuống của Máy tính Java dành cho người lớn, trang sản phẩm Ấn bản lần 4.

Chúc may mắn!

Java Programming Challenge: Thêm các mảng vào chương trình Tic-Tac-Toe đơn giản

Lựa chọn của người biên tập

Cách lọc một nguồn dữ liệu kết hợp trong Word 2013 - núm vú

Cách lọc một nguồn dữ liệu kết hợp trong Word 2013 - núm vú

Trong tài liệu Word 2013, lọc một nguồn dữ liệu loại trừ các bản ghi nhất định (hoặc xem một cách khác, nó chỉ bao gồm một số bản ghi) dựa trên một hoặc nhiều tiêu chí mà bạn chỉ định. Ví dụ: bạn có thể muốn chỉ bao gồm các địa chỉ từ một thành phố hoặc tiểu bang nhất định, hoặc chỉ những địa chỉ phù hợp với địa chỉ ...

Cách Tìm Stuff bạn không thể gõ trong Word 2007 - núm vú

Cách Tìm Stuff bạn không thể gõ trong Word 2007 - núm vú

Word 2007 giúp tìm các ký tự đặc biệt, không in được trong tài liệu của bạn. Sử dụng hộp thoại Tìm và Thay thế, bạn có thể tìm kiếm những thứ như tab, dấu phân cách, dấu thập phân, khoảng trống và những thứ khác mà bạn không thể tạo ra từ bàn phím. Gọi hộp thoại Tìm và Thay thế. Nếu cần thiết, hãy nhấp vào nút Thêm để ...

Cách Tìm Định dạng trong Word 2007 - núm vú

Cách Tìm Định dạng trong Word 2007 - núm vú

Bạn có thể sử dụng lệnh Tìm để đánh cắp tài liệu Word 2007 của bạn để định dạng thông tin. Ví dụ, nếu bạn chỉ muốn tìm những trường hợp của từ lie có chữ đậm, bạn có thể làm điều đó. Ví dụ này tìm kiếm trứng ngỗng văn bản với kích thước phông chữ là 24 điểm trong một ...

Lựa chọn của người biên tập

Làm thế nào để Thoả Nhận Hợp Đồng Máy chủ Web - núm vú

Làm thế nào để Thoả Nhận Hợp Đồng Máy chủ Web - núm vú

Trên thực tế, đa số của máy chủ web không hoàn lại tiền nếu bạn để lại trước khi thời hạn hợp đồng của bạn kết thúc. Trong thực tế, nếu bạn có một thỏa thuận giá rẻ trên hosting của bạn, nó có thể có các điều khoản và điều kiện yêu cầu bạn xem ra thời hạn của hợp đồng hoặc trả tiền cho đặc quyền ...

Cách quản lý tập tin với Control Panel của Website - núm vú

Cách quản lý tập tin với Control Panel của Website - núm vú

Bảng điều khiển của bạn cung cấp cho bạn một cách tiện dụng để quản lý các tệp của bạn mà không cần máy chủ FTP được lưu trữ trên web. Đây là một cái gì đó phổ biến cho hầu hết các bảng điều khiển nhưng đôi khi có nhãn khác nhau một chút. Ví dụ, hầu hết các máy chủ gọi nó là File Manager, nhưng DreamHost gọi nó là webFTP. Sử dụng Trình quản lý Tệp là

Cách Quản lý Người dùng với Quản lý Máy chủ Web - núm vú

Cách Quản lý Người dùng với Quản lý Máy chủ Web - núm vú

Cây thư mục riêng trên máy chủ nơi tập tin của nó được giữ. Là chủ sở hữu của máy chủ, bạn có quyền truy cập superuser cho toàn bộ máy chủ, có nghĩa là bạn có thể xem tất cả các tệp tin của chủ tài khoản khác. Tất cả các tập tin tài khoản được lưu giữ trong các thư mục bên trong một thư mục gọi là home, ...

Lựa chọn của người biên tập

Tạo một Cột trang web mới trong SharePoint 2010 - núm vú

Tạo một Cột trang web mới trong SharePoint 2010 - núm vú

SharePoint 2010 có một thực thể cột trang web cho phép bạn để sử dụng lại các cột trên nhiều danh sách. Khi bạn tạo một cột mới trong danh sách của mình, bạn tạo ra một cột danh sách - có nghĩa cột chỉ có thể được sử dụng trong danh sách đó. Các cột của trang web được tạo ở cấp cao nhất của trang web nhóm của bạn và có thể ...

Tạo Tuỳ chỉnh Chủ đề cho SharePoint 2010 Sử dụng PowerPoint - núm vú

Tạo Tuỳ chỉnh Chủ đề cho SharePoint 2010 Sử dụng PowerPoint - núm vú

Cho nhiều nhà thiết kế trang web và chủ sở hữu SharePoint 2010 , ý tưởng để có thể tùy chỉnh chủ đề của họ là rất thú vị. Mặt khác, nhiệm vụ chọn nhiều màu có thể có vẻ khó chịu với những người biết họ thích gì khi họ nhìn thấy nó nhưng gặp sự cố khi lựa chọn. Nếu bạn ở trong ...

Tạo trang web mới trong SharePoint 2010 - núm vú

Tạo trang web mới trong SharePoint 2010 - núm vú

Bạn có thể tạo một bộ sưu tập trang web mới trong SharePoint theo hai cách - bằng cách sử dụng Quản trị Trung tâm hoặc thông qua Tạo trang web Tự phục vụ. Sử dụng Quản trị Trung tâm đòi hỏi các quyền được cấp phép, thường là hạn chế đối với nhân viên CNTT. Tạo trang web tự tạo là một tính năng của SharePoint cho phép CNTT trao quyền cho việc tạo bộ sưu tập trang web mới ...