2024年Java最新Java小程序——简单五子棋(人机对战),怒斩获了30家互联网公司offer

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

在这里插入图片描述

最新整理电子书

在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

}

public void mousePressed(MouseEvent e) {

}

public void mouseReleased(MouseEvent e) {

x = e.getX();

y = e.getY();

x1 = Math.abs(x - START_X);

y1 = Math.abs(y - START_Y);

xx = x1 % SIZE;

if (xx >= SIZE / 2) {

x1 = (x1 / SIZE) + 2;

} else {

x1 = (x1 / SIZE) + 1;

}

yy = y1 % SIZE;// 判断横坐标是否超过格子长度的一半(防止玩家点偏)

if (yy >= SIZE / 2) {

y1 = (y1 / SIZE) + 2;

} else {

y1 = (y1 / SIZE) + 1;

}

g.setColor(Color.BLACK);

if (bx[x1][y1] == 0) {

bx[x1][y1] = 1;// 表示黑棋

g.fillOval(Math.abs(x1 * SIZE - 25), Math.abs(y1 * SIZE - 25), 50,

50);

count1++;// 所下棋子数加一

GetX[count1] = x1;// 记录第count1步的棋子x值

GetY[count1] = y1;// 记录第count1步的棋子y值

if (CheckRow(x1, y1) >= 5) {

JOptionPane.showMessageDialog(null, “BLACK WIN!!”);

}

if (CheckList(x1, y1) >= 5) {

JOptionPane.showMessageDialog(null, “BLACK WIN!!”);

}

if (UpperRight(x1, y1) >= 5) {

JOptionPane.showMessageDialog(null, “BLACK WIN!!”);

}

if (UpperLeft(x1, y1) >= 5) {

JOptionPane.showMessageDialog(null, “BLACK WIN!!”);

}

}

g.setColor(Color.WHITE);

WZQAI();// 遍历棋盘

AIcount();// 电脑计算应该下棋的坐标

if (bx[x1][y1] == 0) {

bx[x1][y1] = 2;// 表示白棋

if(x1==0)

{g.fillOval(Math.abs((x1+1)* SIZE - 25), Math.abs((y1+1) * SIZE - 25), 50,

50);}

else

{

g.fillOval(Math.abs(x1* SIZE - 25), Math.abs(y1 * SIZE - 25), 50,

50);

}

count1++;// 所下棋子数加一

GetX[count1] = x1;// 记录第count1步的棋子x值

GetY[count1] = y1;// 记录第count1步的棋子y值

if (CheckRow(x1, y1) >= 5) {

JOptionPane.showMessageDialog(null, “WHITE WIN!!”);

}

if (CheckList(x1, y1) >= 5) {

JOptionPane.showMessageDialog(null, “WHITE WIN!!”);

}

if (UpperRight(x1, y1) >= 5) {

JOptionPane.showMessageDialog(null, “WHITE WIN!!”);

}

if (UpperLeft(x1, y1) >= 5) {

JOptionPane.showMessageDialog(null, “WHITE WIN!!”);

}

}

// 清空权值数组

for (int r = 0; r < weightArray.length; r++) {

for (int c = 0; c < weightArray.length; c++) {

weightArray[r][c] = 0;

}

}

}

