• 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

VPS Starter Arubacloud
0 głosów
174 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 94 wizyt
0 głosów
1 odpowiedź 147 wizyt
pytanie zadane 17 listopada 2019 w C i C++ przez fff Gaduła (3,950 p.)
+3 głosów
2 odpowiedzi 216 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...