【DXRuby】入れ替えパズルをつくってみる。(2)-メインルーチン(1)-メイン画面

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

牌を、横14枚×縦10枚に並べる。

牌の種類を数値で表現

ルールは、以下の様にします。

1- 9 : 萬子

11-19 : 筒子

21-29 : 索子

31,33,35,37 : 風牌

41,13,15 : 三元牌

99:ダミー牌

※風牌、三元牌をひとつ飛びにしているのは、順子にならないからです。このようにしていたほうが、和了判定がしやすくなりそうなので、このようにしました。

これを、配列にします。

#牌生成
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枚あるので、4倍にします。

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

次にランダムにシャッフルします。

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

これで牌を配置する準備が整いました。

2次元配列を使って、牌を並べる

横14枚縦10枚に牌を配置するので、[10][14]の2次元配列に、先程作成した牌データを入れていきます。

#牌を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という配列にして、添字(インデックス)を、初めに設定したhai_typeに合わせています。

画像ファイルは、作成しているスクリプトファイルがあるフォルダに、”image”と言う名前のフォルダを作成し、その中に置いています。

画像は麻雀王国の「パイガ - 牌画入力ツール」の画像をPNGに変換したものを使用しています。

#牌画像
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")

最後にDXrubyのdrawメソッドで横14枚縦10枚に配置します。

tile_w = 48	#牌画像の幅
tile_h = 64	#牌画像の高さ

Window.loop do
  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

完成したプログラムは、以下の通りです。

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	#牌画像の高さ

Window.loop do
  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

このプログラムを実行すると、以下のような画面が表示されます。

mjpzl0200

これで、画面表示ができるようになりました。

次回は、基本動作の流れ(フローチャート)をつくります。

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

※牌画には麻雀王国の「パイガ - 牌画入力ツール」を使用させていただいております。

コメント

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