C 언어 로 삼자 기 를 실현 하 다

10095 단어 C 언어삼자 장기
본 논문 의 사례 는 C 언어 로 삼자 기 를 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
삼자 기의 의미:
삼자 기 는 흑백 바둑 의 일종 이다.삼자 기 는 구 궁 기,동그라미 포크,용 한 마리,정자 기 등 이 라 고도 부른다.정사각형 대각선 을 연결 하여 양쪽 에 세 개의 바둑 알 을 차례대로 놓 고 자신의 세 개의 바둑 알 을 한 줄 로 만 들 면 상대방 이 지 는 것 이다.하지만 비 기 는 경우 가 많다.그림 의 예 는 다음 과 같다.

기본 사고방식:
1.사용자 대화 메뉴 창 만 들 기
2.바둑판 초기 화
3.바둑판 패 널 보이 기
4.사용자 슬롯
5.승부 판단
6.컴퓨터 랜 덤 으로 정확 한 타 자 를 맞춘다.
7.승부 판단
(매번 프로그램 을 쓰기 전에 아래 그림 과 같이 사고방식 이나 위조 코드 를 쓸 수 있다)

다 중 파일 항목 만 들 기:
코드 를 쓰기 전에 먼저 세 개의 파일 을 만들어 서 순서 코드 가 더욱 완전 하고 선명 하 게 나타 날 수 있 도록 합 니 다.

1.사용자 대화 메뉴 창 만 들 기

