Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    121

    [C++] piccola slot machine, cerco consigli...

    Ciao... ho fatto questo codice, che simula una specie di slot machine, sto cercando consigli per migliorare il codice, che nn mi sembra un gran chè perche continua ad aprire chiudere file ecc... ci sara sicuramente un modo per farlo meglio, premtetto che programmo amatorialmente, ho solo 15 anni, quindi nn insultatemi troppo vi posto il codice:
    #include <fstream>
    #include <iostream>

    using namespace std;


    int main()
    {

    //dichiaro i numeri
    int n01;
    int n02;
    int n03;
    int n04;
    int n05;
    int n06;
    int n07;
    int n08;
    int n09;

    //dichiaro due stringhe che mi permettono di andare avanti con il gioco
    string s1;
    string s2;

    do {

    //apro il file machine.txt che contiene il numero di gettoni
    int tmachine;
    ifstream tokensmachine ("machine.txt");
    tokensmachine >> tmachine;
    tokensmachine.close();

    //gettoni dell'utente
    int tmember;
    ifstream tokensmember ("tokens.txt");
    tokensmember >> tmember;
    tokensmember.close();

    //vincite
    int win1 = 8;
    int win2 = 4;
    int win3 = 1;

    //...
    int numberw;
    int totokens;

    //randomizzo i numeri che ho dichiarato all'inizio
    n01 = rand() % 3 + 1;
    n02 = rand() % 3 + 1;
    n03 = rand() % 3 + 1;
    n04 = rand() % 3 + 1;
    n05 = rand() % 3 + 1;
    n06 = rand() % 3 + 1;
    n07 = rand() % 3 + 1;
    n08 = rand() % 3 + 1;
    n09 = rand() % 3 + 1;

    //stampo il numero di gettoni in palio e se l'utente vuole spendere un gettone per giocare
    cout << "Montepremi: " << tmachine << " gettoni! ";
    cout << "Gettoni che possiedi: " << tmember << "!" << endl;
    cout << "Vuoi tentare la fortuna inserendo un gettone nella macchinetta? [s/n] ";
    cin >> s1;

    //se l'utente inserisce il gettone procedo con il gioco
    if (s1 == "s") {

    //salvo machine.txt con un gettone in più rispetto a prima
    int addtokens = 1+tmachine;
    ofstream addtokensmachine ("machine.txt");
    addtokensmachine << addtokens;
    addtokensmachine.close();

    //salvo tokens,txt con un gettone in meno
    int reltokens = tmember-1;
    ofstream reltokensmember ("tokens.txt");
    reltokensmember << reltokens;
    reltokensmember.close();

    //stampo i numeri random in tre colonne e tre righe
    cout << " " << n01 << " " << n02 << " " << n03 << "" << endl;
    cout << " " << n04 << " " << n05 << " " << n06 << "" << endl;
    cout << " " << n07 << " " << n08 << " " << n09 << "" << endl;

    //se una delle tre righe é uguale es: 3 3 3 il giocatore vince
    if (n01 == n02 && n01 == n03) {

    numberw = n01;
    if (numberw == 3)
    totokens = win1;
    else if (numberw == 2)
    totokens = win2;
    else if (numberw == 1)
    totokens = win3;
    cout << "Complimenti! Hai vinto " << totokens << " gettoni!" << endl;

    } else if (n04 == n05 && n04 == n06) {

    numberw = n01;
    if (numberw == 3)
    totokens = win1;
    else if (numberw == 2)
    totokens = win2;
    else if (numberw == 1)
    totokens = win3;
    cout << "Complimenti! Hai vinto " << totokens << " gettoni!" << endl;

    } else if (n07 == n08 && n07 == n09) {

    numberw = n01;
    if (numberw == 3)
    totokens = win1;
    else if (numberw == 2)
    totokens = win2;
    else if (numberw == 1)
    totokens = win3;
    cout << "Complimenti! Hai vinto " << totokens << " gettoni!" << endl;

    } else {
    cout << "Sei stato sfortunato! Riprova!" << endl;
    numberw = 0;
    }

    //se la vincita e maggiore di 0 salvo il risultato sul file
    if (numberw > 0) {
    ofstream addtokensmember ("tokens.txt");
    addtokensmember << tmember+totokens;
    addtokensmember.close();

    ofstream reltokensmachine ("machine.txt");
    reltokensmachine << tmachine-totokens;
    reltokensmember.close();
    }

    }

    cout << "Vuoi ritentare? [s/n] ";
    cin >> s2;
    cout << endl << endl;

    } while(s2 == "s"); //se il giocatore vuole ritentare il ciclo rinizia da capo

    return 0;
    }
    Spero che abbiate qualche idea da suggerirmi per migliorare... ciaooo e grazie...

  2. #2
    Indenta il codice, dividilo in funzioni e controlla il funzionamento delle singole procedure ...
    (in cpp funzioni e procedure sono la stessa cosa)

    http://programmazione.html.it/guide/...2/le-funzioni/
    Experience is what you get when you don’t get what you want

  3. #3
    considera il tuo codice:
    codice:
    //dichiaro i numeri
    int n01;
    int n02;
    int n03;
    int n04;
    int n05;
    int n06;
    int n07;
    int n08;
    int n09;
    e se avessi avuto a che fare con centinaia di numeri?

    spunto per una possibile soluzione:
    codice:
    int n [9];
    ;-)

  4. #4
    Experience is what you get when you don’t get what you want

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    121
    ok, creare l'array va bene (int n[9]), ma come faccio dopo a randomizzarli tutti in modo che siano tutti diversi? potrei usare un for?
    for (i=0; i<=9; i++)
    {
    n[i] = rand() % 3 + 1;
    }
    per usare delle funzioni, come faccio a decidere quali azioni mettere in una funzione?
    non é molto facile da decidere e da orientarsi... grazie mille per i suggerimenti...

  6. #6
    prima del for metti srand((unsigned int) time(NULL));
    per generare un seme ogni volta diverso (e non ottenere uguali risultati da rand, ad ogni avvio dell'applicativo).

    Attenzione al for
    codice:
    int n01;
    int n02;
    int n03;
    int n04;
    int n05;
    int n06;
    int n07;
    int n08;
    int n09;
    lo hai tradotto in:
    codice:
    int n[9]
    quindi:
    codice:
    for (unsigned int i = 0; i < 9; i++)
       {
       n[i] = rand() % 3 + 1;
       }
    Dovresti creare funzioni a se stanti, che non necessitino di un contesto per funzionare.
    Un esempio potrebbe essere una funzione per inizializzare un vettore, con valori casuali...
    Impara a passare un array ad una funzione

    Experience is what you get when you don’t get what you want

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    121
    ok, fino al primo pezzo ci ero arrivato.. grazie..

    per passare a una funzione un array nn basta fare come al solito:
    int miaFunzione (int n[9])
    {
    }
    ???

    EDIT: il problema della riassegnazione dei rand nn si pone perché la randomizzazione é all'interno del do-while e ripete tutto... almeno a me va....

    EDIT2:
    ho provato a fare una funzione che serve per agiornare i file di testo... il problema adesso é il passaggio deid ati alla funzione:

    Funzione:
    int tokens (int t[4], string fat, int totokens) {
    ifstream tokensmachine ("machine.txt");

    if (fat == "assign") {
    tokensmachine >> t[1];
    } else if (fat == "relone") {
    t[3] = t[1]-1;
    tokensmachine >> t[3];
    } else if (fat == "win") {
    t[3] = t[1]-totokens;
    tokensmachine >> t[3];
    }

    tokensmachine.close();

    ifstream tokensmember ("tokens.txt");

    if (fat == "assign") {
    tokensmember >> t[2];
    } else if (fat == "relone") {
    t[4] = t[2]-1;
    tokensmember >> t[4];
    } else if (fat == "win") {
    t[4] = t[2]+totokens;
    tokensmember >> t[4];
    }

    tokensmember.close();
    }
    Passaggio alla funzione:
    fat = "assign";
    tokens(int t[4], int fat, int totokens);
    sbaglio nel passaggio dell array t? AIuto please.. ciao e grazie..

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Come indicato nel regolamento, per il codice si utilizzano i tag [code] e [/code] e non i tag QUOTE come hai fatto finora... utilizzando gli appositi tag CODE il codice rimane indentato e più facilmente leggibile...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    121
    ah ok.... grazie.. cmq nn ho pochi problemi con la funzione

  10. #10
    Uno sguardo alla guida ?

    codice:
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    void foo (int array[], unsigned int n);
    
    main ()
    {
    	int arr[10];
    	foo (arr, 10);
    	
    	for (unsigned int i = 0; i < 10; i++)
    		cout << arr[i] << endl;
    
    	cout << endl;
    	return EXIT_SUCCESS;
    }
    
    void foo (int array[], unsigned int n)
    	{
    	srand((unsigned int) time(NULL));
    	for (unsigned int i = 0; i < n; i++)
    		{
    		array[i] = rand() % 3 + 1;
    		}
    	}
    Experience is what you get when you don’t get what you want

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.