0

仮想時間を追跡するRPGをセットアップしようとしています。いくつか読んだ後、GregorianCalendarはこれを行うための最良の方法のようですが、いくつか質問があり、経験のある人が私に洞察を与えることを願っています。

これが私がやろうとしていることです。ゲームは1675年に開始され、約30年間実行されます。その時点で、キャラクターが長く生き残った場合、キャラクターは引退します。キャラクターは、ゲームの大まかな過程で、私が事前に設定したアクションから選択できるようになります。短くて1時間かかるアクションもあれば、1週間または1か月かかるアクションもあります。本当の質問は、SQLiteを多用している私から来ています。現在の時間と、データベースでのアクションの所要時間を保存したいと思います。これを設定するときに最初に考えたのは、1675年8月15日にゲームを開始して、データベースを3行にする場合は、それらのフィールドを8、15、1675に設定します。その後、その時間にさらに2つの列を設定します。カーソルを介してこれらのintをプルし、次のようなもので設定します

GregorianCalendar time = new GregorianCalendar();
time.set(year, month, date, hour, minute);

同様の方法で、アクションにかかる時間を引っ張ると思いました。int Xと、この時間が分、時間、日などであるかどうかを示す文字列を用意します。次に、このintをデータベースから取得したintに追加して、カレンダーに直接追加します。

Q:カレンダーに直接追加する場合、後で(プレーヤーがゲームをロードするときに)ロードするために、カレンダーからint値を取得してデータベースに保存するにはどうすればよいですか?

Q:データベースに格納されているintに追加し、この新しいintでカレンダーを設定すると、intをカレンダーのスコープ外にするのに十分な数を追加するとどうなりますか(日付は31に設定されていますが、別の日を追加します) ?

4

2 に答える 2

1

たとえばgetTimeInMillis() setTimeInMillis()を使用して、GregorianCalendarオブジェクトからUNIX時間へ/から変換できます。GregorianCalendarにはroll()メソッドもあります。

指定された金額を指定されたフィールドに追加し、現在の日付の最大値または最小値を超えたときにフィールドの値をラップします。他のフィールドは、一貫した日付を維持するために必要に応じて調整されます。

于 2012-05-01T03:32:36.010 に答える
0

(やや欠けている)標準のJava日付と時刻ユーティリティの代わりにJodaTimeを使用することをお勧めします。それははるかに柔軟です。

日付計算を行う機能があり、いくつかの異なるカレンダー(ISO8601、仏教、コプティック、エチオピア、グレゴリオ暦、グレゴリオ暦、イスラム暦、ジュリアン)をサポートし、間隔、期間、および期間をサポートします。フォーマッターが組み込まれているため、出力をほぼすべてのように見せることができます。

私の場合は、Jodaを使用して、Jodaによって提示されたネイティブ形式で日付を保存し(覚えていません。それがすぐに何であるかは覚えていません)、もう一度引き出して、Jodaを使用してすべての日付計算を実行します。ユーザーに表示するために使用したいカレンダーに変換するようにします。

そうでなければ、あなたは車輪の再発明をしているように私には思えます。

于 2012-05-01T03:53:56.053 に答える