public void actionPerformed(ActionEvent e) {

setT(jbu1);

Str = e.getActionCommand();// 读取点击按钮上的字符串

if (“悔棋”.equals(Str)) {

if (g.getColor() == Color.BLACK) {

g.setColor(Color.WHITE);

}

if (g.getColor() == Color.WHITE) {

g.setColor(Color.BLACK);

}

Regret();

ui.repaint();

} else if (“重新开始”.equals(Str)) {

Restart();

ui.repaint();

}

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public int CheckRow(int x, int y)// 横着五子连成一条直线

{

int count = 0;

for (int i = x + 1; i < bx.length; i++)// 向右判断是否棋子一样

{

if (bx[i][y] == bx[x][y])

count++;

else

break;

}

for (int i = x; i >= 0; i–)// 向右判断是否棋子一样

{

if (bx[i][y] == bx[x][y])

count++;

else

break;

}

return count;

}

public int CheckList(int x, int y)// 竖着五子连成一条直线

{

int count = 0;

for (int i = y + 1; i < bx.length; i++)// 向下判断是否棋子一样

{

if (bx[x][i] == bx[x][y])

count++;

else

break;

}

for (int i = y; i >= 0; i–)// 向上判断是否棋子一样

{

if (bx[x][i] == bx[x][y])

count++;

else

break;

}

return count;

}

public int UpperRight(int x, int y)// 右上到左下五子连成一条直线

{

int count = 0;

for (int i = x + 1, j = y - 1; i < bx.length && j >= 0; i++, j–)// 向下判断是否棋子一样

{

if (bx[i][j] == bx[x][y])

count++;

else

break;

}

for (int i = x, j = y; i >= 0 && j < bx.length; i–, j++)// 向上判断是否棋子一样

{

if (bx[i][j] == bx[x][y])

count++;

else

break;

}

return count;

}

public int UpperLeft(int x, int y)// 左上到右下五子连成一条直线

{

int count = 0;

for (int i = x - 1, j = y - 1; i >= 0 && j >= 0; i–, j–)// 向下判断是否棋子一样

{

if (bx[i][j] == bx[x][y])

count++;

else

break;

}

for (int i = x, j = y; i < bx.length && j < bx.length; i++, j++)// 向上判断是否棋子一样

{

if (bx[i][j] == bx[x][y])

count++;

else

break;

}

return count;

}

public void Regret() {// 悔棋

assert count1 >= 2;

bx[GetX[count1]][GetY[count1]] = 0;

bx[GetX[count1-1]][GetY[count1-1]] = 0;

if (count1 > 0) {

count1 = count1 - 2;

}

}

public void Restart() {// 重新开始

{

for (int k = 0; k <= count1; k++) {

bx[GetX[k]][GetY[k]] = 0;

}

}

count1 = 0;

for (int i1 = 0; i1 < bx.length; i1++) {

for (int j1 = 0; j1 < bx.length; j1++) {

bx[i][j] = 0;

}

}

}

public void WZQAI() {

// 这两个循环遍历整个存储棋子的数组

for (int r = 0; r < bx.length; r++) {

for (int c = 0; c < bx[r].length; c++) {

if (bx[r][c] == 0) {// 判断是否是空位

int ch = 0;// 存储第一次出现棋子的变量

String chessCode = “0”;// 存储统计棋子相连情况的变量

/*

  • 横向向左 左面的棋子在chessCode为左方, 右面的棋子在chessCode为右方

*/

for (int c1 = c - 1; c1 >= 0; c1–) {

if (bx[r][c1] == 0) {// 判断是否是空位

if (c1 + 1 == c) {// 判断是否是相邻的

break;

} else {// 判断是否不是相邻的

chessCode = bx[r][c1] + chessCode;// 记录棋子相连的情况

break;

}

} else {// 判断是否是棋子

if (ch == 0) {// 判断是否是第一次出现棋子

chessCode = bx[r][c1] + chessCode;// 记录棋子相连的情况

ch = bx[r][c1];// 存储第一次的棋子

} else if (ch == bx[r][c1]) {// 判断是否是一样颜色的棋子

chessCode = bx[r][c1] + chessCode;// 记录棋子相连的情况

} else {

chessCode = bx[r][c1] + chessCode;// 记录棋子相连的情况

break;

}

}

}

// 根据棋子相连的情况,获取HashMap中存储的权值

Integer weight = map.get(chessCode);

if(null==weight){

System.out.println(" get one null…");

}

else{

int a;

a=weight.intValue();

// 存储入到权值数组中

weightArray[r][c] += a;

}

ch = 0;// 重置到初始状态

chessCode = “0”;// 重置到初始状态

/*

  • 横向向右 左面的棋子在chessCode为左方, 右面的棋子在chessCode为右方

*/

for (int c2 = c + 1; c2 <= 15; c2++) {// 判断是是空位

if (bx[r][c2] == 0) {// 判断空位相邻的

if (c2 - 1 == c) {

break;

} else {// 判断空位是不相邻的

chessCode = chessCode + bx[r][c2];// 记录棋子相连的情况

}

}

// 判断是棋子

else {// 判断是第一次出现棋子

if (ch == 0) {

chessCode = chessCode + bx[r][c2];// 记录棋子相连的情况

ch = bx[r][c2];// 储存第一次出现的棋子

} else if (ch == bx[r][c2])// 判断棋子的颜色一样

{

chessCode = chessCode + bx[r][c2];

}// 记录棋子的连接情况

else {// 相邻棋子颜色不一样

chessCode = chessCode + bx[r][c2];

break;

}

}

weight = map.get(chessCode);

if(null==weight){

System.out.println(" get one null…");

}

else{

int a;

a=weight.intValue();

// 存储入到权值数组中

weightArray[r][c] += a;

}

ch = 0;// 重置到初始状态

chessCode = “0”;// 重置到初始状态

}

/*

  • 竖向向上 上面的棋子在chessCode为左方, 下面的棋子在chessCode为右方

*/

for (int r1 = r - 1; r1 >= 0; r1–) {

if (bx[r1][c] == 0) {// 判断是否是空位

if (r1 + 1 == r) {// 判断是否是相邻的

break;

} else {// 判断是否不是相邻的

chessCode = bx[r1][c] + chessCode;// 记录棋子相连的情况

break;

}

} else {// 判断是否是棋子

if (ch == 0) {// 判断是否是第一次出现棋子

chessCode = bx[r1][c] + chessCode;// 记录棋子相连的情况

ch = bx[r1][c];// 存储第一次的棋子

} else if (ch == bx[r1][c]) {// 判断是否是一样颜色的棋子

chessCode = bx[r1][c] + chessCode;// 记录棋子相连的情况

} else {

chessCode = bx[r1][c] + chessCode;// 记录棋子相连的情况

break;

}

}

}

// 根据棋子相连的情况,获取HashMap中存储的权值

weight = map.get(chessCode);

if(null==weight){

System.out.println(" get one null…");

}

else{

int a;

a=weight.intValue();

// 存储入到权值数组中

weightArray[r][c] += a;

}

ch = 0;// 重置到初始状态

chessCode = “0”;// 重置到初始状态

/*

  • 竖向向下 上面的棋子在chessCode为左方, 下面的棋子在chessCode为右方

*/

for (int r2 = r + 1; r2 <= 15; r2++) {// 判断是是空位

if (bx[r2][c] == 0) {// 判断空位相邻的

if (r2 - 1 == r) {

break;

} else {// 判断空位是不相邻的

chessCode = chessCode + bx[r2][c];// 记录棋子相连的情况

}

}

// 判断是棋子

else {// 判断是第一次出现棋子

if (ch == 0) {

chessCode = chessCode + bx[r][c];// 记录棋子相连的情况

ch = bx[r2][c];// 储存第一次出现的棋子

} else if (ch == bx[r2][c])// 判断棋子的颜色一样

{

chessCode = chessCode + bx[r2][c];

}// 记录棋子的连接情况

else {// 相邻棋子颜色不一样

chessCode = chessCode + bx[r2][c];

break;

}

}

weight = map.get(chessCode);

if(null==weight){

System.out.println(" get one null…");

}

else{

int a;

a=weight.intValue();

// 存储入到权值数组中

weightArray[r][c] += a;

}

ch = 0;// 重置到初始状态

chessCode = “0”;// 重置到初始状态

}

/*

  • 左斜向上 左上面的棋子在chessCode为左方, 右下面的棋子在chessCode为右方

*/

for (int r1 = r - 1, c1 = c - 1; c1 >= 0 && r1 >= 0; c1–, r1–) {

if (bx[r1][c1] == 0) {// 判断是否是空位

if (c1 + 1 == c && r1 + 1 == c) {// 判断是否是相邻的

break;

} else {// 判断是否不是相邻的

chessCode = bx[r1][c1] + chessCode;// 记录棋子相连的情况

break;

}

} else {// 判断是否是棋子

if (ch == 0) {// 判断是否是第一次出现棋子

chessCode = bx[r1][c1] + chessCode;// 记录棋子相连的情况

ch = bx[r1][c1];// 存储第一次的棋子

} else if (ch == bx[r1][c1]) {// 判断是否是一样颜色的棋子

chessCode = bx[r1][c1] + chessCode;// 记录棋子相连的情况

} else {

chessCode = bx[r1][c1] + chessCode;// 记录棋子相连的情况

break;

}

}

}

// 根据棋子相连的情况,获取HashMap中存储的权值

weight = map.get(chessCode);

if(null==weight){

System.out.println(" get one null…");

}

else{

int a;

a=weight.intValue();

// 存储入到权值数组中

weightArray[r][c] += a;

}

ch = 0;// 重置到初始状态

chessCode = “0”;// 重置到初始状态

/*

  • 左斜向下 左上面的棋子在chessCode为左方, 右下面的棋子在chessCode为右方

*/

for (int r1 = r + 1, c1 = c + 1; c1 <= 15 && r1 <= 15; c1++, r1++) {

if (bx[r1][c1] == 0) {// 判断是否是空位

if (c1 - 1 == c && r1 - 1 == c) {// 判断是否是相邻的

break;

} else {// 判断是否不是相邻的

chessCode = chessCode + bx[r1][c1];// 记录棋子相连的情况

break;

}

} else {// 判断是否是棋子

if (ch == 0) {// 判断是否是第一次出现棋子

chessCode = chessCode + bx[r1][c1];// 记录棋子相连的情况

ch = bx[r1][c1];// 存储第一次的棋子

} else if (ch == bx[r1][c1]) {// 判断是否是一样颜色的棋子

chessCode = chessCode + bx[r1][c1];// 记录棋子相连的情况

} else {

chessCode = chessCode + bx[r1][c1];// 记录棋子相连的情况

break;

}

}

}

/*

  • 右斜向上 左下面的棋子在chessCode为左方, 右上面的棋子在chessCode为右方

*/

for (int r1 = r - 1, c1 = c + 1; c1 <= 15 && r1 >= 0; c1++, r1–) // 行r,列c

{

if (bx[r1][c1] == 0) {// 判断是否是空位

if (c1 - 1 == c && r1 + 1 == c) {// 判断是否是相邻的

break;

} else {// 判断是否不是相邻的

chessCode = chessCode + bx[r1][c1];// 记录棋子相连的情况

break;

}

} else {// 判断是否是棋子

if (ch == 0) {// 判断是否是第一次出现棋子

chessCode = chessCode + bx[r1][c1];// 记录棋子相连的情况

ch = bx[r1][c1];// 存储第一次的棋子

} else if (ch == bx[r1][c1]) {// 判断是否是一样颜色的棋子

chessCode = chessCode + bx[r1][c1];// 记录棋子相连的情况

} else {

chessCode = chessCode + bx[r1][c1];// 记录棋子相连的情况

break;

}

}

weight = map.get(chessCode);

if(null==weight){

System.out.println(" get one null…");

}

else{

int a;

a=weight.intValue();

// 存储入到权值数组中

weightArray[r][c] += a;

}

ch = 0;// 重置到初始状态

chessCode = “0”;// 重置到初始状态

}

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

de + bx[r1][c1];// 记录棋子相连的情况

break;

}

} else {// 判断是否是棋子

if (ch == 0) {// 判断是否是第一次出现棋子

chessCode = chessCode + bx[r1][c1];// 记录棋子相连的情况

ch = bx[r1][c1];// 存储第一次的棋子

} else if (ch == bx[r1][c1]) {// 判断是否是一样颜色的棋子

chessCode = chessCode + bx[r1][c1];// 记录棋子相连的情况

} else {

chessCode = chessCode + bx[r1][c1];// 记录棋子相连的情况

break;

}

}

weight = map.get(chessCode);

if(null==weight){

System.out.println(" get one null…");

}

else{

int a;

a=weight.intValue();

// 存储入到权值数组中

weightArray[r][c] += a;

}

ch = 0;// 重置到初始状态

chessCode = “0”;// 重置到初始状态

}

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
[外链图片转存中…(img-pxUX2Msr-1714916416114)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 15
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值