Come posso far funzionare questo mini gioco

di il
56 risposte

56 Risposte - Pagina 2

  • Re: Come posso far funzionare questo mini gioco

    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
  • Re: Come posso far funzionare questo mini gioco

    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.
  • Re: Come posso far funzionare questo mini gioco

    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;
        }
    	}
    }
    
  • Re: Come posso far funzionare questo mini gioco

    Sono fuori sede. Appena rientro verifico. Col cell non si capisce molto.
  • Re: Come posso far funzionare questo mini gioco

    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?
  • Re: Come posso far funzionare questo mini gioco

    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?
  • Re: Come posso far funzionare questo mini gioco

    L'hai usata male ...

    Ma mi spieghi cosa vuol dire rispondere si o no ad una domanda "chi attacca per primo"?
  • Re: Come posso far funzionare questo mini gioco

    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
  • Re: Come posso far funzionare questo mini gioco

    Tutto bello ma non hai risposto alla mia domanda ...
  • Re: Come posso far funzionare questo mini gioco

    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
  • Re: Come posso far funzionare questo mini gioco

    1 o 2 sono anche caratteri come s o n ... non cambia nulla ...
  • Re: Come posso far funzionare questo mini gioco

    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
  • Re: Come posso far funzionare questo mini gioco

    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.
  • Re: Come posso far funzionare questo mini gioco

    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
  • Re: Come posso far funzionare questo mini gioco

    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