谁能帮我写一个JAVA人人对战的五子棋?可以不用写判断!不用窗口,命令行直接运行就行了!

不需要用窗口运行!只需要命令行直接运行就行了!... 不需要用窗口运行!
只需要命令行直接运行就行了!
展开
 我来答
大罗鸽
推荐于2016-03-21 · TA获得超过227个赞
知道小有建树答主
回答量:189
采纳率:0%
帮助的人:126万
展开全部
package com.java.demo1;

import javax.swing.* ;
import java.awt.*;
import java.awt.event.*;
/**
* 自定义五子棋棋盘面板类
*
*/

public class Gobang extends JPanel{
//棋盘数组,用于记录棋盘上每个棋子颜色值0-无子 1-黑子 2-白子的位置
public int[][] chessArr=new int[15][15];
public boolean isBlack=true;

//构造器
public Gobang(){
//为当前面板类添加事件监听器
this.addMouseListener(new MyMouseListener());

//设置面板的背景色浅灰色
this.setBackground(Color.lightGray);
}

//内部类InnerClass
class MyMouseListener extends MouseAdapter{
//事件处理方法:鼠标点击时执行
public void mouseClicked(MouseEvent e){
gobangMouseClicked(e);

}
}

//事件处理方法:鼠标点击时执行
public void gobangMouseClicked(MouseEvent e){
//获取当前鼠标点击的坐标
int x=e.getX();
int y=e.getY();

//换算成棋盘数组chenssArr对应的下标
int i=x/40;
int j=y/40;

//JOptionPane.showMessageDiaglog(Gobang.this,i+","j+);
if(i>=15||j>=15){
return;
}

if(chessArr[i][j]!=0){
JOptionPane.showMessageDialog(this,"此处已有棋子");
return;
}

this.chessArr[i][j]=isBlack?1:2;

//重绘棋盘面板
this.repaint();

//判断是否五子连珠
boolean flag=isWin(i,j);
if(flag){
String msg=isBlack?"黑放获胜!":"白放获胜!";
JOptionPane.showMessageDialog(Gobang.this,"恭喜,"+msg);
return;
}

//切换对方落子
isBlack=!isBlack;
}

//判断给定的棋子是否五子连珠
private boolean isWin(int xPos, int yPos) {
int currColor=isBlack?1:2;
int count=0; //计数器
// 横向
for(int i=0;i<15;i++){
if(chessArr[i][yPos] == currColor){
count++;
if(count==5)
return true;
}else{
count=0; //清0
}
}

//纵向
for(int i=0;i<15;i++){
if(chessArr[xPos][i]==currColor){
count++;
if(count==5)
return true;
}else{
count=0; //清0
}
}

//左斜\
//左斜向上
for(int i=xPos-1,j=yPos-1;i>=0&&j>=0;i--,j--){
if(chessArr[i][j]==currColor){
count++;
}else{
break;
}
}
if(count>=4){
return true;
}else{
count=0;
}
//左斜向下
for(int i=xPos+1,j=yPos-1;i<15&&j<15;i++,j++){
if(chessArr[i][j]==currColor){
count++;
}else{
break;
}
}

//右斜/
/*for(int i=xPos+1,j=yPos-1;i>=0&&j>=0;i--,j--){
if(chessArr[i][j]==currColor){
count++;
}else{
break;
}
}
if(count>=4){
return true;
}else{
count=0;
}
//左斜向下
for(int i=xPos+1,j=yPos-1;i<=0&&j<=0;i++,j--){
if(chessArr[i][j]==currColor){
count++;
}else{
break;
}
}*/

return false;
}

//重写画板paint的方法
public void paint(Graphics g){
super.paint(g);//先调用父类的paint

Graphics2D g2d=(Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

//绘制自己的图形
/*g2d.drawLine(100,100,200,200);
g2d.fillOval(100,100,100,100);*/

//绘棋盘
for(int i=0;i<15;i++){
g2d.drawLine(20,20+40*i,14*40+20,20+40*i);
g2d.drawLine(20+40*i,20,20+40*i,14*40+20);
}

//画棋子
//扫描二维棋盘数组chessArr
for(int i=0;i<15;i++){
for(int j=0;j<15;j++){
if(chessArr[i][j]==1){
//画黑子
g.setColor(Color.BLACK);
g.fillOval(40*i+5, 40*j+5, 30, 30);
}else if(chessArr[i][j]==2){
//画白子
g.setColor(Color.WHITE);
g.fillOval(40*i+5, 40*j+5, 30, 30);
}

}
}
}

//入口主函数
public static void main(String[] args){
//创建窗体对象
JFrame gobangFrm=new JFrame("Java五子棋V1.0");

gobangFrm.setSize(650,650);//设置窗体的大小
gobangFrm.setLocationRelativeTo(null);//显示在屏幕正中央
gobangFrm.setResizable(false);//设置窗体尺寸固定

//创建五子棋棋盘面板类对象
Gobang gobangPnl=new Gobang();
//将棋盘面板放入主界面窗体
gobangFrm.setContentPane(gobangPnl);

gobangFrm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

//显示主界面
gobangFrm.setVisible(true);

}

}

用eclipse编译一下就能玩了
帅小武说
2014-12-12 · TA获得超过131个赞
知道小有建树答主
回答量:473
采纳率:0%
帮助的人:202万
展开全部
可以写个web版本的,两台电脑联局域网对下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式