📄 blackvswhite.java
字号:
//是对方棋子,置为临时颜色
if (grid[num7] == colorr)
grid[num7] = tempcolor;
//是本方,跳出循环
else if (grid[num7] == colorb)
break;
}
}
//清零
judgenum = 0;
//判断下方
num10 = replace1 + 1;
while (num10 < DIM)
{
num7 = num10 * DIM + replace2;
if (grid[num7] != colorr)
{
if (grid[num7] == colorb)
judgenum = 1;
break;
}
else
++num10;
}
if (judgenum != 0)
{
for (num11 = replace1 + 1; num11 < DIM; ++num11)
{
num7 = num11 * DIM + replace2;
if (grid[num7] == colorr)
grid[num7] = tempcolor;
else if (grid[num7] == colorb)
break;
}
}
judgenum = 0;
//判断上方
num11 = replace1 - 1;
while (num11 >= 0)
{
num7 = num11 * DIM + replace2;
if (grid[num7] != colorr)
{
if (grid[num7] == colorb)
judgenum = 1;
break;
}
else
--num11;
}
if (judgenum != 0)
{
for (num12 = replace1 - 1; num12 >= 0; --num12)
{
num7 = num12 * DIM + replace2;
if (grid[num7] == colorr)
grid[num7] = tempcolor;
if (grid[num7] == colorb)
break;
}
}
judgenum = 0;
//判断右上方
num12 = replace2 + 1;
num13 = replace1 - 1;
while (num12 < DIM && num13 >= 0)
{
num7 = num13 * DIM + num12;
if (grid[num7] != colorr)
{
if (grid[num7] == colorb)
judgenum = 1;
break;
}
else
{
++num12;
--num13;
}
}
if (judgenum != 0)
{
num14 = replace2 + 1;
for (num15 = replace1 - 1; num14 < DIM && num15 >= 0; --num15)
{
num7 = num15 * DIM + num14;
if (grid[num7] == colorr)
grid[num7] = tempcolor;
if (grid[num7] == colorb)
break;
++num14;
}
}
judgenum = 0;
//判断右下方
num14 = replace2 + 1;
num15 = replace1 + 1;
while (num14 < DIM && num15 < DIM)
{
num7 = num15 * DIM + num14;
if (grid[num7] != colorr)
{
if (grid[num7] == colorb)
judgenum = 1;
break;
}
else
{
++num14;
++num15;
}
}
if (judgenum != 0)
{
num16 = replace2 + 1;
for (num17 = replace1 + 1; num16 < DIM && num17 < DIM; ++num17)
{
num7 = num17 * DIM + num16;
if (grid[num7] == colorr)
grid[num7] = tempcolor;
if (grid[num7] == colorb)
break;
++num16;
}
}
judgenum = 0;
//判断左上方
num16 = replace2 - 1;
num17 = replace1 - 1;
while (num16 >= 0 && num17 >= 0)
{
num7 = num17 * DIM + num16;
if (grid[num7] != colorr)
{
if (grid[num7] == colorb)
judgenum = 1;
break;
}
else
{
--num16;
--num17;
}
}
if (judgenum != 0)
{
num18 = replace2 - 1;
for (num19 = replace1 - 1; num18 >= 0 && num19 >= 0; --num19)
{
num7 = num19 * DIM + num18;
if (grid[num7] == colorr)
grid[num7] = tempcolor;
if (grid[num7] == colorb)
break;
--num18;
}
}
judgenum = 0;
//判断左下方
num18 = replace2 - 1;
num19 = replace1 + 1;
while (num18 >= 0 && num19 < DIM)
{
num7 = num19 * DIM + num18;
if (grid[num7] != colorr)
{
if (grid[num7] == colorb)
judgenum = 1;
break;
}
else
{
--num18;
++num19;
}
}
if (judgenum != 0)
{
int replace20 = replace2 - 1;
int replace21;
for (replace21 = replace1 + 1; replace20 >= 0 && replace21 < DIM; ++replace21)
{
num7 = replace21 * DIM + replace20;
if (grid[num7] == colorr)
grid[num7] = tempcolor;
if (grid[num7] == colorb)
break;
--replace20;
}
}
//实现动画
animating = true;
}
//检查双方的计分
public void checkScore()
{
int scanj;
redScore = blueScore = 0;
for (scanj = 0; scanj < DIM; ++scanj)
{
int scani;
for (scani = 0; scani < DIM; ++scani)
{
//从上到下,从左到右扫描棋盘
int scanij = scanj * DIM + scani;
//对不同颜色分别计分
if (grid[scanij] == 2 || grid[scanij] == 5)
++redScore;
else if (grid[scanij] == 3 || grid[scanij] == 4)
++blueScore;
}
}
}
//绘制函数
public synchronized void paint(Graphics g)
{
//检查图象是否装载完毕
if (!imageTracker.checkAll())
{
g.setColor(getForeground());
g.drawString("Loading images", 50, 50);
}
//如果完毕
else
{
int num2;
int num3;
int num4;
int num5;
int num6;
//获取棋盘的大小
buttonHeight = button.getSize().height + button.getLocation().y * 2;
getFontMetrics(f);
num2 = getSize().width - fontHeight * 3 - buttonHeight;
num3 = getSize().height - fontHeight * 3 - buttonHeight;
if (num2 != boardSize)
{
if (num2 > num3)
boardSize = num3 / DIM * DIM;
else
boardSize = num2 / DIM * DIM;
}
if (boardSize > 400)
//限制棋盘尺寸
boardSize = 400;
//绘制棋盘背景
offScrGraphics.setColor(getBackground());
offScrGraphics.fillRect(0, 0, getSize().width, getSize().height);
//绘制棋盘底色
offScrGraphics.setColor(Color.white);
offScrGraphics.fillRect(0, 0, boardSize, boardSize);
//获取单个格子的尺寸
num4 = boardSize / DIM;
//绘制棋盘上的格子
offScrGraphics.setColor(Color.black);
//绘制棋子
for (num5 = 0; num5 < DIM; ++num5)
{
offScrGraphics.drawLine(0, num5 * num4, boardSize - 1, num5
* num4);
for (num6 = 0; num6 < DIM; ++num6)
{
offScrGraphics.drawLine(num6 * num4, 0, num6 * num4,
boardSize - 1);
if (grid[num5 * DIM + num6] == 2)
offScrGraphics.drawImage(redImage, num6 * num4 + 1,
num5 * num4 + 1, num4 - 2, num4 - 2, this);
else if (grid[num5 * DIM + num6] == 3)
offScrGraphics.drawImage(blueImage, num6 * num4 + 1,
num5 * num4 + 1, num4 - 2, num4 - 2, this);
else if(grid[num5 * DIM + num6] == 1)
offScrGraphics.drawImage(noneImage, num6 * num4 + 1,
num5 * num4 + 1, num4 - 2, num4 - 2, this);
}
}
offScrGraphics.drawLine(boardSize - 1, 0, boardSize - 1,
boardSize - 1);
offScrGraphics.drawLine(0, boardSize - 1, boardSize - 1,
boardSize - 1);
offScrGraphics.setColor(getForeground());
//如果非法行棋,给予提示
if (illegalMove)
{
offScrGraphics.drawString("下子非法,请重新下子!",
button.getLocation().x, boardSize + fontAscent);
messageText.setText(messageText.getText() + "\n电脑:这个地方不能放你的子\n 换个地方吧!");
}
//如果电脑让步,给予提示
else if (blueNotMoving)
{
offScrGraphics.drawString("Computer Pass",
button.getLocation().x, boardSize + fontAscent);
messageText.setText(messageText.getText() + "\n电脑:我没地方走了\n 你自己走吧!");
}
//显示双方的计分
offScrGraphics.drawImage(redImage, button.getLocation().x,
boardSize + fontHeight * 2 - fontAscent, fontAscent,
fontAscent, this);
offScrGraphics.drawString(" 玩家: " + (String.valueOf(redScore)),
button.getLocation().x + fontAscent, boardSize + fontHeight
* 2);
offScrGraphics.drawImage(blueImage, button.getLocation().x,
boardSize + fontHeight * 3 - fontAscent, fontAscent,
fontAscent, this);
offScrGraphics.drawString(" 电脑: " + (String.valueOf(blueScore)),
button.getLocation().x + fontAscent, boardSize + fontHeight
* 3);
offScrGraphics.setColor(Color.white);
num6 = 0;
//替换棋子的动画效果
if (animating)
{
num6 = num4 - 2;
while (num6 > 0)
{
int num7;
for (num7 = 0; num7 < DIM; ++num7)
{
int num8;
for (num8 = 0; num8 < DIM; ++num8)
{
//如果格子中棋子的颜色是临时红色
//在格子中绘制红色棋子
if (grid[num7 * DIM + num8] == 5)
{
offScrGraphics.fillRect(num8 * num4 + 1, num7
* num4 + 1, num4 - 1, num4 - 1);
offScrGraphics.drawImage(blueImage, num8 * num4
+ 1 + num4 / 2 - num6 / 2, num7 * num4
+ 1 + num4 / 2 - num6 / 2, num6, num6,
this);
if (num6 <= 2)
grid[num7 * DIM + num8] = 2;
}
//如果是临时的蓝色,就绘制蓝色棋子
else if (grid[num7 * DIM + num8] == 4)
{
offScrGraphics.fillRect(num8 * num4 + 1, num7
* num4 + 1, num4 - 1, num4 - 1);
offScrGraphics.drawImage(redImage, num8 * num4
+ 1 + num4 / 2 - num6 / 2, num7 * num4
+ 1 + num4 / 2 - num6 / 2, num6, num6,
this);
if (num6 <= 2)
grid[num7 * DIM + num8] = 3;
}
}
}
g.drawImage(offScrImage, button.getLocation().x,
buttonHeight, this);
num6 -= 3;
//主线程异常的捕捉
try
{
Thread.sleep(50L);
continue;
}
catch (Exception unused9)
{
continue;
}
}
animating = false;
paint(g);
}
//如果格子填满的时候,游戏结束,并输出结果
int tnum = Integer.parseInt(rannum.getSelectedItem());
if ((redScore + blueScore + tnum) == DIM * DIM)
{
offScrGraphics.drawString(
(redScore > blueScore) ? "Congratulations! You Win!" : "What a pity! You Lose!",
button.getLocation().x, boardSize + fontAscent);
// Login L = new Login();
if(redScore > blueScore)
messageText.setText(messageText.getText() + "\n电脑:你赢啦,我不服气,再来一把.");
else
messageText.setText(messageText.getText() + "\n电脑:哈哈,我赢啦,还敢再来吗?");
}
else
{
offScrGraphics.drawString("No One Win!", button
.getLocation().x, boardSize + fontAscent);
g.drawImage(offScrImage, button.getLocation().x,
buttonHeight, this);
// Login L = new Login();
}
}
}
//刷新页面
public synchronized void update(Graphics g)
{
paint(g);
}
//按钮事件的处理函数
public void actionPerformed(ActionEvent e)
{
newGame();
}
public void mousePressed(MouseEvent e)
{
}
public void mouseClicked(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public synchronized void mouseReleased(MouseEvent e)
{
int x = e.getX();
int y = e.getY();
if (imageTracker.checkID(0, true))
{
times += 0;
System.arraycopy(grid, 0, save, 0, grid.length);
//确定鼠标点击的位置
int num4 = (x - button.getLocation().x) * DIM / boardSize;
int num5 = (y - buttonHeight) * DIM / boardSize;
if (num5 < DIM && num4 < DIM && grid[num5 * DIM + num4] == 0)
{
illegalMove = false;
//如果能替换的数目小于零
if (isGood(num5, num4, 2, 3) <= 0)
{
illegalMove = true;//则为非法
paint(getGraphics());
return;
}
//走棋合法的时候
else
{
grid[num5 * DIM + num4] = 2;
change(num5, num4, 2, 3, 5);
checkScore();
paint(getGraphics());
try
{
Thread.sleep(1000L);
}
catch (Exception unused6)
{
}
//选择难度
int chooseTheDifficulty = difficulty.getSelectedIndex();
switch(chooseTheDifficulty)
{
case 0: difnum = 0;break;
case 1: difnum = 1;break;
case 2: difnum = 2;break;
case 3: difnum = 3;break;
}
//电脑走棋
switch(difnum)
{
case 0:blueMove0();break;
case 1:blueMove1();break;
case 2:blueMove2();break;
case 3:blueMove3();break;
}
// 选择电脑的难度
checkScore();
paint(getGraphics());
}
}
//如果格子中已经有蓝棋,则被视为非法
else if (num5 < DIM && num4 < DIM && grid[num5 * DIM + num4] == 3)
{
illegalMove = true;
paint(getGraphics());
return;
}
}
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -