扎金花游戏 PHP 实现代码之大小比赛
扎金花游戏 PHP 实现代码之大小比赛
程序离不开算法,在前面的博客当中,其实我们已经讨论过寻路的算法。不过,当时的示例图中,可选的路径是唯一的。我们挑选一个算法,就是说要把这个唯一的路径选出来,怎么选呢?
还记得上初中的时候经常下午放学就躲在路边扎金花来赌*钱,貌似还上瘾了,现在过年的时候还经常一起扎金花赌*钱,但运气不啥好,每次都是输啊。
今天阳光明媚,由于清明节才出去玩了,所以今天没有去哪。闲着没事就想了下怎么用程序实现金花中两幅牌的大小比较,现在把它实现了,有些方法还是蛮重要的,因此就记下来。
好了,不废话了。
扎金花两副牌的比较规则就不说了,注明一下是顺子的时候 : JQK < A23 < QKA
思路:扎金花(http://www.a8u.net/)
1" 随机生成两幅牌,每副牌结构为
- array(
- array('Spade','K'),
- array('Club','6'),
- array('Spade','J'),
- )
array(array('Spade','K'),array('Club','6'),array('Spade','J'),
)
2” 计算每副牌的分值:每副牌有个原始大小(即排除对子,顺子,金花,顺金,筒子的大小),再
每张牌的分值为一个2位数,不足2位的补前导0,例如'A':14,‘10’:10,’2‘:’02‘,’k‘:13,’7‘:07
将3张牌按点数大小排序(从大到小),凑成一个6位数。例如’A27':140702,‘829’:090802,‘JK8’:131108,‘2A10’:141002
例外,对于对子要将对子的位数放在前两位(后面会看到为什么这么做)。例如‘779’:070709,‘7A7’:070714,‘A33’:030314
现在的分值是一个6位数,将对子设为一个原始值加上10*100000的值,现在为一个7位数。例如‘779’:1070709,‘7A7’:1070714,‘A33’:1030314
对于顺子,将结果加上20*100000.。例如‘345’:2050403,‘QKA’:2141312,‘23A’:2140302
对于金花,将结果加上30*100000。例如‘Spade K,Spade 6,Spade J':3131106
因为顺金的时候其实是金花和顺子的和,所以顺金应该是50*10000。 例如‘Spade 7,Spade 6,Spade 8':5080706
对于筒子,将结果加上60*100000。例如’666‘:6060606,’JJJ‘:6111111
3“ 比较两幅牌的大小(用所计算的分值来比较)
就这么简单!!
代码如下(PHP)
- <?php
- class PlayCards
- {
- public $suits = array('Spade', 'Heart', 'Diamond', 'Club');
- public $figures = array('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A');
- public $cards = array();
- public function __construct()
- {
- $cards = array();
- foreach($this->suits as $suit){
- foreach($this->figures as $figure){
- $cards[] = array($suit,$figure);
- }
- }
- $this->cards = $cards;
- }
- public function getCard()
- {
- shuffle($this->cards);
- //生成3张牌
- return array(array_pop($this->cards), array_pop($this->cards), array_pop($this->cards));
- }
- public function compareCards($card1,$card2)
- {
- $score1 = $this->ownScore($card1);
- $score2 = $this->ownScore($card2);
- if($score1 > $score2) return 1;
- elseif($score1 < $score2) return -1;
- return 0;
- }
- private function ownScore($card)
- {
- $suit = $figure = array();
- foreach($card as $v){
- $suit[] = $v[0];
- $figure[] = array_search($v[1],$this->figures)+2;
- }
- //补齐前导0
- for($i = 0; $i < 3; $i++){
- $figure[$i] = str_pad($figure[$i],2,'0',STR_PAD_LEFT);
- }
- rsort($figure);
- //对于对子做特殊处理
- if($figure[1] == $figure[2]){
- $temp = $figure[0];
- $figure[0] = $figure[2];
- $figure[2] = $temp;
- }
- $score = $figure[0].$figure[1].$figure[2];
- //筒子 60*100000
- if($figure[0] == $figure[1] && $figure[0] == $figure[2]){
- $score += 60*100000;
- }
- //金花 30*100000
- if($suit[0] == $suit[1] && $suit[0] == $suit[2]){
- $score += 30*100000;
- }
- //顺子 20*100000
- if($figure[0] == $figure[1]+1 && $figure[1] == $figure[2]+1 || implode($figure) =='140302'){
- $score += 20*100000;
- }
- //对子 10*100000
- if($figure[0] == $figure[1] && $figure[1] != $figure[2]){
- $score += 10*100000;
- }
- return $score;
- }
- }
- //test
- $playCard = new PlayCards();
- $card1 = $playCard->getCard();
- $card2 = $playCard->getCard();
- $result = $playCard->compareCards($card1,$card2);
- echo 'card1 is ',printCard($card1),'<br/>';
- echo 'card2 is ',printCard($card2),'<br/>';
- $str = 'card1 equit card2';
- if($result == 1) $str = 'card1 is larger than card2';
- elseif($result == -1) $str = 'card1 is smaller than card2';
- echo $str;
- function printCard($card)
- {
- $str = '(';
- foreach($card as $v){
- $str .= $v[0].$v[1].',';
- }
- return trim($str,',').')';
- }
<?php
class PlayCards
{public $suits = array('Spade', 'Heart', 'Diamond', 'Club');public $figures = array('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A');public $cards = array();public function __construct(){$cards = array();foreach($this->suits as $suit){foreach($this->figures as $figure){$cards[] = array($suit,$figure);}}$this->cards = $cards;}public function getCard(){shuffle($this->cards);//生成3张牌return array(array_pop($this->cards), array_pop($this->cards), array_pop($this->cards)); }public function compareCards($card1,$card2){$score1 = $this->ownScore($card1);$score2 = $this->ownScore($card2);if($score1 > $score2) return 1;elseif($score1 < $score2) return -1;return 0; }private function ownScore($card){$suit = $figure = array();foreach($card as $v){$suit[] = $v[0];$figure[] = array_search($v[1],$this->figures)+2;}//补齐前导0for($i = 0; $i < 3; $i++){$figure[$i] = str_pad($figure[$i],2,'0',STR_PAD_LEFT);}rsort($figure);//对于对子做特殊处理if($figure[1] == $figure[2]){$temp = $figure[0];$figure[0] = $figure[2];$figure[2] = $temp;}$score = $figure[0].$figure[1].$figure[2];//筒子 60*100000if($figure[0] == $figure[1] && $figure[0] == $figure[2]){$score += 60*100000;}//金花 30*100000if($suit[0] == $suit[1] && $suit[0] == $suit[2]){$score += 30*100000;}//顺子 20*100000if($figure[0] == $figure[1]+1 && $figure[1] == $figure[2]+1 || implode($figure) =='140302'){$score += 20*100000;}//对子 10*100000if($figure[0] == $figure[1] && $figure[1] != $figure[2]){$score += 10*100000;}return $score;}
}//test
$playCard = new PlayCards();
$card1 = $playCard->getCard();
$card2 = $playCard->getCard();
$result = $playCard->compareCards($card1,$card2);echo 'card1 is ',printCard($card1),'<br/>';
echo 'card2 is ',printCard($card2),'<br/>';
$str = 'card1 equit card2';
if($result == 1) $str = 'card1 is larger than card2';
elseif($result == -1) $str = 'card1 is smaller than card2';
echo $str;function printCard($card)
{$str = '(';foreach($card as $v){$str .= $v[0].$v[1].',';}return trim($str,',').')';
}
扎金花游戏 PHP 实现代码之大小比赛相关推荐
- 扎金花 游戏开发细节与部分代码
扎金花 游戏开发细节与部分代码,斗地主游戏中的牌型很多,算法也各有不同,但我总觉得网上一些通用的算法有点铺天盖地,所以,我决定自己来重新想一下算法,总的来说,无论你出什么处于,三带二,炸,4带一等,你 ...
- Python实现炸金花游戏的示例代码
本文主要介绍了Python实现炸金花游戏的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下.编程学习资料点击领取. 今天的第二个作品,哈哈哈哈,搞起来感觉还挺 ...
- python基础练习(猜拳游戏、扎金花游戏、购物小程序)
猜拳游戏 需求分析: * 使用面向对象和python的基础语法,运用简单的逻辑处理实现猜拳游戏 * 要求游戏可以多次玩耍 * 要求统计分数 * 要求可以选择角色 # 玩家自己的类, class Own ...
- JAVA学习练习(扎金花与21点)
目前转行学习JAVA.记得N年学过C++,接触JAVA后感觉上手比较容易.学习半月熟练使用循环.判断,自行看书了解JAVA类的使用,并尝试用类完成编程.大概完成了老师题目,类和方法用得很混乱,但是总归 ...
- XMPP 扎金花各种网络传送之音频发送
XMPP各种网络传送开发,一个好的扎金花游戏需要高强度的网络传输支持,音频的发送,与之前图片的发送,有一定的相似,也有一些不同.音频发送的核心思想,是按下按钮开始录音,松开手结束录音并且保存录音 ...
- 纸牌游戏扎金花的牌大小比较(PHP)
还记得上初中的时候经常下午放学就躲在路边扎金花来赌钱,貌似还上瘾了,现在过年的时候还经常一起扎金花赌钱,但运气不啥好,每次都是输啊. 今天阳光明媚,由于清明节才出去玩了,所以今天没有去哪.闲着没事就想 ...
- 详细的Python炸金花游戏代码
** 详细的Python炸金花游戏代码 ** 觉得有用请点个赞吧 #!/usr/bin/env python # -*- coding: utf-8 -*- ''' # @Time: 2022/07/ ...
- 扎金花大小比较算法(Java版)
注:以下算法说明仅限一副牌(不包含大小王)的情况 1.扎金花规则说明(大家都懂的,这里做简单描述): 1)玩家每人3张牌: 2)牌面大小2.3.4.5.6.7.8.9.10(用T表示),J.Q.K.A ...
- 闲来无事,写一款扎金花小游戏,先练练手,打的时候好赢钱
大年三十我坐庄,大年初一就背井离乡 众所 周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花 的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三 ...
最新文章
- ARM-Linux与嵌入式开发
- oracle 清理定期备份文件,RAC RMAN定期备份及删除脚本
- APP模拟手势高级操作
- 通往奥格瑞玛的道路(洛谷 1462)
- 上大学了,但学校一般,该怎么办?
- WebBenchmark动态测试Webapi
- WINCE 加入驱动DLL步骤
- 常微分方程第三版_常微分方程:(第六章)非线性微分方程:5节
- Java21天打卡Day6-switch
- python版本差异_npm install报错,不知道是系统差异还是node版本差异,跟python有关系?...
- 允许远程访问MySQL的设置
- Solr进阶之Solr综合文本相似度的多因素权重排序实现
- linux 7.4ip配置,新手进阶 Ubuntu7.10中配置IP地址
- 高性能MYSQL(查询优化)
- qq空间不能访问解决方法
- Xshell7的下载和安装
- 虫子满屏爬_三bug多线程示例程序浅析
- Jenkins简介与应用
- MATLAB仿真斜坡信号的校正,控制系统仿真matlab第六章习题答案.doc
- 钩陈/ 为什么会忍不住复训蟒营™
热门文章
- 怎么运行java虚拟机_Java代码如何运行在Java虚拟机中
- linux wifi pro6818,GEC6818连接Ubuntu,下载程序至开发板
- oracle 分页_80分页查询,不止写法
- python函数模块_06.Python函数和模块
- 2022年中国酒店业数字化转型趋势报告
- 分支和循环结构的应用(习题)
- ec200t 拨号_移远EC20 R2.0 AT指令拨号流程
- springmvc的主要功能_Spring MVC入门
- 专题:区块链与数据共享(上)
- 【Java】Date类和Calendar类必知必会