📄 blackvswhite.java
字号:
}
newGame();
times = 0;
}
}
});
text = new TextArea(15, 15);
scrollPane = new JScrollPane(text);
// add(scrollPane, BorderLayout.CENTER);
scrollPane.setBounds(310, 60, 300, 300);
text.setBounds(310, 10, 300, 300);
sendlabel = new Label("输入消息");
messageInfo = new Label("聊天记录:");
sendText = new TextArea();
sendButton = new Button("发送");
clearButton = new Button("清空");
messageText = new TextArea();
messageText.setBounds(320, 120, 265, 220);
messageText.setEditable(true);
// messageText.setEditable(false);
add(sendlabel);
sendlabel.setBounds(320, 50, 200, 20);
add(messageInfo);
messageInfo.setBounds(320, 90, 200, 20);
add(sendText);
sendText.setBounds(320, 70, 200, 20);
sendText.setText("你好");
add(sendButton);
//和电脑聊天
sendButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
message = sendText.getText();
if(message.equalsIgnoreCase("你好"))
{
cmessage = "电脑:你好,我是电脑。\n " +
"你想和我聊天吗?\n (是/否)";
messageText.setText(messageText.getText() + "\n你说:" + message + "\n" + cmessage);
sendText.setText("");
}
else if(message.equalsIgnoreCase("是"))
{
cmessage = "电脑:我是电脑,怎么会聊天呢?我晕!\n " +
"你还想和我聊天吗?\n (是/否)";
messageText.setText(messageText.getText() + "\n你说:" + message + "\n" + cmessage);
sendText.setText("");
}
else if(message.equalsIgnoreCase("否"))
{
cmessage = "电脑:你不想聊天就算了\n " +
"你还想和我聊天吗?\n (是/否)";
messageText.setText(messageText.getText() + "\n你说:" + message + "\n" + cmessage);
sendText.setText("");
}
else
{
cmessage = "电脑:请输入你好";
messageText.setText(messageText.getText() + "\n你说:" + message + "\n" + cmessage);
sendText.setText("");
}
}
});
clearButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
messageText.setText("");
}
});
sendButton.setBounds(525, 70, 35, 20);
clearButton.setBounds(562, 70, 35, 20);
add(messageText);
add(clearButton);
addMouseListener(this);// 设置鼠标事件的监听器
newGame();// 开始新游戏
// 有待实现的
// TestServer S = new TestServer();
// Login L = new Login();
// TestClient c = new TestClient("harllyhoo", "192.168.18.135"); // 启动客户端聊天主窗口
//实现在双方都没办法继续下时结束游戏
overButton = new Button("结束棋局");
overButton.setBounds(400, 360, 70, 20);
add(overButton);
overButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
cmessage = "电脑:唉,已经都没办法下棋啦!\n 我们看结果吧!";
messageText.setText(messageText.getText() + "\n" + cmessage);
if(redScore > blueScore)
{
cmessage = "电脑:555,棋还没下完你就赢了!再来!";
messageText.setText(messageText.getText() + "\n" + cmessage);
//让主线程延迟一下
try
{
Thread.sleep(5000L);
}
catch (Exception unused9)
{
}
newGame();
}
else if(redScore < blueScore)
{
cmessage = "电脑:哈哈,我抢占先机赢了哦!";
messageText.setText(messageText.getText() + "\n" + cmessage);
try
{
Thread.sleep(5000L);
}
catch (Exception unused9)
{
}
newGame();
}
else
{
cmessage = "电脑:恩恩,难分上下,再来一局!";
messageText.setText(messageText.getText() + "\n" + cmessage);
try
{
Thread.sleep(5000L);
}
catch (Exception unused9)
{
}
newGame();
}
}
});
//实现请求电脑协助下棋
helpButton = new Button("求助电脑");
helpButton.setBounds(320, 360, 70, 20);
add(helpButton);
helpButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
helpMove();
}
});
//实现退出游戏
exitGame = new Button("退出游戏");
exitGame.setBounds(480, 360, 70, 20);
add(exitGame);
exitGame.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//退出的动作
System.exit(0);
}
});
//实现人pass功能
passButton = new Button("让步");
passButton.setBounds(260, 360, 50, 20);
add(passButton);
passButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
cmessage = "电脑:什么?你竟然让我,真是的!";
messageText.setText(messageText.getText() + "\n" + cmessage);
switch(difficulty.getSelectedIndex())
{
case 0: blueMove0();break;
case 1: blueMove1();break;
case 2: blueMove2();break;
case 3: blueMove3();break;
}
checkScore();// 计算双方计分
repaint();// 重新绘制页面
}
});
}
// 装载图像
public synchronized void loadImages()
{
int i;
try
{
redImage = getImage(getDocumentBase(), "white.gif");
blueImage = getImage(getDocumentBase(), "black.gif");
noneImage = getImage(getDocumentBase(), "none.gif");
offScrGraphics.drawImage(redImage, 0, 0, this);
offScrGraphics.drawImage(blueImage, 0, 0, this);
offScrGraphics.drawImage(noneImage, 0, 0, this);
}
catch (Exception e1)
{
System.out.println(e1);
}
imageTracker.addImage(redImage, 0);// 红棋图像的装载
imageTracker.addImage(blueImage, 0);// 蓝棋图像的装载
for (i = 0; i < 2; ++i)
{
// 捕捉图像的异常
try
{
imageTracker.checkID(i, true);
imageTracker.waitForID(i);
showStatus("Loading image P" + i + ".gif");
}
catch (Exception e2)
{
System.out.println(e2);
}
}
}
// BlackVSWhite类的开始执行函数
public void start()
{
aThread = new Thread(this);
aThread.start();// 启动主线程;
imageTracker.statusID(0, true);
imageTracker.statusID(0, true);
}
// 主线程的执行函数
public void run()
{
for (;;)
{
try
{
Thread.sleep(50L);
continue;
}
catch (Exception unused1)
{
continue;
}
}
}
// BlackVSWhite类的退出函数
public void destroy()
{
}
//实现电脑求助功能
public synchronized void helpMove()
{
//replace1,replace2用来记录替换玩家棋子的数目
int replace1 = -1;
int replace2 = -1;
//cplace1,cplace2用来记录电脑放置棋子的位置
int cplace1 = -1;
int cplace2 = -1;
int uptodown;
//从上往下,从左至右,分析在每一个空白各自上,
//电脑放棋后,所能替换玩家棋子的数目,取数目
//最大时的格子,如果有几个最大值,取最先者
for (uptodown = 0; uptodown < DIM; ++uptodown)
{
int lefttoright;
for (lefttoright = 0; lefttoright < DIM; ++lefttoright)
{
//如果格子是空白时 DIM是单方向上的格子数
if (grid[uptodown * DIM + lefttoright] == 0)
{
//获取替换玩家棋子的数目
replace2 = isGood(uptodown, lefttoright, 2, 3);
//取数目最大时的格子的位置值(cplace1,cplace2)
if (replace1 < replace2 && replace2 > 0) {
replace1 = replace2;
cplace1 = uptodown;
cplace2 = lefttoright;
}
}
}
}
//如果电脑替换玩家棋子的数目大于零时
if (replace1 > 0)
{
/* //将格子中的棋子设为白棋
grid[cplace1 * DIM + cplace2] = RED;
//并将相应两个白棋间的黑棋由白棋取而代之
change(cplace1, cplace2, 2, 3, 5);
*/
cplace1 += 1;
cplace2 += 1;
cmessage = "电脑说:要我帮你,我就帮你算算咯!\n 电脑说:";
messageText.setText(messageText.getText() + "\n" + cmessage + "你走第" + String.valueOf(cplace1)
+ "行,第" + String.valueOf(cplace2) + "个吧!");
}
//否则放弃这一步
else
{
cmessage = "电脑说:我也帮不了你,你没地方可以走!";
messageText.setText(messageText.getText() + "\n" + cmessage);
switch(difficulty.getSelectedIndex())
{
case 0: blueMove0();break;
case 1: blueMove1();break;
case 2: blueMove2();break;
case 3: blueMove3();break;
}
checkScore();// 计算双方计分
repaint();// 重新绘制页面
}
// blueNotMoving = true;
}
//电脑出棋函数
//此项为初级电脑
public synchronized void blueMove0()
{
//replace1用来记录替换玩家棋子的数目
int replace1 = -1;
//cplace1,cplace2用来记录电脑放置棋子的位置
int cplace1 = -1;
int cplace2 = -1;
//i,j为随机函数即电脑随机放置棋子
int i = (int)(Math.random() * DIM);
int j = (int)(Math.random() * DIM);
//通过随机数选择放置棋子的地方
//记录电脑放棋后,所能替换玩家棋子的数目
//如果能替换的数目大于0,则放置棋子
int times = 0;
while(times <= 100)
//如果格子是空白时 DIM是单方向上的格子数
//放置棋子
{
if(grid[j * DIM + i] == 0)
{
//获取替换玩家棋子的数目
replace1 = isGood(j, i, 3, 2);
if(replace1 > 0)
{
cplace1 = j;
cplace2 = i;
break;
}
else
{
i = (int)(Math.random() * DIM);
j = (int)(Math.random() * DIM);
}
}
else
{
i = (int)(Math.random() * DIM);
j = (int)(Math.random() * DIM);
}
times++;
}
blueNotMoving = false;
//如果电脑替换玩家棋子的数目大于零时
if (replace1 > 0)
{
//将格子中的棋子设为蓝棋
grid[cplace1 * DIM + cplace2] = BLUE;
//并将相应两个蓝棋间的红棋由蓝棋取而代之
change(cplace1, cplace2, 3, 2, 4);
}
//否则放弃这一步
else
blueNotMoving = true;
}
// 电脑出棋的函数
// 分为三种不同的难度
// 此项为中级电脑
public synchronized void blueMove1()
{
//replace1,replace2用来记录替换玩家棋子的数目
int replace1 = -1;
int replace2 = -1;
//cplace1,cplace2用来记录电脑放置棋子的位置
int cplace1 = -1;
int cplace2 = -1;
int uptodown;
//从上往下,从左至右,分析在每一个空白各自上,
//电脑放棋后,所能替换玩家棋子的数目,取数目
//最大时的格子,如果有几个最大值,取最先者
for (uptodown = 0; uptodown < DIM; ++uptodown)
{
int lefttoright;
for (lefttoright = 0; lefttoright < DIM; ++lefttoright)
{
//如果格子是空白时 DIM是单方向上的格子数
if (grid[uptodown * DIM + lefttoright] == 0)
{
//获取替换玩家棋子的数目
replace2 = isGood(uptodown, lefttoright, 3, 2);
//取数目最大时的格子的位置值(cplace1,cplace2)
if (replace1 < replace2 && replace2 > 0) {
replace1 = replace2;
cplace1 = uptodown;
cplace2 = lefttoright;
}
}
}
}
blueNotMoving = false;
//如果电脑替换玩家棋子的数目大于零时
if (replace1 > 0)
{
//将格子中的棋子设为蓝棋
grid[cplace1 * DIM + cplace2] = BLUE;
//并将相应两个蓝棋间的红棋由蓝棋取而代之
change(cplace1, cplace2, 3, 2, 4);
}
//否则放弃这一步
else
blueNotMoving = true;
}
//
// 电脑出棋的函数
// 分为三种不同的难度
// 此项为高级电脑
public synchronized void blueMove2()
{
//replace1,replace2用来记录替换玩家棋子的数目
int replace1 = -1;
int replace2 = -1;
//cplace1,cplace2用来记录电脑放置棋子的位置
int cplace1 = -1;
int cplace2 = -1;
int uptodown;
//从上往下,从左至右,分析在每一个空白各自上,
//电脑放棋后,所能替换玩家棋子的数目,取数目
//最大时的格子,如果有几个最大值,取最先者
for (uptodown = 0; uptodown < DIM; ++uptodown)
{
int lefttoright;
for (lefttoright = 0; lefttoright < DIM; ++lefttoright)
{
//如果格子是空白时 DIM是单方向上的格子数
if (grid[uptodown * DIM + lefttoright] == 0)
{
//获取替换玩家棋子的数目
replace2 = isGood(uptodown, lefttoright, 3, 2);
//取数目最大时的格子的位置值(cplace1,cplace2)
if (replace1 < replace2 && replace2 > 0) {
replace1 = replace2;
cplace1 = uptodown;
cplace2 = lefttoright;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -