ゲームChompを作成しようとしています。私は途中ですが、かなり立ち往生しています。
ゲームには5つの異なる機能があります。ポインターと構造体は使用できません。
ここまで来て、しばらくの間、いくつかの問題に苦しんでいましたが、自分で解決する方法がわからないので、ここで助けを得ることができると思いました.
バグ
a)最初に2 2を入力し、次に2 1を入力すると、完全に有効な食べる位置であっても、その位置は既に食べられていると表示されます。位置が!= 'O'であるかどうかを確認する代わりに、 == 'O'であるかどうかを確認する必要がありますが、check_move()ループでは行と列が常にOであるとは限らないため、それも機能しません。 .
b)行列の内側にない位置 (つまり20 20 ) を入力すると、2行のエラーが発生します。理由がわかりません。もちろん、2 つではなく 1 つのエラーだけを表示したいのです。
c)既に食べられた位置を入力すると、プリントを数回ループしているループのために、「既に食べられています! 」というエラーが数回発生します。
質問
a)プレーヤー 1とプレーヤー 2を交互に使用する最善の方法は何ですか? プレイヤーが有効な動きをするたびに+1増加する int について考えました。次に、int の値が奇数か偶数かを確認します。奇数 = プレイヤー 1、偶数 = プレイヤー 2、またはその逆。しかし、現在持っている以上のグローバル変数を持つことは許可されていないため、それは機能しません。そして、1 つの関数 ( check_move() )から 1 つの値しか返すことができません。
#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;
}