ナベアツごっこ | spin on the RITZ

ナベアツごっこ

はうつー
1, 『press Enter to start』と出るので適当にキーを押します(別にEnterじゃなくて良い)
2, 真ん中あたりに『1』が出ます
3, 約1秒毎に数字が増えていくので、3の倍数と3がつく数のときだけ適当にキーを押そう!

3の倍数と3のつく数字のときに1秒経ったり、3の倍数と3がつく数じゃないときに押すと失敗するよ!
結果表示された後、もう一度するか聞かれる

そんなくだらないプログラムです



// nabeatsu.c
//      by spin

#include <curses.h>
#include <time.h>

#define TIME_OUT 1000

int continue_game(void);
int nabeatsu(void);
void wait(double sec);

int main(void)
{
    initscr();
    noecho();
    cbreak();
    while(nabeatsu())
        ;
    endwin();
    
    return 0;
}

int nabeatsu(void)
{
    int count = 1;
    int flag = 1, correct = 0;
    int i, hit = 0;
    char str[50];
    double delay, time_out = (double)TIME_OUT / 1000;
    clock_t start, end;

    mvaddstr(0, 0, "press Enter to start");
    getch();
    clear();

    wtimeout(stdscr, TIME_OUT);
    while (flag) {
        start = clock();
        if (count%3 == 0) {
            flag = 0;
        } else {
            for (i = count;i > 0;i /= 10) {
                if (i%10 == 3) {
                    flag = 0;
                    break;
                }
            }
        }
        sprintf(str, "%d   ", count);
        mvaddstr(11, 37, str);
        hit = getch();
        if (flag == 1)
            if (hit != ERR)
                break;
        if (flag == 0) {
            if (hit == ERR)
                break;
            else {
                sprintf(str, "%d !", count);
                mvaddstr(11, 37, str);
                refresh();
            }
        }
        end = clock();
        delay = time_out - (double)(end-start)/CLOCKS_PER_SEC;
        wait(delay);
        flag = 1;
        correct = 0;
        count++;
    }
    sprintf(str, "結果 : %dまで世界のナベアツでした", count-1);
    mvaddstr(3, 0, str);
    mvaddstr(4, 0, "もう一度(y / n) ?");
    wtimeout(stdscr, -1);
    if (!continue_game())
        return 0;
    
    clear();
    return 1;
}

int continue_game(void)
{
    int ch;

    while ((ch = getch()) != 'n')
        if (ch == 'y')
            return 1;

    return 0;
}

void wait(double sec)
{
    clock_t start, end;
    start = clock();
    
    if (sec > 0) {
        while (1) {
            end = clock();
            if ((double)(end-start)/CLOCKS_PER_SEC > sec)
                break;
        }
    }
}




ところどころ欠陥はありますでしょうが、ご愛嬌ということで(笑)

でも明らかに致命的なところは教えていただけると幸いです




Windowsグラフィックの本読む気失せる



デフォルト引数の時点でキレそうなのに、スコープ演算子(::)まで使ってよる


typedef struct ○○ {
    …
};

○○::function(…)~
よりによって構造体で。絶句した。

ブチキレそうになったのでふざけたプログラムをつくりましたとさ