トップページgamedev
990コメント416KB

ズブの初心者がゲーム作れるまで勉強するスレ

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。01/11/07 20:26ID:PFtlmWD9
【参加資格】
ズブの初心者以外お断りです。

なおアドバイス等はプロのかたでも結構です。
初心者は聞く耳を持ちプロもわかりやすく教えてやってください。
0838名前は開発中のものです。2006/03/16(木) 22:02:29ID:gXQpHvOV
//タスク初期化
    gosub *init_task
    
    screen 0,640,480
    screen 1,640,480,2

    repeat
    gsel 1,-1
    cls 4
    await 1
    color 255,255,255

    gosub *task_factory0
    
    //タスクシステム実行
    gosub *run_task

    //デバッグ情報
    mes "---sp---"
    mes sp
    mes "---np---"
    mes np
    mes "---TaskList---"
    gosub *show_task_busy
//    gosub *show_task_null
//    gosub *show_task_all

    //裏画面を表にコピー
    gsel 0,1
    gcopy 1,0,0,640,480
    loop
stop
0839名前は開発中のものです。2006/03/16(木) 22:03:02ID:gXQpHvOV
//タスクのサブルーチン
*sub0
    tl.it.2=tl.it.2+cos(tl.it.4/100)*10
    tl.it.3=tl.it.3+sin(tl.it.5/100)*10
    pset tl.it.2, tl.it.3

    if (tl.it.2 < 0) or (tl.it.2 > 640) or (tl.it.3 < 0) or (tl.it.3 > 480) {
    tl.it.6=1
    }
return

*sub1
return

*sub2
return

*sub3
return

*sub4
return
0840名前は開発中のものです。2006/03/16(木) 22:03:32ID:gXQpHvOV
//タスクリスト初期化
*init_task
    Dim tl,100,10 //タスクリスト 2番目の添え字の0は次のタスクへのポインタ、1は呼び出すサブルーチン、2以降はキャラデータ
    //2,3座標 4,5加速度 6死亡フラグ
    sp=0 //使用中タスク先頭
    np=1 //空きタスク先頭 0なら残りなし
    
    repeat 100
    tl.cnt.0=cnt+1
    loop
    tl.0.0=0
    tl.99.0=0

    //この初期化でリストは次のように繋がる
    //sp -> 0
    //np -> 1 -> 2 -> 3 -> ... -> 0
return
0841名前は開発中のものです。2006/03/16(木) 22:36:03ID:gXQpHvOV
//タスク挿入
*add_task
    //空きタスクが無ければ何もしない
    if np=0 : return
    
    //空きタスクから一つ取り出す
    tmp=np
    np=tl.np.0

    //新しいタスク(=取りだしたタスク)がどのサブルーチンを呼ぶか設定
    tl.tmp.1=add_task_sub

    //新しいタスクにゲームデータを代入
    tl.tmp.2=add_task_2
    tl.tmp.3=add_task_3
    tl.tmp.4=add_task_4
    tl.tmp.5=add_task_5
    tl.tmp.6=add_task_6

    //取り出したタスクに利用中タスクの先頭ポインタを渡す
    tl.tmp.0=sp

    //先頭ポインタを新しく追加したタスクにする
    sp=tmp
return
0842名前は開発中のものです。2006/03/16(木) 22:36:34ID:gXQpHvOV
//タスク削除
*del_task
    //SP直後の要素を書き換える場合はSPを書き換える必要があるので
    //特別な処理をする

    if del_task_index=0 {
    //空タスクに移動
    tmp=tl.sp.0
    tl.sp.0=np
    np=sp

    //切れたタスクリストを繋ぐ
    sp=tmp
    return
    }

    it=sp
    repeat del_task_index-1
    it=tl.it.0
    loop

    //削除するタスクを待避
    tmp=tl.it.0

    //待避した穴を埋める
    tl.it.0=tl.tmp.0

    //待避したタスクを空リストに入れる
    tl.tmp.0=np
    np=tmp
return
0843名前は開発中のものです。2006/03/16(木) 22:37:07ID:gXQpHvOV
//タスクリストの状態表示 全体(Debug用) 最後まで表示されないorz
*show_task_all
    repeat 100
    mes tl.cnt.0
    loop
return

//タスクリストの状態表示 使用中タスク(Debug用)
*show_task_busy
    its=sp
    while its ! 0
    mes tl.its.0
    its=tl.its.0
    wend
return

//タスクリストの状態表示 空きタスク(Debug用)
*show_task_null
    its=np
    while its ! 0
    mes tl.its.0
    its=tl.its.0
    wend
return
0844名前は開発中のものです。2006/03/16(木) 22:37:39ID:gXQpHvOV
//タスクシステム実行
*run_task
    it=sp
    while it ! 0
    switch tl.it.1
    case 0
        gosub *sub0
        swbreak
    case 1
        gosub *sub1
        swbreak
    case 2
        gosub *sub2
        swbreak
    case 3
        gosub *sub3
        swbreak
    case 4
        gosub *sub4
        swbreak
    swend
    it=tl.it.0
    wend

    gosub *check_kill
return

*check_kill
    
return

0845名前は開発中のものです。2006/03/16(木) 22:38:22ID:gXQpHvOV
*task_factory0
    add_task_sub=0
    add_task_2=320
    add_task_3=240
    add_task_4=rnd(628)
    add_task_5=rnd(628)
    add_task_6=0

    gosub *add_task
return

*task_factory1
    add_task_sub=1
    gosub *add_task
return

*task_factory2
    add_task_sub=2
    gosub *add_task
return

*task_factory3
    add_task_sub=3
    gosub *add_task
return

*task_factory4
    add_task_sub=4
    gosub *add_task
return
■ このスレッドは過去ログ倉庫に格納されています