数组越界(五子棋)

package frame001;

import javax.imageio.ImageIO;
import javax.swing.;
import java.awt.
;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class Wuziqi extends JFrame implements MouseListener {

int width= Toolkit.getDefaultToolkit().getScreenSize().width;//取得屏幕的宽度
int height= Toolkit.getDefaultToolkit().getScreenSize().height;//取得屏幕的高度

int x=0;
int y=0;
//保存之前下过的所有棋子的坐标,其中数据具体内容
//如果保存的是0,表示这个点没有其中,假设是1,表示这个点是黑子,假设是2,表示这个点是白子
int[][] allChess=new int[19][19];

//标识当前是黑棋,还是白棋

boolean chessColor=true;

public Wuziqi() {

    this.setTitle("五子棋");//设置窗体的标题
    this.setSize(500,500);//窗体的宽高

// this.setLocation(200,150);//设置窗体位置
this.setResizable(false);//设置窗体是否可以改变大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭方式,关闭窗体时,同时结束程序

    this.setLocation((width-500)/2,(height-500)/2);//设置窗体出现的位置
    this.addMouseListener(this);//接口
    this.setVisible(true);//设置窗体显示



}

public void paint(Graphics g) {
    BufferedImage image = null;
    try {
        image = ImageIO.read(new File("C:\\Users\\Administrator\\Desktop\\素材\\timg.jpg"));//图片链接
    } catch (IOException e) {
        e.printStackTrace();
    }
    g.drawImage(image, -10, -10, this);
    g.setFont(new Font("宋体",0,20));
    g.drawString("游戏信息:",100,60);
    g.setFont(new Font("宋体",0,16));
    g.drawString("黑方时间:无限制",30,470);
    g.drawString("白方时间:无限制",250,470);

    //绘制棋盘
    /*
    for (int a=75;a<=395;a+=20)
    {
        g.drawLine(15,a,395,a);
    }
    for (int a=15;a<=395;a+=20)
    {
        g.drawLine(a,75,a,395);
    }

     */
    for (int a=1;a<19;a++)
    {
        g.drawLine(15,55+a*20,355,55+a*20);
        g.drawLine(-5+a*20,75,-5+a*20,415);
    }

//标注点位
int d1=6;
g.fillOval(75-d1/2,135-d1/2,d1,d1);
g.fillOval(75-d1/2,255-d1/2,d1,d1);
g.fillOval(75-d1/2,375-d1/2,d1,d1);
g.fillOval(315-d1/2,135-d1/2,d1,d1);
g.fillOval(315-d1/2,255-d1/2,d1,d1);
g.fillOval(315-d1/2,375-d1/2,d1,d1);
g.fillOval(195-d1/2,135-d1/2,d1,d1);
g.fillOval(195-d1/2,375-d1/2,d1,d1);
g.fillOval(195-d1/2,255-d1/2,d1,d1);

   // 绘制棋子
    /*
    int d2=16;
    g.fillOval(x-d2/2,y-d2/2,d2,d2);

     */

//绘制全部棋子
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(allChess[i][j]==1)
{
//黑
int x= i20+15;
int y= j
20+75;
g.fillOval(x-8,y-8,16,16);

            }
            if (allChess[i][j]==2)
            {
                //白
                int x= i*20+15;
                int y= j*20+75;
                g.setColor(Color.WHITE);
                g.fillOval(x-8,y-8,16,16);
                g.setColor(Color.BLACK);
                g.drawOval(x-8,y-8,16,16);

            }
        }
    }


}






public void mouseClicked(MouseEvent e)
{
}

public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent e) {
    System.out.println(e.getX());
    System.out.println(e.getY());
    //获取
    x = e.getX();
    y = e.getY();
    if (x >= 15 && x <= 375 && y >= 75 && y <= 435) {
        float x1 = (x - 5) / 20;
        float y1 = (y - 65) / 20;
        int  x = (int) x1;
        int y = (int) y1;
        if (allChess[x][y] == 0) {

            if (chessColor == true) {
                allChess[x][y] = 1;
                chessColor = false;
            } else {
                allChess[x][y] = 2;
                chessColor = true;
            }
            //判断这个棋子是否和其他棋子连成5个
            boolean winFlag= this.checkWin();
            if (winFlag==true)
            {
                JOptionPane.showMessageDialog(this,"游戏结束了"+(allChess[x][y]==1?"黑方":"白方")+"获胜");
            }
        }else {
            JOptionPane.showMessageDialog(this,"当前位置已经有棋子了");
        }

            this.repaint();


        }


    }
    public void mouseReleased(MouseEvent e)
    {
    }
//判断是否胜利
//判断一个米字

    private boolean checkWin()
    {
    boolean flag=false;
    //判断横向的是否有5个相连,y轴不会改变
    int count=1;
    int color = allChess[x][y];
    int i=1;
    while (color==allChess[x+i][y])
    {
        if (x+i>375)
        {
            break;
        }
        count++;
        i++;
    }
    i=1;
    while (color==allChess[x-i][y])
    {
        if (x-i<0)
        {
            break;
        }
        count++;
        i++;
    }

    if(count>4)
    {
        flag=true;
    }
    return flag;
     }

}

出现的错误数组越界

解决方案
float x1 = (x - 5) / 20;
float y1 = (y - 65) / 20;
x = (int) x1;
y = (int) y1;

把int去掉

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值