这篇文章主要为大家详细介绍了Java实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
五子棋是一种两人对弈的纯策略型棋类游戏,棋具与围棋通用,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
前面在实现完一个JAVA的面板之后,就想着继续实现一个相较于面板更复杂一点的程序——五子棋。但是我在在搜索资料的时候,发现网上很多关于五子棋实现的博文都是一步到位,直接给个源代码,不是很适合新手学习。所以我这里打算记录一下自己实现五子棋的整个过程,大致会分为三四个阶段。今天我们先来实现第一个阶段的五子棋。同样的我们在着手写代码之前我们需要先做一些准备。
一个简单的JAVA小项目,主要实现的功能有:
一、下棋功能,在棋盘的交点处落子。
二、简单人机对战功能。
图示:
思路:1.首先构建一个Frame框架,来设置菜单选项与按钮点击事件。
MyFrame.java文件代码如下
package StartGame;
import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRadioButtonMenuItem;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
//窗体框架类
public class MyFrame extends JFrame {
// static boolean canPlay1 = false;判断是否可以开始游戏
final MyPanel panel = new MyPanel();
public MyFrame() {
// 设置窗体的大小并居中
this.setSize(500, 600); // 设置窗体大小
this.setTitle("五子棋游戏"); // 设置窗体标题
int width = Toolkit.getDefaultToolkit().getScreenSize().width;// 获取屏幕的宽度
int height = Toolkit.getDefaultToolkit().getScreenSize().height;// 获取屏幕的高度
this.setLocation((width - 500) / 2, (height - 500) / 2); // 设置窗体的位置(居中)
this.setResizable(false); // 设置窗体不可以放大
// this.setLocationRelativeTo(null);//这句话也可以设置窗体居中
/*
* 菜单栏的目录设置
*/
// 设置菜单栏
JMenuBar bar = new JMenuBar();
this.setJMenuBar(bar);
// 添加菜单栏目录
JMenu menu1 = new JMenu("游戏菜单"); // 实例化菜单栏目录
JMenu menu2 = new JMenu("设置");
JMenu menu3 = new JMenu("帮助");
bar.add(menu1); // 将目录添加到菜单栏
bar.add(menu2);
bar.add(menu3);
JMenu menu4 = new JMenu("博弈模式"); // 将“模式”菜单添加到“设置”里面
menu2.add(menu4);
// JMenuItem item1=new JMenuItem("人人博弈");
// JMenuItem item2=new JMenuItem("人机博弈");
// 设置“”目录下面的子目录
JRadioButtonMenuItem item1 = new JRadioButtonMenuItem("人人博弈");
JRadioButtonMenuItem item2 = new JRadioButtonMenuItem("人机博弈");
// item1按钮添加时间并且为匿名类
item1.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
Icon icon = new Icon() {
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
// TODO Auto-generated method stub
}
@Override
public int getIconWidth() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getIconHeight() {
// TODO Auto-generated method stub
return 0;
}
};
Object[] options = { "保存并重新开始游戏", "不,谢谢" };
int n = JOptionPane.showOptionDialog(null, "是否保存设置并重新开始", "人机博弈设置", 0, 1, icon, options, "保存并重新开始游戏");
if (n == 0) {
panel.setIsManAgainst(true);
panel.Start();
item1.setSelected(true);
}
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
});
// 设置item2按钮的事件监听事件,也就是设置人机博弈
item2.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
Icon icon = new Icon() {
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
// TODO Auto-generated method stub
}
@Override
public int getIconWidth() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getIconHeight() {
// TODO Auto-generated method stub
return 0;
}
};
Object[] options = { "保存并重新开始游戏", "不,谢谢" };
int n = JOptionPane.showOptionDialog(null, "是否保存设置并重新开始", "人机博弈设置", 0, 1, icon, options, "保存并重新开始游戏");
if (n == 0) {
panel.setIsManAgainst(false);
panel.Start();
item2.setSelected(true);
}
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
});
// 设置按钮组并把人机博弈与人人博弈添加到一个按钮组里面
ButtonGroup bg = new ButtonGroup();
bg.add(item1);
bg.add(item2);
// 将按钮组添加到菜单里面
menu4.add(item1);
menu4.add(item2);
item2.setSelected(true);
// 先行设置
JMenu menu5 = new JMenu("先行设置"); // 将“先行设置”菜单添加到“设置”里面
menu2.add(menu5);
// 设置黑子先行还是白字先行的按钮
JRadioButtonMenuItem item3 = new JRadioButtonMenuItem("黑方先行");
JRadioButtonMenuItem item4 = new JRadioButtonMenuItem("白字先行");
// 设置item3的鼠标点击事件,设置黑方先行
item3.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
Icon icon = new Icon() {
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
// TODO Auto-generated method stub
}
@Override
public int getIconWidth() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getIconHeight() {
// TODO Auto-generated method stub
return 0;
}
};
Object[] options = { "保存并重新开始游戏", "不,谢谢" };
int n = JOptionPane.showOptionDialog(null, "是否保存设置并重新开始",