mirror of
https://github.com/abakh/nbsdgames.git
synced 2025-02-02 15:07:27 -05:00
vertical scroll added
This commit is contained in:
parent
c3aee84c67
commit
73d4996881
81
mines.c
81
mines.c
@ -24,6 +24,7 @@ compile with -lncurses
|
||||
#define MINWID 8
|
||||
#define MAXLEN 1000
|
||||
#define MAXWID 1000
|
||||
#define EMPTY_LINES 7
|
||||
#ifdef NO_VLA //The Plan9 compiler can not handle VLAs
|
||||
#define len 8
|
||||
#define wid 8
|
||||
@ -34,20 +35,38 @@ int py,px,flags;
|
||||
int untouched;
|
||||
int mscount;
|
||||
chtype colors[6]={0};
|
||||
int beginy,view_len;
|
||||
byte setup_scroll(){
|
||||
beginy=0;
|
||||
if(0<py+3-(LINES-EMPTY_LINES)){
|
||||
beginy=py+3-(LINES-EMPTY_LINES);
|
||||
}
|
||||
view_len=len;
|
||||
if(LINES-EMPTY_LINES<len){
|
||||
view_len=LINES-EMPTY_LINES;
|
||||
}
|
||||
if(beginy+view_len>len){
|
||||
beginy-=beginy+view_len-len;
|
||||
}
|
||||
}
|
||||
|
||||
void rectangle(int sy,int sx){
|
||||
for(int y=0;y<=len+1;++y){
|
||||
setup_scroll();
|
||||
for(int y=0;y<=view_len;++y){
|
||||
mvaddch(sy+y,sx,ACS_VLINE);
|
||||
mvaddch(sy+y,sx+wid*2,ACS_VLINE);
|
||||
}
|
||||
for(int x=0;x<=wid*2;++x){
|
||||
mvaddch(sy,sx+x,ACS_HLINE);
|
||||
mvaddch(sy+len+1,sx+x,ACS_HLINE);
|
||||
mvaddch(sy+view_len+1,sx+x,ACS_HLINE);
|
||||
}
|
||||
mvaddch(sy,sx,ACS_ULCORNER);
|
||||
mvaddch(sy+len+1,sx,ACS_LLCORNER);
|
||||
mvaddch(sy+view_len+1,sx,ACS_LLCORNER);
|
||||
mvaddch(sy,sx+wid*2,ACS_URCORNER);
|
||||
mvaddch(sy+len+1,sx+wid*2,ACS_LRCORNER);
|
||||
mvaddch(sy+view_len+1,sx+wid*2,ACS_LRCORNER);
|
||||
}
|
||||
byte get_cell(byte board[len][wid],int y,int x){
|
||||
return board[(y+len)%len][(x+wid)%wid];
|
||||
}
|
||||
//display
|
||||
void draw(int sy,int sx,byte board[len][wid]){
|
||||
@ -55,49 +74,53 @@ void draw(int sy,int sx,byte board[len][wid]){
|
||||
chtype attr ;
|
||||
char prnt;
|
||||
int y,x;
|
||||
for(y=0;y<len;++y){
|
||||
setup_scroll();
|
||||
for(y=beginy;y<beginy+view_len;++y){
|
||||
for(x=0;x<wid;++x){
|
||||
attr=A_NORMAL;
|
||||
if(y==py && x==px)
|
||||
if(y==py && x==px){
|
||||
attr |= A_STANDOUT;
|
||||
|
||||
if(board[y][x]<0)
|
||||
prnt='.';
|
||||
else if(!board[y][x])
|
||||
prnt=' ';
|
||||
else if(board[y][x] < 8){
|
||||
attr |= colors[board[y][x]-1];
|
||||
prnt='0'+board[y][x];
|
||||
}
|
||||
else if(board[y][x]==9){
|
||||
if(get_cell(board,y,x)<0){
|
||||
prnt='.';
|
||||
}
|
||||
else if(!get_cell(board,y,x)){
|
||||
prnt=' ';
|
||||
}
|
||||
else if(get_cell(board,y,x) < 8){
|
||||
attr |= colors[board[y][x]-1];
|
||||
prnt='0'+get_cell(board,y,x);
|
||||
}
|
||||
else if(get_cell(board,y,x)==9){
|
||||
attr |= colors[3];
|
||||
prnt='P';
|
||||
}
|
||||
else if(board[y][x]>9)
|
||||
else if(get_cell(board,y,x)>9){
|
||||
prnt='?';
|
||||
|
||||
mvaddch(sy+1+y,sx+x*2+1,attr|prnt);
|
||||
}
|
||||
mvaddch(sy+1+(y-beginy),sx+x*2+1,attr|prnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
//show the mines
|
||||
void drawmines(int sy,int sx,byte board[len][wid],bool mines[len][wid]){
|
||||
void drawmines(int sy,int sx,byte board[len][wid],byte mines[len][wid]){
|
||||
int y,x;
|
||||
for(y=0;y<len;++y){
|
||||
setup_scroll();
|
||||
for(y=beginy;y<beginy+view_len;++y){
|
||||
for(x=0;x<wid;++x){
|
||||
if(mines[y][x]){
|
||||
if(y==py&&x==px)
|
||||
mvaddch(sy+y+1,sx+x*2+1,'X');
|
||||
else if(board[y][x]==9)
|
||||
mvaddch(sy+y+1,sx+x*2+1,'%');
|
||||
mvaddch(sy+y-beginy+1,sx+x*2+1,'X');
|
||||
else if(get_cell(board,y,x)==9)
|
||||
mvaddch(sy+y-beginy+1,sx+x*2+1,'%');
|
||||
else
|
||||
mvaddch(sy+y+1,sx+x*2+1,'*');
|
||||
mvaddch(sy+y-beginy+1,sx+x*2+1,'*');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//place mines
|
||||
void mine(bool mines[len][wid]){
|
||||
void mine(byte mines[len][wid]){
|
||||
int y=rand()%len;
|
||||
int x=rand()%wid;
|
||||
mines[py][px]=1;//so it doesn't place mines where you click first
|
||||
@ -111,7 +134,7 @@ void mine(bool mines[len][wid]){
|
||||
mines[py][px]=0;
|
||||
}
|
||||
|
||||
bool click(byte board[len][wid],bool mines[len][wid],int ty,int tx){
|
||||
byte click(byte board[len][wid],byte mines[len][wid],int ty,int tx){
|
||||
if(board[ty][tx]>=0 && board[ty][tx] <9)//it has been click()ed before
|
||||
return 0;
|
||||
else{//untouched
|
||||
@ -281,7 +304,7 @@ int main(int argc, char** argv){
|
||||
|
||||
}
|
||||
byte board[len][wid];
|
||||
bool mines[len][wid];
|
||||
byte mines[len][wid];
|
||||
char result[70];
|
||||
int input;
|
||||
int sy,sx;
|
||||
@ -397,7 +420,9 @@ int main(int argc, char** argv){
|
||||
}
|
||||
}
|
||||
drawmines(sy+3,sx+0,board,mines);
|
||||
mvprintw(sy+len+5,sx+0,"%s Wanna play again?(y/n)",result);
|
||||
move(sy+view_len+5,sx+0);
|
||||
printw("%s Wanna play again?(y/n)",result);
|
||||
|
||||
curs_set(1);
|
||||
input=getch();
|
||||
if(input != 'N' && input != 'n' && input != 'q')
|
||||
|
44
redsquare.c
44
redsquare.c
@ -24,7 +24,7 @@ You should have received a copy of the CC0 Public Domain Dedication along with t
|
||||
#define DEAD 0
|
||||
#define ALIVE 1
|
||||
#define RED 2
|
||||
|
||||
#define EMPTY_LINES 7
|
||||
int level;
|
||||
byte py,px;
|
||||
byte cy,cx;//cross
|
||||
@ -43,19 +43,36 @@ void logo(void){
|
||||
addstr("|_) (_\n");
|
||||
addstr("| \\ED_)QUARE");
|
||||
}
|
||||
|
||||
int beginy,view_len;
|
||||
byte setup_scroll(){
|
||||
beginy=0;
|
||||
if(0<py+3-(LINES-EMPTY_LINES)){
|
||||
beginy=py+3-(LINES-EMPTY_LINES);
|
||||
}
|
||||
view_len=LEN;
|
||||
if(LINES-EMPTY_LINES<LEN){
|
||||
view_len=LINES-EMPTY_LINES;
|
||||
}
|
||||
if(beginy+view_len>LEN){
|
||||
beginy-=beginy+view_len-LEN;
|
||||
}
|
||||
}
|
||||
|
||||
void rectangle(int sy,int sx){
|
||||
for(int y=0;y<=LEN;++y){
|
||||
setup_scroll();
|
||||
for(int y=0;y<=view_len;++y){
|
||||
mvaddch(sy+y,sx,ACS_VLINE);
|
||||
mvaddch(sy+y,sx+WID+1,ACS_VLINE);
|
||||
}
|
||||
for(int x=0;x<=WID;++x){
|
||||
mvaddch(sy,sx+x,ACS_HLINE);
|
||||
mvaddch(sy+LEN+1,sx+x,ACS_HLINE);
|
||||
mvaddch(sy+view_len+1,sx+x,ACS_HLINE);
|
||||
}
|
||||
mvaddch(sy,sx,ACS_ULCORNER);
|
||||
mvaddch(sy+LEN+1,sx,ACS_LLCORNER);
|
||||
mvaddch(sy+view_len+1,sx,ACS_LLCORNER);
|
||||
mvaddch(sy,sx+WID+1,ACS_URCORNER);
|
||||
mvaddch(sy+LEN+1,sx+WID+1,ACS_LRCORNER);
|
||||
mvaddch(sy+view_len+1,sx+WID+1,ACS_LRCORNER);
|
||||
}
|
||||
void count(byte board[LEN][WID]){
|
||||
byte y,x;
|
||||
@ -69,24 +86,29 @@ void count(byte board[LEN][WID]){
|
||||
}
|
||||
}
|
||||
}
|
||||
byte get_cell(byte board[LEN][WID],int y,int x){
|
||||
return board[(y+LEN)%LEN][(x+WID)%WID];
|
||||
}
|
||||
|
||||
//display
|
||||
void draw(byte board[RLEN][RWID]){
|
||||
rectangle(3,0);
|
||||
chtype prnt;
|
||||
byte y,x;
|
||||
for(y=0;y<LEN;++y){
|
||||
setup_scroll();
|
||||
for(y=beginy;y<beginy+view_len;++y){
|
||||
for(x=0;x<WID;++x){
|
||||
if(y==cy && x==cx){
|
||||
prnt='X';
|
||||
if(board[y][x]==ALIVE)
|
||||
if(get_cell(board,y,x)==ALIVE)
|
||||
prnt|=A_STANDOUT;
|
||||
else if(board[y][x]==RED)
|
||||
else if(get_cell(board,y,x)==RED)
|
||||
prnt|=colors[3]|A_STANDOUT;
|
||||
}
|
||||
else{
|
||||
if(board[y][x]==ALIVE)
|
||||
if(get_cell(board,y,x)==ALIVE)
|
||||
prnt=ACS_BLOCK;
|
||||
else if(board[y][x]==RED){
|
||||
else if(get_cell(board,y,x)==RED){
|
||||
if(coherent)
|
||||
prnt=' '|A_STANDOUT|colors[3];
|
||||
else
|
||||
@ -95,7 +117,7 @@ void draw(byte board[RLEN][RWID]){
|
||||
else
|
||||
prnt=' ';
|
||||
}
|
||||
mvaddch(4+y,x+1,prnt);
|
||||
mvaddch(4+y-beginy,x+1,prnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user