gpt4 book ai didi

C Chomp 问题?

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:15 25 4
gpt4 key购买 nike

我正在尝试创建游戏 Chomp。我已经完成一半了,但还是卡住了。

游戏将有 5 种不同的功能。不允许使用指针和结构。

这就是我已经走了多远,一段时间以来我一直在为一些问题而苦苦挣扎,但我不知道如何自己解决这些问题,所以我想我可以在这里得到一些帮助。

漏洞

a) 如果先输入2 2再输入2 1会说仓位已经被吃掉了,即使这是一个完全正确的吃饭姿势。我应该检查位置是否为 != 'O',而不是检查位置是否为 != 'O',但这也行不通,因为在 >check_move() 循环行和列不会总是O...

b) 如果您输入的位置不在矩阵内(即 20 20),您将得到两行 错误。我不明白为什么。当然我只想显示一个错误,而不是两个。

c) 如果你输入一个已经被吃掉的位置,你会因为正在循环的循环多次出现错误“Already been eaten!”打印几次。

问题

a)Player 1Player 2 之间交替的最佳方式是什么?我想到了一个 int,每次玩家进行有效移动时,它都会增加 +1。然后我会检查int的值是奇数还是偶数。奇数 = 玩家 1,偶数 = 玩家 2,反之亦然。但这行不通,因为不允许我拥有比目前更多的全局变量。而且我只能从一个函数返回一个值 (check_move())。

#include <stdio.h>

int height = 4;
int width = 10;
char matrix[4][10];


void initialize()
{
for(int row = 0; row < height; row++)
for(int col = 0; col < width; col++)
matrix[row][col] = 'O';
}



void print_board()
{
printf("\n\n");

for(int row = 0; row < height; row++)
{
for(int col = 0; col < width; col++)
{
printf("%c", matrix[row][col]);
}
printf("\n");
}
printf("\n\n");
}



void get_move(int player, int input[])
{
printf("Player %d, make your move: ", player);
scanf("%d %d", &input[0], &input[1]);
}



int check_move(int position[])
{
int row = position[0];
int col = position[1];
int status = 1;

if(row <= height && col <= width)
{
for(row; row <= height; row++)
{
for(col; col <= width; col++)
{
// Checks if position already has been eaten
if(matrix[row-1][col-1] != 'O')
{
printf("Already eaten!\n");
status = 0;
}

}
}
}


else if(row >= height || col >= width)
{
printf("Your move must be inside the matrix!\n");
status = 0;
}

return status;
}



void update_board(int x, int y)
{

for(int xi = x; xi <= 10; ++xi)
{
for(int yi = y; yi <= 10; ++yi)
matrix[xi-1][yi-1] = ' ';
}

}



int main(void)
{

int player = 1;
int position[2];

initialize();
print_board();

while(1){

get_move(player, position);

check_move(position);


while(check_move(position) != 1)
{
printf("Try again!\n\n");
get_move(player, position);
}

update_board(position[0], position[1]);

print_board();

}

getchar();
getchar();
getchar();


return 0;
}

最佳答案

错误 a 和 c:

你的check_move函数是错误的,你应该只测试打出的位置是否被吃掉,其他位置的状态无关:

int check_move(int pos[])
{
if(pos[0] < 1 || pos[0] > height || pos[1] < 1 || pos[1] > width)
{
printf("Your move must be inside the matrix!\n");
return 0;
}

if(matrix[ pos[0] - 1 ][ pos[1] - 1 ] != 'O' ) {
printf("Already eaten!\n");
return 0;
}

return 1;
}

错误 b:

您两次收到错误消息,因为您在主程序中调用了两次 check_move:

check_move(position);
while(check_move(position) != 1)

只需删除对 check_move() 的无用的第一次调用。

问题一:

您可以通过更新 main 中的变量 player 来在玩家之间切换:

player = (player + 1) % maxNumberOfPlayer;

这将从 0maxNumberOfPlayer - 1,因此您可以使用 printf("Player %d, make your move: ", player + 1 ); 以获得更加用户友好的输出。此外,如果 maxNumberOfPlayer = 2,则 player = (player + 1) % 2; 等同于 player = !player

关于C Chomp 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19793873/

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