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

kółko i krzyżyk dlaczego potrzeba więcej o 1 tablicy?

Object Storage Arubacloud
0 głosów
164 wizyt
pytanie zadane 3 grudnia 2017 w C i C++ przez program naczelny Gaduła (3,320 p.)

Zacznę od tego, że kod trochę  jeszcze twardy i brudny ale najpierw muszę to zbudować a potem pomalować :) Zacząłem ostatnio budować tic tac toe  w konsolce lecz wystąpił mi pewien bug. Po półgodzinnym ślęczeniu nad kodem znalazłem go i zrozumiałem, że muszę dodać chara do tej jedynej tablicy w kodzie wybor[ ]. Wiadomo to wszech i wobec, że jak się ma zepsuty kod i się nie rozumie to jest jeszcze ok. No ale jak kod działa.. i się jego nie umka to jest już źle. Dlatego zwracam się o wyjaśnienie po co tu potrzebny jest 1 dodatkowy char w tablicy skoro jest tylko 9 ruchów a tablica składa się z 0,1,2,3,4,5,6,7,8 <- przecież to powinno wystarczyc bo jest numeracja tablicy od 0. So what happend?

ps: sorry for namespace :]

#include <iostream>
#include <windows.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>

using namespace std;




 ///zmienne///
 int i=0, losowa=0, p=0;
 char wybor[9]; //< tu trzeba było z wybor[8] zrobic wybor[9]
 string tablica;//plansza

 void ktora_tab(char wyborek);
 void ktora_tab2(char wyborek);




