aboutsummaryrefslogtreecommitdiff
path: root/games/gameguess.c
blob: 86c6a26039a6b454a6e9fb92307605e42de3b253 (plain)
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include "../rat.h"

#define maxhistory 4

static void drawwin(WINDOW *win, int artpick, const char *msg, int history[], int histcount){

    werase(win);
    box(win, 0, 0);

    int row = 1;
    char artcopy[256];
    strncpy(artcopy, ratart[artpick], sizeof(artcopy));
    artcopy[sizeof(artcopy)-1] = '\0';

    char *line = strtok(artcopy, "\n");
    while(line){
        mvwprintw(win, row++, 2, "%s", line);
        line = strtok(NULL, "\n");
    }

    row++;
    wrapprint(win, row, 2, getmaxx(win) - 4, msg);

    int inputrow = getmaxy(win) - 3;


    for(int i = 0; i < histcount; i++){
        mvwprintw(win, inputrow - histcount + i, 2, "%d", history[i]);
    }

    wrefresh(win);
}

void gameguess(){

    int guess;
    int solved = 0;
    int range = 100;

    srand(time(NULL));
    int correct = (rand() % (range + 1));

    int history[maxhistory];
    int histcount = 0;

    WINDOW *win = ratdrawbox();

    char msg[96];
    snprintf(msg, sizeof(msg), "let's play a game, squeak!~ you gues a number between 0 and %d!", range);
    drawwin(win, 4, msg, history, histcount);

    int quitgame = 0;

    while(solved != 1){

        echo();
        char buf[16];
        mvwgetnstr(win, getmaxy(win) - 3, 2, buf, sizeof(buf) - 1);
        noecho();

        if((buf[0] == 'q' || buf[0] == 'Q') && buf[1] == '\0'){
            drawwin(win, 2, "are you suuure you don't wanna play anymoreee~?", history, histcount);

            echo();
            char confirm[16];
            mvwgetnstr(win, getmaxy(win) - 3, 2, confirm, sizeof(confirm) - 1);
            noecho();

            if((confirm[0] == 'q' || confirm[0] == 'Q' || confirm[0] == 'y' || confirm[0] == 'Y')){
                quitgame = 1;
                break;
            } else if((confirm[0] == 'n' || confirm[0] == 'N') && confirm[1] == '\0'){
                drawwin(win, 4, msg, history, histcount);
                continue;
            } else if(sscanf(confirm, "%d", &guess) != 1){
                drawwin(win, 4, "that's not a number, try again", history, histcount);
                continue;
            }
        } else if(sscanf(buf, "%d", &guess) != 1){
            drawwin(win, 4, "that's not a number, try again", history, histcount);
            continue;
        }
        //this is too "complicated" for no reason at all

        int diff = abs(guess - correct);
        int artpick;
        if(diff <= 10){
            artpick = 3;
        } else if(diff > 30){
            artpick = 4;
        } else {
            artpick = rand() % 2;
        }

        if(guess < correct){
            if(histcount < maxhistory){
                history[histcount++] = guess;
            } else {
                for(int i = 0; i < maxhistory - 1; i++) history[i] = history[i+1];
                history[maxhistory-1] = guess;
            }
            drawwin(win, artpick, "number too low try again", history, histcount);
        }else if(guess > correct){
            if(histcount < maxhistory){
                history[histcount++] = guess;
            } else {
                for(int i = 0; i < maxhistory - 1; i++) history[i] = history[i+1];
                history[maxhistory-1] = guess;
            }
            drawwin(win, artpick, "number too high try again", history, histcount);
        }else {
            drawwin(win, artpick, "yes!! correct! squeaaakk!~", history, histcount);
            solved = 1;
        }
    }

    if(!quitgame){
        usleep(2000000);
        addstat(&rat.fun);
    }

    delwin(win);
    endwin();

}