#include #include #include #include #include #include #include using namespace std; #define termMaxX 145 #define termMaxY 36 #define paMaxX 100 #define paMaxY 30 #define upArrow 65 #define downArrow 66 #define rightArrow 67 #define leftArrow 68 void drawVoid(){ printf("\033[1;32m\033[40m \033[0m"); //\033[1;32m green text,\033[40m black bg, display " ",\033[0m set default } void drawSnake(){ printf("\033[1;32m\033[40m*\033[0m"); //\033[1;32m green text,\033[40m black bg, display *,\033[0m set default } void SetCursorPosition(int XPos, int YPos) { printf("\033[%d;%dH",YPos+1,XPos+1); } void moveSnake(int deltaX, int deltaY, int posX[100], int posY[100], int tempX[2], int tempY[2]){ tempX[0]=posX[0]+deltaX; tempY[0]=posY[0]+deltaY; bool sw=0; for(int i=0;(posX[i]!=-1)&&(posY[i]!=-1);i++){ if((posX[i+1]==-1)&&(posY[i+1]==-1)){ SetCursorPosition(posX[i],posY[i]); drawVoid(); } if(sw==0){ tempX[1]=posX[i]; tempY[1]=posY[i]; posX[i]=tempX[0]; posY[i]=tempY[0]; SetCursorPosition(posX[i],posY[i]); drawSnake(); sw=1; } else if(sw==1){ tempX[0]=posX[i]; tempY[0]=posY[i]; posX[i]=tempX[1]; posY[i]=tempY[1]; SetCursorPosition(posX[i],posY[i]); drawSnake(); sw=0; } } } void drawFrame(){ for(int i=0;i=10){ scoreShift++; temp=temp/10; } SetCursorPosition(((paMaxX/2)-5)-(scoreShift/2),(paMaxY/2)+3); printf("Score: %d", score); SetCursorPosition((paMaxX/2)-11,(paMaxY/2)+8); printf("\033[1;5mPRESS ANY KEY TO EXIT"); } int game(){ clock_t start_t,this_t,start; start_t=clock(); start=start_t; int posX[100],posY[100],fruitX,fruitY,snakeLength=2,ft=0,bombX[100],bombY[100],bombAmount=3,bombLoop=1; int tempX[2],tempY[2]; bool bombShown[100]; double thistimeMillisec; srand(time(NULL)); /*for(int j=0;j<20;j++){ star[0][j]=rand()%4+2;//2-5 }*/ char input,lastInput; initscr(); cbreak(); noecho(); scrollok(stdscr, TRUE); nodelay(stdscr, TRUE); //sleep(1);//รอโปรแกรมเปิด start_color(); init_pair(1,COLOR_WHITE, COLOR_BLACK); wbkgd(stdscr, COLOR_PAIR(1)); printf("\e[?25l");//ปิดcursor for(int i=0;i<100;i++){ posX[i]=-1; posY[i]=-1; } posX[0]=paMaxX/2; posY[0]=paMaxY/2; posX[1]=paMaxX/2; posY[1]=(paMaxX/2)+1; srand(time(NULL)); fruitX=rand()%96+2; fruitY=rand()%26+2; for(int i=0;i<100;i++){ bombX[i]=rand()%98+1; bombY[i]=rand()%28+1; for(int j=0;j=1)&&(lastInput!='d')){ moveSnake(-1,0,posX,posY,tempX,tempY); lastInput='a'; } } else if(input=='d'||input==rightArrow){ if((posX[0]<=98)&&(lastInput!='a')){ moveSnake(1,0,posX,posY,tempX,tempY); lastInput='d'; } } else if(input=='w'||input==upArrow){ if((posY[0]>=1)&&(lastInput!='s')){ moveSnake(0,-1,posX,posY,tempX,tempY); lastInput='w'; } } else if(input=='s'||input==downArrow){ if((posY[0]<=28)&&(lastInput!='w')){ moveSnake(0,1,posX,posY,tempX,tempY); lastInput='s'; } } else if(input=='b'){ lastInput='0'; } thistimeMillisec=(double)(this_t-start_t)/(double)CLOCKS_PER_SEC*10; if(((int)thistimeMillisec%10)==1){ if(lastInput=='a'){ if(posX[0]>=1){ moveSnake(-1,0,posX,posY,tempX,tempY); lastInput='a'; } } else if(lastInput=='d'){ if(posX[0]<=98){ moveSnake(1,0,posX,posY,tempX,tempY); lastInput='d'; } } if(crashWall(posX[0],posY[0])||crashSnake(posX,posY)){ break; } start_t=this_t; } thistimeMillisec=(double)(this_t-start)/(double)CLOCKS_PER_SEC*7; if(((int)thistimeMillisec%10)==1){ if(lastInput=='w'){ if(posY[0]>=1){ moveSnake(0,-1,posX,posY,tempX,tempY); lastInput='w'; } } else if(lastInput=='s'){ if(posY[0]<=28){ moveSnake(0,1,posX,posY,tempX,tempY); lastInput='s'; } } start=this_t; } if(crashBomb(posX[0],posY[0],bombX,bombY,bombShown)){ break; } if(eatFruit(posX[0],posY[0],fruitX,fruitY)==1){ snakeLength++; fruitX=rand()%96+2; fruitY=rand()%26+2; for(int k=0;bombShown[k]==1;k++){ while(1){ if(fruitX!=bombX[k]){ if(fruitY!=bombY[k]){ break; } } fruitX=rand()%96+2; fruitY=rand()%26+2; } } if(snakeLength<=100){ posX[snakeLength-1]=0; posY[snakeLength-1]=0; } } SetCursorPosition(fruitX,fruitY); printf("0"); //SetCursorPosition(0,29);for(int i=0;i<10;i++){printf("%d:%d %d |",i+1,bombX[i],bombY[i]);} //SetCursorPosition(0,29);for(int a=0;bombShown[a]==1;a++){printf("%d ",bombShown[a]);} //SetCursorPosition(0,29);for(int a=0;a<100;a++){printf("%d ",bombShown[a]);} if(snakeLength-2>=bombAmount){ bombLoop++; bombShown[bombLoop-2]=1; bombAmount=bombLoop*3; } for(int i=0;i<100;i++){ if(bombShown[i]==1){ SetCursorPosition(bombX[i],bombY[i]); printf("\033[1;97m\033[41m \033[0m"); } } //system("((speaker-test -t sine -f 700)& pid=$!; sleep 0.1s; kill -9 $pid) > /dev/null"); } return snakeLength-2; } /*int mainmenu(){ for(int i=0;i