Posts Issued on September 15, 2025

GameFSMの改良 (2)

posted by sakurai on September 15, 2025 #1022

まずString配列があまり美しくなかったので改良します。

以下にオリジナルのソースの部分を示します。本来はCと同様にstructの配列を構成したかったのですが、初期値の設定がうまくいかなかったので、しかたなく要素を分解し、以下のようにsx, sy, dx, dy, w, hの6要素のそれぞれの配列としました。sxはソースのx座標、syはソースのu座標、dxはデストのx座標、dyはデストのu座標、wは幅、hは高さを示します。

初期化部分:

 //                     P   L   A   ^   S   P   A   C   E  --  --   I   N   V   A   D   E   R   S
   UInt#(8) s1sx[19] = { 42, 50, 58, 77, 66, 42, 58, 74, 82, 42, 42, 90, 98,106, 58,114, 82,122, 66},
            s1sy[19] = {137,137,137,126,137,137,137,137,137,129,129,137,137,137,137,137,137,137,137},
            s1dx[19] = {112,120,128,136, 72, 80, 88, 96,104,112,120,128,136,144,152,160,168,176,184},
        s1dy[19] = { 68, 68, 68, 68, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93},
        s1w[19]  = {  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5},
        s1h[19]  = {  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7};

描画部分:

  function Stmt stringS1; // PLAY SPACE INVADERS
      return (seq
         for (str_idx <= 0; str_idx < 19; str_idx <=  str_idx + 1) seq
            copyArea(s1sx[str_idx], s1sy[str_idx], s1dx[str_idx], s1dy[str_idx], s1w[str_idx], s1h[str_idx]);
            wait_timer(`TICK_WAIT8);
            if (fbutton) break;
         endseq // for
      endseq);
   endfunction

これをChatGPTの助けを借りながら初期値付きの2次元配列にしようと思います。


左矢前のブログ 次のブログ右矢