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

[CR] Obiektowy C++ (#9): Tic-tac-toe - gra w kółko i krzyżyk

VPS Starter Arubacloud
+4 głosów
2,504 wizyt
pytanie zadane 14 maja 2016 w Nasze poradniki przez Mirosław Zelent Nałogowiec (34,780 p.)

CR = Code Review. O co chodzi? Zajrzyj tutaj
Pełna lista wszystkich Code Review? Zajrzyj tutaj

https://www.youtube.com/watch?v=vd0zDG4vwOw

Unit1.cpp:

​//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

  char p1,p2,p3,p4,p5,p6,p7,p8,p9;
  //p1..p9 pola w grze (ich zawartosc: p1='n'; nic lub 'x' lub 'o' )
  char kto;

  void sprawdz()
  {
     if((p1==p2 && p2==p3 && p1!='n') ||
        (p4==p5 && p5==p6 && p4!='n') ||
        (p7==p8 && p8==p9 && p7!='n') ||
        (p1==p4 && p4==p7 && p7!='n') ||
        (p2==p5 && p5==p8 && p2!='n') ||
        (p3==p6 && p6==p9 && p3!='n') ||
        (p1==p5 && p5==p9 && p1!='n') ||
        (p3==p5 && p5==p7 && p3!='n'))
     {
        char * w;

        if (kto=='x') w="Wygrywa kółko!";
        else w="Wygrywa krzyżyk!";

        Application->MessageBox(w, "Koniec gry", MB_OK);

     }
  }


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    pole1->Picture->LoadFromFile("img/nic.bmp");
    pole2->Picture->LoadFromFile("img/nic.bmp");
    pole3->Picture->LoadFromFile("img/nic.bmp");
    pole4->Picture->LoadFromFile("img/nic.bmp");
    pole5->Picture->LoadFromFile("img/nic.bmp");
    pole6->Picture->LoadFromFile("img/nic.bmp");
    pole7->Picture->LoadFromFile("img/nic.bmp");
    pole8->Picture->LoadFromFile("img/nic.bmp");
    pole9->Picture->LoadFromFile("img/nic.bmp");
    tura->Picture->LoadFromFile("img/osmall.bmp");

    p1='n'; p4='n'; p7='n';
    p2='n'; p5='n'; p8='n';
    p3='n'; p6='n'; p9='n';

    kto='o';

    pole1->Enabled = true;
    pole2->Enabled = true;
    pole3->Enabled = true;
    pole4->Enabled = true;
    pole5->Enabled = true;
    pole6->Enabled = true;
    pole7->Enabled = true;
    pole8->Enabled = true;
    pole9->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pole1Click(TObject *Sender)
{
   if(p1=='n')
   {
      if(kto=='o')
      {
         pole1->Picture->LoadFromFile("img/o.bmp");
         p1='o';
         kto='x';
         tura->Picture->LoadFromFile("img/xsmall.bmp");
      }
      else
      {
         pole1->Picture->LoadFromFile("img/x.bmp");
         p1='x';
         kto='o';
         tura->Picture->LoadFromFile("img/osmall.bmp");
      }
      pole1->Enabled=false;
      sprawdz();
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pole2Click(TObject *Sender)
{
if(p2=='n')
   {
      if(kto=='o')
      {
         pole2->Picture->LoadFromFile("img/o.bmp");
         p2='o';
         kto='x';
         tura->Picture->LoadFromFile("img/xsmall.bmp");
      }
      else
      {
         pole2->Picture->LoadFromFile("img/x.bmp");
         p2='x';
         kto='o';
         tura->Picture->LoadFromFile("img/osmall.bmp");
      }
      pole2->Enabled=false;
      sprawdz();
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pole3Click(TObject *Sender)
{
if(p3=='n')
   {
      if(kto=='o')
      {
         pole3->Picture->LoadFromFile("img/o.bmp");
         p3='o';
         kto='x';
         tura->Picture->LoadFromFile("img/xsmall.bmp");
      }
      else
      {
         pole3->Picture->LoadFromFile("img/x.bmp");
         p3='x';
         kto='o';
         tura->Picture->LoadFromFile("img/osmall.bmp");
      }
      pole3->Enabled=false;
      sprawdz();
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pole4Click(TObject *Sender)
{
if(p4=='n')
   {
      if(kto=='o')
      {
         pole4->Picture->LoadFromFile("img/o.bmp");
         p4='o';
         kto='x';
         tura->Picture->LoadFromFile("img/xsmall.bmp");
      }
      else
      {
         pole4->Picture->LoadFromFile("img/x.bmp");
         p4='x';
         kto='o';
         tura->Picture->LoadFromFile("img/osmall.bmp");
      }
      pole4->Enabled=false;
      sprawdz();
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pole5Click(TObject *Sender)
{
if(p5=='n')
   {
      if(kto=='o')
      {
         pole5->Picture->LoadFromFile("img/o.bmp");
         p5='o';
         kto='x';
         tura->Picture->LoadFromFile("img/xsmall.bmp");
      }
      else
      {
         pole5->Picture->LoadFromFile("img/x.bmp");
         p5='x';
         kto='o';
         tura->Picture->LoadFromFile("img/osmall.bmp");
      }
      pole5->Enabled=false;
      sprawdz();
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pole6Click(TObject *Sender)
{
if(p6=='n')
   {
      if(kto=='o')
      {
         pole6->Picture->LoadFromFile("img/o.bmp");
         p6='o';
         kto='x';
         tura->Picture->LoadFromFile("img/xsmall.bmp");
      }
      else
      {
         pole6->Picture->LoadFromFile("img/x.bmp");
         p6='x';
         kto='o';
         tura->Picture->LoadFromFile("img/osmall.bmp");
      }
      pole6->Enabled=false;
      sprawdz();
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pole7Click(TObject *Sender)
{
if(p7=='n')
   {
      if(kto=='o')
      {
         pole7->Picture->LoadFromFile("img/o.bmp");
         p7='o';
         kto='x';
         tura->Picture->LoadFromFile("img/xsmall.bmp");
      }
      else
      {
         pole7->Picture->LoadFromFile("img/x.bmp");
         p7='x';
         kto='o';
         tura->Picture->LoadFromFile("img/osmall.bmp");
      }
      pole7->Enabled=false;
      sprawdz();
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pole8Click(TObject *Sender)
{
if(p8=='n')
   {
      if(kto=='o')
      {
         pole8->Picture->LoadFromFile("img/o.bmp");
         p8='o';
         kto='x';
         tura->Picture->LoadFromFile("img/xsmall.bmp");
      }
      else
      {
         pole8->Picture->LoadFromFile("img/x.bmp");
         p8='x';
         kto='o';
         tura->Picture->LoadFromFile("img/osmall.bmp");
      }
      pole8->Enabled=false;
      sprawdz();
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pole9Click(TObject *Sender)
{
if(p9=='n')
   {
      if(kto=='o')
      {
         pole9->Picture->LoadFromFile("img/o.bmp");
         p9='o';
         kto='x';
         tura->Picture->LoadFromFile("img/xsmall.bmp");
      }
      else
      {
         pole9->Picture->LoadFromFile("img/x.bmp");
         p9='x';
         kto='o';
         tura->Picture->LoadFromFile("img/osmall.bmp");
      }
      pole9->Enabled=false;
      sprawdz();
   }
}
//---------------------------------------------------------------------------

Paczka z odcinka: POBIERZ​

1 odpowiedź

+3 głosów
odpowiedź 16 maja 2016 przez maly Nałogowiec (37,190 p.)
if(p1 == 'n')
if(p2 == 'n')
if(p3 == 'n')
...

Te wszystkie sprawdzenia w poleXClick są niepotrzebne ponieważ poleX->Enabled=false wyłącza też obsługę zdarzeń dla tej kontrolki.

char p1,p2,p3,p4,p5,p6,p7,p8,p9;

To powinno być tablicą.

 

Co prawda wykracza to poza zakres kursu ale skróciłem na szybko kod.

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

char p[9];
//p[0]..p[8] pola w grze (ich zawartosc: p[0]='n'; nic lub 'x' lub 'o' )
char kto;

void sprawdz()
{
	if((p[0] == p[1] && p[1] == p[2] && p[0] != 'n') ||
	        (p[3] == p[4] && p[4] == p[5] && p[3] != 'n') ||
	        (p[6] == p[7] && p[7] == p[8] && p[6] != 'n') ||
	        (p[0] == p[3] && p[3] == p[6] && p[6] != 'n') ||
	        (p[1] == p[4] && p[4] == p[7] && p[1] != 'n') ||
	        (p[2] == p[5] && p[5] == p[8] && p[2] != 'n') ||
	        (p[0] == p[4] && p[4] == p[8] && p[0] != 'n') ||
	        (p[2] == p[4] && p[4] == p[6] && p[2] != 'n'))
	{
		char *w;
		if (kto == 'x') w = "Wygrywa kółko!";
		else w = "Wygrywa krzyżyk!";
		Application->MessageBox(w, "Koniec gry", MB_OK);
	}
}


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent *Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
	TImage *images[] = {pole1, pole2, pole3, pole4, pole5, pole6, pole7, pole8, pole9};
	for(int i = 0; i < ARRAYSIZE(images); ++i)
	{
		images[i]->Picture->LoadFromFile("img/nic.bmp");
		images[i]->Enabled = true;
		images[i]->Tag = i;
	}

	tura->Picture->LoadFromFile("img/osmall.bmp");

	for(int i = 0; i < 9; ++i)
		p[i] = 'n';

	kto = 'o';
}
//---------------------------------------------------------------------------
void __fastcall TForm1::poleClick(TObject *Sender)
{
	TImage *pole = (TImage *)Sender;
	if(kto == 'o')
	{
		pole->Picture->LoadFromFile("img/o.bmp");
		p[pole->Tag] = 'o';
		kto = 'x';
		tura->Picture->LoadFromFile("img/xsmall.bmp");
	}
	else
	{
		pole->Picture->LoadFromFile("img/x.bmp");
		p[pole->Tag] = 'x';
		kto = 'o';
		tura->Picture->LoadFromFile("img/osmall.bmp");
	}
	pole->Enabled = false;
	sprawdz();
}
//---------------------------------------------------------------------------

 

1
komentarz 29 lipca 2016 przez BlueSky Początkujący (330 p.)
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

char p[9];
//p[0]..p[8] pola w grze (ich zawartosc: p[0]='n'; nic lub 'x' lub 'o' )
char kto;
 
void sprawdz()
{
    if((p[0] == p[1] && p[1] == p[2] && p[0] != 'n') ||
            (p[3] == p[4] && p[4] == p[5] && p[3] != 'n') ||
            (p[6] == p[7] && p[7] == p[8] && p[6] != 'n') ||
            (p[0] == p[3] && p[3] == p[6] && p[6] != 'n') ||
            (p[1] == p[4] && p[4] == p[7] && p[1] != 'n') ||
            (p[2] == p[5] && p[5] == p[8] && p[2] != 'n') ||
            (p[0] == p[4] && p[4] == p[8] && p[0] != 'n') ||
            (p[2] == p[4] && p[4] == p[6] && p[2] != 'n'))
    {
        char *w;
        if (kto == 'x') w = "Wygrywa kółko!";
        else w = "Wygrywa krzyżyk!";
        Application->MessageBox(w, "Koniec gry", MB_OK);
    }
}
 
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent *Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    TImage *images[] = {pole1, pole2, pole3, pole4, pole5, pole6, pole7, pole8, pole9};
    for(int i = 0; i < ARRAYSIZE(images); ++i)
    {
        images[i]->Picture->LoadFromFile("img/nic.bmp");
        images[i]->Enabled = true;
        images[i]->Tag = i;
    }

    tura->Picture->LoadFromFile("img/osmall.bmp");

    for(int i = 0; i < 9; ++i)
        p[i] = 'n';

    kto = 'o';
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pole1Click(TObject *Sender)
{
    TImage *pole = (TImage *)Sender;
    if(kto == 'o')
    {
        pole->Picture->LoadFromFile("img/o.bmp");
        p[pole->Tag] = 'o';
        kto = 'x';
        tura->Picture->LoadFromFile("img/xsmall.bmp");
    }
    else
    {
        pole->Picture->LoadFromFile("img/x.bmp");
        p[pole->Tag] = 'x';
        kto = 'o';
        tura->Picture->LoadFromFile("img/osmall.bmp");
    }
    pole->Enabled = false;
    sprawdz();
}
//---------------------------------------------------------------------------

 

komentarz 30 lipca 2016 przez BlueSky Początkujący (330 p.)
Działa w ogóle ten kod?
1
komentarz 30 lipca 2016 przez maly Nałogowiec (37,190 p.)

Testowałem go i działał

Spróbuj programowo podłączyć onClicki.

for(int i = 0; i < ARRAYSIZE(images); ++i)
{
	images[i]->OnClick = pole1Click;
	
	images[i]->Picture->LoadFromFile("img/nic.bmp");
	images[i]->Enabled = true;
	images[i]->Tag = i;
}

A jeśli nadal nie działa to spakuj cały projekt do zipa wrzuć na jakiś filehosting i sprawdzę co tam jest nie tak.

komentarz 30 lipca 2016 przez BlueSky Początkujący (330 p.)
Teraz działa, wielkie dzięki. Bardzo mi pomagasz ! :D
komentarz 7 sierpnia 2016 przez MrMcDanio Początkujący (360 p.)
Lepiej użyć dwuwymiarową tablicą [3]x[3] (ja tak robiłem przy konsolowym kółko & krzyżyk).

Latasz po tablicy (najszybciej zmieniają się indeksy najbardziej z  prawej- drugi nawias kwadratowy).

Podobne pytania

–1 głos
1 odpowiedź 366 wizyt
pytanie zadane 11 sierpnia 2016 w C i C++ przez james30k Bywalec (2,260 p.)
+3 głosów
0 odpowiedzi 1,693 wizyt
0 głosów
1 odpowiedź 150 wizyt
pytanie zadane 13 czerwca 2016 w C i C++ przez ArturVillain Nowicjusz (120 p.)

93,020 zapytań

141,982 odpowiedzi

321,283 komentarzy

62,366 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...