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

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

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

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

Q&A

解決済

1回答

2041閲覧

ruby クリックしたとき

yusuke.

総合スコア66

Ruby

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

0グッド

0クリップ

投稿2016/06/07 08:20

rubyについて質問です。
main を実行すると画面を表示することはできるのですが、画面に表示されている「あいうえお」をおすと新しい画面が出るようにしたいです。どうすればいいか教えてください。
rubyの本を見てだいたい作ってみたんですがどう改良したらいいですか
ソースコード

##main

!ruby -Ks

require "./windowkiku.rb"

def clicked?
if (550 < 100) and (200 < 20)
return true
else
return false
end
end
while true do
while event = SDL::Event2.poll do
case event
when SDL::Event2::Quit
exit
when SDL::Event2::MouseButtonDown
x = event.x
y = event.y
if clicked?
puts "ok "
end
end
end
window = Window.new
window.drawBack
window.gamestart
window.refresh
end

##windowkiku

require "sdl"
require "./color.rb"
class Window
WINDOW_YOKO = 750
WINDOW_TATE = 550
BITPIKUSERU = 0

def initialize
SDL.init(SDL::INIT_EVERYTHING)
@screen = SDL.set_video_mode(WINDOW_YOKO,WINDOW_TATE,BITPIKUSERU,SDL::SWSURFACE)
SDL::TTF.init
@font = SDL::Kanji.open("font/jiskan24.bdf",24)
@font.set_coding_system(SDL::Kanji::SJIS)
end

def drawBack
@screen.fill_rect(0,0,WINDOW_YOKO,WINDOW_TATE,Color::GREEN)
@font.put(@screen,"あいうえお",230,50,255,255,255)
end

def refresh
@screen.update_rect(0,0,0,0)
end

def gamestart
@font.put(@screen,"かきくけこ",550,200,255,255,255)
@font.put(@screen,"さしすせそ", 570,300,255,255,255)
end
end

##color

class Color

SKYBLUE = [135,206,235]
GREEN = [ 0,128, 0]
WHITE = [255,255,255]
YELLOW = [255,255, 0]
BULACK = [ 0, 0, 0]
LIGHTBLUE = [ 200,255,255]
PINK = [255,192,203]
end

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずはhttps://teratail.com/questions/37106と同質問ですよね、別スレッドを立てて、同じ質問はしないように!

あまり詳しくはないですが、ざっと見て気になったところだけ、
clicked?メソッドですが、いきなり

Ruby

1if (550 < 100) and (200 < 20)

という判定をしてますが、これ必ずfalseになります(どちらの式も成り立ちませんよね)。おそらく、550か100、200か20のそれぞれどちらかは変数になるのではないかと。

それと、このclicked?メソッドは**「ある範囲がクリックされたかどうか」**を判定するメソッドになると思います。しかし、「クリックされた箇所」が処理に渡されていません。clicked?メソッドの呼び元の前で

Ruby

1x = event.x 2y = event.y

としていますが、このxとyをclicked?メソッドに渡さなければならないのではないでしょうか。そして先の条件文でxとyの範囲判定をするのではないでしょうか。

投稿2016/06/07 13:36

archiver

総合スコア1557

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

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

yusuke.

2016/06/07 13:59

コメント大変助かります。 ありがとうございます。xとyの範囲の判定の文がわかりません。教えていただけないでしょうか。
archiver

2016/06/08 14:24

Ruby/SDLについてはわかりませんし、まんまコードを書くのもあれなので、考え方だけ。 やりたいことは「あいうえお」と書かれたところがクリックされた時に画面が変わることですので、「あいうえお」と描画されている部分の範囲(開始座標と終点座標)を明確にする必要があります。開始座標は @font.put(@screen,"あいうえお",230,50,255,255,255) で指定している(x,y)=(230, 50)になるでしょう。ただ、終点座標はここからじゃわからないんですよね。これは試行錯誤で求めるしかないのかなと。 で、範囲判定の条件ですが、x軸、y軸でそれぞれ求めて、そのANDを取るようにします。つまり、 230 <= x <= 終点のx座標 50 <= y <= 終点のy座標 この2つの範囲を同時に満たすように条件文を書きます。 それと思ったのですが、clicked?メソッドはWindowクラスのメソッドにした方が収まりがいいと思います(Window内の特定の箇所がクリックされたかを判定する処理のため)。
yusuke.

2016/06/09 08:47

ありがとうございます。 参考にして直してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問