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

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

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

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

Q&A

解決済

2回答

1906閲覧

ruby while ,end エラー

yusuke.

総合スコア66

Ruby

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

1グッド

1クリップ

投稿2016/07/22 02:11

編集2016/07/25 00:09

エラー文
エラー文
E:/zairyo.rb:163: syntax error, unexpected $end, expecting']'(SyntaxError)
というエラー文が出ています。
zairyo.rbというのは、このファイルのことです。

いつもお世話になっております。
今回このようなエラーが出たのですが、どこがいけないのかがよくわかりません。
多分endの数が多いとか少ないとかだと思うのですが、自分が見たところ間違いが見つかりません。

ruby

1 #!ruby -Ks 2require "./window2" 3require "./syujinko" 4require "./item" 5 6def hit?(syujinko,baikin) 7 diffx = syujinko.centerX - baikin.centerX 8 diffy = syujinko.centerY - baikin.centerY 9 if (diffx > -30) and (diffx < 50) and (diffy > -20) and (diffy < 50) 10 return true 11 else 12 return false 13 end 14end 15def clicked?(x,y,baikin) 16 diffx = x - baikin.centerX 17 diffy = y - baikin.centerY 18 if (diffx > -20) and (diffx < 20) and (diffy > -20) and (diffy < 20) 19 return true 20 else 21 return false 22 end 23end 24 25def gameOver(window,syujinko) 26 window.drawEndBack 27 syujinko.draw 28 window.refresh 29 sleep 5 30 exit 31end 32 33def checkScore(window,score) 34 if score >= 200 35 window.drawEndClear 36 window.refresh 37 sleep 3 38 exit 39 end 40end 41 42 43window = Window.new 44syujinko = Syujinko.new(window,Window::WINDOW_WIDTH/2,Window::SKYLINE) 45baikin1 = Baikin.new(window) 46baikin2 = Baikin.new(window) 47baikin3 = Baikin.new(window) 48wakame = Wakame.new(window) 49tenpura = Tenpura.new(window) 50tamago = Tamago.new(window) 51sitimi = Sitimi.new(window) 52negi = Negi.new(window) 53remon = Remon.new(window) 54kamaboko = Kamaboko.new(window) 55tenkasu = Tenkasu.new(window) 56syouga = Syouga.new(window) 57 58score = 0 59clickCount = 0 60 61topping = [wakame,tenpura,tamago,sitimi,negi,remon,kamaboko,tenkasu,syouga] 62tpg1 = topping[#{rand(8)}] 63tpg2 = topping[#{rand(8)}] 64tpg3 = topping[#{rand(8)}] 65tpg4 = topping[#{rand(8)}] 66 67 68 69while true do 70 time = window.getTime 71 while event = SDL::Event2.poll do 72 case event 73 when SDL::Event2::Quit 74 exit 75 when SDL::Event2::MouseButtonDown 76 x = event.x 77 y = event.y 78 isClickedBaikin1 = clicked?(x,y,baikin1) 79 isClickedBaikin2 = clicked?(x,y,baikin2) 80 isClickedBaikin3 = clicked?(x,y,baikin3) 81 if isClickedBaikin1 or isClickedBaikin2 or isClickedBaikin3 82 gameOver(window,syujinko) 83 end 84 isClickedTpg1 = clicked?(x,y,tpg1) 85 isClickedTpg2 = clicked?(x,y,tpg2) 86 isClickedTpg3 = clicked?(x,y,tpg3) 87 isClickedTpg4 = clicked?(x,y,tpg4) 88 if isClickedTpg1 89 score = score + tpg1.getScore 90 clickCount = clickCount + 1 91 tpg1.reset 92 checkScore(window,score) 93 end 94 if isClickedTpg2 95 score = score + tpg2.getScore 96 clickCount = clickCount + 1 97 tpg2.reset 98 checkScore(window,score) 99 end 100 if isClickedTpg3 101 score = score + tpg3.getScore 102 clickCount = clickCount + 1 103 tpg3.reset 104 checkScore(window,score) 105 end 106 if isClickedTpg4 107 score = score + tpg4.getScore 108 clickCount = clickCount + 1 109 tpg4.reset 110 checkScore(window,score) 111 end 112 end 113 end 114 115 SDL::Key.scan 116 if SDL::Key.press?(SDL::Key::A) 117 syujinko.moveLeft 118 end 119 if SDL::Key.press?(SDL::Key::F) 120 syujinko.moveRight 121 end 122 123 window.drawBack 124 syujinko.draw 125 baikin1.drop 126 baikin2.drop 127 baikin3.drop 128 tpg1.drop 129 tpg2.drop 130 tpg3.drop 131 tpg4.drop 132 if hit?(syujinko,tpg1) 133 score = score + tpg1.getScore 134 tpg1.reset 135 checkScore(window,score) 136 end 137 if hit?(syujinko,tpg2) 138 score = score + tpg2.getScore 139 tpg2.reset 140 checkScore(window,score) 141 end 142 143 if hit?(syujinko,tpg3) 144 score = score + tpg3.getScore 145 tamago.reset 146 checkScore(window,score) 147 end 148 if hit?(syujinko,tpg4) 149 score = score + tpg4.getScore 150 sitimi.reset 151 checkScore(window,score) 152 end 153 154 if hit?(syujinko,baikin1) or hit?(syujinko,baikin2) or hit?(syujinko,baikin3) or time < 0 155 gameOver(window,syujinko) 156 end 157 time2 = time.to_s.tr(' 0-9a-zA-Z',' 0-9a-zA-Z') 158 score2 = score.to_s.tr(' 0-9a-zA-Z',' 0-9a-zA-Z') 159 clickCount2 = clickCount.to_s.tr(' 0-9a-zA-Z',' 0-9a-zA-Z') 160 hyouji = "あなたの得点 #{score2}点 残りは#{time2}秒 (クリック#{clickCount2} 回)" 161 window.writeChar(hyouji) 162 window.refresh 163end

