hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
小ワザ/マップ移動/四角戦隊スクエンジャー - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

四角戦隊スクエンジャー

データ構造

イメージ図

仲間が後ろから着いてくる処理を実現するために、レッドの足跡だけを記録し、仲間はこれを一歩づつ追いかけることで実現しました。
もうちょっと格好のいいイメージ図を書きたかったのですが、いろいろ大変でここまで。

フルカラー版

我ながら力作。--kz3

パレットモード版

  • 下のパレットモード版の移動で1ドットだったものをキャラサイズ分に変更したものがこちらになります。--kz3
  • 覚えたてのpal系命令で色指定がスッキリしました。--kz3

パレットモードHSP3版

  • 四角戦隊(略)の中核をなすデータ構造のイメージ図をかいたのでHSP3用に書き直してみました。
    またソースも以前より読みやすくなっていると思います。(コメントがあるからではない。)
    以前のはリングバッファを左回りに回っていたのでなんとなく素直に読めなかったと思います。
    その点も含めてソースのシェイプアップをしました。HSP3になって便利な書き方ができた、だけではない部分も読んでいただきたいと思います。m_ _m
    filesquare5[sp].hsp
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    -
    |
    !
    -
    |
    !
    -
    |
    !
    -
    |
    !
     
     
    -
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    !
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    
    /*
    ################################################################################
    #                                                                              #
    #                   四角戦隊スクエンジャー ver.HSP3                   #
    #                                                                              #
    ################################################################################
    */
        ; スクエンジャーの編成と各隊員の呼称
        #define MEMBER      5                   ; 隊員の数
        #define SQSIZE      10                  ; 一隊員の体の大きさ
     
        #define SQRED       0                   ; スクエレッド
        #define SQGREEN     1                   ; スクエグリン
        #define SQYELLOW    2                   ; スクエイエロ
        #define SQPINK      3                   ; スクエピンク
        #define SQBLUE      4                   ; スクエブルー
        #define SQWHITE     5                   ; スクエワイト(謎の戦士)
     
        ; ウィンドウとパレットの初期化
        screen 0,300,300,1
     
        palette SQRED    , 255 ,   0 ,   0
        palette SQGREEN  ,   0 , 128 ,   0
        palette SQYELLOW , 255 , 192 ,   0
        palette SQPINK   , 254 ,  92 , 245
        palette SQBLUE   ,   0 ,   0 , 255
        palette SQWHITE  , 255 , 255 , 255 , 1
     
        ; 中枢データ構造はリングバッファ
        dim rngStep , MEMBER * SQSIZE           ; 足跡管理変数  
        rngPos = 0 , 40 , 30 , 20 , 10          ; 各隊員の初期位置
     
        gosub *drawSquare
     
        /**********************************************************************
         *                     メ イ ン ル ー チ ン                     *
         **********************************************************************/
        repeat
            await 1
            stick key , 0b1001111 , 1
            if key & 0b1001111 = 0 : continue   ; 有効なキー以外は何もしない
     
            ; 現在のスクエレッドの位置を取得する
            now     = rngStep(rngPos(SQRED))
            sqLeft  = now & $FFFF
            sqTop   = now >> 16 & $FFFF
     
            ; キー処理
            if key & 64 : speed=2 : else : speed=1
            if key & 1{
                if sqLeft-speed < 0 : sqLeft = 0 : else : sqLeft -= speed
            }
            if key & 2{
                if sqTop-speed < 0 : sqTop = 0 : else : sqTop -= speed
            }
            if key & 4{
                if sqLeft+SQSIZE+speed>ginfo(12):sqLeft=ginfo(12)-SQSIZE:else:sqLeft+=speed
            }
            if key & 8{
                if sqTop+SQSIZE+speed>ginfo(13):sqTop=ginfo(13)-SQSIZE:else:sqTop+=speed
            }
            after = sqTop << 16 | sqLeft
     
            if now ! after{
                redraw 0
     
                ; 現在のスクエンジャーを消去する
                gosub *eraseSquare
     
                ; 各隊員、自分の前の隊員の後を追う
                repeat MEMBER
                    rngPos(cnt) = (rngPos(cnt)+1)\(MEMBER*SQSIZE)
                loop
     
                ; スクエレッドの足跡を残す
                rngStep(rngPos(SQRED)) = after
     
                gosub *drawSquare
                redraw 1
            }
        loop
    stop
     
    /*----------------------------------------------------------------------------*
     *                         隊 員 を 描 画 す る                         *
     *----------------------------------------------------------------------------*/
    *drawSquare
        repeat MEMBER , 1
            ; 最後尾隊員から描画する
            palcolor MEMBER-cnt
     
            sqLeft  = rngStep(rngPos(MEMBER-cnt)) & $FFFF           ; 左上のx座標
            sqTop   = rngStep(rngPos(MEMBER-cnt)) >> 16 & $FFFF     ; 左上のy座標
     
            boxf sqLeft , sqTop , sqLeft + SQSIZE , sqTop + SQSIZE
        loop
     
        return
    /*----------------------------------------------------------------------------*
     *                         隊 員 を 消 去 す る                         *
     *----------------------------------------------------------------------------*/
    *eraseSquare
        palcolor SQWHITE
        repeat MEMBER
            sqLeft  = rngStep(rngPos(cnt)) & $FFFF                  ; 左上のx座標
            sqTop   = rngStep(rngPos(cnt)) >> 16 & $FFFF            ; 左上のy座標
     
            boxf sqLeft , sqTop , sqLeft + SQSIZE , sqTop + SQSIZE
        loop
     
        return

コメント

  • 余計なコメント(独り言)を削除して最終版をUPです。。。拡張マクロを使用しています。 -- kz3 2005-06-25 14:59:02 (土)
  • データ構造ですがqueueとか書いてますがqueueでは無いです。 -- kz3 2005-06-26 09:56:39 (日)
  • 誰かコメントしてください〜〜;; -- kz3 2005-06-26 12:50:21 (日)
  • ほぼ2人ですよねwいつも(ハハッハハハ・・・・orz -- Charlotte 2005-06-26 12:58:07 (日)
  • みんなが利用するようになればそれがまた人を集めますって、そう信じる事が大事;;あれこれソースについて話し合う場としては最適だと僕は思いますよb -- kz3 2005-06-26 13:04:54 (日)
  • 扱う話題が2Dというのが弱点?爆 -- kz3 2005-06-26 13:06:11 (日)
  • 個人的には、コメントするだけの能力がないのとkz3さんのペースが速くて(それはそれでいいのだけれど)おっつけないのが主な理由。<コメントできない -- GENKI? 2005-09-09 00:07:15 (金)
  • ん、上のコメントください〜〜は昔のものですよ^^;なんか急かしているようでごめんなさい;; -- kz3 2005-09-09 00:37:36 (金)

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル:
filesquare5cmt_pal[1].as
405件 [詳細]
filesquare5cmt_pal.as
120件 [詳細]
filesquare5cmt.as
574件 [詳細]
filesquare5[sp].hsp
490件 [詳細]
fileimgRingBuf.png
557件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:48:00 (2436d)