C 언어 로 삼자 기 게임 을 하 겠 습 니 다.

6588 단어 C 언어삼자 장기
본 고의 실례 는 여러분 에 게 C 언어 가 삼자 기 게임 을 실현 하 는 구체 적 인 코드 를 공유 하 였 으 며,여러분 에 게 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
초기 작업 은\#define 을 통 해 식별 자 를 정의 하여 상수(바둑판 의 가로 좌표)를 표시 합 니 다.
(코드 작성 에 좌표 가 필요 한 곳 이 많 기 때 문 입 니 다.그러면 코드 를 읽 을 때 독자 들 이 현재 의 값 이 무엇 을 대표 하 는 지,즉 코드 의 해석 에 어려움 을 겪 을 수 있다.따라서 이 코드 에서 매크로 정 의 를 사용 하여 이 문 제 를 해결 하 는 동시에 나중에 바둑판 의 크기 를 변경 하 는 데 도 편리 하 다.)

#define MAX_ROW 3
#define MAX_COL 3
게임 생 성 절차
1.바둑판 만 들 기
바둑판(2 차원 배열)을 만 들 고 초기 화(공백,하위 상태 없 음)합 니 다.

//1.      
void init(char chessBoard[MAX_ROW][MAX_COL]) {
 for (int row = 0; row < MAX_ROW; row++) {
  for (int col = 0; col < MAX_COL; col++) {
   //     (    )          
   chessBoard[row][col] = '   ';
  }
 }
}
2.바둑판 인쇄
바둑판 을 인쇄 하여 게이머 들 이 이 바둑판 의 상 태 를 볼 수 있 도록 합 니 다.

//2.     
void printChessBoard(char chessBoard[MAX_ROW][MAX_COL]) {
 printf("+---+---+---+
"); for(int row = 0; row < MAX_ROW; row++) { printf("|"); for (int col = 0; col < MAX_COL; col++) { printf(" %c |", chessBoard[row][col]); } printf("
+---+---+---+
"); } }
3.플레이어 슬롯
유 저 는 좌표(row,col)타 자 를 입력 합 니 다.
주의:유저 가 좌 표를 선택 한 후 합 법성 검 사 를 해 야 합 니 다.즉,유저 가 떨 어 진 곳 에 이미 하위 가 있 는 지 판단 하고 있 으 면 유 저 는 좌표 의 타 자 를 다시 입력 해 야 합 니 다.

//3.     
void playMove(char chessBoard[MAX_ROW][MAX_COL]) {
 while (1) {
  int row = 0, col = 0;
  printf("           :");
  scanf("%d %d", &row, &col);
      //          
   if (row < 0 || col < 0 || row >= MAX_ROW || col >= MAX_COL) {
    printf("    !     ");
    continue;
   }
         //                 (        ,      )
   else if (chessBoard[row][col] != ' ') {
    printf("       ,     ");
    continue;
   }
   else {
    //   ,  ,   'x',       
    chessBoard[row][col] = 'x';
    break;
   }
 }
}
4.승부 상황 판정
4.1 현재 의 승부 상황 을 판단 할 때 네 가지 승리 방식 이 있다.
1)가로 세 개 는 모두 같은 문자 이다.
2)세로 세 개 모두 같은 문자 이다.
3)1,3 상한 대각선 의 세 위 치 는 모두 같은 문자 이다.
4)2,4 상한 대각선 의 세 위 치 는 모두 같은 문자 이다.

