jak zrobic by program sie robil od nowa ? Jezyk C

0

Witam napisalem sobie gre kolko i krzyzyk i mam taki problem ze nie wiem jak zrobic by w jakis sposob ponowic ta gre ;/
Na poczatku zrobilem w petli do..while i w while dalem warunek jakiegos scanf ze to musi byc liczba , spelnilo mi sie lecz niestety podczas 2 wykonania petli nie wykonuje mi praktycznie niczego procz 2 scanf-ow a funkcji dotyczacych gry jakby nie rusza ;/

#include <stdio.h>
#include <stdlib.h>

int w1,w2,dzialaj,koniec;
char imie1[15];
char imie2[15];
char POLE[3][3];
int i,j,p;
int ruchcpu_hard=1;
int wynik=0;


int ruchgraczanr1 =1;


////////////////////////////////////////////////////////////////////////////////////////////
int main(){
do{
        wynik=0;
    wyczysc();
    printf("WYBIERZ TRYB GRY,wpisz 'm' jesli jednoosobowa lub  'n' jesli  dwuosobowa\n");
    scanf("%c",&w1);
    printf("Wpisz imie gracza nr 1\n");
    scanf("%s",imie1);
    if(w1=='n'){
        printf("Wpisz imie gracza nr 2\n");
        scanf("%s",imie2);
    while(wynik<=9){/////////////Tryb dla 2 graczy//////////////
        system("cls");
        tablica();
        ruch();
        system("cls");
        tablica();
        ktowygral();
    if(wynik==9){
          printf("REMIS");
            break;
           }

}}
if(w1=='m'){///////////////////1 gracz easy////////////////
  printf("poczatkujacy poziom wpisz-'1' trudny wpisz-'2'\n") ;
  scanf("%d",&dzialaj);
  system("cls");
      if(dzialaj==1) {
        while(wynik<=9){
            system("cls");
            tablica();
            ruch_cpu();
            system("cls");
            tablica();
            ktowygral_cpu();
            if(wynik==9){
                printf("REMIS");
                    break;
                }}}
      if(dzialaj==2) {ruchgraczanr1=0;
        while(wynik<=9){
            system("cls");
            tablica();
            ruch_cpu_hard();
            system("cls");
            tablica();
            ktowygral_cpu();
            if(wynik==9){
                printf("REMIS");
                    break;
                }}}

}



printf("Wpisz liczbe jesli chcesz zagrac jeszcze raz ");
}while(scanf("%d",&koniec)==1);
return 0;
}

Sorry ze takie dlugie

4

Ten to rzeczywiście trzeba od nowa. <ctrl-A><delete>

0

czemu trzeba od nowa ? kodu poszczegolnych funkcji juz nie wrzucalem ?
a gra dzialac ,dziala jak najbardziej tylko nie moge sobie poradzic z zrobieniem instrukcji ktora by wracala na poczatek jak nalezy nie omijajac nic przy tym

0

czemu trzeba od nowa ?

Bo ten kod to jedna wielka, nie zrozum mnie źle, porażka?

kodu poszczegolnych funkcji juz nie wrzucalem ?

Dzięki Bogu, że tego nie zrobiłeś!

0

a mozesz mi powiedziec czemu ? dopiero zaczynam zabawe na studiach z tego typu rzeczami to chcialbym wiedziec co i jak zle robie by moc to poprawic . Powiedzenie ze jest zle jest do bani jak w mojej sytuacji bo i tak nie wiem co robie zle ...

2

Jest nieczytelny - i to już właściwie Ci powinno wystarczyć jako powód przepisania tego kodu od nowa.

Aaaaale oprócz tego:
1.Podatny na buffer overflow (wpisz np.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa jako imię gracza).
2.Te pętle while(wynik<=9){ to jakaś porażka: nieczytelne, zawierające pełno kodu, który jest niemalże identyczny w obu przypadkach...
3.Polskie nazwy identyfikatorów to zło w czystej postaci, a jeszcze gorsze jest tylko mieszanie ich z angielskimi (ruch_cpu_hard); pisz w całości po angielsku.
4.system("cls"); też jest złem; zainteresuj się jakąś biblioteką do grafiki/zaawansowanej obsługi konsoli, jeżeli chcesz się tak bawić (np.ncurses).
5.Co najmniej dziwny podział na funkcje - dlaczego tak wiele rzeczy wykonujesz bezpośrednio w mainie?
6.Wpisz liczbe jesli chcesz zagrac jeszcze raz - tak bardzo logiczny komunikat... szkoda, że nie od razu "naciśnij trzy razy lewy przycisk myszki skacząc na prawej nodze będąc karmionym przez małpę"...
7.w1,w2, i,j,p - elokwentne nazwy zmiennych. Założę się, że za miesiąc od napisania tego kodu nie byłbyś w stanie powiedzieć, co te zmienne robią bez zaglądania do kodu.

0

Jesli chodzi o te komunikaty sa one zrobione jakby dla mnie zebym teraz wiedzial co i jak ,bo kod nie jest skonczony tylko nad nim caly czas pracuje ,zmienne tak samo robione na szybko .Ale dziekuje za uwagi ;) a wracajac do tematu jakbym mogl zrobic cos takiego by wrocic na poczatek programu ? ?

0

Robi się nieskończoną pętlę np. while(1)

1

@damianx009 ale ty wiesz jak to zrobić żeby można było znów zagrać -> użyc pętli. Tylko ze twój kod jest tak zagmatwany i nieczytelny że nie wiadomo jak i gdzie tą pętlę wstawić. Gdyby kod był czytelny to wyglądałby mniej więcej tak:

int main(){
    playOneGame();
}

void playOneGame(){
    mode = selectGameMode();
    if(mode == GameMode.SINGLE){
        playSingleplayerMode();
    }else{
        playMultiplayerMode();        
    }
}

I tak dalej. Widzisz różnicę w czytelności mojego kodu a twojego kodu? U ciebie jest masa liczb i zmiennych które nic nie mówią, przeplatających sie pętli i cudów na kiju. Gdyby twój kod wyglądał tak jak ten ktory przedstawiłem to sprawienie ze kod wykonuje się wielokrotnie wymagałby jedynie zapętlenia wykonania funkcji playOneGame na przykład tak:

int main(){
    play();
}

void play(){
    do{
       playOneGame();
    }while(shouldPlayNextGame() == 1);
}

int shouldPlayNextGame(){
  // chyba oczywiste co tutaj...
}

(zamiasta inta powinien tam oczywiście być ładny enum!)
Widzisz tu jakiś problem z pętlą? Raczej nie...

0

ok dzieki za pomoc , takze ide sie zabierac za ogarnianie tego bajzlu :P ^^

1 użytkowników online, w tym zalogowanych: 0, gości: 1