void Meau(){
 printf("+------ meau ----------+
"); printf("|---- 1.play --------|
"); printf("|---- 0.quit --------|
"); printf("+----------------------+
"); }
2.바둑판 초기 화
매크로 정 의 를 사용 하여 바둑판 의 내용 을 빈 것 으로 초기 화 합 니 다.

static void InitBoard(char board[][COL], int row, int col){
 for (int i = 0; i < row; i++){
  for (int j = 0; j < col; j++){
   board[i][j] = INIT;
  }
 }
}
3.바둑판 보이 기
바둑판 을 반복 적 으로 표시 하지 않 기 위해 서 는 스크린 조작 을 사용 하여 매번 현실 적 인 바둑판 이 한 장 밖 에 없다.
끊 임 없 는 디 버 깅 을 통 해 최종 인터페이스 가 예상 한 인터페이스 와 일치 하도록 합 니 다.

static void ShowBoard(char board[][COL],int row,int col){
 system("cls");//    
 printf("  ");
 for (int i = 0; i < col; i++){
  printf(" %3d", i + 1);
 }
 printf("
----------------
"); for (int i = 0; i < row; i++){ printf("%-2d", i + 1); for (int j = 0; j < col; j++){ printf("| %c ", board[i][j]); } printf("
----------------
"); } }
4.사용자 슬롯
낙자 는 빈 자리 에 만 떨 어 질 수 있 기 때문에 낙자 전에 빈 판 을 해 야 한다.만약 에 비어 있 으 면 낙자 이다.그렇지 않 으 면 다시 떨 어 지 는 것 을 알려 준다.

static void PlayerMove(char board[][COL], int row, int col){
 int x = 0;
 int y = 0;
 while (1){
  printf("please enter your postion<x,y>: ");
  scanf("%d %d", &x, &y);
  if (x<1 || x>3 || y<1 || y>3){
   printf("Postion Error!");
   continue;
  }
  if (board[x - 1][y - 1] == INIT){
   board[x - 1][y - 1] = WHITE;
   break;
  }
  else{
   printf("Postion Is Not Empty!
"); } } }
5.컴퓨터 랜 덤 으로 정확 한 타 자 를 맞춘다.
무 작위 수 를 사용 하여 정확 한 위치 에 놓 습 니 다.

static void ComputerMove(char board[][COL], int row, int col){
 while (1){
  int x = rand() % row;
  int y = rand() % col;
  if (board[x][y] == INIT){
      board[x][y] = BLACK;
   break; 
  }
 }
}
6.승 부 를 판단 한다

static char IsEnd(char board[][COL], 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] != INIT){
   return board[i][0];
  }
 }
 for (int j = 0; j < col; j++){
  if (board[0][j] == board[1][j] && \
   board[1][j] == board[2][j] && \
   board[0][j] != INIT){
   return board[0][j];
  }
 }
 if (board[0][0] == board[1][1] && \
  board[1][1] == board[2][2] && \
  board[0][0] != INIT){
  return board[0][0];
 }
 if(board[0][2] == board[1][1] && \
  board[1][1] == board[2][0] && \
  board[1][1] != INIT){
  return board[1][1];
 }
 for (int i = 0; i < row; i++){
  for (int j = 0; j < col; j++){
   if (board[i][j] == INIT);
   return NEXT;
  }
 }
 return DRAW;
}
7.게임 인터페이스 만 들 기

void Game()
{
 char board[ROW][COL];
 InitBoard(board, ROW, COL);
 srand((unsigned long)time(NULL));
 char result = 0;
 while (1){
  ShowBoard(board, ROW, COL);
  PlayerMove(board, ROW, COL);
  result = IsEnd(board, ROW, COL);
  if (result != NEXT){
   break;
  }
 
 ShowBoard(board, ROW, COL);
 ComputerMove(board, ROW, COL);
 result = IsEnd(board, ROW, COL);
 
 if (result != NEXT){
  break;
     }
 }
 ShowBoard(board, ROW, COL);
 switch (result){
 case WHITE:
  printf("You win!
"); break; case BLACK: printf("you lose!
"); break; case DRAW: printf("it ends in a draw
"); break; defult: printf("bug
"); break; } }
전체 코드

//main.c  
#include"game.h"
 
void Meau(){
 printf("+------ meau ----------+
"); printf("|---- 1.play --------|
"); printf("|---- 0.quit --------|
"); printf("+----------------------+
"); } int main(){ int select = 0; int quit = 0; while (!quit) { Meau(); printf("please enter your choose: "); scanf("%d", &select); switch (select) { case 1: Game(); break; case 0: quit = 1; break; defult: printf("Select error!Try again!
"); break; } } printf("byebye!
"); system("pause"); return 0; } //game.c #include"game.h" static void InitBoard(char board[][COL], int row, int col){ for (int i = 0; i < row; i++){ for (int j = 0; j < col; j++){ board[i][j] = INIT; } } } static void ShowBoard(char board[][COL],int row,int col){ system("cls"); printf(" "); for (int i = 0; i < col; i++){ printf(" %3d", i + 1); } printf("
----------------
"); for (int i = 0; i < row; i++){ printf("%-2d", i + 1); for (int j = 0; j < col; j++){ printf("| %c ", board[i][j]); } printf("
----------------
"); } } static char IsEnd(char board[][COL], 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] != INIT){ return board[i][0]; } } for (int j = 0; j < col; j++){ if (board[0][j] == board[1][j] && \ board[1][j] == board[2][j] && \ board[0][j] != INIT){ return board[0][j]; } } if (board[0][0] == board[1][1] && \ board[1][1] == board[2][2] && \ board[0][0] != INIT){ return board[0][0]; } if(board[0][2] == board[1][1] && \ board[1][1] == board[2][0] && \ board[1][1] != INIT){ return board[1][1]; } for (int i = 0; i < row; i++){ for (int j = 0; j < col; j++){ if (board[i][j] == INIT); return NEXT; } } return DRAW; } static void PlayerMove(char board[][COL], int row, int col){ int x = 0; int y = 0; while (1){ printf("please enter your postion<x,y>: "); scanf("%d %d", &x, &y); if (x<1 || x>3 || y<1 || y>3){ printf("Postion Error!"); continue; } if (board[x - 1][y - 1] == INIT){ board[x - 1][y - 1] = WHITE; break; } else{ printf("Postion Is Not Empty!
"); } } } static void ComputerMove(char board[][COL], int row, int col){ while (1){ int x = rand() % row; int y = rand() % col; if (board[x][y] == INIT){ board[x][y] = BLACK; break; } } } void Game() { char board[ROW][COL]; InitBoard(board, ROW, COL); srand((unsigned long)time(NULL)); char result = 0; while (1){ ShowBoard(board, ROW, COL); PlayerMove(board, ROW, COL); result = IsEnd(board, ROW, COL); if (result != NEXT){ break; } ShowBoard(board, ROW, COL); ComputerMove(board, ROW, COL); result = IsEnd(board, ROW, COL); if (result != NEXT){ break; } } ShowBoard(board, ROW, COL); switch (result){ case WHITE: printf("You win!
"); break; case BLACK: printf("you lose!
"); break; case DRAW: printf("it ends in a draw
"); break; defult: printf("bug
"); break; } } //game.h #ifndef __GAME_H__ #define __GAME_H__ #include<stdio.h> #include <time.h> #include <stdlib.h> #include<windows.h> #pragma warning(disable:4996) #define ROW 3 #define COL 3 #define INIT ' ' #define WHITE 'X'//player #define BLACK 'O'//computer #define DRAW 'D' #define NEXT 'N' extern void Game(); #endif
코드 결과 표시

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

좋은 웹페이지 즐겨찾기