用JAVA实现五子棋悔棋代码

最好是能帮我在我以有的代码上加进去~谢谢高手们了~小弟都快疯了~QQ:2521333... 最好是能帮我在我 以有的代码上 加进去~ 谢谢高手们了~ 小弟都快疯了~ QQ:2521333 展开
 我来答
50后老郭
推荐于2016-06-01 · TA获得超过3328个赞
知道小有建树答主
回答量:112
采纳率:0%
帮助的人:82.3万
展开全部
保存成.java文件直接运行编译
这是我回答的别人问题的答案地址http://zhidao.baidu.com/question/54577957.html

import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;

class Gobang extends JFrame implements Runnable, ActionListener
{
final static int Player=1;
final static int AI =-1;

ClassLoader cl = this.getClass().getClassLoader();
Toolkit tk = Toolkit.getDefaultToolkit();

int length=14, game_state, winner, check, step;
int grid[][] = new int[length][length];
int locX, locY /* �囱�竚 */, count /* 硈囱计 */, x, y /* 既��竚 */, displace_x=0, displace_y=0 /* �簿秖 */, direction;
ArrayList steps = new ArrayList(); /* 疠魁囱˙ */

JPopupMenu control_menu = new JPopupMenu(); /* �龄匡虫�� */
JMenuItem[] command = new JMenuItem[4];
String[] command_str={"�囱", "�郎", "弄郎", "�秨"};

int[][] dir = { {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1} };
boolean[] dir2 = new boolean[8];

boolean turn;
String message;

final JDialog dialog = new JDialog(this, "叫匡�", true);

Font font=new Font("new_font", Font.BOLD, 20);
Grid grids[][] = new Grid[length][length];

Image white= tk.getImage(cl.getResource("res/white.png"));
Image black= tk.getImage(cl.getResource("res/black.png"));
Image title= tk.getImage(cl.getResource("res/title.png"));
Image temp;
JPanel boardPanel, bigpanel;
JRadioButton[] choice = new JRadioButton[2];

final static int Start =0;
final static int Select =1;
final static int Playing =2;
final static int End =3;

final static int nil=-1; /* 礚よ� */
final static int oblique_1 =0; /* ���オ� */
final static int oblique_2 =1; /* オ���� */
final static int horizontal =2; /* 绢� */
final static int vertical=3; /* �� */

Gobang()
{
super("き�囱");

boardPanel = new JPanel();
boardPanel.setLayout(new GridLayout(length, length, 0, 0));
boardPanel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

for(int i=0; i<length; i++)
for(int j=0; j<length; j++)
{
grids[i][j] = new Grid(i, j);
boardPanel.add(grids[i][j]);
}

bigpanel = new JPanel();
bigpanel.add(boardPanel, BorderLayout.CENTER);
getContentPane().add(bigpanel, BorderLayout.SOUTH);

game_state=Start;
ThreadStart();

dialog.setSize(160, 100);
dialog.setResizable(false);
dialog.setLocationRelativeTo(null);

ButtonGroup choice_group = new ButtonGroup();
JPanel choice_menu = new JPanel();

choice[0] = new JRadioButton("堵�", new ImageIcon(black), true);
choice[1] = new JRadioButton("フ�", new ImageIcon(white));

for(int i=0; i<choice.length; i++)
{
choice_menu.add(choice[i]);
choice_group.add(choice[i]);
}

for(int i=0; i<command.length; i++)
{
command[i] =new JMenuItem(command_str[i]);
command[i].addActionListener(this);
control_menu.add(command[i]);
}

JButton select = new JButton("絋)");
JPanel select_menu = new JPanel();
select_menu.add(select);
select.addActionListener(this);

dialog.getContentPane().add(choice_menu, BorderLayout.NORTH);
dialog.getContentPane().add(select_menu, BorderLayout.CENTER);

setIconImage(title);
setResizable(false);
setSize(300, 335);
setVisible(true);
setLocationRelativeTo(null);
}

public static void main(String[] arg)
{
Gobang application = new Gobang();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public void actionPerformed(ActionEvent event)
{
if( event.getSource().equals(command[0]) )
{
if(steps.size()!=0)
undo();
}
else if(event.getSource().equals(command[1]) )
Save();
else if(event.getSource().equals(command[2]) )
Load();
else if(event.getSource().equals(command[3]) )
ReStart();
else
{
if(choice[1].isSelected())
{
temp=white;
white=black;
black=temp;
}

dialog.dispose();
}
}

public void WinCheck()
{
check = turn? Player: AI;
direction=oblique_1;
WinCheck2();
}

public void WinCheck2()
{
count=1;

switch(direction)
{
case oblique_1: displace_x=1;
displace_y=-1;
direction=oblique_2;

break;

case oblique_2: displace_x=displace_y=1;
direction=horizontal;

break;

case horizontal: displace_x=1;
displace_y=0;
direction=vertical;

break;

case vertical: displace_x=0;
displace_y=1;
direction=nil;

break;
}

x=locX+displace_x;
y=locY+displace_y;

while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check)
{
count=count+1;
x=x+displace_x;
y=y+displace_y;
}

x=locX-displace_x;
y=locY-displace_y;

while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check)
{
count=count+1;
x=x-displace_x;
y=y-displace_y;
}

if(count>=5)
{
game_state=End;
winner=check;
ThreadStart();
}
else if(direction!=nil)
WinCheck2();
}

