From 533777f424242d5da36228d5e874d53d4973cfa9 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Thu, 8 Feb 2018 19:50:36 +0100 Subject: Levels and num cleared lines --- .gitignore | 1 + main.c | 51 ++++++++++++++++++++++++++++++++++++++------------- termio | 2 +- 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index a8320cc..f67d1eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ tetris +*.swp diff --git a/main.c b/main.c index 24454c7..bc137c2 100644 --- a/main.c +++ b/main.c @@ -16,9 +16,6 @@ #define USE_UNICODE -int delay_msec=700; - - const int stones[7]={ 0b0000000001110001, 0b0000000001110100, @@ -39,10 +36,18 @@ static int rotateR(int bl){ return dest; } +static int leveldelay(int level){ + int d=700-(level-1)*35; + if(d<50)d=50; + return d; +} + struct board { int lines[HEI]; int stone,stx,sty; + + int ncleared,level,delay; }; static bool boardvalid(const struct board *bd){ @@ -80,6 +85,14 @@ static void show(const struct board *bd){ memcpy(&bd2,bd,sizeof bd2); persist(&bd2); clearscreen(); + +#ifdef USE_UNICODE + assert(WID%2==0); + int boardwid=WID*3/2; +#else + int boardwid=WID; +#endif + for(int y=0;yncleared,bd->level); + redraw(); } @@ -121,6 +134,11 @@ static void checklines(struct board *bd){ memmove(bd->lines+1,bd->lines,y*sizeof(int)); bd->lines[0]=0; y++; + bd->ncleared++; + if(bd->ncleared%10==0){ + bd->level++; + bd->delay=leveldelay(bd->level); + } } } } @@ -164,9 +182,13 @@ int main(void){ initscreen(); atexit(endscreen); installCLhandler(true); + cursorvisible(false); struct board bd; memset(&bd,0,sizeof bd); + bd.ncleared=0; + bd.level=1; + bd.delay=leveldelay(bd.level); show(&bd); struct timeval timeleft; @@ -193,8 +215,8 @@ int main(void){ if(ret==0){ if(!advance(&bd))break; - timeleft.tv_sec=delay_msec/1000; - timeleft.tv_usec=delay_msec%1000*1000; + timeleft.tv_sec=bd.delay/1000; + timeleft.tv_usec=bd.delay%1000*1000; continue; } end.tv_sec-=start.tv_sec; @@ -221,11 +243,14 @@ int main(void){ if(key=='Q'||key=='q')break; else if(key=='S'||key=='s'||key==KEY_DOWN){ if(!advance(&bd))break; - timeleft.tv_sec=delay_msec/1000; - timeleft.tv_usec=delay_msec%1000*1000; + timeleft.tv_sec=bd.delay/1000; + timeleft.tv_usec=bd.delay%1000*1000; } else if(key=='A'||key=='a'||key==KEY_LEFT)move(&bd,-1); else if(key=='D'||key=='d'||key==KEY_RIGHT)move(&bd,1); else if(key=='W'||key=='w'||key==KEY_UP)rotR(&bd); else bel(); } + + endscreen(); + printf("Game Over!\nLines cleared: %d\nLevel reached: %d\n",bd.ncleared,bd.level); } diff --git a/termio b/termio index 1835b24..c6fa276 160000 --- a/termio +++ b/termio @@ -1 +1 @@ -Subproject commit 1835b24c4b546e2eeec9c0f7a4af1604a775ad29 +Subproject commit c6fa2768ce7082daed428b8abe930e92adb1d5f2 -- cgit v1.2.3-54-g00ecf