我正在制作一个井字游戏,用户在其中与计算机竞争。每当有人在1到9之间选择一个地点时,计算机也需要选择一个地点。为此,我正在使用rand()。但是,如果该地点已经被占用,则需要计算机来计算一个新的地点。我曾尝试使用while和do-while循环,但是当我应用它们时,cmd停止工作,并且不允许我继续游戏。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct symbol{
int marcado;
char simbolo;
} SPOT;
SPOT casilla1 = {0,'1'};
SPOT casilla2 = {0,'2'};
SPOT casilla3 = {0,'3'};
void table();
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{
do{
board();
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(casilla1.marcado == 1){
printf("\noccupied\n");
}
else if(casilla1.marcado == 0){
casilla1.marcado = 1;
casilla1.simbolo = 'X';
AI();
}
}
break;
case '2': if(choice == '2'){
system("cls");
if(casilla2.marcado == 1){
printf("\noccupied\n");
}
else if(casilla2.marcado == 0){
casilla2.marcado = 1;
casilla2.simbolo = 'X';
AI();
}
}
break;
case '3': if(choice == '3'){
system("cls");
if(casilla3.marcado == 1){
printf("\noccupied");
}
else if(casilla3.marcado == 0){
casilla3.marcado = 1;
casilla3.simbolo = 'X';
AI();
}
}
break;
}while(Check() != 0 && Check() != 1);
}
这是计算机的功能。在其中,“ else if”语句遇到了麻烦,因为我不知道要在语句中加上什么。
void AI(){
int random;
srand(time(NULL));
random = rand() % 3 + 1;
if (random == 1){
if(casilla1.marcado == 0){
casilla1.simbolo = 'O';
casilla1.marcado = 1;
}
else if(casilla1.marcado == 1){
random = rand() % 3 + 1
}
}
if (random == 2){
if(casilla2.marcado == 0){
casilla2.simbolo = 'O';
casilla2.marcado = 1;
}
else if(casilla2.marcado == 1){
random = rand() % 3 + 1;
}
}
if (random == 3){
if(casilla3.marcado == 0){
casilla3.simbolo = 'O';
casilla3.marcado = 1;
}
else if(casilla3.marcado == 1){
random = rand() % 3 + 1;
}
}
}
正如我之前所说,我尝试将整个AI()放入不同类型的循环中,仅将rand()放入其中,依此类推,但仍然无法正常工作。
答案 0 :(得分:2)
首先,更好地选择数据结构。代替:
SPOT casilla1 = {0,'1'};
SPOT casilla2 = {0,'2'};
SPOT casilla3 = {0,'3'};
使用
SPOT casilla[3] = { {0,'1'}, {0,'2'}, {0,'3'} };
因此,不再需要switch
构造。代替:
if(casilla1.marcado == 0){
if(casilla2.marcado == 0){
if(casilla3.marcado == 0){
使用:
if(casilla[random-1].marcado == 0){
该人选择1到9之间的一个地点
和
random = rand() % 9 + 1;
您只有3个casilla
。其他6个在哪里?
我尝试使用while和do-while循环
在AI()
中没有循环。也许您可以向我们展示带有循环的代码?
printf("\n\nChoose a spot: ");
fflush(stdin);
您可能想fflush()
stdout
?