カードゲームの作り方1


素材の準備
初期設定
メソッド


素材の準備

カードゲーム作りで一番厄介なのはカードの素材を揃えることです。
トランプでもジョーカーを含めて53種類のカードが必要です。
普段グラフィックソフトをあまり使わない人にとっては初っ端から
試練の始まりと言ったところでしょう。

でもご安心ください。
RCSSには自動で文字を書き込むことで使用素材を減らす機能が搭載されています。

ではトランプを作る場合で最低限必要な素材を書き出します。

lightモードを使用しない場合

画像(Picture)
カード : card_0 〜 card_51
ジョーカー : card_joker
裏面 : card_back
カーソル : card_cursor

効果音(SE)
カーソル : card_se_cursor
決定 : card_se_decision
キャンセル : card_se_cancel
カード反転 : card_se_turn
カード移動 : card_se_slide

カードの表の絵柄はcard_0,card_1,card_2…と
"card_"+"数字"というファイル名にしてください。(0から始まる点に注意)
"数字"をvalueとしますと、内部ではカードの番号とスート(マーク)を
以下のように管理しています。

番号 = value / (スートの数) + 1
スート = value % (スートの数)


簡単に言いますと、
card_0 : スペードの1, card_ 1 : ハートの1, card_2 : ダイヤの1,
card_3 : クラブの1, card_ 4 : スペードの2,…
というふうに素材を用意すれば正常に処理されます。

lightモードを使用する場合

画像(Picture)
カード : card_0 〜 card_3
ジョーカー : card_joker
裏面 : card_back
カーソル : card_cursor

効果音(SE)
カーソル : card_se_cursor
決定 : card_se_decision
キャンセル : card_se_cancel
カード反転 : card_se_turn
カード移動 : card_se_slide

"card_"+"数字"には4種類のスートを用意します。
card_0 : スペード, card_ 1 : ハート, card_2 : ダイヤ, card_3 : クラブ
という感じで用意すれば問題ないでしょう。
数字部分は自動的に書き込まれます。



メニューへ


初期設定

Card_baseクラスのinitializeで各種変数に値を代入することで様々な設定が行えます。
ここで書き換えなくてもCard_base.newをした後にプロパティとして書き換えることもできます。

totalcard
使用するカードの枚数
トランプならジョーカーを含めて53を代入します。
ちなみに(数字の数)×(スートの数)を超えた分はすべてジョーカーになります。

interval_x
interval_y

カードを並べる時に前のカードから相対的にずらす値です。
両方を0にすると1箇所に重なります。

slidetime
カードのスライドに要するフレーム数

turntime
カードの反転に要するフレーム数

player_z
プレイヤーの基準z座標
他のカードとの重なり方に関係します。

talon_x
talon_y
talon_z

山札の座標

trash_x
trash_y
trash_z

捨て札の座標

replenishment
trueなら山札が無くなった時に捨て札から補充します。

rank_number
数字の強さ配列
"A"が一番強く、他は数字どおりの強さの順とするなら
[14,2,3,4,5,6,7,8,9,10,11,12,13]
という感じにします。
ちなみにこの要素数は数字の数を知るためにも使われますので
強さの順が必要ない場合でも数字の数だけ埋めてください。

rank_suit
スートの強さ配列
素材にスペード、ハート、ダイヤ、クラブの順で登録して
その通りの強さの順番にするなら
[3,2,1,0]
という感じにします。
ちなみにこの要素数はスートの数を知るためにも使われますので
強さの順が必要ない場合でもスートの数だけ埋めてください。

cardname
素材のファイル名の前半部分です。
cardname+"(数字)"やcardname+"se_cancel"のようにファイル名指定に使われます。
初期値はとりあえず"card_"としていますが好きなように変えられます。
同じゲームで複数のカードゲームを作る場合やカードの絵柄を変えたい場合に
ご利用ください。

light
素材利用のlightモードです。
trueにするとカードの数字の部分が自動的に書き込まれるようになります。

changelist
lightモードを使ったときの数字変換のハッシュ表です。
トランプの場合なら以下のようにします。
{1 =>"A",11 =>"J",12 =>"Q",13=>"K"}



メニューへ


メソッド
RCSSの全機能です。一度に全部を読む必要はありません。
次のページのチュートリアルと合わせてご覧ください。

Card_base.new
システムを起動します。この段階で初期設定が読み込まれます。

make_talon
山札作成
カードがまだ表示されていなければ設定内容に応じてカードの画像を表示します。
カードがすでにある場合は全プレーヤーのカードと捨て札trushのカードを山札talonに集めます。
自動的にシャッフルされます。

dispose_allcard
カードの画像を全て開放します。
カードセットを変更するかシステムを終了するときに使います。

shuffle_talon
山札talonをシャッフルします。

shuffle_trash
捨て札trashをシャッフルします。

set_taloncards([time])
山札のカードをtalon_x,talon_y,talon_zの座標に集めます。
timeには移動時間を設定します。
省略すると@slidetimeが適用されます。

