C 언어 실현 간단 한<삼자 기>사례

7592 단어 C 언어삼자 장기
바둑판 의 실현
모두 가 알 고 있 는 바 와 같이 삼자 기 바둑판 은 사실 하나의 9 개의 격자 이기 때문에 우 리 는 먼저 2 차원 배열 을 정의 하여 바둑 알 을 보관 하 는 것 을 실현 해 야 한다.각 격자 마다 우 리 는 세 개의 작은 칸,예 를 들 어'X'를 차지 하고 구분자 가 있어 야 바둑 알 을 나 눌 수 있다 고 규정 한다.
바둑판 초기 화
바둑판 이 시 작 될 때 바둑판 은 반드시 비어 있어 야 하기 때문에 우 리 는 먼저 배열 을 초기 화하 고 모든 요 소 를''로 설정 한 다음 에 바둑판 의 기능 을 실현 해 야 한다.바둑판 의 초기 화 코드 는 다음 과 같다.

void InitBoard(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			board[i][j] = ' ';
		}
	}
}
바둑판
바둑판 은 2 차원 배열 이 고 모든 요 소 는 구분자 로 구분 해 야 하 며 횡행 은'|',세로 열 은'―'를 사용한다.한 줄 에 세 개의 원소 가 있 기 때문에 두 개의'|'을 사용 하고 세 개의 열 이 있 기 때문에 두 개의'-'를 사용한다.그리고'-'가 차지 하 는 줄 에 도'|'을 넣 어야 한다.바둑판 의 실현 코드 는 다음 과 같다.

void ShowBoard(char board[ROW][COL], int row, int col)
{
	printf("=====================
"); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { // printf(" %c ", board[i][j]); // if (j < col - 1) { printf("|"); } } // printf("
"); // 2 if (i < row - 1) { for (int j = 0; j < col; j++) { printf("---"); // if (j < col - 1) { printf("|"); } } printf("
"); } } printf("=====================
"); }
이 두 단 계 를 완성 한 후 바둑판 의 실현 은 완성 되 었 다.
정착 의 실현
바둑판 이 실 현 된 후에 그 다음은 낙자 이다.우 리 는 두 가지 함 수 를 써 야 한다.하 나 는 게이머 의 낙자 이 고 하 나 는 컴퓨터 의 낙자 이다.
플레이어
게이머 의 타 자 는 배열 요소 의 대 가 를 통 해 이 루어 집 니 다.대 가 를 통 해 우 리 는'X'로 바 꿀 수 있 습 니 다.(나 는 게이머 의 타 자 를'X'로 규정 합 니 다)그리고 게이머 의 타 자 는 1~3 만 채 울 수 있 는 규정 이 있 습 니 다.규정 을 초과 하면 우 리 는 게이머 의 타 자 를 규범화 시 키 지 않 고 게이머 의 타 자 는 배열 이'가 아 닌 곳 에 떨 어 질 수 없습니다.유 저 는 배열 이'가 아 닌 곳 에 떨 어 질 수 없습니다.우 리 는 유저 에 게 정확 한 타 자 를 제시 해 야 한다.이상,우 리 는 while 순환 을 써 서 게이머 들 이 정확하게 떨 어 질 수 있 도록 해 야 합 니 다.그리고 if 판단 문 구 를 순환 해서 써 서 게이머 들 이 정확 한 떨 어 질 지 여 부 를 판단 해 야 합 니 다.그리고 게이머 들 이 정확 한 떨 어 질 때 이 순환 은 계속 존재 합 니 다.코드 는 다음 과 같 습 니 다.
다음은 내 연 코드 필름 을 보 여 드 리 겠 습 니 다.

void playermove(char board[ROW][COL], int row, int col)
{
	while (1)
	{
		printf("       :
"); int x = 0; int y = 0; scanf_s("%d%d", &x,&y); if (x >= 1 && x <= 3 && y >= 1 && y <= 3) { //x o if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = 'x'; break; } else { printf("
"); } } else { printf("
"); } } }
컴퓨터 소켓
컴퓨터 타 자 는 게이머 와 비슷 하지만 컴퓨터 타 자 는 제시 문 이 적 고 함수-rand 함 수 를 하나 더 사 용 했 습 니 다.그리고 게임 의 재 미 를 위해 srand(unsigned)time(NULL)(이것 은 제 가 main 함수 에 넣 겠 습 니 다)를 전 달 했 습 니 다.랜 덤 으로 피 드 를 세 어 컴퓨터 가 떨 어 지 는 곳 마다 다 르 게 한다.이 를 사용 하지 않 으 면 컴퓨터 가 떨 어 지 는 곳 과 순서 가 같다.

void ComputerMove(char board[ROW][COL], int row, int col)
{
	while (1)
	{
		int x = rand()%row;//[0,1,2]
		int y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = 'O';
			break;    //break  while  
		}
	}
}
승 부 를 판단 하 다
승 부 를 판단 하려 면 우 리 는 두 걸음 으로 나 누 어야 한다.한 걸음 은 무승부 이 고 한 걸음 은 잠 을 자고 이 기 는 것 을 판단 하 는 것 이다.
무승부 로 판 가름 하 다
무승부 의 판단 방법 은 바둑판 이 아직 남아 있 는 지 아 닌 지 를 판단 하 는 것 이다.바둑 을 두 는 과정 에서 우 리 는 바둑판 에''가 없 으 면 누가 이 길 것 인 지 를 판단 하지 않 았 다.이때 우 리 는 무승부 로 판단 했다.

static int IsFull(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
			{
				return -1;//   
			}
		}
	}
	return 1;//      
}
누가 이 길지 판단 하 다
누가 우 리 를 이 길지 판단 하 는 데 는 세 가지 방법 이 있 고,각각의 방법 은 두 가지 다른 상황 을 써 야 한다.1.줄 이 같다.모든 줄 은'X'또는'O'이 고 우 리 는'X'가 게이머 에 게 이 기 는 것 을 규정 한다.'O'컴퓨터 를 위해 이기 기;2.열 이 같다.판단 상황 은 첫 번 째 와 비슷 하 다.3.경사 가 같 고 경사 가 같다 고 판단 할 때 아래 표 의 변화 에 주의해 야 한다.

char IsWin(char board[ROW][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] != ' ')
		{
			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] != ' ')
		{
			return board[0][j];
		}
	}

	if (board[0][0] == board[1][1] && board[1][1] == board[2][2]
		&& board[0][0] != ' ')
	{
		return board[0][0];
	}

	if (board[0][2] == board[1][1] && board[1][1] == board[2][0]
		&& board[0][2] != ' ')
	{
		return board[0][2];
	}

	//     
	if (IsFull(board, row, col) == 1)
	{
		return 'Q';//  
	}

	return ' ';//            
}
게임 의 실현
게임 메뉴
프로그램 이 시작 되 었 습 니 다.우 리 는 게이머 들 이 게임 에 들 어 갈 지 여 부 를 선택 할 수 있 도록 메뉴 를 만들어 야 합 니 다.
다음은 내 연 코드 필름 을 보 여 드 리 겠 습 니 다.

