<>C Language to achieve the complete code of push box game 
 preface 
 I made it on my own. , Maybe some of the code is not neat enough , Or some small problems , But the basic operation of the game can be achieved 
 <> Code effect 
 The code is divided into 8 Three parts ,4 Two controls move up, down, left and right ,2 It's a matter of judgment ,1 Number of Statistics , A drawing .
 Set up map manually 
 use ’0’ Represents a space ,“1” Represents a wall ,“2” Denotes a box ,“3” Signifier ,“4” Indicates the end point 
 This can improve the portability of the code 
 If you need to input the map manually, you can define a two-dimensional array directly , Just assign a value to him 
int screen[9][11]={ {0,1,1,1,1,1,1,1,1,0,0}, {0,1,0,0,0,1,0,0,0,1,0}, {0,1,0,2,
2,2,2,2,0,1,0}, {0,1,0,2,0,2,0,2,0,1,1}, {0,1,0,0,0,3,0,0,2,0,1}, {1,1,0,1,1,1,1
,0,2,0,1}, {1,0,4,4,4,4,4,1,0,0,1}, {1,0,4,4,4,4,4,0,0,1,1}, {1,1,1,1,1,1,1,1,1,
1,0} };// Defined as a global variable  ( Map ) i Express Line ,j Represents a column  
 Calculate the number of endpoints in the map 
 This step is mainly for judging whether the game will win or lose 
int cum(){ int i,j,k=0; for(i=0;i<9;i++){ for(j=0;j<11;j++){ if(screen[i][j]==2
){ k++; } } }// Traverses the entire two-dimensional array  return k; }// How many endpoints are there in the map  
 Print map function 
 adopt switch Function to visualize the values in a two-dimensional array , That is to draw a map 
 be careful : It's also defined here 6 and 7, It's calculated by overlapping relationships , It's the box at the end , This position has boxes and ends 2 Logo , So let's add up the two values , Easy to understand , It is also convenient for later calculation 
void print(){ int i,j; printf(" Please use it wsad Representatives play the game up and down, left and right \n"); for(i=0;i<9;i++){ for(j=0
;j<11;j++){ switch(screen[i][j]){ case 0: printf(" ");// empty  break; case 1: printf(
"■");// wall  break; case 2: printf("★");// case  break; case 3: printf("♀");// people  break; 
case 4: printf("○");// End  break; case 6: printf("★"); break;// Box and destination  case 7://
 People and terminal display people printf("♀"); break; } } printf("\n"); } } 
 Judge the game 
 I wrote here 2 Functions , A judge wins , A judge loses , And return the value , Then in the last side of the main function, the game is determined by judging the return value 
 Judge to win 
