一、 猜猜看游戏的开发过程介绍
开发总时间:断断续续用了三天的时间,大概需要32个小时。
开发大概过程:
(1) 鉴于本学期选修了JSP这门课程,之前也做过《星星书屋》的课程设计,对JSP相对比较熟悉,所以这次选用JSP作为开发语言。
(2) 构思猜猜看游戏包含哪几个部分,有哪些功能,具体需要用几个页面来实现。
(3) 最后设计出的猜猜看游戏由4个jsp页面、2个javabean文件和1个servlet文件组成。
4个jsp页面:index.jsp,showPic.jsp,Guess.jsp,result.jsp
其中,index.jsp:提供一个“开始记忆”的链接,点击进入到showPic.jsp页面,即可对图片对应的人名进行记忆。
showPic.jsp:有三个功能按钮,前两个按钮可以实现图片的上下浏览,第三个按钮点击即可进入到姓名猜猜看的页面,即Guess.jsp。
Guess.jsp:该页面将随机出现一张图片和随机抽取的姓名,其中只有一个姓名对应图片中的学生的名字,点击选中一个名字之后按下提交按钮,即可进入result.jsp页面。
result.jsp:该页面将显示两种结果,若猜对了,就会显示“答对”信息,并可选择再玩一下或者重新记忆人名;若猜错了,就显示“答错”信息,同样地,可以选择再玩一下或者重新记忆人名。
(4)核心思想:猜猜看游戏里面所谓的人名和图片的对应,实质上是两个数组下标的对应。比如说:存放人名的数组name[0]对应存放图片的数组pictureName[0]。
二、 核心代码解读
(1) 取自Guess.jsp某个程序片段
for(int i=0;i<3;)
{
Integer m=new Integer((int)(Math.random()*play.getMax())); //随机0~Max的随机值
record[i]=m.intValue();
//System.out.println(record[i]);
int flat=1;
for(int j=0;j<i;j++)
{
if(m.intValue()==record[j])
{
flat=0;
break;
}
}
if(flat==1)
{
System.out.println(record[i]);
i++;
}
}
代码作用:随机抽取三个学生的姓名生成选项,供玩游戏的人选择。
(2)取自Guess.jsp某个程序片段
Integer m=new Integer((int)(Math.random()*3));
answer=m.intValue();
session.setAttribute("answer",new Integer(record[answer]));
%>
<jsp:setProperty name="play" property="imageNumber" value="<%=record[answer]%>"/>
<jsp:getProperty name="play" property="playImage"/>
<html><body background="bground.jpg"><div align="center"> <br>
<form action="servlet/GuessName" method="post" name=form>
<%
for(int j=0;j<3;j++)
{
%>
<input type="radio" name="select" value="<%=record[j] %>">
<%out.print(names.getPlayName(record[j]));
}%>
代码作用:从(1)中已经选取出来的三个学生的姓名中随机抽取一个姓名对应的图片作为猜猜看游戏的考题。
(3)取自showPic.jsp的某个程序片段
<table>
<form action="" method=post>
<tr>
<td><input type=submit name="ok" value="上一张"></td>
<input type="hidden" name="imageNumber" value="<%=play.getImageNumber()-1%>">
<input type="hidden" name="nameNumber" value="<%=names.getNameNumber()-1%>">
</form>
<form action="" method=post>
<td><input type=submit name="ok" value="下一张"></td>
<input type="hidden" name="imageNumber" value="<%=play.getImageNumber()+1%>">
<input type="hidden" name="nameNumber" value="<%=names.getNameNumber()+1%>">
</form>
<form action="Guess.jsp" method=post>
<td><input type=submit name="ok" value="进入测试"></td>
</form>
</tr>
</table>
代码作用:实现三个功能按钮,“上一张”、“下一张”、“进入测试”。
(4) 取自play.java的某个程序片段
class FileName implements FilenameFilter{
public boolean accept(File dir, String name) {
boolean boo = false;
if (name.endsWith(".png") || name.endsWith(".PNG"))
boo = true;
return boo;
}
}
代码作用:筛选出以.png为后缀的图片文件。
(5) 取自play.java的某个程序片段
public String getPlayImage() {
playImage = new String("<br><br><div align='center'><image src=image/" +
pictureName[imageNumber] + " " + "width=420 height=360></image></div>");
return playImage;
}
代码作用:选出图片,并以规定的图片大小显示出来。
(6) 取自name.java的某个程序片段
public class Name {
String[] name;
String playname;
int max=0;
int nameNumber=0;
public Name()
{
File f = new File(".");
String path = f.getAbsolutePath();
path = path.substring(0, path.indexOf("bin") - 1);
File ff=new File(path+"/webapps/try/name.txt");
FileInputStream fis=null;
try {
fis=new FileInputStream(ff);
byte []bytes=new byte[1024];
int n=0;
while((n=fis.read(bytes))!=-1)
{
String s=new String(bytes,0,n);
this.name=s.split(" ");
}
} catch (Exception e) {
e.printStackTrace();
}
代码作用:通过文件流,把name.txt文件里面的名字,放到一个字符串数组里面。
(7) 取自GuessName.java的某个程序片段
if(s.equals(ans))
{
System.out.println("答对了!");
session.setAttribute("mess",new String("<div align='center'><img src=\"happy.jpg\"></img><br>" +
"<br><b>恭喜你,答对了!</b></div>"));
response.sendRedirect("/result.jsp");
return;
}
else
{
session.setAttribute("mess",new String("<br><div align='center'><img src=\"sad.jpg\"></img><br>" +
"<br><b>嘻嘻…你答错了,不服再来!"
+ "</b></div>"));
response.sendRedirect("/result.jsp");
return;
}
}
代码的作用:判断玩游戏的人提交的答案是否正确。
三、 猜猜看游戏关键界面截图
(1) 游戏首页
(2)开始记忆界面
(3)点击“上一张”
(4)点击“下一张”
(5)点击“进入测试”
(6)“猜对”界面
(7)"答错"界面
(8)点击“重新记忆”
(9)点击“再玩一次”
四、 猜猜看游戏源代码下载链接
http://pan.baidu.com/s/1eQ4eGng
五、 开发过程的学习收获
刚开始的时候不知道要用哪种算法将图片和人名对应起来,很是伤神,整个开发过程就在这里卡住了,冥思苦想,寻找两者之间的关系。后来有个同学点拨了一下,我才恍然大悟:原来还可以这么理解!通过将人名和图片存放在两个数组,两个数组中的姓名和图片一一对应,即下标相对应来实现这个功能。
这段思考的过程告诉了我解决问题要从多个方面着手,将具象的问题抽象化,找出它们的共同点,并以此设计出一个合理的算法。
六、 开发完成后的心得体会
猜猜看这个游戏设计出来之后,从界面上来看,虽然比较简单,但是代码的设计过程,对我来说,还是有一定的挑战性的。从最初的构思、分析游戏的功能,到后来具体到一个个页面代码的设计。每出现一次编译错误,都会花费或长或短的时间去解决,也有找不到原因而在那个地方纠结很久的时候。这个过程很考验我的耐心还有意志力,以及专业知识的掌握能力。好几次想撒手不做了,最后静下心来想了想,还是重新打开软件继续修改错误。
任何一款软件,不管是功能复杂的还是简单的,其开发过程,都会耗费设计者的脑力和体力。因此,每一位软件的开发者,都值得我们去学习和尊敬,这是我这次设计猜猜看游戏最大的感悟!