《猜猜看》游戏开发总结
一、开发目的
在校园中,我们经常遇到某个学生叫自己老师,但老师却想不出该学生的名字,彼此显得有点尴尬。不仅师生之间的互动交流会有这样的问题存在,就连我们身边的同学之间也有这样的情况发生,就比如我自己,有时候呢,看到自己认识的同学会上前去跟他打招呼,可是那个同学却不记得我是谁,只知道我的名字,彼此也是很尴尬。《猜猜看》游戏就是为了更好的促进师生以及学生彼此之间的互动交流而开发出来的,让彼此更进一步了解认识对方。
二、功能简介
由于自己能力和时间的有限性,只实现了相对较简单的猜猜看的功能,即随机显示一张相片与3个名字,看着图片选择正确的名字,并且可以通过点击图片随机显示另一张想要猜测的图片从而进行下一次的猜测。实现该功能是通过学习android的相关知识所开发出来的一个APP,开发所用到的工具为eclipse。下面就对该游戏的相关功能及程序进一步的说明。
三、《猜猜看》游戏APP效果图展示
首先,当你把该游戏开发的apk安装到自己的手机上时,你将会来到一个游戏向导界面,由于本人的能力不足,所以向导界面做的比较简陋,往后会不断学习来进一步改进的。游戏向导界面如下所示:
接着,此时你有两种选择,你可以选择不玩该游戏直接点击退出按钮退出游戏。当然,既然都来了,那何不玩一玩呢,那就让你的手指动起来吧,点击开始游戏,便可进入游戏主界面,在你进入游戏主界面时,此时会随机显示一张图片,对应图片下方会随机产生三个名字,看着图片选择你觉得该相片对应的人的名字,当你选择对应名字时,将会弹出一个提示的吐司告诉你是否猜测正确,当正确时,将会再一次随机产生另一张图片和三个名字进行下一轮猜测,当猜错时,则将让你继续猜测,直到猜测正确进入下一轮猜测,你也可以选择不猜测该同学,点击图片将会随机切换显示另一张图片。当你玩累的时候,不想继续玩下去了或者想看一下游戏说明,你可以点击最下方的按钮返回向导界面进一步退出游戏。游戏主界面如下所示:(由于界面显示效果图过多,就不一一粘贴了,只列举一两个)
刚进入猜测时:
猜测错误继续猜:
猜测正确进入下一次猜测,图片随机又取一张:
学生的图片存放于工程资源文件夹res下的drawable-xhdpi下(由于学生图片较多,只筛选了一部分学生的图片,可以继续进行扩充):
上面讲述的就是该游戏功能的大致效果图。下面对一些核心代码进行进一步的解读。
四、核心代码
1. 游戏向导界面
【1】游戏向导界面用到的布局,该布局分别声明了四个控件,对四个控件的相关属性进行了相关的设置,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/start" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="70dp"
android:layout_marginTop="35dp"
android:text="猜猜看"
android:textColor="#9508A7"
android:textSize="40sp"
android:textStyle="bold|italic" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginLeft="20dp"
android:text="@string/rule"
android:textSize="18sp" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text"
android:layout_marginTop="50dp"
android:orientation="horizontal" >
<Button
android:id="@+id/bt_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="退出" />
<Button
android:id="@+id/bt_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="开始游戏" />
</LinearLayout>
</RelativeLayout>
【2】游戏向导界面打开时将使用的startActivity启动界面,该startActivity对上述布局声明的控件进行了初始化,并为按钮控件设置了相应的点击事件,退出游戏使用了Activity中的finish()方法,销毁界面从而达到退出游戏,开始游戏则是使用了Intent意图对象的startActivity来启动另一个界面,startActivity界面核心代码如下:
package com.example.game;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class StartActivity extends Activity implements OnClickListener {
private Button exit, play;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_explain);
init();
}
private void init() {
exit = (Button) findViewById(R.id.bt_one);
play = (Button) findViewById(R.id.bt_two);
exit.setOnClickListener(this);
play.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_one:
finish();
break;
case R.id.bt_two:
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
break;
default:
break;
}
}
}
2. 定义一个Student类用于存放同学对应的姓名id,学号id,专业id(专业id由于能力和时间关系,只是设想了实现的方式,还未真正实现,会进一步学习来完善的),代码如下:
package com.example.game.modle;
public class Student {
/**
* 姓名id
*/
public int nameId;
/**
* 图片id
*/
public int drawableId;
/**
* 分类id
*/
public int cateId;
public Student(int nameId, int drawableId, int cateId) {
super();
this.nameId = nameId;
this.drawableId = drawableId;
this.cateId = cateId;
}
}
3. 存放同学学号姓名的资源文件strings.xml(由于学生人数很多,只是大概加入了一部分学生,可以进一步增加修改要猜测的人的学号姓名),代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">猜猜看</string>
<string name="menu_settings">Settings</string>
<string name="student_name0">201211672104陈衍权</string>
<string name="student_name1">201211672220林金燕</string>
<string name="student_name2">201211671217彭政</string>
<string name="student_name3">201211671221谭思萍</string>
<string name="student_name4">201211671231周伟峰</string>
<string name="student_name5">201211671122吴丹妮</string>
<string name="student_name6">201211671121王晓俊</string>
<string name="student_name7">201211671123吴坚鑫</string>
<string name="student_name8">201211671230周荃</string>
<string name="student_name9">201211671218戚水仙 </string>
<string name="student_name10">201211672206郭静梅</string>
<string name="student_name11">201211671117聂双燕</string>
<string name="student_name12">201211671127曾婷</string>
<string name="student_name13">201211671205冯嘉敏</string>
<string name="student_name14">2201211671228袁春丽</string>
<string name="student_name15">201211671229郑碧君</string>
<string name="student_name16">201211671220施学剑</string>
<string name="student_name17">201211671227叶琛</string>
<string name="student_name18">201211671232左楒颖</string>
<string name="student_name19">201211671131朱嘉颖 </string>
<string name="rule">游戏说明:点击下边的按钮可以进入游戏,进入游戏后将会随机产生一张图片,对应会随机产生三个名字,从下边的三个名字中选择您猜测的图片的人名,当猜测正确时会继续随机产生一张图片,继续猜测;当猜测错误时,将会不变的让您继续猜测,直到猜测正确进入下一次猜测。您如果不想猜测某一张图片,您也可以点击图片切换不同的图片进行猜测。是不是已经迫不及待想进入游戏了,那就让我们一起开始来玩吧,Let\'s go !!!</string>
</resources>
4. 游戏主界面
【1】游戏主界面的布局,该布局声明了六个控件,并对控件进行了相关属性的设置,代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:text=" Welcom TO Play Guess "
android:textColor="#C950C9"
android:textSize="20sp"
android:textStyle="bold|italic" />
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="250dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
<LinearLayout
android:id="@+id/ll"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/img"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/tv0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_weight="1"
android:background="#55ff0000"
android:gravity="center"
android:padding="5dp" />
<TextView
android:id="@+id/tv1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_weight="1"
android:background="#5500ff00"
android:gravity="center"
android:padding="5dp" />
<TextView
android:id="@+id/tv2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_weight="1"
android:background="#550000ff"
android:gravity="center"
android:padding="5dp" />
</LinearLayout>
<Button
android:id="@+id/back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_below="@id/ll"
android:layout_centerHorizontal="true"
android:text="返回游戏向导界面" />
</RelativeLayout>
【2】游戏主界面启动时将进入MainActivity调用相应方法,该部分除了对布局中声明的控件进行了初始化外,定义了Student类的对象,并就图片与Strings文件中的学号姓名对应的存放于类中对应的属性中,使用了自动可以获取资源res中对应的文件夹下的图片和学号姓名的系统方法,返回相应的id,该方法灵活、方便,如:
stu = new Student(getResources().getIdentifier("student_name" + i,"string", getPackageName()), getResources().getIdentifier("img" + i, "drawable", getPackageName()), ran.nextInt(3));
之后声明了ArrayList<Student>对象,将Student类中对应的属性存放于该集合类中,之后的操作将对集合类对象进行操作。
随机产生一张图片和三个名字的方法的核心部分代码如下:
// 更改当前数据(更改当前的三个学生,更改当前的要猜的目标学生,这些学生在装在所有的学生中)
private void changeStudent() {
currentList = new ArrayList<Student>();
Student tempStudent;// 随机选取的学生
while (currentList.size() < 3) {// 选三个放进当前的学生集合中
// 从所有的学生中选取一个随机学生
tempStudent = allList.get(ran.nextInt(allList.size()));
if (!currentList.contains(tempStudent)) {
currentList.add(tempStudent);
}
}
// 从当前的三个选择一个
currentStudent = currentList.get(ran.nextInt(currentList.size()));
// 选好了适配到界面上去
// 填学生的名字
for (int i = 0; i < tvArray.length; i++) {
tempStudent = currentList.get(i);
tvArray[i].setText(getResources().getString(tempStudent.nameId));
}
// 填学生的照片
img.setImageResource(currentStudent.drawableId);
}
检查是否猜测正确的方法的代码如下:
// 检查是否猜对了
private void checkStudent(View v) {
TextView tv_name = (TextView) v;
String currentStuName = getResources().getString(currentStudent.nameId);
if (tv_name.getText().toString().equals(currentStuName)) {
Toast.makeText(this, "恭喜啊^_^猜对啦!!!", 0).show();
// 猜对了之后可以再猜
changeStudent();
} else {
Toast.makeText(this, "噢噢,很遗憾您猜错了!!!", 0).show();
}
}
上面就是整个开发的一些核心的代码部分,具体想体验该游戏的可以到网盘下载源代码及安装到自己的手机上玩玩哦。
(下载链接:http://pan.baidu.com/s/1bnwJtIR 密码:pynm )
五、开发过程的收获与总结:
开发过程是一个不断自我学习的过程。没有人一开始没接触一样东西就懂得怎么使用,很多时候只有自己付出了,努力过了才懂得怎么样去使用。在开发这个《猜猜看》游戏APP的过程中,让我学到最多的就是要懂得去请教别人,懂得不懂就要虚心的请教,不要高傲,自认为自己很了不起。很多时候,我们的知识能力都是有限的,在这个时候,我们就要懂得去寻求他人的帮助,在他人给予你提示之后,一方面可以让自己更加加深对某方面知识的掌握与记忆,另一方面也可以在与他人交流的过程中学习借鉴别人的学习方式以及学习到自己未了解到的知识,让自己开发出的游戏的功能更加完善、更加优化,让自己更进一步的成长。
学习是一个不断循序渐进的过程,只有自己尝试去做了,才知道实现某一个功能的难易程度。通过这次的《猜猜看》游戏,虽然自己选择开发的《猜猜看》游戏功能较简单,但是在这个简单的开发过程中对自己来说也是有很多困难和难题的。这次的开发,让我自己了解到自己能力方面还有很多的不足,还有很多对android知识点的不掌握,需要进一步去巩固基础,而对那些自己已经掌握的知识点却得到了更进一步的加深。开发过程是一个很繁琐枯燥泛味的过程,这个过程的开发可以锻炼自己的耐心,磨练一下自己的意志,只有耐得住寂寞的人才能真正实现最初自己定下的目标,哪怕目标多么渺小。
当自己开发出满足功能要求的《猜猜看》游戏时,自己的心情是无比的喜悦,因为自己终于实现了,虽然这过程要通过不断请教别人,最终来完成自己的作品,但是,当自己亲手完成自己一样没有做过的事情时,那种成功的感觉是很难用言语来表达的。这次的开发也给了我很多的鞭策:人活着就要有追求,要有目标,既然选择了去追求一样东西,既然已经定位了自己的目标,那就要坚持不懈的继续往前走下去,勇敢的往前,不要害怕前方有多少荆棘,因为你没去尝试过,你不知道自己能否成功,只有自己努力了,才会明白成功与失败是什么感觉,就算最后失败了,那又怎么样,至少曾经自己努力过。
开发过程也许很艰辛,但是不管怎么样,要永远坚信:只要你付出了,总有一天会有收获的!