【DXRuby】入れ替えパズルをつくってみる。(3)-メインルーチン(2)-基本動作の流れ

前回記事はこちらです。↓

基本動作を作成しよう。

基本操作の概要

実際の画面で、基本動作の流れを説明します。

この様に、

  1. “選択待機状態” → 和了を完成させたい手牌をクリック →
  2. “交換牌選択可能状態” → 交換したい牌をクリック →
  3. “牌交換待機状態” → 2.で選んだ牌と交換したい牌をクリック → 牌交換 →1.選択待機状態

と、3つの状態を行き来しながら、ゲームを進めることになります。

ですので、プログラムは状態を表す変数を用意して、この変数の値によって処理内容を切り替える方法で組んでいきます。

フローチャートを描く

以上の内容を簡単なフローチャートにするとこんな感じです。

flowchart TD 0000>"状態=選択待機状態"] 0001[/"loop"\] 0002{"?状態"} 9999[\"loop"/] 0000-->0001 0001-->0002 0100["和了を完成させたい手牌をクリック"] 0101[["選択した手牌を保持"]] 0102>"状態=交換牌選択可能状態"] 0002-->0100 subgraph steel["選択待機状態"] 0100-->0101 0101-->0102 end 0102-->9999 0200["交換したい牌をクリック"] 0201[["選択した牌を保持"]] 0202>"状態=牌交換待機状態"] 0002-->0200 subgraph base_click["交換牌選択可能状態"] 0200-->0201 0201-->0202 end 0202-->9999 0300["交換したい牌をクリック"] 0301[["牌交換"]] 0302>"状態=選択待機状態"] 0002-->0300 subgraph change_steel["牌交換待機状態"] 0300-->0301 0301-->0302 end 0302-->9999

状態別にプログラムを組むため、前回のプログラムを次のように変更しました。

require 'dxruby'

#ウィンドウサイズ
Window.resize 672,900
#キャプション
Window.caption = "mjpzl"
#バックグラウンド色(濃い緑色)
Window.bgcolor=[63, 0, 63, 0]

#牌生成
hai_type=[
   1, 2, 3, 4, 5, 6, 7, 8, 9,	#萬子
  11,12,13,14,15,16,17,18,19,	#筒子
  21,22,23,24,25,26,27,28,29,	#索子
  31,33,35,37,                  #風牌
  41,43,45,                     #三元牌
  99                            #裏牌
]

#牌の数は各牌4枚
hais = hai_type*4

#牌をランダムにシャッフル
hais.shuffle!

#牌を14*10に並べる
tiles =Array.new
(0..9).each do |y|
  tiles[y]=Array.new
  (0..13).each do |x|
	#haisの先頭からtilesにひとつずつ代入していく。
    tiles[y][x]=hais.shift
  end
end

#牌画像
hai_images=Array.new
(1..9).each do |i|
  hai_images[     i] = Image.load("./image/p_ms#{i}_1.png")
  hai_images[ 10 +i] = Image.load("./image/p_ps#{i}_1.png")
  hai_images[ 20 +i] = Image.load("./image/p_ss#{i}_1.png")
end
hai_images[31] = Image.load("./image/p_ji_e_1.png")
hai_images[33] = Image.load("./image/p_ji_s_1.png")
hai_images[35] = Image.load("./image/p_ji_w_1.png")
hai_images[37] = Image.load("./image/p_ji_n_1.png")

hai_images[41] = Image.load("./image/p_no_1.png")
hai_images[43] = Image.load("./image/p_ji_h_1.png")
hai_images[45] = Image.load("./image/p_ji_c_1.png")


hai_images[99] = Image.load("./image/p_bk_1.png")
tile_w = 48	#牌画像の幅
tile_h = 64	#牌画像の高さ

#状態変数
state = "steel" #初期値:選択待機状態

Window.loop do
  # ここにゲームの処理を書く
  # update
  case state  #case文で条件分岐
  when "steel"	#選択待機状態

    #選択待機状態の処理を書く

  when "base_click"	#交換牌選択可能状態

    #交換牌選択可能状態の処理を書く

  when "change_steel" #牌交換待機状態

    #牌交換待機状態の処理を書く
    
  end #ここまでがcase文
  
  # draw
  tiles.each_with_index do |rows,y|
    rows.each_with_index do |v,x|
      Window.draw(tile_w * x, tile_h * y, hai_images[v])
    end
  end
end

次回は、選択待機状態の処理をつくります。

次回記事は、こちらです。↓

コメント

タイトルとURLをコピーしました