JAVA五子棋判断输赢

int winner = m.whoWin();
if(winner == ChessModel.BLACK){
JOptionPane.showMessageDialog(null, "black win");
}else if(winner== ChessModel.WHITE){
JOptionPane.showMessageDialog(null, "white win");
System.exit(0);
根据这个写一下五子棋规则
大神都去哪里了!!!

第1个回答  2013-06-25
import java.awt.*;
import javax.swing.*;
public class ChessFrame extends JFrame{
private ChessPanel cp;
private ChessModel cm;

public ChessFrame(){
this.setTitle("五子棋");
cm=new ChessModel();
cp=new ChessPanel(cm);
this.add(cp);
}
public void showMe(){
this.setVisible(true);
this.setSize(480,400);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new ChessFrame().showMe();
}
}

----------------------------------------
import javax.swing.*;
public class ChessModel {
private int width,height;
private int x=0,y=0;
private int [][] arrMapShow;
private boolean isOdd,isExist;

public ChessModel(){
this.isOdd=true;
PaneInit(20,15);
}

private void PaneInit(int width,int height){
this.width=width;
this.height=height;
arrMapShow=new int[width+1][height+1];
for(int i=0;i<=width;i++){
for(int j=0;j<height+1;j++){
arrMapShow[i][j]=5;
}
}
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int[][] getArrMapShow() {
return arrMapShow;
}
public void setArrMapShow(int[][] arrMapShow) {
this.arrMapShow = arrMapShow;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public boolean getisOdd() {
return isOdd;
}
public void setisOdd(boolean isOdd) {
if(isOdd)
this.isOdd = true;
else
this.isOdd=false;
}
public boolean isExist() {
return isExist;
}
public void setExist(boolean isExist) {
this.isExist = isExist;
}

private boolean badxy(int x,int y){
if(x>=width+20||x<0)
return true;
return y>=height+20||y<0;
}
public boolean chessExist(int i,int j){
if(this.arrMapShow[i][j]==1||this.arrMapShow[i][j]==2)
return true;
return false;
}

public void redyplay(int x,int y){
if(badxy(x,y))
return;
if(chessExist(x,y))
return;
this.arrMapShow[x][y]=3;
}

public void play(int x,int y){
if(badxy(x,y))
return;
if(chessExist(x,y)){
this.isExist=true;
return;
}else
this.isExist=false;
if(getisOdd()){
setisOdd(false);
this.arrMapShow[x][y]=1;
}else{
setisOdd(true);
this.arrMapShow[x][y]=2;
}
}

//判断胜利的条件
public boolean judgeSuccess(int x,int y,boolean isodd){
int num=1;
int arrvalue;
int x_temp=x,y_temp=y;
if(isodd)
arrvalue=2;
else
arrvalue=1;
int x_temp1=x_temp,y_temp1=y_temp;
//判断右边
for(int i=1;i<=6;i++){
x_temp1+=1;
if(x_temp1>this.width)
break;
if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)
num++;
else
break;
}
//判断左边
x_temp1=x_temp;
for(int i=1;i<=6;i++){
x_temp1-=1;
if(x_temp1<0)
break;
if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)
num++;
else
break;
}
if(num==5)
return true;

//判断上方
x_temp1=x_temp;
y_temp1=y_temp;
num=1;
for(int i=1;i<=6;i++){
y_temp1-=1;
if(y_temp1<0)
break;
if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)
num++;
else
break;
}
//判断下方
y_temp1=y_temp;
for(int i=1;i<=6;i++){
y_temp1+=1;
if(y_temp1>this.height)
break;
if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)
num++;
else
break;
}
if(num==5)
return true;

//判断左上
x_temp1=x_temp;
y_temp1=y_temp;
num=1;
for(int i=1;i<=6;i++){
x_temp1-=1;
y_temp1-=1;
if(y_temp1<0 || x_temp1<0)
break;
if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)
num++;
else
break;
}
//判断右下
x_temp1=x_temp;
y_temp1=y_temp;
for(int i=1;i<=6;i++){
x_temp1+=1;
y_temp1+=1;
if(y_temp1>this.height || x_temp1>this.width)
break;
if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)
num++;
else
break;
}
if(num==5)
return true;

//判断右上
x_temp1=x_temp;
y_temp1=y_temp;
num=1;
for(int i=1;i<=6;i++){
x_temp1+=1;
y_temp1-=1;
if(y_temp1<0 || x_temp1>this.width)
break;
if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)
num++;
else
break;
}
//判断左下
x_temp1=x_temp;
y_temp1=y_temp;
for(int i=1;i<=6;i++){
x_temp1-=1;
y_temp1+=1;
if(y_temp1>this.height || x_temp1<0)
break;
if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)
num++;
else
break;
}
if(num==5)
return true;
return false;
}

//五子成线后的提示
public void showSuccess(JPanel jp){
JOptionPane.showMessageDialog(jp,"你赢了,好厉害!","win",
JOptionPane.INFORMATION_MESSAGE);
new ChessFrame().showMe();
}

}

----------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.JPanel;
public class ChessPanel extends JPanel {
private int width, height;
private ChessModel cm;
public ChessPanel(ChessModel mm) {
cm = mm;
width = cm.getWidth();
height = cm.getHeight();
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e) {
int x=(e.getX()-10)/20;
int y=(e.getY()-10)/20;
cm.play(x,y);
repaint();
if(cm.judgeSuccess(x,y,cm.getisOdd())){
cm.showSuccess(null);
}
}
});
}
public void paintComponent(Graphics g){
super.paintComponent(g);
for(int j=0;j<=height;j++){
for(int i=0;i<width;i++){
int v=cm.getArrMapShow()[i][j];
draw(g,i,j,v);
}
}
}
public void setModel(ChessModel mm){
cm=mm;
width=cm.getWidth();
height=cm.getHeight();
}

