C 언어 삼자 기 게임 실현 코드 분석

7836 단어 C 언어삼자 장기
본 논문 의 사례 는 여러분 에 게 C 언어 삼자 기 게임 의 구체 적 인 코드 를 공유 하 였 으 며,여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
프로 그래 밍 환경:Visual Studio 2019
(1)파일 생 성
 논리 적 이 고 뚜렷 한 프로 그래 밍 을 위해 우 리 는 먼저 game.h 라 는 헤더 파일 을 만 들 고 게임 함수 로 설명 합 니 다.두 개의 소스 파일,하 나 는 text,c 로 테스트 하고 다른 game,c 는 게임 함수 로 이 루어 집 니 다.그림 과 같 습 니 다.

(2)사고방식 분석
먼저 게임 인터페이스 에 들 어가 인터페이스 인쇄 를 하고 주 함수 에서 메뉴 함 수 를 인용 하여 게임 을 반복 할 수 있 도록 함 수 를 do-while 순환 내부 에 놓 습 니 다.그 다음 에 유 저 는 게임 선택 을 하고 주 함수 에서 switch 문 구 를 활용 하여 선택 한 내용 을 판단 합 니 다.

int main()
{
 int put;
 do
 {
  menu();
  printf("   :");
  scanf("%d", &put);
  switch (put)
  {
  case 1:
   system("cls");
   game();       //    
   break;
  case 0:
   printf("      !!!");
   break;
  default:
   printf("    ,     !!");
   system("cls");
  }
 } while (put);
 return 0;
}
void menu()//    
{
 printf("*******************************
"); printf("********* 1. ************
"); printf("********* 0. **************
"); printf("*******************************
"); }
인터페이스 가 완 료 된 후에 바둑판 의 인쇄 를 고려 해 야 합 니 다.게이머 들 이 게임 을 선택 할 때 우 리 는 인쇄 된 바둑판 이 이 렇 기 를 바 랍 니 다.

우리 가 5*5 의 바둑판 이나 더 큰 바둑판 인쇄 를 하고 싶 을 때 전역 변수 X,Y 는 각각 줄 수 와 열 수 를 표시 하여 변경 하기에 더욱 편리 하 다.

이 럴 때 문자 배열 을 이용 하여 각 배열 의 유닛 에 값 을 빈 칸 으로 부여 한 다음 인쇄 할 수 있 습 니 다.

void begin(char arr[X][Y], int x, int y)  //     
{
 int i = 0;
 int j = 0;
 for (i = 0; i < x; i++)
 {
  for (j = 0; j < y; j++)
   arr[i][j] = ' ';             //          
 }
}
void Print(char arr[X][Y], int x, int y)  //       
{
 int i = 0;
 int j = 0;
 int k = 0;
 for (i = 0;i < x;i++)
 {
  for (j = 0;j < y;j++)
  {
   if (j == y - 1)
    printf(" %c 
", arr[i][j]); else printf(" %c |", arr[i][j]); if (j==y - 1) { if (i != x - 1) { for (k = 0;k < y;k++) { if (k == y - 1) { printf("---
"); break; } printf("---|"); } break; } } } } }
그 다음 에 게이머 들 이 바둑 을 두 는 함수 와 컴퓨터 바둑 함 수 를 설정 하고 게이머 들 이 바둑 을 두 는 좌 표를 대응 하 는 배열 의 단위 로'*',컴퓨터 바둑 좌 표를 대응 하 는 배열 의 단위 로'\#',게이머 들 이 바둑 을 둘 때 먼저 두 어야 할 좌 표를 입력 하고 좌 표를 입력 한 후에 이 위치 가 이미 두 었 는 지 판단 해 야 한다.이 때 다음 위치 가 빈 칸 인지 아 닌 지 를 판단 하려 면 빈 칸 이 아니면 다시 입력 해 야 합 니 다.컴퓨터 에서 바둑 을 둘 때 랜 덤 수 를 생 성 합 니 다.생 성 된 랜 덤 수 를 배열 아래 표 범위 내 에서 생 성 된 랜 덤 수 대 x,y 취 여 를 위해 rand 함수 의 범 위 를 확대 하기 위해 srand 함 수 를 참조 하여 함수 내부 에 기호 없 는 time 함 수 를 배치 해 야 합 니 다.생 성 된 수의 진정한 의미 에서 랜 덤 을 보장 합 니 다.

void gamer(char arr[X][Y], int x, int y)//    
{
 int a, b;
 scanf("%d %d", &a, &b);
 if (a > 0 && a <= x && b > 0 && b <= y)
 {
  if (arr[a - 1][b - 1] != ' ')
  {
   printf("       ,     :");
   gamer(arr, x, y);
  }
  arr[a - 1][b - 1] = '*';
 }
 else
 {
  printf("       ,     :");
  gamer(arr, x, y);
 }
 
}
void computer(char arr[X][Y], int x, int y)
{
 
 int a = rand() % x;
 int b = rand() % y;
 if (arr[a][b] == ' ')
 {
  arr[a][b] = '#';
 }
 else
 {
  computer(arr, x, y);
 }
}
게이머 컴퓨터 가 바둑 을 둔 후에 승 패 를 판단 하고 win 함 수 를 인용 하여 가로 줄 이나 세로 줄 또는 대각선 이 같 을 때 같은 요소 의 값 을 되 돌려 줍 니 다.예 를 들 어 첫 번 째 줄 은 모두'*'이면'*'로 되 돌아 가 고 반환 값 에 따라 게이머 가 이 기 는 것 으로 판단 합 니 다.반환 값 이'*'또는'\#'일 때 게임 이 끝 났 거나 게이머 가 이 겼 거나 컴퓨터 가 이 겼 다 고 판단 하고 반환 값 이'일 때 게임 이 계속 되 고 상기 판단 이 성립 되 지 않 을 때 게임 화면 이 꽉 찼 는 지 판단 하 며 존재 하지 않 으 면 무승부 입 니 다.

char win(char arr[X][Y], int x, int y)//      
{
 char ch = 'C';
 int flag = 0;
 for (int i = 0; i < x; i++)
 {
  if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2] && arr[i][1] == arr[i][2])//   
  {
   return arr[i][0];
  }
 }
 for (int j = 0; j < y; j++)
 {
  if (arr[0][j] == arr[1][j] && arr[0][j] == arr[2][j] && arr[1][j] == arr[2][j])//   
  {
   return arr[0][j];
  }
 }
 if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2] && arr[1][1] == arr[2][2] && arr[0][0] != ' ')//     
 {
  return arr[0][0];
 }
 if (arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0] && arr[1][1] == arr[2][0] && arr[0][2] != ' ')//     
 {
  return arr[0][2];
 }
 for (int m = 0; m < x; m++)//    
 {
  for (int n = 0; n < y; n++)
  {
   if (arr[m][n] == ' ')
    flag = 1;
  }
 }
 if (flag == 0)
 {
  ch = 'Q';
 }
 return ch;
}

void game()//      
{
 srand((unsigned int)time(NULL));
 char arr[X][Y];
 begin(arr, X, Y);
 char rat;
 Print(arr, X, Y);
 while (1)
 {
  rat = win(arr, X, Y);
  printf("           :");
  gamer(arr, X, Y);
  Print(arr, X, Y);
  rat = win(arr, X, Y);
  if (rat != 'C' && rat != ' ')
  {
   break;
  }
  printf("   
"); computer(arr, X, Y); Print(arr, X, Y); rat = win(arr, X, Y); if (rat != 'C' && rat != ' ') { break; } } switch (rat) { case '*': printf(" !
"); break; case '#': printf(" !
"); break; case 'Q': printf("
"); break; } printf("
"); system("cls"); }
편 의 를 위해 서,우 리 는 인용 한 헤더 파일 과 함 수 를 game.h 아래 에 놓 고,다른 파일 은 game.h 를 직접 인용 하면 됩 니 다.

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#define X 3
#define Y 3
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void menu();
void game();
void begin(char arr[X][Y], int x, int y);
void Print(char arr[X][Y], int x, int y);
void gamer(char arr[X][Y], int x, int y);
void computer(char arr[X][Y], int x, int y);
char win(char arr[X][Y], int x, int y);
(3)효과 전시



이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기