Rappresentare un mazzo di carte in C (non C ++)

2

Finora le mie migliori idee sono state come fallows

A) Rappresenta una "carta" in una struttura e ha un "mazzo" in un'altra un mazzo è costituito da una serie di 52 carte e una carta da 2 caratteri una per e una da classifica per seme.

B) La seconda sembra essere più facile da gestire ma meno ovvia nel codice. Creazione di una matrice di interi ciascuno con un valore diverso compreso tra 1 e 52. Quindi crating una funzione di conversione che tradurrebbe il valore in una struttura di carta che avrebbe una stringa per il seme e una stringa per il rango. Il valore di zero potrebbe indicare una carta che non è stata "distribuita".

Sto solo cercando di trovare un modo migliore per farlo.

    
posta Joe 22.03.2014 - 12:21
fonte

2 risposte

3

Dipende dalle carte (incluso il jolly o meno), ma sto usando la situazione B principalmente. Comunque io uso i primi due bit del valore intero per definire il colore e il resto per definire il valore della carta rendendoli insieme alla carta. Quindi posso ottenere il colore o il valore dalla carta molto più velocemente con operazioni bitwise (o mod, divide e moltiplicazione). Archiviamo semplicemente due valori interi in un numero intero. Il valore della carta che memorizziamo a partire dal terzo bit, quindi possiamo semplicemente moltiplicare quel valore per quattro o usare un bithift di 2. Quindi aggiungiamo il colore della carta (0, 1, 2 e 3) che non è mai più di 2 bit in i primi 2 bit della carta.

Supponendo che la seconda carta sia una seconda e il secondo colore è una mazza. Quindi un 2 di fiori verrà memorizzato come (binario) 100 + 1 = 101, che è 5 in decimali. Se abbiamo la carta 5 possiamo usare mod e dividere perché card / 4 ci dirà il valore della carta e card % 4 ci dirà il colore della carta.

    
risposta data 22.03.2014 - 12:44
fonte
6

Quindi vuoi rappresentare una carta come int , con la necessità di convertire in seme / rango ogni volta che ne hai bisogno, o la rappresenti come un

   struct Card
   {
       char Suit;
       char Rank;
   };

con no devono essere convertiti in seme / rango ogni volta che ti servono quei valori. Le prestazioni e le risorse di memoria non differiscono molto tra entrambi gli approcci, immagino che siano completamente trascurabili. Quindi tutto si riduce a "quale alternativa è più leggibile" - e mi sembra molto ovvio che usare un struct Card per rappresentare le carte sarà molto più leggibile rispetto all'utilizzo di un int e non fare alcuna codifica / decodifica non necessaria.

EDIT: l'unica ragione per cui riesco a pensare al motivo per cui si dovrebbe usare la rappresentazione intera è quando hai bisogno del numero cardnumber (1 ... 52) principalmente come indice dell'array, e ti aspetti l'utilizzo come una carta con Suit e Rank come raramente sono necessari nel tuo programma.

    
risposta data 22.03.2014 - 19:15
fonte

Leggi altre domande sui tag