×

策划数字游戏开源构建

消耗积分:0 | 格式:zip | 大小:0.42 MB | 2023-07-07

分享资料个

描述

在看过基于Krishna Lalith 版本的Knights Tour 拼图后,我对她的另一个项目很感兴趣,那就是她的Mastermind Game Krishna 的版本创建了一个包含所有可能结果的数组,并且基本上使用蛮力来尝试每一种可能的结果,从而在了解数字是否存在时消除未来的猜测。我的变体基本相同。它不是拥有所有可能结果的数组,而是将用户的结果连同其猜测一起存储在历史数组中,并将任何派生规则存储在规则数组中。规则数组应用于未来的猜测,历史数组用于根据用户之前的响应确定新规则。

该软件基于以下#define陈述以三种模式运行:

#define AUTO 10000

#define SINGLE 9651

#define RELEASE 0

:

#define COMPILE_MODE RELEASE

#define COMPILE_MODE可以AUTOSINGLE或者RELEASE

自动模式

在这种模式下,软件将测试玩家可以选择的每个数字排列。它将确定哪个数字进行了最多的猜测。输出显示在 Arduino IDE 控制台上。

单人模式

在确定哪个数字被猜测最多后,它被放置在#define SINGLE xxxx编译器常量中并COMPILE_MODE设置为SINGLE. Arduino IDE 控制台上的输出显示所做的猜测及其创建的规则。有4条规则

  • KNOWN - 已知位置的已知数字
  • SOMEWHERE - 已知数字在错误的位置并且已知不在特定位置
  • 任何地方 - 已知数字在错误的位置,但不知道其他任何东西。
  • NEVER - 数字绝对不存在。

通过查看猜测的历史记录,您可以调整算法并再次尝试 AUTO 模式,看看是否有改进,或者是否有任何数字序列无法解决。

发布模式

这是允许用户交互的最终游戏模式。

著名景点

该功能computerGuessPlayer是计算机将尝试猜测玩家号码的地方。它有两个参数,都是回调函数。

pInputFunction- 调用函数以获取对猜测的响应

pOutputFunction- 调用函数以显示正在进行的猜测

这允许 AUTO 和 SINGLE 模式测试不同的值来猜测和 RELEASE 模式使用键盘和显示器。

规则数组仅包含唯一规则并进行排序,以便在 SOMEWHERE 和 ANYWHERE 规则之前测试 KNOWN 规则。

构建游戏

我设计了一个 PCB 来固定开关和显示器,并 3D 打印了一个合适的外壳。ATMega328 芯片安装在电路板的背面。我使用了 28 针 DIL 变体。IC 插座的引脚被压平并像 SMD 设备一样焊接到电路板上。还有一个 5V SMD 稳压器和一个 16 MHz SMD 谐振器。

我已经包含了 Eagle 文件,以防您想将电路板商业化制作或像我一样自己制作。我使用碳粉方法。

3D 打印外壳后,用 2.5 毫米的钻头钻出安装孔,并用 3 毫米的丝锥钻出螺纹。使用 6mm M3 螺钉将电路板固定到位。

制作开关

我提供了一个 Eagle 电路板布局,您可以使用激光打印机将其打印到透明标签上。

poYBAGOSr42AXdiHAABglZq9z3U992.jpg
将按钮顶部打印到透明标签上
 

切标签

poYBAGOSr5GAYjkzAAAiLOdGyNM459.jpg
开关和按钮顶部部件
 

组装开关

poYBAGOSr5eAAaVvAACBRBqLJpQ960.jpg
完成按钮
 

最后组装PCB并将其固定到前面板

pYYBAGOhXGeACEXvABH9U3qdYi0898.jpg
6mm M3 螺丝将电路板固定在前面板上
 

连接电池和开关

pYYBAGOhXKmAJvwAABDsLNLBOL4394.jpg
电线开/关开关和电池
 

使用 FTDI 编程器对 ATMega328 进行编程。如果 ATMega328 未使用 Arduino UNO 引导加载程序进行预编程,您需要先添加一个。

poYBAGOILvOAa6NaAADWIEIULTI859.jpg
FTDI程序员
 

结论

这是一个有趣的编程练习。该算法可以大大改进。它只回顾历史表中的一两个动作。硬件也可以与扬声器一起使用。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'策划数字游戏开源构建',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);