Ciao a tutti, avendo tempo da perdere ho fatto un programmino in C che simula il gioco di forza 4.
Il programma è funzionante e se volete darci un occhiata giusto per curiosità ve lo allego:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <math.h>
#include <time.h>
#include <conio.h>
#include <unistd.h>
#define TIME 10000 /* 0.1 secondi */
#define N 7
#define UT 1
#define PC 2
typedef struct{
    int flag;
    int row[N];
    int tab[N][N];
}Wrap;
int prof;
Wrap pack;
void Init(){
    int i,j;
    pack.flag=-1;
    for(i=0;i<N;i++)
        pack.row[i]=N-1;
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            pack.tab[i][j]=0;
}
void Remove(int c){
    pack.tab[++pack.row[c]][c]=0;
}
int Insert(int c,int val){
    if(c<0||c>=N||pack.row[c]<0)
        return 1;
    pack.tab[pack.row[c]--][c]=val;
    return 0;
}
void StampaTab(){
    int q=25,i,j;
    char legenda[3]={' ','O','X'};
    printf("\n\n                                  Forza 4\n"
           "                         %c   %c   %c   %c   %c   %c   %c\n"
           "                       +---+---+---+---+---+---+---+\n",q,q,q,q,q,q,q);
    for(i=0;i<N;i++){
        printf("                       ");
        for(j=0;j<N;j++)
           printf("| %c ",legenda[pack.tab[i][j]]);
        printf("|\n                       +---+---+---+---+---+---+---+\n");
    }
    printf("                         1   2   3   4   5   6   7\n");
}
void StampaTabGiocata(int c,int flag){
    int i=0,T=8,j;
    Remove(c);
    while(i<N-1&&pack.tab[i+1][c]==0){
        pack.tab[i][c]=flag;
        system("cls");
        StampaTab();
        for(j=0;j<T;j++)
            usleep(TIME);
        pack.tab[i++][c]=0;
        system("cls");
        StampaTab();
    }
    Insert(c,flag);
}
void Check(int c){
    int i,j,r=pack.row[c]+1,flag;
    for(i=0,flag=0;i<N;i++){
        if(pack.tab[r][i]==pack.tab[r][c])
            flag++;
        else
            flag=0;
        if(flag==4){
            pack.flag=pack.tab[r][c];
            return;
        }
    }
    for(i=0,flag=0;i<N;i++){
        if(pack.tab[i][c]==pack.tab[r][c])
            flag++;
        else
            flag=0;
        if(flag==4){
            pack.flag=pack.tab[r][c];
            return;
        }
    }
    for(i=r-3,j=c-3,flag=0;i<N&&j<N;i++,j++)
        if(i>=0&&j>=0){
            if(pack.tab[i][j]==pack.tab[r][c])
                flag++;
            else
                flag=0;
            if(flag==4){
                pack.flag=pack.tab[r][c];
                return;
            }
        }
    for(i=r-3,j=c+3,flag=0;i<N&&j>=0;i++,j--)
        if(i>=0&&j<N){
            if(pack.tab[i][j]==pack.tab[r][c])
                flag++;
            else
                flag=0;
            if(flag==4){
                pack.flag=pack.tab[r][c];
                return;
            }
        }
    for(i=0;i<N;i++)
        if(pack.row[i]!=-1)
            return;
    pack.flag=0;
}
void Esplora(int lv,int value,long long int *contUt,long long int *contPc){
    int flag,i;
    if(lv>=prof)
        return;
    if(value==UT)
        flag=PC;
    else
        flag=UT;
    for(i=0;i<N;i++){
        if(!Insert(i,value)){
            Check(i);
            if(pack.flag==UT){
                (*contUt)+=pow(7,prof-lv);
                pack.flag=-1;
                Remove(i);
            }
            else if(pack.flag==-1){
                Esplora(lv+1,flag,contUt,contPc);
                Remove(i);
            }
            else{
                (*contPc)+=pow(7,prof-lv);
                pack.flag=-1;
                Remove(i);
                return;
            }
        }
    }
}
int Intel(int flag){
    int i,c=0,aflag;
    long long int contUt,contPc,meglioUt,meglioPc;
    if(flag==UT){
        aflag=PC;
        meglioPc=LONG_LONG_MAX;
        meglioUt=LONG_LONG_MIN;
    }
    else{
        aflag=UT;
        meglioUt=LONG_LONG_MAX;
        meglioPc=LONG_LONG_MIN;
    }
    for(i=0;i<N;i++)
        if(!Insert(i,flag)){
            contUt=0;
            contPc=0;
            Check(i);
            if(pack.flag==flag){
                Remove(i);
                pack.flag=-1;
                return i;
            }
            pack.flag=-1;
            Esplora(0,aflag,&contUt,&contPc);
            if((flag==PC&&(contUt<meglioUt||(contUt==meglioUt&&contPc>meglioPc)))||(flag==UT&&(contPc<meglioPc||(contPc==meglioPc&&contUt>meglioUt)))){
                meglioUt=contUt;
                meglioPc=contPc;
                c=i;
            }
            Remove(i);
        }
    return c;
}
int StampaSchermataPrincipale(){
    char a[10];
    int i;
    do{
        system("cls");
        printf("                                                                       By Nanni \n\n"
               "                               Benvenuto!! A Forza 4\n"
               "                       +-----------------------------------+\n"
               "                       |                                   |\n"
               "                       |                                   |\n"
               "                       |    1. Nuova Partita               |\n"
               "                       |                                   |\n"
               "                       |                                   |\n"
               "                       |    2. Modalita' gioco             |\n"
               "                       |                                   |\n"
               "                       |                                   |\n"
               "                       |    3. Istruzioni                  |\n"
               "                       |                                   |\n"
               "                       |                                   |\n"
               "                       |    4. Esci                        |\n"
               "                       |                                   |\n"
               "                       |                                   |\n"
               "                       +-----------------------------------+\n\n"
               "                              Elemento scelto: ");
        scanf("%s",a);
        i=atoi(a);
    }while(i<1||i>4);
    return i;
}
void StampaIstruzioni(){
    system("cls");
    printf("\n                                Istruzioni!\n"
           "              +----------------------------------------------------+\n"
           "              |  1.Lo scopo del gioco e' riuscire ad allineare     |\n"
           "              |                                                    |\n"
           "              |  quattro pedine dello stessa forma O per l'utente  |\n"
           "              |                                                    |\n"
           "              |  e X per il calcolatore, nella scacchiera di gioco |\n"
           "              |                                                    |\n"
           "              |  sia in verticale, orizzontale o obliquo.          |\n"
           "              |                                                    |\n"
           "              |  2.Vince la partita chi allinea per primo in       |\n"
           "              |                                                    |\n"
           "              |  orizzontale, verticale o obliquo quattro pedine   |\n"
           "              |                                                    |\n"
           "              |  della stessa forma.                               |\n"
           "              |                                                    |\n"
           "              |  3.Nel caso nessuno dei due partecipanti al gioco  |\n"
           "              |                                                    |\n"
           "              |  riuscisse a fare (quattro) la partita finisce     |\n"
           "              |                                                    |\n"
           "              |  in parita' e se ne comincia un'altra.             |\n"
           "              +----------------------------------------------------+\n\n"
           "Per tornare al menu' principale premere un tasto qualsiasi !! ");
    getch();
}
int ImpostaModalita(){
    int i;
    char a[10];
    do{
        system("cls");
        printf("\n\n\n                              Impostazioni modalita' \n"
               "                       +-----------------------------------+\n"
               "                       |                                   |\n"
               "                       |    1. Utente VS Utente            |\n"
               "                       |                                   |\n"
               "                       |    2. Utente VS Pc                |\n"
               "                       |                                   |\n"
               "                       |    3. Pc VS Pc                    |\n"
               "                       |                                   |\n"
               "                       +-----------------------------------+\n\n"
               "                              Elemento scelto: ");
        scanf("%s",a);
        i=atoi(a);
    }while(i<1||i>3);
    return i;
}
int ImpostaDifficolta(){
    char a[10];
    int i;
    do{
        system("cls");
        printf("\n\n\n                              Impostazione difficolta'\n"
               "                       +-----------------------------------+\n"
               "                       |                                   |\n"
               "                       |    1. Facile                      |\n"
               "                       |                                   |\n"
               "                       |    2. Medio                       |\n"
               "                       |                                   |\n"
               "                       |    3. Difficile                   |\n"
               "                       |                                   |\n"
               "                       +-----------------------------------+\n\n"
               "                              Elemento scelto: ");
        scanf("%s",a);
        i=atoi(a);
    }while(i<1||i>3);
    return i;
}
void ModeUtUt(){
    char gioc[2][80],a[10];
    int flag,c,aflag;
    system("cls");
    printf("Nome del primo giocatore: ");
    scanf("%s",gioc[0]);
    printf("Nome del secondo giocatore: ");
    scanf("%s",gioc[1]);
    flag=rand()%2;
    if(flag)
        aflag=0;
    else
        aflag=1;
    while(1){
        system("cls");
        StampaTab();
        do{
            printf("%s inserisci colonna: ",gioc[flag]);
            scanf("%s",a);
            c=atoi(a)-1;
        }while(Insert(c,UT));
        StampaTabGiocata(c,UT);
        Check(c);
        if(pack.flag!=-1)
            break;
        system("cls");
        StampaTab();
        do{
            printf("%s inserisci colonna: ",gioc[aflag]);
            scanf("%s",a);
            c=atoi(a)-1;
        }while(Insert(c,PC));
        StampaTabGiocata(c,PC);
        Check(c);
        if(pack.flag!=-1)
            break;
    }
    system("cls");
    StampaTab();
    switch(pack.flag){
        case 1:
            printf("Il vincitore e': %s.\n\n",gioc[flag]);
            break;
        case 2:
            printf("Il vincitore e': %s.\n\n",gioc[aflag]);
            break;
        default:
            printf("Pareggio.\n\n");
            break;
    }
    printf("Premere un tasto qualsiasi per tornare al menu' principale !!");
    getch();
}
void ModeUtPc(int diff){
    char gioc[80],a[10];
    int flag,c;
    prof=diff*2;
    system("cls");
    printf("Nome del giocatore: ");
    scanf("%s",gioc);
    flag=rand()%2+1;
    while(1){
        system("cls");
        StampaTab();
        if(flag==UT){
            do{
                printf("%s inserisci colonna: ",gioc);
                scanf("%s",a);
                c=atoi(a)-1;
            }while(Insert(c,UT));
            StampaTabGiocata(c,UT);
        }
        else {
            if(Insert(c=Intel(PC),PC)){
                printf("Errore fatale.\n");
                system("PAUSE");
                return;
            }
            StampaTabGiocata(c,PC);
        }
        Check(c);
        if(pack.flag!=-1)
            break;
        system("cls");
        StampaTab();
        if(flag==PC){
            do{
                printf("%s inserisci colonna: ",gioc);
                scanf("%s",a);
                c=atoi(a)-1;
            }while(Insert(c,UT));
            StampaTabGiocata(c,UT);
        }
        else {
            if(Insert(c=Intel(PC),PC)){
                printf("Errore fatale.\n");
                system("PAUSE");
                return;
            }
            StampaTabGiocata(c,PC);
        }
        Check(c);
        if(pack.flag!=-1)
            break;
    }
    system("cls");
    StampaTab();
    switch(pack.flag){
        case UT:
            printf("Il vincitore e': %s.\n\n",gioc);
            break;
        case PC:
            printf("Il vincitore e': Computer.\n\n");
            break;
        default:
            printf("Pareggio.\n\n");
            break;
    }
    printf("Premere un tasto qualsiasi per tornare al menu' principale !!");
    getch();
}
void ModePcPc(int diff1,int diff2){
    int c;
    diff1=diff1*2;
    diff2=diff2*2;
    while(1){
        system("cls");
        StampaTab();
        prof=diff1;
        if(Insert(c=Intel(UT),UT)){
            printf("Errore fatale.\n");
            system("PAUSE");
            return;
        }
        StampaTabGiocata(c,UT);
        Check(c);
        if(pack.flag!=-1)
            break;
        system("cls");
        StampaTab();
        prof=diff2;
        if(Insert(c=Intel(PC),PC)){
            printf("Errore fatale.\n");
            system("PAUSE");
            return;
        }
        StampaTabGiocata(c,PC);
        Check(c);
        if(pack.flag!=-1)
            break;
    }
    system("cls");
    StampaTab();
    if(diff1==diff2){
        switch(pack.flag){
            case 1:
                printf("Il vincitore e' il primo giocatore.\n\n");
                break;
            case 2:
                printf("Il vincitore e'il secondo giocatore.\n\n");
                break;
            default:
                printf("Pareggio.\n\n");
                break;
        }
    }
    else
        switch(pack.flag){
            case 1:
                printf("Il vincitore e' difficolta' %d.\n\n",diff1/2);
                break;
            case 2:
                printf("Il vincitore e': difficolta' %d.\n\n",diff2/2);
                break;
            default:
                printf("Pareggio.\n\n");
                break;
        }
    printf("Premere un tasto qualsiasi per tornare al menu' principale !!");
    getch();
}
int main(){
    int flag,mode=0;
    srand(time(NULL));
    while(1){
        flag=StampaSchermataPrincipale();
        switch(flag){
            case 1:
                if(!mode)
                    mode=ImpostaModalita();
                Init();
                switch(mode){
                    case 1:
                        ModeUtUt();
                        break;
                    case 2:
                        ModeUtPc(ImpostaDifficolta());
                        break;
                    case 3:
                        ModePcPc(ImpostaDifficolta(),ImpostaDifficolta());
                        break;
                }
                mode=0;
                break;
            case 2:
                mode=ImpostaModalita();
                break;
            case 3:
                StampaIstruzioni();
                break;
            case 4:
                return 0;
        }
    }
    return 0;
}
La mia domanda è:  per poterlo rendere più comprensibile e carino sarebbe possibile cambiale il colore dei caratteri ('O','X') ? "che sarebbero le pedine del gioco".
Utilizzo codeblocks e sistema operativo windows.... non so magari con qualche libreria windows ?? non ho necessità di portabilità. 
Grazie