Java小项目之拼图游戏

首先声明,代码是自创的,如有雷同,不胜荣幸!

先谈谈思路

  1.设计界面。

  2.素材的处理。

  3.设计图片加载区域的图片加载处理类。

  4.设计按钮组中的按钮初始化方法。

  5.设计按钮组中的随机图片加载方法。

  6.设计重置按钮方法。

  7.设计按钮监听器。

  8.设计判定胜利的条件的方法。

1.界面的设计:

  a.使用了Windows Builder插件,安装网页:WindoswBuilder - http://download.eclipse.org/windowbuilder/WB/integration/4.6/

  b.页面的整体整体样式:

   一个JFram中添加三个带标题的JPanel,将整个分割为游戏选项区域,图片展示区域和游戏区域。每个区域都有各自的控件,其中需要注意的是图片展示区域放置了一个JLable来加载展示图片。

  c.代码:我将源码放在了com.rookie.view包下,并且类名为GameView。

  1 package com.rookie.view;
  2
  3 import java.awt.EventQueue;
  4
  5 import javax.swing.JFrame;
  6 import javax.swing.JPanel;
  7 import javax.swing.border.EmptyBorder;
  8 import javax.swing.JMenuBar;
  9 import javax.swing.JMenu;
 10 import javax.swing.JMenuItem;
 11 import javax.swing.JOptionPane;
 12
 13
 14 import java.awt.event.ActionListener;
 15 import java.util.Timer;
 16 import java.util.TimerTask;
 17 import java.awt.event.ActionEvent;
 18 import javax.swing.GroupLayout;
 19 import javax.swing.GroupLayout.Alignment;
 20 import javax.swing.border.TitledBorder;
 21
 22 import com.rookie.dao.PicloadDao;
 23 import com.rookie.dao.GameDao;
 24
 25 import javax.swing.UIManager;
 26 import java.awt.Color;
 27 import javax.swing.LayoutStyle.ComponentPlacement;
 28 import javax.swing.JLabel;
 29 import javax.swing.JRadioButton;
 30 import javax.swing.ButtonGroup;
 31 import javax.swing.JComboBox;
 32 import javax.swing.DefaultComboBoxModel;
 33 import javax.swing.JTextField;
 34 import javax.swing.JButton;
 35 import javax.swing.SwingConstants;
 36
 37 public class GamerView extends JFrame {
 38
 39     /**
 40      *
 41      */
 42     private static final long serialVersionUID = 1L;
 43     private JPanel mainPanel;
 44     private final ButtonGroup buttonGroup = new ButtonGroup();
 45     private static JTextField textField_time;
 46     private static JButton bt_GameBegin = null;
 47     private static JLabel jl_loadImage = null;
 48     private static JComboBox comboBox_SelectPic = null;
 49     private static JRadioButton rb_simple = null;
 50     private static JRadioButton rb_difficulty = null;
 51     private static JPanel panel_beginGame = null;
 52     private static GameDao gameChoseDao;
 53     private static int time = 0;
 54     private static Timer timer;
 55     /**
 56      * Launch the application.
 57      */
 58     public static void main(String[] args) {
 59         EventQueue.invokeLater(new Runnable() {
 60             public void run() {
 61                 try {
 62                     GamerView frame = new GamerView();
 63                     frame.setVisible(true);
 64                 } catch (Exception e) {
 65                     e.printStackTrace();
 66                 }
 67             }
 68         });
 69     }
 70
 71     /**
 72      * Create the frame.
 73      */
 74     public GamerView() {
 75         setResizable(false);
 76         setTitle("\u62FC\u56FE\u6E38\u620F(\u6D4B\u8BD5\u7248)");
 77         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 78         setBounds(100, 100, 710, 550);
 79
 80         JMenuBar menuBar = new JMenuBar();
 81         setJMenuBar(menuBar);
 82
 83         JMenu m_About = new JMenu("\u5173\u4E8E");
 84         menuBar.add(m_About);
 85
 86         JMenuItem mI_aboutMe = new JMenuItem("\u56E2\u961F\u4ECB\u7ECD");
 87         mI_aboutMe.addActionListener(new ActionListener() {
 88             public void actionPerformed(ActionEvent e) {
 89                 showAboutActionListener(e);
 90             }
 91         });
 92         m_About.add(mI_aboutMe);
 93         mainPanel = new JPanel();
 94         mainPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
 95         setContentPane(mainPanel);
 96
 97         JPanel panel_checkGame = new JPanel();
 98         panel_checkGame.setBorder(new TitledBorder(null, "\u6E38\u620F\u9009\u9879\uFF1A", TitledBorder.CENTER, TitledBorder.TOP, null, Color.RED));
 99
100         JPanel panel_loadPic = new JPanel();
101         panel_loadPic.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "\u539F\u56FE\u52A0\u8F7D\uFF1A", TitledBorder.CENTER, TitledBorder.TOP, null, Color.RED));
102         panel_loadPic.setToolTipText("");
103
104         panel_beginGame = new JPanel();
105         panel_beginGame.setBorder(new TitledBorder(null, "\u6E38\u620F\u5F00\u59CB\uFF1A", TitledBorder.CENTER, TitledBorder.TOP, null, Color.RED));
106         GroupLayout gl_mainPanel = new GroupLayout(mainPanel);
107         gl_mainPanel.setHorizontalGroup(
108             gl_mainPanel.createParallelGroup(Alignment.TRAILING)
109                 .addGroup(gl_mainPanel.createSequentialGroup()
110                     .addContainerGap()
111                     .addGroup(gl_mainPanel.createParallelGroup(Alignment.TRAILING)
112                         .addComponent(panel_checkGame, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 674, Short.MAX_VALUE)
113                         .addGroup(Alignment.LEADING, gl_mainPanel.createSequentialGroup()
114                             .addComponent(panel_loadPic, GroupLayout.PREFERRED_SIZE, 336, GroupLayout.PREFERRED_SIZE)
115                             .addPreferredGap(ComponentPlacement.UNRELATED)
116                             .addComponent(panel_beginGame, GroupLayout.PREFERRED_SIZE, 332, GroupLayout.PREFERRED_SIZE)))
117                     .addContainerGap())
118         );
119         gl_mainPanel.setVerticalGroup(
120             gl_mainPanel.createParallelGroup(Alignment.LEADING)
121                 .addGroup(gl_mainPanel.createSequentialGroup()
122                     .addContainerGap()
123                     .addComponent(panel_checkGame, GroupLayout.PREFERRED_SIZE, 83, GroupLayout.PREFERRED_SIZE)
124                     .addPreferredGap(ComponentPlacement.UNRELATED)
125                     .addGroup(gl_mainPanel.createParallelGroup(Alignment.BASELINE)
126                         .addComponent(panel_loadPic, GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE)
127                         .addComponent(panel_beginGame, GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE))
128                     .addContainerGap())
129         );
130
131         jl_loadImage = new JLabel("");
132         jl_loadImage.setIcon(null);
133         panel_loadPic.add(jl_loadImage);
134
135
136
137         GroupLayout gl_panel_beginGame = new GroupLayout(panel_beginGame);
138         gl_panel_beginGame.setHorizontalGroup(
139             gl_panel_beginGame.createParallelGroup(Alignment.LEADING)
140                 .addGap(0, 320, Short.MAX_VALUE)
141         );
142         gl_panel_beginGame.setVerticalGroup(
143             gl_panel_beginGame.createParallelGroup(Alignment.LEADING)
144                 .addGap(0, 322, Short.MAX_VALUE)
145         );
146         panel_beginGame.setLayout(gl_panel_beginGame);
147
148         JLabel label = new JLabel("\u6E38\u620F\u96BE\u5EA6\uFF1A");
149         label.setForeground(Color.BLUE);
150
151         rb_simple = new JRadioButton("\u7B80\u5355");
152         buttonGroup.add(rb_simple);
153
154         rb_difficulty = new JRadioButton("\u56F0\u96BE");
155         buttonGroup.add(rb_difficulty);
156
157         rb_simple.setSelected(true);
158
159         JLabel label_1 = new JLabel("\u56FE\u7247\u9009\u62E9\uFF1A");
160         label_1.setForeground(Color.BLUE);
161
162         comboBox_SelectPic = new JComboBox();
163         comboBox_SelectPic.setModel(new DefaultComboBoxModel(new String[] {"\u98CE\u666F", "\u7F8E\u5973", "\u8C6A\u8F66", "\u6E38\u620F"}));
164         comboBox_SelectPic.setMaximumRowCount(5);
165
166         JLabel label_2 = new JLabel("\u6E38\u620F\u65F6\u95F4\uFF1A");
167         label_2.setForeground(Color.BLUE);
168
169         textField_time = new JTextField();
170         textField_time.setHorizontalAlignment(SwingConstants.RIGHT);
171         textField_time.setText("0");
172         textField_time.setEditable(false);
173         textField_time.setColumns(10);
174
175         JLabel lblNewLabel = new JLabel("\u79D2");
176         lblNewLabel.setForeground(Color.BLUE);
177
178         bt_GameBegin = new JButton("\u5F00\u59CB\u6E38\u620F");
179         bt_GameBegin.addActionListener(new ActionListener() {
180             public void actionPerformed(ActionEvent eve) {
181                 buttonClickAction(eve);
182             }
183         });
184         GroupLayout gl_panel_checkGame = new GroupLayout(panel_checkGame);
185         gl_panel_checkGame.setHorizontalGroup(
186             gl_panel_checkGame.createParallelGroup(Alignment.LEADING)
187                 .addGroup(gl_panel_checkGame.createSequentialGroup()
188                     .addContainerGap()
189                     .addComponent(label)
190                     .addGap(6)
191                     .addGroup(gl_panel_checkGame.createParallelGroup(Alignment.TRAILING)
192                         .addComponent(rb_difficulty)
193                         .addGroup(gl_panel_checkGame.createSequentialGroup()
194                             .addComponent(rb_simple)
195                             .addPreferredGap(ComponentPlacement.RELATED)))
196                     .addGap(18)
197                     .addComponent(label_1)
198                     .addPreferredGap(ComponentPlacement.UNRELATED)
199                     .addComponent(comboBox_SelectPic, GroupLayout.PREFERRED_SIZE, 69, GroupLayout.PREFERRED_SIZE)
200                     .addGap(32)
201                     .addComponent(label_2)
202                     .addPreferredGap(ComponentPlacement.UNRELATED)
203                     .addComponent(textField_time, GroupLayout.PREFERRED_SIZE, 41, GroupLayout.PREFERRED_SIZE)
204                     .addPreferredGap(ComponentPlacement.RELATED)
205                     .addComponent(lblNewLabel)
206                     .addGap(52)
207                     .addComponent(bt_GameBegin, GroupLayout.PREFERRED_SIZE, 93, GroupLayout.PREFERRED_SIZE)
208                     .addContainerGap(76, Short.MAX_VALUE))
209         );
210         gl_panel_checkGame.setVerticalGroup(
211             gl_panel_checkGame.createParallelGroup(Alignment.LEADING)
212                 .addGroup(gl_panel_checkGame.createSequentialGroup()
213                     .addGroup(gl_panel_checkGame.createParallelGroup(Alignment.LEADING)
214                         .addGroup(gl_panel_checkGame.createSequentialGroup()
215                             .addComponent(rb_simple)
216                             .addPreferredGap(ComponentPlacement.RELATED, 7, Short.MAX_VALUE)
217                             .addComponent(rb_difficulty))
218                         .addGroup(gl_panel_checkGame.createSequentialGroup()
219                             .addContainerGap()
220                             .addGroup(gl_panel_checkGame.createParallelGroup(Alignment.BASELINE)
221                                 .addComponent(label_1)
222                                 .addComponent(comboBox_SelectPic, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
223                                 .addComponent(textField_time, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
224                                 .addComponent(lblNewLabel)
225                                 .addComponent(label_2)
226                                 .addComponent(bt_GameBegin, GroupLayout.PREFERRED_SIZE, 38, GroupLayout.PREFERRED_SIZE)))
227                         .addGroup(gl_panel_checkGame.createSequentialGroup()
228                             .addGap(22)
229                             .addComponent(label)))
230                     .addContainerGap())
231         );
232         panel_checkGame.setLayout(gl_panel_checkGame);
233         mainPanel.setLayout(gl_mainPanel);
234     }
235
236     private void showAboutActionListener(ActionEvent e) {
237         // TODO Auto-generated method stub
238         JOptionPane.showMessageDialog(null, "QQ:523980553");
239     }
240
241     private void buttonClickAction(ActionEvent eve) {
242         // TODO Auto-generated method stub
243         //设置按钮标题
244         if( bt_GameBegin.getText().equals("开始游戏") ) {
245             beginGame();
246             timer = new Timer();
247             timer.scheduleAtFixedRate(new MyTase(), 0, 900);
248         }
249         else {
250             resetGame();
251
252         }
253
254     }
255
256     public static void beginGame() {
257         bt_GameBegin.setText("重置游戏");
258         //获取ComBox选项
259         int picId = comboBox_SelectPic.getSelectedIndex();
260         //加载图片
261         PicloadDao pic = new PicloadDao();
262         pic.loadPic(picId, jl_loadImage);
263         //获取难易度
264         if(rb_simple.isSelected()) {
265             gameChoseDao = new GameDao();
266             gameChoseDao.initButton(panel_beginGame);
267             gameChoseDao.randomLoadPic(picId);
268
269         }else if(rb_difficulty.isSelected()) {
270
271         }
272     }
273
274     public static void resetGame() {
275         bt_GameBegin.setText("开始游戏");
276         rb_simple.setSelected(true);
277         comboBox_SelectPic.setSelectedIndex(0);
278         textField_time.setText(""+0);
279         jl_loadImage.setIcon(null);
280         gameChoseDao.resetButton();
281         time = 0;
282         timer.cancel();
283     }
284
285     class MyTase extends TimerTask{
286         @Override
287         public void run() {
288             // TODO Auto-generated method stub
289             time ++;
290             textField_time.setText("" + time);
291             if(time == 60) {
292                 JOptionPane.showMessageDialog(null, "挑战失败!!!");
293                 resetGame();
294             }
295         }
296     }
297 }

