首页 > 范文大全 > 正文

软件技术课程中智力三环游戏设计

开篇:润墨网以专业的文秘视角,为您筛选了一篇软件技术课程中智力三环游戏设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:智力图形游戏一直很受孩子和家长的喜欢,但是传统的智力图形游戏具有成本高、玩法单一和无法自动提示等缺点。本软件是模拟新型智力图形游戏——智力三环而设计的游戏软件,其具有益智、新颖、直观、可设置游戏难度和自动演示的优点。该文对智力三环游戏软件的开发技术、开发思想、实现过程和功能测试作以介绍,并给出绘制圆形、颜色赋值、步骤记录、游戏难度设置和自动演示等关键部分的代码说明,最后介绍该游戏软件可以后续开发的功能。

关键词:智力三环;大圆环;小圆;难度设置;自动演示

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)18-4225-04

智力三环游戏软件是一款基于模拟图形转动的拼图软件。游戏开始后的初始界面如图1所示。

三个大圆环上随机分布着红、黄、蓝三种颜色的小圆,三种颜色的小圆都是24个。游戏玩者不仅可以通过点击每个大圆环上的顺时针/逆时针按钮,让小圆围绕大圆环的轨道进行顺时针/逆时针转动,还可以点击中间的顺时针/逆时针按钮,使被中间绿色虚拟圆环圈住的三组(九个)小圆在不同的大圆环之间进行120度的转动。游戏的玩法是通过点击按钮在四个轨道上任意转动小圆,最终将三种不同颜色的小圆分别转动到三个大圆环上。

该软件的使用流程图如图2所示:

1 设计任务

本软件采用面向对象的方法来设计,软件的设计任务可以分为以下四步。

1.1 构造数据结构

该游戏软件用自定义的Location类来描述每个小圆位置的属性和动作。Location类中有X,Y,和COLOR三个类成员,它们分别用来表示各个小圆位置的X坐标、Y坐标、和该点小圆的颜色值,并在类中实现了X取值(getx)、X赋值(setx)、Y取值(gety)、Y赋值(sety)、COLOR取值(getc)和COLOR赋值(setc)等六个类成员方法。

定义了Location类后,我们可以用一个Location对象来描述一个小圆位置点的信息。接下来我们用以下三句代码,将每个大圆环上的24个Location对象添加到一个List中。

这样,以后我们可以用List.get()的方法来直接存取各个大圆环上的小圆位置信息。

为了能记录玩者在游戏过程中所做的移动步骤,我们用数组int step[]=new int [1024]来记录玩者每次移动小圆时所点击的按钮。

1.2 构造小圆和大圆环

大圆环就是由小圆围绕而成的,所以我们只要能确定大圆环上各个小圆的坐标位置就可以画出大圆环。在本软件设计过程中,采用了cos,sin的画圆方法来确定小圆的坐标位置。坐标位置确定后,调用画圆函数绘制小圆。

1.3 构造按钮

用按钮构造方法给三个大圆环及中间的虚拟圆环分别添加一个顺时针旋转按钮和一个逆时针按钮,用来点击触发小圆的旋转事件。

1.4 事件响应

游戏软件最关键的部分是实时的事件响应。本软件设计过程中添加了以下两类类的事件响应:

1)对按钮点击事件的响应

点击任何一个旋转按钮后,都必须对该点击事件进行实时的响应。先对各个小圆的属性进行新的设置,再对整个图形进行刷新显示。

2)对菜单点击事件的响应

菜单上的事件响应有:开始游戏、游戏归位、自动演示、游戏说明和版权说明等五个事件。其中前三个事件都是对图形的实时操作,后两个事件是基于对话框的信息提示。

2 开发技术

本软件使用Java语言实现,是在Java Swing组件之上开发的。利用点击组件-产生事件-响应事件的过程完成游戏。响应具体使用到的Java包有: java.awt.*、javax.swing.*、java.awt.event.*、java.awt.event.*和java.util.*;使用到Java组件有:JFrame、JPanel、JMenuBar、JMenu、JMenuItem、JOptionPane和JButton。

3 设计思想与实现过程

3.1 构造软件框架

本软件是在实现的。首先通过“public class sanhuan extends JFrame implements ActionListener”继承JFrame创建一个类sanhuan;然后通过JMenuBar、JMenu和JMenuItem构建菜单项:

在最外层我们还通过int step[]=new int [1024]和int ii=0来建立一个整形数组和整形变量,它们分别用来记录玩者的游戏过程和玩者的游戏步骤数目。

3.2 构造JPanel组件

本软件的游戏画面是在JPanel组件上显示的,然后把JPanel添加在JFrame容器上。首先通过“class extends JPanel implements ActionListener”继承JPanel构造一个类draw。然后在类draw中完成以下内容:

3.3 给小圆位置初始化

每个小圆位置都是一个Location实例对象,所以为了按预期的图形界面显示出这些小圆,必须先对这些小圆位置进行初始化。我们为小圆位置的初始化自定义了一个initial()方法,该方法确定了每个小圆位置的圆心坐标和颜色。initial()方法中的关键部分是确定大圆环上的小圆位置的坐标,即几何画圆的问题。

3.4 主类的构造函数

类sanhuan是程序的主类,所有的组件都要通过主类的构造函数添加到JFrame上。在sanhuan()这个构造函数中,我们完成了添加组件、添加菜单消息响应、设置布局方式、调用intial()方法和显示JPanel功能。

