偶然想起来写一个数独的小游戏自己没事的时候玩一玩,锻炼锻炼思路。

先上效果截图

         

数独生成的算法,参见博客:数独生成算法

数独游戏的最基础的在于生成数独,由于生成数独的算法运算问题,为了简化,本次数独的生成使用了 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 数独小游戏相关推荐

  1. 独数游戏android程序,Android 数独小游戏

    先看看效果图 sudoku-o3.gif 数独设计思路 先看布局,我们可以看到数独由9x9的格子组成,每个格子中间有一个数字. Cell (单个格子.android 中我们可以先用TextView代替 ...

  2. Android Studio实现数独小游戏,休闲益智

    文章目录 一.项目概述 二.开发环境 三.详细设计 3.1 界面设计 3.2 逻辑设计 四.运行演示 五.源码获取 一.项目概述 数独是一种逻辑解谜游戏,它规则稍复杂,解题过程富有挑战性.本次安卓数独 ...

  3. C语言编写数独小游戏

    文章目录 1.前言 2.效果展示 3.代码 1.前言 这次数独小游戏的灵感来源于上次力扣做的题目,解数独.正好利用题目余热写了这一款小小游戏. 感兴趣的可以看看题目,哈哈 2.效果展示 3.代码 #p ...

  4. matlab 版 数独小游戏 GUI界面设计

    近期,由于各种原因,接触到了matlab版的数独小游戏,需要做GUI界面.由于之前本科的时候自己也做过简单的界面涉及,就以为很简单,结果,piapia打脸.数独中的数字是在table中显示的,为了将题 ...

  5. java手机小游戏源码_Java手机版数独小游戏(J2me)JAVA游戏源码下载

    数独游戏,相信朋友们都知道的,以前也经常玩的,用VB.VC++和Delphi版编写的都在网上宣布过,今天放出一个鉴于Java的J2me手机版的,大致看一下截图,这是在Java模拟机运行的界面,带有Ja ...

  6. android+studio数独小游戏,‎App Store 上的“益智数独-每日一题挑战题,锻炼你的大脑”...

    2021年,数以百万计的人在玩数独游戏了,他们通过数独游戏不断训练自己的大脑,2022年,通过数独游戏来训练自己大脑的人可能达破千万人次,你准备好了吗? 这是一款免费的数独游戏,里面包含多个难度级别, ...

  7. python大作业数独_python做一个数独小游戏

    最近看了下python的一些知识,在这里记载一下. 1.首先是安装,在官网下载最新的版本3.6,安装的时候要注意在下面勾选上ADD TO PATH,安装的时候会自动写入到环境变量里面,如果没有勾选,可 ...

  8. android扫雷小游戏制作,android扫雷小游戏源码

    [实例简介] 一个简易的扫雷小游戏源码,可供android初学者参考学习 [实例截图] [核心代码] MineSweep └── MineSweep ├── AndroidManifest.xml ├ ...

  9. Android 魔塔小游戏--界面设计以及方向键设计(一)

    本人自小玩魔塔游戏长大的,当时学习机上的50层魔塔玩了不知道多少遍了,现在做了码农一枚,非常希望可以制作一款自己的魔塔,于是花费了一点时间,断断续续的完成了一款运行于Android上的魔塔小游戏.本人 ...

最新文章

  1. 使用 Parallel HTTP Request 根据配置文件动态发送多个 HTTP 请求的失败尝试
  2. oracle bbed 使用,Oracle BBED使用 四步快速启动Oracle BBED
  3. 用 Python 和 werobot 框架开发公众号
  4. 【codevs1225】八数码难题,如何精确地搜索
  5. cent os mysql 内存_Cent OS – MySQL – 主从配置
  6. thinkcmf 横向排列数据_Excel横向筛选出销量靠后的月份数据,你知道如何实现吗...
  7. Javascript this 的一些学习总结
  8. Java基础知识点复习知识点(一)变量,流程控制,数组
  9. 传智播客 with与“上下文管理器” 学习笔记
  10. 第一次创建STC15串口程序模板
  11. 2019软科【世界一流计算机学科排名】公布!
  12. #论文学习#第二篇:CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction
  13. 初赛模拟试题错题锦集
  14. 第9章 Linux的磁盘管理
  15. 谷粒学院 Day12.登录页面模式、整合JWT、整合QQ邮箱、用户登录注册接口【后端】、用户登录注册【前端】
  16. offiice2013全套软件,加破击工具,教程,真是验证过链接:https://pan.baidu.com/s/1Csv4ZXDQyK_cKfpIXwwn6Q 提取码:h7dp 复制这段内容后打
  17. html页面怎么保存和读取cookie 推荐MDN封装的cookie方法
  18. 12.17 Daily Scrum
  19. ​数据分析项目-宝洁销售额预测分析
  20. 电力网络通信公司有哪些,电力网络通信公司排名

热门文章

  1. android ios 逆向工程,iOS逆向工程(七):使用Theos逆向项目
  2. H.266:帧内预测之PDPC(VTM4)
  3. 阿里云再宕机,百度云、腾讯云迎来发展新机会
  4. 【狂神说Java】Git最新教程通俗易懂
  5. C# GDAL 数字图像处理Part6 大气辐射矫正
  6. 约瑟夫问题与魔术(十)——魔术《完全控制》
  7. 十个不错的 Linux 网络监视工具
  8. Axure 9 - 中继器使用
  9. 基于visual c++之windows核心编程代码分析(61)打造自己的Windows输入法
  10. 中小学教师计算机水平考试及答案,中小学教师计算机水平考试题.doc