数独游戏的设计与实现

一、数独游戏简介

数独游戏,是一种数学智力拼图游戏,是“独立的数字游戏”的简称,源自18世纪末的瑞士,后在美国发展,在日本得以发扬光大。

数独游戏可以训练玩家的逻辑推理能力,不少教育者皆认为数独是锻炼脑筋的好方法。

其规则如下:

1.游戏会从一个部分带有数字的九宫格开始。 在9×9的大九宫格(即3格宽×3格高)方阵里,每一格又细分为一个小九宫格。

2.游戏开始,已给定若干数字,其它宫位留白,玩家需要自己按照逻辑推敲出剩下的空格里是什么数字。

3.填数字时必须满足以下条件:在空白的小格子里填上1~9中的数字,使得每个数字在“九宫格”的每行、每列、每个小九宫格中均只出现一次。

二、游戏逻辑分析:

1.游戏中的每个格子可能的数字有1-9。

2. 游戏开始显示的数字,通过一份完整的数独,将部分格子设为空白,得到游戏初始值。

3.游戏中的每个空白格子可以填写的数字是:同一行未出现的数字,同一列未出现的数字,同一个3x3的九宫格中未出现的数字三部分的交集。

4.游戏中的每个格子的三种状态:答案数字(即正确的数字),初始化数字(即游戏开始是数字,显示有数字或者空白),当前数字(即玩家填写前,

后的数字)。

5.游戏完成的条件是满足规则中说明的情况。

三、可行性分析

1.技术可行性

(1)整个系统利用Java + Eclipse + Android  开发并运行,本身开发难度不大,加之Eclipse软件具有Android插件包,此外,这几款软件的

安装需要进行一些环境变量的配置,但是有很多的相关资料与教程可以查找借鉴,所以无论是从安装、配置还是最后的开发、运行其实际难度都

不是很大。

2.经济可行性

(1)对于任何一个系统而言,前期的开发投入都相对比较大,花费相对比较多。其后期花费则相对少,系统本身占用空间较小,由于Android的

开放性,所以,需添加功能,游戏的更新比较简单方便,不需要太多的人力物力来维持维护,这就提高了管理者的工作效率,降低了开销,因此在

经济可行性方面还是有很大优势的。

3.操作可行性

(1)本系统操作简单,且界面效果相对还行并且加入了大量人性化设计理念,使玩家更加容易上手,简单的点击书写即可。。因此,该游戏的使

用十分简便。

四、游戏设计(先用Eclipse建立Android程序开发项目)

1.绘制游戏界面,大九宫格和小九宫格,(小九宫格用浅绿色线条分割,大九宫格用暗红色线条分割)。   【ShuduView.java中】

(1)用屏幕的宽width和高height分别除于9即可得到九宫格中每个单元格的宽度和高度。

(2)用paint中的方法生成用于绘制背景色的画笔并设置画笔的颜色和设置横向、纵向的单元格线的颜色。

(3)用canvas中的方法绘制背景色并绘制横向单元格线和纵向单元格线(即绘制九宫格)。

(4)在values文件夹中新建colors的XML文件并设置好四种颜色,以后的颜色设置就可以直接调用这里的颜色。    【colors.xml】

2.游戏格子中数字绘制,且字体在格子中居中显示。   【ShuduView.java中】

(1)用paint中的方法绘制数字,设置数字的颜色为蓝色并把数字设置为空心,字体居中显示。

(2)用FontMetrics fm = paint.getFontMetrics();即FontMetrics方法真正实现文字在矩形框当中居中显示。

3.游戏交互事件处理,点击小格子,提示玩家选择填写的数字,并将选择的数字绘制到所点击的格子中。   【ShuduView.java和keyDialog.java中】

(1)用onTouchEvent();函数实现单点触摸事件,即鼠标(手)触动手机屏幕事件,当手触动该view时该函数会被调用onTouchEvent

(MotionEvent event)中的方法获取当前点击的单元格坐标 。

(2)调用keyDialog方法实现提示玩家选择填写的数字的自定义对话框,用setListeners();方法为对话框当中所有的按钮设置监听器,即可实现

将选择的数字绘制到所点击的格子中。

4.自定义对话框的实现过程,从提示到消失。    【keyDialog.java中】

(1)新建Dialog类,实现自定义的对话框功能。

(2)用Dialog();构造函数保存着对话框当前单元格已经使用过的数字,当一个对话框第一次显示的时候调用其onCreate方法实现提示功能,

最后用dismiss();方法取消对话框的显示。

5.具体的逻辑处理的实现过程。    【Game.java】

(1)新建String str存储字符串数据,存储数独游戏中要用到的数字。

(2)用fromPuzzleString(String src)方法根据一个字符串数据,生成一个整形数组(将字符串常量转换为数字存入数组中),即所谓的数独

游戏的初始化数据。

