gpt4 book ai didi

c - 在 tic tac toe 中进行随机移动 - C 语言

转载 作者:行者123 更新时间:2023-11-30 14:38:19 25 4
gpt4 key购买 nike

我正在做一个井字游戏,用户在其中与计算机竞争。当用户选择地点时,计算机也应该做出行动。但是,我似乎无法让它发挥作用。每当用户移动一步时,它会立即要求我再移动一次,而不是用计算机符号 (O) 填充其中一个点

我用与用户的(AI()和User())不同的函数来完成计算机部分,并尝试在开关的每个“else if”语句中调用它,但是,这只会让游戏闪烁并且不会'不允许我继续。

编辑:我也尝试在“else if”语句中执行整个 AI() 过程,而不是使其成为一个函数,但它似乎只在用户选择 1 时才起作用,而不适用于其余选项.

编辑#2:我在代码中将 (k = 1) 更改为 (k == 1)。

为了使以下代码更易于阅读,我将其设为 1x3 而不是 3x3:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct symbol{
int marked;
char symbol;
} SPOT;

SPOT spot1 = {0,'1'};
SPOT spot2 = {0,'2'};
SPOT spot3 = {0,'3'};

char symbol = 'X';
char compu = 'O';

void table();
int Check();
void User();
void AI();

int main(){
system("cls");
User();
AI();
Check();
return 0;
}


void table(){
printf("\n %c | %c | %c ",spot1.symbol,spot2.symbol,spot3.symbol);
}


void User(){
char choice;

do{
loop++;
do{
table();
printf("\n\nChoose a spot: ");
fflush(stdin);
scanf("%c",&choice);
} while(choice < '1' || choice > '3');

switch(choice){
case '1':
if(choice == '1'){
system("cls");
if(spot1.marked == 1){
printf("\nThat spot is taken\n");
}
else if(spot1.marked == 0){
spot1.marked = 1;
spot1.symbol = symbol;
}
}
break;

case '2':
if(choice == '2'){
system("cls");
if(spot2.marked == 1){
printf("\nThat spot is taken\n");
}
else if(spot2.marked == 0){
spot2.marked = 1;
spot2.symbol = symbol;
}
}
break;

case '3':
if(choice == '3'){
system("cls");
if(spot3.marked == 1){
printf("\nThat spot is taken\n");
}
else if(spot3.marked == 0){
spot3.marked = 1;
spot3.symbol = symbol;
}
}
break;
}while(Check() != 0 && Check() != 1);
}

void AI(){
int random,k;
srand(time(NULL));
do{
random = rand() % 4;
k = 0;
if(spot1.symbol == symbol || spot2.symbol == symbol || spot3.symbol == symbol){
k = 1;
}
}while(k == 1);

switch(random){
case '1':
if (random == 1){
spot1.symbol = compu;
spot1.marked = 1;
}
break;

case '2':
if (random == 2){
spot2.symbol = compu;
spot2.marked = 1;
}
break;

case '3':
if (random == 3){
spot3.symbol = compu;
spot3.marked = 1;
}
break;
}
}

int Check() {
if(spot1.marked == spot2.marked && spot2.marked == spot3.marked){
if(spot1.symbol == symbol){
return 1;
printf("You won!");
}
else if(spot1.symbol == compu){
return 0;
printf("You lost!");
}
}
else {
return 2;
}
}

最佳答案

这是因为 main 中的每个函数都会被依次调用。您的程序陷入了 User() 调用

尝试将您的 main 更改为:

int main(){
system("cls");
do{
User();
AI();
}while(Check() != 0 && Check() != 1);
return 0;
}

删除 User 函数中的 do{...}while(Check() != 0 && Check() != 1);

并将 while(k = 1); 更改为 while(k == 1);

关于c - 在 tic tac toe 中进行随机移动 - C 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56689263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com