サルでもできた!?スロゲー開発 part7

このエントリーをはてなブックマークに追加
1( ´∀`)ノ7777さん
スロゲーを作りたくてたまらないヒヨッコ共が
四苦八苦して成長していくスレです。
生暖かく見守ってやってください。

合言葉は「元気があれば、何でもできる。」

前スレ
サルでもできた?スロゲー開発6
http://money3.2ch.net/test/read.cgi/slot/1101485742/

サルスレ用保管庫(仮)
http://rerebo.hp.infoseek.co.jp/
2( ´∀`)ノ7777さん:05/02/16 22:31:15 ID:RNp7Dc0T
         ∧_∧   ┌────────────
       ◯( ´∀` )◯ < 僕は、神山満月ちゃん!
        \    /  └────────────
       _/ __ \_
      (_/   \_)
           lll
3( ´∀`)ノ7777さん:05/02/16 22:31:37 ID:9c5ViByY
1.まずは下記のアドレスでHSPという開発ツールをゲットだ
   http://www.onionsoft.net/hsp/
2.「プログラミングなんてやったことないよ!」って人は、HSPのページから
  リンクしてある解説サイト等で基礎をチラっと勉強すると吉
  (「正宗」作者の32氏はここで勉強したらしいぞ→ ttp://sapporo.cool.ne.jp/daturyoku/
3.このスレと過去スレを参考にして、プログラムを書いてみよう
  分からないことがあったら、先輩たちにドンドン質問しる
  【過去スレ】
  >>3
4.作ったものを見てもらいたい時は、下記アドレスにアップロードするべし
  プログラムに対してアドバイスが欲しい時は、コンパイル前のソース( .as形式)も
  同梱することを忘れずに。
   http://yam-jp.com/~nanashi/devslot.php

関連サイト等はこちら 
byぱちへる氏
http://pachihell.at.infoseek.co.jp/suroge/index.html
サル部屋
http://www.deepgreen.jp/~saru/
開発ツール
http://f20.aaacafe.ne.jp/~slosim/slogee/menu.html
HSPでスロゲー作成講座
http://s3587.hp.infoseek.co.jp/hsp/index.html
4( ´∀`)ノ7777さん:05/02/17 03:10:19 ID:K7VyS5UQ
  _   ∩
( ゚д゚)彡 オッパイ!ポッパイ!ホッパー満パイ!
 ⊂彡
5101 ◆IntTEmehas :05/02/17 06:08:05 ID:UEQJRU1w
>>1
乙。
>>3のうpろだのリンクは古いです。
立て続けにスレが落ちているので、これ以上落ちると存在価値が無くなるのであげますね。
で、ちょっとネタ振りついでに質問です。

1.メインルーチンを1つの流れの中に置きたいのですが、どんなコーディングが最適ですかね?
抽象的で申し訳ないですが、現在の拙作では、サブルーチンが独立しており、
例えば、リールフラッシュのサブルーチンへ行ったらフラッシュが終わるまで他の処理が停止しています。
これを全て同時に行う(行っているように見える)には、全体的なタイマーが必要になると思うのですが、具体的な案がありません。
285氏のオープンソースにヒントがありそうですが理解できない状況です。

2.ドットグラフィックを作るにあたって、おすすめのフリーのツールはありますか?
6( ´∀`)ノ7777さん:05/02/17 08:29:10 ID:IZs9fhbF
>>5
例えばY社WINフラッシュみたいなものでしたら
en_WinFlash.0=1,0,0,0,0,0,0,0,0
en_WinFlash.10=2,0,0,1,0,0,0,0,0
en_WinFlash.20=0,0,0,2,0,0,1,0,0
en_WinFlash.30=0,0,0,0,1,0,2,0,0
en_WinFlash.40=0,0,0,0,2,0,0,0,1
en_WinFlash.50=0,0,0,0,0,1,0,0,2
en_WinFlash.60=0,0,1,0,0,2,0,0,0
en_WinFlash.70=0,0,2,0,0,0,0,0,0
en_WinFlash.80=0,0,0,0,0,0,0,0,0
中略
en_WinFlash.230=-1
みたいなデータを作り、現在のコマ×10で得られるデータを参照してフラッシュするルーチンを作り、
メインループから呼ぶとか、そんなんでは駄目でしょうか?
7101 ◆IntTEmehas :05/02/17 11:07:19 ID:UEQJRU1w
>>6
レスありがとうございます。
まさにそんな感じなんですが、質問の仕方が悪かったです。
例えば、リール停止時に『全消灯→全点灯→全消灯→全点灯』とフラッシュするとします。
今のままでは、リール停止→フラッシュ→払い出し、のように、それぞれのルーチンが終わってから次の処理を行うようになっています。
それを、フラッシュと払い出しを同時に行うようにしたいのです。
その時に、『全消灯→全点灯』の間隔や、払い出しの間隔もそれぞれ指定したいです。
フリゲで有名な各作品は、液晶描画とリール描画と同時に進行しているので、当然の技術なんだと思いますが…。

とりあえず、dsoundexのtimerを複数使って、それぞれの間隔を監視する変数に入れようと思うのですが、
コーディングのイメージが出来てないこともあって、すごく複雑になりそうです。
擬似プログラム的なフローチャートなどを提示していただけるとありがたいです。
8( ´∀`)ノ7777さん:05/02/17 11:23:10 ID:IZs9fhbF
>>7
例えば0.1秒ごとにフラッシュするとする場合、前回からの経過時間をdtとします。
timerって0.001秒単位でしたっけ?その経過時間の累積が100を超えた時(つまり0.1秒)に
フラッシュの状態を反転するルーチンを作り、払い出し中にもそれを呼び出す。
みたいにして各処理を呼び出すみたいな・・・
とかでは駄目?

動作が安定しているのでしたら各処理を何ループ毎に呼び出すとかでも良いのかもしれませんが、
現状のPCでは動作クロックが千差万別ですのでこれは使えないでしょうね。
昔やコンシューマーはこれでも平気でした。処理落ちしなければ(笑
9101 ◆IntTEmehas :05/02/17 12:53:43 ID:UEQJRU1w
>>8
前者の方法でちょっとやってみます。

メイン開始

フラッシュルーチンに行く前にtimer呼び出し→フラッシュのルーチンでもtimer呼び出してルーチン突入前と比較

払い出しのルーチンに行く前にtimer呼び出し→払い出しのルーチンでもtimer呼び出してルーチン突入前と比較

はじめに戻る

こんな感じでいいんですかね?
サブルーチンに行く前のtimerは1回でいいかもしれませんね。
心配は、どっかで余計な時間が掛かった時、その誤差が悪いように影響しなければいいんですが。
また、timerの正確性については異論があるようなのですが、とりあえずこんな感じの構成でやってみます。
10( ´∀`)ノ7777さん:05/02/17 13:03:48 ID:IZs9fhbF
>>9
timerの値は一度で良いですよ。んで、各処理別のタイマに加算。
目的地を超えたら0を代入ではなくその目標値(上の例だと100)をマイナスしておくと、細かい誤差もいずれ修正されます。
とりあえずがんばってみて下さい。
では〜
11( ´∀`)ノ285:05/02/17 23:10:08 ID:FzhZQhCE
        if ????_cnt_buf!(counter/C_????SPEED) {
                ????_cnt_buf = counter / C_????SPEED
                ????_cnt++

                ※※ タイマー基準一定間隔で処理する処理 ※※

        }

おひさです&新スレ乙&ネタに乗っかって保守ageです。
おいらは液晶もフラッシュもタイマー使ってる部分は上の様な感じでやってます。
????の部分は処理毎にユニークな名前で
????_cnt_buf・・・・・前回処理した時のタイマーの値を保持する変数
C_????SPEED・・・・処理スピード(定数)コレの値の間隔で処理される
counter・・・・・・・・・タイマーの値を保持する変数(タイマー呼び出しはメインループで1回)
????_cnt・・・・・・・・・処理の基準になるカウンター
if 内で ????_cnt++ してるので一定間隔で1づつ増える様になります。で、コレを利用して
※※ タイマー基準一定間隔で処理する処理 ※※にて????_cntの値を元にアニメーションや
コイン払い出し、フラッシュのアニメーション処理をしてます。
12( ´∀`)ノ285:05/02/17 23:32:14 ID:FzhZQhCE
複数の処理を同時に処理する場合
*MAIN
        timer : counter = stat\1500
        if 処理1_cnt_buf!(counter/C_処理1SPEED) {
                処理1_cnt_buf = counter / C_処理1SPEED
                処理1_cnt++
                ※※ 処理1 ※※
        }
        if 処理2_cnt_buf!(counter/C_処理2SPEED) {
                処理2_cnt_buf = counter / C_処理2SPEED
                処理2_cnt++
                ※※ 処理2 ※※
        }
        if 処理3_cnt_buf!(counter/C_処理3SPEED) {
                処理3_cnt_buf = counter / C_処理3SPEED
                処理3_cnt++
        }
        ※※ 処理3 ※※
goto *MAIN
こんなイメージです。コレで各C_処理?SPEED間隔で各処理が実行されます。
フラッシュなど毎フレーム描画しないと上書きされて表示がおかしくなる部分は処理3の様に
処理?_cntのカウントだけ if 内でやって描画処理自体は外に出して毎フレーム行えばOKです。
コレだとゲーム状態に関係なく毎フレーム処理されてしまうので払い出し等のゲーム状態の影響を
受ける部分は実際には状態変数で括っています。
13101 ◆IntTEmehas :05/02/18 11:28:39 ID:nZMjAdLW
>>10
もしかして親○氏でしたかね?
ありがとうございます。

>>11
おひさです。
非常にわかりやすかったです。
で、あとは※※処理※※の部分なんですが、
????_cntをうまく使わないと不細工なコードになってしまいそうですね。
_gameprocess_5.asが同じような構造になっているようなので参考にさせてもらいます。
14( ´∀`)ノ7777さん
ちなみに私の説明版はこんな感じでしょうか。ざっと作成してみました
変数説明は省略ということで・・・

timer : counter = stat

timer_cnt1_buf += counter
if (timer_cnt1_buf>=SPEED1){
  timer_cnt1_buf-=SPEED1
  timer_cnt1++
  gosub *syori_1
}

>>13
では〜(笑