gpt4 book ai didi

c - 如何测试四子棋胜利条件?

转载 作者:行者123 更新时间:2023-11-30 15:54:16 25 4
gpt4 key购买 nike

尝试创建一款 Connect 4 游戏。除了胜利条件之外,一切正常。这是代码,感谢每一个帮助。 (抱歉,标识符是德语,但我希望您能理解代码)。数组“spielfeld”是一个二维数组,初始化为0。120和111分别代表x和o。

编辑:只剩下关键部分,抱歉代码溢出

#include <stdio.h>
#include "eingabe.h"
#include <stdlib.h>

//初始化

int main(void)
{
int spieler = 1;
int won = 0;
while(won == 0)
{
switch(spieler)
{
case 1:
anzeige(zeilen, spalten, spielfeld);
auswahl = erfasse_ganze_zahl(0, spalten);
erfolg = setze(zeilen, spalten, spielfeld, auswahl, 1, 120);
won = victory_condition(zeilen, spalten, spielfeld);
break;
case 2:
anzeige(zeilen, spalten, spielfeld);
auswahl = erfasse_ganze_zahl(0, spalten);
erfolg = setze(zeilen, spalten, spielfeld, auswahl, 1, 111);
won = victory_condition(zeilen, spalten, spielfeld);
break;
}
return 0;
}


int setze(int zeilen, int spalten, int spielfeld[zeilen][spalten], int auswahl, int spieler, char wert)
{
auswahl--;
for (int i = spalten - 1; i >= 0; i--)
{
if(spielfeld[i][auswahl] == 0)
{
spielfeld[i][auswahl] = wert;
return 0;
}
}
return -1;
}

void anzeige(int zeilen, int spalten, int spielfeld[zeilen][spalten])
{
int i, j, k = 0;
for(i = 0; i < spalten; i++)
{
for(j = 0; j < zeilen; j++)
{
printf("%c", spielfeld[i][j]);
printf(" | ");
if (j == zeilen - 1)
{
printf("\n");
for (k = 0; k < spalten; k++)
printf("----");
printf("\n");
}
}
}
}

//一些代码

int victory_condition(int zeilen, int spalten, int spielfeld[zeilen][spalten])
{
int vertikal = 1;//(|)
int horizontal = 1;//(-)
int diagonal1 = 1;//(\)
int diagonal2 = 1;//(/)
char spieler = spielfeld[zeilen][spalten];
int i;
int j;//horizontal
//check for vertikal(|)
for(i = 0; spielfeld[i][spalten] == spieler && i <= zeilen; i++)
vertikal++;//Check down
printf("\n%d, %d\n\n%d, %d\n", vertikal, horizontal, diagonal1, diagonal2);
for(i = zeilen; spielfeld[i][spalten] == spieler && i >= 0; i--)
vertikal++;//Check up
printf("\n%d, %d\n\n%d, %d\n", vertikal, horizontal, diagonal1, diagonal2);
if(vertikal >= 4) return 1;
//check for horizontal(-)
for(j = spalten -1; spielfeld[zeilen][j] == spieler && j >= 0; j--,horizontal++);//Check left
for(j = spalten +1; spielfeld[zeilen][j] == spieler && j <= 6; j++,horizontal++);//Check right
if(horizontal >= 4) return 1;
//check for diagonal 1 (\)
for(i = zeilen -1, j = spalten - 1; spielfeld[i][j] == spieler && i >= 0 && j >= 0; diagonal1 ++, i --, j --);//up and left
for(i = zeilen +1, j = spalten + 1; spielfeld[i][j] == spieler && i <= 5 && j <= 6; diagonal1 ++, i ++, j ++);//down and right
if(diagonal1 >= 4) return 1;
//check for diagonal 2(/)
for(i = zeilen -1, j= spalten +1;spielfeld[i][j] == spieler && i>=0 && j <= 6; diagonal2 ++, i --, j ++);//up and right
for(i = zeilen +1, j= spalten -1;spielfeld[i][j] == spieler && i<=5 && j >=0; diagonal2 ++, i ++, j --);//up and left
if(diagonal2 >= 4) return 1;
printf("\n%d, %d\n\n%d, %d\n", vertikal, horizontal, diagonal1, diagonal2);
return 0;
}

最佳答案

一旦一枚新硬币(或别针或其他任何东西)掉落,只需检查它的周围环境即可。我在这里只进行水平检查,但其他人以类似的方式工作。

int x; // position of the dropped token
int y; // position of the dropped token

for(int count = 0, ix = max(0, x - 3); ix < min(width, x + 3); ++ix) { // go through all fields that might be part of the winning row
if (field[y][x] == mycolor) { // if it's the active player's color...
if (++count == 4) // increase the count and check whether there are enough tokens
winner = true;
}
else // if the color doesn't match...
count = 0; // reset the count
}

关于c - 如何测试四子棋胜利条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13131203/

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