C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[15]: モグラたたきの時間のつけ方


(過去ログ 55 を表示中)

[トピック内 22 記事 (1 - 20 表示)]  << 0 | 1 >>

■30657 / inTopicNo.1)  モグラたたきの時間のつけ方
  
□投稿者/ カズン (1回)-(2008/12/31(Wed) 12:14:34)

分類:[.NET 全般] 

1分なら1分と決めてその間にもぐらをたたきたいです。
その時間はどういうプログラムを組めばいいですか?
引用返信 編集キー/
■30658 / inTopicNo.2)  Re[1]: モグラたたきの時間のつけ方
□投稿者/ 出水 (104回)-(2008/12/31(Wed) 12:29:02)
No30657 (カズン さん) に返信
> 1分なら1分と決めてその間にもぐらをたたきたいです。
> その時間はどういうプログラムを組めばいいですか?

System.Environment.TickCount ってプロパティがWindows起動時からのミリ秒を取得できます
ゲーム開始時にこの値を保存しておいて、現在の時間との差が60000以上なら終了すればいいです
引用返信 編集キー/
■30659 / inTopicNo.3)  Re[2]: モグラたたきの時間のつけ方
□投稿者/ ちゃっぴ (186回)-(2008/12/31(Wed) 13:52:32)
ちゃっぴ さんの Web サイト
Timer 設定して event で受ける方法もありますね。

> System.Environment.TickCount ってプロパティがWindows起動時からのミリ秒を取得できます
> ゲーム開始時にこの値を保存しておいて、現在の時間との差が60000以上なら終了すればいいです

蛇足。桁あふれて切り捨てられたときの考慮も必要になりますね。
引用返信 編集キー/
■30661 / inTopicNo.4)  Re[3]: モグラたたきの時間のつけ方
□投稿者/ 渋木宏明(ひどり) (1012回)-(2008/12/31(Wed) 15:20:51)
渋木宏明(ひどり) さんの Web サイト
ゲーム開始時にゲーム終了時刻(=現在時刻+ゲーム時間)を求めて保存しておいて、定期的に終了時刻を過ぎたかどうかチェックすればいいです。

「定期的にxxxする」は、Timer コンポーネントで 0.1 秒間隔くらいでチェックすればおkかな。
引用返信 編集キー/
■30662 / inTopicNo.5)  Re[4]: モグラたたきの時間のつけ方
□投稿者/ やじゅ (899回)-(2008/12/31(Wed) 18:56:21)
やじゅ さんの Web サイト
初心者向きの考えとするなら、微妙な精度は抜きにして
時間制にする時は、残り時間を画面に表示すると考え
タイマーイベントで1秒毎にカウントしていき
タイマーイベント内で残り時間の表示(60-カウント)を行う。
残り時間が0になれば、終了でいいんじゃないの。
引用返信 編集キー/
■30663 / inTopicNo.6)  Re[1]: モグラたたきの時間のつけ方
□投稿者/ reo♪ (1回)-(2008/12/31(Wed) 23:20:43)
No30657 (カズン さん) に返信
> 1分なら1分と決めてその間にもぐらをたたきたいです。
> その時間はどういうプログラムを組めばいいですか?
あけおめ♪少しはやいが。
あのさぁ、花ちゃんトコにコード書いたよね。
自分で書いたんじゃないよね(コード)高度だしww
VisualBasic2008で動かせるようにして調べたけどね♪
あのコードが自力で書けるのに時間のとこの入門君でもできるトコがわからないなんて変ですよ。
Basic関係で嘘を書いても、すぐにばれるんです。
試しにココにコードを書いてごらんなさい。
やぁ、みなさん、お初?
ではでは。

引用返信 編集キー/
■30664 / inTopicNo.7)  Re[2]: モグラたたきの時間のつけ方
□投稿者/ レオ♪ (1回)-(2008/12/31(Wed) 23:50:04)
No30663 (reo♪ さん) に返信
> ■No30657 (カズン さん) に返信
もし、本人が書いたんなら、乱数の9のトコがオーバー風呂してるから8に修正しときなよ。
タイマー1のセットIntarvalを500から1000にすれば?十分遊べるゲームになるよ。
まぁ、消されるかもなwww
引用返信 編集キー/
■30665 / inTopicNo.8)  Re[3]: モグラたたきの時間のつけ方
□投稿者/ 出水 (105回)-(2009/01/01(Thu) 11:52:35)
>ちゃっぴさん、ひどりさん
if (60000 < now - start) なら問題ありませんが
if (start + 60000 < now) は問題あります

オーバーフローしても前者ならいつも差が求まりますが、
後者はオーバーフローすると小さな値になってしまいいきなりifが判定されます
引用返信 編集キー/
■30667 / inTopicNo.9)  Re[4]: モグラたたきの時間のつけ方
□投稿者/ 渋木宏明(ひどり) (1013回)-(2009/01/01(Thu) 12:35:16)
渋木宏明(ひどり) さんの Web サイト
2009/01/01(Thu) 13:05:39 編集(投稿者)

