TiiL Tutorials
@TinhocTiiL

Game caro 3×3 với Java Swing (tic-tac-toe 3×3)

Giới thiệu:

Trong bài viết này, chúng ta sẽ tìm hiểu cách xây dựng trò chơi Tic Tac Toe bằng thư viện Java Swing. Trò chơi Tic Tac Toe này cho phép bạn chơi một cách dễ dàng thông qua giao diện người dùng đồ họa (GUI). Trò chơi này được phát triển bằng thư viện Java Swing, cung cấp một bộ các thành phần để xây dựng giao diện người dùng đồ họa (GUI). Trò chơi này có thiết kế đơn giản với các nút bấm để chơi. Vì vậy, hãy ngồi xuống, uống một tách cà phê và bắt đầu chơi trò chơi Tic Tac Toe.

Giải thích:

Trò chơi Tic Tac Toe này là một trò chơi giao diện người dùng (GUI) cho phép người chơi chơi dễ dàng thông qua các nút bấm. Người chơi có thể chơi trò chơi nhanh chóng bằng cách sử dụng thiết kế đơn giản của hệ thống. Trò chơi Tic Tac Toe có thiết kế đơn giản với các nút bấm. Người chơi có thể nhấp chuột vào các nút bấm một cách tuần tự để chơi trò chơi.

Người chơi có thể chơi trò chơi bằng cách sử dụng các nút bấm. Trò chơi này có thể được chơi bởi 2 người chơi. Người chơi thứ nhất có thể nhấp chuột vào bất kỳ nút bấm nào và giá trị của nút sẽ là ‘x’. Khi người chơi thứ hai nhấp chuột vào nút bấm, giá trị của nút sẽ là ‘o’. Người chiến thắng của trò chơi được quyết định dựa trên việc các giá trị trong hàng, cột hoặc đường chéo phải giống nhau.

Chúng tôi sử dụng thư viện Java Swing, cung cấp một bộ các thành phần linh hoạt, để xây dựng trò chơi Tic Tac Toe. Ứng dụng sử dụng các thành phần Swing như Jbutton, JPanel và JFrame cùng với nhiều thành phần Swing khác. Sự kiện của nút bấm được xử lý bằng giao diện ActionListener và sự kiện của nút bấm được định nghĩa bằng phương thức actionPerformed() của ActionListener. Người chiến thắng của trò chơi được kiểm tra bằng phương thức checkForWinner().

Các phương thức được sử dụng trong dự án:

actionPerformed():
Phương thức này xử lý các sự kiện hoặc hành động của các nút bấm. Các nút bấm trong hệ thống để tạo giá trị của nút được xử lý bằng phương thức này. Phương thức này mô tả cách thành phần sẽ hoạt động sau khi người dùng nhấp chuột vào nút bấm.

checkForWinner():
Đây là một phương thức do người dùng định nghĩa để kiểm tra người chiến thắng của trò chơi. Để chiến thắng trò chơi, một trong hai người chơi cần có các giá trị trong hàng, cột hoặc đường chéo giống nhau. Nếu không có giá trị nào giống nhau, một hộp thoại xuất hiện với thông báo “Hòa”.

resetGame():
Đây là một phương thức do người dùng định nghĩa để đặt lại trò chơi sau khi có người chiến thắng. Phương thức này gán giá trị rỗng cho các nút.

 

package thomc.edu;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class ChuongTrinhCaRo3by3 implements ActionListener {
	    private JFrame frame;
	    private JPanel panel;
	    private JButton[] buttons = new JButton[9];
	    private boolean xTurn = true;

	    public ChuongTrinhCaRo3by3() {
	        frame = new JFrame("Game Caro 3*3");
	        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	        panel = new JPanel();
	        panel.setLayout(new GridLayout(3, 3));
	        panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

	        for (int i = 0; i < 9; i++) {
	            buttons[i] = new JButton();
	            buttons[i].setFont(new Font("Arial", Font.PLAIN, 40));
	            buttons[i].addActionListener(this);
	            panel.add(buttons[i]);
	        }

	        frame.add(panel, BorderLayout.CENTER);
	        frame.setSize(400, 400);
	        frame.setVisible(true);
	    }

	    public void actionPerformed(ActionEvent e) {
	        JButton button = (JButton) e.getSource();
	        if (xTurn) {
	            button.setText("X");
	        } else {
	            button.setText("O");
	        }
	        button.setEnabled(false);
	        xTurn = !xTurn;

	        checkForWinner();
	    }

	    public void checkForWinner() {
	        // Check rows
	        for (int i = 0; i < 9; i += 3) {
	            if (buttons[i].getText().equals(buttons[i+1].getText()) && buttons[i].getText().equals(buttons[i+2].getText()) && !buttons[i].isEnabled()) {
	                JOptionPane.showMessageDialog(frame, buttons[i].getText() + " Thắng!");
	                resetGame();
	                return;
	            }
	        }

	        // Check columns
	        for (int i = 0; i < 3; i++) {
	            if (buttons[i].getText().equals(buttons[i+3].getText()) && buttons[i].getText().equals(buttons[i+6].getText()) && !buttons[i].isEnabled()) {
	                JOptionPane.showMessageDialog(frame, buttons[i].getText() + " Thắng!");
	                resetGame();
	                return;
	            }
	        }

	        // Check diagonals
	        if (buttons[0].getText().equals(buttons[4].getText()) && buttons[0].getText().equals(buttons[8].getText()) && !buttons[0].isEnabled()) {
	            JOptionPane.showMessageDialog(frame, buttons[0].getText() + " Thắng!");
	            resetGame();
	            return;
	        }
	        if (buttons[2].getText().equals(buttons[4].getText()) && buttons[2].getText().equals(buttons[6].getText()) && !buttons[2].isEnabled()) {
	            JOptionPane.showMessageDialog(frame, buttons[2].getText() + " Thắng!");
	            resetGame();
	            return;
	        }

	        // Check for tie
	        boolean tie = true;
	        for (int i = 0; i < 9; i++) {
	            if (buttons[i].isEnabled()) {
	                tie = false;
	                break;
	            }
	        }
	        if (tie) {
	            JOptionPane.showMessageDialog(frame, "Game Hòa!");
	            resetGame();
	        }
	    }

	    public void resetGame() {
	        for (int i = 0; i < 9; i++) {
	            buttons[i].setText("");
	            buttons[i].setEnabled(true);
	        }
	        xTurn = true;
	    }

	public static void main(String[] args) {
	
		new ChuongTrinhCaRo3by3();

	}

}

 

 

Avatar
https://khoacntt.ntu.edu.vn/giang-vien/mai-cuong-tho

một GV Đại học. TiiL đã phụ trách một số môn học như: Lập trình Java, Phát triển web với Java, Lập trình thiết bị di động, Lập trình hệ thống nhúng và IoT.

Comments are closed.