学习Android一转眼已经好几天了,一直按捺不住自己写个小东西的念头,好吧,堵不如疏,那就写吧。

名称:舒尔特方格,具体介绍可以百度。

效果:随机生成5×5个动态按钮,每个按钮上面都有一个1-25之间的不重复的随机数字,开始游戏时,只能从1开始点击一直到25游戏结束。


东西很简单,这个项目我专门写了个文档,但是包含的东西太多,以我现在对Android的理解度来说,暂时不能完全实现,那就先把上面说的主要效果搞出来吧。先看最终效果:

游戏开始界面


游戏过程中界面,正确点击以后,数字变为“GO”,如果没有按顺序点击,会有弹出对话框提示:


游戏结束提示:


好了。看完这么简单的效果,看看代码吧,新建android工程,把main.xml里面的控件删除,不需要xml定义,全部动态生成。

所有的代码都在main.java中:

package com.dy.game;import java.util.HashMap;import java.util.Map;import java.util.Random;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.View;import android.widget.Button;import android.widget.RelativeLayout;import android.annotation.SuppressLint;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;public class Main extends Activity {@SuppressLint("UseSparseArrays")private Map<Integer, String> map = new HashMap<Integer, String>();private Button[] btn = new Button[25];private int num = 1; // 点击按钮验证数字private int width = 0; // 手机屏幕的宽度private int length = 0; // 控件的尺寸@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);RelativeLayout layout = new RelativeLayout(this);getSize(); // 获取屏幕的尺寸信息findViews(layout); // 批量随机生成按钮setContentView(layout);setListener(); // 批量设置按钮点击监听事件}private void getSize() {DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);width = dm.widthPixels;length = (width - 40) / 5;}private void findViews(RelativeLayout layout) {for (int i = 0, j = 0; i < 25; i++) {btn[i] = new Button(this);int temp = getRandom();btn[i].setText(temp + "");btn[i].setId(temp);RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(length, length);if (i != 0 & i % 5 == 0) {j++;}params.leftMargin = 40 + length * (i % 5) - (i % 5) * 10;params.topMargin = 40 + length * j - j * 10;layout.addView(btn[i], params);}}/** * 随机生成一个1-25的数字来设置动态按钮的id和text,使用map来限定随机数不重复 */private Integer getRandom() {Random random = new Random(System.currentTimeMillis());int i = 0;do {i = random.nextInt(25) + 1;} while (map.get(i) != null);map.put(i, i + "");return i;}private void setListener() {for (int i = 0; i < 25; i++) {btn[i].setTag(btn[i].getId());btn[i].setOnClickListener(ifEqu);}}private Button.OnClickListener ifEqu = new Button.OnClickListener() {@Overridepublic void onClick(View v) {int i = (Integer) v.getTag();if (i == num) {num++;((Button) v).setText("GO");} else {new AlertDialog.Builder(Main.this).setTitle("Warning").setMessage("只能按顺序点击噢!").setPositiveButton("OK",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {}}).show();}if (num == 26) {new AlertDialog.Builder(Main.this).setTitle("Finish").setMessage("Congratulation!!").setPositiveButton("OK",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {}}).show();}}};}

匆匆写就,在代码优化方面没有细究,初步的项目就这样吧,以后深入学习了,还要加上多线程来控制游戏时间,另外还有UI的细节和用户的交互等等,半成品待完善。

更多相关文章

  1. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. 本人自学Android技术
  3. Android中长TextView实现跑马灯效果
  4. Android(安卓)侧边栏开发的方法
  5. Android(安卓)5.0+ 自定义普通按钮的ripple波纹效果
  6. Android开发学习笔记之 Service 的使用
  7. Android(安卓)Facebook-Rebound弹性动画
  8. 八款开源 Android(安卓)游戏引擎
  9. Android(安卓)动画分析之翻转效果

随机推荐

  1. Android下拉刷新控件
  2. Android安装或者卸载应用APK
  3. Android(安卓)Loader详解
  4. android各种触摸事件的处理,touchEvent
  5. Android(安卓)基本控件
  6. Android(安卓)分享微信小程序
  7. 节操视频播放器
  8. android 调用系统应用
  9. Android:Timer定时器
  10. 《android的事件分发机制》