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

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

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

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

Q&A

解決済

1回答

2016閲覧

押されているキーの取得

yusuke.

総合スコア66

Ruby

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

0グッド

1クリップ

投稿2016/08/09 02:11

いつもお世話になっております。
クイズを作っているのですが、答えあわせをするときに使っている人がどのキーを押したのか知りたいので以下のようなソースを作りましたが、うまく実行されません。

ruby

1def kotaeawase 2 @font.put(@screen2,"数字を入力してください",50,220,0,0,0) 3 refresh 4 when SDL::Event2::KeyDown 5 case event.sym 6 when SDL::Key::1 #1キーが押された時 7 return a = 1 8 when SDL::Key::2 #2keyが押された時 9 return a = 2 10 when SDL::Key::3 #3キーが押された時 11 return a = 3 12 when SDL::Key::4 #4キーが押された時 13 return a = 4 14 when SDL::Key::5 #5キーが押された時 15 return a = 5 16 end 17 @font.put(@screen2,"入力した数字",50,250,0,0,0) 18 @font2.draw_solid_utf8(@screen2," #{a}",190,242,0,0,0) 19 refresh 20 if a == $kotae 21 sleep 2 22 $tisiki = $tisiki.to_i + $score.to_i 23 @font.put(@screen2,"正解です",50,310,0,0,0) 24 sleep 0.5 25 @font.put(@screen2,"正解は です",50,280,0,0,0) 26 @font2.draw_solid_utf8(@screen2," #{$kotae}",130,274,0,0,0) 27 refresh 28 else 29 sleep 2 30 @font.put(@screen2,"間違いです",50,280,0,0,0) 31 refresh 32 sleep 0.5 33 @font.put(@screen2,"正解は です",50,310,0,0,0) 34 @font2.draw_solid_utf8(@screen2," #{$kotae}",130,300,0,0,0) 35 refresh 36 end 37end 38

このような文で、なのですが、簡単に説明すると、
1どのキーが押されているか調べる。
2 その押されていた数字をaにあてはめる。
3 aと、その答えの値が等しいか比べる
4 結果を表示する
みたいな感じです。

ruby

1syntaxerror, unexpected keyword_when, expevting keyword_end (SyntaxError) 2 when SDL::Event2::KeyDown 3syntax error, unexpected tINTEGER 4 when SDL::Key::1 5.....

こんな感じです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

syntaxerrorと出ているので、ただの構文エラーです。

rubyのcase文は次の様な形で記述します。

ruby

1case 対象オブジェクト 2when1 then 31と一致する場合に行う処理 4when2 then 52と一致する場合に行う処理 6else 7 どの値にも一致しない場合に行う処理 8end

なので、when SDL::Event2::KeyDownの部分に対するcase文が存在していません。
他にもwhen句の中でreturnを使用していますが、kotaeawaseメソッドから出たいのでしょうか?

投稿2016/08/09 02:46

shanxia

総合スコア1038

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

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

yusuke.

2016/08/09 05:22

解答ありがとうございます。では、when SDL::Event2::KeyDownはどのように記述すればよいのでしょうか。aはkotaeawaseの中でしか使わないのでたしかにひつようないですね。ありがとうございます。
shanxia

2016/08/09 05:51

SDLは詳しくないのですが、こんな感じになると思います。 case event when SDL::Event2::KeyDown case case event.sym when SDL::Key::1 #1キーが押された時 .... end # <- case event.symに対するend end # <- case eventに対するend
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問