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,',').')';
}
|