void schwer(char pos[][3], char player){
if (kannOppWin(pos, player))
return;
if (kannPlayerWin(pos, player))
return;
if (mitteFrei(pos, player))
return;
if (eckeSetzen(pos, player))
return;
if (randSetzen(pos, player))
return;
else{
printf("Ich weis nicht wo ich noch mein %c setzen soll.\nEs scheint mir alles voll zu sein!\nVielleicht hat %c ja geschummelt!\nSCHIEBUNG!!!", player, gegner(player));
}
}
//Die Implementationen für die Funktionen
int kannOppWin(char pos[][3], char player){
if ((pos[0][0] == pos[0][2]) && (pos[0][1] == NONE) && (pos[0][0] == gegner(player))){
pos[0][1] = player;
return 1;
}
if ((pos[0][0] == pos[2][0]) && pos[1][0] == NONE && pos[0][0] == gegner(player)){
pos[1][0] = player;
return 1;
}
if ((pos[2][0] == pos[2][2]) && pos[2][1] == NONE && pos[2][0] == gegner(player)){
pos[2][1] = player;
return 1;
}
if ((pos[2][2] == pos[0][2]) && pos[1][2] == NONE && pos[2][2] == gegner(player)){
pos[1][2] = player;
return 1;
}
if ((pos[0][0] == pos[2][2]) && pos[1][1] == NONE && pos[0][0] == gegner(player)){
pos[1][1] = player;
return 1;
}
if ((pos[2][0] == pos[0][2]) && pos[1][1] == NONE && pos[2][0] == gegner(player)){
pos[1][1] = player;
return 1;
}
if (pos[0][0] == pos[0][1] && pos[0][2] == NONE && pos[0][0] == gegner(player)){
pos[0][2] = player;
return 1;
}
if (pos[0][1] == pos[0][2] && pos[0][0] == NONE && pos[0][1] == gegner(player)){
pos[0][0] = player;
return 1;
}
if (pos[0][0] == pos[1][0] && pos[2][0] == NONE && pos[0][0] == gegner(player)){
pos[2][0] = player;
return 1;
}
if (pos[1][0] == pos[2][0] && pos[0][0] == NONE && pos[0][0] == gegner(player)){
pos[0][0] = player;
return 1;
}
if (pos[2][0] == pos[2][1] && pos[2][2] == NONE && pos[2][0] == gegner(player)){
pos[2][2] = player;
return 1;
}
if (pos[2][1] == pos[2][2] && pos[2][0] == NONE && pos[2][1] == gegner(player)){
pos[2][0] = player;
return 1;
}
if (pos[0][2] == pos[1][2] && pos[2][2] == NONE && pos[0][2] == gegner(player)){
pos[2][2] = player;
return 1;
}
if (pos[1][2] == pos[2][2] && pos[0][2] == NONE && pos[1][2] == gegner(player)){
pos[0][2] = player;
return 1;
}
if (pos[1][2] == pos[1][1] && pos[1][0] == NONE && pos[1][2] == gegner(player)){
pos[1][0] = player;
return 1;
}
if (pos[1][0] == pos[1][1] && pos[1][2] == NONE && pos[1][1] == gegner(player)){
pos[1][2] = player;
return 1;
}
if (pos[1][1] == pos[2][2] && pos[0][0] == NONE && pos[2][2] == gegner(player)){
pos[0][0] = player;
return 1;
}
if (pos[0][0] == pos[1][1] && pos[2][2] == NONE && pos[1][1] == gegner(player)){
pos[2][2] = player;
return 1;
}
if (pos[0][1] == pos[1][1] && pos[2][1] == NONE && pos[1][1] == gegner(player)){
pos[2][1] = player;
return 1;
}
if (pos[1][1] == pos[2][1] && pos[0][1] == NONE && pos[2][1] == gegner(player)){
pos[0][1] = player;
return 1;
}
if (pos[0][2] == pos[1][1] && pos[2][0] == NONE && pos[0][2] == gegner(player)){
pos[2][0] = player;
return 1;
}
if (pos[1][1] == pos[2][0] && pos[0][2] == NONE && pos[1][1] == gegner(player)){
pos[0][2] = player;
return 1;
}
if (pos[0][1] == pos[2][1] && pos[1][1] == NONE && pos[0][1] == gegner(player)){
pos[1][1] = player;
return 1;
}
if (pos[1][0] == pos[1][2] && pos[1][1] == NONE && pos[1][0] == gegner(player)){
pos[1][1] = player;
return 1;
}
else return 0;
}
int kannPlayerWin(char pos[][3], char player){
//die bedingung &&pos[][] == player ist überflüssug aber da weil ich es mit suchen und ersetzen geänder hab
if ((pos[0][0] == pos[0][2]) && (pos[0][1] == NONE) && (pos[0][0] == player)){
pos[0][1] = player;
return 1;
}
if ((pos[0][0] == pos[2][0]) && pos[1][0] == NONE && pos[0][0] == player){
pos[1][0] = player;
return 1;
}
if ((pos[2][0] == pos[2][2]) && pos[2][1] == NONE && pos[2][0] == player){
pos[2][1] = player;
return 1;
}
if ((pos[2][2] == pos[0][2]) && pos[1][2] == NONE && pos[2][2] == player){
pos[1][2] = player;
return 1;
}
if ((pos[0][0] == pos[2][2]) && pos[1][1] == NONE && pos[0][0] == player){
pos[1][1] = player;
return 1;
}
if ((pos[2][0] == pos[0][2]) && pos[1][1] == NONE && pos[2][0] == player){
pos[1][1] = player;
return 1;
}
if (pos[0][0] == pos[0][1] && pos[0][2] == NONE && pos[0][0] == player){
pos[0][2] = player;
return 1;
}
if (pos[0][1] == pos[0][2] && pos[0][0] == NONE && pos[0][1] == player){
pos[0][0] = player;
return 1;
}
if (pos[0][0] == pos[1][0] && pos[2][0] == NONE && pos[0][0] == player){
pos[2][0] = player;
return 1;
}
if (pos[1][0] == pos[2][0] && pos[0][0] == NONE && pos[0][0] == player){
pos[0][0] = player;
return 1;
}
if (pos[2][0] == pos[2][1] && pos[2][2] == NONE && pos[2][0] == player){
pos[2][2] = player;
return 1;
}
if (pos[2][1] == pos[2][2] && pos[2][0] == NONE && pos[2][1] == player){
pos[2][0] = player;
return 1;
}
if (pos[0][2] == pos[1][2] && pos[2][2] == NONE && pos[0][2] == player){
pos[2][2] = player;
return 1;
}
if (pos[1][2] == pos[2][2] && pos[0][2] == NONE && pos[1][2] == player){
pos[0][2] = player;
return 1;
}
if (pos[1][2] == pos[1][1] && pos[1][0] == NONE && pos[1][2] == player){
pos[1][0] = player;
return 1;
}
if (pos[1][0] == pos[1][1] && pos[1][2] == NONE && pos[1][1] == player){
pos[1][2] = player;
return 1;
}
if (pos[1][1] == pos[2][2] && pos[0][0] == NONE && pos[2][2] == player){
pos[0][0] = player;
return 1;
}
if (pos[0][0] == pos[1][1] && pos[2][2] == NONE && pos[1][1] == player){
pos[2][2] = player;
return 1;
}
if (pos[0][1] == pos[1][1] && pos[2][1] == NONE && pos[1][1] == player){
pos[2][1] = player;
return 1;
}
if (pos[1][1] == pos[2][1] && pos[0][1] == NONE && pos[2][1] == player){
pos[0][1] = player;
return 1;
}
if (pos[0][2] == pos[1][1] && pos[2][0] == NONE && pos[0][2] == player){
pos[2][0] = player;
return 1;
}
if (pos[1][1] == pos[2][0] && pos[0][2] == NONE && pos[1][1] == player){
pos[0][2] = player;
return 1;
}
if (pos[0][1] == pos[2][1] && pos[1][1] == NONE && pos[0][1] == player){
pos[1][1] = player;
return 1;
}
if (pos[1][0] == pos[1][2] && pos[1][1] == NONE && pos[1][0] == player){
pos[1][1] = player;
return 1;
}
else return 0;
}
int mitteFrei(char pos[][3], char player){
if (pos[1][1] == NONE){
pos[1][1] = player;
return 1;
}
else return 0;
}
int eckeSetzen(char pos[][3], char player){
if (pos[0][0] == NONE){
pos[0][0] = player;
return 1;
}
if (pos[0][2] == NONE){
pos[0][2] = player;
return 1;
}
if (pos[2][0] == NONE){
pos[2][0] = player;
return 1;
}
if (pos[2][2] == NONE){
pos[2][2] = player;
return 1;
}
else return 0;
}
int randSetzen(char pos[][3], char player){
int i, j;
//Ich geh alle felder mit der for schleife durch weil wie anderen sowieso schon gesetzt sein müssten und ich das so einfacher finde.
//Bei einem 3x3 ist das auch nicht wichtig denke ich, da es keine geschwindigkeitsvorteile bringt nur die kantenfelder zu nehmen.
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
if (pos[i][j] == NONE){
pos[i][j] = player;
return 1;
}
}
}
return 0;
}
// Allgemeine hilfsfunktionen
//Ich könnte die benutzt haben, weis es aber nicht mehr...
int anzahlZuege(const char spielfeld[][3]){
unsigned int i, j;
unsigned int anzahl = 0;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
if (spielfeld[i][j] != '\0')
anzahl++;
}
}
return anzahl;
}
char gegner(char spieleramzug){
if (spieleramzug == 'x')
return 'o';
else return 'x';
}