• 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?

0 głosów
79 wizyt
pytanie zadane 3 grudnia 2017 w C i C++ przez program naczelny Bywalec (2,860 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 (31,910 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 (102,850 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 Bywalec (2,860 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ź 104 wizyt
pytanie zadane 13 stycznia w C i C++ przez pysiek Początkujący (280 p.)
+1 głos
1 odpowiedź 68 wizyt
0 głosów
1 odpowiedź 183 wizyt
pytanie zadane 25 listopada 2018 w C# i .NET przez Corson Początkujący (260 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

62,361 zapytań

108,494 odpowiedzi

226,498 komentarzy

35,434 pasjonatów

Przeglądających: 205
Pasjonatów: 13 Gości: 192

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...