JAVA高手接招————— 五子棋双人对弈程序

[复制链接]
查看11 | 回复0 | 2009-6-16 07:20:56 | 显示全部楼层 |阅读模式
新建一个chess类,其中代码如下package work;import java.awt.Color;public class Chess { public static final int diamter=30; private int x;//在网格中的索引,0~15 private int y;//在网格中的索引,0~15 private Color color; public Color getColor() {return color; } public void setColor(Color color) {this.color = color; } 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 Chess(int x, int y, Color color) {super();this.x = x;this.y = y;this.color = color; } }然后在同一个包中新建FirstFrame类。代码如下package work;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;//主函数public class FirstFrame{ public static void main(String[] args) {
FirstFrame1 f=new FirstFrame1();
f.setVisible(true);}}//窗体函数class FirstFrame1 extends JFrame implements ActionListener{ JMenuBar menuBar; JMenu sysMenu; JMenuItem startMenuItem; JMenuItem backMenuItem; JMenuItem exitMenuItem; DrawPanel myPanel=new DrawPanel();public FirstFrame1(){super("娃哈哈");
add(myPanel);menuBar=new JMenuBar();setJMenuBar(menuBar);sysMenu=new JMenu("系统(s)");sysMenu.setMnemonic('s');menuBar.add(sysMenu);startMenuItem=new JMenuItem("开始");backMenuItem=new JMenuItem("悔棋");exitMenuItem=new JMenuItem("退出");sysMenu.add(startMenuItem);sysMenu.add(backMenuItem);sysMenu.addSeparator();sysMenu.add(exitMenuItem);startMenuItem.addActionListener(this);backMenuItem.addActionListener(this);exitMenuItem.addActionListener(this);super.setSize(600,650);super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void actionPerformed(ActionEvent e){Object obj=e.getSource();if(obj==startMenuItem){ myPanel.start(); //DrawPanel p=new DrawPanel();是错的;}else if(obj==backMenuItem){ myPanel.back();}else{ System.exit(0);} }}最后新建一个DrawPanel类代码如下package work;import java.awt.Color;import java.awt.Cursor;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import sun.awt.geom.AreaOp.AddOp;//画柄;class DrawPanel extends JPanel implements MouseListener,MouseMotionListener{ final int MARGIN_TOP=60; final int MARGIN_LEFT=30; final int CELL_WIDTH=35; final int COLS=15; final int ROWS=15;
Chess[] chessList=new Chess[(COLS+1)*(ROWS+1)];
int chessCount=0;
boolean isBlack=true;
boolean gameOver=false;
public DrawPanel(){
//构造函数Color color=new Color(200,250,200);setBackground(color);this.addMouseMotionListener(this);this.addMouseListener(this); } public void start(){for(int i=0;iCOLS||y>ROWS)
//超出棋盘边界 super.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));if(findChess(x,y))
//下过的地方不能再下 super.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));if(gameOver) super.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); }public void mousePressed(MouseEvent e) {
int x=(e.getX()-MARGIN_LEFT+Chess.diamter/2)/CELL_WIDTH;int y=(e.getY()-MARGIN_TOP+Chess.diamter/2)/CELL_WIDTH;if(xCOLS||y>ROWS)
//超出棋盘边界 return;Color color=Color.black;if(!isBlack)
// 变颜色 color=Color.white;if(findChess(x,y))
//下过的地方不能再下 return;if(gameOver) return;chessList[chessCount]=new Chess(x,y,color);repaint();
//重绘isBlack=!isBlack;chessCount++;String colorStr=color==Color.white?"白方":"黑方";int[] count={0,0,0,0};for(int i=x-1;i>=0;i--){ if(findChess(i,y,color)){
count[0]++; } else
break;}for(int i=x+1;i=0;i--){ if(findChess(x,i,color)){
count[1]++; } else
break;}for(int i=y+1;i=0&&j>=0;i--,j--){
if(findChess(i,j,color)){
count[3]++; } else
break;
}for(int i=x+1,j=y-1;i=0;i++,j--){
if(findChess(i,j,color)){
count[3]++;
}
else
break;}for(int i=x-1,j=y+1;i>=0&&j=4){
gameOver=true;
JOptionPane.showMessageDialog(this, "恭喜"+colorStr+"胜利");
return; } }
System.out.println(e.getX()+","+e.getY());
} public boolean findChess(int x,int y){for(int i=0;i<chessCount;i++){ if(chessList.getX()==x && chessList.getY()==y)
return true;}return false; }public boolean findChess(int x,int y,Color color){for(int i=0;i<chessCount;i++){ if(chessList.getX()==x && chessList.getY()==y && chessList.getColor()==color)
return true;}return false; }}如果不行就hi我
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行