• ベストアンサー

スロットゲームのプログラミング

お世話になります。 先日からスロットゲームに関して、質問しているものなのですが、リールが止まる時のタイミングについて質問です。 ボタンをクリックすると、回転し自然に止まるスロットなのですが、絵柄を用意してパラパラ漫画の要領で回転を再現してます。 各リール用にタイマーを設置して、1リール目が止まると、2リールのインターバルを0にして、止める構造に してあるのですが、1~3リールとも同じタイミングで止まってしまいます。 タイマーウェイト処理も停止絵柄の前で止まり、ウェイト後にカックンと止まる始末。 自然にポン、ポン、ポンと止まるように処理するには どうしたら用意でしょうか。 またご指導のほどよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Caryo_t
  • ベストアンサー率45% (112/246)
回答No.3

VB6のタイマーは,はっきり言って使えません。 と言うのは,タイマーイベントはWindows上で動くので, どうしても他のアプリケーションやタスクの影響を受けるからです。 それでは,どうやって正確な時間を測るかですが, これにはWindowsAPIのTimeGetTimeを使います。 使い方は,検索エンジンでTimeGetTimeって引けば出てきます。 簡単に紹介すると,TimeGetTimeはシステムが起動してからの 時間を測るためのものです。これを使うには,まず Private Declare Function timeGetTime Lib "winmm.dll" () As Long を一番上の欄外でグローバル変数として宣言する必要があります。 つぎに,たとえばある一定の時間待つようなSubルーチンを作るなら, Private Sub Wait(WaitTime As Long) Dim TimeStart As Long StartTime = timeGetTime Do DoEvents Loop While (timeGetTime - StartTime < WaitTime) End Sub のようにします。 これを応用して,リールの止まる際にランダムでウェイト時間を 足して行けば,ゆっくり回転するようになります。 もちろん,ランダムで数字を加えますので, 同時に止まることはありません。 解りにくい場合は,また補足します。

mado2000
質問者

お礼

とりあえずランダムで出した係数に、読み込み枚数を何枚か足して、タイムラグをつける方法になりました。 またよろしくお願いします。

mado2000
質問者

補足

ご指導ありがとうございます。 早速新しいプロシージャをつくりSubルーチンをコピペさせていただき、(General)に宣言部分を記述しました。 そして停止タイマー部に Image2(old2).Visible = False Image2(idx2).Visible = True old2 = idx2 If Timer1.Interval = 0 Then waittime = 2         ここを追加し If idx2 = 0 Then Timer2.Interval = 0 ElseIf idx2 = 3 Then Timer2.Interval = 0 ElseIf idx2 = 6 Then Timer2.Interval = 0 以下略 追加部分の数字を変えてみたりしたのですが、思う様に動いていません。記述の仕方がおかしいのでしょうか、それともAPIの使い方やソースの書き方などが根本的に間違ってますか。 ちなみにidx2は絵柄を書き換えてるときに使ってる変数です。

その他の回答 (2)

回答No.2

基本的に、TimerコントロールはPCのスペックにより 何故か速さが異なります(早くまわそうとすればするほど)。 確認済みかもしれませんが・・・。 だからどうすれば良いか、という事まではちょっと思いつきません・・・。 WindowsAPIのSleep()でもそれだけではどうにも出来ませんし・・・。 60でまわし、止まるにつれて回転は遅くなるはずです。 実機でも。 ピタッとは止まらないでしょう。 そういうスロットは見た事ありませんが・・・^^; 止まる時は60から、インターバルを徐々に上げる事により 速度低下を図る方法ではダメですか? 終了インターバルが1000でダメなら800、600などではどうでしょうか?

mado2000
質問者

お礼

ご指導ありがとうございます。 先ほど検証しましたが、600でも上司の顔色が変わりません。 トホホ・・・・

回答No.1

インターバルが1000になるまで100ずつ加算し、 1000になったら0にする、とかでゆっくり止まり、 別々に止まるのでは? 現在、Timer1のインターバルが0になった途端に Timer2のインターバルが0になり、 その途端にTimer3のインターバルが0になっているので、 同時に止まってしまうのではないでしょうか。 勘で言っているので、見当違いでしたら失礼。

mado2000
質問者

お礼

ご指導ありがとうございます。 全くおしゃっていただいてる通りなのですが、会社で作成しておりまして、インターバルが100で回転していても「遅い。実機の動きに近づけろ」との上司命令でして、現状60でまわしています。その状態から「ポンポンポンだ」と言われてまして、胃が痛い毎日です。 すいません、お礼が愚痴になってしまいました。