この、プログラムを実行すると、いつも、フリーズしてしまいます。
なぜフリーズしてしまうのでしょうか。 エラーメッセージは出ていません。
使っているruby はruby 1.9.3p385です。
このような感じで止まってしまいます。
スコアも表示できませんし、数字を入力しようとすると動かなくなります。
10.times doあたりが、おかしいのだと思いますが、どのように直したらよいかわかりません。クイズを10問ほどといてスコアを稼いでいくというプログラムを作りたいです。
main.rb
ruby
1#!ruby -Ks 2require "./window.rb" 3require "./kuizu.rb" 4 5window = Window.new 6window.drawBack 7window.gamestart 8window.refresh 9 10while true do 11 while event = SDL::Event2.poll do 12 case event 13 when SDL::Event2::Quit 14 exit 15 when SDL::Event2::MouseButtonDown 16 x = event.x 17 y = event.y 18 if window.kuizuclicked?(x,y) 19 hajime 20 window.refresh 21 end 22 if window.zairyoclicked?(x,y) 23 require "./zairyo.rb" 24 end 25 end 26 end 27 28end
widndow.rb
ruby
1require "sdl" 2require "./color.rb" 3class Window 4 WINDOW_YOKO = 750 5 WINDOW_TATE = 550 6 BITPIKUSERU = 0 7 KUIZUX = 550 8 KUIZUY = 200 9 ZAIRYOX = 570 10 ZAIRYOY = 300 11def initialize 12 SDL.init(SDL::INIT_EVERYTHING) 13 @screen = SDL.set_video_mode(WINDOW_YOKO,WINDOW_TATE,BITPIKUSERU,SDL::SWSURFACE) 14 SDL::TTF.init 15 @font = SDL::Kanji.open("font/jiskan24.bdf",24) 16 @font.set_coding_system(SDL::Kanji::SJIS) 17end 18 19def drawBack 20 @screen.fill_rect(0,0,WINDOW_YOKO,WINDOW_TATE,Color::GREEN) 21 @font.put(@screen,"###",230,50,255,255,255) 22end 23 24def refresh 25 @screen.update_rect(0,0,0,0) 26end 27 28def gamestart 29 @font.put(@screen,"ああああ",KUIZUX,KUIZUY,255,255,255) 30 @font.put(@screen,"いいいい", ZAIRYOX,ZAIRYOY,255,255,255) 31end 32 33def kuizuclicked?(x,y) 34 if (KUIZUX <= x) and (x <= 690) and (KUIZUY <= y) and (y <= 230) 35 return true 36 else 37 return false 38 end 39end 40 41def zairyoclicked?(x,y) 42 if (ZAIRYOX <= x) and (x <= 600) and (ZAIRYOY <= y) and (y <= 330) 43 return true 44 else 45 return false 46 end 47end 48 49end
kuizu.rb
ruby
1#!ruby -Ks 2require "sdl" 3require "./color.rb" 4require 'io/console' 5 6 7$tisiki = open("./dat/score.dat","w") 8 9 10def yomikomi() 11 i = 0 12 j = 0 13 $moji =[] 14 f = open("./dat/mondai1.dat","r") 15 while text = f.gets do 16 $moji[i] = text.chomp 17 i += 1 18 end 19 f.close 20 $mondaisu = i/8 21 while j <= i/8 22 eval("$q#{j} = [ $moji[j*8+0],$moji[j*8+1],$moji[j*8+2], $moji[j*8+3],$moji[j*8+4],$moji[j*8+5],$moji[j*8+6],$moji[j*8+7 ] ]") 23 j += 1 24 end 25 q = [] 26 eval("q = $q#{rand($mondaisu)}.clone") 27 $mondai = q[0] 28 $sentakusi1 = q[1] 29 $sentakusi2 = q[2] 30 $sentakusi3 = q[3] 31 $sentakusi4 = q[4] 32 $sentakusi5 = q[5] 33 $kotae = q[6] 34 $score = q[7] 35end 36 37 38 39class Gmen 40 WINDOW_YOKO = 750 41 WINDOW_TATE = 550 42 BITPIKUSERU = 0 43 44 45 def initialize 46 SDL.init(SDL::INIT_EVERYTHING) 47 @screen2 = SDL.set_video_mode(WINDOW_YOKO,WINDOW_TATE,BITPIKUSERU,SDL::SWSURFACE) 48 SDL::TTF.init 49 @font = SDL::Kanji.open("font/jiskan24.bdf",24) 50 @font.set_coding_system(SDL::Kanji::SJIS) 51 @font2 = SDL::TTF.open("C:/WINDOWS/Fonts/TAHOMA.TTF",30) 52 end 53 54 def drawBack 55 @screen2.fill_rect(0,0,WINDOW_YOKO,WINDOW_TATE,Color::WHITE) 56 end 57 58 def refresh 59 @screen2.update_rect(0,0,0,0) 60 end 61 62 def kotaeawase 63 a = gets.chomp 64 @font.put(@screen2,"入力した数字#{a}",50,280,0,0,0) 65 if a == $kotae.to_i 66 $tisiki = $tisiki.to_i + $score.to_i 67 @font.put(@screen2,"正解です",50,250,0,0,0) 68 @font.put(@screen2,"正解は#{$kotae}です。",50,220,0,0,0) 69 else 70 @font.put(@screen2,"間違いです。",50,250,0,0,0) 71 @font.put(@screen2,"正解は#{$kotae}です。",50,220,0,0,0) 72 end 73 end 74 75 76 def start 77 @font.put(@screen2,"今###異なります。",50,30,0,0,0) 78 @font.put(@screen2,"正##解さい。",50,70,0,0,0) 79 @font.put(@screen2,"始め##い。",50,120,0,0,0) 80 refresh 81 while true do 82 while event = SDL::Event2.poll 83 case event 84 when SDL::Event2::Quit 85 exit 86 when SDL::Event2::KeyDown 87 if event.sym == SDL::Key::SPACE then 88 10.times do 89 yomikomi 90 drawBack 91 mondaihyouji 92 refresh 93 kotaeawase 94 end 95 end 96 end 97 end 98 end 99 end 100 101 def mondaihyouji 102 @font.put(@screen2,"#{$mondai}", 50,20,0,0,0) 103 @font.put(@screen2,"#{$sentakusi1}", 50,50,0,0,0) 104 @font.put(@screen2,"#{$sentakusi2}", 50,80,0,0,0) 105 @font.put(@screen2,"#{$sentakusi3}", 50,110,0,0,0) 106 @font.put(@screen2,"#{$sentakusi4}", 50,140,0,0,0) 107 @font.put(@screen2,"#{$sentakusi5}", 50,170,0,0,0) 108 @font2.draw_solid_utf8(@screen2," #{$tisiki}",100,500,0,0,0) 109 end 110end 111 112 113 114 115def hajime 116 g = Gmen.new 117 g.drawBack 118 g.refresh 119 g.start 120end 121
必要な部分があればコメントください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/14 06:00 編集
2016/07/14 06:47
2016/07/20 06:39