어떻게 가장 간단 한 C 언어 를 이용 하여 AI 오목 을 실현 합 니까?

17354 단어 C 언어ai오목
어떻게
1.설명:본 고 는 C 언어 를 처음 배 운 사람 에 게 만 배우 기 때문에 그 어떠한 알고리즘 도 언급 하지 않 고 컴퓨터 는 무 작위 로 하 는 방식 을 사용 할 것 이다.(후기 에는 알파-베타 가지치기 알고리즘 인공지능 AI 구현 을 소개 한다)
2.주요 부분:
(1)메뉴
(2)바둑판 인쇄
(3)플레이어 의 능력
(4)컴퓨터
(5)승 부 를 판단 한다.
2.코드 및 분석 실현
(1)메뉴 제작
在这里插入图片描述
在这里插入图片描述
도...while 순환 호출 메뉴 를 사용 하여 사용자 선택 에 따라 게임 을 하고 게임 을 종료 합 니 다.
(2)바둑판 의 초기 화 와 인쇄
바둑판 은 표준 15*15 의 칸 을 사용 하 는데 우 리 는 ROW 와 COL 을 각각 15 와 15 로 정의 하여 줄 과 열 을 표시 할 수 있다.
在这里插入图片描述
각각 두 개의 함 수 를 봉 하여 바둑판 을 초기 화하 고 인쇄 하 다
초기 화:(여기 서 바둑판 을 빈 칸 으로 초기 화 합 니 다.다른 것 으로 초기 화 할 수 있 습 니 다)
在这里插入图片描述
바둑판 인쇄:
在这里插入图片描述
효 과 는 다음 과 같 습 니 다:
在这里插入图片描述
(3)플레이어 의 능력

