代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
JS
】
数独游戏
作者:
木子牛
/ 发布于
2014/6/17
/
627
基于Android开发的一个简单的数独游戏
package com.zxw.shudu03; public class Game { // 数独初始化数据的基础 private final String str = "360000000004230800000004200" + "070460003820000014500013020" + "001900000007048300000000045"; private int sudoku[] = new int[9 * 9]; //用于存储每个单元格已经不可用的数据 private int used[][][] = new int[9][9][]; public Game() { sudoku = fromPuzzleString(str); calculateAllUsedTiles(); } // 根据九宫格当中的坐标,返回该坐标所应该填写的数字 private int getTile(int x, int y) { return sudoku[y * 9 + x]; } public String getTileString(int x, int y) { int v = getTile(x, y); if (v == 0) { return ""; } else return String.valueOf(v); } // 根据一个字符串数据,生成一个整形数组,所谓数独游戏的初始化数据 protected int[] fromPuzzleString(String src) { int[] sudo = new int[src.length()]; for (int i = 0; i < sudo.length; i++) { sudo[i] = src.charAt(i) - '0'; } return sudo; } //用于计算所有单元格对应的不可用数据 public void calculateAllUsedTiles() { for (int x = 0; x < 9; x++) { for (int y = 0; y < 9; y++) { used[x][y] = calculateUsedTiles(x, y); } } } //取出某一单元格当中已经不可用得到数据 public int[] getUsedTilesByCoor(int x,int y){ return used[x][y]; } //计算某一单元格当中已经不可用的数据 public int[] calculateUsedTiles(int x, int y) { int c[] = new int[9]; for (int i = 0; i < 9; i++) { if (i == y) continue; int t = getTile(x, i); if (t != 0) c[t - 1] = t; } for (int i = 0; i < 9; i++) { if (i == x) continue; int t = getTile(i, y); if (t != 0) c[t - 1] = t; } int startx = (x / 3) * 3; int starty = (y / 3) * 3; for (int i = startx; i < startx + 3; i++) { for (int j = starty; j < starty + 3; j++) { if (i == x && j == y) continue; int t = getTile(i, j); if (t != 0) c[t - 1] = t; } } // compress int nused = 0; for (int t : c) { if (t != 0) nused++; } int c1[] = new int[nused]; nused = 0; for (int t : c) { if (t != 0) c1[nused++] = t; } return c1; } protected boolean setTileIfValid(int x, int y, int value) { int tiles[] = getUsedTiles(x, y); if (value != 0) { for (int tile : tiles) { if (tile == value) return false; } } setTile(x, y, value); calculateAllUsedTiles(); return true; } protected int[] getUsedTiles(int x, int y) { return used[x][y]; } private void setTile(int x, int y, int value) { sudoku[y * 9 + x] = value; } } package com.zxw.shudu03; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.View; //该类用于实现Dialog,实现自定义的对话框功能 public class KeyDialog extends Dialog { //用来存放代表对话框当中按钮的对象 private final View keys [] = new View[9]; private final int used[]; private ShuduView shuduView; //构造函数的第二个参数当中保存着当前单元格已经使用过的数字 public KeyDialog(Context context,int [] used,ShuduView shuduView){ super(context); this.used = used; this.shuduView = shuduView; } //当一个Dialog第一次显示的时候,会调用其onCreate方法 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置对话框的标题 setTitle("KeyDialog"); //用于为该Dialog设置布局文件 setContentView(R.layout.keypad); findViews(); //便利整个used数组 for (int i = 0; i <used.length; i++) { if(used[i] != 0){ System.out.println(used[i]); keys[used[i] - 1].setVisibility(View.INVISIBLE); } } //为对话框当中所有的按钮设置监听器 setListeners(); } private void findViews() { keys[0] = findViewById(R.id.keypad_1); keys[1] = findViewById(R.id.keypad_2); keys[2] = findViewById(R.id.keypad_3); keys[3] = findViewById(R.id.keypad_4); keys[4] = findViewById(R.id.keypad_5); keys[5] = findViewById(R.id.keypad_6); keys[6] = findViewById(R.id.keypad_7); keys[7] = findViewById(R.id.keypad_8); keys[8] = findViewById(R.id.keypad_9); } //通知ShuduView对象,刷新整个九宫格显示的数据 private void returnResult(int tile) { shuduView.setSelectedTile(tile); //取消对话框的显示 dismiss(); } private void setListeners() { //遍历整个keys数组 for (int i = 0; i < keys.length; i++) { final int t = i + 1; keys[i].setOnClickListener(new View.OnClickListener() { public void onClick(View v) { returnResult(t); } }); } } }
试试其它关键字
数独游戏
同语言下
.
Jquery搜索框获取回车事件
.
H5页面添加倒计时,然后自动跳转
.
通过user-agent判断h5页面是在哪个手机App(QQ、微信
.
nginx 禁止未绑定的域名访问
.
JavaScript 获取按键,并屏蔽系统 Window 事件
.
H5之只允许微信浏览器打开,禁止从外部浏览器访问
.
微信打开网址添加在浏览器中打开提示的办法
.
实现JS复制、粘贴,Chrome/Firefox下可用
.
video视频播放,play()、pause()、duration时长、onen
.
HTML5实现MP3上传前的预览和播放时长的获取
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
木子牛
贡献的其它代码
(
3
)
.
将32位颜色压缩为16位颜色
.
数独游戏
.
tab选显卡
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3