Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

最近の作業部屋活動履歴

2014-01-14
2014-01-13

最近のWikiの更新 (Recent Changes)

2014-01-14

Wikiガイド(Guide)

サイドバー (Side Bar)

ポーカー

GameMakerで実装したポーカーの仕様をまとめたページです

ダウンロード

エクステンション

PokerSystem.gex

トランプ画像(スプライト登録用)

sprite_cards_strip55.png

トランプ画像(元)

trump.png

仕様

用語

words.png

  • deck : 山札
  • hand : 手札
  • talon : 捨て札
  • deal : カードを山札から引く
  • discard : カードを捨て札に捨てる
  • suit : ハート、スペード、クローバー、ダイヤ
  • rank : 役

定数一覧

定数名説明
PK_RANK_HIGH_CARDS0役なし
PK_RANK_ONE_PAIR1ワンペア
PK_RANK_TWO_PAIR2ツーペア
PK_RANK_THREE_OF_KIND3スリーカード
PK_RANK_STRAIGHT4ストレート
PK_RANK_FLUSH5フラッシュ
PK_RANK_FULL_HOUSE6フルハウス
PK_RANK_FOUR_OF_KIND7フォーカード
PK_RANK_STRAIGHT_FLUSH8ストレートフラッシュ
PK_RANK_ROYAL_STRAIGHT_FLUSH9ロイヤルストレートフラッシュ
PK_RANK_FIVE_OF_KIND10ファイブカード
PK_CARD_INVALID0無効なカード番号
PK_CARD_JOKER53ジョーカーの開始カード番号
PK_HAND_CARD_NUM5手札の数

カード番号について

  • 0 : 無効なカード (PK_CARD_INVALID)
  • 1~13 / 14~26 / 27~39 / 40~52 : Aが1、2が2、11がJ、12がQ、13がK。14以上は13の剰余
  • 53~ : ジョーカー(PK_CARD_JOKER)

手札番号について

手札は5枚配られる前提なので、0~4が有効な数値となります

API一覧

関数名説明引数1引数2引数3引数4引数5戻り値
poker_createポーカーシステムの生成プレイヤーの数(1~n)ジョーカーの枚数(0~n)---ポーカーシステムオブジェクト(pk)
poker_destroyポーカーシステムをメモリから削除pk-----
poker_reset初期状態に戻すpk-----
poker_debug_setデバッグ出力を有効にするpk有効true/無効false----
poker_debug_enableデバッグ出力が有効かどうかpk----有効true/無効false
poker_dumpシステムが保持している情報をデバッグ出力するpk-----
poker_deck_shuffle山札をシャッフルするpk-----
poker_deck_add_talon山札の末尾に捨て札を加えるpk-----
poker_deck_size山札のカード枚数を取得するpk----山札の枚数
poker_deck_get山札のカードを参照するpk山札番号(0~poker_deck_size)---カード番号
poker_deck_deal_one山札の一番上からカードを一枚取り出す(山札から削除)pk----カード番号。山にカードがない場合はPK_CARD_INVALID
poker_hand_deal指定のプレイヤーにカードを与えるpkプレイヤー番号(0~n)----
poker_hand_get_deal_count指定のプレイヤーが引くことのできるカード枚数を取得するpkプレイヤー番号(0~n)----
poker_hand_get_card指定のプレイヤーのカード番号を取得するpkプレイヤー番号(0~n)手札番号(0~4)---
poker_hand_discard指定のプレイヤーの手札を捨て札に捨てるpkプレイヤー番号(0~n)手札番号(0~4)---
poker_hand_discard_all指定のプレイヤーの手札をすべて捨て札に捨てるpkプレイヤー番号(0~n)----
poker_hand_check_rank指定のプレイヤーの役判定をするpkプレイヤー番号(0~n)---役定数(PK_RANK_*)
poker_talon_size捨て札の枚数を取得するpk-----
poker_talon_get捨て札のカードを参照するpk捨て札番号(0~poker_talon_size)---カード番号
poker_rank_check_flushフラッシュが成立しているかどうかチェックする手札配列----成立していればtrue
poker_rank_check_straightストレートが成立しているかどうかチェックする手札配列----成立していればtrue
poker_rank_to_string役を文字列にする役定数----役文字列
poker_player_countプレイヤー数の取得pk----プレイヤー数
poker_joker_countジョーカーの枚数を取得pk----ジョーカーの枚数

データ構造

ポーカーシステムオブジェクト(pk)はds_mapにより実装。以下、各キーに対応する値

  • "deck" : 山札(ds_list)
  • "talon" : 捨て札(ds_list)
  • "player" : プレイヤー数(整数値)
  • "joker" : ジョーカー枚数(整数値)
  • "debug" : デバッグ出力フラグ(bool)
  • "hand0~n" : 各プレイヤーの手札(ds_list)

使用例

生成・ゲーム開始

  1. // Pokerシステムのインスタンスを作成
  2. var player = 2; // プレイヤー数
  3. var joker = 1; // ジョーカーの数。ジョーカーを使わない場合は「0」
  4. global.pk = poker_create(player, joker);
  5. // プレイヤー0に手札を配る
  6. poker_hand_deal(global.pk, 0);
  7. // プレイヤー1に手札を配る
  8. poker_hand_deal(global.pk, 1);
  9. // プレイヤー0の手札を取得
  10. for(var i = 0; i < PK_HAND_CARD_NUM; i++)
  11. {
  12. var card = poker_hand_get_card(global.pk, 0, i);
  13. show_debug_message(card);
  14. }
  15. // プレイヤー0の役を判定 (PK_RANK_*定数が取得できる)
  16. var rank = poker_hand_check_rank(global.pk, 0);

カードを交換

  1. // プレイヤー0の、0番目と3番めのカードを捨てる (手札番号は0~4までが有効)
  2. poker_hand_discard(global.pk, 0, 0);
  3. poker_hand_discard(global.pk, 0, 3);
  4. // プレイヤー0に手札を配る (捨てた分だけもらえる)
  5. poker_hand_deal(global.pk, 0);
  6. // プレイヤー0の手札を取得
  7. for(var i = 0; i < PK_HAND_CARD_NUM; i++)
  8. {
  9. var card = poker_hand_get_card(global.pk, 0, i);
  10. show_debug_message(card);
  11. }
  12. // プレイヤー0の役を判定 (PK_RANK_*定数が取得できる)
  13. var rank = poker_hand_check_rank(global.pk, 0);

ゲーム終了

  1. // ポーカーシステムのインスタンスを使いまわす場合はこっち
  2. // 山札や手札を初期化する
  3. poker_reset(global.pk);
  4. // もう使わないのでメモリから削除する場合はこっち
  5. poker_destroy(global.pk);
  6. global.pk = 0;

役判定ロジック

poker_flow.png