///funkcja glowna///
int main()
{
 cout << "-----------------------" << endl;
 cout << " gra w kolko i krzyzyk " << endl;
 cout << "-----------------------" << endl;
 cout << "wybierz jak chcesz grac:  a)kolega=1   b)komputer=2  c)wyjscie=3 :)" << endl;

 p=getch();

 if (p!='1' && p!='2')
  {
  cout << endl;
  cout<<"no to nara ;)"<<endl;
  exit(0);
  }

 cout << endl;
 cout << "sterowanie za pomoca liter po lewej stronie klawiatury: q,w,e" << endl;
 cout << "                                                        a,s,d" << endl;
 cout << "                                                        z,x,c" << endl;
 cout << "aby kontynuowac kliknij enter :) " << endl;

 getchar();
 system("cls");

 tablica ="|---|---|---|";tablica+='\n';
 tablica+="|   |   |   |";tablica+='\n';
 tablica+="|---|---|---|";tablica+='\n';
 tablica+="|   |   |   |";tablica+='\n';
 tablica+="|---|---|---|";tablica+='\n';
 tablica+="|   |   |   |";tablica+='\n';
 tablica+="|---|---|---|";tablica+='\n';

 cout<<tablica;

 srand(time(NULL));

///przelacznik///
switch (p)
{




 case '1':///inny gracz///
 {


  for(;;)
  {


   /// wybor gracza kolkowego
   if (i==0||i==2||i==4||i==6||i==8)
   {
   cout<<"tura gracza z kolkiem"<<endl;

   wybor[i]=getch();

    while( wybor[i]==wybor[i-1] || wybor[i]==wybor[i-2] || wybor[i]==wybor[i-3]||
           wybor[i]==wybor[i-4] || wybor[i]==wybor[i-5] || wybor[i]==wybor[i-6]||
           wybor[i]==wybor[i-7] || wybor[i]==wybor[i-8] || wybor[i]==wybor[i-9])
     {
     wybor[i]=getch();
     }

   ktora_tab(wybor[i]);
   system("cls");
   cout<<tablica;


     ///sprawdzenie wygranej
     if (
             tablica[16]=='o' && tablica[48]=='o' && tablica[80]=='o'
         ||  tablica[24]=='o' && tablica[48]=='o' && tablica[72]=='o'

         ||  tablica[16]=='o' && tablica[20]=='o' && tablica[24]=='o'
         ||  tablica[44]=='o' && tablica[48]=='o' && tablica[52]=='o'
         ||  tablica[72]=='o' && tablica[76]=='o' && tablica[80]=='o'

         ||  tablica[16]=='o' && tablica[44]=='o' && tablica[72]=='o'
         ||  tablica[20]=='o' && tablica[48]=='o' && tablica[76]=='o'
         ||  tablica[24]=='o' && tablica[52]=='o' && tablica[80]=='o'
        )

        {
         cout<<"gracz z kolkiem wygral! :)";
         Sleep(2000);
         getchar();
         exit(0);
        }
   }




   /// wybor gracza krzyzykowego///
   else if (i==1||i==3||i==5||i==7)
   {


     cout<<"tura gracza z krzyzykiem"<<endl;
     wybor[i]=getch();


    while( wybor[i]==wybor[i-1] || wybor[i]==wybor[i-2] || wybor[i]==wybor[i-3]||
           wybor[i]==wybor[i-4] || wybor[i]==wybor[i-5] || wybor[i]==wybor[i-6]||
           wybor[i]==wybor[i-7] || wybor[i]==wybor[i-8] || wybor[i]==wybor[i-9] )

         {
              wybor[i]=getch();
         }

     ktora_tab2(wybor[i]);

     system("cls");
     cout<<tablica;


   ///sprawdzenie wygranej
   if (
           tablica[16]=='x' && tablica[48]=='x' && tablica[80]=='x'
       ||  tablica[24]=='x' && tablica[48]=='x' && tablica[72]=='x'

       ||  tablica[16]=='x' && tablica[20]=='x' && tablica[24]=='x'
       ||  tablica[44]=='x' && tablica[48]=='x' && tablica[52]=='x'
       ||  tablica[72]=='x' && tablica[76]=='x' && tablica[80]=='x'

       ||  tablica[16]=='x' && tablica[44]=='x' && tablica[72]=='x'
       ||  tablica[20]=='x' && tablica[48]=='x' && tablica[76]=='x'
       ||  tablica[24]=='x' && tablica[52]=='x' && tablica[80]=='x'
      )

    {
    cout<<"gracz z krzyzykiem wygral! :)";
    Sleep(2000);
    getchar();
    exit(0);
    }

   }//if


  if (i==8)
   {
   cout<<"nikt nie wygral :)";
   Sleep(2000);
   getchar();
   exit(0);
   }
  i++;
  }//for 1
 }//case 1
 break;






 case '2':///komputer///
 {


  for(;;)
  {


   /// wybor gracza kolkowego
   if (i==0||i==2||i==4||i==6||i==8)
   {


   cout<<"tura gracza z kolkiem"<<endl;
   wybor[i]=getch();

    while( wybor[i]==wybor[i-1] || wybor[i]==wybor[i-2] || wybor[i]==wybor[i-3]||
           wybor[i]==wybor[i-4] || wybor[i]==wybor[i-5] || wybor[i]==wybor[i-6]||
           wybor[i]==wybor[i-7] || wybor[i]==wybor[i-8])
     {
     wybor[i]=getch();
     }

   ktora_tab(wybor[i]);

   system("cls");
   cout<<tablica;



     ///sprawdzenie wygranej
     if (
             tablica[16]=='o' && tablica[48]=='o' && tablica[80]=='o'
         ||  tablica[24]=='o' && tablica[48]=='o' && tablica[72]=='o'

         ||  tablica[16]=='o' && tablica[20]=='o' && tablica[24]=='o'
         ||  tablica[44]=='o' && tablica[48]=='o' && tablica[52]=='o'
         ||  tablica[72]=='o' && tablica[76]=='o' && tablica[80]=='o'

         ||  tablica[16]=='o' && tablica[44]=='o' && tablica[72]=='o'
         ||  tablica[20]=='o' && tablica[48]=='o' && tablica[76]=='o'
         ||  tablica[24]=='o' && tablica[52]=='o' && tablica[80]=='o'
        )

        {
         cout<<"gracz z kolkiem wygral! :)";
         Sleep(2000);
         getchar();
         exit(0);
        }

   }//wybor gracza






   /// wybor komputera ///

   if (i==1||i==3||i==5||i==7)
   {


    cout<<"moja tura"<<endl;
    Sleep(500);
    losowa=rand()%9+1;
    switch (losowa)
     {
      case 1: wybor[i]='q'; break;
      case 2: wybor[i]='w'; break;
      case 3: wybor[i]='e'; break;
      case 4: wybor[i]='a'; break;
      case 5: wybor[i]='s'; break;
      case 6: wybor[i]='d'; break;
      case 7: wybor[i]='z'; break;
      case 8: wybor[i]='x'; break;
      case 9: wybor[i]='c'; break;
      default: {cout<<"wystapil blad"; exit(0);}
     }

    while(    wybor[i]==wybor[i-1] || wybor[i]==wybor[i-2] || wybor[i]==wybor[i-3]
           || wybor[i]==wybor[i-4] || wybor[i]==wybor[i-5] || wybor[i]==wybor[i-6]
           || wybor[i]==wybor[i-7] || wybor[i]==wybor[i-8]
         )

         {

            losowa=rand()%9+1;
            losowa=rand()%9+1;
            switch (losowa)
            {
           case 1: wybor[i]='q'; break;
           case 2: wybor[i]='w'; break;
           case 3: wybor[i]='e'; break;
           case 4: wybor[i]='a'; break;
           case 5: wybor[i]='s'; break;
           case 6: wybor[i]='d'; break;
           case 7: wybor[i]='z'; break;
           case 8: wybor[i]='x'; break;
           case 9: wybor[i]='c'; break;
           default: {cout<<"wystapil blad"; exit(0);}
            }
         }
     ktora_tab2(wybor[i]);
     system("cls");
     cout<<tablica;


   ///sprawdzenie wygranej
   if (
           tablica[16]=='x' && tablica[48]=='x' && tablica[80]=='x'
       ||  tablica[24]=='x' && tablica[48]=='x' && tablica[72]=='x'

       ||  tablica[16]=='x' && tablica[20]=='x' && tablica[24]=='x'
       ||  tablica[44]=='x' && tablica[48]=='x' && tablica[52]=='x'
       ||  tablica[72]=='x' && tablica[76]=='x' && tablica[80]=='x'

       ||  tablica[16]=='x' && tablica[44]=='x' && tablica[72]=='x'
       ||  tablica[20]=='x' && tablica[48]=='x' && tablica[76]=='x'
       ||  tablica[24]=='x' && tablica[52]=='x' && tablica[80]=='x'
      )

    {
    cout<<"wygralem!! :)";
    Sleep(2000);
    getchar();
    exit(0);
    }

   }//wybor komputera
   else if (i==8)
    {
    cout<<"cuz.. nikt nie wygral:)";
    Sleep(2000);
    getchar();
    exit(0);
    }
   i++;
  }//for 2

 }//case 2
 break;



}

return 0;
}







