C 언어 판 삼자 기 미니 게임

12886 단어 C 언어삼자 장기
본 논문 의 사례 는 여러분 에 게 C 언어 판 삼자 기 게임 의 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
① 게임 효과
4.567917.3*3 의 바둑판 이 있 습 니 다.4.567918.
4.567917.매번 바둑 을 두 면(컴퓨터 와 게이머)바둑판 은 데 이 터 를 업데이트 합 니 다
  • 메뉴 알림 관련 명령 이 있 습 니 다
  • 바둑 을 두 는 방법 은 좌 표를 입력 하 는 것 이다4.567917.매 게임 이 끝 난 후에 계속 하 는 지 물 어 봅 니 다.
    ② 주 함수 논리 구축
    모든 프로젝트 의 실현 은 가장 중요 한 것 은 논리 구조 구축 이 고 각 기능 의 실현 은 함수(모듈 화)로 세분 화 하 는 것 이다.
    그래서 우 리 는 논 리 를 세 워 야 한다.그렇다면 논리 구 조 는 무엇 일 까?
  • 먼저 알림 메뉴 가 나 옵 니 다.내용 은 0 으로 게임 을 종료 하고 1 시작/계속 게임 을 합 니 다.다른 키 는 오 류 를 알 리 고 다시 입력 합 니 다
  • 0 을 누 르 면"게임 종료 성공"을 알 립 니 다게임 시작
    
    #include <stdio.h>
    int main()
    {
     int input = 0;
     do
     {
            remind(); //     
            scanf("%d",&input); //      
      switch (input)
      {
      case 0:
       printf("      
    "); break; case 1: playgame(); // printf("
    "); break; default : printf(" ,
    "); break; } } while (input); return 0; }
    ③ 게임 모듈(playgame)논리 구축
    앞의 논리 구 조 는 이미 구축 되 었 고 우리 가 실현 해 야 할 것 은 바로 playgame()모듈 이다.
    그렇다면 그의 기능 논 리 는 무엇 일 까?
    4.567917.바둑판 내용 은 2 차원 배열 로 저장 합 니 다4.567917.바둑판 초기 화(즉 바둑판 에 아직 실력 이 없 음).그래서 초기 화 는 하나의 단독 모듈 입 니 다
  • 대국 은 두 개의 모듈(컴퓨터 실력 과 게이머 실력)로 나 뉜 다
  • 4.567917.매 게임 에서 대국 한 후에 컴퓨터 나 게이머 가 이 기 는 지 여 부 를 판단 해 야 한다.(그래서 또 하나의 단독 적 인 승부 판단 모듈)
    
    #define row 3
    #define col 3
    
    void playgame()
    {
     char board[row][col]; //       
     int result = 0; //    Iswin        
    
     Initboard(board, row, col); //     ,           
    
     Displayboard(board, row, col); //    ,          
    
     while (1) //      ,             
     {
      player(board, row, col);  //      
    
      if ((result = Iswin(board, row, col)) == 1) break; // Iswin            ,  1
    
      computer(board, row, col);  //      
    
      if ((result = Iswin(board, row, col)) == -1) break; // Iswin             ,  -1
    
      if (!result) break; //  0  ,            ,     
     }
    
     if (result == 1) printf("       !!!!!!!!!
    "); else if (result == -1) printf(" ,
    "); else printf(" ~~, ,
    "); }
    설명:
    플레이 게임()함수 의 논리 구 조 를 뚜렷하게 이해 할 수 있 습 니 다.
    그 중 한 단 계 는 이러한 if(Iswin(board,row,col)>=0)입 니 다.그 실행 은 먼저 함수(우리 가 누가 이 겼 는 지 판단 해 야 하 는 요 구 를 만족 시 키 는 것)를 호출 한 다음 에 반환 결 과 를 이용 하여 순환 이 끝 났 는 지 판단 하고 한 프로그램 이 두 가지 효 과 를 얻 는 것 이 좋 습 니 다.
    ④ 분기 모듈 의 구체 적 인 실현
    0.remind 함수 구현
    힌트 역할 을 하 니 직접 인쇄 하면 됩 니 다.
    
    void remind()
    {
     printf("+------------------------------------------+
    " "+-------------- 0 --------------+
    " "+----------- 1 / ------------+
    " "+------------------------------------------+
    "); }
    1.Initboard 함수 구현
    초기 화 함수 인 만큼 2 차원 배열 board 를 전체 빈 칸 으로 초기 화 하 는 것 이 우리 의 요구 임 을 설명 합 니 다.
    
    void Initboard(char(*board)[3],int Row,int Col )
    {
     int i = 0, j = 0;
     for (i = 0; i < Row; i++)
     {
      for (j = 0; j < Col; j++)
      {
       board[i][j] = ' '; //     
      }
     }
    }
    2.Displayboard 함수 구현
    바둑판 내용 을 표시 하 는 것 은 2 차원 배열 board 의 내용 뿐만 아니 라 경계(그림 참조)도 표시 하기 때문에 Displayboard 의 요 구 는 무엇 입 니까?

    경 계 를 표시 할 뿐만 아니 라 board 의 저장 내용 도 표시 해 야 합 니 다.
    그리고 경 계 를 표시 하면 우 리 는 작은 블록 으로 나 누 어 순환 해서 표시 할 수 있 습 니 다.예 를 들 어 3 개의 선형 과 마지막 아래 경 계 를 볼 수 있 습 니 다.

    각 선형 은 세 개의 작은 사각형 에 작은 오른쪽 경 계 를 더 한 것 으로 볼 수 있다.
    
    void Displayboard(char(*board)[3], int Row, int Col)
    {
     int i = 0, j = 0;
     for (i = 0; i < Row; i++)
     {
      printf("+---+---+---+
    "); // for (j = 0; j < Col; j++) { printf("| %c ",board[i][j]); // } printf("|
    "); // } printf("+---+---+---+
    "); // }
    3.player 함수 구현
    플레이어 가 바둑 을 두 는 것 은 좌표 입력 방식 을 채택 한다
    플레이어 가 좌 표를 입력 하면 바둑판 의 해당 위 치 를 업데이트 해 야 합 니 다.(해당 위 치 는*로 표시)
    좌 표를 입력 할 때 이 위치 가 이미 떨 어 졌 는 지 확인 해 야 한다.
    
    void player(char(*board)[3], int Row, int Col)
    {
     printf("         (          ):
    "); scanf("%d%d", &Row, &Col); while (1) { if (((1 <= Row) && (Row <= 3)) // , && ((1 <= Col) && (Col <= 3)) && (board[Row-1][Col-1] == ' ')) { board[Row - 1][Col - 1] = '*'; // Row - 1 Col - 1 , 0 break; } else { printf(" , , .
    "); printf(" :
    "); scanf("%d%d", &Row, &Col); } } printf(" !
    "); Displayboard(board, row, col); // , }
    4.Iswin 함수 구현
    게이머 나 컴퓨터 를 사용 한 후,쌍방 이 이 길 수 있 는 지 여 부 를 판단 해 야 한다.
    Iswin 의 역할 은 한 쪽 이 이 기 는 지 아 닌 지 를 판단 하 는 것 이다.
    그 중에서 반환 치 1 은 유저 의 승 리 를 대표 하고 반환 치 0 은 무승부 이 며 반환 치-1 은 컴퓨터 가 이 기 는 것 을 대표 합 니 다.
    승 리 를 판단 하 는 방법 은 줄 마다 열 과 사선 이 같은 지,지지 않 고 이 길 수 없 는 지 를 검사 하 는 것 이다.
    
    int Iswin(char(*board)[3], int Row, int Col)
    {
     //       ??  , ,       ,        (      )
     for (int i = 0; i < Row; i++) //   
     {
      if ((board[i][0] == board[i][1])
       && (board[i][1] == board[i][2])
       && (board[i][0] != ' '))
      {
       if (board[i][0] == '*') return 1;  //      *,      ,      
       return -1;
      }
     }
    
     for (int j = 0; j < Col; j++) //   
     {
      if ((board[0][j] == board[1][j])
       && (board[1][j] == board[2][j])
       && (board[0][j] != ' '))
      {
       if (board[0][j] == '*') return 1; //      *,      ,      
       return -1;
      }
     }
    
     if (((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[1][1] != ' ')) //  
      ||((board[0][2] == board[1][1]) && (board[1][1] ==board[2][0]) && (board[1][1] != ' ')))
     {
      if (board[1][1] == '*') return 1;
      return -1;
     }
    
     for (int i = 0; i < Row; i++)
     {
      for (int j = 0; j < Col; j++)
      {
       if (board[i][j] == ' ')
        return -2; //          ,              
                      //       ,      .  [-1,1]      
      }
     }
    
     return 0; //    4       
    }
    5.computer 함수 구현
    컴퓨터 다운로드 이기 때문에 우 리 는 조작 할 수 없 기 때문에 컴퓨터 를 랜 덤 으로 다운로드 할 수 밖 에 없다.결함 은 컴퓨터 가 약간 지능 장애 가 있다 는 것 이다.하하.
    
    #include <stdlib.h>
    #include <time.h>
    void computer(char(*board)[3], int Row, int Col)
    {
     srand(time(NULL));
     while (1)
     {
      int i = rand() % 3;
      int j = rand() % 3;
      if (board[i][j] == ' ')
      {
       board[i][j] = '#';//#      
       break;
      }
     }
     printf("     :
    "); Displayboard(board, row, col); // , }
    ⑤ 전체 코드
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define row 3
    #define col 3
    
    void remind()
    {
     printf("+------------------------------------------+
    " "+-------------- 0 --------------+
    " "+----------- 1 / ------------+
    " "+------------------------------------------+
    "); } void Initboard(char(*board)[3],int Row,int Col ) { int i = 0, j = 0; for (i = 0; i < Row; i++) { for (j = 0; j < Col; j++) { board[i][j] = ' '; // } } } void Displayboard(char(*board)[3], int Row, int Col) { int i = 0, j = 0; for (i = 0; i < Row; i++) { printf("+---+---+---+
    "); for (j = 0; j < Col; j++) { printf("| %c ",board[i][j]); } printf("|
    "); } printf("+---+---+---+
    "); } void player(char(*board)[3], int Row, int Col) { printf(" ( ):
    "); scanf("%d%d", &Row, &Col); while (1) { if (((1 <= Row) && (Row <= 3)) // , && ((1 <= Col) && (Col <= 3)) && (board[Row-1][Col-1] == ' ')) { board[Row - 1][Col - 1] = '*'; // Row - 1 Col - 1 , 0 break; } else { printf(" , , .
    "); printf(" :
    "); scanf("%d%d", &Row, &Col); } } printf(" !
    "); Displayboard(board, row, col); // , } void computer(char(*board)[3], int Row, int Col) { srand(time(NULL)); while (1) { int i = rand() % 3; int j = rand() % 3; if (board[i][j] == ' ') { board[i][j] = '#';//# break; } } printf(" :
    "); Displayboard(board, row, col); // , } int Iswin(char(*board)[3], int Row, int Col) { // ?? , , , ( ) for (int i = 0; i < Row; i++) // { if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][0] != ' ')) { if (board[i][0] == '*') return 1; // *, , return -1; } } for (int j = 0; j < Col; j++) // { if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && (board[0][j] != ' ')) { if (board[0][j] == '*') return 1; // *, , return -1; } } if (((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[1][1] != ' ')) // ||((board[0][2] == board[1][1]) && (board[1][1] ==board[2][0]) && (board[1][1] != ' '))) { if (board[1][1] == '*') return 1; return -1; } for (int i = 0; i < Row; i++) { for (int j = 0; j < Col; j++) { if (board[i][j] == ' ') return -2; // , // , . [-1,1] } } return 0; // 4 } void playgame() { char board[row][col]; // int result = 0; // Iswin Initboard(board, row, col); // , Displayboard(board, row, col); // , while (1) // , { player(board, row, col); // if ((result = Iswin(board, row, col)) == 1) break; // Iswin , 1 computer(board, row, col); // if ((result = Iswin(board, row, col)) == -1) break; // Iswin , -1 if (!result) break; // 0 , , } if (result == 1) printf(" !!!!!!!!!
    "); else if (result == -1) printf(" ,
    "); else printf(" ~~, ,
    "); } #include <stdio.h> int main() { int input = 0; do { remind(); // scanf("%d", &input); // switch (input) { case 0: printf("
    "); break; case 1: playgame(); // printf("
    "); break; default: printf(" ,
    "); break; } } while (input); return 0; }
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기