diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..612ebd6 --- /dev/null +++ b/main.cpp @@ -0,0 +1,186 @@ +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +#define termMaxX 145 +#define termMaxY 36 +#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<30;i++){ + for(int j=0;j<100;j++){ + if(i==0||i==29){ + SetCursorPosition(j,i); + printf("\033[45m \033[0m"); + } + else if(j==0||j==99){ + SetCursorPosition(j,i); + printf("\033[45m \033[0m"); + } + } + } +} + +int main () { + clock_t start_t,this_t; + start_t=clock(); + int posX[100],posY[100],fruitX,fruitY,ft=0; + int tempX[2],tempY[2]; + 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]=95; + posY[0]=25; + posX[1]=95; + posY[1]=25; + srand(time(NULL)); + fruitX=rand()%98+1; + fruitY=rand()%28+1; + while(1){ //เริ่มเกม + this_t=clock(); + SetCursorPosition(posX[0],posY[0]); + + if(ft<5){//สร้างงูรอบแรกสุด + drawSnake(); + drawFrame(); + ft++; + } + input=getch();//รับจากแป้นพิมพ์ + if(input=='x'){ + break; + } + if(input=='a'||input==leftArrow){ + if((posX[0]>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*15; + 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'; + } + } + else 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_t=this_t; + } + SetCursorPosition(fruitX,fruitY); + printf("0"); + //system("((speaker-test -t sine -f 700)& pid=$!; sleep 0.1s; kill -9 $pid) > /dev/null"); + } + return(0); +}