///
///funkcje poboczne - gdzie jest kolko/krzyzyk


void ktora_tab(char wyborek)
{

  switch(wybor[i])
  {
    case 'q':
    {tablica[16]='o';}
    break;

    case 'w':
    {tablica[20]='o';}
    break;

    case 'e':
    {tablica[24]='o';}
    break;

    case 'a':
    {tablica[44]='o';}
    break;

    case 's':
    {tablica[48]='o';}
    break;

    case 'd':
    {tablica[52]='o';}
    break;

    case 'z':
    {tablica[72]='o';}
    break;

    case 'x':
    {tablica[76]='o';}
    break;

    case 'c':
    {tablica[80]='o';}
    break;

    default: exit(0);
 }

}


void ktora_tab2(char wyborek)
{

  switch(wybor[i])
  {
    case 'q':
    {tablica[16]='x';}
    break;

    case 'w':
    {tablica[20]='x';}
    break;

    case 'e':
    {tablica[24]='x';}
    break;

    case 'a':
    {tablica[44]='x';}
    break;

    case 's':
    {tablica[48]='x';}
    break;

    case 'd':
    {tablica[52]='x';}
    break;

    case 'z':
    {tablica[72]='x';}
    break;

    case 'x':
    {tablica[76]='x';}
    break;

    case 'c':
    {tablica[80]='x';}
    break;

    default: exit(0);
 }

}

muszę dodać inta

komentarz 3 grudnia 2017 przez Aisekai Nałogowiec (42,190 p.)
193 i 244 linia kodu: nie dało się tego po prostu z modulo zapisać?

1 odpowiedź

+1 głos
odpowiedź 3 grudnia 2017 przez draghan VIP (106,230 p.)
Przy definiowaniu wielkości tablicy podajesz liczbę jej elementów, nie ostatni indeks. Stąd musi być tam liczba 9 elementów, indeksy będą się zawierać w zakresie [0, 8].
komentarz 3 grudnia 2017 przez program naczelny Gaduła (3,320 p.)
dzięki za wytłumaczenie, coś w tym stylu pomyślałem ale pewien nie byłem.

Podobne pytania

0 głosów
1 odpowiedź 834 wizyt
+1 głos
1 odpowiedź 258 wizyt
pytanie zadane 15 listopada 2022 w JavaScript przez Iei Obywatel (1,950 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 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!

...