Slot machine

di il
11 risposte

Slot machine

Ciao a tutti del forum!

Sto creando un progetto da consegnare ad un docente della facoltà.. vi chiedo un aiuto...
L'applicazione in questione è un casinò in cui i giochi compresi sono roulette, black jack e slot machine..finora ho creato la slot machine e funziona tutto nel modo giusto.. il problema si verifica quando voglio aggiungere una funzione "bonus" ovvero quello di far scegliere all'utente di bloccare (se lo vuole) 2 o 1 bobina tra le tre della slot machine... dopo la scelta in input devo far sì che le bobine bloccate rimangano ferme mentre le altre randomizzino il valore interno con dei numeri che vanno da 1 a 15...
NB. il programma chiede all'utente quante bobine bloccare... dopo la scelta di bloccare le bobine chiede quali bloccare e quali non... dopo aver digitato la scelta va in crash!

Attendo con ansia un vostro aiuto... (Ci tenevo a dire a skynet grazie perchè è sempre disponibilissimo )

Posto il codice::
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

main()
{
    int a[10]={0}, b[10]={0}, c[10]={0};
    int input;
    int i=0;
    int j=0;
    int rangebobine = 15;
    int chooseblk;


    srand(time(NULL));
    a[10] = rand()%rangebobine+1;
    b[10] = rand()%rangebobine+1;
    c[10] = rand()%rangebobine+1;
    printf("\nPrima giocata!");
    printf("\nValore array a: %d , b: %d, c: %d\n\n\n", a[10], b[10], c[10]);

    for(i=0; i<1; i++)
    {

        printf("\nInserire quante bobine bloccare.. MAX 2: ");
        scanf("%d", &input);

        if (input == 1)
        {
            for(j=0; j<1; j++)
            {
                printf("\nInserire il valore della bobina da bloccare. 1- array a, 2- array b, 3- array c");
                printf("\n: ");
                scanf("%d", input);
                if(input == 1)
                {
                    srand(time(NULL)); //estrae un numero random dalle altre 2 bobine esclusa la prima
                    b[i] = rand()%rangebobine+1;
                    c[i] = rand()%rangebobine+1;
                }
                else if(input == 2)
                {
                    srand(time(NULL)); //estrae un numero random dalle altre 2 bobine esclusa la seconda
                    a[i] = rand()%rangebobine+1;
                    c[i] = rand()%rangebobine+1;
                }
                else if(input == 3)
                {
                    srand(time(NULL)); //estrae un numero random dalle altre 2 bobine esclusa la terza
                    a[i] = rand()%rangebobine+1;
                    b[i] = rand()%rangebobine+1;
                }
                else
                {
                    printf("\nControllare il valore inserito.. E' errato!");
                    j--;
                }
            }
        }
        else if (input == 2)
        {
            for(j=0; j<1; j++)
            {
                printf("\nInserire il valore della bobina da bloccare. 1- array a, 2- array b, 3- array c");
                printf("\n: ");
                scanf("%d", input);
                if(input == 1)
                {
                    srand(time(NULL)); //estrae un numero random dalle altre 2 bobine esclusa la prima
                    b[i] = rand()%rangebobine+1;
                    c[i] = rand()%rangebobine+1;
                }
                else if(input == 2)
                {
                    srand(time(NULL)); //estrae un numero random dalle altre 2 bobine esclusa la seconda
                    a[i] = rand()%rangebobine+1;
                    c[i] = rand()%rangebobine+1;
                }
                else if(input == 3)
                {
                    srand(time(NULL)); //estrae un numero random dalle altre 2 bobine esclusa la terza
                    a[i] = rand()%rangebobine+1;
                    b[i] = rand()%rangebobine+1;
                }
                else
                {
                    printf("\nControllare il valore inserito.. E' errato!");
                    j--;
                }
            }

        }
        else if (input != 0 || input != 1 || input != 2)
        {
            printf("\nControllare il valore inserito.. E' errato!");
            i--;
        }
    }

}