void PlayerMove(char board[ROW][COL], int row, int col) {
	int x, y;
	while (1) {
		printf("   :
"); printf(" :
"); scanf("%d %d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col) { if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = 'O'; break; } else { printf(" ,
"); } } else { printf(" ,
"); } } }
게이머 들 이 주로 사용 하 는 사 고 는 바둑판 에 알 이 있 는 지,이미 입력 한 좌표 가 합 법 적 인지 판단 하 는 것 이다.
(4)컴퓨터

void ComputerMove(char board[ROW][COL], int row, int col) {
	int x, y;
	printf("   
"); while (1) { x = rand() % row; y = rand() % col; if (board[x][y] == ' ') { board[x][y] = 'X'; break; } } }
게이머 들 과 똑 같 습 니 다.여기 서 사용 하 는 무 작위 적 인 부분 은 후기 에 최적화 할 수 있 습 니 다(예 를 들 어 극 소 값 알고리즘,Alpha-Beta 가지치기 알고리즘 등)
(5)승 부 를 판단 한다.
전체 바둑판 을 옮 겨 다 니 며 다섯 개의 상황 이 나타 나 는 지 관찰 합 니 다.코드 는 다음 과 같 습 니 다.

char iswin(char board[ROW][COL], int row, int col) {
	// 
	int ren=0,dian=0,i,j;
	for (i = 0;i < row;i++) {
		ren = 0;
		for (j = 0;j < col;j++) {
			if (board[i][j] == 'O')
				ren++;
			else
				ren = 0;
			if (ren >= 5)
				return 'o';
		}
		
	}
	for (i = 0;i < row;i++) {
		dian = 0;
		for (j = 0;j < col;j++) {
			if (board[i][j] == 'X')
				dian++;
			else
				dian = 0;
			if (dian >= 5)
				return 'x';
		}
		
	}
	// 
	ren = dian = 0;
	for (i = 0;i < row;i++) {
		ren = 0;
		for (j = 0;j < col;j++) {
			if (board[j][i] == 'O')
				ren++;
			else
				ren = 0;
			if (ren >= 5)
				return 'o';
		}
		
	}
	for (i = 0;i < row;i++) {
		dian = 0;
		for (j = 0;j < col;j++) {
			if (board[j][i] == 'X')
				dian++;
			else
				dian = 0;
			if (dian >= 5)
				return 'x';
		}
		
	}
	//  
	ren = dian =i=j= 0;
	for (int k = 0;k < row;k++) {
		i = k;
		j = 0;
		ren = 0;
		while (i < row && j < col) {
			if (board[i][j] == 'O') {
				ren++;
			}
			else {
				ren = 0;
			}
			i++;
			j++;
			if (ren >= 5)
				return 'o';
		}
		
	}
	i = j = 0;
	for (int k = 0;k < row;k++) {
		i = k;
		j = 0;
		dian = 0;
		while (i < row && j < col) {
			if (board[i][j] == 'X') {
				dian++;
			}
			else
				dian = 0;
			i++;
			j++;
			if (dian >= 5)
				return 'x';
		}
		
	}
	//  
	for (int k = row;k >=0;k--) {
		j = col;
		i = k;
		ren = 0;
		while (i >=0 && j >=0) {
			if (board[i][j] == 'O') {
				ren++;
			}
			else
				ren = 0;
			i--;
			j--;
			if (ren >= 5)
				return 'o';
		}

	}
	
	for (int k = row;k >= 0;k--) {
		i = k;
		j = col;
		dian = 0;
		while (i >= 0 && j >= 0) {
			if (board[i][j] == 'X') {
				dian++;
			}
			else
				dian = 0;
			i--;
			j--;
			if (dian >= 5)
				return 'o';
		}
		
	}
	for (int k = row;k >= 0;k--) {
		i = k;
		j = 0;
		dian = 0;
		while (i >= 0 && j <col) {
			if (board[i][j] == 'O') {
				dian++;
			}
			else
				dian = 0;
			i--;
			j++;
			if (dian >= 5)
				return 'o';
		}

	}
	for (int k = row;k >= 0;k--) {
		i = k;
		j = 0;
		dian = 0;
		while (i >= 0 && j <col) {
			if (board[i][j] == 'X') {
				dian++;
			}
			else
				dian = 0;
			i--;
			j++;
			if (dian >= 5)
				return 'x';
		}

	}
	for (int k = 0;k < row;k++) {
		i = k;
		j = col;
		dian = 0;
		while (i < row && j >= 0) {
			if (board[i][j] == 'O') {
				dian++;
			}
			else
				dian = 0;
			i++;
			j--;
			if (dian >= 5)
				return 'o';
		}

	}
	for (int k = 0;k <row;k++) {
		i = k;
		j = col;
		dian = 0;
		while (i <row && j >= 0) {
			if (board[i][j] == 'X') {
				dian++;
			}
			else
				dian = 0;
			i++;
			j--;
			if (dian >= 5)
				return 'x';
		}

	}
	for (int k = row;k >= 0;k--) {
		i = k;
		j = 0;
		dian = 0;
		while (i >= 0 && j <col) {
			if (board[i][j] == 'O') {
				dian++;
			}
			else
				dian = 0;
			i--;
			j++;
			if (dian >= 5)
				return 'o';
		}

	}
	for (int k = row;k >= 0;k--) {
		i = k;
		j = 0;
		dian = 0;
		while (i >= 0 && j <col) {
			if (board[i][j] == 'X') {
				dian++;
			}
			else
				dian = 0;
			i--;
			j++;
			if (dian >= 5)
				return 'x';
		}

	}
	for (int k = 0;k < row;k++) {
		i = k;
		j = col;
		dian = 0;
		while (i < row && j >= 0) {
			if (board[i][j] == 'O') {
				dian++;
			}
			else
				dian = 0;
			i++;
			j--;
			if (dian >= 5)
				return 'o';
		}

	}
	for (int k = 0;k <row;k++) {
		i = k;
		j = col;
		dian = 0;
		while (i <row && j >= 0) {
			if (board[i][j] == 'X') {
				dian++;
			}
			else
				dian = 0;
			i++;
			j--;
			if (dian >= 5)
				return 'x';
		}

	}
	return 'c';
	// 
}
전체 코드
(1)test.c 파일 아래 코드:

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu() {
	printf("**************************
"); printf("******* 1. play *********
"); printf("******* 0. exit *********
"); printf("**************************
"); } void game() { // char board[ROW][COL],ret; // InitBoard(board, ROW, COL); // PrintBoard(board, ROW, COL); // int a; printf("1. 0. "); scanf("%d", &a); if(a==1) PlayerMove(board, ROW, COL); else ComputerMove(board, ROW, COL); while (1) { if (a == 0) { //PlayerMove(board, ROW, COL); PlayerMove(board, ROW, COL); PrintBoard(board, ROW, COL); ret=iswin(board, ROW, COL); if (ret != 'c') { break; } //ComputerMove(board, ROW, COL); ComputerMove(board, ROW, COL); PrintBoard(board, ROW, COL); ret = iswin(board, ROW, COL); if (ret != 'c') { break; } } else { //ComputerMove(board, ROW, COL); ComputerMove(board, ROW, COL); PrintBoard(board, ROW, COL); ret = iswin(board, ROW, COL); if (ret != 'c') { break; } //PlayerMove(board, ROW, COL); PlayerMove(board, ROW, COL); PrintBoard(board, ROW, COL); ret = iswin(board, ROW, COL); if (ret != 'c') { break; } } } if (ret == 'o') printf("
"); else if (ret == 'x') printf("
"); else printf("
"); } int main() { int input; srand((unsigned int)time(NULL)); do { menu(); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("
"); break; default: printf("
"); break; } } while (input); return 0; }
(2)game.c 의 코드

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
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] = ' ';
		}
	}
}
void PrintBoard(char board[ROW][COL], int row, int col) {
	for (int i = 0;i < row;i++) {
		printf("  ");
		printf("%2d", 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]); if (j < col - 1) printf("|"); } printf("
"); // if (i < row - 1) { printf(" "); for (int j = 0;j < col;j++) { printf("---"); if (j < col-1) printf("|"); } printf("
"); } } } void PlayerMove(char board[ROW][COL], int row, int col) { int x, y; while (1) { printf(" :
"); printf(" :
"); scanf("%d %d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col) { if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = 'O'; break; } else { printf(" ,
"); } } else { printf(" ,
"); } } } void ComputerMove(char board[ROW][COL], int row, int col) { int x, y; printf("
"); while (1) { x = rand() % row; y = rand() % col; if (board[x][y] == ' ') { board[x][y] = 'X'; break; } } } char iswin(char board[ROW][COL], int row, int col) { // int ren=0,dian=0,i,j; for (i = 0;i < row;i++) { ren = 0; for (j = 0;j < col;j++) { if (board[i][j] == 'O') ren++; else ren = 0; if (ren >= 5) return 'o'; } } for (i = 0;i < row;i++) { dian = 0; for (j = 0;j < col;j++) { if (board[i][j] == 'X') dian++; else dian = 0; if (dian >= 5) return 'x'; } } // ren = dian = 0; for (i = 0;i < row;i++) { ren = 0; for (j = 0;j < col;j++) { if (board[j][i] == 'O') ren++; else ren = 0; if (ren >= 5) return 'o'; } } for (i = 0;i < row;i++) { dian = 0; for (j = 0;j < col;j++) { if (board[j][i] == 'X') dian++; else dian = 0; if (dian >= 5) return 'x'; } } // ren = dian =i=j= 0; for (int k = 0;k < row;k++) { i = k; j = 0; ren = 0; while (i < row && j < col) { if (board[i][j] == 'O') { ren++; } else { ren = 0; } i++; j++; if (ren >= 5) return 'o'; } } i = j = 0; for (int k = 0;k < row;k++) { i = k; j = 0; dian = 0; while (i < row && j < col) { if (board[i][j] == 'X') { dian++; } else dian = 0; i++; j++; if (dian >= 5) return 'x'; } } // for (int k = row;k >=0;k--) { j = col; i = k; ren = 0; while (i >=0 && j >=0) { if (board[i][j] == 'O') { ren++; } else ren = 0; i--; j--; if (ren >= 5) return 'o'; } } for (int k = row;k >= 0;k--) { i = k; j = col; dian = 0; while (i >= 0 && j >= 0) { if (board[i][j] == 'X') { dian++; } else dian = 0; i--; j--; if (dian >= 5) return 'o'; } } for (int k = row;k >= 0;k--) { i = k; j = 0; dian = 0; while (i >= 0 && j <col) { if (board[i][j] == 'O') { dian++; } else dian = 0; i--; j++; if (dian >= 5) return 'o'; } } for (int k = row;k >= 0;k--) { i = k; j = 0; dian = 0; while (i >= 0 && j <col) { if (board[i][j] == 'X') { dian++; } else dian = 0; i--; j++; if (dian >= 5) return 'x'; } } for (int k = 0;k < row;k++) { i = k; j = col; dian = 0; while (i < row && j >= 0) { if (board[i][j] == 'O') { dian++; } else dian = 0; i++; j--; if (dian >= 5) return 'o'; } } for (int k = 0;k <row;k++) { i = k; j = col; dian = 0; while (i <row && j >= 0) { if (board[i][j] == 'X') { dian++; } else dian = 0; i++; j--; if (dian >= 5) return 'x'; } } return 'c'; // }
(3)game.h 의 코드

#pragma once
#define ROW 15
#define COL 15
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//     
void InitBoard(char board[ROW][COL], int row, int col);
//    
void PrintBoard(char board[ROW][COL], int row, int col);
//  
void PlayerMove(char board[ROW][COL], int row, int col);
//   
void ComputerMove(char board[ROW][COL], int row, int col);
//    
char iswin(char board[ROW][COL], int row, int col);

구체 적 효과
1.바둑판 인쇄 및 선착순 선택
在这里插入图片描述
2.플레이어 와 컴퓨터
在这里插入图片描述
3.승 부 를 판단 한다
在这里插入图片描述
이곳 에서 우 리 는 게이머 가 이 기 는 것 을 보 았 지만,컴퓨터 가 너무 어 리 석 어서 추가 해 야 할 곳 이 많다.
여러분,이 코드 를 최적화 하 는 것 을 환영 합 니 다!
총결산
가장 쉬 운 C 언어 로 AI 오목 을 구현 하 는 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 로 AI 오목 을 구현 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 읽 어 주시 기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기