public void ReStart()
{
for(int i=0; i<length; i++)
for(int j=0; j<length; j++)
grids[i][j].Initial();

winner=0;
steps.clear();
game_state=Playing;
}

public void gobangRandom()
{
displace_y=0;

do
{
displace_x=(int)(Math.random()*8);
x =locX+dir[displace_x][0];
y =locY+dir[displace_x][1];

if(!dir2[displace_x])
{
displace_y=displace_y+1;
dir2[displace_x]=true;
}
}while((x<0 || x>=length || y<0 || y>=length || grid[x][y]!=0) && displace_y<8);

for(int i=0; i<8; i++)
dir2[i]=false;

if(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0)
setMark(x, y);
else
gobangRandom2();
}

private void gobangRandom2()
{
do
{
x=(int)(Math.random()*length);
y=(int)(Math.random()*length);
}while(grid[x][y]!=0);

setMark(x, y);
}

private void gobangAI()
{
boolean play=true;

for(int i=2; i>0; i--)
{
play=!play;

gobangAI4(play);

if(turn)
return;
}

for(int i=7; i>=4; i--)
{
play=!play;

step=i/2;
gobangAI2(play);

if(turn)
return;
}

gobangAI5();

if(!turn)
gobangRandom();
}

private void gobangAI2(boolean player)
{
check = player? Player: AI;

for(int i=0; i<length; i++)
for(int j=0; j<length; j++)
{
if(turn)
break;

if(grid[i][j] == check)
{
count=1;
direction=oblique_1;
gobangAI3(i, j);
}
}
}

private void gobangAI3(int x, int y)
{
if(count==1)
{
locX=x;
locY=y;
}

switch(direction)
{
case oblique_1: displace_x=1;
displace_y=-1;

break;

case oblique_2: displace_x=displace_y=1;

break;

case horizontal: displace_x=1;
displace_y=0;

break;

case vertical: displace_x=0;
displace_y=1;

break;
}

x=x+displace_x;
y=y+displace_y;

if(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check)
{
count=count+1;

if(count==step)
{
if(x+displace_x>=0 && x+displace_x<length && y+displace_y>=0 && y+displace_y<length && grid[x+displace_x][y+displace_y]==0)
{
if(x-step*displace_x<0 || x-step*displace_x>=length || y-step*displace_y<0 || y-step*displace_y>=length || !gobang_SpaceAI(x+displace_x, y+displace_y) || (grid[x-step*displace_x][y-step*displace_y]!=0 && step<3) ) /* 癸翴�猵 */
gobangAI3_2();
else
setMark2(x+displace_x, y+displace_y);
}
else
gobangAI3_2();
}
else
gobangAI3(x, y);
}
else
gobangAI3_2();
}

private void gobangAI3_2()
{
if(direction!=vertical)
{
count=1;
direction=direction+1;
gobangAI3(locX, locY);
}
}

private void gobangAI4(boolean player)
{
check = player? Player: AI;

for(int i=0; i<length; i++)
for(int j=0; j<length; j++)
{
if(turn)
break;

if(grid[i][j]==0)
{
direction=oblique_1;
locX=i;
locY=j;
gobangAI4();
}
}
}

