a23_useSelfMade #7

2023.03.19 Sun #1


2023.03.20 Mon #1


2023.03.22 Wed #1


2023.03.22 Wed #2


2023.03.23 Thu #1


2023.03.23 Thu #2

int getMonthDays(int y, int m)
{
    static int days[12] = {
        31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
    };
    if (m == 2 && y % 4 == 0) return 29; // 手抜きの閏年判定.
    return days[m - 1];
}

#define fixDate(y, m, d)    ACA_fixDate(aCA, y, m, d)
void ACA_fixDate(AComArg *aCA, int y, int m, int d)
{
    while (d > getMonthDays(y, m)) {
        d -= getMonthDays(y, m); m++;
        if (m > 12) { m -= 12; y++; }
    }
    aCA->com->retValInt[0] = y;
    aCA->com->retValInt[1] = m;
    aCA->com->retValInt[2] = d;
}
HL9>!int y, d; AXFnc_i3(y, m, d, =, fixDate(2023,1,100)); printf("%d/%d/%d", y, m, d)
2023/4/10


2023.03.24 Fri #1

[開発環境としてみたときのeasy-Cの特徴]小計+3.9点
#00 ワンライナーができる。+1.0点
#01 別ファイルに関数を書いておくと、それを組み込み関数のように使える。+0.9点(参考: 2023.03.22 Wed #1)現状ではインタプリタモードで使えないのでその分を減点。
#02 プロンプトで$や$$を使えばシェルコマンドが実行できる。+1.0点
#03 gcc実行モードのほかにインタープリタ実行モードがある。+1.0点
[言語拡張としてみたときのeasy-Cの特徴]小計+2.2点
#04 prなどの便利命令が使える。+1.0点
#05 簡易ループ演算子が使える。+0.9点現状の実装はまだちょっと手抜きがある。
#06 AXFncを使うと、関数の返値を複数で受け取れる。+0.3点インタプリタモードでも使えるようになれば+0.4にしてもいい。構文がもっとすっきりしたら+0.5にしてもいい。
[プログラミング入門としてみたときのeasy-Cの特徴]小計+4.5点
#07 入門に最適なPLAY命令がある。+1.0点
#08 入門者が使いそうな命令については、大文字でも入力できる。PRやPLAYやIFなど。+1.0点
#09 「NEW ファイル名」「$$ファイル名」によって、ファイルエクスプローラ無しで操作できる。+1.0点すごく簡単な機能なのに効果は大きい。
#10 I~N(i~n)については、変数がintで宣言済みなので、宣言せずに使える。+0.5点
#11 グラフィック描画ライブラリが使える(簡単なゲームが作れるように)。+1.0点
[言語拡張としてみたときのeasy-Cの特徴]小計+2.1点(上の#04~#06と合わせると、合計+4.3点になる)
#12 インタプリタモードの時だけ、演算子の優先順位を変更できる。+0.3点(gccモードでもできるようにするには結構な改造が必要。でもそれができたら+0.5点にしてもいい。)
#13 gccモードでの、#longdef, #endlongdef, #longuse+0.8点(プリプロセッサ拡張、昨年別の開発のために作って便利だった)
#14 Uniform Function Call Syntax に対応。+1.0点これはすぐにはできなさそう。でもいつかやりたい・・・。

2023.03.27 Mon #1

int spd = 128, hi = 0; AWin *w = aOpenWin(800, 600, "HB2");
int dir[2], bom[2], x[2], y[2], col[2], scr, dxy[14] = { 8,0, 0,-8, -8,0, 0,8, 0,0, 0,0, 0,0 };
start:
aFillRect(w, 800, 584, 0, 16, 0xffffff); aFillRect(w, 784, 568, 8, 24, 0x000000);
[i=0:<2] { dir[i] = 4; bom[i] = 0; y[i] = 304; } x[0] = 264; x[1] = 528;
col[0] = 0x00ff00; col[1] = 0x0000ff; scr = 0;
[9] { aFillOval(w, 8, 8, aRnd(96) * 8 + 16, aRnd(68) * 8 + 32, 0xffff00); }
while (dir[0] != 6 || dir[1] != 6) {
    aGrPrintf(w, 16, 0, 0xffffff, 0, "SCORE:%05d  HIGH:%05d    BOM1:%d   BOM2:%d", scr, hi, bom[0], bom[1]);
    [i=0:<2] { if (dir[i] < 6) { aFillOval(w, 8, 8, x[i], y[i], col[i]); }}
    while ((k = aInkey(w, 1)) != 0) {
        char *p = "swazxq:@;/\\p", *q;
        if ('A' <= k && k <= 'Z'){  k += 'a' - 'A'; }
        q = strchr(p, k);
        if (q == 0) continue;
        if (q - p < 6) {
            if (dir[0] < 6) { dir[0] = q - p; }
        } else {
            if (dir[1] < 6) { dir[1] = q - p - 6; }
        }
    }
    [i=0:<2] {
        x[i] = x[i] + dxy[dir[i] * 2 + 0];
        y[i] = y[i] + dxy[dir[i] * 2 + 1];
        j = aGetPix(w, x[i] + 4, y[i] + 4);
        if (j == 0xffff00) { j = 0; bom[i] = bom[i] + 1; }
        if (dir[i] < 4 && j != 0) {
            x[i] = x[i] - dxy[dir[i] * 2 + 0];
            y[i] = y[i] - dxy[dir[i] * 2 + 1];
            dir[i] = 6;
        }
        if (dir[i] == 6) { aFillOval(w, 8, 8, x[i], y[i], 0xff0000); }
        if (dir[i] == 5) {
            if (bom[i] > 0) {
                bom[i] = bom[i] - 1; scr += 100;
                for (j = -1; j <= 0; j++) {
                    for (l = 24; l < 592; l += 8) {
                        n = (l - y[i]) * (l - y[i]);
                        for (k = 8; k < 792; k += 8) {
                            m = (k - x[i]) * (k - x[i]);
                            if (n + m < 6400) { aFillRect(w, 8, 8, k, l, j & 0xffffff); }
                        }
                    }
                    if (j < 0) { aWait(256); }
                }
            }
            dir[i] = 4;
        }
        if (dir[i] < 4) { scr++; }
    }
    aWait(spd);
    if (dir[0] < 4 && dir[1] < 4) { scr++; }
    if (AWin_isClose(w)) goto end;
    if (dir[0] == 6 && dir[1] == 6) break;
}
if (hi < scr) { hi = scr; }
for (;;) {
    aWait(128);
    k = aInkey(w, 1);
    if (k == AWinKey_Esc || AWin_isClose(w)) goto end;
    if (k == AWinKey_Enter) goto start;
}
end:

https://essen.osask.jp/files/pic20230327a.png

1PWASZXQ
2P@;:/\P

2023.03.28 Tue #1

2023.04.03 Mon #1


2023.04.04 Tue #1 [easy-C] [casm]

2023.04.05 Wed #1 [casm]

2023.04.05 Wed #2 [casm]

こめんと欄


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS