C 언어 코드

본 논문 의 사례 는 여러분 에 게 C 언어 가 박스 게임 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
이번 게임 은 상 자 를 밀어 서 첫 번 째 관문 을 닫 는 가장 쉬 운 게임 입 니 다.
상세 한 주석 이 있 습 니 다.다음은 만들어 진 게임 인터페이스 입 니 다.


게임 조작 설명 과 기능 설명:
1.wasd 에 따라 소인 의 상하 좌우 이동 을 제어 합 니 다.
2、r 누 르 고 게임 다시 시작
3.게임 시작 조작 안내
4,게임 종료 승리 알림
게임 원리 분석
1.게임 시작 시 별 개수=상자 별 개수 시 게임 승리.
2.r 키 를 누 르 고 게임 을 다시 시작 합 니 다.우 리 는 하나의 양 map 를 정의 해 야 합 니 다.1[8][8]은 게임 의 초기 화면 을 저장 합 니 다.작업 할 때 우 리 는 맵[8][8]에 값 을 부여 하여 다시 제자리 로 돌아 갈 수 있 도록 합 니 다.여 기 는 memcpy()함수 가 사 용 됩 니 다.
3.wasd 는 상하 좌우 로 인물 이동 을 조작 하 는 것 을 대표 하고 각각 함 수 를 정의 해 야 합 니 다.
4.인물 의 이동 을 판단 하기 전에 우 리 는 인물 의 위 치 를 정 해 야 한다.여기 서 우 리 는 find()함수 로 정의 한다.
먼저 파일 부터 소개 합 니 다.

#include<stdio.h> 
#include<stdlib.h> //malloc()  
#include<string.h> //memcpy()  
#include<conio.h> //getch()  
함수 이름:malloc
함수 원형:void*malloc(unsigned size);
함수 기능:size 바이트 의 저장 소 할당
함수 반환:분 배 된 메모리 영역 주소,메모리 가 부족 하면 0 을 되 돌려 줍 니 다.
함수 함수:memcpy
함수 원형:void*memcpy(void*dest,const void*src,sizet n);
함수 기능:원본 src 가 가리 키 는 메모리 주소 의 시작 위치 부터 n 개의 바이트 를 대상 dest 가 가리 키 는 메모리 주소 의 시작 위치 로 복사 합 니 다.
함수 반환:함수 가 dest 를 가리 키 는 지침 을 되 돌려 줍 니 다.
함수 이름:getch
함수 원형:int getch(void);
함수 기능:콘 솔 에서 문 자 를 읽 지만 화면 에 표시 되 지 않 습 니 다.
함수 반환:읽 은 문자
위의 그림 은 간단 한 8*8 의 그림 입 니 다.우 리 는 2 차원 배열 을 정의 하여 전체 그림 을 저장 하고 0,1,2,3,4 로 게임 인터페이스의 모든 기 호 를 대표 합 니 다.코드 는 다음 과 같 습 니 다:

int map_1[8][8]={
  {0,0,1,1,1,0,0,0},
  {0,0,1,4,1,0,0,0},
  {0,0,1,2,1,1,1,1},
  {1,1,1,0,0,2,4,1},
  {1,4,0,2,3,1,1,1},
  {1,1,1,1,2,1,0,0},
  {0,0,0,1,4,1,0,0},
  {0,0,0,1,1,1,0,0}
 }; 
전역 변수 정의:

int x, y;
int map[8][8] = {0};
선언 함수 원형:

int count1();  //      
int count2(); //             

int up();  
int down();
int left();
int right();

int shuchu();
int find();   //    
int zhujiemian(); //     
이어서 우 리 는 모든 숫자 에 그들 이 대표 하 는 기 호 를 부여 합 니 다.코드 는 다음 과 같 습 니 다.

