いつもお世話になります。
ゲームを作っているのですが、ゲームオーバーやゲームクリアした時に、タイトルに戻るようにゲームを作りました。そこで、ゲームをした後にタイトルに戻り、もう一度ゲームをすると、その前のゲームオーバーの画面からスタートしてしまいます。
なにか今までのゲームをした後の履歴を消すようなものはないのでしょうか。お願いいたします。
追記
もし、ゲームをした後のつかった後の画像ファイルなどを消せていないのだとすれば、どのようにけしたらよいのでしょうか。
これが、タイトル画面です。
ruby
1#!ruby -Ks 2require "./window.rb" 3require "./kuizu.rb" 4require "./zairyo.rb" 5 6window = Window.new 7window.drawBack 8window.gamestart 9window.refresh 10 11while true do 12 while event = SDL::Event2.poll do 13 case event 14 when SDL::Event2::Quit 15 exit 16 when SDL::Event2::MouseButtonDown 17 x = event.x 18 y = event.y 19 if window.kuizuclicked?(x,y) 20 hajime 21 window.refresh 22 end 23 if window.zairyoclicked?(x,y) 24 kaisi 25 SDL.init 26 end 27 end 28 end 29 30end
これがゲーム画面です。エンド画面も入っています。
ruby
1#!ruby -Ks 2require "./window3" 3require "./syujinko" 4require "./item" 5require "sdl" 6 7 8 9def gameOver(window3,syujinko) #エンドの画面 10 window3.drawEndBack 11 syujinko.draw 12 window3.refresh 13 sleep 5 14 require "./main.rb" 15end 16 17def checkScore 18 if @score <= 0 19 @score = 0 20 end 21 return @score 22end 23 24 25def kaisi 26window3 = Window3.new #(save_data.high_score) 27syujinko = Syujinko.new(window3,Window3::WINDOW_WIDTH/2,Window3::SKYLINE) 28 29@score = 0 30clickCount = 0 31 32 tpg1 = topping[rand(8)] 33 tpg2 = topping[rand(8)] 34 tpg3 = topping[rand(8)] 35 tpg4 = topping[rand(8)] 36 37 38 39while true do 40 41 time = window3.getTime 42 while event = SDL::Event2.poll do 43 case event 44 when SDL::Event2::Quit 45 exit 46 when SDL::Event2::MouseButtonDown 47 x = event.x 48 y = event.y 49 isClickedBaikin1 = clicked?(x,y,baikin1) 50 isClickedBaikin2 = clicked?(x,y,baikin2) 51 isClickedBaikin3 = clicked?(x,y,baikin3) 52 53 end 54 end 55 56 SDL::Key.scan 57 if SDL::Key.press?(SDL::Key::A) 58 syujinko.moveLeft 59 end 60 if SDL::Key.press?(SDL::Key::F) 61 syujinko.moveRight 62 end 63 64 window3.drawBack 65 syujinko.draw 66 baikin1.drop 67 baikin2.drop 68 baikin3.drop 69 tpg1.drop 70 tpg2.drop 71 tpg3.drop 72 tpg4.drop 73 if hit?(syujinko,tpg1) 74 @score = @score + tpg1.getScore 75 tpg1.reset 76 checkScore 77 end 78 79 if hit?(syujinko,tpg2) 80 @score = @score + tpg2.getScore 81 tpg2.reset 82 checkScore 83 end 84 85 if hit?(syujinko,tpg3) 86 @score = @score + tpg3.getScore 87 tpg3.reset 88 checkScore 89 end 90 if hit?(syujinko,tpg4) 91 @score = @score + tpg4.getScore 92 tpg4.reset 93 checkScore 94 end 95 96 if hit?(syujinko,baikin1) 97 @score = @score - baikin1.getScore 98 baikin1.reset 99 checkScore 100 end 101 102 if hit?(syujinko,baikin2) 103 @score = @score - baikin2.getScore 104 baikin2.reset 105 checkScore 106 end 107 108 if hit?(syujinko,baikin3) 109 @score = @score - baikin3.getScore 110 baikin3.reset 111 checkScore 112 end 113 114 if time < 0 115 gameOver(window3,syujinko) 116 end 117 118 119 window3.writeChar(hyouji) 120 window3.refresh 121 $score = @score 122end 123end
少し省略させていただきました。
ゲームオーバーやゲームクリアした際に、ゲームを再開するためのデータ(画像など)をクリア(削除)していないだけではありませんか?
ご指摘ありがとうございます。 どのようにそのデータをクリアすればよいのでしょうか。
作ってらっしゃるゲームの作りを知らないので一般論ですが、ゲームの開始時には、1)最初からゲームを始める(開始時の固定したデータを初期値とする)、2)途中からゲームを始める(ゲームをやめる時に状態を保存するようになっていて、保存されていた状態を初期値とする)のどちらかを選択できる。保存されている状態が無いなら1)最初から開始が自動的に選択される。これが私の想像しているゲームの構成です。ゲームオーバーやクリアの際にも状態が保存されていて、そこからゲームが開始されるから質問のような状態が起きると考え、ゲームオーバーの際には状態を保存しないようにする(クリアする)事で解決できると考えました。
詳しい説明ありがとうございます。しかし、そのゲームの状態を保存しないやり方が分かりません。どんな文字、文?を使えばよい科教えていただけないでしょうか。
ゲームの作り方次第なので、作っているゲームのソースの一部、それが無理でも情報(どこ(コンソール、ブラウザなど)で動くゲームか、使っているライブラリはあるか、参考にしたサイトや本はあるか)が無いとアドバイスしようがありません。
情報を載せるのも難しい場合は、ゲームオーバーになるときにgemeoverになったことを変数にセットしていないか、それをセットしなければgameoverにならないようにできないか、試してみてください(つまり、どうやってゲームオーバーにしているかを探してみてください)。
ゲームを再起動してもゲームオーバーになるなら変数ではなくファイルとかかもしれませんが。
貴重なご意見ありがとうございます。
ソースを載せたので見ていただければありがたいです。
あと、情報修正の所よりかは回答に書いていただいたほうが、見やすいのでお願いします。
回答1件
あなたの回答
tips
プレビュー