어떻게 가장 간단 한 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 오목 을 구현 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 읽 어 주시 기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.