Visual C++ błędne działanie funkcji logicznej

0

Pomysł miałem taki stworzyć grę dla dwóch graczy w kółko i krzyżyk.

Images[0] to jest kółko
Images[1] to jest krzyżyk

zmienną int ruch umieściłem na początku

namespace Kolko {
	int ruch = 1;
	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;
 
this->pictureBox1->Visible = true;
		if (ruch == 0)
	{
		ruch = 1;
		pictureBox1->Image = imageList1->Images[0];
		
	}
	else
		pictureBox1->Image = imageList1->Images[1];
		ruch = 0;


}
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
	this->pictureBox2->Visible = true;
	if (ruch == 0)
	{
		ruch = 1;
		pictureBox2->Image = imageList1->Images[0];
		
	}
	else
		pictureBox2->Image = imageList1->Images[1];
	ruch = 0;
}
private: System::Void button3_Click(System::Object^  sender, System::EventArgs^  e) {
	this->pictureBox3->Visible = true;
	if (ruch == 0)
	{
		ruch = 1;
		pictureBox3->Image = imageList1->Images[0];
		
	}
	else
		pictureBox3->Image = imageList1->Images[1];
	ruch = 0; 

Celem tej logiki było, że po każdym wciśnięciu przysiku ruch zmieniał się w zależności 0 albo 1 . 0 to ruch Kółka 1 ruch krzyżyka.

Niestety taki jest wynik działania prototypu. Po wciśnięciu po kolei przycisku 1,2,3

user image

Nie wiem czy ja źle myślę, czy co. Proszę o pomoc

0

Zapomniałeś dodać nawiasy klamrowe w buttonie2 i buttonie3 (edit z tego co widze w buttonie1 też).

    if (ruch == 0)
    {
        ruch = 1;
        pictureBox3->Image = imageList1->Images[0];
 
    }
    else
        pictureBox3->Image = imageList1->Images[1]; // to sie wykona kiedy ruch != 0
    ruch = 0; //to sie wykona zawsze

|
V

    if (ruch == 0)
    {
        ruch = 1;
        pictureBox3->Image = imageList1->Images[0];
 
    }
    else {
        pictureBox3->Image = imageList1->Images[1];
        ruch = 0;
    } 
0

Dzięki wielkie nigdy nie pomyślałbym, że chodzi o taką błahostkę. Wydawało mi się, że jeśli nie ma nawiasu klamrowego to else działa do ostatniej przyległej linijki. Ale widocznie się pomyliłem.

0

Zdarza się, ja też wielokrotnie popełniłem ten błąd z else. Albo zamieniałem miejscami operator < z >, albo == z !=, albo odnosiłem się do nie tej nazwy co trzeba... w większości wypadków debugger mi pomógł. Albo po prostu analiza kodu.

0

Nie licząc makr indentacja w C++ nie ma znaczenia.

0

Potrzebuje małej rady doświadczonych programistów.

Program prawie dobrze działa

Tak wygląda przycisk numer 1 a mam ich 9 identycznych, zmiana jest tylko w tabeli POLA

this->pictureBox1->Visible = true;
		if (ruch == 0)
	{
		pola[0] = ruch;
		ruch = 1;
		pictureBox1->Image = imageList1->Images[0];
		
	}
		else {
			pictureBox1->Image = imageList1->Images[1];
			pola[0] = ruch;
			ruch = 0;
		}
	
		if (
			(pola[0] == 1 && pola[1] == 1 && pola[2] == 1) ||
			(pola[3] == 1 && pola[4] == 1 && pola[5] == 1) ||
			(pola[6] == 1 && pola[7] == 1 && pola[8] == 1) ||
			(pola[0] == 1 && pola[4] == 1 && pola[8] == 1) ||
			(pola[0] == 1 && pola[3] == 1 && pola[6] == 1) ||
			(pola[1] == 1 && pola[4] == 1 && pola[7] == 1) ||
			(pola[2] == 1 && pola[5] == 1 && pola[8] == 1) ||
			(pola[2] == 1 && pola[4] == 1 && pola[6] == 1))
		{
			this->obrazek_check_krzyzyk->Visible = true;

		}
		if (
			(pola[0] == 0 && pola[1] == 0 && pola[2] == 0) ||
			(pola[3] == 0 && pola[4] == 0 && pola[5] == 0) ||
			(pola[6] == 0 && pola[7] == 0 && pola[8] == 0) ||
			(pola[0] == 0 && pola[4] == 0 && pola[8] == 0) ||
			(pola[0] == 0 && pola[3] == 0 && pola[6] == 0) ||
			(pola[1] == 0 && pola[4] == 0 && pola[7] == 0) ||
			(pola[2] == 0 && pola[5] == 0 && pola[8] == 0) ||
			(pola[2] == 0 && pola[4] == 0 && pola[6] == 0))

		{
			this->obrazek_check_kolko->Visible = true;
		} 

To sprawdza czy ktoś wygrał o ile przy krzyżyku nie ma problemu to nie mam pomysłu jak to rozwiązać z kółkiem bo domyślnie tabela jest wyzerowana, więc gdy krzyżyk zrobi ruch od razu wszystkie warunki(bo wszystkie pola mają zero) zgadzają i pisze że wygrały.
Nie wiem jak to mogę ulepszyć

0

What? Świat nie kończy się na dwóch liczbach. Oprócz 0 i 1 jest jeszcze 2, prawda?

0

Owszem ale to nic nie da bo jak jest tak zbudowany program, i jeśli chce aby dobrze wyświetlał kółko albo krzyżyk to musi być albo 0 albo 1

0

W takim razie Twój program zbudowany jest źle. Nie warto stosować stałych numerycznych w kodzie w innym miejscu niż w linijce z definicją czytelnej nazwy takiej stałej.

Zamiast robić to, co robisz, stwórz jakiegoś enuma albo klasę do reprezentacji pola i zrefaktoruj swój kod.

0

@wnuczus iu kochany! po prostu zrób grafike pustą (bez kółka i krzyżyka), wprowadź trzecią możliwość (tak jak IForgotMyPast mówił, np może to być wartość 2)

Owszem ale to nic nie da bo jak jest tak zbudowany program

a kto go "zbudował"? Ty czy ktoś inny? ;>

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