Tic tac toe-problem i C++
Hej, jag har gjort ett tic tac toe spel där jag nu lagt till funktionen att storleken och antalet tecken i rad för att vinna kan bestämmas av användaren. Det fungerar upp till 3x3 men med större planer beter sig spelet konstigt. T.ex. så säger den inte att en viss spelare har vunnit när det har 4 tecken i rad på en 5x5 stor spelplan. Jag är väl medveten om att koden ser rätt smutsig ut och att allt ligger i main, men det kommer jag fixa sedan. Det går heller inte att vinna diagonalt än dom två som är i mitten, men det kommer jag också fixa sedan. Det jag just nu undrar mest är varför det inte fungerar det som jag beskrev ovan. Här är koden. Alla for-loopar är bara till för att kolla om en spelare vunnit. För att underlätta eventuellt testande så har jag gjort att det bara är samma spelare som för lägga tecken på planen.
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
enum TicTacToeCases {
PLAYER_ONE = 'O',
PLAYER_TWO = 'X',
NEUTRAL = '*'
};
int main(){
srand(time(NULL));
int decide = rand();
bool over = false;
int boardSize = 3;
int toWin = 3;
char ticTacToe[20][20];
cout<< "Choose the size of the board: ";
cin>> boardSize;
cout<< "Choose the amount of character in a row in order to win: ";
cin>> toWin;
for (int i = 0; i < boardSize; i++){
for (int j = 0; j < boardSize; j++){
ticTacToe[i][j] = static_cast<char>(NEUTRAL);
}
}
//PRINTS THE GAME
for (int i = 0; i < boardSize; i++){
for (int j = 0; j < boardSize; j++){
cout<< ticTacToe[i][j]<< " ";
}
cout<< "\n\n";
}
while (!over){
int counter = 0;
int diagonal = 0;
int otherDiagonal = boardSize - 1;
int *forTheDiagonal = &diagonal;
int *forTheOtherDiagonal = &otherDiagonal;
if (decide % 2 == 0){
int i;
int j;
bool valid = false;
while (!valid){
cout<< "Player one decide position\n";
cin>> i;
cin>> j;
if (ticTacToe[i-1][j-1] == '*'){
valid = true;
}
else{
cout<< "This position is already taken\n";
}
}
cout<< "\n";
ticTacToe[i-1][j-1] = static_cast<char>(PLAYER_ONE);
for (int i = 0; i < boardSize; i++){
for (int j = 0; j < boardSize; j++){
cout<< ticTacToe[i][j]<< " ";
}
cout<< "\n\n";
}
for (int i = 0; i < boardSize; i++){
for (int j = 0; j < boardSize; j++){
if (ticTacToe[i][j] == 'O'){
counter++;
}
else{
counter = 0;
}
}
if (counter == toWin){
cout<< "Player one wins!\n";
over = true;
}
}
counter = 0;
for (int i = 0; i < boardSize; i++){
for (int j = 0; j < boardSize; j++){
if (ticTacToe[j][i] == 'O'){
counter++;
}
else{
counter = 0;
}
}
if (counter == toWin){
cout<< "Player one wins!\n";
over = true;
}
}
counter = 0;
for (int i = 0; i < boardSize; i++){
if (ticTacToe[i][diagonal] == 'O'){
counter++;
(*forTheDiagonal)++;
}
else{
*forTheDiagonal = 0;
}
if (counter == toWin){
cout<< "Player one wins!\n";
over = true;
}
}
counter = 0;
for (int i = 0; i < boardSize; i++){
if (ticTacToe[i][otherDiagonal] == 'O'){
counter++;
(*forTheOtherDiagonal)--;
}
else{
*forTheOtherDiagonal = boardSize - 1;
}
if (counter == toWin){
cout<< "Player one wins!\n";
over = true;
}
}
counter = 0;
}
else{
int i;
int j;
bool valid = false;
while (!valid){
cout<< "Player two decide position\n";
cin>> i;
cin>> j;
if (ticTacToe[i-1][j-1] == '*'){
valid = true;
}
else{
cout<< "This position is already taken\n";
}
}
cout<< "\n";
ticTacToe[i-1][j-1] = static_cast<char>(PLAYER_TWO);
for (int i = 0; i < boardSize; i++){
for (int j = 0; j < boardSize; j++){
cout<< ticTacToe[i][j]<< " ";
}
cout<< "\n\n";
}
for (int i = 0; i < boardSize; i++){
for (int j = 0; j < boardSize; j++){
if (ticTacToe[i][j] == 'X'){
counter++;
}
else{
counter = 0;
}
}
if (counter == toWin){
cout<< "Player two wins!\n";
cout<< "1";
over = true;
}
}
counter = 0;
for (int i = 0; i < boardSize; i++){
for (int j = 0; j < boardSize; j++){
if (ticTacToe[j][i] == 'X'){
counter++;
}
else{
counter = 0;
}
}
if (counter == toWin){
cout<< "Player two wins!\n";
cout<< "2";
over = true;
}
}
counter = 0;
for (int i = 0; i < boardSize; i++){
if (ticTacToe[i][diagonal] == 'X'){
counter++;
(*forTheDiagonal)++;
}
else{
*forTheDiagonal = 0;
}
if (counter == toWin){
cout<< "Player two wins!\n";
cout<< "3";
over = true;
}
}
counter = 0;
for (int i = 0; i < boardSize; i++){
if (ticTacToe[i][otherDiagonal] == 'X'){
counter++;
(*forTheOtherDiagonal)--;
}
else{
*forTheOtherDiagonal = boardSize - 1;
}
if (counter == toWin){
cout<< "Player two wins!\n";
cout<< "4";
over = true;
}
}
counter = 0;
}
decide+=2;
}
}