基于Java的图形化界面的四子棋小游戏

本文介绍了一位Java新手制作的四子棋小游戏,包括Gamejilu、Judge、Main、Running、Start、Shengli、Video七大类的设计与实现。通过UML图展示了类间关系,详细描述了Main类的初始化、Start类的游戏界面设计、Running类的落子判断和胜利检测、Gamejilu类的游戏记录、Video类的背景音乐播放以及Judge类的棋局判断。游戏界面包含开始、记录和退出功能,并提供了胜利和平局的界面反馈。项目中使用jl1.0.1.jar库处理音频,未来可能考虑优化路径处理和发布新版本。
摘要由CSDN通过智能技术生成

写在前面:本人是一个实实在在的Java新人。这个项目是我的一次大作业,由于是第一版本,所以目前的功能也只是基本实现。代码的实现是没有问题的,关于代码的优化的方向,还有一些目前的bug我也会在文章中说明,大家可以共同研究,共同进步的。


实现方式

设计了七个类,分别是Gamejilu类、Judge类、Main类、Running类、Shengli类、Start类、Video类。

对应的类的功能见下表:

实现的功能
Main 实现了初始化了一个Start类的对象
Start 提供了游戏开局的功能选择菜单,包括开始游戏、游戏记录、退出游戏等选项
Running 表示用户在Start类中点击“开始游戏”后进入的界面
Gamejilu 表示用户在Start类中点击“游戏记录”后进入的界面
Video 主要用于播放背景音乐
Judge 该类中用于判断当前落下的棋子会不会造成胜利
Shengli 用来实现胜利的界面和背景音效,并对游戏结果记录

系统流程图

盗版必究

各个类的UML图的关系

注:存在参考价值,但参考价值不大。

盗版必究

类的详细设计及实现

  • Main类

    该类主要用于实现一个游戏类的初始化。
    在这里插入图片描述

  • Start类

    该类继承于JFrame,并添加了监视器窗口。在构造方法中,对游戏的界面做了调整,使该游戏在任何电脑上运行都处于中间位置,并固定1280*700的界面。对游戏的画面进行了调整,插入了背景图片置于底部,同时也添加了背景音乐,使用户的游戏体验感更强。加入“开始游戏”、“游戏记录”、“退出游戏”的三个功能的按钮,并对这三个按钮添加了监视器,在监视器中针对不同情况,生成不同的类来使游戏继续。
    在这里插入图片描述

  • Running类

    该类继承于JFrame,并添加了监视器窗口。在该类中首先对背景进行了绘制,添加了四子棋的背景图片,接着用6*7个JPanel作为每一个棋子,通过对界面的游戏棋局进行二维布局,来实现对棋子落下的这一操作。添加七个JButton按钮,对每一列按钮的落下进行监视。点击按钮的过程中,通过对按钮的被按下的次数进行判断,进而确定面板的颜色,对面板进行绘色并添加到界面中。并且在添加面板的过程中,对每一个落子进行判断,判断落下去该子之后,该子颜色的一方是否赢得胜利。实现了在胜利之后,所有按钮全部失灵。
    在这里插入图片描述

  • Gamejilu类

    该类继承于JFrame,并添加了监视器窗口。在游戏记录类里面,设计了一个新的窗口,窗口中JTextArea用来存放从文件中读取的内容。并在窗口中添加了一个JButton用于清除窗口上显示的内容和文件中存储的内容。
    在这里插入图片描述

  • Video类

    该类继承于Thread类,这个线程的目标是实现背景音乐的播放。主要是对于音乐文件读取并进行播放。
    在这里插入图片描述

  • Judge类

    该类主要实现对新加入的棋子进行线性探测。由num表示探测到棋子的总数,先进行左右探测,如果左右相同的数字num大于4,则生成该落子颜色的一方胜利的对象。如果num小于4,则num置零。同理,对左斜线上和右斜线上的相同颜色的棋子进行线性探测。右移四子棋的游戏规则,所以只需要对下方的棋子探测即可,新落下的棋子的上方是没有棋子的。
    在这里插入图片描述

  • Shengli类

    该类继承于JFrame,主要用于生成一个胜利的小窗口界面,在小窗口中显示游戏的胜利方,添加胜利的背景音效,并对游戏进行记录,得到游戏的结果,将游戏的结果存储到文本文件中。
    在这里插入图片描述

主要代码实现

想了很久,主要讲什么,发现自己可以讲出来的很少,就挑几个自己觉得写的还可以、有代表性的列了出来,其实看注释就可以理解的差不多了,我在下面也注释了实现的过程。

  • Video类的实现
public class Video extends Thread {
   
	/**
	 * 创作者:渺辰
	 * 版权所属
	 */
	private String string;
	private String str;
	private File file;
	private FileInputStream fi;
	private Player player;
	private BufferedInputStream bi;

	Video(String string) {
   
		this.string = string;
		try {
   
			str = this.getClass().getResource("").toURI().getPath();
		} catch (URISyntaxException e1) {
   
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} // 找到绝对路径,需要注意中文路径存在问题
			// System.out.println(str);
		str = str.substring(1, str.length() - 13);// 裁剪得到想要的路径
		str = str + "/src" + string;
		file = new File(str);// 我的里面存在中文路径,得到绝对路径以后需要转化为utf-8编码

		// System.out.println(str);
	}

	public void run() {
   //找到要播放的文件的路径地址
		if(this.string == null)
			return;
		
		try {
   
			fi = new FileInputStream(file);
			bi = new BufferedInputStream(fi);
			player = new Player(bi);
			
			while(true) 
				player.play();
						 
		} catch (Exception e) {
   
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
   
			 try {
   
				 player
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值