質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1983閲覧

Ruby クラスの定義

Oramun

総合スコア76

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2015/08/27 04:43

編集2015/08/27 04:47

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

例えば、マリオというキャラクターには、マップのどこにいるか、残り体力はいくつか、といった属性(プロパティ)がありますよね。一方で、マリオに対し、どこに移動しろ、どれだけのダメージを受けろ、といった操作(メソッド)があります。
このように、概念(プロパティの集合)とそれに対する操作・命令をまとめたものを、クラスと呼びます。

質問者さんのコードを見た感じだと、キャラクターをクラスとしてまとめてみるのが、理解に役立つと思います。
難しければ、マニュアルを読みながら、文字列や配列の色々な操作を試してみてください。いずれも実体はクラスオブジェクトなので、「操作」というものがどういうものか分かりやすいと思います。

私はRubyについては専門外なので、ぜひ「Ruby+入門」というキーワードで検索してみてください。多くのページにクラスの書き方が載っていると思います。

もし、何をプロパティとして、何をメソッドとしてまとめたらいいか分からない、ということでしたら、また質問ください。

投稿2015/08/27 07:06

majiponi

総合スコア1720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Oramun

2015/08/27 14:33

ありがとうございます!少し頑張ってみようと思います!
Oramun

2015/08/27 16:30

すいません、度々申し訳ないです。 やはり少しむずかしいところがありました。 書き方や何をどうしたらいいかなど教えていただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問