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

question-closed Gra w kółko i krzyżyk, blokada pętli przed ostatnim wyborem

Object Storage Arubacloud
–1 głos
516 wizyt
pytanie zadane 10 grudnia 2016 w C i C++ przez TomaszA2 Obywatel (1,720 p.)
zamknięte 21 czerwca 2017 przez TomaszA2

Chciałem sobie napisać grę w kółko i krzyżyk w konsoli. Przed napisaniem warunku wygranej chciałem napisać wszystkie blokady i zabezpieczenia. Trafiłem na błąd którego nie potrafię naprawić. Albo po prostu rozwiązanie jest proste a ja go nie widzę. Chodzi o to że po wciśnięciu 8 klawiszy, pętla jakby zatrzymuje cały proces.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#include <time.h>
#include <iostream>
#include <conio.h>
#include <string>

int xo[] = {2,2,2,2,2,2,2,2,2};

int zt(int a)
{
    
    xo[0] = a;
    xo[1] = a;
    xo[2] = a;
    xo[3] = a;
    
    xo[4] = a;
    xo[5] = a;
    xo[6] = a;
    xo[7] = a;
    xo[8] = a;
}

int cls()
{
  system("cls");   
}

int main()
{
    srand( time( NULL ) );
    bool q = false;
    int r;
    int w;
    int e;
    int c;
    int y;
    int u;
    bool t=false;
    std::string b;
    bool a = false;
    std::cout << "Menu:" <<std::endl;
    while(a==false)
    {
          //<--
         cls();    
         e=0;
         if(xo[0]==2) std::cout << "@|";
         if(xo[0]==1) std::cout << "X|";
         if(xo[0]==0) std::cout << "O|";
         
         if(xo[1]==2) std::cout << "@|";
         if(xo[1]==1) std::cout << "X|";
         if(xo[1]==0) std::cout << "O|";
         
         if(xo[2]==2) std::cout << "@" << std::endl;
         if(xo[2]==1) std::cout << "X" << std::endl;
         if(xo[2]==0) std::cout << "O" << std::endl;
         
         if(xo[3]==2) std::cout << "@|";
         if(xo[3]==1) std::cout << "X|";
         if(xo[3]==0) std::cout << "O|";
         
         if(xo[4]==2) std::cout << "@|";
         if(xo[4]==1) std::cout << "X|";
         if(xo[4]==0) std::cout << "O|";
         
         if(xo[5]==2) std::cout << "@" <<std::endl;
         if(xo[5]==1) std::cout << "X" <<std::endl;
         if(xo[5]==0) std::cout << "O" <<std::endl;
         
         if(xo[6]==2) std::cout << "@|";
         if(xo[6]==1) std::cout << "X|";
         if(xo[6]==0) std::cout << "O|";
         
         if(xo[7]==2) std::cout << "@|";
         if(xo[7]==1) std::cout << "X|";
         if(xo[7]==0) std::cout << "O|";
         
         if(xo[8]==2) std::cout << "@" <<std::endl;
         if(xo[8]==1) std::cout << "X" <<std::endl;
         if(xo[8]==0) std::cout << "O" <<std::endl;
                 while(q==false){
                 w=getch();
                 if(w==51 && xo[8]!=0 && e==0 && xo[8]!=1) 
                 {xo[8]=1; 
                 e = 1;
                 Sleep(10);
                 q=true;}
                 
                 if(w==50 && xo[7]!=0 && e==0 && xo[7]!=1) 
                 {xo[7]=1; 
                 e = 1;
                 Sleep(10);
                 q=true;}
                 
                 if(w==49 && xo[6]!=0 && e==0 && xo[6]!=1) 
                 {xo[6]=1; 
                 e = 1;
                 Sleep(10);
                 q=true;}
                 
                 if(w==54 && xo[5]!=0 && e==0 && xo[5]!=1) 
                 {xo[5]=1; 
                 e = 1;
                 Sleep(10);
                 q=true;}
                 
                 if(w==53 && xo[4]!=0 && e==0 && xo[4]!=1) 
                 {xo[4]=1; 
                 e = 1;
                 Sleep(10);
                 q=true;}
                 
                 if(w==52 && xo[3]!=0 && e==0 && xo[3]!=1) 
                 {xo[3]=1; 
                 e = 1;
                 Sleep(10);
                 q=true;}
                 
                 if(w==57 && xo[2]!=0 && e==0 && xo[2]!=1) 
                 {xo[2]=1; 
                 e = 1;
                 Sleep(10);
                 q=true;}
                 
                 if(w==56 && xo[1]!=0 && e==0 && xo[1]!=1) 
                 {xo[1]=1; 
                 e = 1;
                 Sleep(10);
                 q=true;}
                 
                 if(w==55 && xo[0]!=0 && e==0 && xo[0]!=1) 
                 {xo[0]=1; 
                 e = 1;
                 Sleep(10);
                 q=true;}
                 }
                 q=false;
                 if(w==114) 
                 {
                 zt(2);
                 y = 0;
                 u = 0;
                 }
                 while(t==false)
                 {
                 y=0;
                 r = ( rand() % 9 ) + 0;
                 //if not
                 
                 if(r==0 && xo[0]==1 && xo[0]==0){
                 r = ( rand() % 9 ) + 0; 
                 y+=1;
                 }
                 if(r==1 && xo[1]==1 && xo[1]==0){
                 r = ( rand() % 9 ) + 0; 
                 y+=1;
                 }
                 if(r==2 && xo[2]==1 && xo[2]==0){
                 r = ( rand() % 9 ) + 0; 
                 y+=1;
                 }
                 
                 if(r==3 && xo[3]==1 && xo[3]==0){
                 r = ( rand() % 9 ) + 0; 
                 y+=1;
                 }
                 if(r==4 && xo[4]==1 && xo[4]==0){
                 r = ( rand() % 9 ) + 0; 
                 y+=1;
                 }
                 if(r==5 && xo[5]==1 && xo[5]==0){
                 r = ( rand() % 9 ) + 0; 
                 y+=1;
                 }
                 
                 if(r==6 && xo[6]==1 && xo[6]==0){
                 r = ( rand() % 9 ) + 0; 
                 y+=1;
                 }
                 if(r==7 && xo[7]==1 && xo[7]==0){
                 r = ( rand() % 9 ) + 0; 
                 y+=1;
                 }
                 if(r==8 && xo[8]==1 && xo[8]==0){
                 r = ( rand() % 9 ) + 0; 
                 y+=1;
                 }
                 
                 if(y==8 || y==9)
                 {
                         u+=1;
                         
                 }
                 
                 if(u==10)t=true;
                 
                 if(r==0 && xo[0]==2){
                 xo[0]=0;
                 t=true;
                 }
                 if(r==1 && xo[1]==2){
                 xo[1]=0;
                 t=true;
                 }
                 if(r==2 && xo[2]==2){
                 xo[2]=0;
                 t=true;
                 }
                 
                 if(r==3 && xo[3]==2){
                 xo[3]=0;
                 t=true;
                 }
                 if(r==4 && xo[4]==2){
                 xo[4]=0;
                 t=true;
                 }
                 if(r==5 && xo[5]==2){
                 xo[5]=0;
                 t=true;
                 }
                 
                 if(r==6 && xo[6]==2){
                 xo[6]=0;
                 t=true;
                 }
                 if(r==7 && xo[7]==2){
                 xo[7]=0;
                 t=true;
                 }
                 if(r==8 && xo[8]==2){
                 xo[8]=0;
                 t=true;
                 }
                 
                 }
                 t=false;
                 
                 
         
         
         
         
    }
    return 0;
}

