Guest User

[C] GAME SNAKE (FULL TÙY CHỌN)

a guest
Oct 28th, 2020
335
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. const int dx[4]={-1,1,0,0};
  7. const int dy[4]={0,0,-1,1};
  8. struct Diem{
  9.     int x,y;
  10. }s[100],f,db,tg;
  11. FILE *h;
  12. int opt,opt2,opt3,opt4,i,j,k,diem,l,m,p,z,cap,v,d1,ptr,dc[5];
  13. char a[10][18],t;
  14. bool stop,ps,reset_cfg[3];
  15. void textbackground(char x){
  16.     char t[13];
  17.     strcpy(t,"\u001b[");
  18.     switch(x){
  19.         case '0':strcat(t,"40");break;
  20.         case '1':strcat(t,"44");break;
  21.         case '2':strcat(t,"42");break;
  22.         case '3':strcat(t,"46");break;
  23.         case '4':strcat(t,"41");break;
  24.         case '5':strcat(t,"45");break;
  25.         case '6':strcat(t,"43");break;
  26.         case '7':strcat(t,"47");break;
  27.         case '8':strcat(t,"100");break;
  28.         case '9':strcat(t,"104");break;
  29.         case 'A':strcat(t,"102");break;
  30.         case 'B':strcat(t,"106");break;
  31.         case 'C':strcat(t,"101");break;
  32.         case 'D':strcat(t,"105");break;
  33.         case 'E':strcat(t,"103");break;
  34.         case 'F':strcat(t,"107");break;
  35.     }
  36.     strcat(t,"m");
  37.     printf("%s",t);
  38. }
  39. void textcolor(char x){
  40.     char t[13];
  41.     strcpy(t,"\u001b[");
  42.     switch(x){
  43.         case '0':strcat(t,"30");break;
  44.         case '1':strcat(t,"34");break;
  45.         case '2':strcat(t,"32");break;
  46.         case '3':strcat(t,"36");break;
  47.         case '4':strcat(t,"31");break;
  48.         case '5':strcat(t,"35");break;
  49.         case '6':strcat(t,"33");break;
  50.         case '7':strcat(t,"37");break;
  51.         case '8':strcat(t,"90");break;
  52.         case '9':strcat(t,"94");break;
  53.         case 'A':strcat(t,"92");break;
  54.         case 'B':strcat(t,"96");break;
  55.         case 'C':strcat(t,"91");break;
  56.         case 'D':strcat(t,"95");break;
  57.         case 'E':strcat(t,"93");break;
  58.         case 'F':strcat(t,"97");break;
  59.     }
  60.     strcat(t,"m");
  61.     printf("%s",t);
  62. }
  63. void delay(int ms){
  64.     clock_t start_time=clock();
  65.     while (clock()<start_time+ms);
  66. }
  67. void hoan_doi(int &a,int &b){
  68.     int tg;
  69.     tg=a;
  70.     a=b;
  71.     b=tg;
  72. }
  73. int empty_file(const char *x){
  74.     h=fopen(x,"r");
  75.     if (h!=NULL){
  76.         fseek(h,0,SEEK_END);
  77.         if (ftell(h)==0) return 1;
  78.         else return 0;
  79.         fclose(h);
  80.     }
  81.     return 0;
  82. }
  83. bool kt(){
  84.     for (i=0;i<l;i++)
  85.         if ((f.x==s[i].x)&&(f.y==s[i].y)){
  86.             a[f.x][f.y]='*';
  87.             return false;
  88.         }
  89.     return true;
  90. }
  91. bool kt2(){
  92.     for (i=0;i<l;i++)
  93.         if ((s[i].x==db.x)&&(s[i].y==db.y)){
  94.             a[db.x][db.y]='*';
  95.             return false;
  96.         }
  97.     return true;
  98. }
  99. bool kt22(){
  100.     for (i=0;i<7;i++)
  101.         for (j=0;j<15;j++)
  102.             if ((strncmp(&a[i+1][j+1],"  ",2)==0)&&(strncmp(&a[i+2][j+1],"  ",2)==0)) return true;
  103.     return false;
  104. }
  105. bool kt2A(){
  106.     for (i=0;i<l;i++)
  107.         if ((s[i].x==db.x)&&(s[i].y==db.y)){
  108.             a[db.x][db.y]='*';
  109.             return false;
  110.         }
  111.         else if ((s[i].x==db.x+1)&&(s[i].y==db.y)){
  112.             a[db.x+1][db.y]='*';
  113.             return false;
  114.         }
  115.         else if ((s[i].x==db.x)&&(s[i].y==db.y+1)){
  116.             a[db.x][db.y+1]='*';
  117.             return false;
  118.         }
  119.         else if ((s[i].x==db.x+1)&&(s[i].y==db.y+1)){
  120.             a[db.x+1][db.y+1]='*';
  121.             return false;
  122.         }
  123.     if ((a[db.x][db.y]=='+')||(a[db.x+1][db.y]=='+')||(a[db.x][db.y+1]=='+')||(a[db.x+1][db.y+1]=='+')) return false;
  124.     return true;
  125. }
  126. bool kt3(){
  127.     if (((f.x==db.x)&&(f.y==db.y))||((f.x==db.x+1)&&(f.y==db.y))||((f.x==db.x)&&(f.y==db.y+1))||((f.x==db.x+1)&&(f.y==db.y+1))) return true;
  128.     else return false;
  129. }
  130. void on_preload(){
  131.     h=fopen("cfg.ini","r");
  132.     if (h==NULL){
  133.         h=fopen("cfg.ini","w");
  134.         fprintf(h,"%d %d %d",1,1,0);
  135.         fclose(h);
  136.     }
  137.     h=fopen("save.ini","r");
  138.     if (h==NULL){
  139.         h=fopen("save.ini","w");
  140.         fclose(h);
  141.     }
  142.     system("attrib -r cfg.ini");
  143.     system("attrib -r save.ini");
  144.     h=fopen("hi0.txt","r");
  145.     if (h==NULL){
  146.         h=fopen("hi0.txt","w");
  147.         fclose(h);
  148.     }
  149.     h=fopen("hi1.txt","r");
  150.     if (h==NULL){
  151.         h=fopen("hi1.txt","w");
  152.         fclose(h);
  153.     }
  154.     h=fopen("hi2.txt","r");
  155.     if (h==NULL){
  156.         h=fopen("hi2.txt","w");
  157.         fclose(h);
  158.     }
  159.     opt=1;
  160.     for (i=0;i<3;i++) reset_cfg[i]=false;
  161. }
  162. void on_load(){
  163.     h=fopen("cfg.ini","r");
  164.     fscanf(h,"%d %d %d",&cap,&m,&z);
  165.     fclose(h);
  166. }
  167. void doc_trang_thai(const char *x){
  168.     h=fopen(x,"r");
  169.     fscanf(h,"%d %d %d",&cap,&m,&z);
  170.     fscanf(h,"%d %d",&diem,&l);
  171.     fscanf(h,"%d",&k);
  172.     fscanf(h,"%d %d %d %d %d %d",&f.x,&f.y,&db.x,&db.y,&v,&d1);
  173.     for (i=0;i<l;i++) fscanf(h,"%d %d",&s[i].x,&s[i].y);
  174.     fclose(h);
  175. }
  176. void ghi_trang_thai(const char *x){
  177.     h=fopen(x,"w");
  178.     fprintf(h,"%d %d %d\n",cap,m,z);
  179.     fprintf(h,"%d %d\n",diem,l);
  180.     fprintf(h,"%d\n",k);
  181.     fprintf(h,"%d %d %d %d %d %d\n",f.x,f.y,db.x,db.y,v,d1);
  182.     for (i=0;i<l;i++) fprintf(h,"%d %d\n",s[i].x,s[i].y);
  183.     fclose(h);
  184. }
  185. void doc_diem_cao(const char *x){
  186.     h=fopen(x,"r");
  187.     for(i=0;i<5;i++) fscanf(h,"%d",&dc[i]);
  188.     fclose(h);
  189. }
  190. void ghi_diem_cao(const char *x){
  191.     h=fopen(x,"w");
  192.     for(i=0;i<5;i++) fprintf(h,"%d\n",dc[i]);
  193.     fclose(h);
  194. }
  195. void on_exit(){
  196.     h=fopen("cfg.ini","w");
  197.     fprintf(h,"%d %d %d",cap,m,z);
  198.     fclose(h);
  199. }
  200. void khung(){
  201.     printf("%04d\n",diem);
  202.     for (i=0;i<10;i++){
  203.         for (j=0;j<18;j++)
  204.             if ((i==0)||(i==9)||(j==0)||(j==17)) a[i][j]='#';
  205.             else a[i][j]=' ';
  206.     }
  207. }
  208. void ve_me_cung(){
  209.     switch(z){
  210.         case 1:
  211.             for (i=0;i<8;i++)
  212.                 for (j=0;j<16;j++)
  213.                     if ((i==0)||(i==7)||(j==0)||(j==15)) a[i+1][j+1]='+';
  214.             break;
  215.         case 2:{
  216.             for (i=0;i<16;i++)
  217.                 if (((i>=0)&&(i<=2))||((i>=13)&&(i<=15))) a[1][i+1]='+';
  218.             for (i=1;i<7;i++)
  219.                 if ((i==1)||(i==2)||(i==5)||(i==6)){
  220.                     a[i+1][1]='+';
  221.                     a[i+1][16]='+';
  222.                 }
  223.             for (i=0;i<16;i++)
  224.                 if (((i>=0)&&(i<=2))||((i>=13)&&(i<=15))) a[8][i+1]='+';
  225.             for (i=4;i<12;i++){
  226.                 a[3][i+1]='+';
  227.                 a[6][i+1]='+';
  228.             }
  229.             break;
  230.         }
  231.         case 3:{
  232.             for (i=0;i<5;i++) a[i+1][5]='+';
  233.             for (i=10;i<16;i++) a[2][i+1]='+';
  234.             for (i=3;i<8;i++) a[i+1][11]='+';
  235.             for (i=0;i<5;i++) a[7][i+1]='+';
  236.             break;
  237.         }
  238.         case 4:{
  239.             for (i=0;i<16;i++) a[1][i+1]='+';
  240.             for (i=1;i<7;i++)
  241.                 if ((i==1)||(i==2)||(i==5)||(i==6)){
  242.                     a[i+1][1]='+';
  243.                     a[i+1][16]='+';
  244.                 }
  245.             for (i=0;i<16;i++) a[8][i+1]='+';
  246.             for (i=3;i<13;i++){
  247.                 a[3][i+1]='+';
  248.                 a[6][i+1]='+';
  249.             }
  250.             break;
  251.         }
  252.         case 5:{
  253.             a[1][1]='+';
  254.             a[1][2]='+';
  255.             a[2][1]='+';
  256.             for (i=4;i<13;i++) a[1][i+1]='+';
  257.             a[2][7]='+';
  258.             a[3][7]='+';
  259.             for (i=0;i<16;i++){
  260.                 if ((i!=7)&&(i!=8)) a[4][i+1]='+';
  261.                 a[6][i+1]='+';
  262.             }
  263.             a[7][10]='+';
  264.             a[8][10]='+';
  265.             break;
  266.         }
  267.     }
  268.     p=0;
  269.     for (i=0;i<8;i++)
  270.         for (j=0;j<16;j++)
  271.             if (a[i+1][j+1]=='+') p++;
  272. }
  273. void in_mt(){
  274.     for (i=0;i<10;i++){
  275.         for (j=0;j<18;j++){
  276.             if ((s[l-1].x==i)&&(s[l-1].y==j)) textcolor('F');
  277.             printf("%c",a[i][j]);
  278.             printf("\u001b[0m");
  279.         }
  280.         printf("\n");
  281.     }
  282. }
  283. void tao(){
  284.     do{
  285.         f.x=rand()%8+1;
  286.         f.y=rand()%16+1;
  287.     }while ((kt()==false)||(a[f.x][f.y]=='+')||(a[f.x][f.y]=='1'));
  288.     a[f.x][f.y]='0';
  289. }
  290. void tao_db(){
  291.     do{
  292.         db.x=rand()%8+1;
  293.         db.y=rand()%16+1;
  294.     }while ((kt2()==false)||(a[db.x][db.y]=='+')||(a[db.x][db.y]=='0'));
  295.     a[db.x][db.y]='1';
  296. }
  297. void tao_db_2x2(){
  298.     do{
  299.         db.x=rand()%7+1;
  300.         db.y=rand()%15+1;
  301.     }while ((kt2A()==false)||(kt22()==false));
  302.     if ((f.x==db.x)&&(f.y==db.y)) a[db.x][db.y]='2';
  303.     else a[db.x][db.y]='1';
  304.     if ((f.x==db.x+1)&&(f.y==db.y)) a[db.x+1][db.y]='2';
  305.     else a[db.x+1][db.y]='1';
  306.     if ((f.x==db.x)&&(f.y==db.y+1)) a[db.x][db.y+1]='2';
  307.     else a[db.x][db.y+1]='1';
  308.     if ((f.x==db.x+1)&&(f.y==db.y+1)) a[db.x+1][db.y+1]='2';
  309.     else a[db.x+1][db.y+1]='1';
  310.     v=1;
  311. }
  312. void xoa_db(){
  313.     if ((v==1)&&((a[db.x][db.y]=='1')||(a[db.x+1][db.y]=='1')||(a[db.x][db.y+1]=='1')||(a[db.x+1][db.y+1]=='1'))){
  314.         a[db.x][db.y]=' ';
  315.         a[db.x+1][db.y]=' ';
  316.         a[db.x][db.y+1]=' ';
  317.         a[db.x+1][db.y+1]=' ';
  318.         if ((s[l-1].x==db.x)&&(s[l-1].y==db.y)) a[db.x][db.y]='*';
  319.         else if ((s[l-1].x==db.x+1)&&(s[l-1].y==db.y)) a[db.x+1][db.y]='*';
  320.         else if ((s[l-1].x==db.x)&&(s[l-1].y==db.y+1)) a[db.x][db.y+1]='*';
  321.         else if ((s[l-1].x==db.x+1)&&(s[l-1].y==db.y+1)) a[db.x+1][db.y+1]='*';
  322.     }
  323.     else if ((v==1)&&((a[db.x][db.y]=='2')||(a[db.x+1][db.y]=='2')||(a[db.x][db.y+1]=='2')||(a[db.x+1][db.y+1]=='2'))){
  324.         a[db.x][db.y]=' ';
  325.         a[db.x+1][db.y]=' ';
  326.         a[db.x][db.y+1]=' ';
  327.         a[db.x+1][db.y+1]=' ';
  328.         if ((s[l-1].x==db.x)&&(s[l-1].y==db.y)) a[db.x][db.y]='*';
  329.         else if ((s[l-1].x==db.x+1)&&(s[l-1].y==db.y)) a[db.x+1][db.y]='*';
  330.         else if ((s[l-1].x==db.x)&&(s[l-1].y==db.y+1)) a[db.x][db.y+1]='*';
  331.         else if ((s[l-1].x==db.x+1)&&(s[l-1].y==db.y+1)) a[db.x+1][db.y+1]='*';
  332.     }
  333.     else if ((a[db.x][db.y]=='1')||(a[db.x][db.y]=='2')) a[db.x][db.y]=' ';
  334.     db.x=0;
  335.     db.y=0;
  336.     d1=0;
  337.     v=0;
  338. }
  339. void cap_nhat(){
  340.     system("cls");
  341.     printf("%04d\n",diem);
  342.     in_mt();
  343.     for (i=0;i<13;i++) printf("\n");
  344.     printf("%c/%c/%c/%c: Dieu khien \t ESC: Tam dung",30,31,17,16);
  345. }
  346. void luu_diem(){
  347.     switch(m){
  348.         case 1:doc_diem_cao("hi0.txt");break;
  349.         case 2:doc_diem_cao("hi1.txt");break;
  350.         case 3:doc_diem_cao("hi2.txt");break;
  351.     }
  352.     if (diem<=dc[4]) printf("Diem cua ban:%d",diem);
  353.     else if ((diem>dc[4])&&(diem<=dc[0])) printf("Diem cao:%d",diem);
  354.     else printf("Diem cao nhat:%d",diem);
  355.     if (diem>dc[4]) dc[4]=diem;
  356.     for (i=0;i<4;i++)
  357.         for (j=i+1;j<5;j++)
  358.             if (dc[i]<dc[j]) hoan_doi(dc[i],dc[j]);
  359.     switch(m){
  360.         case 1:ghi_diem_cao("hi0.txt");break;
  361.         case 2:ghi_diem_cao("hi1.txt");break;
  362.         case 3:ghi_diem_cao("hi2.txt");break;
  363.     }
  364. }
  365. void khoi_tao(){
  366.     l=2;
  367.     if (m==1) z=0;
  368.     else if ((m==3)&&(z!=1)) z=1;
  369.     if (z==3) s[0].x=3;
  370.     else s[0].x=5;
  371.     s[0].y=8;
  372.     if (z==3) s[1].x=3;
  373.     else s[1].x=5;
  374.     s[1].y=9;
  375.     k=3;
  376.     a[s[0].x][s[0].y]='*';
  377.     a[s[1].x][s[1].y]='*';
  378.     stop=false;
  379.     ps=false;
  380. }
  381. void hoan_thanh(){
  382.     delay(1000);
  383.     for (i=0;i<6;i++){
  384.         system("color 70");
  385.         delay(100);
  386.         system("color 07");
  387.         delay(100);
  388.     }
  389. }
  390. void tiep_theo(){
  391.     hoan_thanh();
  392.     system("cls");
  393.     khung();
  394.     l=2;
  395.     z++;
  396.     if (z==3) s[0].x=3;
  397.     else s[0].x=5;
  398.     s[0].y=8;
  399.     if (z==3) s[1].x=3;
  400.     else s[1].x=5;
  401.     s[1].y=9;
  402.     k=3;
  403.     a[s[0].x][s[0].y]='*';
  404.     a[s[l-1].x][s[l-1].y]='*';
  405.     stop=false;
  406.     ps=true;   
  407.     ve_me_cung();
  408.     tao();
  409.     in_mt();
  410.     for (i=0;i<13;i++) printf("\n");
  411.     printf("%c/%c/%c/%c: Dieu khien \t ESC: Tam dung",30,31,17,16);
  412.     ghi_trang_thai("save.ini");
  413.     delay(720-65*cap);
  414.     while (ps==true){
  415.         t=getch();
  416.         if (t==27) break;
  417.         else if (t==-32){
  418.             t=getch();
  419.             if ((t==72)&&(k!=1)) k=0;
  420.             else if ((t==80)&&(k!=0)) k=1;
  421.             else if ((t==75)&&(k!=3)) k=2;
  422.             else if ((t==77)&&(k!=2)) k=3;
  423.             ps=false;
  424.         }
  425.         else ps=true;
  426.     }
  427. }
  428. void di_chuyen(int k){
  429.     if (d1>0) d1--;
  430.     if (d1==0) xoa_db();
  431.     tg=s[0];
  432.     a[s[0].x][s[0].y]=' ';
  433.     for (i=0;i<l-1;i++){
  434.         s[i]=s[i+1];
  435.         a[s[i].x][s[i].y]='*';
  436.     }
  437.     s[l-1].x=s[l-2].x+dx[k];
  438.     s[l-1].y=s[l-2].y+dy[k];
  439.     if (s[l-1].x==0) s[l-1].x=8;
  440.     else if (s[l-1].x==9) s[l-1].x=1;
  441.     if (s[l-1].y==0) s[l-1].y=16;
  442.     else if (s[l-1].y==17) s[l-1].y=1;
  443.     if (a[s[l-1].x][s[l-1].y]=='+') stop=true;
  444.     a[s[l-1].x][s[l-1].y]='*';
  445.     if ((s[l-1].x==f.x)&&(s[l-1].y)==f.y){
  446.         if ((m!=3)||((m==3)&&(l<15))) diem+=cap;
  447.         if (diem>9999) diem=9999;
  448.         if ((((z==0)||(z==3))&&(l<100))||((z!=0)&&(z!=3)&&(l<126-p))){
  449.             l++;
  450.             for (i=l-1;i>=0;i--) s[i+1]=s[i];
  451.             s[0]=tg;
  452.             a[s[0].x][s[0].y]='*';
  453.             if ((m!=3)||((m==3)&&(l<15))) tao();
  454.             if ((l>2)&&(l%5==2)){
  455.                 if (d1>0) xoa_db();
  456.                 if (kt22()==true) tao_db_2x2();
  457.                 else tao_db();
  458.                 d1=14;
  459.             }
  460.             if ((m==3)&&(l==15)) xoa_db();
  461.         }
  462.         else tao();
  463.     }
  464.     if (v==1)
  465.         if (((s[l-1].x==db.x)&&(s[l-1].y==db.y))||((s[l-1].x==db.x+1)&&(s[l-1].y==db.y))||((s[l-1].x==db.x)&&(s[l-1].y==db.y+1))||((s[l-1].x==db.x+1)&&(s[l-1].y==db.y+1))){
  466.             diem+=(d1*5-rand()%5)*cap;
  467.             xoa_db();
  468.         }
  469.     else if ((s[l-1].x==db.x)&&(s[l-1].y==db.y)){
  470.         diem+=(d1*5-rand()%5)*cap;
  471.         xoa_db();
  472.     }
  473.     if ((f.x!=0)&&(f.y!=0)&&(a[f.x][f.y]==' ')) a[f.x][f.y]='0';
  474.     for (i=0;i<l-1;i++)
  475.         for (j=i+1;j<l;j++)
  476.             if ((s[i].x==s[j].x)&&(s[i].y==s[j].y)){
  477.                 stop=true;
  478.                 break;
  479.             }
  480.     cap_nhat();
  481.     if (stop==true) delay(3500);
  482. }
  483. void van_moi(){
  484.     system("cls 2>save.ini");
  485.     diem=0;
  486.     khung();
  487.     khoi_tao();
  488.     ve_me_cung();
  489.     tao();
  490.     in_mt();
  491.     for (i=0;i<13;i++) printf("\n");
  492.     printf("%c/%c/%c/%c: Dieu khien \t ESC: Tam dung",30,31,17,16);
  493.     delay(720-65*cap);
  494.     while (ps==false){
  495.         if (kbhit()==true){
  496.             t=getch();
  497.             if (t==-32){
  498.                 t=getch();
  499.                 if ((t==72)&&(k!=1)) k=0;
  500.                 else if ((t==80)&&(k!=0)) k=1;
  501.                 else if ((t==75)&&(k!=3)) k=2;
  502.                 else if ((t==77)&&(k!=2)) k=3;
  503.             }
  504.             else if (t==27){
  505.                 if (stop==false){
  506.                     ghi_trang_thai("save.ini");
  507.                     ps=true;
  508.                     opt--;
  509.                 }
  510.                 else{
  511.                     system("cls 2>save.ini");
  512.                     luu_diem();
  513.                 }
  514.                 opt=1;
  515.                 break;
  516.             }
  517.         }
  518.         if (stop==false){
  519.             if ((kbhit()==false)||!((t==-32)&&((t==72)||(t==80)||(t==75)||(t==77)))){
  520.                 di_chuyen(k);
  521.                 delay(720-65*cap);
  522.             }
  523.             if ((m==3)&&(l==15))
  524.                 if (z<5) tiep_theo();
  525.                 else{
  526.                     stop=true;
  527.                     delay(1000);
  528.                 }
  529.         }
  530.         else{
  531.             system("cls 2>save.ini");
  532.             if ((m==3)&&(z==5)&&(l==15)) printf("\t----CHIEN DICH DA HOAN THANH----\n");
  533.             else printf("\t----GAME OVER----\n");
  534.             luu_diem();
  535.             printf("\nXin vui long doi de quay lai menu");
  536.             delay(3500);
  537.             opt=1;
  538.             break;
  539.         }
  540.     }
  541. }
  542. void tiep_tuc(){
  543.     system("cls");
  544.     doc_trang_thai("save.ini");
  545.     khung();
  546.     ve_me_cung();
  547.     for (i=0;i<l;i++) a[s[i].x][s[i].y]='*';
  548.     if ((f.x!=0)&&(f.y!=0)) a[f.x][f.y]='0';
  549.     if ((db.x!=0)&&(db.y!=0)){
  550.         if (v==1){
  551.             if ((f.x==db.x)&&(f.y==db.y)) a[db.x][db.y]='2';
  552.             else a[db.x][db.y]='1';
  553.             if ((f.x==db.x+1)&&(f.y==db.y)) a[db.x+1][db.y]='2';
  554.             else a[db.x+1][db.y]='1';
  555.             if ((f.x==db.x)&&(f.y==db.y+1)) a[db.x][db.y+1]='2';
  556.             else a[db.x][db.y+1]='1';
  557.             if ((f.x==db.x+1)&&(f.y==db.y+1)) a[db.x+1][db.y+1]='2';
  558.             else a[db.x+1][db.y+1]='1';
  559.         }
  560.         else a[db.x][db.y]='1';
  561.     }
  562.     stop=false;
  563.     ps=true;
  564.     cap_nhat();
  565.     delay(720-65*cap);
  566.     while (ps==true){
  567.         t=getch();
  568.         if (t==27) break;
  569.         else if (t==-32){
  570.             t=getch();
  571.             if ((t==72)&&(k!=1)) k=0;
  572.             else if ((t==80)&&(k!=0)) k=1;
  573.             else if ((t==75)&&(k!=3)) k=2;
  574.             else if ((t==77)&&(k!=2)) k=3;
  575.             ps=false;
  576.         }
  577.         else ps=true;
  578.     }
  579.     while (ps==false){
  580.         if (kbhit()==true){
  581.             t=getch();
  582.             if (t==-32){
  583.                 t=getch();
  584.                 if ((t==72)&&(k!=1)) k=0;
  585.                 else if ((t==80)&&(k!=0)) k=1;
  586.                 else if ((t==75)&&(k!=3)) k=2;
  587.                 else if ((t==77)&&(k!=2)) k=3;
  588.             }
  589.             else if (t==27){
  590.                 if (stop==false){
  591.                     ghi_trang_thai("save.ini");
  592.                     ps=true;
  593.                 }
  594.                 else{
  595.                     system("cls 2>save.ini");
  596.                     luu_diem();
  597.                 }
  598.                 opt=1;
  599.                 break;
  600.             }
  601.         }
  602.         if (stop==false){
  603.             if ((kbhit()==false)||!((t==-32)&&((t==72)||(t==80)||(t==75)||(t==77)))){
  604.                 di_chuyen(k);
  605.                 delay(720-65*cap);
  606.             }
  607.             if ((m==3)&&(l==15))
  608.                 if (z<5) tiep_theo();
  609.                 else{
  610.                     stop=true;
  611.                     delay(1000);
  612.                 }
  613.         }
  614.         else{
  615.             system("cls 2>save.ini");
  616.             if ((m==3)&&(z==5)&&(l==15)) printf("\t----CHIEN DICH DA HOAN THANH----\n");
  617.             else printf("\t----GAME OVER----\n");
  618.             luu_diem();
  619.             printf("\nXin vui long doi de quay lai menu");
  620.             delay(3500);
  621.             opt=1;
  622.             break;
  623.         }
  624.     }
  625. }
  626. void cap_do(){
  627.     ptr=cap;
  628.     while (true){
  629.         system("cls");
  630.         printf("\t----SNAKE >> CAP DO----\n");
  631.         for (i=0;i<4;i++) printf("\n");
  632.         printf("\t  ");
  633.         for (i=0;i<19;i++) printf("-");
  634.         printf("\n");
  635.         printf("\t%d | ",ptr);
  636.         for (i=0;i<ptr;i++){
  637.             textbackground('3');
  638.             textcolor('0');
  639.             printf(" \u001b[0m ");
  640.         }
  641.         for (i=0;i<8-ptr;i++){
  642.             textbackground('0');
  643.             textcolor('B');
  644.             printf(" \u001b[0m ");
  645.         }
  646.         printf("|\n");
  647.         printf("\t  ");
  648.         for (i=0;i<19;i++) printf("-");
  649.         for (i=0;i<17;i++) printf("\n");
  650.         printf("%c/%c: Thay doi tuy chon \t Enter: Xac nhan \t ESC: Quay lai menu",17,16);
  651.         t=getch();
  652.         if (t==-32){
  653.             t=getch();
  654.             if ((t==75)&&(ptr>1)) ptr--;
  655.             else if ((t==77)&&(ptr<8)) ptr++;
  656.         }
  657.         else if ((t==13)||(t==27)) break;
  658.     }
  659.     if (t==13){
  660.         if ((cap!=ptr)&&(empty_file("save.ini")==0)){
  661.             system("cls 2>save.ini");
  662.             opt--;
  663.         }
  664.         cap=ptr;
  665.         on_exit();
  666.     }
  667. }
  668. void menu_me_cung(){
  669.     if (m==3) opt3=0;
  670.     else opt3=z;
  671.     while (true){
  672.         system("cls");
  673.         printf("\t----SNAKE >> CHE DO >> ME CUNG----\n");
  674.         if (opt3==0){
  675.             textbackground('3');
  676.             textcolor('F');
  677.         }
  678.         printf("0. Khong co me cung%61s\u001b[0m\n","");
  679.         if (opt3==1){
  680.             textbackground('3');
  681.             textcolor('F');
  682.         }
  683.         printf("1. Hop%74s\u001b[0m\n","");
  684.         if (opt3==2){
  685.             textbackground('3');
  686.             textcolor('F');
  687.         }
  688.         printf("2. Duong ham%68s\u001b[0m\n","");
  689.         if (opt3==3){
  690.             textbackground('3');
  691.             textcolor('F');
  692.         }
  693.         printf("3. Nha may%70s\u001b[0m\n","");
  694.         if (opt3==4){
  695.             textbackground('3');
  696.             textcolor('F');
  697.         }
  698.         printf("4. Duong ray%68s\u001b[0m\n","");
  699.         if (opt3==5){
  700.             textbackground('3');
  701.             textcolor('F');
  702.         }
  703.         printf("5. Can ho%71s\u001b[0m","");
  704.         for (i=0;i<18;i++) printf("\n");
  705.         printf("%c/%c: Chon muc \t Enter: Xac nhan \t ESC: Quay lai che do",30,31);
  706.         t=getch();
  707.         if ((t==13)||(t==27)) break;
  708.         else if (t==-32){
  709.             t=getch();
  710.             if (t==72) opt3--;
  711.             else if (t==80) opt3++;
  712.         }
  713.         if (opt3<0) opt3=5;
  714.         else if (opt3>5) opt3=0;
  715.     }
  716.     if (t==13){
  717.         if (((m==1)||(m==3)||((m==2)&&(z!=opt3)))&&(empty_file("save.ini")==0)){
  718.             system("cls 2>save.ini");
  719.             opt--;
  720.         }
  721.         m=2;
  722.         z=opt3;
  723.         on_exit();
  724.     }
  725. }
  726. void che_do(){
  727.     opt2=m;
  728.     while (true){
  729.         system("cls");
  730.         printf("\t----SNAKE >> CHE DO----\n");
  731.         if (opt2==1){
  732.             textbackground('3');
  733.             textcolor('F');
  734.         }
  735.         printf("1. Kinh dien%68s\u001b[0m\n","");
  736.         if (opt2==2){
  737.             textbackground('3');
  738.             textcolor('F');
  739.         }
  740.         printf("2. Hien dai%69s\u001b[0m\n","");
  741.         if (opt2==3){
  742.             textbackground('3');
  743.             textcolor('F');
  744.         }
  745.         printf("3. Chien dich%67s\u001b[0m","");
  746.         for (i=0;i<21;i++) printf("\n");
  747.         printf("%c/%c: Chon muc \t Enter: Xac nhan \t ESC: Quay lai menu",30,31);
  748.         t=getch();
  749.         if (t==13){
  750.             if (opt2==2) menu_me_cung();
  751.             else break;
  752.         }
  753.         else if (t==27) break;
  754.         else if (t==-32){
  755.             t=getch();
  756.             if (t==72) opt2--;
  757.             else if (t==80) opt2++;
  758.         }
  759.         if (opt2<1) opt2=3;
  760.         else if (opt2>3) opt2=1;
  761.     }
  762.     if (opt2==1) z=0;
  763.     else if (opt2==3) z=1;
  764.     if (t==13){
  765.         if ((m!=opt2)&&(empty_file("save.ini")==0)){
  766.             system("cls 2>save.ini");
  767.             opt--;
  768.         }
  769.         m=opt2;
  770.         on_exit();
  771.     }
  772. }
  773. void huong_dan(){
  774.     while (true){
  775.         system("cls");
  776.         printf("\t----SNAKE >> HUONG DAN----\n");
  777.         printf("Su dung cac phim mui ten de dieu khien ran. An thuc an ma tranh cham cac chuong \n");
  778.         printf("ngai vat va an thuc an dac biet nhanh chong de ghi them diem.");
  779.         for (i=0;i<22;i++) printf("\n");
  780.         printf("ESC: Quay lai menu");
  781.         if (getch()==27) break;
  782.     }
  783. }
  784. void diem_cao(){
  785.     switch(m){
  786.         case 1:doc_diem_cao("hi0.txt");break;
  787.         case 2:doc_diem_cao("hi1.txt");break;
  788.         case 3:doc_diem_cao("hi2.txt");break;
  789.     }
  790.     while (true){
  791.         system("cls");
  792.         printf("\t----SNAKE >> DIEM CAO----\n");
  793.         for (i=0;i<5;i++) printf("%d:%d\n",i+1,dc[i]);
  794.         for (i=0;i<18;i++) printf("\n");
  795.         printf("ESC: Quay lai menu");
  796.         if (getch()==27) break;
  797.     }
  798. }
  799. void dat_lai(){
  800.     opt4=1;
  801.     while (true){
  802.         system("cls");
  803.         printf("\t----SNAKE >> DAT LAI----\n");
  804.         if (opt4==1){
  805.             textbackground('3');
  806.             textcolor('F');
  807.         }
  808.         printf("1. Thiet lap du lieu%60s\u001b[0m\n","");
  809.         if (opt4==2){
  810.             textbackground('3');
  811.             textcolor('F');
  812.         }
  813.         printf("2. Diem cao%69s\u001b[0m\n","");
  814.         if (opt4==3){
  815.             textbackground('3');
  816.             textcolor('F');
  817.         }
  818.         printf("3. Khoi tao tat ca%62s\u001b[0m","");
  819.         for (i=0;i<21;i++) printf("\n");
  820.         printf("%c/%c: Chon muc \t Enter: Xac nhan \t ESC: Quay lai menu",30,31);
  821.         t=getch();
  822.         if (t==13){
  823.             switch(opt4){
  824.                 case 1:{
  825.                     while (reset_cfg[0]==false){
  826.                         system("cls");
  827.                         printf("\t----SNAKE >> DAT LAI >> XAC NHAN----\n");
  828.                         printf("Dong y cai dat lai?\n");
  829.                         printf("Thiet lap du lieu\n");
  830.                         printf("[Enter]\t\t: Xac nhan\n");
  831.                         printf("[ESC]\t\t: Huy");
  832.                         t=getch();
  833.                         if (t==27) break;
  834.                         if (t==13){
  835.                             system("cls 2>cfg.ini");
  836.                             if (empty_file("save.ini")==0){
  837.                                 system("cls 2>save.ini");
  838.                                 opt--;
  839.                             }
  840.                             cap=1;
  841.                             m=1;
  842.                             z=0;
  843.                             on_exit();
  844.                             reset_cfg[0]=true;
  845.                         }
  846.                         if ((t!=13)&&(t!=27)) reset_cfg[0]=false;
  847.                     }
  848.                     break;
  849.                 }
  850.                 case 2:{
  851.                     while (reset_cfg[1]==false){
  852.                         system("cls");
  853.                         printf("\t----SNAKE >> DAT LAI >> XAC NHAN----\n");
  854.                         printf("Dong y cai dat lai?\n");
  855.                         printf("Diem cao\n");
  856.                         printf("[Enter]\t\t: Xac nhan\n");
  857.                         printf("[ESC]\t\t: Huy");
  858.                         t=getch();
  859.                         if (t==27) break;
  860.                         if (t==13){
  861.                             for (i=0;i<5;i++) dc[i]=0;
  862.                             ghi_diem_cao("hi0.txt");
  863.                             ghi_diem_cao("hi1.txt");
  864.                             ghi_diem_cao("hi2.txt");
  865.                             reset_cfg[1]=true;
  866.                         }
  867.                         if ((t!=13)&&(t!=27)) reset_cfg[1]=false;
  868.                     }
  869.                     break;
  870.                 }
  871.                 case 3:{
  872.                     while (reset_cfg[2]==false){
  873.                         system("cls");
  874.                         printf("\t----SNAKE >> DAT LAI >> XAC NHAN----\n");
  875.                         printf("Dong y cai dat lai?\n");
  876.                         printf("Khoi tao tat ca\n");
  877.                         printf("[Enter]\t\t: Xac nhan\n");
  878.                         printf("[ESC]\t\t: Huy");
  879.                         t=getch();
  880.                         if (t==27) break;
  881.                         if (t==13){
  882.                             system("cls 2>cfg.ini");
  883.                             if (empty_file("save.ini")==0){
  884.                                 system("cls 2>save.ini");
  885.                                 opt--;
  886.                             }
  887.                             cap=1;
  888.                             m=1;
  889.                             z=0;
  890.                             for (i=0;i<5;i++) dc[i]=0;
  891.                             ghi_diem_cao("hi0.txt");
  892.                             ghi_diem_cao("hi1.txt");
  893.                             ghi_diem_cao("hi2.txt");
  894.                             on_exit();
  895.                             reset_cfg[2]=true;
  896.                         }
  897.                         if ((t!=13)&&(t!=27)) reset_cfg[2]=false;
  898.                     }
  899.                     break;
  900.                 }
  901.             }
  902.             for (i=0;i<3;i++) reset_cfg[i]=false;
  903.         }
  904.         else if (t==27) break;
  905.         else if (t==-32){
  906.             t=getch();
  907.             if (t==72) opt4--;
  908.             else if (t==80) opt4++;
  909.         }
  910.         if (opt4<1) opt4=3;
  911.         else if (opt4>3) opt4=1;
  912.     }
  913. }
  914. void menu(){
  915.     system("cls");
  916.     printf("\t----SNAKE----\n");
  917.     if (opt==1){
  918.         textbackground('3');
  919.         textcolor('F');
  920.     }
  921.     printf("1. Tro choi moi%65s\u001b[0m\n","");
  922.     if (opt==2){
  923.         textbackground('3');
  924.         textcolor('F');
  925.     }
  926.     printf("2. Cap do%71s\u001b[0m\n","");
  927.     if (opt==3){
  928.         textbackground('3');
  929.         textcolor('F');
  930.     }
  931.     printf("3. Che do%71s\u001b[0m\n","");
  932.     if (opt==4){
  933.         textbackground('3');
  934.         textcolor('F');
  935.     }
  936.     printf("4. Huong dan%68s\u001b[0m\n","");
  937.     if (opt==5){
  938.         textbackground('3');
  939.         textcolor('F');
  940.     }
  941.     printf("5. Diem cao%69s\u001b[0m\n","");
  942.     if (opt==6){
  943.         textbackground('3');
  944.         textcolor('F');
  945.     }
  946.     printf("6. Dat lai%70s\u001b[0m\n","");
  947.     if (opt==7){
  948.         textbackground('3');
  949.         textcolor('F');
  950.     }
  951.     printf("7. Thoat%72s\u001b[0m","");
  952.     for (i=0;i<17;i++) printf("\n");
  953.     printf("%c/%c: Chon muc \t Enter: Xac nhan",30,31);
  954.     t=getch();
  955.     if (t==13){
  956.         switch(opt){
  957.             case 1:van_moi();break;
  958.             case 2:cap_do();break;
  959.             case 3:che_do();break;
  960.             case 4:huong_dan();break;
  961.             case 5:diem_cao();break;
  962.             case 6:dat_lai();break;
  963.             case 7:{
  964.                 on_exit();
  965.                 system("cls");
  966.                 system("attrib +r cfg.ini");
  967.                 system("attrib +r save.ini");
  968.                 exit(0);
  969.                 break;
  970.             }
  971.         }
  972.     }
  973.     else if (t==-32){
  974.         t=getch();
  975.         if (t==72) opt--;
  976.         else if (t==80) opt++;
  977.     }
  978.     if (opt<1) opt=7;
  979.     else if (opt>7) opt=1;
  980. }
  981. void menu_tiep_tuc(){
  982.     system("cls");
  983.     printf("\t----SNAKE----\n");
  984.     if (opt==1){
  985.         textbackground('3');
  986.         textcolor('F');
  987.     }
  988.     printf("1. Tiep tuc%69s\u001b[0m\n","");
  989.     if (opt==2){
  990.         textbackground('3');
  991.         textcolor('F');
  992.     }
  993.     printf("2. Tro choi moi%65s\u001b[0m\n","");
  994.     if (opt==3){
  995.         textbackground('3');
  996.         textcolor('F');
  997.     }
  998.     printf("3. Cap do%71s\u001b[0m\n","");
  999.     if (opt==4){
  1000.         textbackground('3');
  1001.         textcolor('F');
  1002.     }
  1003.     printf("4. Che do%71s\u001b[0m\n","");
  1004.     if (opt==5){
  1005.         textbackground('3');
  1006.         textcolor('F');
  1007.     }
  1008.     printf("5. Huong dan%68s\u001b[0m\n","");
  1009.     if (opt==6){
  1010.         textbackground('3');
  1011.         textcolor('F');
  1012.     }
  1013.     printf("6. Diem cao%69s\u001b[0m\n","");
  1014.     if (opt==7){
  1015.         textbackground('3');
  1016.         textcolor('F');
  1017.     }
  1018.     printf("7. Dat lai%70s\u001b[0m\n","");
  1019.     if (opt==8){
  1020.         textbackground('3');
  1021.         textcolor('F');
  1022.     }
  1023.     printf("8. Thoat%72s\u001b[0m","");
  1024.     for (i=0;i<16;i++) printf("\n");
  1025.     printf("%c/%c: Chon muc \t Enter: Xac nhan",30,31);
  1026.     t=getch();
  1027.     if (t==13){
  1028.         switch(opt){
  1029.             case 1:tiep_tuc();break;
  1030.             case 2:van_moi();break;
  1031.             case 3:cap_do();break;
  1032.             case 4:che_do();break;
  1033.             case 5:huong_dan();break;
  1034.             case 6:diem_cao();break;
  1035.             case 7:dat_lai();break;
  1036.             case 8:{
  1037.                 on_exit();
  1038.                 system("cls");
  1039.                 system("attrib +r cfg.ini");
  1040.                 system("attrib +r save.ini");
  1041.                 exit(0);
  1042.                 break;
  1043.             }
  1044.         }
  1045.     }
  1046.     else if (t==-32){
  1047.         t=getch();
  1048.         if (t==72) opt--;
  1049.         else if (t==80) opt++;
  1050.     }
  1051.     if (opt<1) opt=8;
  1052.     else if (opt>8) opt=1;
  1053. }
  1054. int main(){
  1055.     srand(time(0));
  1056.     on_preload();
  1057.     on_load();
  1058.     while (true)
  1059.         if (empty_file("save.ini")==0) menu_tiep_tuc();
  1060.         else menu();
  1061.     on_exit();
  1062.     return 0;
  1063. }
RAW Paste Data