井字游戏 源码-你还在画棋盘吗? 20分钟教你如何用Java编写井字棋游戏!

你还在画棋盘吗? 20分钟教你如何用Java编写井字棋游戏!

文章目录

前言

上课无聊的时候,很多人肯定会拿出一张白纸,老师饶有兴趣地讲起来。 我和我的同桌已经开始玩井字游戏了。 一张空白的纸。 如果你无聊想玩井字棋,不仅浪费纸张,还得自己画棋子。 ,今天小编就带大家用Java编写一个井字棋小游戏。

设计流程 1.创建窗体类MyGameWindow

创建MyGameWindow类继承JFrame类成为表单类并实现ActionListener套接字,并在ActionListener套接字中实现actionPerformed(ActionEvent e)方法。

public class MyGameWindow extends JFrame implements ActionListener {
    
    @Override
    public void actionPerformed(ActionEvent e) {
        
    }
}

2.创建表单的构造函数

创建表单的构造函数,进行一些基本设置,并在 main 方法中实例化它。

public class MyGameWindow extends JFrame implements ActionListener {
    public MyGameWindow(){
    	//设置窗口的标题
        setTitle("井字棋");
        //设置窗体的位置和大小
        setBounds(100,100,600,600);
        //设置窗体的布局方式
        setLayout(new GridLayout(3,3));
        //设置窗体的关闭方式
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        //设置窗体可见
        setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
    }
    public static void main(String[] args) {
        new MyGameWindow();
    }
}

此时,我们已经创建了一个空窗口。

3. 创建棋盘

创建一个三行三列的键链表来表示棋盘,将键字段实例化添加到表单中,并为每个键设置一个风暴监听器。

public class MyGameWindow extends JFrame implements ActionListener {
    //以3行3列数组的形式创建表盘
    private JButton[][] boards = new JButton[3][3];
    
    public MyGameWindow(){
    	//设置窗口的标题
        setTitle("井字棋");
        //设置窗体的位置和大小
        setBounds(100,100,600,600);
        //设置窗体的布局方式
        setLayout(new GridLayout(3,3));
        //将按钮数组添加到窗体中去并为按钮添加事件监听方法
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                //实例化按钮
                boards[i][j] = new JButton();
                //将按钮添加到窗体中去
                add(boards[i][j]);
                //为按钮添加时间监听方法
                boards[i][j].addActionListener(this);
            }
        }
        
        //设置窗体的关闭方式
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        //设置窗体可见
        setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
    }
    public static void main(String[] args) {
        new MyGameWindow();
    }
}

此时,我们已经可以看到我们制作的棋盘了。

4. 编写游戏方法

现在我们有了棋盘,我们该怎么下棋呢? 接下来,您需要编译一个游戏方法。

首先我们需要添加一个标志,它会指示此时谁在下棋。

当flag=0时,表示此时下棋的棋手是下棋X的棋手。当flag=1时,表示此时下棋的棋手是下棋的O。我们将flag变量初始化为0 ,表示持有 X 的玩家将开始每一轮。

然后我们就可以编译演奏技巧了。 当flag=0时,按X,将flag参数设置为1,表示执行O的棋手该下棋了。 同理,当flag=1时井字游戏 源码,按O键,将flag参数设置为0,表示执行X的棋手该下棋了。

//如何下棋

私人无效播放(JButton clickBtn,int i,int j){

如果(标志== 0){

clickBtn.setText(“X”);

标志= 1;

}否则如果(标志== 1){

clickBtn.setText(“O”);

标志= 0;

public class MyGameWindow extends JFrame implements ActionListener {
    //以3行3列数组的形式创建表盘
    private JButton[][] boards = new JButton[3][3];
    //X先手
    private int flag = 0;//flag = 0 表示落子X flag = 1表示落子O
    public MyGameWindow(){
        //设置窗口的标题
        setTitle("井字棋");
        //设置窗体的位置和大小
        setBounds(100,100,600,600);
        //设置窗体的布局方式
        setLayout(new GridLayout(3,3));
        //将按钮数组添加到窗体中去并为按钮添加事件监听方法
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                //实例化按钮
                boards[i][j] = new JButton();
                //将按钮添加到窗体中去
                add(boards[i][j]);
                //为按钮添加时间监听方法
                boards[i][j].addActionListener(this);
            }
        }
        //设置窗体的关闭方式
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        //设置窗体可见
        setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
    }
    
    //下棋方法
    private void play(JButton clickBtn,int i,int j){
        if(flag == 0){
            clickBtn.setText("X");
            flag = 1;
        }else if(flag == 1){
            clickBtn.setText("O");
            flag = 0;
        }
    }
    public static void main(String[] args) {
        new MyGameWindow();
    }
}

5. 编写一个查找游戏位置的方法

编写完游戏方法后,我们需要确切地知道玩家在棋盘上下的哪个位置。 因此,有必要编写一个寻找游戏位置的方法。

该方法返回一个厚度为2的location字段,location[0]记录了玩家的播放位置的行数,location[1]记录了玩家的播放位置的列数。

这样我们就可以准确的找到棋手在棋盘上的位置。

//找到关键位置

