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

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

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

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

Q&A

解決済

1回答

1303閲覧

途中から開始すると、前の状態からスタートしてしまう

yusuke.

総合スコア66

Ruby

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

0グッド

0クリップ

投稿2016/08/08 00:49

編集2016/08/09 00:20

いつもお世話になります。
ゲームを作っているのですが、ゲームオーバーやゲームクリアした時に、タイトルに戻るようにゲームを作りました。そこで、ゲームをした後にタイトルに戻り、もう一度ゲームをすると、その前のゲームオーバーの画面からスタートしてしまいます。
なにか今までのゲームをした後の履歴を消すようなものはないのでしょうか。お願いいたします。

追記
もし、ゲームをした後のつかった後の画像ファイルなどを消せていないのだとすれば、どのようにけしたらよいのでしょうか。

これが、タイトル画面です。

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

少し省略させていただきました。

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

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

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

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

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

coco_bauer

2016/08/08 01:23

ゲームオーバーやゲームクリアした際に、ゲームを再開するためのデータ(画像など)をクリア(削除)していないだけではありませんか?
yusuke.

2016/08/08 01:27

ご指摘ありがとうございます。 どのようにそのデータをクリアすればよいのでしょうか。
coco_bauer

2016/08/08 01:38

作ってらっしゃるゲームの作りを知らないので一般論ですが、ゲームの開始時には、1)最初からゲームを始める(開始時の固定したデータを初期値とする)、2)途中からゲームを始める(ゲームをやめる時に状態を保存するようになっていて、保存されていた状態を初期値とする)のどちらかを選択できる。保存されている状態が無いなら1)最初から開始が自動的に選択される。これが私の想像しているゲームの構成です。ゲームオーバーやクリアの際にも状態が保存されていて、そこからゲームが開始されるから質問のような状態が起きると考え、ゲームオーバーの際には状態を保存しないようにする(クリアする)事で解決できると考えました。
yusuke.

2016/08/08 02:20

詳しい説明ありがとうございます。しかし、そのゲームの状態を保存しないやり方が分かりません。どんな文字、文?を使えばよい科教えていただけないでしょうか。
flied_onion

2016/08/08 02:58

ゲームの作り方次第なので、作っているゲームのソースの一部、それが無理でも情報(どこ(コンソール、ブラウザなど)で動くゲームか、使っているライブラリはあるか、参考にしたサイトや本はあるか)が無いとアドバイスしようがありません。
flied_onion

2016/08/08 03:03

情報を載せるのも難しい場合は、ゲームオーバーになるときにgemeoverになったことを変数にセットしていないか、それをセットしなければgameoverにならないようにできないか、試してみてください(つまり、どうやってゲームオーバーにしているかを探してみてください)。 ゲームを再起動してもゲームオーバーになるなら変数ではなくファイルとかかもしれませんが。
yusuke.

2016/08/09 01:15

貴重なご意見ありがとうございます。 ソースを載せたので見ていただければありがたいです。 あと、情報修正の所よりかは回答に書いていただいたほうが、見やすいのでお願いします。
guest

回答1

0

ベストアンサー

まず、クラスを使うようにしましょう。
そして、タイトルに戻る時(もしくはゲーム開始時とか)にゲーム画面のクラスを初期化すればいいのではないでしょうか。
どうしてもクラスを使いたくない、使えない理由があるのであれば、ゲームの終了条件となっているもの(time変数とか)を初期化する方法はどうでしょうか。

投稿2016/08/09 05:51

KaiShoya

総合スコア551

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

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

yusuke.

2016/08/09 06:48

回答ありがとうございます。 この、やつにクラスを作って、仮にAbcクラスだとしたらこの、Abc.newを、また始める時に実行させるようにすればいいんですね。
yusuke.

2016/08/17 01:23

zairyoをクラスに変えて押されるとZairyo.newが実行されるようにしたのですが途中から始まってしまいました
yusuke.

2016/08/30 13:24

経過時間を初期化することで解決しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問