Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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
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 non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
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: 22256
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


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...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Il CEO di MongoDB lascia tutto e passa a...
Caro energia, l'UE raccomanda di abbassa...
AMD acquisisce World Labs: 8,2 miliardi ...
Google perde la testa: AI Overview conso...
Anthropic presenta Claude Sonnet 5.5, e ...
ESA e ClearSpace svilupperanno un satell...
Oracle, stock option da quasi un miliard...
Starship: si è conclusa anticipat...
Un computer quantistico ha funzionato ne...
Sovranità sui dati: AWS è ...
Il nuovo nome della distro Linux mobile ...
Due ventole da 220 mm e non solo: Cooler...
Truffa telefonica via Google Ads: il bro...
Google pensiona le Gems di Gemini: cosa ...
Flight 14: incertezza per un problema a ...
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: 06:49.


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