私有 int[] 位置(JButton clickBtn){

int[] location = new int[2];//location[0]代表第i行,location[1]代表第j列

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 3; j++) {

if(boards[i][j] == clickBtn){

位置[0] = i;

位置[1] = j;

返回地点;

public class MyGameWindow extends JFrame implements ActionListener {
    //以3行3列数组的形式创建表盘
    private JButton[][] boards = new JButton[3][3];
    //X先手
    private int flag = 0;//flag = 0 表示落子X flag = 1表示落子O
    public MyGameWindow(){
        //设置窗口的标题
        setTitle("井字棋");
        //设置窗体的位置和大小
        setBounds(100,100,600,600);
        //设置窗体的布局方式
        setLayout(new GridLayout(3,3));
        //将按钮数组添加到窗体中去并为按钮添加事件监听方法
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                //实例化按钮
                boards[i][j] = new JButton();
                //将按钮添加到窗体中去
                add(boards[i][j]);
                //为按钮添加时间监听方法
                boards[i][j].addActionListener(this);
            }
        }
        //设置窗体的关闭方式
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        //设置窗体可见
        setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
 
    }
    //下棋方法
    private void play(JButton clickBtn,int i,int j){
        if(flag == 0){
            clickBtn.setText("X");
            flag = 1;
        }else if(flag == 1){
            clickBtn.setText("O");
            flag = 0;
        }
    }
    //寻找按钮位置
    private int[] location(JButton clickBtn){
        int[] location = new int[2];//location[0]表示第i行,location[1]表示第j列
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if(boards[i][j] == clickBtn){
                    location[0] = i;
                    location[1] = j;
                }
            }
        }
        return location;
    }
    public static void main(String[] args) {
        new MyGameWindow();
    }
}

改进风暴监视器

前期规划工作已基本完成。 如果我们要将棋子移动到棋盘上,我们还需要为按钮创建一个风暴监听器。

首先我们需要获取玩家点击的是哪个按钮,然后记录这个按钮的行数和列数。 然后我们就可以把棋子放在棋盘上了。

@覆盖

公共无效actionPerformed(ActionEvent e){

//获取被点击的按钮

JButton clickBtn = (JButton) e.getSource();

//找到水滴的位置

int[] 地点 = 位置(clickBtn);

int i = 地点[0];

int j = 位置[1];

//下棋

播放(clickBtn,i,j);

public class MyGameWindow extends JFrame implements ActionListener {
    //以3行3列数组的形式创建表盘
    private JButton[][] boards = new JButton[3][3];
    //X先手
    private int flag = 0;//flag = 0 表示落子X flag = 1表示落子O
    public MyGameWindow(){
        //设置窗口的标题
        setTitle("井字棋");
        //设置窗体的位置和大小
        setBounds(100,100,600,600);
        //设置窗体的布局方式
        setLayout(new GridLayout(3,3));
        //将按钮数组添加到窗体中去并为按钮添加事件监听方法
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                //实例化按钮
                boards[i][j] = new JButton();
                //将按钮添加到窗体中去
                add(boards[i][j]);
                //为按钮添加时间监听方法
                boards[i][j].addActionListener(this);
            }
        }
        //设置窗体的关闭方式
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        //设置窗体可见
        setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        //获取点击的按钮
        JButton clickBtn = (JButton) e.getSource();
        //找到落子的位置
        int[] places = location(clickBtn);
        int i = places[0];
        int j = places[1];
        //下棋
        play(clickBtn, i, j);
    }
    //下棋方法
    private void play(JButton clickBtn,int i,int j){
        if(flag == 0){
            clickBtn.setText("X");
            flag = 1;
        }else if(flag == 1){
            clickBtn.setText("O");
            flag = 0;
        }
    }
    //寻找按钮位置
    private int[] location(JButton clickBtn){
        int[] location = new int[2];//location[0]表示第i行,location[1]表示第j列
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if(boards[i][j] == clickBtn){
                    location[0] = i;
                    location[1] = j;
                }
            }
        }
        return location;
    }
    public static void main(String[] args) {
        new MyGameWindow();
    }
}

6.添加限制,一个位置只能放置一颗棋子

看看里面的两张图,看看有没有发现什么问题。

第一张图是正常的。 此时棋盘已经满了,但是我们仍然可以在棋盘上的任意位置下棋,这就导致了第二张图的情况。 屏幕上全是O,而做X的玩家表示这不公平!

这是不合理的。 那么如何解决呢?

我们定义一个二维数组来存储棋盘上棋子的状态。

当place[i][j]=1时,表示该位置有棋子X

当place[i][j]=-1时井字游戏 源码,表示该位置有棋子O

当place[i][j]=0时,表示该位置没有棋子

当棋手想要在已经有棋子的位置下棋时,我们应该给予提示,提醒他不能在这里下棋。

由于已经规定了玩家下棋时需要记录棋盘的情况,所以我们稍微修改了下棋的方法,让它能够实时记录棋盘的情况。

//如何下棋

私人无效播放(JButton clickBtn,int i,int j){

如果(标志== 0){

clickBtn.setText(“X”);

标志= 1;

地点[i][j] = 1;

}否则如果(标志== 1){

clickBtn.setText(“O”);

标志= 0;

地点[i][j] = -1;

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 游戏源码 井字游戏 源码-你还在画棋盘吗? 20分钟教你如何用Java编写井字棋游戏! https://www.wkzy.net/game/198474.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务