//4.       ,         ,       4   
//    ,  x;     ,  o;     p; 
char chessWin(char chessBoard[MAX_ROW][MAX_COL]) {
 //     3   
 for (int row = 0; row < MAX_ROW; row++) {
  if (chessBoard[row][0] != ' ' && chessBoard[row][0] == chessBoard[row][1] && chessBoard[row][0] == chessBoard[row][2]) {
   return chessBoard[row][0];
  }
 }
 //     3   
 for (int col = 0; col < MAX_COL; col++) {
  if(chessBoard[0][col] != ' ' && chessBoard[0][col] == chessBoard[1][col] && chessBoard[0][col] == chessBoard[2][col] ){
   return chessBoard[0][col];
  }
 }
 //  2,4      3   
 if (chessBoard[0][0] != ' ' && chessBoard[0][0] == chessBoard[1][1] && chessBoard[0][0] == chessBoard[2][2]) {
  return chessBoard[0][0];
 }
 //  1,3      3   
 if (chessBoard[2][0] != ' ' && chessBoard[2][0] == chessBoard[1][1] && chessBoard[2][0] == chessBoard[0][2]) {
  return chessBoard[2][0];
 }
 if (isFull(chessBoard)) {
  return 'p';
 }
 return ' ';
}
4.2 승부 상황 판단 후 4 가지 상황 이 있 는데 그것 이 바로 다음 과 같다.
1)유저 가 승리 하여'x'로 돌아 가기;
2)컴퓨터 가 이기 면'o'로 돌아간다.
3)바둑,바둑판 을 가득 채 웠 지만 승 부 를 가리 지 못 하고'p'로 돌아간다.
4)바둑판 과 자 리 는 비어 있 습 니 다.바둑 을 계속 두 고 돌아 갑 니 다.
우 리 는 주 함수 에서 문자 변 수 를 정의 하여 프로그램 이 끝 난 것 이 무엇 인지 판단 한 다음 에 게이머 가 이 겼 는 지,컴퓨터 가 이 겼 는 지,바둑 이 끝 난 것 인지,게임 이 끝나 지 않 았 는 지 판단 합 니 다.
문자 형 변수 에 따라 게임 의 결 과 를 알 수 있 습 니 다.
4.3 기합 여 부 를 판단 하 는 함 수 는 다음 과 같다.

//4.3       (    ,     ),  1      ,  0      
int isFull(char chessBoard[MAX_ROW][MAX_COL]) {
 for (int row = 0; row < MAX_ROW; row++) {
  for (int col = 0; col < MAX_COL; col++) {
   if (chessBoard[row][col] == ' ') {
    return 0;
   }
  }
 }
 return 1;
}
5.컴퓨터 락(컴퓨터 랜 덤 락)
rand()함 수 를 통 해 컴퓨터 의 무 작위 타 자 를 실현 합 니 다.
(잉여 연산 은 아주 좋 은 절단 방법 이다.여기 서 우 리 는 잉여 연산 을 통 해 가로 좌표 의 값 을[0,2]사이 로 제어 했다.)

//5.     (  )
void computerPlayMove(char chessBoard[MAX_ROW][MAX_COL]) {
 while (1) {
  //        x,y  [0,2]  
  int row = rand() % MAX_ROW;
  int col = rand() % MAX_COL;
  //              (       ),      ,    
  if (chessBoard[row][col] != ' ') {
   continue;
  }
  //            ,   ‘o'      ,     
  chessBoard[row][col] = 'o';
  break;
 }
}
6.승부 상황 판정
과정
7.주 함수
전체 프로그램의 시작 이 아 닌 문자 형 2 차원 배열 바둑판 을 주 함수 에 썼 습 니 다.
이 유 는 시작 에 쓰 면 이 변 수 는 전역 변수 입 니 다.
전역 변수의 생명 주 기 는 전체 프로그램 으로 더 많은 메모 리 를 차지 할 것 입 니 다.또한 프로그램 중간 에 이 변 수 를 사용 했다 면 메모 리 를 사용 할 수 없습니다.
그 밖 에 전역 변수의 역할 영역 은 전체 프로젝트 입 니 다.어디서 바 꾸 면 전체적으로 영향 을 받 고 문제 가 어디 에 있 는 지 알 아 낼 때 귀 찮 을 것 이다.
따라서 전역 변 수 를 최대한 사용 하지 않 는 다 는 원칙 에 따라 이 변 수 를 주 함수 에 썼 다.다른 함수 가 이 매개 변 수 를 필요 로 할 때,다시 전 참 하여 사용 하면 된다.

int main() {
 char chessBoard[MAX_ROW][MAX_COL];
 char winner = ' ';
 //1.      
 init(chessBoard);

 while (1) {
  //2.     ,            
  printChessBoard(chessBoard);
  //3.     
  playMove(chessBoard);
  //4.       
  winner = chessWin(chessBoard);
  if (winner != ' ') {
   //        ,    
   break;
  }
  //5.     
  computerPlayMove(chessBoard);
  //4.       
  winner = chessWin(chessBoard);
  if (winner != ' ') {
   //        ,    
   break;
  }
 }
 if (winner == 'x') {
  printChessBoard(chessBoard);
  printf("      !");
 }
 else if (winner == 'o') {
  printChessBoard(chessBoard);
  printf("  ,      ~");
 }
 else {
  printChessBoard(chessBoard);
  printf("  ,          ~");
 }

 system("pause");
 return 0;
}
이상 은 바로 제 가 삼자 바둑 게임 의 사고,코드 와 주의해 야 할 점 을 쓰 고 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기