PHPのゴールデンサイズ比較アルゴリズムの開発チュートリアルチェスのプラットフォーム用のネクタイ

サイズよりも実装する方法PHP、バー金華

それが現実的かのラインであるかどうか、チェスのゲームでは、バー金華は私がバー金華の好き育った、間違いなく最も人気のあるボードゲームの一つであり、IT業界の背後に偶然、彼は直接トピックに、あまり話をしませんでしたそれは。

ゴールデンルールのためのタイストレートとき何であるかを示し、2枚のカード言わない比較:JQK <A23 <QKA

次はあなたの参考のために、アドバイスの個人的な作品です!(ここで、チェスのプラットフォームの開発を教えることが歓迎されていません。www.yasewl.com)

アイデア:黄金のためのタイ

1.2つのランダムに生成されたカード、各デッキ構造

コードコードをコピーし、以下の通りである:
配列(
配列( 'スペード'、 'K')、
「6'配列(クラブ'、)、
アレイ( 'スペード'、 'J')

コードコードをコピーし、以下の通りである:
配列(
配列(「スペード」、「K」)、
アレイ(クラブ'、)、」6'
配列( 『スペード』、 『J』)

2.カードのそれぞれについて計算された値:カードのそれぞれが元のサイズを持って、その後、(すなわち、ストレート、ゴールデンは、金、チーズの大きさを避けるペアを除きます)

14、'10:各カードの値が2プリアンブルまでの2桁は、例えば、 'A' 0ビットである '10' 2 ':' 02 '' K ':13、' 7 ' :07

サイズカード(降順)に従ってソートされた3つの点が、6桁を構成します。例えば ​​'A27':140702 '829':090802、 'JK8':131108、 '2A10':141002

例外は、ビット数のために、あなたは(そうする方法を後で参照)最初の二つ上のペアをペアにしたいです。例えば ​​'779':070709、 '7A7':070714、 'A33':030314

今スコアが元の値のサブセット+ 10 * 100000の値は、今7桁の数字となり、6桁です。例えば ​​'779':1070709、 '7A7':1070714、 'A33':1030314

ストレート、プラス20の* 100 000結果については... 例えば ​​'345':2050403、 'QKA':2141312、 '23A':2140302

ゴールデン、結果プラス30 * 10万。例えば ​​'スペードK、スペード6、スペードJ':3131106

Shunjinが正確金に沿って、まっすぐので、ゴールデンですので* 10000 50でなければなりません。例えば ​​'スペード7、スペード6、スペード8':5080706

チーズ、結果プラス60 * 10万。例えば ​​'666':6060606、 'JJJ':6111111

(計算値と比較して)は、2枚のカードの大きさの3比較

それは簡単です!

以下のコード(PHP)

复制代码代码如下:
<?phpの
クラスPlayCards
{
公共$スーツ=配列( 'スペード'、 'ハート'、 'ダイアモンド'、 'クラブ');
公共$数字=配列( '2'、 '3'、 '4'、 '5'、 '6'、 '7'、 '8'、 '9'、 '10'、 'J'、 'Q'、 'K'、 'A')。
公共$カード=配列();
パブリック関数__construct()
{
$カード=配列();
foreachの($スーツとして>スーツの$ this - ){
foreachの($図として>図面の$ this - ){
$カード[] =配列($スーツ、$図)。
}
}
の$ this - >カード= $カード。
}
パブリック関数getCard()
{
シャッフル(の$ this - >カード)。
//生成3张牌
リターン・アレー()の$ this - >カード(array_pop、(の$ this - >カード)array_pop、(の$ this - >カード)array_pop)。
}
パブリック関数compareCards($カード1、$カード2)
{
$ SCORE1 =の$ this - > ownScore($のカード1)。
$ score2 =の$ this - > ownScore($のカード2)。
もし($ SCORE1> $ score2)リターン1。
ELSEIF($ SCORE1 <$ score2)リターン-1;
0を返します。
}
プライベート関数ownScore($カード)
{
$スーツ= $図=配列();
foreachの($カード$としてV){
$スーツ[] = $のV [0]。
$図[] = array_search($ V [1]の$ this - >数字)+2。
}
//补齐前导0
用($ i = 0; $ iは3 <; $ iは++){
$図[$ i]は= str_pad($図[$ i]は、図2に示すように、 '0'、STR_PAD_LEFT)。
}
rsort($フィギュア);
//对于对子做特殊处理
IF($図[1] == $図[2]){
$のTEMP = $フィギュア[0]。
$フィギュア[0] = $図[2]。
$図[2] = $ TEMP。
}
$スコア= $フィギュア[0] $図[1] $図[2]。
//筒子* 100000 60
IF($フィギュア[0] == $図[1] && $数字[0] == $図[2]){
$スコア+ = 60 * 100000。
}
//金花* 100000 30
IF($スーツ[0] == $スーツ[1] && $スーツ[0] == $スーツ[2]){
$スコア+ = 30 * 100000。
}
//顺子* 100000 20
IF($フィギュア[0] == $図[1] +1 && $図[1] == $図[2] +1 ||破($図)== '140302 「){
$スコア+ = 20 * 100000。
}
//对子10 * 100000
場合($フィギュア[0] == $図[1] && $図[1] = $図[2]!){

$スコア+ = 10 * 100000。
}
$スコアを返します。
}
}

//テスト用
の$ playCard =新しいPlayCards();
$カード1 = $ playCard-> getCard();
$カード2 = $ playCard-> getCard();
$結果= $ playCard-> compareCards($カード1、$カード2)。
エコー、printCard($のカード1)、 '<BR/>' 'カード1です';
エコー、printCard($のカード2)、 '<BR/>' 'カード2です';
$ strの= 'カード1 equitカード2';
($結果は== 1)$ STR =「カード1は、カード2よりも大きい」場合。
ELSEIF($結果== -1)$ STR = 'カード1は、カード2よりも小さくなっています'。
$ strのエコー。
関数printCard($カード)
{
$列str = '(';
foreachの($カード$ V){として
$ STR = $のV [0] $ V [1] '';。。。
}
リターンは、($ STRトリム' ')')。';
}


复制代码代码如下:
<?phpの
クラスPlayCards
{
公共$スーツ=配列( 'スペード'、 'ハート'、 'ダイアモンド'、 'クラブ');
公共$数字=配列( '2'、 '3'、 '4'、 '5'、 '6'、 '7'、 '8'、 '9'、 '10'、 'J'、 'Q'、 'K'、 'A')。
公共$カード=配列();
パブリック関数__construct()
{
$カード=配列();
foreachの($スーツとして>スーツの$ this - ){
foreachの($図として>図面の$ this - ){
$カード[] =配列($スーツ、$図)。
}
}
の$ this - >カード= $カード。
}
パブリック関数getCard()
{
シャッフル(の$ this - >カード)。
//生成3张牌
リターン・アレー()の$ this - >カード(array_pop、(の$ this - >カード)array_pop、(の$ this - >カード)array_pop)。
}
パブリック関数compareCards($カード1、$カード2)
{
$ SCORE1 =の$ this - > ownScore($のカード1)。
$ score2 =の$ this - > ownScore($のカード2)。
もし($ SCORE1> $ score2)リターン1。
ELSEIF($ SCORE1 <$ score2)リターン-1;
0を返します。
}
プライベート関数ownScore($カード)
{
$スーツ= $図=配列();
foreachの($カード$としてV){
$スーツ[] = $のV [0]。
$図[] = array_search($ V [1]の$ this - >数字)+2。
}
//补齐前导0
用($ i = 0; $ iは3 <; $ iは++){
$図[$ i]は= str_pad($図[$ i]は、図2に示すように、 '0'、STR_PAD_LEFT)。
}
rsort($フィギュア);
//对于对子做特殊处理
IF($図[1] == $図[2]){
$のTEMP = $フィギュア[0]。
$フィギュア[0] = $図[2]。
$図[2] = $ TEMP。
}
$スコア= $フィギュア[0] $図[1] $図[2]。
//筒子* 100000 60
IF($フィギュア[0] == $図[1] && $数字[0] == $図[2]){
$スコア+ = 60 * 100000。
}
//金花* 100000 30
IF($スーツ[0] == $スーツ[1] && $スーツ[0] == $スーツ[2]){
$スコア+ = 30 * 100000。
}
//顺子* 100000 20
IF($フィギュア[0] == $図[1] +1 && $図[1] == $図[2] +1 ||破($図)== '140302 「){
$スコア+ = 20 * 100000。
}
//对子10 * 100000
場合($フィギュア[0] == $図[1] && $図[1] = $図[2]!){

$スコア+ = 10 * 100000。
}
$スコアを返します。
}
}

//テスト用
の$ playCard =新しいPlayCards();
$カード1 = $ playCard-> getCard();
$カード2 = $ playCard-> getCard();
$結果= $ playCard-> compareCards($カード1、$カード2)。
エコー、printCard($のカード1)、 '<BR/>' 'カード1です';
エコー、printCard($のカード2)、 '<BR/>' 'カード2です';
$ strの= 'カード1 equitカード2';
($結果は== 1)$ STR =「カード1は、カード2よりも大きい」場合。
ELSEIF($結果== -1)$ STR = 'カード1は、カード2よりも小さくなっています'。
$ strのエコー。

関数printCard($カード)
{
$列str = '(';
foreachの($カード$ V){として
$ STR = $のV [0] $ V [1] '';。。。
}
リターンは、($ STRトリム' ')')。';
}

 
出典ます。https://www.cnblogs.com/bobpop/p/7238633.html

サイズよりも実装する方法PHP、バー金華

それが現実的かのラインであるかどうか、チェスのゲームでは、バー金華は私がバー金華の好き育った、間違いなく最も人気のあるボードゲームの一つであり、IT業界の背後に偶然、彼は直接トピックに、あまり話をしませんでしたそれは。

ゴールデンルールのためのタイストレートとき何であるかを示し、2枚のカード言わない比較:JQK <A23 <QKA

次はあなたの参考のために、アドバイスの個人的な作品です!(ここで、チェスのプラットフォームの開発を教えることが歓迎されていません。www.yasewl.com)

アイデア:黄金のためのタイ

1.2つのランダムに生成されたカード、各デッキ構造

コードコードをコピーし、以下の通りである:
配列(
配列( 'スペード'、 'K')、
「6'配列(クラブ'、)、
アレイ( 'スペード'、 'J')

コードコードをコピーし、以下の通りである:
配列(
配列(「スペード」、「K」)、
アレイ(クラブ'、)、」6'
配列( 『スペード』、 『J』)

2.カードのそれぞれについて計算された値:カードのそれぞれが元のサイズを持って、その後、(すなわち、ストレート、ゴールデンは、金、チーズの大きさを避けるペアを除きます)

14、'10:各カードの値が2プリアンブルまでの2桁は、例えば、 'A' 0ビットである '10' 2 ':' 02 '' K ':13、' 7 ' :07

サイズカード(降順)に従ってソートされた3つの点が、6桁を構成します。例えば ​​'A27':140702 '829':090802、 'JK8':131108、 '2A10':141002

例外は、ビット数のために、あなたは(そうする方法を後で参照)最初の二つ上のペアをペアにしたいです。例えば ​​'779':070709、 '7A7':070714、 'A33':030314

今スコアが元の値のサブセット+ 10 * 100000の値は、今7桁の数字となり、6桁です。例えば ​​'779':1070709、 '7A7':1070714、 'A33':1030314

ストレート、プラス20の* 100 000結果については... 例えば ​​'345':2050403、 'QKA':2141312、 '23A':2140302

ゴールデン、結果プラス30 * 10万。例えば ​​'スペードK、スペード6、スペードJ':3131106

Shunjinが正確金に沿って、まっすぐので、ゴールデンですので* 10000 50でなければなりません。例えば ​​'スペード7、スペード6、スペード8':5080706

チーズ、結果プラス60 * 10万。例えば ​​'666':6060606、 'JJJ':6111111

(計算値と比較して)は、2枚のカードの大きさの3比較

それは簡単です!

以下のコード(PHP)

复制代码代码如下:
<?phpの
クラスPlayCards
{
公共$スーツ=配列( 'スペード'、 'ハート'、 'ダイアモンド'、 'クラブ');
公共$数字=配列( '2'、 '3'、 '4'、 '5'、 '6'、 '7'、 '8'、 '9'、 '10'、 'J'、 'Q'、 'K'、 'A')。
公共$カード=配列();
パブリック関数__construct()
{
$カード=配列();
foreachの($スーツとして>スーツの$ this - ){
foreachの($図として>図面の$ this - ){
$カード[] =配列($スーツ、$図)。
}
}
の$ this - >カード= $カード。
}
パブリック関数getCard()
{
シャッフル(の$ this - >カード)。
//生成3张牌
リターン・アレー()の$ this - >カード(array_pop、(の$ this - >カード)array_pop、(の$ this - >カード)array_pop)。
}
パブリック関数compareCards($カード1、$カード2)
{
$ SCORE1 =の$ this - > ownScore($のカード1)。
$ score2 =の$ this - > ownScore($のカード2)。
もし($ SCORE1> $ score2)リターン1。
ELSEIF($ SCORE1 <$ score2)リターン-1;
0を返します。
}
プライベート関数ownScore($カード)
{
$スーツ= $図=配列();
foreachの($カード$としてV){
$スーツ[] = $のV [0]。
$図[] = array_search($ V [1]の$ this - >数字)+2。
}
//补齐前导0
用($ i = 0; $ iは3 <; $ iは++){
$図[$ i]は= str_pad($図[$ i]は、図2に示すように、 '0'、STR_PAD_LEFT)。
}
rsort($フィギュア);
//对于对子做特殊处理
IF($図[1] == $図[2]){
$のTEMP = $フィギュア[0]。
$フィギュア[0] = $図[2]。
$図[2] = $ TEMP。
}
$スコア= $フィギュア[0] $図[1] $図[2]。
//筒子* 100000 60
IF($フィギュア[0] == $図[1] && $数字[0] == $図[2]){
$スコア+ = 60 * 100000。
}
//金花* 100000 30
IF($スーツ[0] == $スーツ[1] && $スーツ[0] == $スーツ[2]){
$スコア+ = 30 * 100000。
}
//顺子* 100000 20
IF($フィギュア[0] == $図[1] +1 && $図[1] == $図[2] +1 ||破($図)== '140302 「){
$スコア+ = 20 * 100000。
}
//对子10 * 100000
場合($フィギュア[0] == $図[1] && $図[1] = $図[2]!){

$スコア+ = 10 * 100000。
}
$スコアを返します。
}
}

//テスト用
の$ playCard =新しいPlayCards();
$カード1 = $ playCard-> getCard();
$カード2 = $ playCard-> getCard();
$結果= $ playCard-> compareCards($カード1、$カード2)。
エコー、printCard($のカード1)、 '<BR/>' 'カード1です';
エコー、printCard($のカード2)、 '<BR/>' 'カード2です';
$ strの= 'カード1 equitカード2';
($結果は== 1)$ STR =「カード1は、カード2よりも大きい」場合。
ELSEIF($結果== -1)$ STR = 'カード1は、カード2よりも小さくなっています'。
$ strのエコー。
関数printCard($カード)
{
$列str = '(';
foreachの($カード$ V){として
$ STR = $のV [0] $ V [1] '';。。。
}
リターンは、($ STRトリム' ')')。';
}


复制代码代码如下:
<?phpの
クラスPlayCards
{
公共$スーツ=配列( 'スペード'、 'ハート'、 'ダイアモンド'、 'クラブ');
公共$数字=配列( '2'、 '3'、 '4'、 '5'、 '6'、 '7'、 '8'、 '9'、 '10'、 'J'、 'Q'、 'K'、 'A')。
公共$カード=配列();
パブリック関数__construct()
{
$カード=配列();
foreachの($スーツとして>スーツの$ this - ){
foreachの($図として>図面の$ this - ){
$カード[] =配列($スーツ、$図)。
}
}
の$ this - >カード= $カード。
}
パブリック関数getCard()
{
シャッフル(の$ this - >カード)。
//生成3张牌
リターン・アレー()の$ this - >カード(array_pop、(の$ this - >カード)array_pop、(の$ this - >カード)array_pop)。
}
パブリック関数compareCards($カード1、$カード2)
{
$ SCORE1 =の$ this - > ownScore($のカード1)。
$ score2 =の$ this - > ownScore($のカード2)。
もし($ SCORE1> $ score2)リターン1。
ELSEIF($ SCORE1 <$ score2)リターン-1;
0を返します。
}
プライベート関数ownScore($カード)
{
$スーツ= $図=配列();
foreachの($カード$としてV){
$スーツ[] = $のV [0]。
$図[] = array_search($ V [1]の$ this - >数字)+2。
}
//补齐前导0
用($ i = 0; $ iは3 <; $ iは++){
$図[$ i]は= str_pad($図[$ i]は、図2に示すように、 '0'、STR_PAD_LEFT)。
}
rsort($フィギュア);
//对于对子做特殊处理
IF($図[1] == $図[2]){
$のTEMP = $フィギュア[0]。
$フィギュア[0] = $図[2]。
$図[2] = $ TEMP。
}
$スコア= $フィギュア[0] $図[1] $図[2]。
//筒子* 100000 60
IF($フィギュア[0] == $図[1] && $数字[0] == $図[2]){
$スコア+ = 60 * 100000。
}
//金花* 100000 30
IF($スーツ[0] == $スーツ[1] && $スーツ[0] == $スーツ[2]){
$スコア+ = 30 * 100000。
}
//顺子* 100000 20
IF($フィギュア[0] == $図[1] +1 && $図[1] == $図[2] +1 ||破($図)== '140302 「){
$スコア+ = 20 * 100000。
}
//对子10 * 100000
場合($フィギュア[0] == $図[1] && $図[1] = $図[2]!){

$スコア+ = 10 * 100000。
}
$スコアを返します。
}
}

//テスト用
の$ playCard =新しいPlayCards();
$カード1 = $ playCard-> getCard();
$カード2 = $ playCard-> getCard();
$結果= $ playCard-> compareCards($カード1、$カード2)。
エコー、printCard($のカード1)、 '<BR/>' 'カード1です';
エコー、printCard($のカード2)、 '<BR/>' 'カード2です';
$ strの= 'カード1 equitカード2';
($結果は== 1)$ STR =「カード1は、カード2よりも大きい」場合。
ELSEIF($結果== -1)$ STR = 'カード1は、カード2よりも小さくなっています'。
$ strのエコー。

関数printCard($カード)
{
$列str = '(';
foreachの($カード$ V){として
$ STR = $のV [0] $ V [1] '';。。。
}
リターンは、($ STRトリム' ')')。';
}

おすすめ

転載: www.cnblogs.com/gao88/p/11371602.html