Come posso far funzionare questo mini gioco

di Anonimizzato14999 il
56 risposte

56 Risposte - Pagina 2

  • Ah ma non disturbarti mi rileggo meglio il link che hai postato piuttosto che farmi fare il lavoro finito, meglio che imparo da errori piuttosto che studiare una risma bella pronta credo, certo ora è anche meglio che limiti gli errori un'attimo o ti occupo tutto il fine settimana
  • OK. Meglio così. Quando vuoi controlliamo le tue modifiche.
    In tanto ho modificato il tuo programma e funziona a dovere. Quando poi hai finito la tua versione la confrontiamo.
  • skynet ha scritto:


    OK. Meglio così. Quando vuoi controlliamo le tue modifiche.
    In tanto ho modificato il tuo programma e funziona a dovere. Quando poi hai finito la tua versione la confrontiamo.
    Ho inserito i dati, ma purtroppo il compilatore richiede che ci sia una ; dopo che ho definito le condizioni della variabile war, ovviamente però facendo così anche se lo compila si incastra quando mi chiede chi voglio fare attaccare per primo, inoltre posso sapere cosa cambia da

    (!(cin >> war)

    a

    ((cin >> war)

    ?

    ecco il codice un po' grezzo per ora, non ho potuto provare se il loop si attiva dato che ovviamente non posso continuare oltre il cin
    
    #include<iostream>
    #include<limits>
    
    using namespace std;
    
    int main()
    {
    	char play_again = 's';
    	char war = 's';
    	int numCo, numCh;
    
    		cout <<"Numero cowboys: ";
    		cin >> numCo;
            cout << "Numero cheerleaders: ";
            cin >> numCh;
            while (play_again == 's' || play_again == 'S') ((cout << "\nChi attacca per primo? (s/n)\n") && (!(cin >> war) || war == 's' || war == 'S' || war == 'n' || war == 'N'))
            {
                cout << "Input errato ";
                cin.clear();
                cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            }
    	{
            cout << "\nChi attacca per primo? (s/n)\n";
            cin >> war;
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    		if ( war == 's')
    		{
    			cout<<"\nI cowboys attaccano per primi, le cheerleaders perdono una unità" << endl << endl;
    			numCh--;
    			cout << "Numero cowboys " << numCo << endl << "Numero cheerleaders " << numCh << endl;
            }
    		else if  ( war == 'n')
    		{
    			cout<<"\nLe cheerleader attaccano per prime, i cowboys perdono una unità\n" << endl << endl;
    			numCo--;
    			cout << "Numero cowboys " << numCo << endl << "Numero cheerleaders " << numCh << endl;
            }
        if (numCh == 0)
    	{
            cout <<"\nGame over per le Cheerleaders." << endl << endl;
            cout << "Premi enter per chiudere" << endl;
            cin.get();
            return 0;
        }
        if (numCo == 0)
        {
            cout <<"\nGame over per i Cowboys." << endl << endl;
            cout << "Premi enter per chiudere" << endl;
            cin.get();
            return 0;
        }
        {
            
    		cout<<"\nVuoi attaccare ancora? (s/n)\n";
    		cin>> play_again;
        }
    	}
    }
    
  • Sono fuori sede. Appena rientro verifico. Col cell non si capisce molto.
  • Questa linea

    while (play_again == 's' || play_again == 'S') ((cout << "\nChi attacca per primo? (s/n)\n") && (!(cin >> war) || war == 's' || war == 'S' || war == 'n' || war == 'N'))

    non ha molto senso ... cosa c'entra la cout con la condizione della while?

    E comunque, scritta in quel modo, non può essere compilata. Che volevi fare?
  • oregon ha scritto:


    Questa linea

    while (play_again == 's' || play_again == 'S') ((cout << "\nChi attacca per primo? (s/n)\n") && (!(cin >> war) || war == 's' || war == 'S' || war == 'n' || war == 'N'))

    non ha molto senso ... cosa c'entra la cout con la condizione della while?

    E comunque, scritta in quel modo, non può essere compilata. Che volevi fare?
    Stavo seguendo l'esempio linkato da skynet
    
      ...
      while ((std::cout << "How old are you? ")
             && (!(std::cin >> age) || age < 1 || age > 200)) {
        std::cout << "That's not a number between 1 and 200; ";
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
      }
      ...
    
    Da come ho interpretato metteva un array tra 1 e 200, di conseguenza immaginavo che potevo fare la stessa cosa, dove ammetteva esclusivamente "s" "S" "n" "N", se veniva messo come input un'altra lettera dava errore di Input, l'avevo anche fatto andare in un tentativo ma chiedeva due volte l'input, del tipo:

    Chi attacca per primo(s/n)?
    s
    s
    I cowboys attaccano per primi, le cheerleaders perdono una unità

    riesci a dirmi cosa ho interpretato male?
  • L'hai usata male ...

    Ma mi spieghi cosa vuol dire rispondere si o no ad una domanda "chi attacca per primo"?
  • Avendo cominciato da poco lavoro con questo, per ora sto lavorando con gli statement if else, e prima di avanzare con altre cose preferivo fare pratica cosí avevo chiaro l'argomento, come usare i nested if else, l'uso di addizione e sottrazione appunto per questo codice, ora vedo per il while e l'array (sempre se ho capito bene cosa sia) sperando di implementare un random cosíé un gioco stile "lancia il dado se il numero é tra e tra succede questo altrimenti questo" piú avanti proseguirò studiando lo switch break e cosí via
  • Tutto bello ma non hai risposto alla mia domanda ...
  • Semplicemente questo conosco e con questo lavoro per ora, se non fosse stato quello li sarebbe stato con un int al posto di un char e avrei messo (1/2) invece di (s/n), credevo fosse chiaro
  • 1 o 2 sono anche caratteri come s o n ... non cambia nulla ...
  • oregon ha scritto:


    1 o 2 sono anche caratteri come s o n ... non cambia nulla ...
    Si per quello, puoi delucidarmi sulla procedura esatta del codice? Sapevo già che 9 su 10 avrei creato il codice sbagliato, ma volevo comunque provarci
  • Eccomi:
    #include<iostream>
    #include<limits>
    
    using namespace std;
    
    
    int main()
    {
    	char play_again = 's';
    	char war = 's';
    	int numCo, numCh;
    
    	while ((cout << "Numero cowboys: ")	&& !(cin >> numCo)) 
    	{
    		std::cout << "Si prega di inserire un numero ";
    		std::cin.clear();
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	}
    
    	std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	while ((cout << "Numero cheerleaders:  ") && !(cin >> numCh))
    	{
    		std::cout << "Si prega di inserire un numero ";
    		std::cin.clear();
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	}
    	
    	while (play_again == 's' || play_again == 'S')
    	{
    		cout << "\nChi attacca per primo? (s/n)\n";
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    		cin >> war;
    		switch (war)
    		{
    			case 's':
    			{
    				cout << "\nI cowboys attaccano per primi, le cheerleaders perdono una unità" << endl << endl;
    				numCh--;
    				if (numCh == 0)
    				{
    					cout << "\nGame over per le Cheerleaders." << endl << endl;
    					cout << "Premi enter per chiudere" << endl;
    					std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    					cin.get();
    					return 0;
    				}
    				cout << "Numero cowboys " << numCo << endl << "Numero cheerleaders " << numCh << endl;
    			}
    			break;
    			case 'n':
    			{
    				cout << "\nLe cheerleader attaccano per prime, i cowboys perdono una unità\n" << endl << endl;
    				numCo--;
    				if (numCo == 0)
    				{
    					cout << "\nGame over per i Cowboys." << endl << endl;
    					cout << "Premi enter per chiudere" << endl;
    					std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    					cin.get();
    					return 0;
    				}
    				cout << "Numero cowboys " << numCo << endl << "Numero cheerleaders " << numCh << endl;
    			}
    			break;
    			default:
    			{
    				cout << "\nInput errato - Riprova\n" << endl << endl;
    			}
    		}
    		cout << "\nVuoi attaccare ancora? (s/n)\n";
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    		cin >> play_again;
    	}
    }
    Guarda gli spezzoni del codice e trova il modo di applicarli al tuo codice.
  • skynet ha scritto:


    Eccomi:
    #include<iostream>
    #include<limits>
    
    using namespace std;
    
    
    int main()
    {
    	char play_again = 's';
    	char war = 's';
    	int numCo, numCh;
    
    	while ((cout << "Numero cowboys: ")	&& !(cin >> numCo)) 
    	{
    		std::cout << "Si prega di inserire un numero ";
    		std::cin.clear();
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	}
    
    	std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	while ((cout << "Numero cheerleaders:  ") && !(cin >> numCh))
    	{
    		std::cout << "Si prega di inserire un numero ";
    		std::cin.clear();
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	}
    	
    	while (play_again == 's' || play_again == 'S')
    	{
    		cout << "\nChi attacca per primo? (s/n)\n";
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    		cin >> war;
    		switch (war)
    		{
    			case 's':
    			{
    				cout << "\nI cowboys attaccano per primi, le cheerleaders perdono una unità" << endl << endl;
    				numCh--;
    				if (numCh == 0)
    				{
    					cout << "\nGame over per le Cheerleaders." << endl << endl;
    					cout << "Premi enter per chiudere" << endl;
    					std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    					cin.get();
    					return 0;
    				}
    				cout << "Numero cowboys " << numCo << endl << "Numero cheerleaders " << numCh << endl;
    			}
    			break;
    			case 'n':
    			{
    				cout << "\nLe cheerleader attaccano per prime, i cowboys perdono una unità\n" << endl << endl;
    				numCo--;
    				if (numCo == 0)
    				{
    					cout << "\nGame over per i Cowboys." << endl << endl;
    					cout << "Premi enter per chiudere" << endl;
    					std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    					cin.get();
    					return 0;
    				}
    				cout << "Numero cowboys " << numCo << endl << "Numero cheerleaders " << numCh << endl;
    			}
    			break;
    			default:
    			{
    				cout << "\nInput errato - Riprova\n" << endl << endl;
    			}
    		}
    		cout << "\nVuoi attaccare ancora? (s/n)\n";
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    		cin >> play_again;
    	}
    }
    Guarda gli spezzoni del codice e trova il modo di applicarli al tuo codice.
    Wow, ancora non sapevo che il while potesse essere usato più volte credevo creasse problemi, ho fatto un run del tuo codice, ma ho trovato un piccolo bug, nel caso in cui dai un input errato quando vuoi attaccare dopo ti chiede se Vuoi attaccare di nuovo, invece di richiederti chi attacca per primo.
    Devo ancora vedere gli switch, domani sera vedrò di ricreare da 0 ancora con gli if else, ma già da ora vedo che lo switch è semplice da imparare, grazie dell'aiuto veramente
  • Eliminazione bug
    #include<iostream>
    #include<limits>
    
    using namespace std;
    
    
    int main()
    {
    	char play_again = 's';
    	char war = 's';
    	int numCo, numCh;
    
    	while ((cout << "Numero cowboys: ")	&& !(cin >> numCo)) 
    	{
    		std::cout << "Si prega di inserire un numero ";
    		std::cin.clear();
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	}
    
    	std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	while ((cout << "Numero cheerleaders:  ") && !(cin >> numCh))
    	{
    		std::cout << "Si prega di inserire un numero ";
    		std::cin.clear();
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	}
    	
    	bool flag = true;
    	while (play_again == 's' || play_again == 'S')
    	{
    		flag = true;
    		cout << "\nChi attacca per primo? (s/n)\n";
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    		cin >> war;
    		switch (war)
    		{
    			case 's':
    			{
    				cout << "\nI cowboys attaccano per primi, le cheerleaders perdono una unità" << endl << endl;
    				numCh--;
    				if (numCh == 0)
    				{
    					cout << "\nGame over per le Cheerleaders." << endl << endl;
    					cout << "Premi enter per chiudere" << endl;
    					std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    					cin.get();
    					return 0;
    				}
    				cout << "Numero cowboys " << numCo << endl << "Numero cheerleaders " << numCh << endl;
    			}
    			break;
    			case 'n':
    			{
    				cout << "\nLe cheerleader attaccano per prime, i cowboys perdono una unità\n" << endl << endl;
    				numCo--;
    				if (numCo == 0)
    				{
    					cout << "\nGame over per i Cowboys." << endl << endl;
    					cout << "Premi enter per chiudere" << endl;
    					std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    					cin.get();
    					return 0;
    				}
    				cout << "Numero cowboys " << numCo << endl << "Numero cheerleaders " << numCh << endl;
    			}
    			break;
    			default:
    			{
    				cout << "\nInput errato - Riprova\n" << endl << endl;
    				flag = false;
    			}
    		}
    		if (flag)
    		{
    			cout << "\nVuoi attaccare ancora? (s/n)\n";
    			std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    			cin >> play_again;
    		}	
    	}
    }
Devi accedere o registrarti per scrivere nel forum
56 risposte