完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`点击学习>>《龙哥手把手教你学LabVIEW视觉设计》视频教程 【每周一练】labview益智游戏 - 2048【已结束】https://bbs.elecfans.com/jishu_522517_1_1.html 【每周一练】LabVIEW益智游戏 - 24点【已结束】https://bbs.elecfans.com/jishu_517445_1_1.html 【每周一练】LabVIEW益智游戏 - 撑竹竿过河【已结束】https://bbs.elecfans.com/jishu_514770_1_1.html 电子发烧友论坛每周一练第二期益智游戏24点活动已经结束了,源程序和评分都已在原网页上发布,喜欢的下载下来看看,一定能从中学到很多东西。 我侥幸的得到了第一名,现在跟大家分享一下程序设计经验,其中定会存在不足,还望高手多多指点。 我的程度的整体设计思路已在《开发者文档》中写的比较清楚了,但文档是在最初开发程序时写的,现在看来,也有不正确的地方,接下来跟大家分享该文档,结合文档中的问题与大家在程序设计中存在的问题,再次详细的分析该程序的设计要点。 以下摘自《开发者文档》并适当修改: 1、采用生产者消费者结构 程序可以仅使用事件结构,但生产者消费者结构维护方便,更便于程序的实现。 2、程序比较简单,为了程序结构的简洁,不使用自定义控件 队列元素使用字符串; 扑克的显示使用图片下拉列表组成的数组。 3、程序功能 包括24点游戏、批量24点计算、概率计算(包括理论与随机概率计算)全部的要求。 4、随机生成4个数 给的建议为随机生成4个1-13的数,样本为13^4,不符合实际的52取4的样本。 考虑实际的游戏情况,应该是52随机取4,程序实现中可以先将52张牌随机洗牌,之后抽取最前边4张组成四张牌,下一轮抽取剩下48张牌的最前边4张,依次往后…剩余牌数为0时,自动随机洗牌,同时可增加手动洗牌的功能。 洗牌可采用LabVIEW自带的【重排数组元素】。 可以每次都重新洗牌,对统计概率没有影响,但每次都洗牌不符合实际,同时影响程序性能。 5、计算器 程序中用到了将字符串当公式计算结果,采用LabVIEW自带的【公示节点求值】(该VI功能强大,也比较难懂,本题目的要求比较简单,还可以自己编写简单易懂的程序,也可以使用动态链接库来完成)。 同时计算器需要验证输入的字符串是否符合要求,比如直接输入24,计算结果就是24,需增加验证程序; 计算结果的与(24-精度)跟(24+精度)比较即可判断是否正确(精度建议取1e-6~1/13),直接判断或转为整数(四舍五入等)后判断是否等于24不正确。 6、自动计算公式 即常见的枚举法填运算符,考虑程序运行效率,使用调用动态链接库的方法,由C语音完成算法的实现。 点击“我不会”之后,结果公式自动填入公式输入框,而不是提示栏,便于游戏。 7、自动计算算法 整体运算格式分两种情况: 第1种表达式:(data1□data2)□(data3□data4)=24; 该表达式只用4个数循环代入、穷举4*4*4种运算符即可。 第2种表达式:((data1□data2)□data3)□data4=24; 使用4个数循环代入,该表达式可包括以下表达式: data1□(data2□(data3□data4))=24;data1□((data2□data3)□data4)=24;(data1□(data2□data3))□data4=24; 但由于减法、除法的两个操作数是不可交换的,增加反减(交换操作数后做减法)、反除(交换操作数后做除法)两个运算, 该种表达式需穷举4*6*6种运算符。 鉴于本程序需求只用提示一个解,以上程序只要找到一个解即可退出返回。 具体算法见源代码,如完全用LabVIEW实现,也可按该代码实现,但LabVIEW的程序效率会较低。 8、批量24点计算 未说明批量的量有多大,但给的样本仅1.27kb,按文件最大20M计算,可一次性读取文件、操作显示,未进行分批次及内存管理; 输出结果用二维数组字符串表示,数组拼接效率地下,尽量采用批量操作; 用时都在1ms内(显示的1ms其实是正好赶上毫秒数更换,并没有1ms),无意思。 9、理论概率计算 应该按52取4的方法计算,样本270725,有解217817,有解率80.4569%,用时18~22秒。 顺便计算13选1选4次的概率,样本为13^4=28561,有解22615,有解率79.1814%,用时1.8~2.3秒。 1820种不同的组合,有解1362,有解率74.8352%,用时0.2~0.4秒,使用该方法可以判断算法是否正确; 以上测试计时用CPU为i5-3470。 10、随机概率计算 自动进行发牌操作,统计有解概率,仅统计与实际游戏相符的52取4的有解概率,理论值为80.4569%。 增加保留历史发牌总数与有解数量的功能,清除数据时数弹窗提示。 测试的几千万的历史数据得到的概率为80.44%~80.46%,与理论值80.4569%接近。 11、界面设计、程序注释、图标优化 时间有限(24日才在论坛看到),界面只做简单的设计,在一个界面中显示了所有功能,没有弹窗等,界面一般; 程序使用生产者消费者结构,比较容易理解,简单制作图标。 12、键盘操作优化 增加各按钮的键盘操作快捷键,Esc、F1~F12,方便操作。 13、软件使用说明 完善开发者文档、编写软件Readme文档。 14、扩展:增加任意输入4个数返回公式结果功能。 15、扩展(未做) 1-10的24点扩展 只需修改洗牌(40的全排)与显示处(换下拉列表框,或按13的列表框修改值)的程序即可,概率统计也只用修改52、13等值即可。 三种概率依次为:79936/91390=87.4669%、8558/10000=85.8500%、566/715=79.1608%。 程序设计补完·201511 https://bbs.elecfans.com/jishu_528940_1_1.html ` 本帖被以下淘专辑推荐:
|
|
相关推荐
|
|
用udl里的字符串信息在局域网内其他电脑连接sql数据库为什么为出现连接失败拒绝访问?
1352 浏览 1 评论
为什么同一个队列引用的全局变量,运行在两个子vi中发现队列数据丢失了
1174 浏览 0 评论
1388 浏览 0 评论
关于labview2024版本的lvanlys.dll出错的问题
2401 浏览 2 评论
1334 浏览 2 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 16:28 , Processed in 0.510729 second(s), Total 50, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号