Rubyを学習して1ヶ月少しの初心者です。
DXRubyを使って2Dゲーム、「マリオ」的なものを作ってみました。
ここにクラスの定義などを追加していきたいのですが、そもそもクラスとは何なのか。どこをクラスにしたらいいのかなど、まだ理解できていないことがたくさんある状態です。
今はただ実装したいことをだらだら書いていきましたが一段階上のコードへとグレードアップしていきたいです。
ほかに効率的な書き方や実装したらいい事などあれば教えていただけると幸いです。
Ruby
1require "dxruby" 2 3#マップデータ [1Block=32*32] Width17, height15 4map = [[1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 5 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 7], 6 [1, 0, 0, 1, 1, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 6], 7 [1, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], 8 [1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1], 9 [1, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1], 10 [1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 1], 11 [1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1], 12 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1], 13 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1], 14 [1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1], 15 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1], 16 [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1], 17 [1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1], 18 [1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1], 19 [1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1]] 20 21#配置パーツ 22block = [] 23block[0] = Image.new(32, 32, [50, 200, 255]) #空 背景 24block[1] = Image.new(32, 32, [100, 50, 0]) #茶 ブロック 25block[2] = Image.new(32, 32, [255, 255, 255]) #白 雲 26block[3] = Image.new(32, 32, [0, 0, 0]) #黒 ゴール 27block[4] = Image.load("image1.png") 28block[5] = Image.load("image2.png") 29block[6] = Image.load("image3.png") 30block[7] = Image.load("image4.png") 31block[8] = Image.load("image5.png") 32 33#キャラ 34character = Image.load("c_mario.png") 35 36#初期値設定 37x = 32 38y = preview = 32 39f = 1 40item = 0 41jump = false 42 43#対応する配列を返す 44def collision(x, y, array) 45 return array[y/32][x/32] 46end 47 48 49#ループ開始 50Window.loop do 51 52 #Y軸移動増分の設定 53 y_move = (y - preview) + f 54 55 #すりぬけ回避 56 if y_move > 31 57 y_move = 31 58 end 59 preview = y 60 y += y_move 61 f = 1 #重力設定 62 63 #落下時 座標初期化 64 if y >= 480 65 x = 32 66 y = preview = 0 67 item = 0 68 map[3][6] = 5 #ブロック再表示 69 map[2][6] = 0 #アイテムを消去 70 end 71 72 #天井衝突判定 73 if collision(x , y, map) == 1 or 74 collision(x+31, y, map) == 1 then 75 y = y/32*32 + 32 76 end 77 #床衝突判定 78 if collision(x , y+31, map) == 1 or 79 collision(x+31, y+31, map) == 1 then 80 y = y/32*32 81 jump = true #地面に接地時ジャンプ許可 82 else 83 jump = false #不許可 84 end 85 86 #移動スピード 87 if item == 1 88 x += Input.x * 5 89 else 90 x += Input.x * 2 91 end 92 93 #壁衝突判定(左側) 94 if collision(x , y , map) == 1 or 95 collision(x , y+31, map) == 1 then 96 x = x/32*32 + 32 97 end 98 #壁衝突判定(右側) 99 if collision(x+31, y , map) == 1 or 100 collision(x+31, y+31, map) == 1 then 101 x = x/32*32 102 end 103 #アイテム衝突判定 104 if collision(x , y , map) == 4 or 105 collision(x , y+31, map) == 4 then 106 x = x/32*32 + 32 107 map[2][6] = 0 108 item = 1 109 end 110 #ブロック衝突判定 111 if collision(x , y, map) == 5 or 112 collision(x+31, y, map) == 5 then 113 y = y/32*32 + 32 114 map[2][6] = 4 115 map[3][6] = 1 116 end 117 if collision(x , y+31, map) == 5 or 118 collision(x+31, y+31, map) == 5 then 119 y = y/32*32 120 jump = true 121 end 122 123 #Escで終了 124 if Input.key_push?(K_ESCAPE) 125 break 126 end 127 #ジャンプ 128 if Input.key_push?(K_SPACE) and jump 129 f = -15 130 end 131 132 #マップの表示 133 Window.draw_tile(0,0,map,block,0,0, 17, 15) 134 #キャラの表示 135 Window.draw(x, y, character) 136 137end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/27 14:33
2015/08/27 16:30
2015/08/28 02:55