android 数独小游戏
偶然想起来写一个数独的小游戏自己没事的时候玩一玩,锻炼锻炼思路。
先上效果截图
数独生成的算法,参见博客:数独生成算法
数独游戏的最基础的在于生成数独,由于生成数独的算法运算问题,为了简化,本次数独的生成使用了 10 个基类,每次生成数独的时候随机从是个基类中选取一个模板,在根据模板将对应的 a--i 的字母 随机与 1--9 分别对应,然后生成一个数独。
数独模板基类
public class StandShudu {/*** 从10个基准数组中抽取一个基准数组* 然后将 a-i 随机分配 1-9* 随机赋予 a--i的值为不重复的 1--9 的值 生成一个数组* 有多少种可能我也不会算,反正够玩的了*/public String[][] getStand(int index){switch (index){case 0:return stand0;case 1:return stand1;case 2:return stand2;case 3:return stand3;case 4:return stand4;case 5:return stand5;case 6:return stand6;case 7:return stand7;case 8:return stand8;case 9:return stand9;default:return stand0;}}private String[][] stand1=new String[][]{{"c","h","e","b","i","a","g","f","d",},{"f","b","d","g","e","c","h","a","i",},{"g","i","a","d","f","h","c","e","b",},{"h","g","i","e","d","b","a","c","f",},{"a","d","f","c","g","i","b","h","e",},{"e","c","b","h","a","f","i","d","g",},{"b","e","c","f","h","g","d","i","a",},{"i","f","g","a","c","d","e","b","h",},{"d","a","h","i","b","e","f","g","c",}};private String[][] stand2=new String[][]{{"a","c","f","b","d","e","h","i","g",},{"b","g","d","h","i","a","f","c","e",},{"h","i","e","f","c","g","b","a","d",},{"d","f","b","g","e","c","a","h","i",},{"g","a","i","d","h","f","c","e","b",},{"e","h","c","i","a","b","g","d","f",},{"i","e","g","a","f","h","d","b","c",},{"c","b","h","e","g","d","i","f","a",},{"f","d","a","c","b","i","e","g","h",}};private String[][] stand3=new String[][]{{"f","g","h","e","i","d","b","a","c",},{"e","b","c","f","a","g","i","h","d",},{"d","a","i","c","h","b","f","e","g",},{"i","f","d","a","g","e","c","b","h",},{"b","h","a","i","d","c","g","f","e",},{"c","e","g","b","f","h","a","d","i",},{"h","c","b","g","e","f","d","i","a",},{"a","d","f","h","c","i","e","g","b",},{"g","i","e","d","b","a","h","c","f",}};private String[][] stand4=new String[][]{{"i","a","h","b","c","f","d","e","g",},{"f","d","e","g","i","h","b","c","a",},{"b","c","g","e","a","d","i","f","h",},{"g","i","f","c","b","a","h","d","e",},{"d","h","a","f","g","e","c","i","b",},{"e","b","c","h","d","i","a","g","f",},{"a","g","b","i","e","c","f","h","d",},{"h","e","i","d","f","b","g","a","c",},{"c","f","d","a","h","g","e","b","i",}};private String[][] stand5=new String[][]{{"h","e","d","b","f","g","a","c","i",},{"c","i","a","d","e","h","b","g","f",},{"f","b","g","a","i","c","e","h","d",},{"a","f","i","e","g","d","h","b","c",},{"d","g","h","c","b","f","i","a","e",},{"e","c","b","h","a","i","d","f","g",},{"g","d","e","f","h","b","c","i","a",},{"b","a","f","i","c","e","g","d","h",},{"i","h","c","g","d","a","f","e","b",}};private String[][] stand6=new String[][]{{"i","g","b","f","a","h","e","c","d",},{"c","a","h","d","g","e","i","b","f",},{"f","d","e","b","c","i","h","a","g",},{"b","c","a","e","d","g","f","h","i",},{"g","e","i","h","f","a","b","d","c",},{"h","f","d","c","i","b","a","g","e",},{"a","i","c","g","b","f","d","e","h",},{"d","h","f","a","e","c","g","i","b",},{"e","b","g","i","h","d","c","f","a",}};private String[][] stand7=new String[][]{{"d","g","c","i","e","f","b","h","a",},{"f","e","h","a","b","c","g","i","d",},{"a","b","i","d","g","h","c","f","e",},{"e","a","g","f","d","b","i","c","h",},{"i","c","d","e","h","g","f","a","b",},{"b","h","f","c","i","a","e","d","g",},{"h","d","b","g","f","i","a","e","c",},{"c","f","e","b","a","d","h","g","i",},{"g","i","a","h","c","e","d","b","f",}};private String[][] stand8=new String[][]{{"e","f","g","a","d","c","b","h","i",},{"d","i","h","b","g","f","a","e","c",},{"c","a","b","e","h","i","d","f","g",},{"i","h","f","d","b","g","c","a","e",},{"g","e","a","i","c","h","f","d","b",},{"b","d","c","f","e","a","g","i","h",},{"a","c","e","h","f","b","i","g","d",},{"h","b","i","g","a","d","e","c","f",},{"f","g","d","c","i","e","h","b","a",}};private String[][] stand9=new String[][]{{"d","a","g","e","f","c","h","i","b",},{"f","b","i","g","d","h","e","a","c",},{"e","c","h","i","b","a","g","d","f",},{"h","d","f","c","a","e","b","g","i",},{"i","g","a","b","h","f","c","e","d",},{"c","e","b","d","i","g","f","h","a",},{"a","f","c","h","e","i","d","b","g",},{"g","h","d","a","c","b","i","f","e",},{"b","i","e","f","g","d","a","c","h",}};private String[][] stand0=new String[][]{{"a","b","i","g","d","e","c","h","f",},{"c","h","f","b","a","i","e","d","g",},{"e","d","g","c","f","h","b","i","a",},{"d","e","b","a","h","c","g","f","i",},{"h","i","c","f","g","b","d","a","e",},{"g","f","a","i","e","d","h","c","b",},{"i","c","h","e","b","f","a","g","d",},{"b","g","d","h","i","a","f","e","c",},{"f","a","e","d","c","g","i","b","h",}};
获取数独的类 ,随机获取一个模板,然后用 1--9 填充
public class ShuduData {private int[][] number = new int[9][9];private StandShudu standShudu=new StandShudu();private Random random=new Random();public int[][] generateShuDu(){/*** 获取随机的模板 **/String[][] stand=standShudu.getStand(random.nextInt(10));/** 带选择数字列表 **/ArrayList<Integer> data=new ArrayList<Integer>();data.add(1); data.add(2); data.add(3);data.add(4); data.add(5); data.add(6);data.add(7); data.add(8); data.add(9);/*** 随机存储排序 **/int[] s=new int[9];int index=0;while (index<9){int t=random.nextInt(data.size());s[index]=data.get(t);data.remove(t);index++;}/** 根据模板按照获取的随机序列进行数据填充 **/for(int i=0;i<9;i++){for(int j=0;j<9;j++){number[i][j]=s[getIndex(stand[i][j])-1];}}return number;}private Integer getIndex(String s){switch (s){case "a":return 1;case "b":return 2;case "c":return 3;case "d":return 4;case "e":return 5;case "f":return 6;case "g":return 7;case "h":return 8;case "i":return 9;default:return 1;}}
使用此方法虽然不能 模拟出数独的所有的可能,但是为了简化算法采用此方法。
根据获取的数独数组初始化游戏界面
/*** 初始化数据*/
private fun initSize(){data= emptyArray()data= ShuduData().generateShuDu()val initData=Array(9) { IntArray(9) }for(i in 0 until 9){for(j in 0 until smd){val ranNum = random.nextInt(9)initData[i][ranNum]=data[i][ranNum]}}nv_01.number=initData
}
smd 为数独的难易程度(即每一列的提示数据的个数)
由于数独的不确定性,当所有的数字被填满时,并不能用最初获取的数独数组与填完的数组进行比对校验(在数组中部分数据的位置具有不确定性)。填玩的数组需要根据数独的校验方法进行校验(即横竖不相同,所在的小的 3 * 3 的数组里面也不能相同)。校验的算法如下:
//校验
private void checkIsRight(){boolean right=true;for(int i=0;i<9;i++){for(int j=0;j<9;j++){int node=number[i][j];//此位置尚未填写if(node==0){listener.onResultIsTrue(false,-1);return;}//横向检查是否有相同的项 ,检查当前节点往后的节点for(int sx=i+1;sx<9;sx++){if(node==number[sx][j]){right=false;error[sx][j]=node;error[i][j]=node;}}//纵向检查是否有相同的项 ,检查当前节点往下的节点for(int sy=j+1;sy<9;sy++){if(node==number[i][sy]){right=false;error[i][sy]=node;error[i][j]=node;}}//根据下标判断 当前节点所在的 3 X 3 的格子中数字是否重复//已重复的数字放入 error 数组对应的下标int xi=i/3;int yi=j/3;for(int vx=0;vx<3;vx++){for(int vy=0;vy<3;vy++){if((3*xi+vx)!=i && (3*yi+vy)!=j){if(node==number[3*xi+vx][3*yi+vy]){right=false;error[3*xi+vx][3*yi+vy]=node;error[i][j]=node;}}}}}}listener.onResultIsTrue(right,0);
}
此外本项目中还包括了 ShareSdk微信QQ的分享,以及bmob后端云的简单使用。详情见项目源码。
码云中国 git 源码链接:Android 数独
APP下载体验
http://bmob-cdn-22713.b0.upaiyun.com/2018/12/04/f01fbccd40fef03d80fc28eb1acd99ba.apk
android 数独小游戏相关推荐
- 独数游戏android程序,Android 数独小游戏
先看看效果图 sudoku-o3.gif 数独设计思路 先看布局,我们可以看到数独由9x9的格子组成,每个格子中间有一个数字. Cell (单个格子.android 中我们可以先用TextView代替 ...
- Android Studio实现数独小游戏,休闲益智
文章目录 一.项目概述 二.开发环境 三.详细设计 3.1 界面设计 3.2 逻辑设计 四.运行演示 五.源码获取 一.项目概述 数独是一种逻辑解谜游戏,它规则稍复杂,解题过程富有挑战性.本次安卓数独 ...
- C语言编写数独小游戏
文章目录 1.前言 2.效果展示 3.代码 1.前言 这次数独小游戏的灵感来源于上次力扣做的题目,解数独.正好利用题目余热写了这一款小小游戏. 感兴趣的可以看看题目,哈哈 2.效果展示 3.代码 #p ...
- matlab 版 数独小游戏 GUI界面设计
近期,由于各种原因,接触到了matlab版的数独小游戏,需要做GUI界面.由于之前本科的时候自己也做过简单的界面涉及,就以为很简单,结果,piapia打脸.数独中的数字是在table中显示的,为了将题 ...
- java手机小游戏源码_Java手机版数独小游戏(J2me)JAVA游戏源码下载
数独游戏,相信朋友们都知道的,以前也经常玩的,用VB.VC++和Delphi版编写的都在网上宣布过,今天放出一个鉴于Java的J2me手机版的,大致看一下截图,这是在Java模拟机运行的界面,带有Ja ...
- android+studio数独小游戏,App Store 上的“益智数独-每日一题挑战题,锻炼你的大脑”...
2021年,数以百万计的人在玩数独游戏了,他们通过数独游戏不断训练自己的大脑,2022年,通过数独游戏来训练自己大脑的人可能达破千万人次,你准备好了吗? 这是一款免费的数独游戏,里面包含多个难度级别, ...
- python大作业数独_python做一个数独小游戏
最近看了下python的一些知识,在这里记载一下. 1.首先是安装,在官网下载最新的版本3.6,安装的时候要注意在下面勾选上ADD TO PATH,安装的时候会自动写入到环境变量里面,如果没有勾选,可 ...
- android扫雷小游戏制作,android扫雷小游戏源码
[实例简介] 一个简易的扫雷小游戏源码,可供android初学者参考学习 [实例截图] [核心代码] MineSweep └── MineSweep ├── AndroidManifest.xml ├ ...
- Android 魔塔小游戏--界面设计以及方向键设计(一)
本人自小玩魔塔游戏长大的,当时学习机上的50层魔塔玩了不知道多少遍了,现在做了码农一枚,非常希望可以制作一款自己的魔塔,于是花费了一点时间,断断续续的完成了一款运行于Android上的魔塔小游戏.本人 ...
最新文章
- 使用 Parallel HTTP Request 根据配置文件动态发送多个 HTTP 请求的失败尝试
- oracle bbed 使用,Oracle BBED使用 四步快速启动Oracle BBED
- 用 Python 和 werobot 框架开发公众号
- 【codevs1225】八数码难题,如何精确地搜索
- cent os mysql 内存_Cent OS – MySQL – 主从配置
- thinkcmf 横向排列数据_Excel横向筛选出销量靠后的月份数据,你知道如何实现吗...
- Javascript this 的一些学习总结
- Java基础知识点复习知识点(一)变量,流程控制,数组
- 传智播客 with与“上下文管理器” 学习笔记
- 第一次创建STC15串口程序模板
- 2019软科【世界一流计算机学科排名】公布!
- #论文学习#第二篇:CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction
- 初赛模拟试题错题锦集
- 第9章 Linux的磁盘管理
- 谷粒学院 Day12.登录页面模式、整合JWT、整合QQ邮箱、用户登录注册接口【后端】、用户登录注册【前端】
- offiice2013全套软件,加破击工具,教程,真是验证过链接:https://pan.baidu.com/s/1Csv4ZXDQyK_cKfpIXwwn6Q 提取码:h7dp 复制这段内容后打
- html页面怎么保存和读取cookie 推荐MDN封装的cookie方法
- 12.17 Daily Scrum
- ​数据分析项目-宝洁销售额预测分析
- 电力网络通信公司有哪些,电力网络通信公司排名
热门文章
- android ios 逆向工程,iOS逆向工程(七):使用Theos逆向项目
- H.266:帧内预测之PDPC(VTM4)
- 阿里云再宕机,百度云、腾讯云迎来发展新机会
- 【狂神说Java】Git最新教程通俗易懂
- C# GDAL 数字图像处理Part6 大气辐射矫正
- 约瑟夫问题与魔术(十)——魔术《完全控制》
- 十个不错的 Linux 网络监视工具
- Axure 9 - 中继器使用
- 基于visual c++之windows核心编程代码分析(61)打造自己的Windows输入法
- 中小学教师计算机水平考试及答案,中小学教师计算机水平考试题.doc