gpt4 book ai didi

黑白棋游戏中的 C 指针

转载 作者:行者123 更新时间:2023-11-30 17:51:10 25 4
gpt4 key购买 nike

我希望这个函数在玩家 1 放置位置程序检查之后,左侧是玩家 1 的棋子,而玩家 1 的两个棋子之间的所有对手的爪子都打开“X”,就像在黑白棋游戏中一样。

这是整个未完成的代码:

#include<stdio.h>


#define SIZE 7

char board[SIZE][SIZE];
char letter;
int number;

void make_board(char tab[SIZE][SIZE]){
int w,k;

for(w=0; w < SIZE; w++){

for(k=0; k < SIZE; k++){
tab[w][k] = '.';
}
}

tab[0][0] = 'X';
tab[1][0] = '1';
tab[2][0] = '2';
tab[3][0] = '3';
tab[4][0] = '4';
tab[5][0] = '5';
tab[6][0] = '6';

tab[0][1] = 'A';
tab[0][2] = 'B';
tab[0][3] = 'C';
tab[0][4] = 'D';
tab[0][5] = 'E';
tab[0][6] = 'F';

tab[4][4] = 'X';
tab[4][3] = 'O';
tab[3][4] = 'O';
tab[3][3] = 'X';

}

char draw_board(char tab[SIZE][SIZE]){
int w, k;
for(w=0; w < SIZE; w++){
for(k=0; k < SIZE; k++){
printf("%2c", tab[w][k]);
}
printf("\n");
}
}

int translate(char letter){
int letter_to_number;
switch(letter){
case 'A':
case 'a':
letter_to_number = 1;
break;

case 'B':
case 'b':
letter_to_number = 2;
break;

case 'C':
case 'c':
letter_to_number = 3;
break;

case 'D':
case 'd':
letter_to_number = 4;
break;
case 'E':
case 'e':
letter_to_number = 5;
break;
}
return letter_to_number;
}
int finished(char tab[SIZE][SIZE]){ // looking '.' in array
int i,j;
for(i=1;i<=SIZE;i++){
for(j=1;j<=SIZE;j++){
if(tab[i][j]=='.'){
return 1;
}else{
return 0; // if don't find any '.' game is finish
}
}
}
}

void hit(char tab[SIZE][SIZE], int player ){
int i,j;

int *poz1, *poz2;
printf("Call out a letter and a number of a row and column on the grid:\n");
scanf(" %c %d", &letter, &number);
i=translate(letter);
poz1=&tab[number][i];
if(tab[number][i]=='.'){
if(player==1){
*poz1='X';
for(poz1-1;*poz1=='X';poz1--){
poz2=&poz1;}
poz1=&tab[number][i];
for(poz2;poz2<=poz1;poz2++){
*poz2='X';}
}else{
*poz1='O';
for(poz1-1;*poz1=='O';poz1--){
poz2=&poz1;}
poz1=&tab[number][i];
for(poz2;poz2<=poz1;poz2++){
poz2='O';}
}
}else{
printf("On this place already is pawn\n");
}
draw_board(board);
getchar();
}

int main(){
int i,j,k, pg1=0, pg2=0, player=1;
make_board(board);
draw_board(board);

do{
if(player==1){
printf("Player 1\n");
hit(board, gracz);
k=finished(board);
gracz=2;
}else{
printf("Player 2\n");
hit(board, gracz);
k=finished(board);
player=1;
}
}while(k==1);

for(i=1;i<=SIZE;i++){
for(j=1;j<=SIZE;j++){
if(board[i][j]=='X'){
pg1++;
}else{
pg2++;
}
}
}

if(pg1>pg2){
printf("Player 1 wins");
}else{
printf("Player 2 wins");
}
return 0;
}

最佳答案

有点错误的代码:

 poz1=&tab[number][i];
if(tab[number][i]=='.'){
if(player==1){
*poz1='X';
for(poz1-1;*poz1=='X';poz1--){
poz2=&poz1;}
poz1=&tab[number][i];
for(poz2;poz2<=poz1;poz2++){
*poz2='X';}

如何将 &pos1 分配给 pos2。为此,您需要指向指针的指针,即 pos 2 应声明为 **pos2。

此外,您想通过循环 poz1 (之前设置“X”)来实现什么目的?

无论如何,对您的代码进行一些清理:

 if(tab[number][i]=='.'){
if(player==1){ //considering player 1 is 'X'
// Loop to the left till you find opponent's piece or come to edge.
for(j=i-1;tab[number][j]=='O' && j!=0 ;j--)
;
// Validation check
if(i-j <=1 || tab[number][j] != 'X');
//Invalid move
return 1;
else
// convert all the opponents pieces between two of yours piece
for(k=i;k>j;k--)
tab[number][k] = 'X';

上面的代码部分仅供引用。这将检查该移动对于左侧是否有效。如果有效,则转换对手的棋子。您需要理解这一点,并为“右”,“添加类似的逻辑对角线”等来完成黑白棋游戏。

关于黑白棋游戏中的 C 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16843794/

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