diff --git a/README.md b/README.md index 7573aa3..4c51066 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,7 @@ **Don't worry** anymore as you've got nbsdgames now! -I originally made these in hope of them becoming added to NetBSD (but the few i talked to preferred to have games in the repositories rather than in /usr/games itself). - -These include: +The games include: * Jewels (A game with a gameplay kinda similiar to that of Tetris, NOT my invention) * Sudoku @@ -25,20 +23,21 @@ These include: * Pipes (Same as the famous Pipe Mania, unplayable on the environments that don't support the line characters) * Fifteen * Memoblocks (or Memory blocks. A similar game was included in Windows 7) -* Fisher^ -* Muncher^ -* Miketron^ -* Redsquare^ (Conway's Game of Life made playable!) - -They natively run on Linux, BSD, MacOS and are known to work on Windows as well (using PDCurses, thanks to Laura Michaels for providing advice). - -They have been ported to Plan9 thanks to Jens Staal! +* Fisher +* Muncher +* Miketron +* Redsquare (Conway's Game of Life made playable!) The difficulty and/or dimensions are adjustable through simple command line options, you can play a minesweeper game that take hours to complete, or exprience hexadecimal sudoku and 8x8 fifteen-like puzzles! Play on xterm for best exprience. -^ I have encounterd Fisher, Muncher and Miketron on MikeOS and RedSquare on KolibriOS +## Platforms + +They natively run on Linux, BSD, MacOS and are known to work on Windows as well (using PDCurses, thanks to Laura Michaels for providing advice). + +They have been ported to Plan9 thanks to Jens Staal! + ## Prerequisites * git (optional) @@ -62,12 +61,12 @@ Like this: export PREFIX= ~/bin make install ``` - +## Packages Also, If you are on a debian-based OS on a 64-bit PC you can download the deb package and simply install it with dpkg or apt. the deb package(old): https://github.com/abakh/nbsdgames/releases/download/v2.0/nbsdgames_amd64.deb It's available on AUR thanks to Elias Riedel GĂ„rding: https://aur.archlinux.org/packages/nbsdgames-git/ -(The commands start with nbsd_ to avoid conflict) +(The commands start with nbsd_ or nb to avoid conflict) It's been made available for openSUSE thanks to Zinjanthropus: https://build.opensuse.org/package/show/home:Zinjanthropus/nbsdgames ## How do these look like @@ -79,7 +78,7 @@ Plan9 ## How to contribute * Share these with your friends and others -* Your stars make the repo more findable in github +* Your stars make the repo more findable in github :star: * Tell me your feature requests, bug reports, etc. * Tell me the games you want to be added (but in the same genre, i can't port Angry Birds to curses! :) * Make a package for your distro (or put it on repos if the package is not there) diff --git a/sources/fifteen.c b/sources/fifteen.c index f3596e2..e1f89e3 100644 --- a/sources/fifteen.c +++ b/sources/fifteen.c @@ -14,7 +14,7 @@ compile with -lncurses #include #include #include -typedef /*signed char*/ uint8_t byte; +typedef signed char byte; /* The Plan9 compiler can not handle VLAs */ #ifdef Plan9 @@ -22,7 +22,6 @@ typedef /*signed char*/ uint8_t byte; #else byte size; #endif -FILE *lol; byte py,px; byte ey,ex; //the empty tile chtype green=A_BOLD; //bold when there is no color @@ -201,7 +200,6 @@ int main(int argc, char** argv){ } } #endif - lol=fopen("lol","w"); signal(SIGINT,sigint_handler); srand(time(NULL)%UINT_MAX); initscr(); diff --git a/sources/fisher.c b/sources/fisher.c index bea5732..57c56ad 100644 --- a/sources/fisher.c +++ b/sources/fisher.c @@ -257,11 +257,11 @@ void showscores(byte playerrank){ mvprintw(a+1,HWID-10," _____ You bet the"); mvprintw(a+2,HWID-10," .' | previous"); mvprintw(a+3,HWID-10," .' | record"); - mvprintw(a+4,HWID-10," | .| | of"); + mvprintw(a+4,HWID-10," | .| | of"); mvprintw(a+5,HWID-10," |.' | |%11ld",formerscore); mvprintw(a+6,HWID-10," | | held by"); mvprintw(a+7,HWID-10," ___| |___%7s!",formername); - mvprintw(a+8,HWID-10," | |"); + mvprintw(a+8,HWID-10," | |"); mvprintw(a+9,HWID-10," |____________|"); mvprintw(LEN-3,HWID-11,"Press a key to continue"); refresh(); diff --git a/sources/jewels.c b/sources/jewels.c index 40928a7..02670d5 100644 --- a/sources/jewels.c +++ b/sources/jewels.c @@ -97,12 +97,12 @@ void showscores(byte playerrank){ printf("\n*****CONGRATULATIONS!****\n"); printf(" _____ You bet the\n"); printf(" .' | previous\n"); - printf(" .' | record\n"); - printf(" | .| | of\n"); + printf(" .' | record\n"); + printf(" | .| | of\n"); printf(" |.' | |%14ld\n",formerscore); printf(" | | held by\n"); printf(" ___| |___%11s\n",formername); - printf(" | |\n"); + printf(" | |\n"); printf(" |____________|\n"); printf("*************************\n"); } @@ -301,89 +301,89 @@ int main(void){ bool falls; byte stop=0 , combo; char jwstr[] = {'*','^','~','"','$','V'}; - if(has_colors()){ - start_color(); - use_default_colors(); - init_pair(1,COLOR_RED,-1); - init_pair(2,COLOR_GREEN,-1); - init_pair(3,COLOR_MAGENTA,-1); - init_pair(4,COLOR_BLUE,-1);//array this thing - init_pair(5,COLOR_YELLOW,-1); - init_pair(6,COLOR_CYAN,-1); - for(byte n=0;n<6;++n){ - colors[n] = COLOR_PAIR(n+1); - } - } + if(has_colors()){ + start_color(); + use_default_colors(); + init_pair(1,COLOR_RED,-1); + init_pair(2,COLOR_GREEN,-1); + init_pair(3,COLOR_MAGENTA,-1); + init_pair(4,COLOR_BLUE,-1);//array this thing + init_pair(5,COLOR_YELLOW,-1); + init_pair(6,COLOR_CYAN,-1); + for(byte n=0;n<6;++n){ + colors[n] = COLOR_PAIR(n+1); + } + } - srand(time(NULL)%UINT_MAX); - byte ran1= rand()%6; - byte ran2= rand()%6; - next1= colors[ran1]|jwstr[ran1]; - next2= colors[ran2]|jwstr[ran2]; - while(1){ - chtype a,b; - a=board[0][WID/2]; - b=board[0][WID/2-1]; - if(a || b ){ - goto Lose; - } - jy=ky=0; - jx=WID/2; - kx=-1; - board[jy][jx]=next2; - board[jy+ky][jx+kx]=next1; - ran1= rand()%6; - ran2= rand()%6; - next1=colors[ran1]|jwstr[ran1]; - next2=colors[ran2]|jwstr[ran2]; - falls = 1; - while(falls){ - input = getch(); + srand(time(NULL)%UINT_MAX); + byte ran1= rand()%6; + byte ran2= rand()%6; + next1= colors[ran1]|jwstr[ran1]; + next2= colors[ran2]|jwstr[ran2]; + while(1){ + chtype a,b; + a=board[0][WID/2]; + b=board[0][WID/2-1]; + if(a || b ){ + goto Lose; + } + jy=ky=0; + jx=WID/2; + kx=-1; + board[jy][jx]=next2; + board[jy+ky][jx+kx]=next1; + ran1= rand()%6; + ran2= rand()%6; + next1=colors[ran1]|jwstr[ran1]; + next2=colors[ran2]|jwstr[ran2]; + falls = 1; + while(falls){ + input = getch(); - if(input != ERR) - stop+=1; + if(input != ERR) + stop+=1; - if( stop >= 10){ - falls=fall(); - stop=0; - } - else if(input=='l' || input==KEY_RIGHT) - jmove(0,+1); - else if(input=='j' || input==KEY_LEFT ) - jmove(0,-1); - else if(input=='k' || input==KEY_UP) - rotate(); - else if(input=='p'){ - mvaddstr(LINES-2,COLS/2-15,"Paused - Press a key to continue "); - refresh(); - nocbreak(); - cbreak(); - getch(); - halfdelay(DELAY); - } - else if(input=='q') - goto Lose; - else if(input==' ') - while( (falls=fall()) ) - stop=0; - else{ - falls=fall(); - stop=0; - } - draw(); - } - combo=1; - while(explode(combo)){ // explode, fall, explode, fall until nothing is left - ++combo; - while(fall()); - draw(); - } - } - Lose: - nocbreak(); - endwin(); - printf("%s _Jewels_ %s\n",jwstr,jwstr); - printf("You have scored %ld points.\n",score); - showscores(scorewrite(score)); - return EXIT_SUCCESS; + if( stop >= 10){ + falls=fall(); + stop=0; + } + else if(input=='l' || input==KEY_RIGHT) + jmove(0,+1); + else if(input=='j' || input==KEY_LEFT ) + jmove(0,-1); + else if(input=='k' || input==KEY_UP) + rotate(); + else if(input=='p'){ + mvaddstr(LINES-2,COLS/2-15,"Paused - Press a key to continue "); + refresh(); + nocbreak(); + cbreak(); + getch(); + halfdelay(DELAY); + } + else if(input=='q') + goto Lose; + else if(input==' ') + while( (falls=fall()) ) + stop=0; + else{ + falls=fall(); + stop=0; + } + draw(); + } + combo=1; + while(explode(combo)){ // explode, fall, explode, fall until nothing is left + ++combo; + while(fall()); + draw(); + } + } + Lose: + nocbreak(); + endwin(); + printf("%s _Jewels_ %s\n",jwstr,jwstr); + printf("You have scored %ld points.\n",score); + showscores(scorewrite(score)); + return EXIT_SUCCESS; } diff --git a/sources/miketron.c b/sources/miketron.c index 5068e5f..6802529 100644 --- a/sources/miketron.c +++ b/sources/miketron.c @@ -158,15 +158,15 @@ void showscores(byte playerrank){ if ( fscanf(scorefile,"%s : %ld\n",formername,&formerscore)==2){ halfdelay(1); printw("*****CONGRATULATIONS!****\n"); - printw(" You bet the\n"); - printw(" previous\n"); - printw(" record\n"); - printw(" of\n"); - printw(" %14ld\n",formerscore); - printw(" held by\n"); - printw(" %11s\n",formername); - printw(" \n"); - printw(" \n"); + printw(" You bet the\n"); + printw(" previous\n"); + printw(" record\n"); + printw(" of\n"); + printw(" %14ld\n",formerscore); + printw(" held by\n"); + printw(" %11s\n",formername); + printw(" \n"); + printw(" \n"); printw("*************************\n"); printw("Press a key to proceed:"); Effect: @@ -179,7 +179,7 @@ void showscores(byte playerrank){ mvprintw(8,0, " |.' | |"); mvprintw(9,0, " | |"); mvprintw(10,0," ___| |___"); - mvprintw(11,0," | |"); + mvprintw(11,0," | |"); mvprintw(12,0," |____________|"); attroff(colors[b]); b=(b+1)%6; diff --git a/sources/muncher.c b/sources/muncher.c index ef48c48..28f66a2 100644 --- a/sources/muncher.c +++ b/sources/muncher.c @@ -135,15 +135,15 @@ void showscores(byte playerrank){ if ( fscanf(scorefile,"%s : %ld\n",formername,&formerscore)==2){ halfdelay(2); printw("*****CONGRATULATIONS!****\n"); - printw(" You bet the\n"); - printw(" previous\n"); - printw(" record\n"); - printw(" of\n"); - printw(" %14ld\n",formerscore); - printw(" held by\n"); - printw(" %11s\n",formername); - printw(" \n"); - printw(" \n"); + printw(" You bet the\n"); + printw(" previous\n"); + printw(" record\n"); + printw(" of\n"); + printw(" %14ld\n",formerscore); + printw(" held by\n"); + printw(" %11s\n",formername); + printw(" \n"); + printw(" \n"); printw("*************************\n"); printw("Press a key to proceed:"); Effect: @@ -156,7 +156,7 @@ void showscores(byte playerrank){ mvprintw(8,0, " |.' | |"); mvprintw(9,0, " | |"); mvprintw(10,0," ___| |___"); - mvprintw(11,0," | |"); + mvprintw(11,0," | |"); mvprintw(12,0," |____________|"); attroff(colors[b]); b=(b+1)%6; diff --git a/sources/pipes.c b/sources/pipes.c index 019ef92..82c5035 100644 --- a/sources/pipes.c +++ b/sources/pipes.c @@ -125,7 +125,7 @@ void showscores(byte playerrank){ if ( fscanf(scorefile,"%s : %ld",formername,&formerscore)==2 && formerscore>0){ byte a = (len-9)/2; attron(A_BOLD); - mvprintw(SY,SX, "**** ***"); + mvprintw(SY,SX, "**** ***"); mvprintw(SY+len+1,SX,"***********************"); attroff(A_BOLD); attron(green); @@ -135,11 +135,11 @@ void showscores(byte playerrank){ mvprintw(SY+a+1,SX," _____ You bet the"); mvprintw(SY+a+2,SX," .' | previous"); mvprintw(SY+a+3,SX," .' | record"); - mvprintw(SY+a+4,SX," | .| | of"); + mvprintw(SY+a+4,SX," | .| | of"); mvprintw(SY+a+5,SX," |.' | |%11ld",formerscore); mvprintw(SY+a+6,SX," | | held by"); mvprintw(SY+a+7,SX," ___| |___%7s!",formername); - mvprintw(SY+a+8,SX," | |"); + mvprintw(SY+a+8,SX," | |"); mvprintw(SY+a+9,SX," |____________|"); mvprintw(len+2,0,"Game over! Press a key to proceed:"); refresh(); @@ -311,7 +311,7 @@ void help(void){ erase(); logo(); attron(A_BOLD); - mvprintw(SY,SX+5,"-* *-"); + mvprintw(SY,SX+5,"-* *-"); mvprintw(3,0," HELP"); mvprintw(4,0," PAGE"); mvprintw(SY+7,SX,"YOU CAN ALSO USE THE MOUSE!"); @@ -335,7 +335,7 @@ void gameplay(void){ erase(); logo(); attron(A_BOLD); - mvprintw(SY,SX+5,"-* *-"); + mvprintw(SY,SX+5,"-* *-"); mvprintw(3,0," HELP"); mvprintw(4,0," PAGE"); attroff(A_BOLD); diff --git a/sources/rabbithole.c b/sources/rabbithole.c index f7e85fb..a6a3890 100644 --- a/sources/rabbithole.c +++ b/sources/rabbithole.c @@ -262,7 +262,7 @@ int main(int argc, char** argv){ now=time(NULL); erase(); mvprintw(sy+0,sx+0," _ "); - mvprintw(sy+1,sx+0,"|_) Time left :%ld",giventime-(now-tstart)); + mvprintw(sy+1,sx+0,"|_) Time left :%ld",giventime-(now-tstart)); mvprintw(sy+2,sx+0,"| \\ABBITHOLE Carrots left :%d",carrot_count-carrots_found); draw(sy+3,sx+0,board); refresh(); diff --git a/sources/sudoku.c b/sources/sudoku.c index 578cf56..452b97f 100644 --- a/sources/sudoku.c +++ b/sources/sudoku.c @@ -160,7 +160,7 @@ void fill(char board[s][s]){ if ( fill_with(board,int2sgn(num) ) ){ memset(board,0,s*s); num=0; - mvaddstr(0,0,"My algorithm sucks, so you need to wait a bit ");//with animated dots to entertain the waiter + mvaddstr(0,0,"My algorithm sucks, so you need to wait a bit ");//with animated dots to entertain the waiter if(waitcycles==3) mvaddstr(2,0,"(You can set SUDOKU_FASTGEN if you just want to see if it works)"); move(0,45);