基于Java的拼图游戏设计与实现
作者:苟雨晴 兰全祥
来源:《电脑知识与技术》2019年第02期
        摘要:利用Java的图形界面和图形图像绘制、鼠标监听以及键盘监听等技术实现了一个拼图游戏。对拼图游戏的功能进行分析和设计,实现了拼图随机打乱、难度设置、移动次数统计、原图预览、还原检测以及排行榜等功能。基于Java的拼图游戏设计与实现综合了Java開发基础、Java反射、事件处理、图形界面编程以及多线程等知识,不仅对Java课程的教学
有一定的辅助作用,还能提高学习者对Java的兴趣,锻炼程序设计思维。
        关键词:swing;拼图;游戏开发;事件处理
html特效代码雨代码        中图分类号:TP311文献标识码:A文章编号:1009-3044(2019)02-0045-03
        1 概述
        拼图游戏一般是以九宫格形式展现,玩家通过鼠标或者键盘移动其中某一滑块将乱序的图片还原,图片还原则游戏成功[1]。Java作为目前最流行的编程语言之一,在JDK 1.2之后的java.swing包、java.awt包中提供了功能强大的图形用户界面设计,开发人员可以使用少量的代码设计具有界面效果的游戏[2]。
        本文在Java Swing的基础上,利用Java的图形界面、多线程和事件监听等技术来实现此拼图游戏[3]。对拼图游戏的功能进行分析和设计,实现了拼图原图预览、随机打乱、难度设置、移动次数统计、还原检测以及排行榜等功能。
        2功能分析与设计
        2.1功能设计
        设计完成一个拼图游戏需要实现以下功能:
        1)游戏初始化:程序运行,启动游戏窗口。游戏窗口包括为玩家提供操作方法的功能区以及供玩家拼图的游戏区。
        2)游戏难度设置:玩家可以自由改变游戏难度。游戏难度分为入门(3行3列)、一般(4行4列)、困难(5行5列)三个级别,同时图片也将分割成不同的块数。
        3)图片乱序:玩家点击“开始游戏”之后,程序将随机打乱所有滑块。打乱之后应保证可以还原。
        4)步数统计:玩家可以利用鼠标点击滑块或键盘控制滑块进行移动,每移动一次步数加一,并在界面上显示移动的总步数。
        5)排行榜:在游戏开始前,玩家可以查看游戏排行榜;在游戏结束后,玩家可以输入自己的名字,游戏会根据步数计算分数并更新排行榜。
        6)退出游戏:点击结束游戏按钮和窗口上的关闭按钮都可以结束游戏。
        2.2游戏界面
        本游戏利用Swing的相关组件实现游戏界面,如图1所示。
        游戏界面主要分为上下两个区域,上方区域为功能区,包括预览、计步、难度设置、开始游戏、结束游戏、排行榜等功能按钮;下方区域为游戏区,玩家在此区域进行拼图游戏。
        3 游戏设计与实现
        3.1游戏整体设计
        通过对游戏需求进行分析,对所需对象及功能进行抽象和封装,形成游戏整体类图,如图2所示。
        3.2 功能实现
        3.2.1 游戏初始化
        游戏初始化阶段,主要对游戏界面进行生成并在游戏区中加载拼图游戏图片。游戏区初始化时,根据图片的宽度和高度以及游戏难度使用BufferedImage类的getSubimage()方法将对图片进行分割,然后使用继承了JButton的Cell类来保存所有的滑块,并使用javax.swing.Icon类的方法将分割之后的图片设置给Cell类的对象,其实现的关键代码如下。
        cells[index] = new Cell(new ImageIcon(image), index, width, height);
        其中,image是分割之后的图片,index是滑块的下标,width和hight是滑块的宽度和高度。
        3.2.2 游戏难度设置
        本游戏采用下拉列表进行游戏难度的设置。在下拉列表中添加入门、一般和困难三个值,并为下拉框设置监听事件。当下拉列表的值发生改变之后,游戏区将根据新的难度重新分割图片并加载新的游戏面板。
        comboBoxn.addItemListener(
        new ItemListener() {
        public void itemStateChanged(ItemEvent e){/*根据所选游戏难度重置游戏面板*/});
        3.2.3 开始游戏
        随机获得不同的移动方向(上下左右,分别用0-3数字表示),然后将白滑块与该方向上的滑块进行交换[4]。重复执行10*col*row次交换后既实现了随机打乱,且能保证能经过有限次移动能够将拼图还原[5]。
        int times = row * col * 10;
        Random random = new Random();
        for (int i = 0; i < times; i++) {
        int dir = Int(4);
        move(blankCell,dir); } }
        其中,move(blankCell,dir)方法表示空白滑块向dir方向移动。当空白滑块向dir方向移动时,该方向上的其他滑块移动至空白滑块处。
        3.2.4 滑块移动(键盘、鼠标)
        玩家可以通过键盘或鼠标将滑块向上下左右四个方向移动,因此本文设计并实现了方向枚举类、移动方法move、键盘监听以及鼠标监听。
        1)方向枚举
        定义方向枚举类Direction,存放上下左右四个方向。
        public enum Direction {

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。