private void gobangAI4()
{
count=0;

switch(direction)
{
case oblique_1: displace_x=1;
displace_y=-1;
direction=oblique_2;

break;

case oblique_2: displace_x=displace_y=1;
direction=horizontal;

break;

case horizontal: displace_x=1;
displace_y=0;
direction=vertical;

break;

case vertical: displace_x=0;
displace_y=1;
direction=nil;

break;
}

x=locX+displace_x;
y=locY+displace_y;

while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check)
{
count=count+1;
x=x+displace_x;
y=y+displace_y;
}

x=locX-displace_x;
y=locY-displace_y;

while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check)
{
count=count+1;
x=x-displace_x;
y=y-displace_y;
}

if(count>=4)
setMark(locX, locY);
else if(direction!=nil)
gobangAI4();
}

private void gobangAI5()
{
for(int i=0; i<length; i++)
for(int j=0; j<length; j++)
{
if(turn)
break;

if(grid[i][j]==-1)
{
direction=oblique_1;
locX=i;
locY=j;
gobangAI5_2();
}
}
}

/* 璸衡硈絬�フ耞糷 */
private void gobangAI5_2()
{
count=0;

switch(direction)
{
case oblique_1: displace_x=1;
displace_y=-1;
direction=oblique_2;

break;

case oblique_2: displace_x=displace_y=1;
direction=horizontal;

break;

case horizontal: displace_x=1;
displace_y=0;
direction=vertical;

break;

case vertical: displace_x=0;
displace_y=1;
direction=nil;

break;
}

x=locX+displace_x;
y=locY+displace_y;

while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0 && count<4)
{
count=count+1;
x=x+displace_x;
y=y+displace_y;
}

x=locX-displace_x;
y=locY-displace_y;

if(count==4 && x>=0 && x<length && y>=0 && y<length && grid[x][y]==0)
setMark(locX+displace_x, locY+displace_y);
else if(count>1)
{
count = count==4? 3: count;

while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0 && count<4)
{
count=count+1;
x=x-displace_x;
y=y-displace_y;
}

if(count==4)
setMark(locX+displace_x, locY+displace_y);
else if(direction!=nil)
gobangAI5_2();
}
else if(direction!=nil)
gobangAI5_2();
}

private boolean gobang_SpaceAI(int x, int y) /* 璸衡逞缁�フ�竚 */
{
int space=0;

do
{
space=space+1;
x=x+displace_x;
y=y+displace_y;

}while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0 && space<4);

if(space+count>=5) /* 逞缁�フ场だΤ硈絬ぇ�� */
return true;
else
{
space=0;
x=locX-displace_x;
y=locY-displace_y;

while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0 && space<4)
{
space=space+1;
x=x-displace_x;
y=y-displace_y;
}

if(space+count>=5) /* 逞缁�フ场だΤ硈絬ぇ�� */
return true;
else
return false;
}
}

public void ThreadStart()
{
new Thread(this).start();
}

private void setMark(int x, int y)
{
steps.add(grids[x][y]);
grids[x][y].setValue(-1);
WinCheck();
turn=true;
}

/* 璸衡�ê�よ�Τ�隔 */
private void setMark2(int x, int y)
{
int space=0, temp_x=x, temp_y=y;

do
{
space=space+1;
temp_x=temp_x+displace_x;
temp_y=temp_y+displace_y;

}while(temp_x>=0 && temp_x<length && temp_y>=0 && temp_y<length && grid[temp_x][temp_y]==0 && space<4);

if(space+step>=5)
setMark(x, y);
else
setMark(x-(step+1)*displace_x, y-(step+1)*displace_y); /* э�癸翴 */
}

public void run()
{
try
{
switch(game_state)
{
case Start: Thread.sleep(2000);
dialog.show();
game_state=Playing;
repaint();

break;

case End: repaint();
Thread.sleep(1500);
ReStart();
repaint();

break;
}
}
catch(InterruptedException ex)
{
}
}

