Kółko i krzyżyk - dziwny błąd.

0

witam, jestem w trakcie pisania gry kolko i krzyzyk, utknalem w jednym miejscu, jak chce skompilowac wywala mi jakis dziwny blad ktory zatrzymuje program w 1 miejscu (w kodzie zaznaczylem ktore linijki sprawiaja problem)

 
// plansza_kk.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include <cstdlib>
#include <string>

using namespace std;





													void aktualna_plansza(int poziomo, int pionowo, bool zaznaczenie, char znak_na_planszy)
	//cala wirtualna plansza
{
	system("CLS");


// ~~~~~~~~~~~~~~~~~~~~~~~~~~~ to ponizej sprawia problem
	 char pole[5][5];

	for (int i = 1; i <= 5; i++)
	for (int j = 1; j <= 5; j++)
		pole[i][j] = '_';

	if (zaznaczenie == true)
	{
		pole[poziomo][pionowo] = znak_na_planszy;
		zaznaczenie = false;
	}
??~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ koniec problemu		

	
		//znak_na_planszy = znak;

	for (int i = 1; i <= 5; i++)
	{
		for (int j = 1; j <= 5; j++)
		{
			if ((i == pionowo) && (j == poziomo))
			{
				cout << "*";
			}

			//pola znakow
			else if ((i == 1) && (j == 1))
			{
				cout <<pole[i][j];
			}
			else if ((i == 1) && (j == 3))
			{
				cout << pole[i][j];
			}
			else if ((i == 1) && (j == 5))
			{
				cout << pole[i][j];
			}
			else if ((i == 3) && (j == 1))
			{
				cout << pole[i][j];
			}
			else if ((i == 3) && (j == 3))
			{
				cout << pole[i][j];
			}
			else if ((i == 3) && (j == 5))
			{
				cout << pole[i][j];
			}
			else if ((i == 5) && (j == 1))
			{
				cout << pole[i][j];
			}
			else if ((i == 5) && (j == 3))
			{
				cout << pole[i][j];
			}
			else if ((i == 5) && (j == 5))
			{
				cout << pole[i][j];
			}
			
			//pola znakow

			//pionowe rysowanie lini
			else if ((i == 1) && (j == 2))
			{
				cout << "|";
			}
			else if ((i == 1) && (j == 4))
			{
				cout << "|";
			}
			else if ((i == 2) && (j == 2))
			{
				cout << "|";
			}
			else if ((i == 2) && (j == 4))
			{
				cout << "|";
			}
			else if ((i == 3) && (j == 2))
			{
				cout << "|";
			}
			else if ((i == 3) && (j == 4))
			{
				cout << "|";
			}
			else if ((i == 4) && (j == 2))
			{
				cout << "|";
			}
			else if ((i == 4) && (j == 4))
			{
				cout << "|";
			}
			else if ((i == 5) && (j == 2))
			{
				cout << "|";
			}
			else if ((i == 5) && (j == 4))
			{
				cout << "|";
			}

			//poziome rysowanie lini
			else if ((i == 2) && (j == 1))
			{
				cout << "-";
			}
			else if ((i == 2) && (j == 2))
			{
				cout << "-";
			}
			else if ((i == 2) && (j == 3))
			{
				cout << "-";
			}
			else if ((i == 2) && (j == 4))
			{
				cout << "-";
			}
			else if ((i == 2) && (j == 5))
			{
				cout << "-";
			}
			else if ((i == 4) && (j == 1))
			{
				cout << "-";
			}
			else if ((i == 4) && (j == 2))
			{
				cout << "-";
			}
			else if ((i == 4) && (j == 3))
			{
				cout << "-";
			}
			else if ((i == 4) && (j == 4))
			{
				cout << "-";
			}
			else if ((i == 4) && (j == 5))
			{
				cout << "-";
			}
		}
	
		cout << endl;
	}

}
char wybor_znaku()
// funkcja odpowiedzialna za to jaki znak bedzie mial gracz i komputer
{
	char jaki_znak;
	cout << "Wybierz swoj znak: (x lub o)" << endl; //wybieranie znaku jakim bedziemy grac
	jaki_znak = _getch();

	if (jaki_znak == 'x')
	{
		cout << "Wybrales krzyzyk..." << endl;
		jaki_znak = 'X';
	}
	else
	{
		cout << "Wybrales kolko..." << endl;
		jaki_znak = 'O';
	}

	return jaki_znak;
}
																									int wybor_kto_pierwszy()
