「ゲーム共通処理」の編集履歴(バックアップ)一覧に戻る

ゲーム共通処理 - (2012/03/06 (火) 09:17:59) のソース

#contents()

*kyotsu.hの作成
メモ帳に以下の内容を書き、kyotsu.hという名前でcc65/includeに保存します。
#highlight(c){{{
/////////////////////////////////////////////////////////////////////////////////
// 2010.11.30 ver 0.02
// 煮るなり焼くなりお好きにどうぞ。
// -----------------------------------------------------------------------------
// cc65@wiki
// http://www34.atwiki.jp/cc65/
/////////////////////////////////////////////////////////////////////////////////
//アタリ判定(長方形)
char HitBox(unsigned char ax1,unsigned char ay1,unsigned char ax2,unsigned char ay2,
            unsigned char bx1,unsigned char by1,unsigned char bx2,unsigned char by2)
{
   if (ax1 < bx2 && bx1 < ax2 && ay1 < by2 && by1 < ay2) {
        return 1;
    } else {
        return 0;
    }
}

//アタリ判定(円形)
char HitCircle(unsigned char ax,unsigned char ay,unsigned char adiameter,
               unsigned char bx,unsigned char by,unsigned char bdiameter)
{
    unsigned char w,x,y,z;

    x = ax + adiameter / 2;
    w = bx + bdiameter / 2;
    if (x > w) {
        x -= w;
    } else {
        x  = w - x;
    }

    y = ay + adiameter / 2;
    w = by + bdiameter / 2;
    if (y > w) {
        y -= w;
    } else {
        y  = w - y;
    }

    z = (adiameter + bdiameter) / 2;

    if (x * x + y * y < z * z) {
        return 1;
    } else {
        return 0;
    }
}

//配列比較
char memcmp(char *a, char *b,char len)
{
    unsigned char i;
    for (i = 0; i < len; i++)
    {
        if (*(a + i) != *(b + i)) {
            return 0;
        }
    }
    return 1;
}

//配列複写
void memcpy(char *a, char *b,char len)
{
    unsigned char i;
    for (i = 0; i < len; i++)
    {
        *(a + i) = *(b + i);
    }
}

//配列複写(開始アドレス指定)
void memcpyfr(char *a, int afr, char *b, int bfr, char len)
{
    unsigned char i;
    for (i = 0; i < len; i++)
    {
        *(a + afr + i) = *(b + bfr + i);
    }
}

//待機処理
void Wait(int cnt)
{
    unsigned int i;
    for (i = 0; i < cnt; i++) {}
}
}}}

*kyotsu.hの解説
-HitBox:アタリ判定(長方形) 1=衝突 0=なし
--ax1,ay1:キャラ1の左上座標
--ax2,ay2:キャラ1の右下座標
--bx1,by1:キャラ2の左上座標
--bx2,by2:キャラ2の右下座標
-HitBox:アタリ判定(円形)   1=衝突 0=なし
--ax,ay:キャラ1の左上座標
--adiameter:キャラ1の直径
--bx,by:キャラ2の左上座標
--bdiameter:キャラ2の直径
-memcmp:配列比較 1=一致 0=不一致
--*a,*b:比較する配列のポインタ
--len:比較するバイト数
-memcpy:配列複写
--*a,*b:複写する配列のポインタ
--len:複写するバイト数
-memcpyfr:配列複写(開始アドレス指定)
--*a,*b:複写する配列のポインタ
--afr,bfr:複写する配列の開始アドレス
--len:複写するバイト数
-Wait:待機処理
--cnt:待機する数