set_trashcards([time])
捨て札のカードをtrash_x,trash_y,trash_zの座標に集めます。
timeには移動時間を設定します。
省略すると@slidetimeが適用されます。

make_player([hand[, x[, y[, tip]]]])
プレイヤーを作成します。
ここでのプレイヤーの意味はゲームの参加者というより
カードを保持できる"場"と思ったほうがいいかもしれません。
このメソッドを実行するたびにプレイヤーが生成され、
最初に作ったほうから0,1,2,…という番号が付きます。

handは最初に持たせておくカードの枚数、
x,yはカードの最初の1枚目を表示する座標、
tipはチップ数(チップでなくてもスコアなりヒットポイントなり解釈はご自由に)
すべて省略可能です。

dispose_player(player)
指定したプレイヤー番号のプレイヤーを消去します。
消去するとそれより後ろの番号が前に詰められるのでご注意ください。

set_playercards(player)
指定した番号のプレイヤーのカードを
プレイヤーの座標を元に配置します。

player_x(player)
プレイヤーのx座標確認
player_y(player)
プレイヤーのy座標確認
指定したプレイヤーの座標が返ります。

player_hand(player)
指定したプレイヤーの手札の配列(新しい配列)が返ります。

player_tip(player)
指定したプレイヤーのチップ数が返ります。

coordinates_player(player, x, y)
指定したプレイヤーの位置を変更します。

player_hand_interference(player)
指定したプレイヤーの手札の配列がそのまま返ります。
手札を直接変更するのはあまり推奨できません。
このメソッドの扱いにはご注意ください。

change_tip(player, tip)
チップ数変更
increases_tip(player, tip)
チップ加算
decreases_tip(player, tip)
チップ減算
指定したプレイヤーのチップ数を変更します。
違いは代入、加算、減算のみです。

pay_tip(player)
指定したプレイヤーのチップに@potの数値を加算します。
@potには0が代入されます。

pass_tip(player1, player2, tip)
player1からplayer2へチップを支払います。

take_card(player[, times])
山札のカードを取り出して指定したプレイヤーの手札に加えます。
timesは一度に渡す枚数です。

distribution_card(number)
全プレイヤーに山札から1枚ずつカードを渡します。
numberにはカードの総数を指定します。

rob_card(player, card)
プレイヤーのカードを1枚捨てる
指定したプレイヤーの指定した位置のカードを捨て札trashに渡します。

rob_allcard(player)
プレイヤーのカードを全部捨てる
指定したプレイヤーのカードを全部捨て札trashに渡します。

exchange_card(player, card)
プレイヤーのカードを1枚交換する
指定したプレイヤーの指定した位置のカードを捨て札trashに渡し、
その部分を山札から補充します。

exchange_allcard(player)
プレイヤーのカードを全部交換する
指定したプレイヤーのカードを全部捨て札trashに渡し、
同じ枚数だけ山札から補充します。

pass_card(player1, player2, card)
player1からplayer2へカードを1枚渡す

pass_allcard(player1, player2)
player1からplayer2へカードを全部渡す

trad_card(player1, player2, card1, card2)
player1とplayer2がカードを1枚交換する

trad_allcard(player1, player2)
player1とplayer2がカードを全部交換する

move_card(player, card, x, y[, time])
プレイヤーのカードを1枚移動する
指定したプレイヤーの指定した位置のカードを座標x,yへ移動します。
timeには移動時間を入れ、省略した場合は@slidetimeが適用されます。

relativemove_card(player, card, x, y[, time])
プレイヤーのカードを1枚相対的に移動する
指定したプレイヤーの指定した位置のカードを現在の座標から
xとyだけ加算した座標へ移動します。
timeには移動時間を入れ、省略した場合は@slidetimeが適用されます。

move_allcard(player, x, y[, time])
プレイヤーのカードを全部移動する
指定したプレイヤーのカードを全部座標x,yへ移動します。
timeには移動時間を入れ、省略した場合は@slidetimeが適用されます。

turn_card(player, card[, time])
プレイヤーのカードを1枚反転
指定したプレイヤーの指定した位置のカードを反転します。
timeには移動時間を入れ、省略した場合は@turntimeが適用されます。

open_allcard(player[, time])
プレイヤーのカードをオープンする
指定したプレイヤーのカードのうち裏向きのものを反転します。
timeには移動時間を入れ、省略した場合は@turntimeが適用されます。

close_allcard(player[, time])
プレイヤーのカードをクローズする
指定したプレイヤーのカードのうち表向きのものを反転します。
timeには移動時間を入れ、省略した場合は@turntimeが適用されます。

turn_allcard(player[, time])
プレイヤーのカードを全部反転

wait(time)
ウエイト
指定したフレーム数だけウエイトします。

entry_wait
キー入力待ちウエイト
ボタンAかBかCが押されるまでウエイトします。

move_forcing
カードの移動・反転が終わるまでウエイト
1枚でも移動・反転中のカードがあれば
動作が終わるまでウエイトします。

update
カードの移動・反転を1フレームだけ進めます。

