2. 各デッキのカードのスコアを計算します。各デッキのカードには元のサイズ (つまり、ペア、ストレート、ゴールデン フラワー、ストレート ゴールド、ボビンを除く) があり、
各カードのスコアは 2 桁の数字です。たとえば、「A」: 14、「10」: 10、「2」: 「02」のように、先頭に 0 が追加されます。 「k」:13、「7」:07
3枚のカードをポイント数に応じて(大きいものから小さいものまで)並べて6桁の数字を作ります。例: 'A27': 140702、'829': 090802、'JK8': 131108、'2A10': 141002
例外として、ペアの場合は、最初の 2 桁にペアの数字を入れます (これを行う理由は後で説明します)。例: '779': 070709、'7A7': 070714、'A33': 030314
現在のスコアは 6 桁の数値で、ペアは元の値に 10*100000 を加えた値に設定されており、7 桁の数値になります。例: '779': 1070709、'7A7': 1070714、'A33': 1030314
ストレートゴールドは実際には黄金の花とストレートチャイルドの合計であるため、ストレートゴールドは50*10000になるはずです。 例: 'スペード 7,スペード 6,スペード 8': 5080706
3. 2 つのカードのサイズを比較します (計算されたスコアを使用して比較します)。
クラスプレイカード
{
public $suits = array('スペード', 'ハート', 'ダイヤモンド', 'クラブ');
public $figures = array('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'、'A');
public $cards = array();
パブリック関数 __construct()
{
$cards = 配列();
foreach($this->$suit として適合){
foreach($this->figures as $figure){
$cards[] = 配列($suit,$figure);
}
}
$this->cards = $cards;
}
パブリック関数 getCard()
{
シャッフル($this->カード);
//生成3张牌
return array(array_pop($this->cards), array_pop($this->cards), array_pop($this->cards));
}
パブリック関数 CompareCards($card1,$card2)
{
$score1 = $this->ownScore($card1);
$score2 = $this->ownScore($card2);
if($score1 > $score2) 1 を返します。
elseif($score1 < $score2) return -1;
0を返します。
}
プライベート関数 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]){
$スコア += 60*100000;
}
//金花 30*100000
if($suit[0] == $suit[1] && $suit[0] == $suit[2]){
$スコア += 30*100000;
}
//顺子 20*100000
if($figure[0] == $figure[1]+1 && $figure[1] == $figure[2]+1 || implode($figure) =='140302'){
$スコア += 20*100000;
}
//对子 10*100000
if($figure[0] == $figure[1] && $figure[1] != $figure[2]){
$スコア += 10*100000;
}
$score を返します。
}
}
//テスト
$playCard = 新しい PlayCard();
$card1 = $playCard->getCard();
$card2 = $playCard->getCard();
$result = $playCard->compareCards($card1,$card2);
echo 'card1 は ',printCard($card1),'
';
echo 'card2 は ',printCard($card2),'
';
$str = 'カード1をカード2に追加';
if($result == 1) $str = 'カード1はカード2より大きい';
elseif($result == -1) $str = 'カード1はカード2より小さい';
エコー $str;
関数 printCard($card)
{
$str = '(';
foreach($card as $v){
$str .= $v[0].$v[1].',';
}
戻りトリム($str,',').')';
}
代码如下:
クラスプレイカード
{
public $suits = array('スペード', 'ハート', 'ダイヤモンド', 'クラブ');
public $figures = array('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'、'A');
public $cards = array();
パブリック関数 __construct()
{
$cards = 配列();
foreach($this->$suit として適合){
foreach($this->figures as $figure){
$cards[] = 配列($suit,$figure);
}
}
$this->cards = $cards;
}
パブリック関数 getCard()
{
シャッフル($this->カード);
//生成3张牌
return array(array_pop($this->cards), array_pop($this->cards), array_pop($this->cards));
}
パブリック関数 CompareCards($card1,$card2)
{
$score1 = $this->ownScore($card1);
$score2 = $this->ownScore($card2);
if($score1 > $score2) 1 を返します。
elseif($score1 < $score2) return -1;
0を返します。
}
プライベート関数 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]){
$スコア += 60*100000;
}
//金花 30*100000
if($suit[0] == $suit[1] && $suit[0] == $suit[2]){
$スコア += 30*100000;
}
//顺子 20*100000
if($figure[0] == $figure[1]+1 && $figure[1] == $figure[2]+1 || implode($figure) =='140302'){
$スコア += 20*100000;
}
//对子 10*100000
if($figure[0] == $figure[1] && $figure[1] != $figure[2]){
$スコア += 10*100000;
}
$score を返します。
}
}
//テスト
$playCard = 新しい PlayCard();
$card1 = $playCard->getCard();
$card2 = $playCard->getCard();
$result = $playCard->compareCards($card1,$card2);
echo 'card1 は ',printCard($card1),'
';
echo 'card2 は ',printCard($card2),'
';
$str = 'カード1をカード2に追加';
if($result == 1) $str = 'カード1はカード2より大きい';
elseif($result == -1) $str = 'カード1はカード2より小さい';
エコー $str;
関数 printCard($card)
{
$str = '(';
foreach($card as $v){
$str .= $v[0].$v[1].',';
}
戻りトリム($str,',').')';
}
ここで説明されている大家向けの php プログラムの設計が役立つことを望みます。
http://www.bkjia.com/PHPjc/966364.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/966364.html技術記事 PHP 实现扎金花游戏の大小比赛の方法 この篇文章主要介绍了PHP实现扎金花游戏の大小比赛の方法、例分析扎金花游戏の動作原理と相対計算...