代码被分成了几部分:一部分是界面的初始化,这些都可以通过Windows builder来完成,但是从按下“开始游戏”的按钮后,之后的任务都需要手动写代码,例如事件的处理,开始游戏和重置游戏的方法书写,计时器的书写。都是需要独立完成,技术比较菜,可能代码不是很完善,请原谅。只是基础,不在详细去说。

2.素材的处理。

  a.统一规范的素材命名。

  b.利用PS将图片尽心切片,可以完成图片分成均匀的几份。

需要注意的是:如果你使用的是Win8或者Win10,你需要使用管理员权限打开PS。

3.设计图片加载区域的图片加载处理类。

4.设计按钮组中的按钮初始化方法。

5.设计按钮组中的随机图片加载方法。

6.设计重置按钮方法。

7.设计按钮监听器。

8.设计判定胜利的条件的方法。

时间: 2024-10-21 09:51:05

Java小项目之拼图游戏的相关文章

Java小项目之:拼图游戏!

Java小项目之:拼图游戏!今天教大家用java做出一个拼图游戏,很适合java初学者练手.所用素材: 部分代码: package picture_mosical; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.CropImageFilter; import java.awt.i

java小项目之:植物大战僵尸,这个僵尸有点冷!内附素材源码

Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁的大叔阿姨,下到7.8岁的小弟弟妹妹都听说和玩过这游戏.在以前智能手机还没流行的时候,各种黑网吧,游戏厅便有着玩这游戏的人.当3G技术现世,半智能手机和智能手机出现后,这款游戏更是如日中天,与愤怒的小鸟一起霸占了手机游戏市场(但当时估计都是盗版的). 相信有些使用b站的小伙伴,应该看过很多这样的视频: 这种视

