这个小游戏是我和我姐们儿的JAVA课程设计,也是我做的第一个JAVA项目,适合初学者,希望能帮到那些被JAVA课设所困扰的孩纸们~~~
一、该游戏需要实现
1、设计主框架,界面。
2、利用ActionListener接口实现按钮事件的监听。
3、重新开始功能的实现。
4、悔棋功能的实现。
5、退出功能的实现。
6、棋盘中棋子点类的定义。
7、利用MouseListener接口实现事件监听,并实现接口里的所有方法。
8、当鼠标移动到棋盘上的交点上,且该点上无棋子时能够变成小手形状。
9、点击棋盘时,利用if语句判断该点是否点在交点上,并利用foreach语句和棋子类中的getX(),getY()方法遍历每一个棋子的位置判断该点是否有棋子。
10、当判断到可以在所点击的点上下子时,画棋子时利用for循环遍历已有的每一个点并利用Graphics类的setColor设置颜色,利用Graphics类的fillOval方法设置形状大小。
11、当画完棋子时要及时判断输赢,用棋子所在索引和for循环遍历最后一个棋子的各个方向,如果有在同一条直线上的棋子个数大于等于五的即当前棋子所代表的那方赢。
12、胜负已定的时候,能够弹出相应的信息。
二、功能代码实现
2.1进入游戏
public static void main(String[] args) {
StartChessJFrame f=new StartChessJFrame();//创建主框架
f.setVisible(true);//显示主框架
}
2.2初始化,定义一些要用到的量。
private ChessBoard chessBoard;//对战面板
private Panel toolbar;//工具条面板
private Button startButton;//设置开始按钮
private Button backButton;//设置悔棋按钮
private Button exitButton;//设置退出按钮
2.3界面的构造方法(游戏的框架)
public StartChessJFrame(){
setTitle("单机版五子棋");//设置标题
chessBoard=new ChessBoard();//初始化面板对象,创建和添加菜单
MyItemListener lis=new MyItemListener();//初始化按钮事件监听器内部类
toolbar=new Panel();//工具面板栏实例化
startButton=new Button("重新开始");
backButton=new Button("悔棋");
exitButton=new Button("退出");//三个按钮初始化
toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));//将工具面板按钮用FlowLayout布局
toolbar.add(backButton);
toolbar.add(startButton);
toolbar.add(exitButton);//将三个按钮添加到工具面板上
startButton.addActionListener(lis);
backButton.addActionListener(lis);
exitButton.addActionListener(lis);//将三个按钮事件注册监听事件
add(toolbar,BorderLayout.SOUTH);//将工具面板布局到界面南方也就是下面
add(chessBoard);//将面板对象添加到窗体上
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置界面关闭事件
pack();//自适应大小
}
2.4按钮的实现与监听(构造方法内部)
MyItemListener lis=new MyItemListener();//初始化按钮事件监听器内部类
toolbar=new Panel();//工具面板栏实例化
startButton=new Button("重新开始");
backButton=new Button("悔棋");
exitButton=new Button("退出");//三个按钮初始化
toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));//将工具面板按钮用FlowLayout布局
toolbar.add(backButton);
toolbar.add(startButton);
toolbar.add(exitButton);//将三个按钮添加到工具面板上
startButton.addActionListener(lis);
backButton.addActionListener(lis);
exitButton.addActionListener(lis);//将三个按钮事件注册监听事件
2.5按钮事件的监听
private class MyItemListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
Object obj=e.getSource();//获取事件源
if(obj==startButton){
System.out.println("重新开始...");//重新开始
//JFiveFrame.this内部类引用外部类
chessBoard.restartGame();
}else if(obj==exitButton){
System.exit(0);//结束应用程序
}else if(obj==backButton){
System.out.println("悔棋...");//悔棋
chessBoard.goback();
}
}
}
2.6重新开始按钮的功能实现
public void restartGame(){//清除棋子
for(int i=0;i
chessList[i]=null;
/*恢复游戏相关的变量值*/
isBack=true;
gameOver=false;//游戏是否结束
chessCount=0;//当前棋盘的棋子个数
repaint();
}
2.7悔棋按钮的功能实现
public void goback(){
if(chessCount==0)
return ;
chessList[chessCount-1]=null;
chessCount--;
if(chessCount>0){
xIndex=chessList[chessCount-1].getX();
yIndex=chessList[chessCount-1].getY();
}
isBack=!isBack;
repaint();
}
2.8当棋盘根据需要变大或变小时窗口应随之发生改变
//Dimension:矩形ChessBoard类内部
public Dimension getPreferredSize(){
return new Dimension(MARGIN*2+GRID_SPAN*COLS,MARGIN*2+GRID_SPAN*ROWS);
}
pack();//自适应大小StartChessBoard类内部
2.9定义棋子类
import java.awt.*;
public class Point {
private int x;//棋子在棋盘中的x索引值
private int y;//棋子在棋盘中的y索引值
private Color color;//颜色
public static int DIAMETER=30;//直径
public Point(int x,int y,Color color){
this.x=x;
this.y=y;
this.color=color;
}
//得到棋子在棋盘中的x索引值
public int getX(){
return x;
}
//得到棋子在棋盘中的y索引值
public int getY(){
return y;
}
//得到棋子颜色
public Color getColor(){
return color;
}
}
三、功能部分代