
最近在学Android应用开发,为了练练手,便参考应用商店一度很火的《钢琴块2》游戏,抽空写了个简单的《别踩白块儿》。
1、编写.xml界面的脚本文件
1 |
|
整个主界面就两个ImageView,由于没有写样式,它在Preview里的样子是这样的:
W?
T?
F?
在Preview里完全是按照图片本身的像素满屏显示的。
为了控制其大小和位置,在此页面的.java文件中动态改变。1
2
3
4
5
6
7public void setMargins (View view, int left, int top, int right, int bottom) {
if (view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
p.setMargins(left, top, right, bottom);
view.requestLayout();
}
}1
2
3
4
5
6
7
8
9WindowManager wm = this.getWindowManager();
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();
int btck = (int)(width*0.35);
setMargins(start,(width-btck)/2,(height-btck)/2,(width-btck)/2,(height-btck)/2);
int topck=(int)(width*0.2);
setMargins(ranking,width-topck-topck/4,height-topck-topck/4,topck/4,topck/4);
主界面如此,其他界面亦同。
2、编写游戏体
这类游戏相信大家都有玩过。
黑色的块从上往下落,玩家要通过不断点击黑色的块获得分数,在这过程中如果触碰到旁边的非黑色块则游戏结束(Gameover)。
游戏都会玩
那么问题来了
怎么才能用代码写出来呢?
界面总共有44=16个块,每行有1个黑块3个白块,每行为1组。
我用一个二维数组来指派这16个块。1
public Tile myTileBt[][]=new Tile[4][4]; //Tile是自己写的一个类
如何实现其下落呢?
简单调用调整位置的方法就行了。
不过,其下落次序如何控制。
我们可以看到,在每一次点击下落时,会有三行块儿下落,一行块儿消失,一行块儿显示在最上层。
我的思路是定义一个index,其值指向最下面一行块儿的x值。每点击一次,index执行加一除余4的操作。1
index=(index+1)%4;
考虑到如果每次在最上层new一行块儿可能会导致不必要的内存溢出。
便用此方法将每次index指派前的一行块儿重新随机赋值(指定黑块),并将其移到顶层。
以上,便实现了仅仅使用一个44的二维数组来完成无尽循环的黑块儿掉落操作。
3、数据的存储
此实验采用了SQLite数据库存储数据信息。
通过重写SQLiteOpenHelper方法对数据库进行读写操作。1
2
3
4
5
6
7
8
9
10
11public class DbOpenHelper extends SQLiteOpenHelper {
public DbOpenHelper(Context context){
super(context,DB_FILE,null,1);
}
public void onCreate(SQLiteDatabase db) {
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
在方法体中,利用Cursor类来对指定数据库执行相应查询命令1
Cursor c=mDb.query(true,DB_TABLE,new String[]{"name","score"},null,null,null,null,"-score",null );
4、总结
世上无难事,只要肯坚(fang)持(qi)。
附上度盘链接:pan
来必力目前使用QQ或微信登录会有bug,建议大家使用微博或其他社交账号登录。