select_player(player)
カーソル処理を使用するプレイヤー選択
指定したプレーヤーの手札に対してカーソルが出現します。
実行するたびに新しいカーソル処理が出現します。
前のカーソル処理は新しいカーソル処理を破棄することで
また使えるようになります。

select_card
プレイヤーのカードを選択
これを実行する前にselect_playerを呼び出してください。
実行するとカーソルイベントが起こり、ボタンAかCで選んだ位置が返ります。
ボタンBを押した場合はnilが返ります。

dispose_select_cursor
カーソル処理を破棄
一番新しいカーソル処理を破棄します。

select_rob_card(player[, min[, max])
選択したカードを捨てる
指定したプレーヤーの手札に対してカーソル処理が発生し、
選んだカードを捨て札trashへ送ります。
minは選択しなければならない最低限の枚数で、 省略すると0枚でも進みます。
maxは一度に選択できるカードの数で、
省略すると最大で全てのカードが選択できます。

nonselect_rob_card(player[, min[, max])
選択しなかったカードを捨てる

select_exchange_card(player[, min[, max])
選択したカードを交換
指定したプレーヤーの手札に対してカーソル処理が発生し、
選んだカードを捨て札trashへ送り、同じ枚数を山札talonから補充します。

nonselect_exchange_card(player[, min[, max])
選択しなかったカードを交換

select_pass_card(player1, player2[, min[, max])
選択したカードを別のプレイヤーに渡す

select_menu(item[, start_x[, start_y [, interval_x [, interval]]]])
選択肢の処理
itemには選択肢に使用する文字列の配列を設定します。
start_x, start_yは最初を置く座標、
interval_x, intervalは前の文字からの相対的な位置です。
選択した位置を返します。


   value = @system.select_menu(["はい","いいえ"], 200, 180, 0, 32)
   case value
   when 0
    p "はい"
   when 1
    p "いいえ"
   end

select_value(x, y[, original [, min[, max]]])
数値入力の処理
数値入力イベントが発生し、入力した数値を返します。
x,yは1桁目の座標、originalは初期値、minは最小値、maxは最大値を設定します。

bet_tip(player[, x[, y[,min[, max]]]])
数値入力でチップを賭ける
数値入力イベントが発生し、入力した数値だけ
指定したプレイヤーのチップを@potに移します。

comparison_munber(card1,card2)
2枚のカードのうち数字の強い方を判定する
card1,card2にカード番号を入れると
@rank_numberを基準に判定し、card1の方が強ければ1、
card2の方が強ければ-1、同じなら0を返します。

comparison_suit(card1,card2)
2枚のカードのうちスートの強い方を判定する
card1,card2にカード番号を入れると
@rank_suitを基準に判定し、card1の方が強ければ1、
card2の方が強ければ-1、同じなら0を返します。

sort_munber(hand)
数字の強さを基準に並び替える


[ダイヤ-5,スペード-3,ハート-5,クラブ-1,ダイヤ-3,スペード-2]

[クラブ-1,スペード-2,スペード-3,ダイヤ-3,ハート-5,ダイヤ-5]

sort_suit(hand)
スートの強さを基準に並び替える


[ダイヤ-5,スペード-3,ハート-5,クラブ-1,ダイヤ-3,スペード-2]

[クラブ-1,ダイヤ-3,ダイヤ-5,ハート-5,スペード-2,スペード-3]

sort_munber_player(player)
指定したプレイヤーの手札を数字の強さを基準に並び替える

sort_suit_player(player)
指定したプレイヤーの手札をスートの強さを基準に並び替える

same_suit?(hand)
同スート判定
hand内の配列が全て同じスートならtrueを返します。
ジョーカーは一番多い方のスートと見なします。

sequence?(hand)
シークエンス判定
hand内の配列が重複無く連番になっていたらtrueを返します。
ジョーカーは隙間を埋める形で判断されます。
ただし13と1は繋がりません。
ポーカーのストレート判定にはpoker_straight?をご利用ください。

ポーカー専用
poker_fivejoker?(hand)
ファイブジョーカー判定
poker_royalflush?(hand)
ロイヤルストレートフラッシュ判定
poker_fivecard?(hand)
ファイブカード判定
poker_straightflush?(hand)
ストレートフラッシュ判定
poker_fourcard?(hand)
フォーカード判定
poker_fullhouse?(hand)
フルハウス判定
poker_flush?(hand)
フラッシュ判定
poker_straight?(hand)
ストレート判定
poker_threecard?(hand)
スリーカード判定
poker_twopair?(hand)
ツーペア判定
poker_onepair?(hand)
ワンペア判定



blackjack_score(hand)
ブラックジャック専用:得点計算

ブラックジャック特有の計算方法でhandの合計値を算出します。
すなわち、2〜10はその数値を加算、J,Q,Kは10として加算、
Aは1として加算した上で全体が21を超えない範囲で10を加算、
という手順を踏んでいます。



次のページへ
一覧へ戻る
トップページへ戻る



更新日時:2005 8/6 17:00
管理人:すっぴぃ ◆ADGYPSYxII