mirror of
https://git.squeakyrat.moe/petratc/
synced 2026-11-04 18:35:43 +01:00
i remembered my password
This commit is contained in:
1 parent
acb78f0835
commit
f21bfbfacc
1 file changed
+72
-9
+72
-9
@@ -57,7 +57,16 @@ static char *cheeseart = {
|
||||
typedef struct bignum{
|
||||
double x;
|
||||
int y;
|
||||
}bignum;
|
||||
}bignum;
|
||||
|
||||
typedef struct ratworker{
|
||||
char *name;
|
||||
bignum price;
|
||||
bignum clicks;
|
||||
bignum multiplier; //the more you buy the more expensive the unit becomes
|
||||
////line 67 six seveeennn
|
||||
bignum owned;
|
||||
}ratworker;
|
||||
|
||||
static char *digit[] = {
|
||||
"", "K", "M", "B", "T",
|
||||
@@ -154,23 +163,62 @@ static bignum divbignum(bignum a, bignum b){
|
||||
result.y = a.y - b.y;
|
||||
return normalizebignum(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* returns 1 if a is larger
|
||||
* returns 0 if same number
|
||||
* returns -1 is a is tiny
|
||||
*/
|
||||
static int comparebignum(bignum a, bignum b){
|
||||
//branch predictors will hate this function :sob:
|
||||
if(a.y == b.y){
|
||||
if(a.x == b.x){
|
||||
return 0;
|
||||
}else if(a.x > b.x){
|
||||
return 1;
|
||||
}else return -1;
|
||||
}else if(a.y > b.y){
|
||||
return 1;
|
||||
} else return -1;
|
||||
}
|
||||
|
||||
static bignum addmixregbig(bignum a, double regnum){
|
||||
return addbignum(a, normalize(regnum));
|
||||
}
|
||||
|
||||
static bignum submixregbig(bignum a, double regnum){
|
||||
return subbignum(a, normalize(regnum));
|
||||
}
|
||||
|
||||
}
|
||||
static bignum mulmixregbig(bignum a, double regnum){
|
||||
return mulbignum(a, normalize(regnum));
|
||||
}
|
||||
|
||||
static bignum divmixregbig(bignum a, double regnum){
|
||||
return divbignum(a, normalize(regnum));
|
||||
}
|
||||
|
||||
|
||||
static bignum calculateworkerincome(ratworker worker){
|
||||
return mulbignum(worker.clicks, worker.owned);
|
||||
}
|
||||
|
||||
static bignum calculatetotalincome(ratworker workers[], int n){
|
||||
bignum total = {0.0, 0};
|
||||
for(int i = 0; i < n; i++){
|
||||
total = addbignum(total, calculateworkerincome(workers[i]));
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
static int buyworker(bignum *cheeses, ratworker *worker){
|
||||
if(comparebignum(*cheeses, worker->price) < 0) return 0; //nigga broke
|
||||
|
||||
*cheeses = subbignum(*cheeses, worker->price);
|
||||
worker->owned = addmixregbig(worker->owned, 1.0);
|
||||
worker->price = mulbignum(worker->price, worker->multiplier);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static char *bignumprint(bignum b) {
|
||||
//32 bytes is more than enough for 124.24 trillion idk
|
||||
char *nice = malloc(32 * sizeof(char));
|
||||
@@ -182,10 +230,10 @@ static char *bignumprint(bignum b) {
|
||||
snprintf(nice, 32, "%.2lfe3*%d", b.x, b.y);
|
||||
}
|
||||
return nice;
|
||||
free(nice);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//wide = art and score side by side
|
||||
//narrow = art on topand score below
|
||||
typedef enum { layoutnarrow, layoutwide } layoutmode;
|
||||
@@ -214,7 +262,7 @@ static void drawwin(WINDOW *win, bignum cheeses){
|
||||
int scorecol, scorewrapw;
|
||||
|
||||
if(mode == layoutwide){
|
||||
scorecol = winw / 2 + 2;
|
||||
scorecol = winw / 2 - 25;
|
||||
scorewrapw = winw - scorecol - 2;
|
||||
} else {
|
||||
scorecol = 2;
|
||||
@@ -252,7 +300,7 @@ static void drawwin(WINDOW *win, bignum cheeses){
|
||||
wrapprint(win, 3, scorecol, scorewrapw, "click the cheese!");
|
||||
} else {
|
||||
int scorerow = artrow0 + artrows + 1;
|
||||
wrapprint(win, scorerow, scorecol, scorewrapw, scoremsg);
|
||||
wrapprint(win, scorerow, scorecol, scorewrapw, scoremsg);
|
||||
wrapprint(win, scorerow+1, scorecol, scorewrapw, "click the cheese!");
|
||||
}
|
||||
|
||||
@@ -272,10 +320,25 @@ void gameclicker(){
|
||||
bignum cheeses = {0.0, 0};
|
||||
bignum onecheese = {1.0, 0}; //what a single click is worth
|
||||
|
||||
#define nhowmanytiers 11
|
||||
static ratworker workers[nhowmanytiers] = {
|
||||
//name, 1 bignum price,clicks/tick,multiplier,owned (howmanyowned)
|
||||
{ "small rat", {10.0, 0}, {1.0, 0}, {1.15, 0}, {0.0, 0} },
|
||||
{ "brown rat", {20.0, 0}, {2.0, 0}, {1.15, 0}, {0.0, 0} },
|
||||
{ "fancy rat", {25.0, 0}, {4.0, 0}, {1.14, 0}, {0.0, 0} },
|
||||
{ "fat rat", {130.0, 0}, {10.0, 0}, {1.13, 0}, {0.0, 0} },
|
||||
{ "evil rat", {400.0, 0}, {15.0, 0}, {1.13, 0}, {0.0, 0} },
|
||||
{ "rat farm", {1.2, 1}, {25.0, 0}, {1.12, 0}, {0.0, 0} },
|
||||
{ "cheese mill", {3.0, 1}, {30.0, 0}, {1.11, 0}, {0.0, 0} },
|
||||
{ "dairy factory", {9.0, 1}, {50.0, 0}, {1.11, 0}, {0.0, 0} },
|
||||
{ "cheese research institute", {9.5, 1}, {80.0, 0}, {1.05, 0}, {0.0, 0} },
|
||||
{ "cheese accelerator", {30.0, 1}, {100.0, 0}, {1.11, 0}, {0.0, 0} },
|
||||
{ "the cheese singularity", {120.0, 1}, {250.0, 0}, {1.10, 0}, {0.0, 0} },
|
||||
};
|
||||
|
||||
drawwin(win, cheeses);
|
||||
|
||||
while(running){
|
||||
if(!running){stop(); break;}
|
||||
|
||||
int ch;
|
||||
while((ch = getch()) != ERR){ //drain the whole queue each frame so rapid clicks/keys aren't ignroed
|
||||
|
||||
Reference in new issue
Block a user