您正在使用 IPV4 [35.172.193.238] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
悟空收录网       [公益]保护绿色环境,构建和谐社会      

【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折      
[公益] 地球是我家,绿化靠大家      
2024年 清明节 006
2024年 劳动节 033
2025年 元 旦 278
2025年 春 节 306
 
您现在的位置:首页 >> PHP >> 内容
本类新增
本类热门
PHP实现扎金花游戏之大小比赛的方法
内容摘要: 1.随机生成两幅牌,每副牌结构为代码如下:array(array('Spade','K'),array('Club','6'),array('Spade','J'),)代码如下:array(array('Spade','K'),array('Club','6'),array('Spade','J'),)2.计算每副牌的分值:每副牌有个原始大小(即排除对子,顺......
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。例如‘SpadeK,Spade6,SpadeJ':3131106

因为顺金的时候其实是金花和顺子的和,所以顺金应该是50*10000。例如‘Spade7,Spade6,Spade8':5080706

对于筒子,将结果加上60*100000。例如'666‘:6060606,'JJJ‘:6111111

3.比较两幅牌的大小(用所计算的分值来比较)

就这么简单!!

代码如下(PHP)

代码如下:

<?php

classPlayCards

{

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();

publicfunction__construct()

{

$cards=array();

foreach($this->suitsas$suit){

foreach($this->figuresas$figure){

$cards[]=array($suit,$figure);

}

}

$this->cards=$cards;

}

publicfunctiongetCard()

{

shuffle($this->cards);

//生成3张牌

returnarray(array_pop($this->cards),array_pop($this->cards),array_pop($this->cards));

}

publicfunctioncompareCards($card1,$card2)

{

$score1=$this->ownScore($card1);

$score2=$this->ownScore($card2);

if($score1>$score2)return1;

elseif($score1<$score2)return-1;

return0;

}

privatefunctionownScore($card)

{

$suit=$figure=array();

foreach($cardas$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=newPlayCards();

$card1=$playCard->getCard();

$card2=$playCard->getCard();

$result=$playCard->compareCards($card1,$card2);

echo'card1is',printCard($card1),'<br/>';

echo'card2is',printCard($card2),'<br/>';

$str='card1equitcard2';

if($result==1)$str='card1islargerthancard2';

elseif($result==-1)$str='card1issmallerthancard2';

echo$str;

functionprintCard($card)

{

$str='(';

foreach($cardas$v){

$str.=$v[0].$v[1].',';

}

returntrim($str,',').')';

}

代码如下:

<?php

classPlayCards

{

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();

publicfunction__construct()

{

$cards=array();

foreach($this->suitsas$suit){

foreach($this->figuresas$figure){

$cards[]=array($suit,$figure);

}

}

$this->cards=$cards;

}

publicfunctiongetCard()

{

shuffle($this->cards);

//生成3张牌

returnarray(array_pop($this->cards),array_pop($this->cards),array_pop($this->cards));

}

publicfunctioncompareCards($card1,$card2)

{

$score1=$this->ownScore($card1);

$score2=$this->ownScore($card2);

if($score1>$score2)return1;

elseif($score1<$score2)return-1;

return0;

}

privatefunctionownScore($card)

{

$suit=$figure=array();

foreach($cardas$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=newPlayCards();

$card1=$playCard->getCard();

$card2=$playCard->getCard();

$result=$playCard->compareCards($card1,$card2);

echo'card1is',printCard($card1),'<br/>';

echo'card2is',printCard($card2),'<br/>';

$str='card1equitcard2';

if($result==1)$str='card1islargerthancard2';

elseif($result==-1)$str='card1issmallerthancard2';

echo$str;

functionprintCard($card)

{

$str='(';

foreach($cardas$v){

$str.=$v[0].$v[1].',';

}

returntrim($str,',').')';

}

版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:php获取指定范围内最接近数的方法

 

下一篇:php实现贪吃蛇小游戏

发布日期:2023/3/1
手机扫二维码直达本页
发布时间:12:02:34
点  击:7
录  入:齐天大圣
相关文章
Baidu
YiJiaCMS 7.3.8 build231228(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,Cloudflare提供加速防护
运行时间载入中.....