(3)用calculateAllUsedTiles()方法计算所有单元格对应的不可用数据;用calculateUsedTiles(int x, int y)方法计算某一单元格当中已经

不可用的数据;用getUsedTilesByCoor(int x,int y)方法取出某一单元格当中已经不可用的数据;用setTileIfValid(int x, int y, int value)

方法接收KeyDialog中点击的数字。

(4)用setTile(x, y, value)方法将对应的值value绘制在xy对应的格子中,最后用calculateAllUsedTiles()方法重新计算所有格子的不可用

数据。

6.最后根据游戏完成的条件判断游戏是否完成。    【MainActivity.java】

(1)在主类MainActivity中调用ShuduView对象。

(2)根据规则完成数独游戏。

五、总结与展望

1.问题与解决方法

(1)一开始画九宫格里面的 横线,纵线,每次画出的线都达不到想要的效果,尝试了很多次也没有办法。后来上网搜了一下,原来需要画两

条线之间隔1像素的位置且颜色也要搭配好才能达到效果。

(2)用paint中的方法绘制数字时,设置字体居中的方法很容易,但却无法实现文字在矩形框当中居中显示,上网搜也搜不到解决方法。后

来在观看Android数独开发视频中,也学习到原来是用FontMetrics方法真正实现文字在矩形框当中居中显示。

(3)最后在自定义对话框中,也不知道如何显示当前单元格要提示输入的备选数字。这也是在视频教学中得到了解决方案,就是先放9个按钮

上面分别是数字1-9,然后遍历整个九宫格分别在横向和纵向找到出现过的数字,最后把对话框中出现过的数字按钮屏蔽不显示,这样就得到

对话框中提示的备选数字。

2.心得与体会

(1)虽然上面的这些问题都是一些很小方面的问题,但是Android程序开发过程不就是会遇到一系列的小问题吗?如果连一个个的小问题都

解决不了的话,还指望着我们去解决一些大问题?所以我觉得遇到问题是很正常的事,只要我们把这些问题解决好,就能把程序大概的写出来。

虽然说写出的程序不是很完美,但这已经是迈向成功的第一步了。所以说,开发过程有问题不可怕,可怕的是找不到自己程序开发过程中存在

的问题。

(2)在该数独游戏的开发过程中遇到过不少困难,虽然解决起来不是那么容易,但是在这其中学到了很多知识,同时也提升了我对Android

程序开发的兴趣,希望能够在这方面有更进一步的发展。 最大的不足是,这次的程序开发由于时间的限制使得程序开发得过于简单,其实该游

戏在现有基础上还可以开发其他功能,不仅能够使界面更加美观,而且可以增加其他功能,比如设置游戏难度级别(简单,中等,困难);设

置各级别游戏关卡数 ;设置游戏背景音乐;设置游戏主界面(选择菜单分为各项功能:重来功能、下一关功能、重出题功能、解题功能、难易

程度选择功能以及退出功能等等。);来提高游戏趣味性。总之一句话,循序渐进,脚踏实地。

正如那句名言所云:如果你不能成为最好的那个,那你就成为最努力的那个吧!

附:功能截图一张

转载于:https://www.cnblogs.com/santokim/p/4837997.html

《数独游戏的设计与实现》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. ScrollView反弹效果
  2. linux 挂载多余空间,linux 空间不够,磁盘挂载
  3. 解决<style>无法重写.css文件的问题
  4. 微信小程序初始化 operateWXData:fail invalid scope
  5. 为什么雷军指责“华为不懂研发”?| 畅言
  6. git21天打卡day3-创建仓库
  7. 如何构建一个可用的企业级API网关?
  8. FOI2022 夏令营基础班 day1题解
  9. 使用计算机软件签什么合同,软件使用许可有哪些种类,签软件使用许可合同注意事项...
  10. 如何从CentOS官网下载我们想要的版本镜像
  11. 智商情商哪个重要_情商与智商哪个更重要?三个方面让你彻底明白
  12. Google Chrome崩溃图片
  13. 【解决方案】如何搭建运动场体育赛事直播方案:EasyCVR综合智能化体育赛事直播
  14. Channel closed; cannot ack/nack
  15. zju网页的自动登录和认证
  16. QQ无法访问个人文件夹,修复失败问题
  17. 谷歌浏览器如何设置和恢复纯黑界面
  18. 【virtualbox】虚拟机virtualbox mac版使用教程
  19. USBISP下载线驱动
  20. linux系统下一键还原,Linux系统下修复ThinkPad 一键恢复功能

热门文章

  1. 【DBeaver】安装与使用教程
  2. 传统的企业如何实现数字化转型?
  3. 广西国家级自然保护区功能区划图(展示)
  4. python六大数据类型详解
  5. 第二型曲线和曲面积分总结
  6. (转)webpack简介
  7. Oracle 取余函数
  8. (FortiGate)飞塔防火墙查看CPU内存使用情况
  9. bootstrap 5 表单验证
  10. numpy | 取矩阵非零元素