• ベストアンサー

そろった牌を選ぶと自動的に適合する役とポイントを計算するスクリプト

こんにちは、いつもお世話になっております。 正式な麻雀の話ではないのですが、なんちゃって麻雀風ゲームで以下のようにポイントが決まるようになっています。 ・(役の名前):(必要な組み合わせ)=(ポイント) ・ありえない組み合わせ:カレー+ラーメン+ギョウザ=5,000ポイント ・定番:ラーメン+シューマイ=2,000ポイント 手札がカレー、ラーメン、ギョウザ、シューマイ、ごま団子だとしたら「ありえない組み合わせ」と「定番」が適用で「7,000ポイント」になります。 …上のは例ですが、たとえば手札の一覧があり、今自分がもっている手札をその一覧上でチェックを入れていくと、自動的に適合する役と合計ポイントを計算し表示するスクリプトは作れるでしょうか? 説明が足らない場合は補足します。 意味をわかっていただけるかた、方法を教えていただけると助かります。 よろしくお願いします。m(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

とりあえず、こんな感じでどうでしょう? インデント(字下げ)は全角空白にしているので コピーする時は半角空白に変換してください。 スクリプト部: <SCRIPT LANGUAGE="JavaScript"> <!-- var kcnt = 0; var KUMI = new Array(); //KUMI[n][0] 組み合わせ //KUMI[n][1] ポイント //KUMI[n][2] 組み合わせ名 //KUMI[n][3] 組み合わせ KUMI[kcnt++] = new Array( "1,1,1,0,0", 5000, "ありえない", "カレー+ラーメン+ギョウザ" ); KUMI[kcnt++] = new Array( "0,1,0,1,0", 2000, "定番", "ラーメン+シューマイ" ); KUMI[kcnt++] = new Array( "1,0,1,0,1", 3000, "ありえない", "カレー+ギョウザ+ごま団子" ); KUMI[kcnt++] = new Array( "0,0,1,1,0", 3500, "ありえない", "ギョウザ+シューマイ" ); KUMI[kcnt++] = new Array( "1,0,0,0,1", 3000, "ありえない", "カレー+ごま団子" ); KUMI[kcnt++] = new Array( "1,1,1,1,1", 7000, "ありえない", "カレー+ラーメン+ギョウザ+シューマイ+ごま団子" ); KUMI[kcnt++] = new Array( "0,1,1,0,0", 1500, "定番", "ラーメン+ギョウザ" ); function CheckKumi( Set ){  point = 0;  msg = "";  for(i=0; i<kcnt; i++){   KSet = KUMI[i][0].split(",");   kumi_flg = true;   for(j=0;j<Set.length;j++){    if( KSet[j] > Set[j] ){     kumi_flg = false;     break;    }   }   if( kumi_flg ){    point += KUMI[i][1];    msg = msg + KUMI[i][2] + ":" + KUMI[i][3] + ":" + KUMI[i][1] + "\n";   }  }  msg = msg + "合計ポイント:" + point; } function Check(){  with( document.InputForm ){   var Set = new Array();   for( j=0;j<5;j++ ){    Set[j] = 0;    if( elements['menu'+j].checked ) {     Set[j] = 1;    }   }  }  CheckKumi( Set );  alert(msg); } //--> </SCRIPT> フォーム部: <FORM NAME="InputForm"> <INPUT TYPE="checkbox" name="menu0">カレー<br> <INPUT TYPE="checkbox" name="menu1">ラーメン<br> <INPUT TYPE="checkbox" name="menu2">ギョウザ<br> <INPUT TYPE="checkbox" name="menu3">シューマイ<br> <INPUT TYPE="checkbox" name="menu4">ごま団子<br> <INPUT TYPE="button" value="チェック" onClick="Check()"> </FORM>

noname#58564
質問者

お礼

回答ありがとうございます。 お返事が遅れてすみません。 実際に教えてくださったスクリプトをコピペして、試してみたのですが、何も起きませんでした。 素人目には、チェックボタンをクリックするとアラートがでてどの役なのかを教えてくれるスクリプトだと思うのですが…。 なぜなのでしょうか。 もうちょっと試行錯誤してみます。m(_ _)m

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

他の方も書いているとおり、まずルールをきめましょう。 種類やバリエーションによってカードの持ち方は変わります。 あえて書くなら以下のようなこんな感じですね。 (1)カードを配列で持つ (2)チェッカーにわたして結果をreturnで受ける (3)結果を表示する まぁもっと効率的なデータの持ち方をしたほうがいいので いろいろやってみてください。 <script language=javascript> main(); function main(){ myCard=new Array(); myCard[0]="カレー"; myCard[1]="ラーメン"; myCard[2]="ギョウザ"; myCard[3]="シューマイ"; myCard[4]="ごま団子"; point=0; point +=check_arienai(myCard); point +=check_teiban(myCard); point +=check_oyaji(myCard); alert(point) } function check_arienai(num){ var flag_kare=false; var flag_ramen=false; var flag_gyoza=false; for(var i in num){ if(num[i]=="カレー") flag_kare=true if(num[i]=="ラーメン") flag_ramen=true if(num[i]=="ギョウザ") flag_gyoza=true } if(flag_kare && flag_ramen && flag_gyoza) return 5000; return 0; } function check_teiban(num){ var flag_ramen=false; var flag_shumai=false; for(var i in num){ if(num[i]=="ラーメン") flag_ramen=true if(num[i]=="シューマイ") flag_shumai=true } if(flag_ramen && flag_shumai) return 2000; return 0; } function check_oyaji(num){ var flag_gyoza=false; var flag_biiru=false; for(var i in num){ if(num[i]=="ギョウザ") flag_gyoza=true if(num[i]=="ビール") flag_biiru=true } if(flag_gyoza && flag_biiru) return 3000; return 0; } </script>

noname#58564
質問者

お礼

具体的な回答ありがとうございます。 すみません、これをどのようにチェックボックスと連動させればよいのでしょうか? >他の方も書いているとおり、まずルールをきめましょう。 ルールとは…どのようなルールのことでしょうか。 すみませんが、みなさんのおっしゃってることがちんぷんかんぷんです。 恐らくわたしの言いたいことが全く伝わってないようなので、質問を読んでいる側もちんぷんかんぷんなんだと思いますが…汗

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 現在はどのようにして、どこまで動いているのでしょうか?? それが具体的にわからないと、スクリプトを具体的に提示するのは 難しいと思いますよ。 手札情報をどのような形で保持しているのか 例) 手札配列に名称が入っている。 手札配列に札IDが入っている。 配列なんか使ってないよ。 一覧上でチェックを入れていくと・・ 例) チェックボックスにチェック。 画像をクリック。 役照合ボタンを選択。 いろいろ方法があり、どのようにやっているかによって (特にデータの持ち方) 変わってきてしまいます。

noname#58564
質問者

補足

回答ありがとうございます。 質問にあげたものはあくまで例ですので、データなどは一切ありません。 あくまでイメージを伝えようとした例にすぎませんので、どこまで動くもなにも全く何もないんです。(^-^; もし具体的に提示していただけたなら、それに合わせようと思いますし、自分の都合のよいように改変しようと思いますが…それでも具体的に提示するのは難しいでしょうか?(x_x)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>自動的に適合する役と合計ポイントを計算し表示するスクリプトは作れるでしょうか? 作れるかと聞かれたら作れるということになるでしょう 役テーブルを用意して 入力がそれぞれに適合するかどうか調べて 適合した場合、役を表示し、ポイントを加算していくというような感じになるでしょう。

noname#58564
質問者

補足

アドバイスありがとうございます。 ではそれをどのように実現したらよいのでしょうか。 具体的なスクリプトを教えていただけると助かります。m(_ _)m

関連するQ&A