Originariamente inviato da fdoubledd
ma con il C si puo usare unicode?
Sì, anche se il supporto a seconda della piattaforma è più o meno decente (e soprattutto, su Windows si tende ad usare wchar_t/UTF-16, su Linux char/UTF-8).
Esempio:
codice:
#include <wchar.h>
#include <stdio.h>
#include <locale.h>
/*
* Definisce un'enumerazione con i tipi di pezzi
* Nota: l'ordine è importante, è lo stesso con cui compaiono
* i corrispondenti caratteri Unicode
*/
enum ChessPiecesT
{
King,
Queen,
Rock,
Bishop,
Knight,
Pawn,
};
enum PlayerT
{
White=0x2654, /* codice del carattere re bianco */
Black=0x265a, /* codice del carattere re nero */
};
/* Fornisce il carattere per il pezzo desiderato */
inline wchar_t PieceChar(enum PlayerT Player, enum ChessPiecesT Piece)
{
/* costruisce il codice del carattere corretto sommando al codice del primo pezzo
* del giocatore l'offset del carattere desiderato */
return (wchar_t)(Player + Piece);
}
/* Prima riga della scacchiera (per il nero) */
enum ChessPiecesT TopRow[]={Rock, Knight, Bishop, Queen, King, Bishop, Knight, Rock};
/* Stampa la prima riga della scacchiera */
void PrintTopRow(enum PlayerT Player)
{
int i;
for(i=0; i<8; i++)
putwchar(PieceChar(Player, TopRow[Player==Black?i:(7-i)])); /* se ci è stato chiesto per il bianco inverte l'ordine dei pezzi */
putwchar(L'\n');
}
/* stampa gli otto pedoni */
void PrintPawns(enum PlayerT Player)
{
wchar_t pawnChar=PieceChar(Player, Pawn);
int i;
for(i=0; i<8; i++)
putwchar(pawnChar);
putwchar(L'\n');
}
int main()
{
setlocale(LC_CTYPE, "");
PrintTopRow(Black);
PrintPawns(Black);
fputws(L"\n\n\n\n", stdout);
PrintPawns(White);
PrintTopRow(White);
return 0;
}
(su Linux va, dovrebbe andare anche su Windows)