java课程设计 华容道_Java课设-数字华容道

#2019-2020学年第一学期Java课设 # ##一:团队成员介绍及任务分配

####王鑫杰 201821123112 组长

dao模式结合数据库

登录验证

排行榜展示 ####林炜 201821123102 组员

主体代码

游戏主功能

界面设计 ####王粤翰 201821123110 组员

游戏背景音乐配置

编写团队博客

阿里巴巴代码扫描 ##二:项目Git地址 戳我,啊哈 ##三:项目简介

我们设计的华容道游戏可以实现基本的游戏功能。此项目需要先登录(可注册)然后进入游戏主界面,可以在主界面上选择开始游戏、查看排行榜、控制音乐播放、查看游戏规则、退出游戏等系列操作。其中游戏有3*3、4*4或5*5三个不同的游戏难度可供用户选择。完成选择难度地按钮之后便会开始游戏,实现游戏步数的计数,游戏过程中,用鼠标单击任何与格子相邻的方块可以把该方块移入空格子。通过不断地移动方块,可以将方块一行一行地按数字依次排列。若成功完成排列( 即每个方块里面的格子中的数字按顺序排列),则有提示:“You win!”的字样出现,即完成游戏,而后返回主菜单。

##四:项目采用技术

Java swing

MySQL ##五:项目功能架构图与主要功能流程图

2f68a9e12f651b0afa20a546cedc5a9b.png

d8d5f0eafedaf6947337e3c87eaad2fd.png

##六:面向对象设计类图

5b5dd3cbe6dcc60e1f32c320572a928a.png

##七:项目运行过程中主要截图及注解

此处是登陆界面,登陆成功可以直接进入主菜单,账号密码不匹配的话,则提示有误,需重新输出,若输入为空则会提示输出不能为空,并且光标自动聚焦。可以注册生成新的数据,若注册账号重复,则会提示错误,并返回注册界面。

ae8803df12bcb64f5aab538fbbdba5e0.png

6cf5922498ced176d0843d14abf511cb.png

9b968283f63b8b73a1298aed37a59d2b.png

12127e122b085f671b058b23f96e5ea0.png

7ad595d57f56a78fef1c745f0e640518.png

2f80d143ca847a144968b2fbd8e1eb73.png

b78a6ae30a9badb45a71fa32342796bd.png

登陆成功之后则会进入主菜单,进行后续游戏执行

3534becfac3a9368493bb634f2238d96.png

下图为开始游戏,分为三个游戏难度,分别为33、44和5*5 宫格体

5f5be3c58fa60775bbc2fd35a3422ab3.png

e33a257db8226f739af08893f63a1223.png

4c6612d10b3b9e328296666bc99a0e55.png

6813627e491063ac759b2100fefbba0b.png

##八:项目关键代码

d43ea130d9dcd7c5f1008317e7a9aa4c.png

e8298417ef4238a9c2fd39cc13200a34.png

71c2a9aa12733a3c0e3032ada11b074d.png

7bb2ee860d2cb547b685cc4d2e3924e9.png

08a68392359b4730c4e03d710327d471.png

002eef595bf01a394d64e01b83dc37ca.png

d6ab2547db15d2e5db4cfcfffaeb1356.png

2c20f80f3412302c5a4e8f8f23e7319f.png

##九、项目代码扫描结果及改正

初始扫描有15个错误,而后改到了五个,截图如下

3a27e99da58fde891cb93adbc8ae1619.png

改图为完成代码修改后的的截图

cafa172a982361909572ba2a2046727d.png

##十:尚待改进或者新的想法

界面可以进一步优化

九宫格里面可以增加判断是否无解,实时播报所用时间和步数

