C 언어 구현 푸 시 박스 게임 전체 코드

C 언어 는 상자 게임 의 전체 코드 를 실현 합 니 다.참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
머리말
스스로 만 든 것 은 일부 코드 가 정연 하지 못 하거나 작은 문제 가 있 을 수 있 지만 게임 의 기본 적 인 조작 은 실현 할 수 있다.
코드 효과

코드 는 모두 8 개 부분 으로 나 뉘 는데 4 개 는 상하 좌우 이동 을 제어 하고 2 개 는 승 패 를 판단 하 며 1 개 통 계 는 개수 로 나 뉘 어 그림 을 그린다.
지도 수 동 설정
'0'으로 빈 칸 을 표시 하고,'1'은 벽 을 표시 하 며,'2'는 상 자 를 표시 하고,'3'은 사람 을 표시 하 며,'4'는 종점 을 표시 한다.
이렇게 하면 코드 의 이식 성 을 높 일 수 있다.
수 동 입력 지도 로 바 꾸 려 면 2 차원 배열 을 직접 정의 하고 값 을 부여 하면 됩 니 다.

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}
};//        (  ) i   ,j    
지도 에서 종점 의 개 수 를 계산 하 다.
이 단 계 는 주로 게임 의 승 부 를 뒤에서 판단 하기 위 한 것 이다.

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++;
 }
 }
 }//        
 return k;
}//           
지도 함수 인쇄
switch 함 수 를 통 해 2 차원 배열 의 값 을 시각 화 하 는 것,즉 지 도 를 그 리 는 것 입 니 다.
주의:여기 서 6 과 7 을 정 의 했 습 니 다.겹 치 는 관 계 를 통 해 계산 한 것 입 니 다.바로 상자 가 종점 에 있 습 니 다.이 위 치 는 상자 가 있 고 종점 2 개의 표지 가 있 기 때문에 두 개의 수 치 를 합치 면 이해 하기 쉽 고 뒤의 계산 도 편리 합 니 다.

void print(){
 int i,j;
 printf("  wsad           
"); for(i=0;i<9;i++){ for(j=0;j<11;j++){ switch(screen[i][j]){ case 0: printf(" ");// break; case 1: printf("■");// break; case 2: printf("★");// break; case 3: printf("♀");// break; case 4: printf("○");// break; case 6: printf("★"); break;// case 7:// printf("♀"); break; } } printf("
"); } }
게임 의 승 부 를 판단 하 다.
여기에 나 는 두 개의 함 수 를 썼 다.하 나 는 이 기 는 것 을 판단 하고 하 나 는 지 는 것 을 판단 하 며 값 을 되 돌려 주 었 다.그리고 주 함수 의 맨 뒤에 반환 값 을 판단 하여 게임 의 승 패 를 확정 했다.
승 부 를 판단 하 다

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++;
 }
 }
 }//        ,           
 if(k==cum()){
 t=1;
 }//                ,            ,      
 return t;
} //    
판정 패

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++;
 }
 }
 }
 }/*           ,              ,
                     ,          ,
  k        ,          
 (       ,                 )*/
 }
 if(k==cum()){
 k=1;
 }
 return k;//  1      
}
다음은 가장 중요 한 네 가지 제어 함수 입 니 다.
위로 이동
디지털 변 화 를 통 해 2 차원 배열 의 변 화 를 통제 하고 지도의 업 데 이 트 를 통제 한다.
여기 서 매우 중요 한 것 은 1 더하기 2 더하기 3 빼 기 3 이 무슨 뜻 인지 이해 하 는 것 이다.
더하기 1:상자 의 값 은 2 이 고 사람의 값 은 3 이기 때문에 상자 의 위치 가 사람 이 되 려 면 1 을 더 해 야 한다.
가 2:공 터 의 값 은 0,상자 의 값 은 2,상자 와 종점 이 함께 있 는 값 은 6 이 므 로 상 자 를 밀 때 전방 의 빈 칸 이나 종점 을 상자 에 올 리 면 수치 가 2 가 됩 니 다.
더하기 3 빼 기 3:사람의 값 은 3 이 고 사람 이 움 직 이려 면 원래 있 던 칸 은 사람 이 갔 기 때문에 수치 가 3 줄 어 들 고 걸 어 온 칸 은 사람 이 서 있 기 때문에 3 을 더 합 니 다.
이것 을 이해 하면 코드 는 매우 간단 하 다.

void movew(){
 if(x>0){
 if(screen[x-1][y]==1){
 return ;/*         ,         ,  
     */
 }else if(screen[x-1][y]==0){
 screen[x-1][y]+=3;
 screen[x][y]-=3;
 x--;/*       ,         ,         
     ,        ,  (0)   (3)   3,
         3*/
 }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]==0){
  screen[x-2][y]+=2;//          (2)
  screen[x-1][y]+=1;//        (3)
  screen[x][y]-=3;/*       ,       
    ,              ,       
   ,         ,  (2)   (3)   
  3,     */
  x--;
 }else if(screen[x-2][y]==1){
  return ;
 }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--;
 }//       
 }
 }
}
다른 세 가지 방향의 코드 사고방식 은 이것 과 같다
아래로 이동

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++;
  }
 }
 }
}
왼쪽으로 이동

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--;
 }
 }
}
}
오른쪽으로 이동

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;
 }
 }
 
 }
}
주 함수
이 주 함 수 는 좀 어 지 럽 게 썼 으 니,직접 주석 을 보 세 요.

int main(){
 int n,t;
 int j,k;
 int b=1;
 here:
 system("cls");//
 printf("      1
2
"); scanf("%d",&j); if(j==1){ printf(" wsad
");// while(1){ system("cls");/* , */ print();// scanf("%c",&n);// switch(n){ case 'w': movew(); break; case 's': moves(); break; case 'a': movea(); break; case 'd': moved(); break; } // t=win(); if(t==1){ goto there; }// , if(b == lose()){ system("cls"); print(); printf(" "); return 0; } // } }else { system("cls"); printf("
1\t 2
"); scanf("%d",&k); if(k==1){ printf(" , , "); return 0; }else { goto here; } }// , there: printf(" !"); return 0; }//
모든 코드 는 여기까지 입 니 다.전체 코드 가 필요 하 다 면 메 시 지 를 남 길 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기