求JAVA高手帮助 我想写一个黑白棋的JAVA代码,想用键盘的箭头键实现光标的移动,并在输入回车后标记

求JAVA高手帮助我想写一个黑白棋的JAVA代码,想用键盘的箭头键实现光标的移动,并在输入回车后标记,我想给一个变量设置为A(i,j,k,z)。ijkz分别代表该位置的横... 求JAVA高手帮助
我想写一个黑白棋的JAVA代码,想用键盘的箭头键实现光标的移动,并在输入回车后标记,我想给一个变量设置为A(i,j,k,z)。ijkz分别代表该位置的横坐标,纵坐标,位置标号,和颜色(1为黑,0为白),请问应该怎么实现,或者哪位大侠有简单一点的JAVA黑白棋程序,麻烦给我,我是超级菜鸟,麻烦大侠务必发点简单的程序~~~小弟在此拜谢~~
展开
 我来答
牢鼠
2012-06-03
知道答主
回答量:71
采纳率:0%
帮助的人:22.8万
展开全部
package com.test;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
public class GameDemo2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MainWindow mw=new MainWindow();
mw.setSize(400,400);
mw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mw.setVisible(true);
//mw.setResizable(false);

}

}

class MainWindow extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
NewPanel mp=null;
JButton jbt1;
JButton jbt2;
JButton jbt3;
JButton jbt4;
int flag=-1;
JPanel jp=null;

public MainWindow(){
//初始化组件
mp=new NewPanel();
mp.addMouseListener(mp);
jbt1=new JButton("O 先手");
jbt2=new JButton("X 先手 ");
jbt3=new JButton("RESET");
jbt4=new JButton("EXIT");
jp=new JPanel();
GridLayout gl=new GridLayout(4,1);
gl.setHgap(4);
gl.setVgap(5);
jp.setLayout(gl);
jp.add(jbt1);
jp.add(jbt2);
jp.add(jbt3);
jp.add(jbt4);
this.add(mp,BorderLayout.CENTER);
this.add(jp,BorderLayout.EAST);
jbt1.addActionListener(this);
jbt2.addActionListener(this);
jbt3.addActionListener(this);
jbt4.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jbt1){
flag=1;
mp.setHand(0);
jbt1.setEnabled(false);
jbt2.setEnabled(false);
}
if(e.getSource()==jbt2){
flag=2;
mp.setHand(1);
jbt1.setEnabled(false);
jbt2.setEnabled(false);
}
if(e.getSource()==jbt3){
flag=3;
mp.getGraphics().dispose();
this.remove(mp);

mp=new NewPanel();
this.add(mp,BorderLayout.CENTER);
mp.addMouseListener(mp);

this.remove(jp);
jp=new JPanel();
GridLayout gl=new GridLayout(4,1);
gl.setHgap(4);
gl.setVgap(5);
jp.setLayout(gl);
jp.add(jbt1);
jp.add(jbt2);
jp.add(jbt3);
jp.add(jbt4);
this.add(jp,BorderLayout.EAST);
this.validate();
jbt1.setEnabled(true);
jbt2.setEnabled(true);
}
if(e.getSource()==jbt4){
flag=4;
jbt1.setEnabled(false);
jbt2.setEnabled(false);
System.exit(0);
}
}
public int getFlag(){
return flag;
}
}