全文にしました。
お願いします。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

unexpected $end, expecting']'(SyntaxError)

']'が来ると思っていたらendが来たんだけどおかしくね?

Ruby

1tpg1 = topping[#{rand(8)}]

がコメントアウトで閉じてません


#{}について勘違いしているようです。

"a":"a"という文字列
"#{a}":aの値を文字列に展開したもの。
#{a}:コメント

投稿2016/07/25 00:19

編集2016/07/25 01:27
ozwk

総合スコア13521

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

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

yusuke.

2016/07/25 00:35

回答ありがとうございます。 エラー文の意味まで教えていただき助かります。 しかし[#{rand(8)}]で、ランダムに数字を入れて前の行にあるtoppingのなかにあるやつからtpg1を入れタイのですが、どうすればいいでしょうか。 randを入れるのがだめならばと a = rand(8) b = rand(8) c = rand(8) d = rand(8) tpg1 = topping[#{a}] tpg2 = topping[#{b}] tpg3 = topping[#{c}] tpg4 = topping[#{d}] このようなものにもしてみたのですが、だめでした。
ozwk

2016/07/25 01:01

むしろなんで'#'入れているんですか?
yusuke.

2016/07/25 01:12

たとえば a = STDIN.getch @font2.draw_solid_utf8(@screen2," #{a}",190,242,0,0,0) この場合#{}をつけないと画面には"a"という文字だけが表示されるようになり、表示したい入力した文字を表示することができないからです。 #{}を使うことでその中に書いてある変数などの値を表示することができるのではないでしょうか。
ozwk

2016/07/25 01:29

#{}について追記しました。 >#{}を使うことでその中に書いてある変数などの値を表示することができるのではないでしょうか。 いいえ違います。 乱暴に言えばto_sメソッドを呼んでくれるだけです。
yusuke.

2016/07/25 01:57

そうなんですか。わかりました。では、どのようにすればいいのでしょうか。 理解していなくてすいません。
ozwk

2016/07/25 02:00

普通に tpg1=topping[rand(8)] です。
yusuke.

2016/07/25 02:20

解決しました。 ありがとうございます。
guest

0

コピペして実行してみましたが、Syntax Errorは出ませんでした。
何かの勘違い、もしくは、ここに書いてない部分がおかしいと思われます。

あと、画像は見づらいので、テキストをコピペして下さいね。

投稿2016/07/22 03:12

otn

総合スコア84529

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

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

yusuke.

2016/07/25 00:10

回答ありがとうございます。 申し訳ありませんが、全文を表示したので、見ていただけないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問