> オーバーフローしても前者ならいつも差が求まりますが、
> 後者はオーバーフローすると小さな値になってしまいいきなりifが判定されます

「時刻と時間」を使用すれば問題ありません。

僕の投稿では「時刻と時間」を使用するよう、述べています。

.NET には DateTime, TimeSpan という、時刻と時間を扱う方が用意されているので、それを使う前提です。

具体的な型名については、自分で調べたり、分からなければ追加質問して欲しいと思って、あえて書きませんでした。


引用返信 編集キー/
■30669 / inTopicNo.10)  Re[4]: モグラたたきの時間のつけ方
□投稿者/ 渋木宏明(ひどり) (1014回)-(2009/01/01(Thu) 12:44:56)
渋木宏明(ひどり) さんの Web サイト
> オーバーフローしても前者ならいつも差が求まりますが、
> 後者はオーバーフローすると小さな値になってしまいいきなりifが判定されます

ちなみに、オーバーフローが問題になるような用途には、TickCount なんか使わない方がいいです。

TickCount が、およぼそ49日周期で折り返されるのはよく知られた事実で、「折り返し」直後に TickCount による経過時間の判定を行うと誤動作します。





引用返信 編集キー/
■30671 / inTopicNo.11)  Re[5]: モグラたたきの時間のつけ方
□投稿者/ ちゃっぴ (187回)-(2009/01/01(Thu) 13:52:44)
ちゃっぴ さんの Web サイト
> 後者はオーバーフローすると小さな値になってしまいいきなりifが判定されます

Managed なら例外発生しますよ。

> 「時刻と時間」を使用すれば問題ありません。

もっとも、今回の場合 1 分という制限がありますし、それを再利用する可能性もほぼ無いと思いますから、適切な coding を行っていればまず問題ないと思います。その制限を他の環境でも有効と勘違いしていなければね。

Windows の場合 TickCount の周期が短いがため、否が応でも意識せざるを得ない状況ですから結構みんな対策していたりするんですが。。。

Linux の kernel 2.4 なんかだと 497 日というびみょ〜な周期で、また組み込みとかで使われていたりするからたちがわりぃ〜。
引用返信 編集キー/
■30672 / inTopicNo.12)  Re[6]: モグラたたきの時間のつけ方
□投稿者/ 渋木宏明(ひどり) (1015回)-(2009/01/01(Thu) 14:20:05)
渋木宏明(ひどり) さんの Web サイト
> もっとも、今回の場合 1 分という制限がありますし、

制限時間の長さはあまり関係ないです。

たとえ制限時間が数秒であっても、「49日起動したシステム」で実行した場合、制限時間の長さに関係なく「タイミングがばっちりあう」ば発症します。

引用返信 編集キー/
■30673 / inTopicNo.13)  Re[6]: モグラたたきの時間のつけ方
□投稿者/ ちゃっぴ (188回)-(2009/01/01(Thu) 14:27:08)
ちゃっぴ さんの Web サイト
>>> 後者はオーバーフローすると小さな値になってしまいいきなりifが判定されます
>>
>> Managed なら例外発生しますよ。
>>
>> if (start + 60000 < now)

すみません。違ってますね。
特定の型に代入していないので、より多くの桁数を扱える型に昇格するので例外は発生しないですね。
ただし、round up された場合不等式が成り立ちませんね。

引用返信 編集キー/
■30674 / inTopicNo.14)  Re[7]: モグラたたきの時間のつけ方
□投稿者/ ちゃっぴ (189回)-(2009/01/01(Thu) 14:30:35)
ちゃっぴ さんの Web サイト
> たとえ制限時間が数秒であっても、「49日起動したシステム」で実行した場合、制限時間の長さに関係なく「タイミングがばっちりあう」ば発症します。

という意味で

>> 適切な coding を行っていればまず問題ないと思います。

と書いたつもりです。
もっとも、想定される期間で 2 回転することがあり得る状況なら、成り立ちませんが。。。
引用返信 編集キー/
■30679 / inTopicNo.15)  Re[8]: モグラたたきの時間のつけ方
□投稿者/ 【報告】 (2回)-(2009/01/01(Thu) 22:36:34)
投稿者のカズンさんは、別の掲示板にて
マナーの悪い行為(投稿したプログラムを消去)を行ないました。


しかるに、もうこの論議は不毛と思われます。

レオ♪さんが書かれているとおり、消去されてしまったプログラムを
かける能力が本当にあれば、モグラたたきの時間のつけ方は簡単なものです。

行動に不自然さが残ります。
引用返信 編集キー/
■30680 / inTopicNo.16)  Re[9]: モグラたたきの時間のつけ方
□投稿者/ ちゃっぴ (190回)-(2009/01/02(Fri) 00:05:07)
ちゃっぴ さんの Web サイト
2009/01/02(Fri) 00:30:45 編集(投稿者)
System.Environment.TickCount って uint じゃないんだ。。。サイテ〜!

