【课程设计】基于java的连连看小游戏,附源码+报告 您所在的位置:网站首页 java设计扫雷游戏代码怎么写 【课程设计】基于java的连连看小游戏,附源码+报告

【课程设计】基于java的连连看小游戏,附源码+报告

2024-07-08 05:06| 来源: 网络整理| 查看: 265

1、项目介绍

窗口中只有一个“文件”菜单,其中包括了开始游戏、重来一次、炸弹以及退出。点击文件菜单中的开始游戏选项,系统开始计时(初始时间为600秒,即10分钟),图片的消除规则主要是通过不转弯或者转一次弯,或者转两次弯可以连接的两张相同的图片。当消除一对图片时,图片自动清除。该游戏还提供了一个作弊功能,通过“文件”菜单中的“炸弹”选项可以自动消除一对符合消除条件的图片,炸弹的初始值为3,也就是说只能使用三次系统提供的自动消除功能。如果时间用完了但是在游戏区域还有图片没有消除完,则游戏结束,系统会弹出一个对话框,提示玩家时间到了,点击确认按钮,会弹出一个对话框,询问玩家是否重玩一次,点击“是”,则重新开始游戏,点击“否”,则退出游戏,返回最原始的空白界面。

游戏图片在文件Resource文件夹中,游戏界面的初始化是从游戏的地图开始的,游戏地图的选取主要是通过随机产生的。根据游戏规则来开始游戏,符合规则的图片,将在地图中清除掉。游戏中碰到找不到符合规则的图片时,可以选择“文件”菜单中的炸弹按钮,它主要是通过系统自动查找到两张符合规则的图片,然后系统自动将这一对符合条件的图片清除掉。当所有图片清除成功的时候,系统会弹出一个对话框提示你“通关成功”,点击确认按钮可以返回到空白的界面。

2、演示视频

【课程设计】基于java的连连看小游戏,附源码+报告

3、项目截图

4、文档截图

5、代码示例 import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JOptionPane; import javax.swing.JPanel; import cn.elva.Settings; import cn.elva.model.ArrayPoint; import cn.elva.model.Map; public class MapUI extends JPanel implements ActionListener { private static final long serialVersionUID = 1L; //private int bombCount = Settings.BOMBCOUNT; // 棋子数组,用按钮来表示 private ChessButton[] chesses = null; // 数据模型 private Map map = new Map(); // 判断当前点击的棋子是否是第二次选中的 private boolean two = false; // 第一次选中的棋子 private ArrayPoint priviousPoint; // 第二次选中的棋子 private ArrayPoint currPoint; /** * 构造函数 */ public MapUI() { super(); initialize(); } /** * 初始化函数 * * @return void */ private void initialize() { initChesses(); GridLayout gridLayout = new GridLayout(Settings.ROWS + 2, Settings.COLUMNS + 2); gridLayout.setHgap(2); gridLayout.setVgap(2); this.setLayout(gridLayout); this.setSize(300, 200); // 放置按钮,按行 for (int row = 0; row < Settings.ROWS + 2; row++) { for (int col = 0; col < Settings.COLUMNS + 2; col++) { add(chesses[row * (Settings.COLUMNS + 2) + col]); } } } private void initChesses() { int[][] values = map.getMap(); // 初始化棋子,和数据模型里保持一样 this.chesses = new ChessButton[(Settings.ROWS + 2) * (Settings.COLUMNS + 2)]; for (int row = 0; row < 10; row++) { for (int col = 0; col < 10; col++) { // 通过二维的数据模型坐标得到一维的棋子坐标 int index = row * (Settings.COLUMNS + 2) + col; // 对棋子的数据模型,即ArrayPoint对象进行设置,指定此棋子具体的位置和值 chesses[index] = new ChessButton(row, col, values[row][col]); chesses[index].addActionListener(this); // 将外围的一圈设为不可见,行,列为0 和为最大值的情况 if (row == 0 || row == (Settings.ROWS + 2 - 1) || col == 0 || col == (Settings.COLUMNS + 2 - 1)) { chesses[index].setVisible(false); } } } } //清除相同的两个按钮 public void clearCheese(ArrayPoint priviousPoint, ArrayPoint currPoint) { // 处理匹配,看两点中是否联通 // 获得数据模型中的数组 int[][] values = map.getMap(); // 将模型中对应的棋子设为0 values[priviousPoint.getI()][priviousPoint.getJ()] = 0; values[currPoint.getI()][currPoint.getJ()] = 0; // 使两个已经消除的按钮不可见 int index1 = priviousPoint.getI() * (Settings.COLUMNS + 2) + priviousPoint.getJ(); int index2 = currPoint.getI() * (Settings.COLUMNS + 2) + currPoint.getJ(); chesses[index1].setVisible(false);//为true则显示,fasle则不显示 chesses[index2].setVisible(false); // 如果棋子总数已为0,则程序结束 if (map.LEFTCOUNT == 0) { JOptionPane.showMessageDialog(this, "恭喜您通过!!"); } } /** * 事件监听器处理函数,也是处理棋子消除的地方 */ public void actionPerformed(ActionEvent e)//判断两个"按钮"是否相同 { // 获得当前的资源 ChessButton button = (ChessButton) e.getSource(); // 获得当前棋子的数据结构 ArrayPoint p = button.getPoint(); // 如果已有两个棋子选中, 则进行判断操作 if (two) { currPoint = p; if( map.match(this.priviousPoint, this.currPoint)) { clearCheese(this.priviousPoint, this.currPoint); } // 设置为没有两个按钮的选中的状态 two = false; } else { // 将当前点击的棋子赋给变量priviousPoint this.priviousPoint = p; // 标志位设为TRUE,用于点击下个棋子的时候使用 two = true; } } /** * 炸弹的功能 * */ public void bomb() { int[][] values = map.getMap(); ArrayPoint p1 = null; ArrayPoint p2 = null; for (int row = 1; row < Settings.ROWS + 1; row++) { for (int col = 1; col < Settings.COLUMNS + 1; col++) { if (values[row][col] != 0) { p1 = new ArrayPoint(row, col, values[row][col]); for (int i = 1; i < Settings.ROWS + 1; i++) { for (int j = 1; j < Settings.COLUMNS + 1; j++) { if (values[i][j] != 0) { p2 = new ArrayPoint(i, j, values[i][j]); } else { continue; } //System.out.println(p1 + "|" + p2); if (map.match(p1, p2)) { clearCheese(p1, p2); return; } } } } } } } }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有