• 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

VPS Starter Arubacloud
–1 głos
447 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,046 wizyt
0 głosów
1 odpowiedź 412 wizyt
pytanie zadane 19 stycznia 2017 w Nasze projekty przez karol928 Początkujący (320 p.)
0 głosów
0 odpowiedzi 482 wizyt

92,455 zapytań

141,263 odpowiedzi

319,100 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...