int win(){ int i,j,k=0; int t=0; for(i=0;i<9;i++){ for(j=0;j<11;j++){ if(screen
[i][j]==6){ k++; } } }// Traverses the entire two-dimensional array , Calculate the number of boxes at the end  if(k==cum()){ t=1; }
// If the number of endpoints is equal to the number of endpoints calculated previously , It means that all the terminals are packed with boxes , Explain the victory of the game  return t; } // Judge to win  
 Judge lose 
int lose(){ int i,j; int k=0; for(i=0;i<9;i++){ for(j=0;j<11;j++){ if(i>0 && j>
0 ){ if(screen[i][j] == 2 || screen[i][j] == 6){ if(((screen[i-1][j] == 1 || 
screen[i-1][j] == 2 || screen[i-1][j] == 6) && (screen[i][j-1] == 1 || screen[i]
[j-1] == 2 || screen[i][j-1] == 6)) || ((screen[i][j-1] == 1 || screen[i][j-1] 
== 2 || screen[i][j-1] == 6) && (screen[i+1][j] == 1 || screen[i+1][j] == 2 || 
screen[i+1][j] == 6)) || ((screen[i+1][j] == 1 || screen[i+1][j] == 2 || screen[
i+1][j] == 6) && (screen[i][j+1] == 1 || screen[i][j+1] == 2 || screen[i][j+1] 
== 6)) || ((screen[i][j+1] == 1 || screen[i][j+1] == 2 || screen[i][j+1] == 6) 
&& (screen[i-1][j] == 1 || screen[i-1][j] == 2 || screen[i-1][j] == 6))){ k++; }
} } }/* This is also traversing the entire array , Judge the situation of all boxes in four directions ,  If three directions are blocked, the box can't move , It also indicates that the box is invalid , 
 use k To record the number of failures , When all fail, the game fails  ( This is how the game is played , In fact, if one is blocked, it is impossible to win )*/ } if(k==cum()){ k=1; } 
return k;// return 1 The game failed  } 
 Next are the four most important control functions 
 Move up 
 Through the change of the number to control the change of the two-dimensional array , And then control the updating of the map 
 It's very important to understand : plus 1, plus 2, plus 3 reduce 3 What do you mean 
 plus 1: What is the value of the box 2, What is the value of people 3, So the position of the box becomes that people need to add 1 To achieve 
 plus 2: What is the value of open space 0, What is the value of the box 2, What is the value of the box with the destination 6, So when you push the box , The value will be increased after the box is placed in the front space or at the end 2
 plus 3 reduce 3: What is the value of people 3, If people want to move , It will be in the original grid because the person left, resulting in a numerical reduction 3, Go to the grid will be because of the stand and add people 3
 If this is understood , The code is very simple 
void movew(){ if(x>0){ if(screen[x-1][y]==1){ return ;/* If there's a wall on top of the box , The map will not change , because  
 I can't push it */ }else if(screen[x-1][y]==0){ screen[x-1][y]+=3; screen[x][y]-=3; x--;
/* If there's an open space ahead , You need to move one space forward , That's where the original person was   Become a clearing , The open space ahead becomes human , Open space (0) Become human (3) Need to add 3,  People need to be reduced when they become empty space 3*/ }else 
if(screen[x-1][y]==4){ screen[x-1][y]+=3; screen[x][y]-=3; x--; }// same  else if(
screen[x-1][y]==2||screen[x-1][y]==6){ if(screen[x-2][y]==0){ screen[x-2][y]+=2;
// The grid in front of the box becomes a box (2) screen[x-1][y]+=1;// The position of the box becomes human (3) screen[x][y]-=3;
/* If there's an open space ahead , You need to move forward   One frame , In other words, the original box lattice becomes a person , The position of people becomes empty   land , The original space became a box , case (2) Become human (3) Need to reduce  3, Open space becomes human */
 x--; }else if(screen[x-2][y]==1){ return ; }else if(screen[x-2][y]==2){ return;
// If the front of the box is a wall or other box , The box can't be pushed  }else if(screen[x-2][y]==4){ screen[x-2][y]+=2; screen
[x-1][y]+=1; screen[x][y]-=3; x--; }// Don't leave out this situation  } } } 
 The code ideas of the other three directions are the same as this one 
 Move down 
void moves(){ if(x<9){ if(screen[x+1][y]==1){ return ; }else if(screen[x+1][y]
==0){ screen[x+1][y]+=3; screen[x][y]-=3; x++; }else if(screen[x+1][y]==4){ 
screen[x+1][y]+=3; screen[x][y]-=3; x++; } else if(screen[x+1][y]==2||screen[x+1
][y]==6){ if(screen[x+2][y]==1){ return; }else if(screen[x+2][y]==0){ screen[x+2
][y]+=2; screen[x+1][y]+=1; screen[x][y]-=3; x++; }else if(screen[x+2][y]==2){ 
return ; }else if(screen[x+2][y]==4){ screen[x+2][y]+=2; screen[x+1][y]+=1; 
screen[x][y]-=3; x++; } } } } 
 Move left 
void movea(){ if(y>0){ if(screen[x][y-1]==1){ return; }else if(screen[x][y-1]==
4){ screen[x][y-1]+=3; screen[x][y]-=3; y--; } else if(screen[x][y-1]==0){ 
screen[x][y-1]+=3; screen[x][y]-=3; y--; }else if(screen[x][y-1]==2||screen[x][y
-1]==6){ if(screen[x][y-2]==0){ screen[x][y-2]+=2; screen[x][y-1]+=1; screen[x][
y]-=3; y--; }else if(screen[x][y-2]==1){ return; }else if(screen[x][y-2]==2){ 
return; }else if(screen[x][y-2]=4){ screen[x][y-2]+=2; screen[x][y-1]+=1; screen
[x][y]-=3; y--; } } } } 
 Move right 
void moved(){ if(y<9){ if(screen[x][y+1]==1){ return; }else if(screen[x][y+1]==
4){ screen[x][y+1]+=3; screen[x][y]-=3; y++; } else if(screen[x][y+1]==0){ 
screen[x][y+1]+=3; screen[x][y]-=3; y++; }else if(screen[x][y+1]==2||screen[x][y
+1]==6){ if(screen[x][y+2]==0){ screen[x][y+2]+=2; screen[x][y+1]+=1; screen[x][
y]-=3; y++; }else if(screen[x][y+2]==4){ screen[x][y+2]+=2; screen[x][y+1]+=1; 
screen[x][y]-=3; y++; }else if(screen[x][y+2]==2){ return; }else if(screen[x][y+
2]==1){ return; } } } } 
 Principal function 
 The main function is a bit messy , Just look at the notes 
int main(){ int n,t; int j,k; int b=1; here: system("cls");// printf(
" To start the game, press 1\n To exit the game, press 2\n"); scanf("%d",&j); if(j==1){ printf(" Please use it wsad Representatives play the game up and down, left and right \n");
// This leads to the game  while(1){ system("cls");/* Clear the previous map after each move , Or you'll go every day   Generate a graph in one step */ print();
// Print the map first  scanf("%c",&n);// Read in user actions  switch(n){ case 'w': movew(); break; case 's': 
moves(); break; case 'a': movea(); break; case 'd': moved(); break; } // Controller Mobile  t=
win(); if(t==1){ goto there; }// After each operation, judge whether the game is successful or not , If you win, jump to the end of the function  if(b == lose()){ 
system("cls"); print(); printf(" The game failed "); return 0; } // Game failure tips  } }else { system(
"cls"); printf(" Are you sure you want to quit the game \n Press to confirm exit 1\t To return to the previous level, press 2\n"); scanf("%d",&k); if(k==1){ printf
(" You are out of the game , Looking forward to your coming again , thank you "); return 0; }else { goto here; } }
// This is where the first user enters the game , If the user chooses to quit the game, perform the action  there: printf(" Congratulations on passing the game !"); return 0; }// Principal function  
 That's all the code , If you need a complete code, you can leave a message .
Technology