java写了个安卓java五子棋游戏源码,可以用鼠标控制下棋,现在怎么改成用键盘上下左右加enter控制

基于JAVA的五子棋游戏设计_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于JAVA的五子棋游戏设计
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩39页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢最近用JAVA写了一个简单的五子棋,鼠标点击问题_百度知道
最近用JAVA写了一个简单的五子棋,鼠标点击问题
但是不落子,在IDE下直接运行可以,在CMD下运行,电脑能正常落子,双击运行时.class文件也可以。但是打包成可运行JAR文件后,轮到人落棋子,点击棋盘(JPanel),程序有反应(有refresh())。我的落子用的鼠标监听器中的mouseClicked,请问是什么情况如题
那个棋盘JPanel是repaint()
我有更好的答案
repaint();试试
棋盘是repaint,写错了
为您推荐:
其他类似问题
您可能关注的内容
鼠标点击的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。人工智能-五子棋实现_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
人工智能-五子棋实现
&&这是用权重算法实现的一个五子棋,人机对弈的过程。内附关键代码。
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩26页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢2198人阅读
小项目(7)
1)选择棋子
3)判断胜负
4)交换行棋方
前面我们已经画好棋盘和棋子,并可以自由落子,且可以判断棋盘中是否有五连珠。接下来的工作是,每次落子后交换行棋方(即将下一棋子颜色由白-&黑或黑-&白),并将胜出判断增加颜色判断条件(棋盘上存在五连珠-&棋盘上存在同色的五连珠)。
主模块Main.java和棋子类Chessman.java不变,我们要对DrawChessBoard.java中的落子函数mousePressed和五连珠判断函数isWin做一下调整。
package xchen.test.simpleG
import java.awt.C
import javax.swing.JF
import xchen.test.simpleGobang.DrawChessB
public class Main extends JFrame{
private DrawChessBoard drawChessB
public Main() {
drawChessBoard = new DrawChessBoard();
//Frame标题
setTitle("单机五子棋");
Container containerPane =getContentPane();
containerPane.add(drawChessBoard);
public static void main(String[] args) {
Main m = new Main();
m.setSize(800, 800);
m.setVisible(true);
Chessman.java
package xchen.test.simpleG
public class Chessman {
//1-white,0-black
private boolean placed =
int matchCount = 1;
public Chessman(int color,boolean placed){
this.color=
this.placed=
public boolean getPlaced() {
public void setPlaced(boolean placed) {
this.placed =
public int getColor() {
public void setColor(int color) {
this.color =
第一步,修改mousePressed函数,使得每次落子后,都将行棋方让给对家(即每次落子都改变棋子颜色)
DrawChessBoard.java中的mousePressed函数部分,只要每次都修改chessColor的值即可。
//当用户按下鼠标按钮时发生
public void mousePressed(MouseEvent e) {
int point_x=e.getX();
int point_y=e.getY();
int imgWidth = boardImg.getHeight(this);
int imgHeight = boardImg.getWidth(this);
int FWidth = getWidth();
int FHeight= getHeight();
int x=(FWidth-imgWidth)/2;
int y=(FHeight-imgHeight)/2;
int span_x=imgWidth/ROWS;
int span_y=imgHeight/ROWS;
//System.out.println("press");
int status_x = 0;
int status_y = 0;
if(point_x&=x && point_x&=x+imgWidth && point_y&=y && point_y &= y+imgHeight)
//System.out.println("合法");
for(int i=0;i&ROWS+1;i++)
if(point_x&=x-chessman_width/2+1+i*span_x)
if(point_x&=x+chessman_width/2-1+i*span_x)//如果是width/2会在中间点出现两个匹配值
//System.out.println("point x "+i+" "+point_x+" "+(x-chessman_width/2+i*span_x)+" "+(x+chessman_width/2+i*span_x));
status_x =
for(int i=0;i&ROWS+1;i++)
if(point_y&=y-chessman_width/2+1+i*span_y)
if(point_y &= y+chessman_width/2-1+i*span_y)
//System.out.println("point y "+i+" "+point_y+" "+(y-chessman_width/2+1+i*span_y)+" "+(y+chessman_width/2-1+i*span_y));
status_y =
Chessman chessman = new Chessman(chessColor, true);
chessStatus[status_x][status_y]=
System.out.println("chess color:"+chessColor);
if(chessColor==BLACK)
chessColor = WHITE;
chessColor = BLACK;
repaint();
if(isWin(status_x, status_y, chessStatus))
System.out.println("WIN!!!!!");
第二步,将胜出判断增加颜色判断条件(棋盘上存在五连珠-&棋盘上存在同色的五连珠)
在isWin函数的判断条件上,加上对Chessman.getColor的颜色判断
isWin函数代码
boolean isWin(int point_x,int point_y,Chessman[][] cm)
for(int i=0;i&ROWS+1;i++)
for(int j=0;j&ROWS+1;j++)
//横向查找
if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true)
int matchColor = chessStatus[i][j].getColor();
//向右侧查找
for(int n=1;n&=4;n++)
if((i+n&=0)&&(i+n)&=ROWS)
if(chessStatus[i+n][j]!=null&&chessStatus[i+n][j].getPlaced()==true&&chessStatus[i+n][j].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" right count++:"+(i+n)+" "+j+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
//向左侧查找
for(int n=1;n&=4;n++)
if((i-n&=0)&&(i-n)&=ROWS)
if(chessStatus[i-n][j]!=null&&chessStatus[i-n][j].getPlaced()==true&&chessStatus[i-n][j].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" "+"left count++:"+(i-n)+" "+j+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
if(chessStatus[i-n][j]!=null)
chessStatus[i][j].matchCount = 1;
chessStatus[i][j].matchCount=1;//refresh count
for(int i=0;i&ROWS+1;i++)
for(int j=0;j&ROWS+1;j++)
if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true)
int matchColor = chessStatus[i][j].getColor();
//向下查找,左上角为坐标原点,y轴正方向向下
for(int n=1;n&=4;n++)
if((j+n&=0)&&(j+n)&=ROWS)
if(chessStatus[i][j+n]!=null&&chessStatus[i][j+n].getPlaced()==true&&chessStatus[i][j+n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" up count++:"+(i)+" "+(j+n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
//向上查找
for(int n=1;n&=4;n++)
if((j-n&=0)&&(j-n)&=ROWS)
if(chessStatus[i][j-n]!=null&&chessStatus[i][j-n].getPlaced()==true&&chessStatus[i][j-n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" "+"left count++:"+(i)+" "+(j-n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
if(chessStatus[i][j-n]!=null)
chessStatus[i][j].matchCount = 1;
chessStatus[i][j].matchCount=1;//refresh count
//方向:左上右下
for(int i=0;i&ROWS+1;i++)
for(int j=0;j&ROWS+1;j++)
if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true)
int matchColor = chessStatus[i][j].getColor();
//向下查找,左上角为坐标原点,y轴正方向向下
for(int n=1;n&=4;n++)
if((j-n&=0)&&(j-n)&=ROWS&&(i-n)&=0&&(i-n)&=ROWS)
if(chessStatus[i-n][j-n]!=null&&chessStatus[i-n][j-n].getPlaced()==true&&chessStatus[i-n][j-n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" up count++:"+(i-n)+" "+(j-n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
for(int n=1;n&=4;n++)
if((j+n&=0)&&(j+n)&=ROWS&&(i+n)&=0&&(i+n)&=ROWS)
if(chessStatus[i+n][j+n]!=null&&chessStatus[i+n][j+n].getPlaced()==true&&chessStatus[i+n][j+n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" "+"left count++:"+(i+n)+" "+(j+n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
if(chessStatus[i+n][j+n]!=null)
chessStatus[i][j].matchCount = 1;
chessStatus[i][j].matchCount=1;//refresh count
//方向:左下右上
for(int i=0;i&ROWS+1;i++)
for(int j=0;j&ROWS+1;j++)
if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true)
int matchColor = chessStatus[i][j].getColor();
//向下查找,左上角为坐标原点,y轴正方向向下
for(int n=1;n&=4;n++)
if((j+n&=0)&&(j+n)&=ROWS&&(i-n)&=0&&(i-n)&=ROWS)
if(chessStatus[i-n][j+n]!=null&&chessStatus[i-n][j+n].getPlaced()==true&&chessStatus[i-n][j+n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" up count++:"+(i-n)+" "+(j+n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
for(int n=1;n&=4;n++)
if((j-n&=0)&&(j-n)&=ROWS&&(i+n)&=0&&(i+n)&=ROWS)
if(chessStatus[i+n][j-n]!=null&&chessStatus[i+n][j-n].getPlaced()==true&&chessStatus[i+n][j-n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" "+"left count++:"+(i+n)+" "+(j-n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
if(chessStatus[i+n][j-n]!=null)
chessStatus[i][j].matchCount = 1;
chessStatus[i][j].matchCount=1;//refresh count
}运行一下!
完整的DrawChessBoard.java
package xchen.test.simpleG
import java.awt.C
import java.awt.G
import java.awt.Graphics2D;
import java.awt.I
import java.awt.RadialGradientP
import java.awt.T
import java.awt.event.MouseE
import java.awt.event.MouseL
import javax.swing.JP
public class DrawChessBoard extends JPanel implements MouseListener{
final static int BLACK=0;
final static int WHITE=1;
public int chessColor = BLACK;
int chessman_width=30;
public Image boardI
final private int ROWS = 19;
Chessman[][] chessStatus=new Chessman[ROWS+1][ROWS+1];
public DrawChessBoard() {
boardImg = Toolkit.getDefaultToolkit().getImage("res/drawable/chessboard2.png");
if(boardImg == null)
System.err.println("png do not exist");
addMouseListener(this);
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
int imgWidth = boardImg.getHeight(this);
int imgHeight = boardImg.getWidth(this);
int FWidth = getWidth();
int FHeight= getHeight();
int x=(FWidth-imgWidth)/2;
int y=(FHeight-imgHeight)/2;
int span_x=imgWidth/ROWS;
int span_y=imgHeight/ROWS;
g.drawImage(boardImg, x, y, null);
for(int i=0;i&ROWS;i++)
g.drawLine(x, y+i*span_y, FWidth-x,y+i*span_y);
for(int i=0;i&ROWS;i++)
g.drawLine(x+i*span_x, y, x+i*span_x,FHeight-y);
for(int i=0;i&ROWS+1;i++)
for(int j=0;j&ROWS+1;j++)
if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true)
//System.out.println("draw chessman "+i+" "+j);
int pos_x=x+i*span_x;
int pos_y=y+j*span_y;
float radius_b=40;
float radius_w=80;
float[] fractions = new float[]{0f,1f};
java.awt.Color[] colors_b = new java.awt.Color[]{Color.BLACK,Color.WHITE};
Color[] colors_w = new Color[]{Color.WHITE,Color.BLACK};
RadialGradientP
if(chessStatus[i][j].getColor()==1)
//System.out.println("draw white chess");
paint = new RadialGradientPaint(pos_x-chessman_width/2f, pos_y-chessman_width/2f, radius_w*2, fractions, colors_w);
//System.out.println("draw black chess");
paint = new RadialGradientPaint(pos_x-chessman_width/2f, pos_y-chessman_width/2f, radius_b*2, fractions, colors_b);
((Graphics2D)g).setPaint(paint);
((Graphics2D)g).fillOval(pos_x-chessman_width/2,pos_y-chessman_width/2,chessman_width,chessman_width);
//当用户按下鼠标按钮时发生
public void mousePressed(MouseEvent e) {
int point_x=e.getX();
int point_y=e.getY();
int imgWidth = boardImg.getHeight(this);
int imgHeight = boardImg.getWidth(this);
int FWidth = getWidth();
int FHeight= getHeight();
int x=(FWidth-imgWidth)/2;
int y=(FHeight-imgHeight)/2;
int span_x=imgWidth/ROWS;
int span_y=imgHeight/ROWS;
//System.out.println("press");
int status_x = 0;
int status_y = 0;
if(point_x&=x && point_x&=x+imgWidth && point_y&=y && point_y &= y+imgHeight)
//System.out.println("合法");
for(int i=0;i&ROWS+1;i++)
if(point_x&=x-chessman_width/2+1+i*span_x)
if(point_x&=x+chessman_width/2-1+i*span_x)//如果是width/2会在中间点出现两个匹配值
//System.out.println("point x "+i+" "+point_x+" "+(x-chessman_width/2+i*span_x)+" "+(x+chessman_width/2+i*span_x));
status_x =
for(int i=0;i&ROWS+1;i++)
if(point_y&=y-chessman_width/2+1+i*span_y)
if(point_y &= y+chessman_width/2-1+i*span_y)
//System.out.println("point y "+i+" "+point_y+" "+(y-chessman_width/2+1+i*span_y)+" "+(y+chessman_width/2-1+i*span_y));
status_y =
if(chessStatus[status_x][status_y]==null||chessStatus[status_x][status_y].getPlaced()==false)
Chessman chessman = new Chessman(chessColor, true);
chessStatus[status_x][status_y]=
System.out.println("chess color:"+chessColor);
if(chessColor==BLACK)
chessColor = WHITE;
chessColor = BLACK;
repaint();
if(isWin(status_x, status_y, chessStatus))
System.out.println("WIN!!!!!");
//当用户按下并松开鼠标按钮时发生
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
boolean isWin(int point_x,int point_y,Chessman[][] cm)
for(int i=0;i&ROWS+1;i++)
for(int j=0;j&ROWS+1;j++)
//横向查找
if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true)
int matchColor = chessStatus[i][j].getColor();
//向右侧查找
for(int n=1;n&=4;n++)
if((i+n&=0)&&(i+n)&=ROWS)
if(chessStatus[i+n][j]!=null&&chessStatus[i+n][j].getPlaced()==true&&chessStatus[i+n][j].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" right count++:"+(i+n)+" "+j+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
//向左侧查找
for(int n=1;n&=4;n++)
if((i-n&=0)&&(i-n)&=ROWS)
if(chessStatus[i-n][j]!=null&&chessStatus[i-n][j].getPlaced()==true&&chessStatus[i-n][j].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" "+"left count++:"+(i-n)+" "+j+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
if(chessStatus[i-n][j]!=null)
chessStatus[i][j].matchCount = 1;
chessStatus[i][j].matchCount=1;//refresh count
for(int i=0;i&ROWS+1;i++)
for(int j=0;j&ROWS+1;j++)
if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true)
int matchColor = chessStatus[i][j].getColor();
//向下查找,左上角为坐标原点,y轴正方向向下
for(int n=1;n&=4;n++)
if((j+n&=0)&&(j+n)&=ROWS)
if(chessStatus[i][j+n]!=null&&chessStatus[i][j+n].getPlaced()==true&&chessStatus[i][j+n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" up count++:"+(i)+" "+(j+n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
//向上查找
for(int n=1;n&=4;n++)
if((j-n&=0)&&(j-n)&=ROWS)
if(chessStatus[i][j-n]!=null&&chessStatus[i][j-n].getPlaced()==true&&chessStatus[i][j-n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" "+"left count++:"+(i)+" "+(j-n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
if(chessStatus[i][j-n]!=null)
chessStatus[i][j].matchCount = 1;
chessStatus[i][j].matchCount=1;//refresh count
//方向:左上右下
for(int i=0;i&ROWS+1;i++)
for(int j=0;j&ROWS+1;j++)
if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true)
int matchColor = chessStatus[i][j].getColor();
//向下查找,左上角为坐标原点,y轴正方向向下
for(int n=1;n&=4;n++)
if((j-n&=0)&&(j-n)&=ROWS&&(i-n)&=0&&(i-n)&=ROWS)
if(chessStatus[i-n][j-n]!=null&&chessStatus[i-n][j-n].getPlaced()==true&&chessStatus[i-n][j-n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" up count++:"+(i-n)+" "+(j-n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
for(int n=1;n&=4;n++)
if((j+n&=0)&&(j+n)&=ROWS&&(i+n)&=0&&(i+n)&=ROWS)
if(chessStatus[i+n][j+n]!=null&&chessStatus[i+n][j+n].getPlaced()==true&&chessStatus[i+n][j+n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" "+"left count++:"+(i+n)+" "+(j+n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
if(chessStatus[i+n][j+n]!=null)
chessStatus[i][j].matchCount = 1;
chessStatus[i][j].matchCount=1;//refresh count
//方向:左下右上
for(int i=0;i&ROWS+1;i++)
for(int j=0;j&ROWS+1;j++)
if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true)
int matchColor = chessStatus[i][j].getColor();
//向下查找,左上角为坐标原点,y轴正方向向下
for(int n=1;n&=4;n++)
if((j+n&=0)&&(j+n)&=ROWS&&(i-n)&=0&&(i-n)&=ROWS)
if(chessStatus[i-n][j+n]!=null&&chessStatus[i-n][j+n].getPlaced()==true&&chessStatus[i-n][j+n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" up count++:"+(i-n)+" "+(j+n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
for(int n=1;n&=4;n++)
if((j-n&=0)&&(j-n)&=ROWS&&(i+n)&=0&&(i+n)&=ROWS)
if(chessStatus[i+n][j-n]!=null&&chessStatus[i+n][j-n].getPlaced()==true&&chessStatus[i+n][j-n].getColor()==matchColor)
chessStatus[i][j].matchCount++;
System.out.println("pos:"+i+" "+j+" "+"left count++:"+(i+n)+" "+(j-n)+" count:"+chessStatus[i][j].matchCount);
if(chessStatus[i][j].matchCount==5)
if(chessStatus[i+n][j-n]!=null)
chessStatus[i][j].matchCount = 1;
chessStatus[i][j].matchCount=1;//refresh count
文章:13篇
阅读:30575
文章:16篇
阅读:2505基于Java的五子棋游戏的设计_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于Java的五子棋游戏的设计
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩22页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 五子棋安卓java 的文章

 

随机推荐