[C++] 2048 →→→→→进入此内容的聊天室

来自 , 2021-04-02, 写在 C++, 查看 147 次.
URL http://www.code666.cn/view/03e7d2eb
  1. /*
  2.  1.0
  3.  */
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. #include<time.h>
  7. #include<stdbool.h>
  8. int i,j;
  9. int arr[7][9]={0};
  10. int grade=0;
  11. //地图输出
  12. int map(){
  13.     for(i=1;i<=5;i+=2){
  14.             for(j=1;j<=7;j+=2)
  15.                     arr[i][j]=5;
  16.     }
  17.     for(i=0;i<=6;i++){
  18.             for(j=0;j<=8;j+=2)
  19.                 arr[i][j]=7;
  20.     }
  21.     for(i=1;i<=5;i+=2){
  22.             for(j=2;j<=6;j+=2)
  23.                     arr[i][j]=9;
  24.     }
  25.         printf("*********************\n");
  26.         printf("*****Grade:%5d*****\n",grade);
  27.         printf("*********************\n");
  28.         for(i=0;i<=6;i++){
  29.             for(j=0;j<=8;j++){
  30.                         if(arr[i][j]==7)
  31.                                 printf("|");
  32.                         else if(arr[i][j]==5)
  33.                                 printf(" -- ");
  34.                         else if(arr[i][j]==9)
  35.                                 printf("+");
  36.                         else if(arr[i][j]==0)
  37.                                 printf("    ");
  38.                         else
  39.                                 printf("%4d",arr[i][j]);
  40.                 }
  41.                 printf("\n");
  42.         }
  43.         printf("*********************\n");
  44.        
  45. }
  46. int move(){
  47.         char direction;
  48.         int n=1,m=0;
  49.     printf("请输入方向:w为上,s为下,a为左,d为右\n");
  50.         scanf("%c",&direction);
  51.         scanf("%*c");
  52.         switch(direction){
  53.         case 'w':{
  54.             /*                   
  55.                 移动
  56.                 */
  57.                 //每一列的移动    
  58.         for(j=1;j<=7;j+=2){
  59.                     if(arr[0][j]==0){
  60.                                 n=0;
  61.                             for(i=0;i<=6;i+=2){
  62.                                         if(arr[i][j]!=0){
  63.                                         arr[n][j]=arr[i][j];
  64.                             arr[i][j]=0;
  65.                                                 n+=2;
  66.                                         }
  67.                                 }
  68.                                 continue;
  69.                         }
  70.                         else if(arr[2][j]==0){
  71.                                 n=2;
  72.                             for(i=2;i<=6;i+=2){
  73.                                         if(arr[i][j]!=0){
  74.                                         arr[n][j]=arr[i][j];
  75.                             arr[i][j]=0;
  76.                                                 n+=2;
  77.                                         }
  78.                                 }
  79.                                 continue;
  80.                         }
  81.                         else if(arr[4][j]==0){
  82.                                 n=4;
  83.                             for(i=4;i<=6;i+=2){
  84.                                         if(arr[i][j]!=0){
  85.                                         arr[n][j]=arr[i][j];
  86.                             arr[i][j]=0;
  87.                                                 n+=2;
  88.                                         }
  89.                                 }
  90.                                 continue;
  91.                         }
  92.                 }
  93.         //相加相邻的数
  94.         for(j=1;j<=7;j+=2){
  95.                     for(i=0;i<=6;i+=2){
  96.                             if(arr[i][j]==arr[i+2][j] && arr[i][j]!=0){
  97.                                     arr[i][j]=2*arr[i][j];
  98.                                         arr[i+2][j]=0;
  99.                                 }
  100.                         }
  101.                 }
  102.                 //每一列的移动    
  103.         for(j=1;j<=7;j+=2){
  104.                     if(arr[0][j]==0){
  105.                                 n=0;
  106.                             for(i=0;i<=6;i+=2){
  107.                                         if(arr[i][j]!=0){
  108.                                         arr[n][j]=arr[i][j];
  109.                             arr[i][j]=0;
  110.                                                 n+=2;
  111.                                         }
  112.                                 }
  113.                                 continue;
  114.                         }
  115.                         else if(arr[2][j]==0){
  116.                                 n=2;
  117.                             for(i=2;i<=6;i+=2){
  118.                                         if(arr[i][j]!=0){
  119.                                         arr[n][j]=arr[i][j];
  120.                             arr[i][j]=0;
  121.                                                 n+=2;
  122.                                         }
  123.                                 }
  124.                                 continue;
  125.                         }
  126.                         else if(arr[4][j]==0){
  127.                                 n=4;
  128.                             for(i=4;i<=6;i+=2){
  129.                                         if(arr[i][j]!=0){
  130.                                         arr[n][j]=arr[i][j];
  131.                             arr[i][j]=0;
  132.                                                 n+=2;
  133.                                         }
  134.                                 }
  135.                                 continue;
  136.                         }
  137.                 }
  138.         //最后一行随机分配一个数
  139.                 if(arr[6][1]!=0 && arr[6][3]!=0 && arr[6][5]!=0 && arr[6][7]!=0){
  140.                         break; 
  141.                 }
  142.                 else{
  143.             for(;;){
  144.                     m=(rand()%4)*2+1;
  145.                     if(arr[6][m]==0){
  146.                             arr[6][m]=(rand()%2+1)*2;
  147.                                 break;
  148.                         }
  149.                 }
  150.                 }
  151.                 //结束'w'
  152.             break;
  153.         }
  154.        
  155.  
  156.         case 's':{
  157.             //移动
  158.                 //每一列的移动    
  159.         for(j=1;j<=7;j+=2){
  160.                     if(arr[6][j]==0){
  161.                                 n=6;
  162.                             for(i=6;i>=0;i-=2){
  163.                                         if(arr[i][j]!=0){
  164.                                         arr[n][j]=arr[i][j];
  165.                             arr[i][j]=0;
  166.                                                 n-=2;
  167.                                         }
  168.                                 }
  169.                                 continue;
  170.                         }
  171.                         else if(arr[4][j]==0){
  172.                                 n=4;
  173.                             for(i=4;i>=0;i-=2){
  174.                                         if(arr[i][j]!=0){
  175.                                         arr[n][j]=arr[i][j];
  176.                             arr[i][j]=0;
  177.                                                 n-=2;
  178.                                         }
  179.                                 }
  180.                                 continue;
  181.                         }
  182.                         else if(arr[2][j]==0){
  183.                                 n=2;
  184.                             for(i=2;i>=0;i-=2){
  185.                                         if(arr[i][j]!=0){
  186.                                         arr[n][j]=arr[i][j];
  187.                             arr[i][j]=0;
  188.                                                 n-=2;
  189.                                         }
  190.                                 }
  191.                                 continue;
  192.                         }
  193.                 }
  194.         //相加相邻的数
  195.         for(j=1;j<=7;j+=2){
  196.                     for(i=0;i<=6;i+=2){
  197.                             if(arr[i][j]==arr[i+2][j] && arr[i][j]!=0){
  198.                                     arr[i][j]=2*arr[i][j];
  199.                                         arr[i+2][j]=0;
  200.                                 }
  201.                         }
  202.                 }
  203.                 //每一列的移动    
  204.         for(j=1;j<=7;j+=2){
  205.                     if(arr[6][j]==0){
  206.                                 n=6;
  207.                             for(i=6;i>=0;i-=2){
  208.                                         if(arr[i][j]!=0){
  209.                                         arr[n][j]=arr[i][j];
  210.                             arr[i][j]=0;
  211.                                                 n-=2;
  212.                                         }
  213.                                 }
  214.                                 continue;
  215.                         }
  216.                         else if(arr[4][j]==0){
  217.                                 n=4;
  218.                             for(i=4;i>=0;i-=2){
  219.                                         if(arr[i][j]!=0){
  220.                                         arr[n][j]=arr[i][j];
  221.                             arr[i][j]=0;
  222.                                                 n-=2;
  223.                                         }
  224.                                 }
  225.                                 continue;
  226.                         }
  227.                         else if(arr[2][j]==0){
  228.                                 n=2;
  229.                             for(i=2;i>=0;i-=2){
  230.                                         if(arr[i][j]!=0){
  231.                                         arr[n][j]=arr[i][j];
  232.                             arr[i][j]=0;
  233.                                                 n-=2;
  234.                                         }
  235.                                 }
  236.                                 continue;
  237.                         }
  238.                 }
  239.         //最后一行随机分配一个数
  240.                 if(arr[0][1]!=0 && arr[0][3]!=0 && arr[0][5]!=0 && arr[0][7]!=0){
  241.                         break; 
  242.                 }
  243.                 else{
  244.             for(;;){
  245.                     m=(rand()%4)*2+1;
  246.                     if(arr[0][m]==0){
  247.                             arr[0][m]=(rand()%2+1)*2;
  248.                                 break;
  249.                         }
  250.                 }
  251.                 }
  252.  
  253.         //结束's'
  254.             break;
  255.         }
  256.  
  257.        
  258.         case 'a':{
  259.             //移动
  260.                 //每一行的移动    
  261.         for(i=0;i<=6;i+=2){
  262.                     if(arr[i][1]==0){
  263.                                 n=1;
  264.                             for(j=1;j<=7;j+=2){
  265.                                         if(arr[i][j]!=0){
  266.                                         arr[i][n]=arr[i][j];
  267.                             arr[i][j]=0;
  268.                                                 n+=2;
  269.                                         }
  270.                                 }
  271.                                 continue;
  272.                         }
  273.                         else if(arr[i][3]==0){
  274.                                 n=3;
  275.                             for(j=3;j<=7;j+=2){
  276.                                         if(arr[i][j]!=0){
  277.                                         arr[i][n]=arr[i][j];
  278.                             arr[i][j]=0;
  279.                                                 n+=2;
  280.                                         }
  281.                                 }
  282.                                 continue;
  283.                         }
  284.                         else if(arr[i][5]==0){
  285.                                 n=5;
  286.                             for(j=5;j<=7;j+=2){
  287.                                         if(arr[i][j]!=0){
  288.                                         arr[i][n]=arr[i][j];
  289.                             arr[i][j]=0;
  290.                                                 n+=2;
  291.                                         }
  292.                                 }
  293.                                 continue;
  294.                         }
  295.                 }
  296.         //相加相邻的数
  297.         for(i=0;i<=6;i+=2){
  298.                     for(j=1;j<=7;j+=2){
  299.                             if(arr[i][j]==arr[i][j+2] && arr[i][j]!=0){
  300.                                     arr[i][j]=2*arr[i][j];
  301.                                         arr[i][j+2]=0;
  302.                                 }
  303.                         }
  304.                 }
  305.                 //每一行的移动    
  306.         for(i=0;i<=6;i+=2){
  307.                     if(arr[i][1]==0){
  308.                                 n=1;
  309.                             for(j=1;j<=7;j+=2){
  310.                                         if(arr[i][j]!=0){
  311.                                         arr[i][n]=arr[i][j];
  312.                             arr[i][j]=0;
  313.                                                 n+=2;
  314.                                         }
  315.                                 }
  316.                                 continue;
  317.                         }
  318.                         else if(arr[i][3]==0){
  319.                                 n=3;
  320.                             for(j=3;j<=7;j+=2){
  321.                                         if(arr[i][j]!=0){
  322.                                         arr[i][n]=arr[i][j];
  323.                             arr[i][j]=0;
  324.                                                 n+=2;
  325.                                         }
  326.                                 }
  327.                                 continue;
  328.                         }
  329.                         else if(arr[i][5]==0){
  330.                                 n=5;
  331.                             for(j=5;j<=7;j+=2){
  332.                                         if(arr[i][j]!=0){
  333.                                         arr[i][n]=arr[i][j];
  334.                             arr[i][j]=0;
  335.                                                 n+=2;
  336.                                         }
  337.                                 }
  338.                                 continue;
  339.                         }
  340.                 }
  341.         //最后一行随机分配一个数
  342.                 if(arr[0][7]!=0 && arr[2][7]!=0 && arr[4][7]!=0 && arr[6][7]!=0){
  343.                         break; 
  344.                 }
  345.                 else{
  346.             for(;;){
  347.                     m=(rand()%4)*2;
  348.                     if(arr[m][7]==0){
  349.                             arr[m][7]=(rand()%2+1)*2;
  350.                                 break;
  351.                         }
  352.                 }
  353.                 }
  354.  
  355.         //结束'a'
  356.             break;
  357.         }
  358.    
  359.         case 'd':{
  360.             //移动
  361.                 //每一行的移动    
  362.         for(i=0;i<=6;i+=2){
  363.                     if(arr[i][7]==0){
  364.                                 n=7;
  365.                             for(j=7;j>=1;j-=2){
  366.                                         if(arr[i][j]!=0){
  367.                                         arr[i][n]=arr[i][j];
  368.                             arr[i][j]=0;
  369.                                                 n-=2;
  370.                                         }
  371.                                 }
  372.                                 continue;
  373.                         }
  374.                         else if(arr[i][5]==0){
  375.                                 n=5;
  376.                             for(j=5;j>=1;j-=2){
  377.                                         if(arr[i][j]!=0){
  378.                                         arr[i][n]=arr[i][j];
  379.                             arr[i][j]=0;
  380.                                                 n-=2;
  381.                                         }
  382.                                 }
  383.                                 continue;
  384.                         }
  385.                         else if(arr[i][3]==0){
  386.                                 n=3;
  387.                             for(j=3;j>=1;j-=2){
  388.                                         if(arr[i][j]!=0){
  389.                                         arr[i][n]=arr[i][j];
  390.                             arr[i][j]=0;
  391.                                                 n-=2;
  392.                                         }
  393.                                 }
  394.                                 continue;
  395.                         }
  396.                 }
  397.         //相加相邻的数
  398.         for(i=0;i<=6;i+=2){
  399.                     for(j=1;j<=7;j+=2){
  400.                             if(arr[i][j]==arr[i][j+2] && arr[i][j]!=0){
  401.                                     arr[i][j]=2*arr[i][j];
  402.                                         arr[i][j+2]=0;
  403.                                 }
  404.                         }
  405.                 }
  406.                 //每一行的移动    
  407.         for(i=0;i<=6;i+=2){
  408.                     if(arr[i][7]==0){
  409.                                 n=7;
  410.                             for(j=7;j>=1;j-=2){
  411.                                         if(arr[i][j]!=0){
  412.                                         arr[i][n]=arr[i][j];
  413.                             arr[i][j]=0;
  414.                                                 n-=2;
  415.                                         }
  416.                                 }
  417.                                 continue;
  418.                         }
  419.                         else if(arr[i][5]==0){
  420.                                 n=5;
  421.                             for(j=5;j>=1;j-=2){
  422.                                         if(arr[i][j]!=0){
  423.                                         arr[i][n]=arr[i][j];
  424.                             arr[i][j]=0;
  425.                                                 n-=2;
  426.                                         }
  427.                                 }
  428.                                 continue;
  429.                         }
  430.                         else if(arr[i][3]==0){
  431.                                 n=3;
  432.                             for(j=3;j>=1;j-=2){
  433.                                         if(arr[i][j]!=0){
  434.                                         arr[i][n]=arr[i][j];
  435.                             arr[i][j]=0;
  436.                                                 n-=2;
  437.                                         }
  438.                                 }
  439.                                 continue;
  440.                         }
  441.                 }
  442.         //最后一行随机分配一个数
  443.                 if(arr[0][1]!=0 && arr[2][1]!=0 && arr[4][1]!=0 && arr[6][1]!=0){
  444.                         break; 
  445.                 }
  446.                 else{
  447.             for(;;){
  448.                     m=(rand()%4)*2;
  449.                     if(arr[m][1]==0){
  450.                             arr[m][1]=(rand()%2+1)*2;
  451.                                 break;
  452.                         }
  453.                 }
  454.                 }
  455.         //结束'd'
  456.             break;
  457.         }
  458.         default:
  459.                 printf("输入不正确请重新输入\n");
  460. }
  461. }
  462.  
  463. int mark(){
  464.         grade=0;
  465.     for(i=0;i<=6;i+=2){
  466.             for(j=1;j<=7;j+=2){
  467.                     grade=grade+arr[i][j];
  468.                 }
  469.         }
  470. }
  471.  
  472.  
  473. bool over(){
  474.         int num=0;
  475.     for(j=1;j<=7;j+=2){
  476.             for(i=2;i<=6;i+=2){
  477.                         if(arr[i][j]!=arr[i-2][j]&&arr[i][j]!=0){
  478.                             num++;
  479.                         }
  480.                 }
  481.         }
  482.     for(j=1;j<=7;j+=2){
  483.             for(i=0;i<=4;i+=2){
  484.                         if(arr[i][j]!=arr[i+2][j]&&arr[i][j]!=0){
  485.                             num++;
  486.                         }
  487.                 }
  488.         }
  489.     for(i=0;i<=6;i+=2){
  490.             for(j=1;j<=5;j+=2){
  491.                         if(arr[i][j]!=arr[i][j+2]&&arr[i][j]!=0){
  492.                             num++;
  493.                         }
  494.                 }
  495.         }
  496.     for(i=0;i<=6;i+=2){
  497.             for(j=3;j<=7;j+=2){
  498.                         if(arr[i][j]!=arr[j-2][j]&&arr[i][j]!=0){
  499.                             num++;
  500.                         }
  501.                 }
  502.         }
  503.         if(num==48){
  504.             return true;
  505.         }
  506.         else if(num<48){
  507.                 return false;
  508.         }
  509.  
  510. }
  511.  
  512. int file(int new_grade){
  513.         int old_grade=0;
  514.         FILE *fp=fopen("grade.bin","wb+");
  515.         if(fp){
  516.                 fread(&old_grade,sizeof(int),1,fp);
  517.         }
  518. }
  519.  
  520. int main(){
  521.     srand(time(0));
  522.         //随机赋值
  523.     for(i=1;i<=4;i++){
  524.             arr[(rand()%4)*2][(rand()%4)*2+1]=(rand()%2+1)*2;
  525.     }
  526.     map();
  527.         while(1){
  528.             move();
  529.                 mark();
  530.                 system("clear");
  531.             map();
  532.                 if(over()){
  533.                 printf("******Game Over******\n");
  534.                 printf("*********************\n");
  535.                     break;
  536.                 }
  537.     }
  538.         printf("**你的分数是:%5d***\n",grade);
  539.         printf("*********************\n");
  540.         return 0;
  541.        
  542. }
  543.  

回复 "2048"

这儿你可以回复上面这条便签

captcha