Android+sharedperference实现本地登陆注册+拼图游戏

游戏预览
在这里插入图片描述

界面流程图

在这里插入图片描述

开始界面

两个按钮
注册登陆

点击相应的按钮会启动相应的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;
				}
			}
		});

登陆界面

包含 账户密码 两个输入框

  1. 获取账户和密码的方法
// 获取账户和密码的方法
	private void getinfo() {
		account = (EditText) findViewById(R.id.editText1);
		password = (EditText) findViewById(R.id.editText2);
		name = account.getText().toString();
		passwordone = password.getText().toString();
	}
  1. 点击登陆按钮,判断是否合法,合法就进入游戏界面
// 注册按钮事件
		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;
				}
			}
		});

注册界面

包含 账户密码确认密码三个输入框

  1. 获取输入的信息
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();
	}
  1. 判断是否合法(合法就进入登陆界面)
// 注册按钮事件
		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

内部含有静态的类成员方法,可以直接使用类名.方法访问成员方法
摘要:

  1. 静态变量
	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;// 用户注册或者登陆成功
  1. 存键值对方法
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();
	}
  1. 获取键值对方法
private static Object getParam(Context context, String key, String value) {
		SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
		return sp.getString(key, "null");
	}
  1. 注册方法实现(不同的结果返回不同的状态)
// 实现注册的方法
	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;
	}
  1. 实现登陆的方法
// 实现登陆的方法
	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;
	}

游戏界面实现

实现的是拼图游戏,所以包含一些基本的拼图游戏该有的内容
在这里插入图片描述
方法摘要

  1. 打乱图片排列
// 打乱顺序
	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);
	}
  1. 移动方块进行游戏
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();
		}
	}

  1. 判断是否结束游戏
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 欢迎共同学习交流

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不懂电脑的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值