《数独游戏的设计与实现》
数独游戏的设计与实现
一、数独游戏简介
数独游戏,是一种数学智力拼图游戏,是“独立的数字游戏”的简称,源自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
《数独游戏的设计与实现》相关推荐
- ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- 信息学奥赛真题解析(玩具谜题)
玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...
- 信息学奥赛之初赛 第1轮 讲解(01-08课)
信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...
- 信息学奥赛一本通习题答案(五)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通习题答案(三)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通题目代码(非题库)
为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离
首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...
最新文章
- ScrollView反弹效果
- linux 挂载多余空间,linux 空间不够,磁盘挂载
- 解决<style>无法重写.css文件的问题
- 微信小程序初始化 operateWXData:fail invalid scope
- 为什么雷军指责“华为不懂研发”?| 畅言
- git21天打卡day3-创建仓库
- 如何构建一个可用的企业级API网关?
- FOI2022 夏令营基础班 day1题解
- 使用计算机软件签什么合同,软件使用许可有哪些种类,签软件使用许可合同注意事项...
- 如何从CentOS官网下载我们想要的版本镜像
- 智商情商哪个重要_情商与智商哪个更重要?三个方面让你彻底明白
- Google Chrome崩溃图片
- 【解决方案】如何搭建运动场体育赛事直播方案:EasyCVR综合智能化体育赛事直播
- Channel closed; cannot ack/nack
- zju网页的自动登录和认证
- QQ无法访问个人文件夹,修复失败问题
- 谷歌浏览器如何设置和恢复纯黑界面
- 【virtualbox】虚拟机virtualbox mac版使用教程
- USBISP下载线驱动
- linux系统下一键还原,Linux系统下修复ThinkPad 一键恢复功能