老实要求添加的  班里同学都搞不定     只能来这找高手了    谢谢大家了复盘就是  每下完一局    把下棋过程存下来 能重现禁手   是五子棋的规则       可以的话加我QQ 361850012                   谢谢              源程序如下
package chess;import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;public class ChessBoard extends JFrame{
private int width;
private int num;
private int margin;
private int x0,y0;
private double gap;
private ChessPoint[][]points;
private int i0,j0;

public  int dirBeginX[];
public  int dirBeginY[];
public  int lineBeginX[];
public  int lineBeginY[];
public int offsetX[];
public int offsetY[];
public int scoreBlack[]={0,10,50,500,10000};
public int scoreWhite[]={0,10,50,500,10000};
public ChessBoard(int width,int num){
x0=y0=50;
margin=20;
this.width=width;
this.num=num;
gap=(double)(width-2*margin)/(num-1);
initPoint();
this.setSize(width+2*x0,width+2*y0);//棋盘边框

dirBeginX=new int[]{0,0,0,1,0,num-1};
dirBeginY=new int[]{0,0,0,0,0,1};
lineBeginX=new int[]{0,1,0,1,1,0};
lineBeginY=new int[]{1,0,1,0,0,1};
offsetX=new int[]{1,0,1,1,-1,-1};
offsetY=new int[]{0,1,1,1,1,1};
this.register();
}
public static void main(String[] args) {

new  ChessBoard(500,20).setVisible(true);
}
public void initPoint(){
end=false;
points=new ChessPoint[num][num];
for(int i=0;i<points.length;i++){
for(int j=0;j<points[i].length;j++){
points[i][j]=new ChessPoint((int)(x0+margin+j*gap),(int)(y0+margin+i*gap),0);
}
}
}
public void paint(Graphics g){
displayBackground(g);
display(g);
}
public void displayBackground(Graphics g){
g.setColor(Color.orange);
g.fillRect(x0, y0, width, width);
g.setColor(Color.white);
for(int i=0;i<num;i++){
g.drawLine(x0+margin, (int)(y0+margin+i*gap), x0+width-margin, (int)(y0+margin+i*gap));
g.drawLine((int)(x0+margin+i*gap),y0+margin,  (int)(x0+margin+i*gap),y0+width-margin);
}

}//画棋盘
public void display(Graphics g){
for(int i=0;i<points.length;i++){
for(int j=0;j<points[i].length;j++){
points[i][j].display(g);
}
}
}
public void display(){
for(int i=0;i<points.length;i++){
for(int j=0;j<points[i].length;j++){
System.out.print(points[i][j]);
}
System.out.println();
}
}
public void register(){
this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.addMouseListener(ml);
}
public boolean valid(int i,int j){
return i>=0 && i<num && j>=0 && j<num;
}
private void think(){
initScore();
evaluate();
getMax();
}
private void initScore(){
for(int i=0;i<points.length;i++){
for(int j=0;j<points[i].length;j++){
if(points[i][j].getState()==ChessPoint.NONE){
points[i][j].setScore(0);
}
}
}
}
//棋盘的扫描和电脑下棋思路
private void evaluate(){
for(int k=0;k<6;k++){
int lineX=this.dirBeginX[k];
int lineY=this.dirBeginY[k];
line:for(;valid(lineX,lineY);lineX+=this.lineBeginX[k],lineY+=this.lineBeginY[k]){
int x=lineX;
int y=lineY;
point:for(;valid(x,y);x+=this.offsetX[k],y+=this.offsetY[k]){
int m=0;
int state=ChessPoint.NONE;
for(int l=0;l<5;l++){
int xx=x+l*this.offsetX[k];
int yy=y+l*this.offsetY[k];
if(!valid(xx,yy)){
continue line;
}
if(state==ChessPoint.NONE){
if(points[xx][yy].getState()!=ChessPoint.NONE){
m=1;
state=points[xx][yy].getState();
}
}
else{
if(points[xx][yy].getState()==ChessPoint.NONE)
continue;
if(state!=points[xx][yy].getState()){
continue point;
}
m++;
}
}

if(m==0)
continue;
if(m==5){
end=true;
//判断输赢
if(state==ChessPoint.BLACK){
JOptionPane.showConfirmDialog(ChessBoard.this, "恭喜您,你赢啦!");
if(JOptionPane.OK_OPTION==JOptionPane.showConfirmDialog(ChessBoard.this, "还玩吗?")){
initPoint();
repaint();
return;
}
else{
setVisible(false);
System.exit(0);
}
}
else{
JOptionPane.showConfirmDialog(ChessBoard.this, "你竟然输给了电脑,不给力");
if(JOptionPane.OK_OPTION==JOptionPane.showConfirmDialog(ChessBoard.this, "敢再来一局?")){
initPoint();
repaint();
return;
}
else{
setVisible(false);
System.exit(0);
}
}
}
int sc=state==ChessPoint.BLACK?this.scoreBlack[m]:this.scoreWhite[m];
System.out.println("\n----"+sc);
for(int l=0;l<5;l++){
int xx=x+l*this.offsetX[k];
int yy=y+l*this.offsetY[k];
if(points[xx][yy].getState()==ChessPoint.NONE){
points[xx][yy].setScore(points[xx][yy].getScore()+sc);
}
}
}
}
}
}
private void getMax(){
float max=0;
i0=j0=-1;
for(int i=0;i<points.length;i++){
for(int j=0;j<points[i].length;j++){
if(points[i][j].getState()==ChessPoint.NONE){
if(max<points[i][j].getScore()){
max=points[i][j].getScore();
i0=i;j0=j;
}
}
}
}
if(i0==-1){
i0=j0=num/2;
}
System.out.println("\ni0="+i0+" j0="+j0);
}
//鼠标事件,将x,y转换成棋盘上的坐标
transient MouseListener ml=new MouseAdapter(){
public void mouseClicked(MouseEvent e){
int x=e.getX();
int y=e.getY();
int j=(int)Math.round((x-x0-margin)/gap);
int i=(int)Math.round((y-y0-margin)/gap);
if(!valid(i,j)){
return ;
}
if(points[i][j].getState()!=ChessPoint.NONE){
return ;
}
points[i][j].setState(ChessPoint.BLACK);
repaint();

think();
if(end) 
return;
points[i0][j0].setState(ChessPoint.WHITE);
repaint();


}

};
boolean end;

}