Giới thiệu

Tic Tac Toe là một trong những trò chơi hơi phổ biến cần sử dụng viết trên bàn cờ giấy bao gồm 9 ô. Hai người chơi, một người tiêu dùng cam kết hiệu O, tín đồ kia sử dụng cam kết hiệu X, theo thứ tự điền ký kết hiệu của bản thân mình vào những ô. Người chiến thắng cuộc là fan đầu tiên tạo được một dãy 3 cam kết hiệu của mình theo các chiều ngang, dọc giỏi chéo hồ hết được. Nếu sau khoản thời gian vẫn che đầy những ô trống mà vẫn không ai có được một hàng 3 ô thẳng sản phẩm thì vẫn là hòa. Hình sau trình bày 3 trường hòa hợp ví dụ:


Bạn đang xem: Tic tac toe là gì

*


Xem thêm: Home Banking Techcombank Là Gì ? Cách Sử Dụng Homebanking Techcombank? ?


Lớp TicTacToe đựng 9 ô

whoseTurn: Chỉ ra lượt đùa của người chơi, ban sơ là X. – cell: Một mảng 2 chiều 3 x 3 những ô. – jlblStatus: Một nhãn (label) để hiển thị tâm trạng của game. – TicTacToe(): Khởi tạo hình ảnh người dùng. – isFull(): Trả về quý hiếm true nếu toàn bộ các ô hầu như đã được đánh. – isWon(token: char): Trả về giá trị true giả dụ bạn nghịch tất cả cam kết hiệu token sẽ chiến thắng.

Với lí vì chưng là lớp Cell chỉ được dùng trong lớp TicTacToe cho nên nó rất có thể được định nghĩa phía bên trong lớp TicTacToe (inner class). Chi ngày tiết của chương trình được biểu đạt mặt dưới:

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.LineBorder;