//funkcja ktora wybiera ktory gracz ma zaczac i jaki znak (x czy o)
{
	int kto_pierwszy;
	char wybor;
	
	cout << "Wybierz kto pierwszy zaczyna (Gracz: g    Komputer: k) " << endl;
	wybor = _getch();

	if (wybor == 'k')
	{
		cout << "Zaczyna komputer..." << endl;
		kto_pierwszy = 2;
	}
	if (wybor == 'g')
	{
		cout << "Zaczynasz ty... " << endl;

		kto_pierwszy = 1;
	}
	
	if ((wybor != 'g') && (wybor != 'k')) //jesli nacisnelo sie cos innego niz g czy k
	{
		do
		{
			cout << "Kliknij g lub k (gracz lub komputer)" << endl;
			wybor = _getch();

			if (wybor == 'k')
			{
				cout << "Zaczyna komputer..." << endl;
				kto_pierwszy = 2;
				break;
			}
			if (wybor == 'g')
			{
				cout << "Zaczynasz ty..." << endl;
				kto_pierwszy = 1;
				break;
			}

		} while ((wybor != 'g') || (wybor != 'k'));
	}
	return kto_pierwszy;
}

																									char rysowanie_planszy(char znak_pomoc)
//funkcja ktora pozwala graczowi zaznaczac na planszy swoje pola
{
																										char pomoc = znak_pomoc;
	int poziom = 1, pion = 1; 
	char znak = 0;
	bool zaznacz = false;

	while ((znak = _getch()) != 27) //poruszanie sie po planszy
	{
		switch (znak)
		{

		case 75: //lewo
			poziom = poziom - 2;;
			if (poziom < 1)
			{
				poziom = 5;
			}
			break;

		case 77: //prawo
			poziom = poziom + 2;
			if (poziom > 5)
			{
				poziom = 1;
			}
			break;

		case 72: //gora
			pion = pion - 2;
			if (pion < 1)
			{
				pion = 5;
			}
			break;

		case 80: //dol
			pion = pion + 2;
			if (pion>5)
			{
				pion = 1;
			}
			break;
		case 13: //enter - wybor pola
		{
					 zaznacz = true;
					 
					
					
		}
			break;

		}
		aktualna_plansza(poziom, pion, zaznacz, pomoc);
		zaznacz = false;
	}
	return 0;
	

}
																									

int main()
{
		int zmiana_gracza;
		zmiana_gracza = wybor_kto_pierwszy(); //zmiana_gracza bierze z returna w funkcji wybor_kto_pierwszy(), pozniej jest zammieni
		char znak_gracza;
		znak_gracza = wybor_znaku(); // O lub X	5


		for (int zmiana_gracza = 1; zmiana_gracza<4; zmiana_gracza++) //zmienia kolejnosc zaznaczania na planszy
		{
			if (zmiana_gracza > 2)
				zmiana_gracza = 1;

			if (zmiana_gracza == 1) //jesli jest kolej gracza
			{
				cout << "twoj ruch";
				rysowanie_planszy(znak_gracza);
			}

			if (zmiana_gracza == 2) //tutaj ma byc funkja z algorytmem wybierania pol przez komputer @@@@@@@@@@@@@@@@@@@@@@2
			{
				rysowanie_planszy(znak_gracza);
				cout << "ruch komputera";
			}
		}
	
	
	system("PAUSE");
	return EXIT_SUCCESS;

}


0

W C/C++ tablice indeksowane są od zera, więc do elementów tablicy

char tab[3];

można odwołać się tak:

tab[0], tab[1], tab[2]
0

wiem ze od zera, ale deklaruje od 1 zeby mi sie zgadzalo z polami, nie chodzi o to

1

Niby jakie deklaruje od 1? O co Ci chodzi?

     char pole[5][5];
 
    for (int i = 1; i <= 5; i++)
    for (int j = 1; j <= 5; j++)
        pole[i][j] = '_';

W tym dokładnie miejscu masz problem, bo alokujesz tablicę pole o rozmiarze 5 o indeksach 0, 1, 2, 3, 4 i finito. One się magicznie nie stają 1, 2, 3, 4, 5 dlatego, że Ty sobie zrobisz pętlę od 1.

0

ach dobra, dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1