public void paint(Graphics g)
{
super.paint(g);

switch(game_state)
{
case Start: g.drawString("2005.7 by Yu Lin Tao", 91, 240);
g.setFont(font);
g.setColor(Color.BLUE);
g.drawString("Gobang", 112, 120);
g.drawImage(title, 134, 135, this);

break;

case Playing:
case End:
g.drawString("�产: 筿福:", 105, 40);
g.drawImage(black, 132, 30, this);
g.drawImage(white, 182, 30, this);

if(winner!=0)
{
g.setFont(font);
g.setColor(Color.RED);
message = winner==1? "�墓�":"�块�";
g.drawString(message, 120, 185);
}

break;
}
}

public void undo()
{
if(steps.size()>0)
{
for(int i=0; i<2; i++)
{
((Grid)steps.get(steps.size()-1)).Initial();
steps.remove(steps.size()-1);
}
}
}

private void Save()
{
String str;
try
{
File file = new File("innings.men");
file.createNewFile();

BufferedWriter write = new BufferedWriter(new FileWriter(file));

for(int i=0; i<steps.size(); i++)
{
str=(((Grid)steps.get(i)).getLocX())+","+(((Grid)steps.get(i)).getLocY())+","+(((Grid)steps.get(i)).getValue());

write.write(str);
write.newLine();
}

write.close();
}
catch(Exception ex)
{
}
}

private void Load()
{
try
{
String[] step_array;
String str;

File file = new File("innings.men");

if(!file.exists())
{
JOptionPane.showMessageDialog(null, "⊿Τ�郎");
return;
}

BufferedReader read = new BufferedReader(new FileReader(file));
ReStart();

while(read.ready())
{
str=read.readLine();
step_array=str.split(",");

grids[Integer.parseInt(step_array[0])][Integer.parseInt(step_array[1])].setValue(Integer.parseInt(step_array[2]));
steps.add(grids[Integer.parseInt(step_array[0])][Integer.parseInt(step_array[1])]);
}
}
catch(Exception ex)
{
}
}

private class Grid extends JPanel implements MouseListener
{
int x, y, value;
boolean selected;

public Grid(int x, int y)
{
this.x=x;
this.y=y;

addMouseListener(this);
}

public void mousePressed(MouseEvent event)
{
if(game_state==Playing)
{
int button=event.getButton();

if(button==MouseEvent.BUTTON1)
{
if(value==0)
{
steps.add(this);
setValue(1);
WinCheck();
turn=false;

if(game_state==Playing)
gobangAI();
}
}
else
control_menu.show(this, event.getX(), event.getY());
}
}

public void mouseEntered(MouseEvent event)
{
if(game_state==Playing)
setSelected(true);
}

public void mouseExited(MouseEvent event)
{
if(game_state==Playing)
setSelected(false);
}

public void mouseClicked(MouseEvent event)
{
}

public void mouseReleased(MouseEvent event)
{
}

public Dimension getPreferredSize()
{
return new Dimension(20, 20);
}

public Dimension getMinimumSize()
{
return getPreferredSize();
}

public int getLocX()
{
return x;
}

public int getLocY()
{
return y;
}

public int getValue()
{
return value;
}

public void Initial()
{
value=grid[x][y]=0;
selected=false;
repaint();
}

public void setValue(int new_value)
{
locX=x;
locY=y;
value=grid[x][y]=new_value;
repaint();
}

public void setSelected(boolean select)
{
selected=select;
repaint();
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);

if(game_state!=Start && game_state!=Select)
{
g.drawLine(0, 10, 19, 10);
g.drawLine(10, 0, 10, 19);

/* 礶娩絬 */

g.setColor(Color.BLUE);

if(x==0)
g.drawLine(0, 0, 19, 0);
else if(x==length-1)
g.drawLine(0, 19, 19, 19);

if(y==0)
g.drawLine(19, 0, 19, 19);
else if(y==length-1)
g.drawLine(0, 0, 0, 19);

if(selected)
setBackground(Color.WHITE);
else
setBackground(Color.LIGHT_GRAY);
}

//g.drawString(x+" "+y, 1, 10);

if(value!=0)
{
temp = value==1? black: white;
g.drawImage(temp, 4, 4, this);
}
}

}

}
SoldierBandit
2008-05-23 · TA获得超过191个赞
知道小有建树答主
回答量:605
采纳率:0%
帮助的人:286万
展开全部
具体嘛.我觉得可以让一个线程来做这个东西,单独用一个线程控制!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式