试图创建一个连接 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;
}