Java实现五子棋(附详细源码)

本文详述了使用Java实现五子棋游戏的过程,旨在帮助初学者理解游戏逻辑。内容包括创建棋盘、实现下棋功能和简单人机对战。提供了MyFrame.java、MyPanel.java和StartEntrance.java等关键代码段。
摘要由CSDN通过智能技术生成

这篇文章主要为大家详细介绍了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, "是否保存设置并重新开始",
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值