音乐可以给予多个选择进行播放,不仅限于暂停、播放!

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import javax.swing.JFrame; // ,, public class Hua_Rong_Road extends JFrame implements ActionListener, MouseListener, KeyListener { /** * */ private static final long serialVersionUID = 1L; Person person[] = new Person[10]; JButton left, right, above, below; JButton restart = new JButton("重新开始"); JButton nextpass = new JButton("下一关"); public Hua_Rong_Road() { init(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setBounds(100, 100, 320, 500); setVisible(true); validate(); } public void init() { setLayout(null); add(restart); restart.setBounds(100, 360, 120, 35); restart.addActionListener(this); add(nextpass); nextpass.setBounds(100, 320, 120, 35); nextpass.addActionListener(this); String name[] = { "曹操", "关羽", "张", "刘", "周", "黄", "兵", "兵", "兵", "兵" }; for (int k = 0; k < name.length; k++) { person[k] = new Person(k, name[k]); person[k].addMouseListener(this); person[k].addKeyListener(this); add(person[k]); } person[0].setBounds(104, 54, 100, 100); person[1].setBounds(104, 154, 100, 50); person[2].setBounds(54, 154, 50, 100); person[3].setBounds(204, 154, 50, 100); person[4].setBounds(54, 54, 50, 100); person[5].setBounds(204, 54, 50, 100); person[6].setBounds(54, 254, 50, 50); person[7].setBounds(204, 254, 50, 50); person[8].setBounds(104, 204, 50, 50); person[9].setBounds(154, 204, 50, 50); person[9].requestFocus(); left = new JButton();// 四个边界 right = new JButton(); above = new JButton(); below = new JButton(); add(left); add(right); add(above); add(below); left.setBounds(49, 49, 5, 260); right.setBounds(254, 49, 5, 260); above.setBounds(49, 49, 210, 5); below.setBounds(49, 304, 210, 5); validate(); } @Override public void keyPressed(KeyEvent e) { Person man = (Person) e.getSource(); if (e.getKeyCode() == KeyEvent.VK_DOWN) go(man, below); if (e.getKeyCode() == KeyEvent.VK_UP) go(man, above); if (e.getKeyCode() == KeyEvent.VK_LEFT) go(man, left); if (e.getKeyCode() == KeyEvent.VK_RIGHT) go(man, right); } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void go(Person man, JButton direction) { boolean move = true; Rectangle manRect = man.getBounds(); int x = man.getBounds().x; int y = man.getBounds().y; if (direction == below) y = y + 50; else if (direction == above) y = y - 50; else if (direction == left) x = x - 50; else if (direction == right) x = x + 50; manRect.setLocation(x, y); Rectangle dirctionRect = direction.getBounds(); for (int k = 0; k < 10; k++) { Rectangle personRect = person[k].getBounds(); if ((manRect.intersects(personRect)) && (man.number != k)) move = false; } if (manRect.intersects(dirctionRect)) move = false; if (move == true) man.setLocation(x, y); } public void actionPerformed(ActionEvent e) { dispose(); new Hua_Rong_Road(); } } public class MainClass { public static void main(String[] args) { new Hua_Rong_Road(); } } import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.Color; import javax.swing.JButton; public class Person extends JButton implements FocusListener { /** * */ private static final long serialVersionUID = 1L; int number; Color c=new Color(255, 245, 170); public Person(int number,String s) { super(s); setBackground(c); this.number=number; c=getBackground(); addFocusListener(this); } @Override public void focusGained(FocusEvent e) { setBackground(Color.red); } @Override public void focusLost(FocusEvent e) { setBackground(c); } }
好的,以下是一个简单的Java数字华容道图形化界面的完整代码,使用的是Swing库: ```java import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Collections; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; public class DigitalHuarongDao extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private final int ROWS = 4; // 行数 private final int COLS = 4; // 列数 private JButton[][] btns = new JButton[ROWS][COLS]; // 按钮数组 private ArrayList<Integer> nums = new ArrayList<Integer>(); // 存储数字 private int blankRow; // 空白块所在行 private int blankCol; // 空白块所在列 public DigitalHuarongDao() { setTitle("数字华容道"); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setLocationRelativeTo(null); init(); setVisible(true); } private void init() { JPanel panel = new JPanel(new GridLayout(ROWS, COLS)); for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { JButton btn = new JButton(); btn.addActionListener(this); panel.add(btn); btns[i][j] = btn; } } add(panel); startGame(); } private void startGame() { nums.clear(); for (int i = 1; i < ROWS * COLS; i++) { nums.add(i); } nums.add(0); // 0表示空白块 Collections.shuffle(nums); for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { int num = nums.get(i * COLS + j); btns[i][j].setText(num == 0 ? "" : num + ""); if (num == 0) { blankRow = i; blankCol = j; } } } } private boolean move(int row, int col) { if (row == blankRow && col == blankCol) { return false; } if (row == blankRow) { // 同一行 int min = Math.min(col, blankCol); int max = Math.max(col, blankCol); for (int i = min + 1; i < max; i++) { if (nums.get(row * COLS + i) != 0) { return false; } } nums.set(blankRow * COLS + blankCol, nums.get(row * COLS + col)); nums.set(row * COLS + col, 0); btns[blankRow][blankCol].setText(btns[row][col].getText()); btns[row][col].setText(""); blankCol = col; return true; } else if (col == blankCol) { // 同一列 int min = Math.min(row, blankRow); int max = Math.max(row, blankRow); for (int i = min + 1; i < max; i++) { if (nums.get(i * COLS + col) != 0) { return false; } } nums.set(blankRow * COLS + blankCol, nums.get(row * COLS + col)); nums.set(row * COLS + col, 0); btns[blankRow][blankCol].setText(btns[row][col].getText()); btns[row][col].setText(""); blankRow = row; return true; } return false; } private boolean isWin() { for (int i = 0; i < ROWS * COLS - 1; i++) { if (nums.get(i) != i + 1) { return false; } } return true; } @Override public void actionPerformed(ActionEvent e) { JButton btn = (JButton) e.getSource(); int row = -1, col = -1; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { if (btns[i][j] == btn) { row = i; col = j; break; } } } if (move(row, col)) { if (isWin()) { JOptionPane.showMessageDialog(this, "恭喜您,游戏胜利!"); startGame(); } } } public static void main(String[] args) { new DigitalHuarongDao(); } } ``` 在这个代码中,我们首先创建了一个JFrame窗口,并在其中添加了一个4x4的按钮矩阵。在startGame方法中,我们使用Collections.shuffle方法打乱了数字,并将它们放置在按钮上。然后,我们实现了move方法来移动数字块,并使用isWin方法来判断游戏是否胜利。最后,我们在actionPerformed方法中监听按钮点击事件,并在移动数字块后检查是否获胜。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值