【发布时间】:2013-11-05 16:27:23
【问题描述】:
我正在尝试创建游戏 Chomp。我已经完成了一半,但是卡住了。
游戏将有 5 种不同的功能。不允许使用指针和结构。
这就是我已经走了多远,我一直在努力解决一些问题,但我不知道如何自己解决这些问题,所以我想我可以在这里得到一些帮助。
BUG
a) 如果你先输入 2 2 然后输入 2 1 会说这个位置已经被吃掉了,即使这是一个完全有效的吃饭姿势。而不是检查位置是否是 != 'O' 我应该检查它是否是 == 'O',但这也行不通,因为在 check_move() 循环行和 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;
}
【问题讨论】:
标签: c