void menu()
{
	printf("**********************
"); printf("******0.exit**********
"); printf("******1.paly**********
"); printf("**********************
"); }
게임 에 들어가다
게이머 들 이 먼저 떨 어 지고 매번 떨 어 진 후에 바둑판 을 다시 인쇄 해 야 합 니 다.그리고 매번 떨 어 진 후에 우 리 는 승부 와 무승부 여 부 를 판단 합 니 다.이렇게 3 자 바둑 게임 을 썼 습 니 다!!
다음은 내 연 코드 필름 을 보 여 드 리 겠 습 니 다.

void game()
{
	printf("      
"); char board[ROW][COL] = { 0 }; InitBoard(board, ROW, COL); ShowBoard(board, ROW, COL); char ret; while (1) { PlayerMove(board, ROW, COL); // ret = IsWin(board, ROW, COL); if (ret != ' ') { break; } ShowBoard(board, ROW, COL); ComputerMove(board, ROW, COL); ret = IsWin(board, ROW, COL); if (ret != ' ') { break; } ShowBoard(board, ROW, COL); } if (ret == 'X') { printf("
"); } else if (ret == 'O') { printf("
"); } else if (ret == 'Q') { printf("
"); } }
주 함수

int main()
{
	//    
	srand((unsigned)time(NULL));
	int input;
	do
	{
		menu();
		printf("       :
"); scanf_s("%d", &input); switch (input) { case 1: game(); break; case 0: printf("
"); break; default: break; } } while (input != 0); return 0; }
여기 서 C 언어 가 간단 한 을 실현 하 는 사례 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 인 에 관 한 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기