Environment.TickCount プロパティ
http://msdn.microsoft.com/ja-jp/library/system.environment.tickcount.aspx

> プロパティ値
> 型 : System.Int32
> コンピュータが最後に起動してからの経過時間をミリ秒単位で保持している
> 32 ビット符号付き整数。 
> 
> このプロパティの値はシステム タイマから取得され、
> 32 ビット符号付き整数として格納されます。
> そのため、システムを終了せずに実行し続けた場合、TickCount はゼロから 
> Int32.MaxValue (約 24.9 日) までインクリメントされた後、
> いったん Int32.MinValue (負数) になり、再び、ゼロに戻ってから、
> 次の 24.9 日までインクリメントされます。

ということで、こういった coding が必要でしょう。

Boolean IsTimeouted(int now, int start, int term)
{
    Boolean timeouted = false;
    if (now < 0 && start >= 0)
    {
        if (term <= (now + int.MaxValue + 1 - start + int.MaxValue + 1))
        {
            timeouted = true;
        }
    }
    else
    {
        if (term <= (now - start))
        {
            timeouted = true;
        }
    }
    return timeouted;
}

引用返信 編集キー/
■30682 / inTopicNo.17)  Re[10]: モグラたたきの時間のつけ方
□投稿者/ 渋木宏明(ひどり) (1016回)-(2009/01/02(Fri) 04:55:23)
渋木宏明(ひどり) さんの Web サイト
2009/01/02(Fri) 04:59:30 編集(投稿者)

> ということで、こういった coding が必要でしょう。

term が 24.9d より長い時は?w

というのはさておき

> Int32.MaxValue (約 24.9 日) までインクリメントされた後、
> いったん Int32.MinValue (負数) になり、再び、ゼロに戻ってから、
> 次の 24.9 日までインクリメントされます。

の解釈ってゆらぎがあって微妙な気が。
引用返信 編集キー/
■30683 / inTopicNo.18)  Re[11]: モグラたたきの時間のつけ方
□投稿者/ ちゃっぴ (191回)-(2009/01/02(Fri) 05:25:42)
ちゃっぴ さんの Web サイト
試しに code 書いてみましたが、ぶっちゃけ使う気がしませんwwwSystem.Environment.TickCount

ただ、似たような処理を書かないといけないときもありそうなので、ここまでやらんといけないんだよってのを示すために書きました。

ぶっちゃけ本題は残り時刻表示を考慮しないのであれば、60 秒の Timer 仕掛けて終わりでもいいと思いますしね。

>> Int32.MaxValue (約 24.9 日) までインクリメントされた後、
>> いったん Int32.MinValue (負数) になり、再び、ゼロに戻ってから、
>> 次の 24.9 日までインクリメントされます。
>
> の解釈ってゆらぎがあって微妙な気が。

なんか問題ありました?日本語の問題?
引用返信 編集キー/
■30684 / inTopicNo.19)  Re[12]: モグラたたきの時間のつけ方
□投稿者/ 渋木宏明(ひどり) (1017回)-(2009/01/02(Fri) 05:55:05)
渋木宏明(ひどり) さんの Web サイト
> >> Int32.MaxValue (約 24.9 日) までインクリメントされた後、
> >> いったん Int32.MinValue (負数) になり、再び、ゼロに戻ってから、
> >> 次の 24.9 日までインクリメントされます。
> >
>>の解釈ってゆらぎがあって微妙な気が。
>
> なんか問題ありました?日本語の問題?

原文の配慮不足なのかもしれないけど。

「いったん負数になり、再び、ゼロに戻ってから」のという記述に、「負数の期間はどれくらい?」という疑問を抱き(抱け)ます。

実際には符号なしで負数の最小値から負数の最大値(=−1)までカウントされてるんだろうけど、そういうバックグラウンドを知らないと「?」てなるような。
引用返信 編集キー/
■30687 / inTopicNo.20)  Re[13]: モグラたたきの時間のつけ方
 
□投稿者/ ちゃっぴ (192回)-(2009/01/02(Fri) 23:54:42)
ちゃっぴ さんの Web サイト
No30684 (渋木宏明(ひどり) さん) に返信
> 「いったん負数になり、再び、ゼロに戻ってから」のという記述に、「負数の期間はどれくらい?」という疑問を抱き(抱け)ます。
>
> 実際には符号なしで負数の最小値から負数の最大値(=−1)までカウントされてるんだろうけど、そういうバックグラウンドを知らないと「?」てなるような。

まあ、どこまで丁寧に説明するかという問題もあるような気がします。
情報処理の基礎 (初級シスアドとかでも必須) をやった人間には、2 の補数つかってやっているから当たり前のことですが、全くやっていない人にとってはわかりにくい表現かもしれないですね。
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -