我正在尝试创建游戏 Chomp。我已经完成了一半,但非常卡住。
游戏将有5个不同的功能。不允许使用指针和结构。
这就是我已经走了多远,我一直在努力解决一些问题,但我不知道如何自己解决这些问题,所以我想我可以在这里得到一些帮助。
错误
a)如果你先输入2 2然后输入2 1它会说这个位置已经被吃掉了,即使它是一个完全有效的吃的位置。而不是检查位置是否是!= 'O'我应该检查它是否是== 'O',但这也不起作用,因为在check_move()循环中, row 和 col 并不总是O .. .
b)如果您输入的位置不在矩阵内(即20 20),您将得到两行错误。我不明白为什么。当然我只想显示一个错误,而不是两个。
c)如果你输入一个已经被吃掉的位置,你会得到错误“已经被吃掉了! ”由于循环多次循环打印。
问题
a)在玩家 1和玩家 2之间交替的最佳方式是什么?我想过每次玩家进行有效移动时都会增加+1的 int。然后我会检查 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;
}