public class TicTacToe extends JApplet { // Chỉ ra lượt nghịch của bạn nghịch, quý hiếm thuở đầu là X private char whoseTurn = ‘X’;

// Khởi tạo nên những ô private Cell cells = new Cell;

// Khởi chế tác label tinh thần của trò nghịch private JLabel jlblStatus = new JLabel("X’s turn lớn play");

/** Initialize UI */ public TicTacToe() // Panel p đựng các ô JPanel p = new JPanel(new GridLayout(3, 3, 0, 0)); for (int i = 0; i for (int j = 0; j p.add(cells = new Cell());

// Ttuyệt đổi đường viền của các ô cùng label tâm trạng p.setBorder(new LineBorder(Color.red, 1)); jlblStatus.setBorder(new LineBorder(Color.yellow, 1));

// Đưa panel cùng label vào vào applet add(p, BorderLayout.CENTER); add(jlblStatus, BorderLayout.SOUTH);

/** Xác định coi liệu toàn bộ những ô số đông đã được tiến công hay chưa */ public boolean isFull() for (int i = 0; i for (int j = 0; j if (cells.getToken() == ‘ ‘) return false;

return true;

/** Xác định coi liệu fan nghịch cùng với ký hiện token đang chiến thắng hay chưa */ public boolean isWon(char token) for (int i = 0; i if ((cells.getToken() == token) &và (cells.getToken() == token) &và (cells.getToken() == token)) return true;

for (int j = 0; j if ((cells.getToken() == token) && (cells.getToken() == token) &và (cells.getToken() == token)) return true;

if ((cells.getToken() == token) &và (cells.getToken() == token) && (cells.getToken() == token)) return true;

if ((cells.getToken() == token) &và (cells.getToken() == token) && (cells.getToken() == token)) return true;

return false;

// Một inner class thay mặt đại diện cho 1 ô public class Cell extends JPanel // Ký hiệu của ô này private char token = ‘ ‘;

public Cell() setBorder(new LineBorder(Color.blaông chồng, 1)); // Ttốt thay đổi đường viền của ô addMouseListener(new MyMouseListener()); // Đăng ký kết listener

/** Trả về cam kết hiệu của ô */ public char getToken() return token;

/** Nhập một cam kết hiệu bắt đầu mang lại ô */ public void setToken(char c) token = c; repaint();

/** Vẽ ô */ protected void paintComponent(Graphics g) super.paintComponent(g);

if (token == ‘X’) g.drawLine(10, 10, getWidth() – 10, getHeight() – 10); g.drawLine(getWidth() – 10, 10, 10, getHeight() – 10); else if (token == ‘O’) g.drawOval(10, 10, getWidth() – 20, getHeight() – 20);

private class MyMouseListener extends MouseAdapter /** Xử lý sự kiện dấn chuột trong một ô */ public void mouseClicked(MouseEvent e) // Nếu một ô còn trống với trò nghịch vẫn không xong xuôi if (token == ‘ ‘ &và whoseTurn != ‘ ‘) setToken(whoseTurn); // Tgiỏi thay đổi ký kết hiệu mang lại ô

// Kiểm tra tâm lý của trò đùa if (isWon(whoseTurn)) jlblStatus.setText(whoseTurn + " won! The game is over"); whoseTurn = ‘ ‘; // Trò chơi xong xuôi else if (isFull()) jlblStatus.setText("Draw! The game is over"); whoseTurn = ‘ ‘; // Trò đùa xong xuôi else // Txuất xắc đổi lượt đùa whoseTurn = (whoseTurn == ‘X’) ? ‘O’: ‘X’; // Hiển thị lượt chơi jlblStatus.setText(whoseTurn + "’s turn");

/** Pmùi hương thức main() có thể chấp nhận được applet này chạgiống như là một trong áp dụng */ public static void main(String args) { // Tạo một frame JFrame frame = new JFrame("TicTacToe");

// Tạo một biểu thị của applet TicTacToe applet = new TicTacToe();

// Thêm trình bày của applet vào trong frame frame.add(applet, BorderLayout.CENTER);

Bởi bởi vì lớp Cell là inner class của lớp TicTacToe nên biến đổi whoseTurn và các phương thức isFull() isWon() của lớp TicTacToe hồ hết hoàn toàn có thể sử dụng được vào lớp Cell. Inner class giúp cho công tác trsinh hoạt nên đơn giản dễ dàng với nthêm gọn gàng hơn. Nếu lớp Cell không được khai báo là inner class của lớp TicTacToe thì bọn họ cần phải truyền một đối tượng người sử dụng của TicTacToe vào vào lớp Cell để lớp này rất có thể áp dụng được các biến hóa cùng phương thức của lớp TicTacToe. quý khách hàng có thể test viết lại lịch trình này nhưng không thực hiện inner class. Sự khiếu nại MouseEvent được đăng ký cho từng ô, trường hợp một ô trống được nhận loài chuột trong những khi trò nghịch vẫn chưa kết thúc thì ký kết hiệu hiện giờ sẽ được đặt mang đến ô kia. Nếu trò nghịch dứt, biến hóa whoseTurn sẽ được gán quý giá ‘ ‘, còn còn nếu không thì whoseTurn đang gửi lịch sự quý hiếm của lượt chơi bắt đầu.

Mẹo:

Hãy áp dụng cách thức tiếp cận tăng cường (incremental approach) trong câu hỏi cải cách và phát triển với kiểm demo một dự án Java ở trong nhiều loại này. Chương trình ngơi nghỉ trên hoàn toàn có thể được chia thành 5 bước nlỗi sau:

Dựng đồ họa người tiêu dùng và hiển thị cam kết hiệu X vào một ô cố định. Tạo cho những ô tài năng hiển thị ký kết hiệu X mỗi lúc một ô nào đó được nhận chuột. Kết phù hợp giữa nhị người nghịch làm sao để cho những ký kết hiệu X với O được hiển thị thế phiên nhau. Kiểm tra xem một tín đồ chơi sẽ chiến thắng hay chưa, hay những toàn bộ các ô những đã có được đánh. Hiển thị thông tin bên trên label trạng thái sau từng nước đi của người chơi. Chuyên mục: Hỏi Đáp
Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *