Torna indietro   Hardware Upgrade Forum > Software > Programmazione

realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x scommette tutto, forse troppo, sulla batteria da 7500 mAh e sulla certificazione ArmorShell per farsi notare nella fascia più economica del mercato: lo abbiamo messo alla prova per capire a chi è rivolto questo smartphone che sacrifica un po' prestazioni, display e fotocamera per offrire l'autonomia migliore possibile a un prezzo decisamente contenuto
Star Wars Zero Company è l'erede di XCOM 2
Star Wars Zero Company è l'erede di XCOM 2
Bit Reactor porta nell’universo di Star Wars una struttura tattica che richiama apertamente XCOM 2, ma la arricchisce con legami tra i personaggi, progressione ruolistica, gestione della base e un sistema di combattimento costruito attorno a tre Punti Azione e alle risorse condivise della squadra
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-02-2012, 15:28   #1
Filly95
Senior Member
 
L'Avatar di Filly95
 
Iscritto dal: Jan 2009
Città: Milano
Messaggi: 449
[C] gioco del Tris

Salve a tutti, ho scritto un piccolo gioco del Tris in C, ma ho riscontrato questi problemi:
[RISOLTO] 1. Quando si prova a mettere una pedina su una casella occupata il numero dei turni non diminuisce (pur avendo messo count_turni--).
[RISOLTO]2. A fine partita non funziona la parte in cui si chiede se si vuole iniziare una nuova partita.
[RISOLTO] 3. In caso di parità non viene eseguito il printf relativo, penso che la variabile risultato non venga settata correttamente a 3 perché credo di aver sbagliato qualcosa nel controllo parità nella funzione check_vincita.
Per ora non mi viene altro in mente, ringrazio tutti in anticipo.
Il mio codice è questo: -.
Uso come editor NotePad++ e come compilatore Dev-C++.

EDIT: Ho risolto due problemi, mi manca l'ultimo, ma proprio non ne vengo a capo. Inoltre vorrei chiedervi se c'è qualche modo di snellire il codice, soprattutto nella funzione check_vincita. Pensavo che
Codice:
if(schema[7] == schema[8] == schema[9] == 'X' || schema[4] == schema[5] == schema[6] == 'X' || schema[1] == schema[2] == schema[3] == 'X') r = 1;
...
ovvero delle eguaglianze multiple funzionasser, ma mi sono sbagliato.
Grazie ancora.
__________________
Intel i5 2500k | Arctic Cooling Freezer i30 | Asrock Z68 Extreme 3 Gen 3 | Lancool PC-K62 | Corsair TX750M | MSI nVidia GTX 560 Ti Twin Frozr II | Corsair Vengeance LP Black 1600MHz 2x4GB | Crucial M4 128GB | Western Digital Elements 1TB | Seagate 500GB | Cooler Master Spawn | Logitech G110
Concluso positivamente con: massimo3550!

Ultima modifica di Filly95 : 21-02-2012 alle 18:58. Motivo: risolti due bug
Filly95 è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 09:46   #2
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 22266
le eguaglianze devi farle 2 a 2 ovvero cella1 ='X' && cella2=='X' ecc ecc

ma se vuoi snellire il codice puoi fare questo trucchetto

considera i char come intero (cast a int) somma i 3 valori e controlla se la somma vale 264 (per le X che corrispondono in intero a 88)
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX)
Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000
!fazz è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 10:04   #3
Stewino
Junior Member
 
Iscritto dal: Feb 2012
Messaggi: 12
Per riavviare ho provato a inserire
Codice:
nuova=getch();
invece di
Codice:
scanf("%c", &nuova);
e funziona.
Ovviamente devi aggiungere la libreria conio.h.
Ho notato che dopo il riavvio rimangono le pedine della partita precedente.

Bel programma comunque
Stewino è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 10:47   #4
Filly95
Senior Member
 
L'Avatar di Filly95
 
Iscritto dal: Jan 2009
Città: Milano
Messaggi: 449
Quote:
Originariamente inviato da !fazz Guarda i messaggi
le eguaglianze devi farle 2 a 2 ovvero cella1 ='X' && cella2=='X' ecc ecc

ma se vuoi snellire il codice puoi fare questo trucchetto

considera i char come intero (cast a int) somma i 3 valori e controlla se la somma vale 264 (per le X che corrispondono in intero a 88)
Considerando che è un esercizio di terza (che ho fatto per diletto però) e i cast non sono stati ancora affrontati, penso che terrò questo codice. Strano perché la soluzione che avevo ideato l'avevo cercata, e su un altro source l'avevo vista. Comunque grazie per il trucchetto.
Quote:
Originariamente inviato da Stewino Guarda i messaggi
Per riavviare ho provato a inserire
Codice:
nuova=getch();
invece di
Codice:
scanf("%c", &nuova);
e funziona.
Ovviamente devi aggiungere la libreria conio.h.
Ho notato che dopo il riavvio rimangono le pedine della partita precedente.

Bel programma comunque
Grazie, avevo già provato getch, e andava. A casa a sto punto sostituisco scanf con getch, e metto anche l'inizializzazione dell'array schema dentro il do while al posto che fuori dal main, così ogni volta si resetta. Ora però voglio capire perché scanf non va... Qualche idea?
__________________
Intel i5 2500k | Arctic Cooling Freezer i30 | Asrock Z68 Extreme 3 Gen 3 | Lancool PC-K62 | Corsair TX750M | MSI nVidia GTX 560 Ti Twin Frozr II | Corsair Vengeance LP Black 1600MHz 2x4GB | Crucial M4 128GB | Western Digital Elements 1TB | Seagate 500GB | Cooler Master Spawn | Logitech G110
Concluso positivamente con: massimo3550!

Ultima modifica di Filly95 : 20-02-2012 alle 11:18.
Filly95 è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 11:43   #5
Stewino
Junior Member
 
Iscritto dal: Feb 2012
Messaggi: 12
Praticamente lo scanf legge ogni tipo di carattere digitato da tastiera, quindi anche l'invio.

Per risolvere questo problema basta mettere
Codice:
scanf("%s", &nuova);
se noti ho sostituito la 'c' con una 's'.
Oppure utilizzi il getch.

Stewino è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 12:02   #6
Filly95
Senior Member
 
L'Avatar di Filly95
 
Iscritto dal: Jan 2009
Città: Milano
Messaggi: 449
EDIT: Cercando su Google ho trovato che "%c" non dovrebbe tenere conto del \n ("%s" invece sì) ma nel caso del do while lo fa. Come si risolve? Ho trovato qui che mettendo "%c\n" dovrebbe andare a posto.
__________________
Intel i5 2500k | Arctic Cooling Freezer i30 | Asrock Z68 Extreme 3 Gen 3 | Lancool PC-K62 | Corsair TX750M | MSI nVidia GTX 560 Ti Twin Frozr II | Corsair Vengeance LP Black 1600MHz 2x4GB | Crucial M4 128GB | Western Digital Elements 1TB | Seagate 500GB | Cooler Master Spawn | Logitech G110
Concluso positivamente con: massimo3550!

Ultima modifica di Filly95 : 20-02-2012 alle 12:38.
Filly95 è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 14:38   #7
Stewino
Junior Member
 
Iscritto dal: Feb 2012
Messaggi: 12
Se utilizzi %c verrà letto anche l'invio.
Es. digito 's' e premo invio, il programma legge il carattere 's' e /n, la variabile sarà uguale a 's' con /n.

Se utilizzi \n%c l'invio verrà scartato.
Es. digito 's' e premo invio, il programma legge il carattere 's' e /n, scarta /n, quindi la variabile sarà uguale a 's'.

Stewino è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 15:54   #8
Filly95
Senior Member
 
L'Avatar di Filly95
 
Iscritto dal: Jan 2009
Città: Milano
Messaggi: 449
Sisi, ora funziona tutto! Stavo spiegando a mio nonno come giocare e nel frattempo mi sono accorto che mancava anche l'azzeramento (o meglio, l'inizializzazione a 1) dei turni quando si ricomincia una partita
Comunque questo è il codice sorgente finale, se a qualcuno mai sarà utile: http://codepad.org/n73qX3nc.
Un'altra cosa carina da implementare sarebbe l'uscita in qualsiasi momento premendo esc ma non so/ho voglia di implementarla
__________________
Intel i5 2500k | Arctic Cooling Freezer i30 | Asrock Z68 Extreme 3 Gen 3 | Lancool PC-K62 | Corsair TX750M | MSI nVidia GTX 560 Ti Twin Frozr II | Corsair Vengeance LP Black 1600MHz 2x4GB | Crucial M4 128GB | Western Digital Elements 1TB | Seagate 500GB | Cooler Master Spawn | Logitech G110
Concluso positivamente con: massimo3550!
Filly95 è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 16:34   #9
Stewino
Junior Member
 
Iscritto dal: Feb 2012
Messaggi: 12
Sarebbe bello farlo con una veste grafica, solo che non so come si fa, a quest'ora l'avrei già fatto
Stewino è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 23:11   #10
Filly95
Senior Member
 
L'Avatar di Filly95
 
Iscritto dal: Jan 2009
Città: Milano
Messaggi: 449
Sicuramente il c da solo non basta, ci vuole qualche libreria... Però l'esercizio era realizzarlo in console, ce l'ho fatta in 8 ore e ne sono fiero
__________________
Intel i5 2500k | Arctic Cooling Freezer i30 | Asrock Z68 Extreme 3 Gen 3 | Lancool PC-K62 | Corsair TX750M | MSI nVidia GTX 560 Ti Twin Frozr II | Corsair Vengeance LP Black 1600MHz 2x4GB | Crucial M4 128GB | Western Digital Elements 1TB | Seagate 500GB | Cooler Master Spawn | Logitech G110
Concluso positivamente con: massimo3550!
Filly95 è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2012, 14:08   #11
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
sei grande. Fare giochi in C è davvero complicato!!
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2012, 10:59   #12
Phantom1989
Junior Member
 
Iscritto dal: Nov 2012
Messaggi: 1
Mia versione tris

Ciao a tutti ragazzi, sono nuovo del forum. Io ho prodotto una mia versione del gioco del tris ed è funzionante in Code::Blocks 10.05. Questo è il codice:
Codice HTML:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM 3
#define CPU 1
#define PLAYER 0
void stampa(char matrice[DIM][DIM]); //stampa il tabellone ogni volta che un giocatore inserisce una propria pedina
int inserimento (char matrice[DIM][DIM], int stato); //inserisce la pedina del giocatore corrispondente
void vittoria (char matrice[DIM][DIM], char ); //controlla se si è verificato un tris e decreta il vincitore
int main()
{
    int status=0, i=0;
    char matrix[DIM][DIM]={'.','.','.','.','.','.','.','.','.'}; //inizializzazione di matrice (ho 2 warning per questo)
    printf("Il programma permette di giocare a tris con il computer\n");
    srand(time(NULL));
    status=rand()%2; //testa o croce fra il giocatore e la CPU
    stampa(matrix);
    i=0;
    while(i<10) //si possono occupare solo 9 caselle
    {
        status=inserimento(matrix, status);
        i++;
    }
    printf("La partita contro la CPU e' finita pari\n");
    return 0;
}

void vittoria (char matrice[DIM][DIM], char pedina)
{
    int i=0, j=0, flag=0;
    for(i=0;i<DIM;i++) //controllo per righe della matrice
    {
        flag=0;
        for(j=0;j<DIM;j++)
        {
            if(matrice[i][j]==pedina)
            flag++;
        }
        if(flag==3)
        {
            stampa(matrice);
            printf("Giocatore '%c' HAI FATTO TRIS! SEI IL VINCITORE!\n", pedina);
            exit(EXIT_SUCCESS);
        }
    }
    for(j=0;j<DIM;j++) //controllo per colonne della matrice
    {
        flag=0;
        for(i=0;i<DIM;i++)
        {
            if(matrice[i][j]==pedina)
            flag++;
        }
        if(flag==3)
        {
            stampa(matrice);
            printf("Giocatore '%c' HAI FATTO TRIS! SEI IL VINCITORE!\n", pedina);
            exit(EXIT_SUCCESS);
        }
    }
    if(matrice[0][0]==pedina && matrice[1][1]==pedina && matrice[2][2]==pedina) //controllo delle diagonali della matrice
    {
        stampa(matrice);
        printf("Giocatore '%c' HAI FATTO TRIS! SEI IL VINCITORE!\n", pedina);
        exit(EXIT_SUCCESS);
    }
    if(matrice[0][2]==pedina && matrice[1][1]==pedina && matrice[2][0]==pedina)
    {
        stampa(matrice);
        printf("Giocatore '%c' HAI FATTO TRIS! SEI IL VINCITORE!\n", pedina);
        exit(EXIT_SUCCESS);
    }
    stampa(matrice);
}

void stampa(char matrice[DIM][DIM])
{
    int i=0, j=0;
    char righe[DIM]={'A','B','C'}, colonne[DIM+1]={' ','1','2','3'};
    for(i=0;i<DIM+1;i++)
    {
        printf("%c ", colonne[i]);
    }
    printf("\n");
    for(i=0;i<DIM;i++)
    {
        printf("%c ", righe[i]);
        for(j=0;j<DIM;j++)
        {
            printf("%c ", matrice[i][j]);
        }
        printf("\n");
    }
}

int inserimento (char matrice[DIM][DIM], int stato)
{
    char xy[DIM]={'\0','\0','\0'}, sign='\0';
    int i=0,j=0;
    printf("Mossa?<inserire coordinate>\n");
    if(stato==CPU)
    {
        sign='O'; //assegna un segno distinguibile ad ogni giocatore
        do
        {
            srand(time(NULL));
            i=rand()%3; //la CPU deve scegliere casualmente una riga ed una colonna da 0 a 3
            srand(time(NULL));
            j=rand()%3;
        }
        while(matrice[i][j]!='.'); //controlla che la casella non sia occupata da un altra pedina
        matrice[i][j]=sign; //assegna alla casella libera il segno del giocatore corrente
        vittoria(matrice, sign); //rimanda al controllo del tris
        stato=PLAYER; //passa la mano all'avversario
        return stato; //ritorna il turno del giocatore corrispondente
    }
    else
    {
        sign='X';
        do
        {
            gets(xy); //il giocatore deve inserie un carattere compreso fra A,B,C per le righe e 1,2,3 per le colonne
            i=xy[0]%65; //traduce le lettere in indici della matrice
            j=xy[1]%49; //mette in scala i numeri inseriti per le colonne
        }
        while(matrice[i][j]!='.');
        matrice[i][j]=sign;
        vittoria(matrice, sign);
        stato=CPU;
        return stato;
    }
}
Devo ammettere che però non sono molto soddisfatto del risultato perché nella funzione "vittoria" ci sono troppe 'if' e troppe righe di codice nel complesso (ovviamente dovrei ottimizzare il programma passando i parametri delle funzioni con i puntatori). La funzione 'srand()' mi blocca il pc e non so per quale motivo. Vorrei sapere cosa ne pensate e se mi potete dare qualche dritta per ottimizzarlo. Grazie a tutti!

Ultima modifica di Phantom1989 : 20-11-2012 alle 15:05. Motivo: Rettifica corretto funzionamento programma
Phantom1989 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
NetApp Novus, 100 TB al secondo per sfru...
Spotify giù da ore: se non trovi una can...
Sky con Netflix incluso da 16,99€/mese: ...
Anthropic verso la Borsa: 42 miliardi di...
Data repatriation: cos'è e come S...
ProsperoEden: l'emulatore funzionante ch...
La sonda spaziale ESA JUICE ha effettuat...
iPhone, crash a valanga su migliaia di a...
Se mangi queste patatine puoi vincere un...
Opera browser ha una eSIM integrata da 3...
WINDTRE BUSINESS e la Protezione Civile ...
Intel prepara i chip che si illuminano? ...
HUAWEI WATCH D3 arriva in Italia: l'orol...
PS5 Pro, in Giappone si compra per estra...
Recensione Nothing Headphone (1) Pro, de...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v