Jakby co, wiem że kod spisany byle jak ale to można ogarnąć jak już gra/program będzie działać poprawnie.

komentarz zamknięcia: pętla losująca nie miała jak wylosować, a ustawione było aby dopiero po losowaniu pętla się zamykała. I dopiero po zamknięciu się pętli wyświetla X oraz O
komentarz 10 grudnia 2016 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Ja leżę... Weź może trochę poczytaj jak pisać ładny kod, bo mnie już oczy na nim bolą :D Przede wszystkim ogarnij jakieś poprawne formatowanie kodu i nazywaj zmienne tak, aby od razu było wiadomo co która przechowuje. Wrócisz do kodu za miesiąc i zrobisz oczy jak 5zł ;)

1 odpowiedź

–1 głos
odpowiedź 10 grudnia 2016 przez Jackobs Bywalec (2,430 p.)
przywrócone 12 grudnia 2016 przez Jackobs
twoja zmienna "u" się wysypuje. Idę spać zmęczył mnie ten kod:)
komentarz 10 grudnia 2016 przez TomaszA2 Obywatel (1,720 p.)
edycja 10 grudnia 2016 przez TomaszA2
Edit. To nie było [nie jest] to.
komentarz 12 grudnia 2016 przez Jackobs Bywalec (2,430 p.)
Jest to jeden z wielu błedów. to że poprawisz jedno miejsce nie znaczy że będzie reszta działać........Lepiej żebyś napisał ten kod początku, a jeszcze lepiej ogarnij najpierw podstawy, bo w tym kodzie są rzeczy całkowicie nie dopuszczalne typu:

"xo[8]==1 && xo[8]==0" ....jak jedna zmienna może mieć wartość "1" i "0".
komentarz 12 grudnia 2016 przez TomaszA2 Obywatel (1,720 p.)
To poprawiłem już dawno, najpierw piszę, potem poprawiam. A błąd już naprawiony, chodziło o to że (tak jak podejrzewałem, beznadziejnie prosty błąd) pętla losująca nie miała jak wylosować, a ustawione było aby dopiero po losowaniu pętla się zamykała. I dopiero po zamknięciu się pętli wyświetla X oraz O, dlatego sprawiało to wrażenie martwego procesu.

Podobne pytania

–1 głos
1 odpowiedź 3,172 wizyt
0 głosów
1 odpowiedź 423 wizyt
pytanie zadane 19 stycznia 2017 w Nasze projekty przez karol928 Początkujący (320 p.)
0 głosów
0 odpowiedzi 487 wizyt

92,621 zapytań

141,477 odpowiedzi

319,817 komentarzy

62,005 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!

...