Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-02-2012, 16: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 19:58. Motivo: risolti due bug
Filly95 è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 10:46   #2
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 21959
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, 11: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, 11: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 12:18.
Filly95 è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 12: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, 13: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 13:38.
Filly95 è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2012, 15: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, 16: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, 17: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 21-02-2012, 00: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, 15: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, 11: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 16:05. Motivo: Rettifica corretto funzionamento programma
Phantom1989 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Un hotel italiano fa incetta di recensio...
OnePlus Nord 5 in super offerta su Amazo...
L'innovazione in tournée: arrivan...
Addio al caos dei gruppi Whatsapp: arriv...
Il nuovo chip a 2 nm di Samsung si mostr...
IBM Enterprise Advantage: consulenza per...
Samsung celebra Milano Cortina 2026 con ...
Aritmie cardiache, cresce il numero di c...
Rinviato il secondo lancio del razzo spa...
iPhone 18 Pro: Dynamic Island più...
Pazzesco successo di Xiaomi: la nuova SU...
Il terzo lancio del razzo spaziale Blue ...
Tesla toglie la componente umana dai Rob...
Google Pixel 10 Pro in super offerta su ...
Masters of the Universe: He-Man torna al...
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:22.


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