java小项目之:泡泡堂炸弹人,来互相伤害呀!

Java小项目之:泡泡堂!双人对弈今天给大家分享的java小项目,是披着泡泡堂外衣的炸弹人游戏.炸弹人这种休闲游戏抓住了玩家对互动娱乐的需求,它操作简单,极易上手,趣味十足,能给玩家在短时间内就可获得游戏所带来的互动趣味和成就感.需要素材的可以私信我,这个小游戏是很适合java初学者练手的.功能模块简介: 游戏开始画面 人物移动的控制实现 炸弹的产生及炸弹爆炸的实现 结果的判断实现 计时的实现 两人一起互玩的实现游戏界面展示: 代码展示: 操作介绍:1.先进入游戏画面,用户可以自己选择角色,pl

Java小项目之:图书馆管理系统!有借有还再借不难!

Java小项目之:图书馆管理系统!今天给大家分享的java小项目是图书馆管理系统.这个图书馆管理系统是很完善的,包括书籍信息录入.借阅者信息.书籍类别添加.新书订购等等功能.和现实生活中的图书馆管理系统没什么两样,毫不夸张的说,你只要学会了今天我分享的这个小项目,以后自己创建一个图书馆管理系统是没一点问题的.按照惯例先上图: 部分代码展示:public class BookLoginIFrame extends JFrame { private class BookResetAction imp

Java小项目之:投票系统

Java小项目之:投票系统今天给大家带来的是java编写的投票小系统,代码简易,适合初学者练手!代码展示:package com.tarena.wgh.servlet; import java.io.IOException;import java.io.PrintWriter;import java.util.*; import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.serv

Java小项目之:教你做个聊天系统!

Java小项目之:聊天系统今天给大家带来的java练手小项目是一个简单的聊天室,界面简单,操作不难.分为注册系统,登录系统和聊天系统三部分,很适合java小白练手.完整的源码和素材请关注并私信我获取! 界面展示: 代码展示:package chatRoom2; import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWr

Java小项目之:在线测评考试系统

Java小项目之:在线测评考试系统,让你可以在家考科一!今天带来的java小项目是一套在线测评考试系统,题库是科目一的.不仅可以在家练练java技术,还可以边学习学习科目一,一举两得.界面介绍:开始.分数.考试规则.离开,四个选项.还有很多题库可以选择,可以私信我!代码展示:package service; import java.util.ArrayList; import java.util.List; import java.util.Random; import util.Config;

Java小项目之:文件的加密与解密!再也不怕存的小电影被别人发现了!

Java小项目之:文件的加密与解密!再也不怕存的小电影被别人发现了!今天带来的java小项目是加密解密系统,再也不怕别人偷看自己的电脑了,也可以正大光明的存小电影了.减少借别人电脑被看隐私的尴尬,从这个项目开始!界面展示: 部分代码展示:package wt.diy.encryption.gui; import java.io.File; import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JO

Java小项目之:小说阅读器

Java小项目之:小说阅读器 今天带来的java项目是一款阅读器,老少皆宜,适合练手. 代码展示: package com; import javax.swing.JOptionPane; public class Scroll { private int n; private int size; private Thread t; private static int def_speed = 1000; private static int up_speed = -500; private s