//画板
class NewPanel extends JPanel implements MouseListener{

/**
*
*/
private static final long serialVersionUID = 1L;
//记录画图的位置
int xx,yy;
//flag表示是否是初始化
int flag;
//0画X,1画0,2不画
int kind;
//记录是有有图形的数组
//a[i]=0代表是空白可以画 a[i]=1代表X a[i]=2代表画O
int []a=null;
//记录当前鼠标位置所在方格,便于判断是否可以继续画
int curLoc;
//记录谁先手 0-0 1-X
int firstHand;
int times;
//0-O 1-X
int whoWin;

public void setFlag(int f){
flag=f;
}
public void setHand(int h){
firstHand=h;
}
public void setWhoWin(){
whoWin=-1;
}
public NewPanel(){
xx=0;
yy=0;
flag=0;
a=new int[9];
kind=-1;
curLoc=0;
whoWin=-1;
firstHand=-1;
times=1;
whoWin=-1;
}
public void paint(Graphics g){
//super.paint(g);
g.drawRect(0, 0, 300, 300);
g.drawRect(0, 100, 300, 100);
g.drawRect(100, 0, 100, 300);

if(flag==1){
if(isFull()==false){
if(testWin()==false){
if((times+firstHand)%2==0){
if(a[curLoc]==0){
g.drawLine(xx,yy,xx+60,yy+60);
g.drawLine(xx+60, yy, xx, yy+60);
a[curLoc]=1;
times++;
if(testWin()==true){
System.out.println("X赢了");
}
}
}
if((times+firstHand)%2==1){
if(a[curLoc]==0){
g.drawOval(xx,yy,60,60);
a[curLoc]=2;
times++;
if(testWin()==true){

System.out.println("O赢了");

}
}
}
}
}else{
System.out.println("it is FULL!!!");
}
}
}

//将鼠标的坐标转换为所画图形的基准坐标 ,返回当前鼠标在记录数组a中的下标
//圆形为外接矩形的左上角
//X为左上角起始点的坐标
public int Format(int x,int y,int kind){
//第一行第一列
int loc=-1;
if(x>=0&&x<100&&y>=0&&y<100){
xx=20;
yy=20;

loc= 0;
}
//第一行第二列
if(x>=100&&x<200&&y>=0&&y<100){
xx=120;
yy=20;

loc= 1;
}
//第一行第三列
if(x>=200&&x<300&&y>=0&&y<100){

xx=220;
yy=20;

loc= 2;
}
//第二行第一列
if(x>=0&&x<100&&y>=100&&y<200){

xx=20;
yy=120;

loc= 3;

}
//第二行第二列
if(x>=100&&x<200&&y>=100&&y<200){

xx=120;
yy=120;

loc= 4;
}
//第二行第三列
if(x>=200&&x<300&&y>=100&&y<200){

xx=220;
yy=120;

loc= 5;
}
//第三行第一列
if(x>=0&&x<100&&y>=200&&y<300){

xx=20;
yy=220;

loc= 6;
}
//第三行第二列
if(x>=100&&x<200&&y>=200&&y<300){

xx=120;
yy=220;

loc= 7;
}
//第三行第三列
if(x>=200&&x<300&&y>=200&&y<300){

xx=220;
yy=220;

loc= 8;
}
return loc;
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
xx=e.getX();
yy=e.getY();
flag=1;

//kind=new Random().nextInt(3);
curLoc=Format(xx,yy,kind);
this.repaint();
}
//判断是否可以继续画的函数
public boolean isFull(){
for(int i=0;i<9;i++)
if(a[i]!=1&&a[i]!=2)
return false;
return true;
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}

public boolean testWin(){
boolean isWin=false;
//a[0]=1
if(a[0]!=0&&a[0]==a[1]&&a[0]==a[2]){
whoWin=a[0];
isWin=true;
}
if(a[0]!=0&&a[3]==a[0]&&a[0]==a[6]){
whoWin=a[0];
isWin=true;
}
if(a[0]!=0&&a[0]==a[4]&&a[0]==a[8]){
whoWin=a[0];
isWin=true;
}
if(a[1]!=0&&a[1]==a[4]&&a[1]==a[7]){
whoWin=a[1];
isWin=true;
}
if(a[2]!=0&&a[2]==a[4]&&a[2]==a[6]){
whoWin=a[2];
isWin=true;
}
if(a[2]!=0&&a[2]==a[5]&&a[2]==a[8]){
whoWin=a[2];
isWin=true;
}
if(a[3]!=0&&a[3]==a[4]&&a[3]==a[5]){
whoWin=a[3];
isWin=true;
}
if(a[6]!=0&&a[6]==a[7]&&a[6]==a[8]){
whoWin=a[6];
isWin=true;
}

return isWin;
}

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

//重新设置初始值
public void reset(){
this.getGraphics().dispose();

xx=0;
yy=0;
flag=0;
a=new int[9];
kind=-1;
curLoc=0;
whoWin=-1;
firstHand=-1;
times=1;
whoWin=-1;
}

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式