PHPが金の花を刺すゲームの大きさの試合の方法を実現します。
プログラムはアルゴリズムと切り離せません。前で道を探すアルゴリズムを議論しました。ただし、その時の例示図では、オプションのパスは唯一である。アルゴリズムを選ぶということは、この唯一のパスを選択するということですが、どうやって選択すればいいですか?
中学校に行った時はいつも午後に学校が終わると道端に金を下ろして金を賭けていました。癖になったようです。今はお正月にいつも一緒に金を結んで賭けています。
今日は明るくて、清明節に遊びに行きましたので、今日はどこにも行きませんでした。暇な時はどうやってプログラムを使って金花の中の二つの牌の大きさを比較するかを考えました。今はそれを実現しました。いくつかの方法はやはり重要です。だからメモします。
もういいです。
金を結んで2枚の札の比較規則を使って言いません。順子であることを明記してください。
思考:金の花をくくります
1.ランダムに2枚の牌を生成し、各サブプレートの構造は
array(
array('Spade','K'),
array('Club','6'),
array('Spade','J'),
)
array(
array('Spade','K'),
array('Club','6'),
array('Spade','J'),
)
2.各サブプレートの分数を計算する:各サブプレートには元の大きさがあります。一枚の牌の点数は一桁の二桁で、二桁未満のプリアンブルは0です。例えば、「A」:14、「10」:10、「2」:'02'、'k':13、'7':07
3枚の牌を点数の大きさに並べ(大きいから小さいまで)、6桁に寄せます。例えば'A 27':140702、'829':0902、'JK 8':13108、'2 A 10':141002
例外として、対子に対しては、対子の桁を前の二桁に置くべきです。例えば‘779’:07009、‘7 A 7’:07114、‘A 33’:030314
現在の分値は6桁で、対子を元の値に10*100000の値を加えて7桁に設定します。例えば‘779’:10709、‘7 A 7’:1070714、‘A 33’:100314
順子に対しては、結果を20*100000を加えます。例えば、‘345’:204504、‘QKA’:2141312、‘23 A’:2140302
金花に対しては、結果を30*100000を加えます。例えば‘Spade K,Spade 6,Spade J’:31106
順金の時は実は金花と順子の和ですから、順金は50*10000です。例えば‘Spade 7,Spade 6,Spade 8’:5080706
筒に対して、結果を60*100000を加えます。例えば'666':6060606、'JJ':6111111
3.2枚の牌の大きさを比較する(計算した分数で比較する)
こんなに簡単です。
コードは以下の通りです。(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,',').')';
}
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プログラムの設計に役に立ちます。