public void draw(Graphics g,int i,int j,int v){
int x=20*i+20;
int y=20*j+20;

if(i!=width&&j!=height){
g.setColor(Color.black);
g.drawRect(x, y, 20, 20);
}
if(i!=width&&j!=height){
g.setColor(Color.black);
g.drawRect(x, y, 20, 20);
}
if(v==1){
g.setColor(Color.gray);
g.drawOval(x-8, y-8, 16, 16);
g.setColor(Color.black);
g.fillOval(x-8, y-8, 16, 16);

}
if(v==2){
g.setColor(Color.gray);
g.drawOval(x-8, y-8, 16, 16);
g.setColor(Color.white);
g.fillOval(x-8, y-8, 16, 16);
}
if(v==3){
g.setColor(Color.cyan);
g.drawOval(x-8, y-8, 316, 16);
}

}
}

三个类,可以直接使用了追问

能不能别复制一篇来

我想知道用Java编写的五子棋怎么判断输赢
看坐标的位置x轴不变Y轴++ 或-- 他们的颜色一样的 数量>=5 就赢了; \/\/横向 Y轴不变X轴++ 或-- 他们的颜色一样的 数量>=5就赢了; \/\/纵向 X轴++ Y轴-- 或X轴--Y轴++ 他们颜色一样 数量>=5就赢了;X轴++ Y轴++ 或X轴--Y轴-- 他们颜色一样数量>=5就赢了;\/\/斜向 我...

java程序设计,五子棋判断输赢
int Map[MAX_LINE][MAX_ROW];int CheckWin() \/\/返回0表示都没赢,返回1表示白棋赢,返回2表示黑棋赢 { int i,j,k;int tmp;\/* 判断所有横行 *\/ for(i=0;i<MAX_LINE;i++){ for(j=0;j<MAX_ROW-5;j++){ tmp=Map[i][j];if( tmp != 0){ for(k=1;k<5;k++)if(Map[i...

java五子棋输赢问题
比如你确定了一个点status[i][j],需要这个点的斜向上的第n个点,就可以用status[i+n][j+n],你在for循环中同时i++,j++控制就可以了,只要加减同一个参数就是斜向了

vb五子棋判定胜负的算法
首先,我们要确定棋盘的格子数,比如10*10的 然后,声明两个数组 Hei(1 To 10 * 10) ,Bai(1 To 10 * 10) 表示双方已经下的棋子,再创建10*10个控件数组与之对应。游戏开始时,两个数组的所有元素都为空,当鼠标按下一个控件时改变对应数组元素的值即表示下了一个棋子。最后,为了便于判断赢...

五子棋判断输赢、怎么解释。在线等
和上下边。如果下的为X,Y 颜色的C。先往左减X-1是不是C,如果是判断减2是不是C,直到不是或者X-4还是为C(这时加上本身就是5个C胜利了),如果左边不满X-4计算X+1循环判断,加上左边的累加数是否为4,如果成立则C胜利,如果不成立,则判断上下,同样的沿用左右的思想 ...

关于Java面向对象和C语言面向过程的问题,求指教
例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。而面向对象的设计则是从另外的思路来解决问题。整个五子棋...

关于五子棋的判断输赢,高手进
断点可以打在这段代码的开头这句if语句上,看看这个时候savex和savey的值是否正确!if(n>=5){ s=getpixel(savex,savey);cleardevice();settextstyle(TRIPLEX_FONT,HORIZ_DIR,5);setcolor(RED);if(s==BLACK)outtextxy(200,200,"BLACK WIN");else if(s==WHITE)outtextxy(200,200,"WHITE WIN")...

求一个简单的JAVA五子棋代码!! 网上复制的别来了!
\/\/判断谁赢了 public void whoWin(Games wz) { \/\/ 从数组挨个查找找到某个类型的棋子就从该棋子位置向右,向下,斜向右下 各查找5连续的位置看是否为5个相同的 int xlabel;\/\/ 记录第一次找到某个棋子的x坐标 int ylabel;\/\/ 记录第一次找到某个棋子的y坐标 \/\/ ●○╋ \/\/ 判断人是否赢了 ...

下了个JAVA五子棋代码不会看 求注释
color_Qizi=1; \/\/下一步棋颜色为黑色 } g.fillOval(x-10,y-10,20,20); \/\/画一个圆,前面两个参数是左上角坐标 intGame_Body[x\/20][y\/20]=color_Qizi+1; \/\/棋盘状态中这个位置上相应地添上棋子,1为白棋2为黑棋0为空位置 if (Game_win_1(x\/20,y\/20)) \/\/判断输赢,这么几个...

求五子棋获胜的算法
在确认下子的同时,获取当前位置的坐标,然后分别从8个方向上计算属于同一个玩家的棋子,即左、右、上、下、左上、右下、右上、左下,只要有在同一直线上的两个方向上的棋子之和为5,就判断该玩家取得胜利。\/*输赢判断语句*\/ winFail(){ \/*往左数*\/ int k,l,count1=0,count2=0,count3=...

相似回答