int shuchu()
 {
  for(x=0; x<8; x++)
  {
   for(y=0; y<8; y++)
   {
    if(map[x][y] == 1)
     printf("■"); //       
    if(map[x][y] == 3)
     printf("⊙"); //       
    if(map[x][y] == 2)
     printf("□"); //    
    if(map[x][y] == 4)
     printf("☆"); //         
    if(map[x][y] == 0)
     printf(" "); //    
    if(map[x][y] == 5) 
     printf("★"); //           
   }
   printf("
"); } return 0; }
이어서 우 리 는 게임 을 시작 하기 전의 메 인 인터페이스 로 게임 방법 을 제시 해 야 한다.코드 는 다음 과 같다.

 //     
int zhujiemian()
 {
  printf("*************************
" "**** ~*****
" "**** : ************
" "**** wasd ****
" "**** r *******
" "*************************
"); }
그 다음 에 인물 이동 을 조작 하려 면 먼저 화면 에 있 는 인물 의 위 치 를 찾 아야 한다.

 //       
 int find()
 {
  for(x=0; x<8; x++)
   for(y=0; y<8; y++)
   {
    if(map[x][y] == 3)
     return 0;
   }
   return 0;
 }
게임 시작 전 별의 개수 와 상자 가 별의 위치 에 도착 한 개 수 를 기록 합 니 다.

//     
 int count1()
 {
  int n=0;
  for(x=0; x<8; x++)
   for(y=0; y<8; y++)
   {
    if(map[x][y] == 4)
     n++;
   }
 return n;
 }
 //         
 int count2()
 {
  int m=0;
  for(x=0; x<8; x++)
   for(y=0; y<8; y++)
   {
    if(map[x][y] == 5)
     m++;
   }
   return m;
 }
이어서 wasd 네 방향 에 있 는 인물 의 이동 을 판단 하고 인물 의 이동 을 확정한다.

//  w        
 int up()
 {
  if(map[x][y] == 3) //       
  {
   if(map[x-1][y] == 0) //          
   {
    map[x-1][y] = 3;
    map[x][y] = 0;
   }
   if(map[x-1][y] == 2 && map[x-2][y] == 4) /*           ,               */
   {
    map[x][y] = 0;
    map[x-1][y] = 3;
    map[x-2][y] = 5;
   }
  }
  return 0;
 }
 // d        
 int down()
 {
  if(map[x][y] == 3)    //    
  {
   if(map[x+1][y] == 0)  //          
   {
   map[x+1][y] = 3;
   map[x][y] = 0;
   }
   if(map[x+1][y] == 2 && map[x+2][y] == 4) /*                      */
   {
    map[x][y] = 0;
    map[x+1][y] = 3;
    map[x+2][y] = 5;
   }
  }
  return 0;
 }
 // a        
 int left()
 {
  if(map[x][y] == 3)
  {
   if(map[x][y-1] == 0)  //          
   {
    map[x][y-1] = 3;
    map[x][y] = 0;
   }
  if(map[x][y-1] == 2 && map[x][y-2] == 4) /*                      */  
  {
   map[x][y] = 0;
   map[x][y-1] = 3;
   map[x][y-2] = 5;
  }
  if(map[x][y-2] == 0 && map[x][y-1] == 2) /*                        */
  {
   map[x][y] = 0;
   map[x][y-1] = 3;
   map[x][y-2] = 2;
  }
  }
  return 0;
 }
 // d        
 int right()
 {
  if(map[x][y] == 3)
  {
   if(map[x][y+1] == 0)  //          
   {
    map[x][y+1] =3;
    map[x][y] = 0;
   }
   if(map[x][y+1] == 2 && map[x][y+2] == 4)/*                      */
   {
    map[x][y] = 0;
    map[x][y+1] = 3;
    map[x][y+2] = 5;
   }
  }
  return 0;
 } 
마지막 으로 가장 중요 한 주 함수 입 니 다.

int main()
 {
  int n,m;
  system("title      ~"); //     

  memcpy(map, map_1, sizeof(map_1)); 

  zhujiemian();

  getch();

  system("cls");    //  

  n=count1();     

  while(1)
  {
   system("cls");
   shuchu();
   m= count2();
   find();

   switch(getch())
   {
    case 'w':up(); break;
    case 's':down(); break;
    case 'a':left(); break;
    case 'd':right(); break;
    case 'r':memcpy(map, map_1, sizeof(map_1)); break;
   }

   if(n==m)
   {
   system("cls");
   printf("    ~
"); getch(); return 0; } } }
다음은 전체 프로그램 을 보 여 줍 니 다.gcc 컴 파일 을 통 해 실행 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>

 int x=0,y=0;

 int map[8][8]={0};
 //          
 int map_1[8][8]={
  {0,0,1,1,1,0,0,0},
  {0,0,1,4,1,0,0,0},
  {0,0,1,2,1,1,1,1},
  {1,1,1,0,0,2,4,1},
  {1,4,0,2,3,1,1,1},
  {1,1,1,1,2,1,0,0},
  {0,0,0,1,4,1,0,0},
  {0,0,0,1,1,1,0,0}
 };

 int count1();
 int count2();

 int ();
 up();
 int down();
 int left();
 int right
 int shuchu();
 int find();
 int zhujiemian();

 int main()
 {
  int n,m;
  system("title      ~");

  memcpy(map, map_1, sizeof(map_1));

  zhujiemian();

  getch();

  system("cls");

  n=count1();

  while(1)
  {
   system("cls");
   shuchu();
   m= count2();
   find();

   switch(getch())
   {
    case 'w':up(); break;
    case 's':down(); break;
    case 'a':left(); break;
    case 'd':right(); break;
    case 'r':memcpy(map, map_1, sizeof(map_1)); break;
   }

   if(n==m)
   {
   system("cls");
   printf("    ~
"); getch(); return 0; } } } // w int up() { if(map[x][y] == 3) // { if(map[x-1][y] == 0) // { map[x-1][y] = 3; map[x][y] = 0; } if(map[x-1][y] == 2 && map[x-2][y] == 4) // , { map[x][y] = 0; map[x-1][y] = 3; map[x-2][y] = 5; } } return 0; } // d int down() { if(map[x][y] == 3) { if(map[x+1][y] == 0) { map[x+1][y] = 3; map[x][y] = 0; } if(map[x+1][y] == 2 && map[x+2][y] == 4) { map[x][y] = 0; map[x+1][y] = 3; map[x+2][y] = 5; } } return 0; } // a int left() { if(map[x][y] == 3) { if(map[x][y-1] == 0) { map[x][y-1] = 3; map[x][y] = 0; } if(map[x][y-1] == 2 && map[x][y-2] == 4) { map[x][y] = 0; map[x][y-1] = 3; map[x][y-2] = 5; } if(map[x][y-2] == 0 && map[x][y-1] == 2) { map[x][y] = 0; map[x][y-1] = 3; map[x][y-2] = 2; } } return 0; } // d int right() { if(map[x][y] == 3) { if(map[x][y+1] == 0) { map[x][y+1] =3; map[x][y] = 0; } if(map[x][y+1] == 2 && map[x][y+2] == 4) { map[x][y] = 0; map[x][y+1] = 3; map[x][y+2] = 5; } } return 0; } int shuchu() { for(x=0; x<8; x++) { for(y=0; y<8; y++) { if(map[x][y] == 1) printf("■"); // if(map[x][y] == 3) printf("⊙"); // if(map[x][y] == 2) printf("□"); // if(map[x][y] == 4) printf("☆"); // if(map[x][y] == 0) printf(" "); // if(map[x][y] == 5) printf("★"); // } printf("
"); } return 0; } // int find() { for(x=0; x<8; x++) for(y=0; y<8; y++) { if(map[x][y] == 3) return 0; } return 0; } // int count1() { int n=0; for(x=0; x<8; x++) for(y=0; y<8; y++) { if(map[x][y] == 4) n++; } return n; } // int count2() { int m=0; for(x=0; x<8; x++) for(y=0; y<8; y++) { if(map[x][y] == 5) m++; } return m; } // int zhujiemian() { printf("*************************
" "*** ~***
" "********* : *******
" "** wasd **
" "** r ******
" "*************************
"); }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기