PDA

Visualizza la versione completa : [C] disegnare scacchi


fdoubledd
04-10-2012, 21:49
esiste qualche libreria in C per visualizzare i pezzi degli scacchi? grazie ciao

MItaly
04-10-2012, 23:13
In un'applicazione console? In una GUI? Su che sistema operativo? :stordita:

fdoubledd
04-10-2012, 23:13
si scusa. su windows su console

MItaly
04-10-2012, 23:27
http://en.wikipedia.org/wiki/Chess_symbols_in_Unicode
li puoi scrivere usando le versioni unicode delle funzioni di IO (wprintf, fputws, putwchar, ...)

fdoubledd
04-10-2012, 23:32
mi potresti fare un iccolo esempio perche non so come usare queste funzioni e quali lbrerie includere. grazie

fdoubledd
04-10-2012, 23:33
ma con il C si puo usare unicode?

MItaly
05-10-2012, 00:13
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:


#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)

fdoubledd
05-10-2012, 12:53
grazie ho provato ad eseguirlo ma non mi stampa i pezzi .si vede solo che stampa una matrice perche lascia un po di spazi.

MItaly
05-10-2012, 14:32
Al momento non ho una macchina Windows sottomano, puoi farmi uno screenshot?

fdoubledd
05-10-2012, 16:59
scusa per la pessima qualita

Loading