ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: aoe1981

[原创] 纸牌游戏十点半之Excel版

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-31 00:17 | 显示全部楼层
备注下:
工作表保护密码从代码中可以看出来是123,方便大家备用……

TA的精华主题

TA的得分主题

发表于 2014-8-31 00:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 yjh_27 于 2014-8-31 00:28 编辑

♠♥♦♣
继续

TA的精华主题

TA的得分主题

发表于 2014-8-31 09:02 | 显示全部楼层
本帖最后由 香川群子 于 2014-8-31 09:05 编辑
aoe1981 发表于 2014-8-31 00:06
关于比花色是如何实现的呢?
采用了数值化的方法:

花色比较你搞复杂了吧。

应该很容易的。

因为花色顺序决定了,所有的54张牌都只有一个大小顺序值,
而比较只需取最大值即可。

因此,大王=54>二王=53>桃10=52>桃9=51……这样事先做好一个固定常数数组即可。

如 :
s= "升方K方Q方J方A方2方3方4方5方6方7方8方9方0梅K梅Q梅J梅A梅2梅3梅4梅5梅6梅7梅8梅9梅0红K红Q红J红A红2红3红4红5红6红7红8红9红0桃K桃Q桃J桃A桃2桃3桃4桃5桃6桃7桃8桃9桃0二王大王"

[花色值]= Instr(s,[牌点])/2

在工作表中可用Find()函数:=FIND(A1,$C$1)/2
C1单元格中为s字符。

注意,s字符起始第1个加了个"升"字,一是为了标记序列特征,二可以让Instr返回值为偶数,然后除以2得到整数。
(但貌似比大小时,实际也没必要除以2的)

另外,s中花色排序为升序,是因为排在后面的花色值结果才会更大。

(貌似如果按降序排也可以,但此时【比大】判断要变成【比小】判断才对。呵呵)

那就顺便贴一下降序的s字符串:
s="降大王二王桃0桃9桃8桃7桃6桃5桃4桃3桃2桃A桃J桃Q桃K红0红9红8红7红6红5红4红3红2红A红J红Q红K梅0梅9梅8梅7梅6梅5梅4梅3梅2梅A梅J梅Q梅K方0方9方8方7方6方5方4方3方2方A方J方Q方K"


以上

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-8-31 09:07 | 显示全部楼层
在花色表示中,以0代替10,这样可以保证都是2个字符显示。

A是否用1代替、随便。

我们这里习惯称【大王、小王】。不说【大王、二王】的……

点评

这个建议确实值得借鉴,尽量简化确实会带来方便的……  发表于 2014-8-31 09:20

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-8-31 09:18 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-31 09:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2014-8-31 09:02
花色比较你搞复杂了吧。

应该很容易的。

其实,我也是对这个十点半的规则不是完全熟练,而是在编写这些代码时才进行了深入的思考……毕竟玩牌的次数不多,遇到的纸牌组合的特殊情况较少,规则中许多针对极端情况的没有遇到过……
一开始,我还想把摊牌后所有牌的花色值全部相加求和比较了……想来可笑!

TA的精华主题

TA的得分主题

发表于 2014-8-31 09:35 | 显示全部楼层
aoe1981 发表于 2014-8-31 09:19
其实,我也是对这个十点半的规则不是完全熟练,而是在编写这些代码时才进行了深入的思考……毕竟玩牌的次 ...

普通人知识储备不足时,会影响他的思维能力。

往往看不清问题本质,而习惯用【加法】思维,即采用很多单一功能方法的无限叠加、来实现较为复杂的功能。


但是,像我这样有一定水平的人,会用心思考问题的本质,
然后一针见血、一刀封喉地解决问题。往往不需要复杂的算法,而是力求用最简单通俗的方法去实现。

差异,仅仅是因为思考到位了。(这个需要一定逻辑和智商,但更多的是经验和用心)



评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-31 09:48 | 显示全部楼层
本帖最后由 aoe1981 于 2014-8-31 09:49 编辑
香川群子 发表于 2014-8-31 09:02
花色比较你搞复杂了吧。

应该很容易的。

“InStr 函数
返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。

语法
InStr([start, ]string1, string2[, compare])
InStr 函数的语法具有下面的参数:

部分 说明
start 可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个字符的位置开始。如果 start 包含 Null,将发生错误。如果指定了 compare 参数,则一定要有 start 参数。
string1 必要参数。接受搜索的字符串表达式。
string2 必要参数。被搜索的字符串表达式。
Compare 可选参数。指定字符串比较。如果 compare 是 Null,将发生错误。如果省略 compare,Option Compare 的设置将决定比较的类型。指定一个有效的LCID (LocaleID) 以在比较中使用与区域有关的规则。

设置
compare 参数设置为:
常数 值 描述
vbUseCompareOption   -1    使用Option Compare 语句设置执行一个比较。
vbBinaryCompare     0    执行一个二进制比较。
vbTextCompare     1    执行一个按照原文的比较。
vbDatabaseCompare   2    仅适用于Microsoft Access,执行一个基于数据库中信息的比较。

返回值
如果 InStr返回
string1 为零长度      0
string1 为 Null       Null
string2 为零长度      Start
string2 为 Null       Null
string2 找不到       0
在 string1 中找到string2    找到的位置
start > string2       0

说明
InStrB 函数作用于包含在字符串中的字节数据。所以 InStrB 返回的是字节位置,而不是字符位置。”

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-31 09:51 | 显示全部楼层
香川群子 发表于 2014-8-31 09:02
花色比较你搞复杂了吧。

应该很容易的。

这个函数在VBA中今天算是第一次使用,查了下,完整是否此处应当这样写:
[花色值]= Instr(1,s,[牌点],1)/2

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-31 10:13 | 显示全部楼层
8楼花色值计算自定义函数经香川点拨简化为:
  1. Public Function huasezhi(pm$) '花色值计算自定义函数
  2. Dim s$
  3. s = "升方K方Q方J方A方2方3方4方5方6方7方8方9方0梅K梅Q梅J梅A梅2梅3梅4梅5梅6梅7梅8梅9梅0红K红Q红J红A红2红3红4红5红6红7红8红9红0桃K桃Q桃J桃A桃2桃3桃4桃5桃6桃7桃8桃9桃0二王大王"
  4. huasezhi = InStr(s, pm) / 2
  5. End Function
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-28 11:13 , Processed in 0.047689 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表