• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zabezpieczenie programu/ Gra Tic Tac Toe/ Sprawdzenie gry

Object Storage Arubacloud
0 głosów
180 wizyt
pytanie zadane 6 grudnia 2018 w C i C++ przez Blu3Dragon Nowicjusz (210 p.)

Mam problem z zabezpieczeniem programu przed wpisywaniem innych znakow niz liczby a mianowicie po dodaniu kodu, który zanlazłem na jakimś forum program nie pozwala wpisac liczb nieparzystych (ten kod jest wpisane jako komentarz poniżej). Przy okazji miło jak ktoś sprawdzi gre i powie co można dodać albo co zmienić albo zauważy błędy. Z góry dzieki za pomoc.smiley

 

#include<iostream>
#include<string>

using namespace std;
void ShowBoard();
bool MoveIsValid(int n);
void Welcome();
int WhoWon();


char Board[9];


int main()
{



	string PlayerOneName;
	string PlayerTwoName;
	string rep;
	int WhoseTurn = true;
	int Move;
	
	Board[1] = '1';
	Board[2] = '2';
	Board[3] = '3';
	Board[4] = '4';
	Board[5] = '5';
	Board[6] = '6';
	Board[7] = '7';
	Board[8] = '8';
	Board[9] = '9';

	cout << "Please enter Your name ( player one ):";
	cin >> PlayerOneName;
	system("CLS");
	cout << "Please enter Your name ( player two ):";
	cin >> PlayerTwoName;
	system("CLS");

	while (WhoWon() == false)
	{
		do
		{
			Welcome();
			ShowBoard();

			if (WhoseTurn == true)
			{
				cout << "                               " << PlayerOneName << " Your Turn:";
			}
			else
			{
				cout << "                               " << PlayerTwoName << " Your Turn:";
			}
			do
			{
				cin >> Move;
				/*
				while (!(cin >> Move))
				{	
					cin.clear(); 
					cin.sync(); 
				}*/
				
			} while (Move < 0 || Move > 9);

			system("CLS");

		} while (MoveIsValid(Move) != true);

		switch (WhoseTurn)
		{
		case 1:
		{
			Board[Move] = 'x';
			WhoseTurn = 2;
			break;
		}
		case 2:
		{
			Board[Move] = 'o';
			WhoseTurn = 1;
		}
		}
	}

	if (WhoWon() == 1)
	{
		cout << "  *  * * *           *         **   ================================    *      *    **       *  * *  *  *" << endl;
		cout << " *   *     *  ***       * **     *  " << PlayerOneName << " YOU WIN !  *    *   *    *     *     *  **  * " << endl;
		cout << "  *  * * *           *         **   ================================      *        *     *      * *  *  *" << endl;
	}
	else if (WhoWon() == 2)
	{	
		cout << "  *  * * *           *         **    ================================     *        *     *      * *  *  *" << endl;
		cout << " *   *     *  ***       * **     *  " << PlayerTwoName << " YOU WIN !  *    *    *   *     *      *  **  " << endl;
		cout << "  *  * * *           *         **    ================================    *         *     *      * *  *  *" << endl;
	}
	else
	{
		cout << "  *  * * *           *         **     ========================   *      *    **    *     *      * *  *  *" << endl;
		cout << " *   *     *  ***       * **     *  " << "TIE ! NO ONE WIN !" << " *    *  *  *    *    *     *     *  **  " << endl;
		cout << "  *  * * *           *         **     ========================   *      *    **    *     *      * *  *  *" << endl;		
	}
	system("PAUSE");
	return 0;
}


void ShowBoard()
{
	cout << endl << endl << endl;
	cout << "                                  " << Board[1] << " | " << Board[2] << " | " << Board[3] << endl;
	cout << "                                  " << "_ + _ + _" << endl;
	cout << "                                  " << Board[4] << " | " << Board[5] << " | " << Board[6] << endl;
	cout << "                                  " << "_ + _ + _" << endl;
	cout << "                                  " << Board[7] << " | " << Board[8] << " | " << Board[9] << endl;
	cout << endl << endl;
}

bool MoveIsValid(int n)
{
	if (Board[n] != 'x' && Board[n] != 'o')
	{
		return true;
	}
	else
	{
		return false;
	}
}

int WhoWon()
{
	if (Board[1] == Board[2] && Board[2] == Board[3])
	{
		if (Board[1] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}

	if (Board[4] == Board[5] && Board[5] == Board[6])
	{
		if (Board[4] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}

	if (Board[7] == Board[8] && Board[8] == Board[9])
	{
		if (Board[7] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}

	if (Board[1] == Board[4] && Board[4] == Board[7])
	{
		if (Board[1] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}

	if (Board[2] == Board[5] && Board[5] == Board[8])
	{
		if (Board[2] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}

	if (Board[3] == Board[6] && Board[6] == Board[9])
	{
		if (Board[3] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}

	if (Board[1] == Board[5] && Board[5] == Board[9])
	{
		if (Board[1] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}

	if (Board[3] == Board[5] && Board[5] == Board[7])
	{
		if (Board[3] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	return 0;
}

void Welcome()
{
	cout << "               ************************************************" << endl;
	cout << "               *                                              *" << endl;
	cout << "               *               TIC TAC TOE GAME               *" << endl;
	cout << "               *                                              *" << endl;
	cout << "               *                                              *" << endl;
	cout << "               *                          design by Adrian    *" << endl;
	cout << "               ************************************************" << endl;
}

 

1
komentarz 6 grudnia 2018 przez monika90 Pasjonat (22,940 p.)

Board[9] = '9';

to jest poważny błąd

komentarz 6 grudnia 2018 przez Blu3Dragon Nowicjusz (210 p.)
możesz w skrócie wyjaśnić dlaczego byłbym wdzięczny.
komentarz 7 grudnia 2018 przez monika90 Pasjonat (22,940 p.)
Twoja tablica ma 9 elementów, od 0 do 8, więc nie można używać elementu o indeksie 9.

1 odpowiedź

+1 głos
odpowiedź 6 grudnia 2018 przez sp00ky Obywatel (1,760 p.)
edycja 6 grudnia 2018 przez sp00ky

Sprawdzenie czy wprowadzono liczby może wyglądać tak:

while (!(std::cin >> value))
        {
            std::cin.clear();
            while (std::cin.get() != '\n') {}
            std::cout << "Bledne dane, podaj liczbe: ";
        }

Oczywiście zmienną value zamieniasz w Twoim przypadku na Move

Kod generuje dużo ostrzeżeń (napiszę po angielsku abyś mógł łatwiej znaleźć rozwiązanie):

  • redundant literal supplied to boolean operator
  • do not use 'else' after 'return'
  • redundant boolean literal in conditional return statement
  • do not use array subscript when the index is not an integer constant expressions

Podobne pytania

0 głosów
0 odpowiedzi 97 wizyt
0 głosów
1 odpowiedź 150 wizyt
pytanie zadane 17 listopada 2019 w C i C++ przez fff Gaduła (3,950 p.)
+3 głosów
2 odpowiedzi 220 wizyt

92,579 zapytań

141,432 odpowiedzi

319,661 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...