• 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
82 wizyt
pytanie zadane 3 grudnia 2017 w C i C++ przez program naczelny Bywalec (2,980 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 (36,150 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,870 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,980 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ź 121 wizyt
pytanie zadane 13 stycznia w C i C++ przez pysiek Początkujący (280 p.)
+1 głos
1 odpowiedź 70 wizyt
0 głosów
1 odpowiedź 324 wizyt
pytanie zadane 25 listopada 2018 w C# i .NET przez Corson Początkujący (260 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

64,950 zapytań

111,425 odpowiedzi

234,495 komentarzy

46,784 pasjonatów

Przeglądających: 207
Pasjonatów: 14 Gości: 193

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.

...