游戏预览
界面流程图
开始界面
两个按钮
注册 和 登陆点击相应的按钮会启动相应的activity
// 注册按钮事件
Button register = (Button) findViewById(R.id.button1);
register.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
context = getApplicationContext();
getinfo();
if (!passwordone.equals(passwordtwo)) {
Toast t = Toast.makeText(context, "密码不一致", Toast.LENGTH_LONG);
t.show();
return;
}
switch (SPUtil.register(getApplicationContext(), name, passwordone)) {
case SPUtil.user_exists: {
Toast t = Toast.makeText(context, "用户已经存在 "+name, Toast.LENGTH_LONG);
t.show();
}
break;
case SPUtil.success: {
Toast t = Toast.makeText(context, "注册成功",Toast.LENGTH_SHORT);
t.show();
// 启动登陆界面
Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
startActivity(intent);
}
break;
}
}
});
登陆界面
包含 账户 和 密码 两个输入框
- 获取账户和密码的方法
// 获取账户和密码的方法
private void getinfo() {
account = (EditText) findViewById(R.id.editText1);
password = (EditText) findViewById(R.id.editText2);
name = account.getText().toString();
passwordone = password.getText().toString();
}
- 点击登陆按钮,判断是否合法,合法就进入游戏界面
// 注册按钮事件
Button register = (Button) findViewById(R.id.button1);
register.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
context = getApplicationContext();
getinfo();
switch (SPUtil.login(getApplicationContext(), name, passwordone)) {
case SPUtil.user_not_exists: {
Toast t = Toast.makeText(context, "用户不存在 " + name, Toast.LENGTH_LONG);
t.show();
}
break;
case SPUtil.password_error: {
Toast t = Toast.makeText(context, "用户密码输入错误 " + name, Toast.LENGTH_LONG);
t.show();
}
break;
case SPUtil.success: {
Toast t = Toast.makeText(context, "登录成功", Toast.LENGTH_SHORT);
t.show();
// 启动游戏界面
Intent intent = new Intent(LoginActivity.this, GameActivity.class);
startActivity(intent);
}
break;
}
}
});
注册界面
包含 账户 和 密码 和 确认密码三个输入框
- 获取输入的信息
EditText account;
EditText password1;
EditText password2;
String name;
String passwordone;
String passwordtwo;
// 获取账户和密码的方法
private void getinfo() {
account = (EditText) findViewById(R.id.editText1);
password1 = (EditText) findViewById(R.id.editText2);
password2 = (EditText) findViewById(R.id.editText3);
name = account.getText().toString();
passwordone = password1.getText().toString();
passwordtwo = password2.getText().toString();
}
- 判断是否合法(合法就进入登陆界面)
// 注册按钮事件
Button register = (Button) findViewById(R.id.button1);
register.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
context = getApplicationContext();
getinfo();
if (!passwordone.equals(passwordtwo)) {
Toast t = Toast.makeText(context, "密码不一致", Toast.LENGTH_LONG);
t.show();
return;
}
switch (SPUtil.register(getApplicationContext(), name, passwordone)) {
case SPUtil.user_exists: {
Toast t = Toast.makeText(context, "用户已经存在 "+name, Toast.LENGTH_LONG);
t.show();
}
break;
case SPUtil.success: {
Toast t = Toast.makeText(context, "注册成功",Toast.LENGTH_SHORT);
t.show();
// 启动登陆界面
Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
startActivity(intent);
}
break;
}
}
});
存储工具类 SPUtil.class
内部含有静态的类成员方法,可以直接使用类名.方法访问成员方法
摘要:
- 静态变量
private static final String FILE_NAME = "share_date";
private static int count = 0;// 表示当前的用户数量
public static final int user_exists = -1;// 用户已存在
public static final int user_not_exists = -3;// 用户已存在
public static final int password_error = -2;// 用户密码错误
public static final int success = 0;// 用户注册或者登陆成功
- 存键值对方法
private static void setParam(Context context, String key, String value) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(key, value);
editor.commit();
}
- 获取键值对方法
private static Object getParam(Context context, String key, String value) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
return sp.getString(key, "null");
}
- 注册方法实现(不同的结果返回不同的状态)
// 实现注册的方法
public static int register(Context context, String account, String password) {
// 遍历储存的所有信息,看看用户名是否存在
for (int i = 0;; i++) {
String name = (String) getParam(context, "account" + i, password);
if (name.equals("null"))
break;
else if ((name.equals(account))) {
// 存在用户的名称
return user_exists;
}
}
// 不存在就可以储存了
setParam(context, "account" + count, account);
setParam(context, "password" + count, password);
count++;
return success;
}
- 实现登陆的方法
// 实现登陆的方法
public static int login(Context context, String account, String password) {
// 遍历储存的所有信息,看看用户名是否存在
for (int i = 0;; i++) {
String name = (String) getParam(context, "account" + i, password);
if (name.equals("null"))
break;
else if ((name.equals(account))) {
// 存在用户的名称,比较密码
String the_password = (String) getParam(context, "password" + i, password);
if(the_password.equals(password))
return success;
else return password_error;
}
}
return user_not_exists;
}
游戏界面实现
实现的是拼图游戏,所以包含一些基本的拼图游戏该有的内容
方法摘要
- 打乱图片排列
// 打乱顺序
private void Random() {
int ran1, ran2;
for (int i = 0; i < 20; i++) {
ran1 = new Random().nextInt(length - 1);
do {
ran2 = new Random().nextInt(length - 1);
if (ran1 != ran2) {
break;
}
} while (true);
Swap(ran1, ran2);
}
// 随机排序
ib_00.setImageDrawable(getResources().getDrawable(imageId[imageIndex[0]], null));
ib_01.setImageDrawable(getResources().getDrawable(imageId[imageIndex[1]], null));
ib_02.setImageDrawable(getResources().getDrawable(imageId[imageIndex[2]], null));
ib_10.setImageDrawable(getResources().getDrawable(imageId[imageIndex[3]], null));
ib_11.setImageDrawable(getResources().getDrawable(imageId[imageIndex[4]], null));
ib_12.setImageDrawable(getResources().getDrawable(imageId[imageIndex[5]], null));
ib_20.setImageDrawable(getResources().getDrawable(imageId[imageIndex[6]], null));
ib_21.setImageDrawable(getResources().getDrawable(imageId[imageIndex[7]], null));
ib_22.setImageDrawable(getResources().getDrawable(imageId[imageIndex[8]], null));
// ib_00.getDrawable().equals(R.id.ib_02_02);
}
- 移动方块进行游戏
public void move(int imageBtnId, int site) {
// 相邻图片坐标
int sizeX = site / imageX;
int sizeY = site % imageY;
// 空白图片坐标
int blackX = blankSwap / imageX;
int blackY = blankSwap % imageY;
int x = Math.abs(sizeX - blackX);
int y = Math.abs(sizeY - blackY);
// 满足条件
if ((x == 0 && y == 1) || (x == 1 && y == 0)) {
// 点击图片的id
ImageButton clickButton = (ImageButton) findViewById(imageBtnId);
// 当前点击的图片设置为不可见状态
clickButton.setVisibility(View.INVISIBLE);
// 空白图片的id
ImageButton blankButton = (ImageButton) findViewById(blankImgId);
// 用点击图片覆盖空白图片
blankButton.setImageDrawable(getResources().getDrawable(imageId[imageIndex[site]], null));
// 将之前空白图片设置为可见
blankButton.setVisibility(View.VISIBLE);
// 交换标记
Swap(site, blankSwap);
// 让上面能够重新运算空白的位置
blankSwap = site;
// 交换两者的ID
blankImgId = imageBtnId;
GameOver();
}
}
- 判断是否结束游戏
private void GameOver() {
// 遍历数组判断是否终止游戏
boolean loop = true;
for (int i = 0; i < 9; i++) {
if (imageIndex[i] != i) {
loop = false;
}
}
if (loop) {
timeSwitch = false;
ib_00.setClickable(false);
ib_01.setClickable(false);
ib_02.setClickable(false);
ib_10.setClickable(false);
ib_11.setClickable(false);
ib_12.setClickable(false);
ib_20.setClickable(false);
ib_21.setClickable(false);
ib_22.setClickable(false);
ib_22.setImageDrawable(getResources().getDrawable(imageId[8], null));
ib_22.setVisibility(View.VISIBLE);
AlertDialog.Builder builder = new AlertDialog.Builder(GameActivity.this);
builder.setMessage("恭喜,拼图成功了!所用时间为:" + time).setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create();
builder.show();
}
}
执行逻辑流程图
交流: QQ 2862841130 欢迎共同学习交流