3.5 响应菜单点击事件

该软件通过响应菜单项的事件可以完成游戏开始、设置游戏难度、游戏归位、游戏自动演示、玩法说明和游戏开发说明等功能。其中,设置游戏难度、游戏自动演示两个功能是比较有新意的。设置游戏难度将游戏分为高、中、低三级难度,它是通过程序,将大圆环随机转动60、40或20次所得到的。当然,也可以根据玩者的需要对游戏难度进行调整。游戏自动演示是先把玩者人为转动步骤和程序自动转动步骤记录在step[]数组中,当玩者需要自动演示时,程序根据数组内容执行逆操作,将圆环一步一步地转动到初始状态。这两个功能在后面详细介绍。

3.6 main函数

该软件将程序中的所有方法和动作都封装了起来,所以在main()方法中就仅仅通过程序主类的构造函数对主类sanhuan进行初始化调用:sanhuan f = new sanhuan()。

4 特征代码介绍

该软件中有四处设计比较巧妙的程序代码,分别是:显示大圆环时用到的几何画圆算法、响应按钮事件时用到的颜色循环赋值、菜单项中的设置游戏难度和菜单项中的自动演示功能。

4.1 几何画圆

在通过绘制小圆来显示大圆环时用到了该段代码。它的主要功能是在确定半径的条件下能精确求出大圆环上各个点的X坐标和Y坐标。相比其他的几何画圆算法,该算法简单而实用。下面用绘制第一个大圆环的例子来详细解释该段代码:

我们将大圆环划分成了24个小圆,这样,各个小圆之间的角度是15度,即π/12。用angle来记录从0到2π变化的角度,然后利用cos(angle)*半径=X坐标、sin(angle)*半径 = Y坐标的几何原理求出24个点的坐标。

4.2 循环赋值

每个大圆环上的小圆,我们以水平逆时针方向起从0到23进行编号。在响应按钮时,我们要对每个大圆环上小圆位置上的颜色属性进行顺时针或逆时针的赋值。这就要求一种循环赋值的算法。下面以第一个大圆环逆时针循环赋值为例,详细说明该算法:

if (e1.getSource()==br1n) //响应第一个大圆环逆时针转动按钮

{

step[ii++]=1; //将此操作记录在step[]数组中,后面的自动演示要使用

//先将第0个小圆的颜色属性取出,赋给临时变量C

Color c=((Location)a1.get(0)).getc();

//通过23次循环,依次将1号颜色赋给0号、2号赋给1号……23号赋给22号

for(int j=1;j

{

((Location)a1.get(j-1)).setc( ((Location)a1.get(j)).getc());

}

((Location)a1.get(23)).setc(c); //最后将0号赋给23号,这样就实现了一次逆时针循环赋值

}

4.3 设置游戏难度

智力游戏软件的一个基本特点就是能设置游戏难度,从而适合不同年龄段的玩者。该软件是通过多次随机执行旋转大圆环,打乱小圆的分布来实现设置游戏难度的。初级难度是随机执行了20次旋转;中级难度是随机执行了40次旋转;高级难度是随机执行了60次旋转。当然在旋转的同时我们要记录下这些操作,以作为自动演示的基础。程序中采用了模拟按钮点击的方法(JButton.doClick())来实现大圆环的旋转。

4.4 游戏自动演示

一个好的游戏应该具有自动演示的功能,这样可以启发玩者并增强游戏的趣味性。该软件通过step[]数组记录了程序随机执行的步骤和玩者认为的步骤,然后根据step[]数组中的内容执行逆操作,这样就可以将游戏图形恢复到初始状态。即:若先前对一个大圆环执行了逆时针按钮操作,则现在对该圆环执行顺时针按钮操作;若先前对一个大圆环执行了顺时针按钮操作,则现在对该圆环执行逆时针按钮操作。这样,由后往前依次执行逆操作就可以恢复到初始状态。为了能让玩者清楚看到自动演示的步骤,在每一次操作之后,线程暂停一秒种。

5 存在问题和改进意见

该软件还存在一些问题。在打乱小圆布局时算法不够好,使得设置难度后的小圆分布看起来还是不够分散;算法不够高效,在设置游戏时会明显感觉到时间的延迟;作为一款游戏软件来要求的话,该软件的界面不够友好和美观,不能很好调起游戏者的兴趣。

该软件在以下几个方面可以继续改进:1) 可以对每个小圆进行编号,游戏的玩法规则变为不仅要调整大圆环上小圆的颜色,还要调整小圆的序号,使其按递增或递减的顺利排列;2)可以在界面上给出玩者当前的游戏信息,如玩者已经走了多少步,游戏难度如何等;3)可以设置悔棋的事件响应,当玩者对以前的操作不满时,可以恢复到以前任意一步;4)可以保存每个玩者的信息和当前的状态,当玩者下次来玩时,可以接着上次的游戏状态继续游戏。

参考文献:

[1] Joshua Bloce. Effective Java中文版[M]. 潘爱民,译.北京:机械工业出版社, 2004.

[2] Bruce Eckel.Java编程思想[M].侯捷,译. 北京:机械工业出版社出版社,2005.

[3] 袁海燕,王文涛.JAVA实用程序设计100例[M]. 北京:人民邮电出版社, 2005.