11 Risposte

  • Re: Slot machine

    Hai un modo strano di scrivere il codice ma quì non ci sono errori. L'errore ci sarà dopo. cmq
    
    if (input != 0 || input != 1 || input != 2)
    
    equivale a una condizione sempre valida anche se io metto 2 lui mi va sempre in printf("valore non corretto") perche 2 è diverso da 0
    sarebbe stato meglio
    
    if (input < 0 && input > 2)
    
  • Re: Slot machine

    Mmm ho capito...in ogni caso questo non risolve il problema che nel momento in cui scelgo quale bobina bloccare il programma crasha comunque...forse il problema sta nel fatto che non posso randomizzare il contenuto della bobina all'interno della for..
  • Re: Slot machine

    Mi è sfugita questa
    
    a[10] = rand()%rangebobine+1;
    b[10] = rand()%rangebobine+1;
    c[10] = rand()%rangebobine+1;
    printf("\nPrima giocata!");
    printf("\nValore array a: %d , b: %d, c: %d\n\n\n", a[10], b[10], c[10]);
    
    cos'è sta roba? non puoi inizializzare un array così per quello che hai errori dopo. poi a[10], b[10] e c[10] non esistono. Un altra cosa srand va chiamato una volta x programma non mille.
  • Re: Slot machine

    Hai ragione ho corretto gli array e li ho tutti cambiati da 10 a 1 perchè in effetti non ho bisogno di 10 posizioni...comunque l'inizializzazione l'ho fatta in fase di dichiarazione su in cima con a[1] = {0};

    quello che mi hai riportato tu era un esempio di prima giocata con la slot dopo di chè parte la rrichiesta all'utente di continuare a giocare con le varie cose
  • Re: Slot machine

    A[10] non esiste cosi come non esiste a[1] se hai dichiarato l'array: int a[1]; l'indice dei array parte da zero per finire a n -1.
  • Re: Slot machine

    Ecco il tuo errore
    
    for(j=0; j<1; j++)
    			{
    				printf("\nInserire il valore della bobina da bloccare. 1- array a, 2- array b, 3- array c");
    				printf("\n: ");
    				scanf("%d", input); //input va passato come riferimento manca la &
    
  • Re: Slot machine

    
    printf("\nPrima giocata!");
    	for(i = 0; i < 10; i++)
    	{
    		a[i] = rand()%rangebobine+1;
    		b[i] = rand()%rangebobine+1;
    		c[i] = rand()%rangebobine+1;
    		
    		printf("\nValore array a: %d , b: %d, c: %d\n\n\n", a[i], b[i], c[i]);
    	}
    
  • Re: Slot machine

    Grazie per la disponibilità..kmq ho modificato.. xò non risolvo ancora ora ci riprovo perchè questa possibilità di bloccare le bobine proprio non funziona
  • Re: Slot machine

    Soluzione in pseudocodice
    
    1. crea una struttura con dentro un array e un bool. Se non puoi usare un bool usa un int che accetta due valori 0 = FALSE, 1 = FALSE.
    2. crea un array di queste strutture (hai 3 bobine quindi un array di 3 elementi)
    3. Fai scegliere all'utente le bobine da bloccare. Ogni scelta fa scattare l'elemento bool a TRUE nell'indice i dell'array. Quindi se l'utente sceglie 1 significa array[1].bloccato = TRUE.
    4. Alla fine fai girare solo le bobine con bloccato == FALSE. 
    5. Finito.
    
  • Re: Slot machine

    Perfetto skynet ora funziona tutto alla perfezione in effetti questo metodo che mi suggerisci è + immediato xò per evitare altri danni lascio tutto così ora funziona ti ringrazio tantissimo troppo gentile... so già che avrò bisogno dei tuoi consigli quando inizierò gli altri giochi... xD
  • Re: Slot machine

    Visto che a te funziona ho fatto io l'altra versione secondo il mio modello, così puoi fare la comparazione quale ti sembra più appropriato.
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define MAX 10
    #define NUM_BOBINE 3
    
    typedef struct _arr
    {
    	int bobina[MAX];
    	int bloccato; // 0 non bloccato, 1 bloccato
    }arr;
    
    
    int main()
    {
    	const int rangebobine = 15;
    	int input = -1;
    	int i=0;
    	int j=0;
    	int numBobinedaBloccare = 0;
    
    	arr bobine[NUM_BOBINE];
    
    	srand(time(NULL)); //unica chiamata per tutto il programma
    
    	for(i = 0; i < NUM_BOBINE; i++)
    	{
    		memset(bobine[i].bobina,0,sizeof(int) * MAX); // azzerramento array
    		bobine[i].bloccato = 0; //sbloccato
    	}
    	
    	printf("\nPrima giocata!");
    	for(i = 0; i < NUM_BOBINE; i++)
    	{
    		printf("\nValori bobina nr. %d\n ", i + 1);
    		for(j = 0; j < MAX; j++)
    			printf("%d ",bobine[i].bobina[j]);
    		printf("\n");
    	}
    	
    	do 
    	{
    		printf("\nInserire quante bobine bloccare.. MAX 2: ");
    		scanf(" %d", &numBobinedaBloccare);
    	}while(numBobinedaBloccare < 0 || numBobinedaBloccare > 2);
    
    	for(i = 0; i < numBobinedaBloccare; i++)
    	{
    		do 
    		{
    			printf("Quale bobina vuoi bloccare: 1-la prima, 2-la seconda, 3-la terza\t:");
    			scanf(" %d",&input);
    		} while(input < 1 || input > 3);
    
    		bobine[input-1].bloccato = 1; //blocca bobina input-esima - 1
    	}
    	
    	for(i = 0; i < NUM_BOBINE; i++)
    	{
    		if(bobine[i].bloccato == 0)
    		{
    			for(j = 0; j < MAX; j++)
    			bobine[i].bobina[j] = (rand() % rangebobine) + 1;
    		}
    	}
    
    	//dopo randomizzazione
    	for(i = 0; i < NUM_BOBINE; i++)
    	{
    		printf("\nValori bobina nr. %d\n ", i + 1);
    		for(j = 0; j < MAX; j++)
    			printf("%d ",bobine[i].bobina[j]);
    		printf("\n");
    	}
    	return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
11 risposte