写的晚了,在分工个Z市高中的一个成绩查询的系统,原系统竟然是用VB写的,我不得不佩服原本写系统的那位哥们真能耐得住。
明天搭建下SVN就等着先发工程款然后开始项目了,想想有工资进账,心里也为我那干瘪的钱包小兴奋了一把。
闲话不多说了,今天我们来分析下这个小游戏的工作原理以及核心代码的解析:
工作原理:
“主界面”以及“关卡界面”不多说了,这两个是直接写了xml文件,
然后,我们在“游戏界面”的搭建是:
用java代码动态生成了这个界面,在界面中通过service层还有dao层的方法,得到了所在关卡对应的所有成语对象,然后把这些对象每个都分解成4个word对象,然后放入到界面中,当点击的时候,判断点击的四个word能不能够组成一个成语(根据他们的级别还有他们点击的顺序判断他们能不能组成一个成语)。如果能够组成一个成语的话,弹出一个框框,显示这个成语的解释、出处等等信息。
我们先看cn.idiomlianliankan.dao包里边的内容:
GameDaoImpl.java:
package cn.idiomlianliankan.dao.impl;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import cn.idiomlianliankan.dao.GameDao;
import cn.idiomlianliankan.domain.CheckPoint;
import cn.idiomlianliankan.domain.Idiom;
import cn.idiomlianliankan.domain.Word;
public class GameDaoImpl implements GameDao {
private SQLiteDatabase db;
public GameDaoImpl(){}
/**
* 构造一个GameDaoImpl对象,传入数据库输出流
* @param context 传入上下文对象
* @param db 数据库输出流
*/
public GameDaoImpl(Context context,SQLiteDatabase db) {
this.db = db;
}
/**
* 增加一个成语,把要添加的成语对象跟关卡对象绑定在一起
* @param checkpoint 关卡对象
* @param idiom 成语对象
*/
@Override
public void addIdiom(CheckPoint checkpoint,Idiom idiom) {
//插入checkpoint表
//判断checkpoint表里边有没有这个id,如果有就不插入,没有就插入
Cursor cursor = db.rawQuery("select * from checkpoint where checkId=?", new String[]{String.valueOf(checkpoint.getCheckId())});
if(!cursor.moveToNext()){
db.execSQL("insert into checkpoint(checkId) values(?)",
new Object[]{checkpoint.getCheckId()});
}
//插入idiom表
db.execSQL("insert into idiom( idiomContent , idiomExplain , idiomProv , foreignCheckId) values(?,?,?,?)",
new Object[]{idiom.getIdiomContent(),idiom.getIdiomExplain(),idiom.getIdiomProv(),idiom.getCheckpoint().getCheckId()});
//插入word表
idiom = getIdiom(idiom.getIdiomContent());
addWord(idiom);
Log.i("test", "4");
}
/**
* 把成语分解成四个word对象,然后插入到word表中
* @param idiom 把idiom成语分成4个word对象插入word表中
*/
public void addWord(Idiom idiom){
Log.i("test", "5");
String idiomContent = idiom.getIdiomContent();
for(int i =1;i<=4;i++){
char wordContent = idiomContent.charAt(i-1);
db.execSQL("insert in