当前位置: 首页 > news >正文

在MTK上实现数独小游戏

一次听朋友说起印度人喜欢数独小游戏。当时第一次听说数独这个名词,十分疑惑,就立即在百度上查了一下。大致了解了一下数独的玩法。百度对数独的解释大致如下:

九宫格数独,是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大的数字谜题。数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次。这种游戏全面考验做题者观察能力和推理能力,虽然玩法简单,但数字排列方式却千变万化,所以不少教育者认为数独是训练头脑的绝佳方式。

了解了其内容,思考片刻,感觉完全可以在MTK上实现,立即动手花了二十多分钟写了一个DEMO版。这里未考虑架构和移植,仅做技能方面的尝试。本版本适用于240X320的LCD。效果如下图,一个数独的初始化窗口,了解数独算法的人,可以很容易根据我的函数写出可应用的游戏。

奉上代码如下:

#if 1 //jia gdi_handle my_base_layer, my_bg_layer; void ExitDrawTudokuScreen() { gdi_layer_flatten_previous_to_base(); if (my_bg_layer != NULL) { gdi_layer_free(my_bg_layer); } } void DrawTudokuScreen(void) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ S32 i , j; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ EntryNewScreen(MAIN_MENU_SCREENID, ExitDrawTudokuScreen, DrawTudokuScreen, NULL); //开启多层 clear_screen(); entry_full_screen(); gdi_layer_multi_layer_enable(); gdi_layer_create(0, 0, UI_device_width, UI_device_height, &my_bg_layer); if (my_bg_layer == NULL) { return; } gdi_layer_lock_frame_buffer(); gdi_layer_get_base_handle(&my_base_layer); gdi_push_and_set_alpha_blending_source_layer(my_base_layer); //把base_layer层作为blending层 gdi_layer_clear_background(GDI_COLOR_TRANSPARENT);//刷色 gdi_layer_set_source_key(TRUE, GDI_COLOR_TRANSPARENT); //画数独,修改数独数值时使用,这里为维护作者权益,省略了一部分重要的代码 gdi_pop_and_restore_alpha_blending_source_layer(); //恢复blending层 gdi_layer_push_and_set_active(my_bg_layer); gdi_layer_clear_background(GDI_COLOR_TRANSPARENT);//刷色 gdi_layer_set_source_key(TRUE, GDI_COLOR_TRANSPARENT); // 画标题 gui_move_text_cursor(100, 10); gui_set_text_color(UI_COLOR_LIGHT_GREY); gui_print_text(L"Tudoku"); //画81个小方格 for (i = 0; i < 10; i++) { gui_wline(3,i*26+43, 234, i*26+43, UI_COLOR_BLACK, 1); gui_wline(3+i*26,43, 3+i*26, 277, UI_COLOR_BLACK, 1); } //画9个大方格,并把边框加宽 for (i = 0; i < 4; i++) { gui_wline(3,i*26*3+43, 234, i*26*3+43, UI_COLOR_BLACK, 3); gui_wline(3+i*26*3,43, 3+i*26*3, 277, UI_COLOR_BLACK, 3); } //在方框事输入数字 gui_set_font(&MMI_small_font); gui_set_text_color(UI_COLOR_RED); for (i = 0; i < 9; i++) { for (j = 0; j < 9;j++) { S32 x = 3, y = 43; x += i*26 + 5; y += j*26 + 5; gui_move_text_cursor(x, y); gui_print_text(L"0"); } } gdi_layer_pop_and_restore_active(); gdi_layer_unlock_frame_buffer(); gdi_layer_blt(my_bg_layer, my_base_layer, NULL, NULL, 0, 0, UI_device_width, UI_device_height); SetKeyHandler(GoBackHistory, KEY_RSK, KEY_EVENT_UP); } #endif

声明:本文是作者原创,受著作权法保护,请勿转载和用于商业用途,作者保留对侵权行为追究的权力!

相关文章:

  • 把javascript,vbscript中得数组传递给COM组件(or Activex)
  • 在C#中完成海量数据的批量插入和更新
  • js split()与John截取函数(复制)
  • photoshop保存背景透明图片办法
  • 软件配置项
  • php字符串变数组
  • 向现有表添加标识列(IDENTITY)
  • 轻松实现无刷新三级联动菜单[VS2005与AjaxPro]【转】
  • ArcSDE vs. Oracle Spatial 16
  • 论文选题系统
  • 使用Reflector查看闭包
  • 巧替换windows 7中的宋体 simsun.ttc
  • JavaScript学习笔记(二)——从简单开始学起
  • 切片地图服务使用Flex API编辑和更新切图
  • 敏捷宣言创始人:十年之后看“修炼”
  • 《深入 React 技术栈》
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • ECMAScript入门(七)--Module语法
  • golang 发送GET和POST示例
  • Hexo+码云+git快速搭建免费的静态Blog
  • IndexedDB
  • java 多线程基础, 我觉得还是有必要看看的
  • jdbc就是这么简单
  • Linux快速复制或删除大量小文件
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • node入门
  • Redux系列x:源码分析
  • Ruby 2.x 源代码分析:扩展 概述
  • Vue组件定义
  • Wamp集成环境 添加PHP的新版本
  • 产品三维模型在线预览
  • 创建一个Struts2项目maven 方式
  • 从0到1:PostCSS 插件开发最佳实践
  • 对超线程几个不同角度的解释
  • 对象引论
  • 复杂数据处理
  • 回流、重绘及其优化
  • 聊聊hikari连接池的leakDetectionThreshold
  • 我这样减少了26.5M Java内存!
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​如何在iOS手机上查看应用日志
  • # Maven错误Error executing Maven
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #在 README.md 中生成项目目录结构
  • ${factoryList }后面有空格不影响
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (5)STL算法之复制
  • (Ruby)Ubuntu12.04安装Rails环境
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读30/100)Convolutional Pose Machines
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m