Risiko su forum (making of)
4 partecipanti
La Darsena :: La Locanda :: Caffè
Pagina 8 di 8
Pagina 8 di 8 • 1, 2, 3, 4, 5, 6, 7, 8
Re: Risiko su forum (making of)
Si pesca (cioè si lancia) alla fine del turno e solo se nel turno si è comquistato almeno un territorio.
Poi ci sono altre fonti di rinforzi: si ha diritto a un numero di armate pari al numero di territori posseduti
diviso per 3, e a un tot di armate se si possiede un intero continente.
Domani prova scritta.
Poi ci sono altre fonti di rinforzi: si ha diritto a un numero di armate pari al numero di territori posseduti
diviso per 3, e a un tot di armate se si possiede un intero continente.
Domani prova scritta.
Re: Risiko su forum (making of)
giuro che non sto sfuggendo ma non ce la faccio oggi ma ho le idee molto più chiare, appena riesco a fermarmi un pò, voglio provare...
digi- Numero di messaggi : 1586
Reputazione : 3
Punti : 1588
Data d'iscrizione : 16.02.09
Gli obbiettivi
Gli obbiettivi...
Allora, leggendo i vari regolamenti, già nel gioco originale ci sono diversi modi per giocare.
Oltre agli obbiettivi classici (questi), ci sono gli obbiettivi da torneo che sono più equilibrati:
tutti comportano la conquista di 2 continenti più un certo numero di territori, e sono studiati
in modo che il numero totale dei confini dei territori da conquistare sia lo stesso.
Poi ci sono i punti associati ad ogni territorio (è il numerino a fianco dello stato nel tabellone),
che permettono di fare classifiche a punti, stabilendo un limite di tempo o di turni per la partita.
Se non ho capito male, funziona che se nessuno conquista il suo obbiettivo entro 'sto limite, la
partita termina e ogni giocatore guadagna i punti dei suoi territori che fan parte del suo obbiettivo.
Secondo me la cosa migliore per giocare qui sarebbe: obbiettivi torneo + limite di turni (il limite
di tempo va bene se si gioca dal vivo dove si possono limitare le perdite di tempo...).
C'è però il problema di come assegnarli... per sorteggiarli basta numerarli e usare la tag "rand".
Esempio: gli obbiettivi torneo sono numerati da 1 a 20, il mio obbiettivo è ...
... però ci sono due ordini di problemi:
1) L'obbiettivo non è segreto.
2) Due o più giocatori potrebbero pescare lo stesso obbiettivo.
Quindi si tratterebbe di decidere se considerarli dei problemi: se si decide che non lo sono, si può
giocare con gli obbiettivi palesi ed eventualmente se uno si becca un obbiettivo già uscito, rifà...
se invece vogliamo che gli obbiettivi siano segreti, s'ha da studiare il modo...
Allora, leggendo i vari regolamenti, già nel gioco originale ci sono diversi modi per giocare.
Oltre agli obbiettivi classici (questi), ci sono gli obbiettivi da torneo che sono più equilibrati:
tutti comportano la conquista di 2 continenti più un certo numero di territori, e sono studiati
in modo che il numero totale dei confini dei territori da conquistare sia lo stesso.
Poi ci sono i punti associati ad ogni territorio (è il numerino a fianco dello stato nel tabellone),
che permettono di fare classifiche a punti, stabilendo un limite di tempo o di turni per la partita.
Se non ho capito male, funziona che se nessuno conquista il suo obbiettivo entro 'sto limite, la
partita termina e ogni giocatore guadagna i punti dei suoi territori che fan parte del suo obbiettivo.
Secondo me la cosa migliore per giocare qui sarebbe: obbiettivi torneo + limite di turni (il limite
di tempo va bene se si gioca dal vivo dove si possono limitare le perdite di tempo...).
C'è però il problema di come assegnarli... per sorteggiarli basta numerarli e usare la tag "rand".
Esempio: gli obbiettivi torneo sono numerati da 1 a 20, il mio obbiettivo è ...
- Numero casuale (1,20) : 8
... però ci sono due ordini di problemi:
1) L'obbiettivo non è segreto.
2) Due o più giocatori potrebbero pescare lo stesso obbiettivo.
Quindi si tratterebbe di decidere se considerarli dei problemi: se si decide che non lo sono, si può
giocare con gli obbiettivi palesi ed eventualmente se uno si becca un obbiettivo già uscito, rifà...
se invece vogliamo che gli obbiettivi siano segreti, s'ha da studiare il modo...
Re: Risiko su forum (making of)
obiettivo palese...
Ransie-
Numero di messaggi : 8845
Età : 42
Reputazione : 10
Punti : 8835
Data d'iscrizione : 14.02.09
Re: Risiko su forum (making of)
ma praticamente una volta conquistati gli obiettivi si vince? E' quello lo scopo del gioco? Potrebbe essere un problema tenere l'obiettivo palese, perchè insomam così ci si può impedire a a vicenda di arrivare alla meta...e già il risiko normale è lungo...però se si danno i limiti può essere fattibile.. sempre che c'ho capito qualcosa..
digi- Numero di messaggi : 1586
Reputazione : 3
Punti : 1588
Data d'iscrizione : 16.02.09
Re: Risiko su forum (making of)
Per ovviare a quello si può stabilire un limite di turni dopo il quale la partita è finita e si va ai punti,
come spiegavo un paio di post prima...
Comunque anche con gli obbiettivi segreti, dopo un po' si intuiscono, se non mi ricordo male...
come spiegavo un paio di post prima...
Comunque anche con gli obbiettivi segreti, dopo un po' si intuiscono, se non mi ricordo male...
Re: Risiko su forum (making of)
Tu almeno ricordi male, io non ricordo proprio...
Si avevo letto il posto sul limite dei turni, per questo lo dicevo...secondo me è la soluzione migliore...
Si avevo letto il posto sul limite dei turni, per questo lo dicevo...secondo me è la soluzione migliore...
digi- Numero di messaggi : 1586
Reputazione : 3
Punti : 1588
Data d'iscrizione : 16.02.09
Obbiettivi
Ok... allora si può fare così (riassumo):
- Si usano gli obbiettivi torneo (che si possono trovare ad esempio qui).
- Si gioca ad obbiettivi palesi (non segreti).
- Gli obbiettivi sono numerati da 1 a 20 e si sorteggiano con la tag rand.
(Codice: [rand]1,20[/rand*], togliendo l'asterisco).
- Se un giocatore pesca un obbiettivo già assegnato, rifà finché non ne pesca uno non assegnato
(meglio evitare di avere 2 giocatori con lo stesso obbiettivo...).
- La partita dura al massimo tot turni (chessò... tot=50? Sono 1 o 2 mesi di partita...).
- Se un giocatore raggiunge il suo obbiettivo entro il limite suddetto, vince e la partita termina.
- In caso contrario, si va ai punti: ad ogni giocatore vengono assegnati i punti dei territori da lui occupati
e che fanno parte del suo obbiettivo. Chi fa più punti, vince.
- In caso di parità... boh?... si contano i punti degli altri territori occupati, oppure la si gioca ai dadi...
oppure pari e patta che tanto mica c'è in palio qualcosa!
OBBIETTIVI TORNEO
1 AFRICA, EUROPA, Afghanistan, Urali, Siberia, Jacuzia, Mongolia, Brasile, Perù, Venezuela.
2 ASIA, EUROPA, Indonesia.
3 AFRICA, ASIA, Ucraina, Europa Meridionale
4 AFRICA, AMERICA DEL SUD, OCEANIA, Medio Oriente, India, Siam, Cina, Mongolia, Cita, Giappone, Europa Occidentale, Europa Meridionale.
5 AFRICA, AMERICA DEL NORD, Islanda, Scandinavia, Ucraina, Europa Meridionale, Europa Settentrionale, Gran Bretagna.
6 AMERICA DEL NORD, AMERICA DEL SUD, Africa del Nord, Congo, Africa del Sud, Europa Occidentale, Gran Bretagna, Islanda, Kamchatka, Giappone, Mongolia, Cita
7 AMERICA DEL NORD, EUROPA, Urali, Siberia, Jacuzia, Kamchatka, Giappone.
8 AFRICA, AMERICA DEL SUD, EUROPA, Medio Oriente, Afghanistan, Urali, Siberia.
9 AMERICA DEL SUD, EUROPA, OCEANIA, Afghanistan, Medio Oriente, India, Siam, Africa del Nord, Egitto, Africa Orientale.
10 AMERICA DEL NORD, AMERICA DEL SUD, Africa del Nord, Congo, Africa Orientale, Egitto, Medio Oriente, India, Siam, Indonesia, Nuova Guinea, Australia Occidentale.
11 AFRICA, EUROPA, OCEANIA, Urali, Afghanistan, Medio Oriente, India, Siam.
12 ASIA, OCEANIA, Ucraina, Europa Meridionale, Europa Settentrionale, Scandinavia, Islanda.
13 AMERICA DEL NORD, OCEANIA, Siam, Cina, India, Medio Oriente, Afghanistan, Urali, Ucraina, Scandinavia, Islanda.
14 AMERICA DEL NORD, ASIA.
15 AMERICA DEL NORD, EUROPA, Africa del Nord, Congo, Africa del Sud, Kamchatka, Giappone.
16 AFRICA, EUROPA, Medio Oriente, Afghanistan, Urali, Groenlandia, Quebec, Ontario, Stati Uniti Orientali.
17 AMERICA DEL NORD, AMERICA DEL SUD, EUROPA, Kamchatka, Giappone.
18 AFRICA, AMERICA DEL NORD, AMERICA DEL SUD, Europa Occidentale, Europa Meridionale, Ucraina.
19 AFRICA, AMERICA DEL SUD, ASIA
20 ASIA, OCEANIA, Egitto, Africa Orientale, Madagascar, Africa del Sud, Congo, Alaska, Alberta.
- Si usano gli obbiettivi torneo (che si possono trovare ad esempio qui).
- Si gioca ad obbiettivi palesi (non segreti).
- Gli obbiettivi sono numerati da 1 a 20 e si sorteggiano con la tag rand.
(Codice: [rand]1,20[/rand*], togliendo l'asterisco).
- Se un giocatore pesca un obbiettivo già assegnato, rifà finché non ne pesca uno non assegnato
(meglio evitare di avere 2 giocatori con lo stesso obbiettivo...).
- La partita dura al massimo tot turni (chessò... tot=50? Sono 1 o 2 mesi di partita...).
- Se un giocatore raggiunge il suo obbiettivo entro il limite suddetto, vince e la partita termina.
- In caso contrario, si va ai punti: ad ogni giocatore vengono assegnati i punti dei territori da lui occupati
e che fanno parte del suo obbiettivo. Chi fa più punti, vince.
- In caso di parità... boh?... si contano i punti degli altri territori occupati, oppure la si gioca ai dadi...
oppure pari e patta che tanto mica c'è in palio qualcosa!
OBBIETTIVI TORNEO
1 AFRICA, EUROPA, Afghanistan, Urali, Siberia, Jacuzia, Mongolia, Brasile, Perù, Venezuela.
2 ASIA, EUROPA, Indonesia.
3 AFRICA, ASIA, Ucraina, Europa Meridionale
4 AFRICA, AMERICA DEL SUD, OCEANIA, Medio Oriente, India, Siam, Cina, Mongolia, Cita, Giappone, Europa Occidentale, Europa Meridionale.
5 AFRICA, AMERICA DEL NORD, Islanda, Scandinavia, Ucraina, Europa Meridionale, Europa Settentrionale, Gran Bretagna.
6 AMERICA DEL NORD, AMERICA DEL SUD, Africa del Nord, Congo, Africa del Sud, Europa Occidentale, Gran Bretagna, Islanda, Kamchatka, Giappone, Mongolia, Cita
7 AMERICA DEL NORD, EUROPA, Urali, Siberia, Jacuzia, Kamchatka, Giappone.
8 AFRICA, AMERICA DEL SUD, EUROPA, Medio Oriente, Afghanistan, Urali, Siberia.
9 AMERICA DEL SUD, EUROPA, OCEANIA, Afghanistan, Medio Oriente, India, Siam, Africa del Nord, Egitto, Africa Orientale.
10 AMERICA DEL NORD, AMERICA DEL SUD, Africa del Nord, Congo, Africa Orientale, Egitto, Medio Oriente, India, Siam, Indonesia, Nuova Guinea, Australia Occidentale.
11 AFRICA, EUROPA, OCEANIA, Urali, Afghanistan, Medio Oriente, India, Siam.
12 ASIA, OCEANIA, Ucraina, Europa Meridionale, Europa Settentrionale, Scandinavia, Islanda.
13 AMERICA DEL NORD, OCEANIA, Siam, Cina, India, Medio Oriente, Afghanistan, Urali, Ucraina, Scandinavia, Islanda.
14 AMERICA DEL NORD, ASIA.
15 AMERICA DEL NORD, EUROPA, Africa del Nord, Congo, Africa del Sud, Kamchatka, Giappone.
16 AFRICA, EUROPA, Medio Oriente, Afghanistan, Urali, Groenlandia, Quebec, Ontario, Stati Uniti Orientali.
17 AMERICA DEL NORD, AMERICA DEL SUD, EUROPA, Kamchatka, Giappone.
18 AFRICA, AMERICA DEL NORD, AMERICA DEL SUD, Europa Occidentale, Europa Meridionale, Ucraina.
19 AFRICA, AMERICA DEL SUD, ASIA
20 ASIA, OCEANIA, Egitto, Africa Orientale, Madagascar, Africa del Sud, Congo, Alaska, Alberta.
Ultima modifica di Ste il Lun Mar 08, 2010 10:56 am - modificato 1 volta. (Motivazione : Aggiunta la lista degli obbiettivi)
Re: Risiko su forum (making of)
mi sembra ci sia tutto...domani si prova?
digi- Numero di messaggi : 1586
Reputazione : 3
Punti : 1588
Data d'iscrizione : 16.02.09
Re: Risiko su forum (making of)
Per me si può fare... Non vuoi prima provare a fare un turno nella partita di test?
Re: Risiko su forum (making of)
Ah, mi è venuta un'idea or ora... invece che usare la funzione 'rand' per sorteggiare gli obiettivi posso fare
una modifica al programmino che prepara lo stato iniziale, aggiungendoci anche quella funzione.
una modifica al programmino che prepara lo stato iniziale, aggiungendoci anche quella funzione.
Re: Risiko su forum (making of)
Detto.. fatto. Ora il programmino prepara come "stato" iniziale una cosa del genere:
Blu: TNO1 ALB1 QUE1 AMC1 / EUS1 / AFN1 AFS1 / JAC1 MON1 / AUE1 / - / 20 Obbiettivo=5
Verde: USE1 / BRA1 / GBR1 EUM1 UKR1 / AFO1 / SIB1 JPN1 IND1 / NGU1 / - / 20 Obbiettivo=19
Rosso: ASK1 GRO1 ONT1 USW1 / PER1 ARG1 / SCA1 / CON1 / URA1 MDO1 / IDS1 / - / 19 Obbiettivo=13
Giallo: VEN1 / ISL1 EUO1 / EGI1 MAD1 / CIT1 KAM1 AFG1 CIN1 SIA1 / AUW1 / - / 19 Obbiettivo=7
Quando si inizia a giocare si può cancellare la parte "Obbiettivo=...".
Se poi si vuole usare altri metodi per assegnare gli obbiettivi (es: chiedere a qualcuno che non gioca di
sorteggiarli e comunicarli ai giocatori in privato), basta ignorare quelli assegnati dal programmino.
Il codice modificato:
Blu: TNO1 ALB1 QUE1 AMC1 / EUS1 / AFN1 AFS1 / JAC1 MON1 / AUE1 / - / 20 Obbiettivo=5
Verde: USE1 / BRA1 / GBR1 EUM1 UKR1 / AFO1 / SIB1 JPN1 IND1 / NGU1 / - / 20 Obbiettivo=19
Rosso: ASK1 GRO1 ONT1 USW1 / PER1 ARG1 / SCA1 / CON1 / URA1 MDO1 / IDS1 / - / 19 Obbiettivo=13
Giallo: VEN1 / ISL1 EUO1 / EGI1 MAD1 / CIT1 KAM1 AFG1 CIN1 SIA1 / AUW1 / - / 19 Obbiettivo=7
Quando si inizia a giocare si può cancellare la parte "Obbiettivo=...".
Se poi si vuole usare altri metodi per assegnare gli obbiettivi (es: chiedere a qualcuno che non gioca di
sorteggiarli e comunicarli ai giocatori in privato), basta ignorare quelli assegnati dal programmino.
Il codice modificato:
- Spoiler:
- Codice:
/* File: riskshuffle.c
*
* RISKSHUFFLE v0.2
* --------------------------------------------------------------------------------
* Author: Ste
*
* Utility per partite a Risiko su forum: mescola il mazzo delle carte-territorio, le
* distribuisce ai giocatori e stampa su stdout lo "stato" iniziale.
*
* Per compilare:
* $cc riskshuffle.c -o riskshuffle
*
* Uso: riskshuffle <n>
* dove n è il numero di giocatori (n=3..6)
*
* Rfr: http://en.wikipedia.org/wiki/Knuth_shuffle
* http://rosettacode.org/wiki/Knuth_shuffle#C
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#define NCARDS 42 /* no. di territori (=no. di carte nel mazzo) */
#define PMAX 6 /* no. massimo di giocatori */
#define NTGT 20 /* numero di obbiettivi (obbiettivi = 1 ... NTGT) */
typedef struct {
int Cards[NCARDS]; /* mano */
int Ncards; /* numero di carte */
int Narmies; /* armate */
int Target; /* obbiettivo */
char* Color;
} PLAYERt;
static int Cards[NCARDS]; /* mazzo di carte */
static PLAYERt Player[PMAX]; /* giocatori */
static int Np=4; /* numero di giocatori */
static char* Lands[NCARDS] = {
"ASK1", "TNO1", "GRO1", "ALB1", "ONT1", "QUE1", "USW1", "USE1", "AMC1",
"VEN1", "PER1", "BRA1", "ARG1",
"ISL1", "SCA1", "GBR1", "EUS1", "EUO1", "EUM1", "UKR1",
"AFN1", "EGI1", "CON1", "AFO1", "AFS1", "MAD1",
"URA1", "SIB1", "JAC1", "CIT1", "KAM1", "JPN1", "MON1", "AFG1", "MDO1", "IND1", "CIN1", "SIA1",
"IDS1", "NGU1", "AUE1", "AUW1" };
static int Cont[NCARDS] = {
1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
6, 6, 6, 6 };
static int Narmies[PMAX] = { 0, 0, 35, 30, 25, 20 };
static char* Color[PMAX] = { "Giallo", "Rosso", "Verde", "Blu", "Viola", "Nero" };
static int Target[NTGT];
int PrintCards(int* cards, int ncards) {
int i;
for(i=0; i<ncards; i++)
printf("%u ",cards[i]);
printf("\n");
}
int PrintPlayer(PLAYERt *p) {
int i,c;
c=0;
printf("%s: ",p->Color);
for(i=0; i<p->Ncards; i++)
{
if((c!=0)&&(c!=Cont[p->Cards[i]]))
printf("/ ");
c=Cont[p->Cards[i]];
printf("%s ",Lands[p->Cards[i]]);
//printf("%u ",p->Cards[i]);
}
printf("/ - / %u Obbiettivo=%u\n",p->Narmies,p->Target);
}
int Cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int Sort(int *cards, int ncards) {
qsort(cards, ncards, sizeof(int), Cmp);
}
inline int Rrand(int m) {
/* Questo dovrebbe andar bene per smazzate a distanza di giorni l'una dall'altra : */
srand((unsigned int)time(NULL));
return (int)((double)m * ( rand() / (RAND_MAX+1.0) ));
}
void Shuffle(void *obj, size_t nmemb, size_t size) {
/* Mescola il mazzo */
void *temp = malloc(size);
size_t n = nmemb;
while ( n > 1 )
{
size_t k = Rrand(n--);
memcpy(temp, obj + n*size, size);
memcpy(obj + n*size, obj + k*size, size);
memcpy(obj + k*size, temp, size);
}
free(temp);
}
void Issue(void) {
/* Distribuisce le carte */
#define P Player[j]
int i,j;
for(j=0;j<Np;j++)
P.Target=Target[j];
i=0;
do {
for(j=0;j<Np;j++)
{
if(i==NCARDS) return;
P.Cards[P.Ncards]=Cards[i];
P.Ncards++;
P.Narmies--;
i++;
}
} while(1);
#undef P
}
#define USAGE \
"\nUso: %s <n>\n"\
"n = numero di giocatori (3..6, default n=4)\n\n\n",argv[0]
int main(int argc, char** argv, char** env) {
// argv 1 = numero di giocatori 2...6
int i,j;
if(argc>2)
{
printf(USAGE);
return 0;
}
if(argc==2)
{
Np = atoi(argv[1]);
if((Np<3)||(Np>6))
{
printf("\nArgomento non valido.\n");
printf(USAGE);
return 0;
}
}
/* Inizializza il mazzo */
for(i=0; i<NCARDS;i++)
Cards[i]=i;
for(i=0; i<NTGT; i++)
Target[i]=i+1;
/* Inizializza i giocatori */
for(j=0; j<Np;j++)
{
for(i=0; i<NCARDS;i++)
{
Player[j].Cards[i]=-1;
Player[j].Ncards=0;
Player[j].Narmies=Narmies[Np-1];
Player[j].Color = Color[j];
Player[j].Target = -1;
}
}
/* Mescola */
Shuffle(Cards,NCARDS,sizeof(int));
Shuffle(Target,NTGT,sizeof(int));
Issue();
//PrintCards(Cards,NCARDS);
for(j=0; j<Np;j++)
Sort(Player[j].Cards,Player[j].Ncards);
for(j=Np-1; j>-1;j--)
PrintPlayer(&Player[j]);
return 0;
}
/* eof */
Re: Risiko su forum (making of)
per me va bene così, è comodo
Ransie-
Numero di messaggi : 8845
Età : 42
Reputazione : 10
Punti : 8835
Data d'iscrizione : 14.02.09
Re: Risiko su forum (making of)
Ho messo insieme tutti i pezzi, nello scaffale dei giochi da forum: http://tinyurl.com/yeexw42 ( )
Re: Risiko su forum (making of)
bravo ste!!!
Io non ce la faccio ora a cominciare, voglio farlo quando ho un pò di tempo...però hai ragione forse è meglio fare un giro di prova..che ho le idee un pò confuse...così vedo d riordinarle priam di cominciare..forse più tardi riesco, sempre che trovo voi...
Io non ce la faccio ora a cominciare, voglio farlo quando ho un pò di tempo...però hai ragione forse è meglio fare un giro di prova..che ho le idee un pò confuse...così vedo d riordinarle priam di cominciare..forse più tardi riesco, sempre che trovo voi...
digi- Numero di messaggi : 1586
Reputazione : 3
Punti : 1588
Data d'iscrizione : 16.02.09
Obbiettivo semisegreto
Ho modificato il programmino in modo che invece che assegnare un obbiettivo solo, ne assegni un "ventaglio":
Blu: ONT1 / VEN1 PER1 / ISL1 / AFN1 AFS1 / URA1 JAC1 / NGU1 AUE1 / - / 20 Obb: A=14 B=9 C=13 D=5 E=7
Verde: ASK1 QUE1 USW1 / BRA1 / GBR1 / AFO1 / SIB1 JPN1 IND1 CIN1 / - / 20 Obb: A=1 B=8 C=12 D=16 E=6
Rosso: TNO1 USE1 / ARG1 / SCA1 EUM1 UKR1 / CON1 / KAM1 MON1 MDO1 / IDS1 / - / 19 Obb: A=20 B=2 C=11 D=15 E=19
Giallo: GRO1 ALB1 AMC1 / EUS1 EUO1 / EGI1 MAD1 / CIT1 AFG1 SIA1 / AUW1 / - / 19 Obb: A=10 B=17 C=3 D=4 E=18
Può essere usato per rendere un po' segreto l'obbiettivo. Basta che prima di iniziare, ogni giocatore scelga una
lettera da A a E senza comunicarla, la cripti usando questo: http://infoencrypt.com/ , e posti la criptatura.
Il suo obbiettivo sarà quello corrispondente alla lettera scelta, nel ventaglio di obbiettivi del colore che gli viene
assegnato dal sorteggio.
Esempio:
In privato, scelgo la lettera D, e la cripto usando la password "123prova".
Dichiaro pubblicamente che il mio obbiettivo è <Encrypted>lNgSHZZTnjs=</Encrypted>
Si sorteggiano i colori e mi capita il Giallo, quindi il mio obbiettivo è il numero 4:
Giallo: GRO1 ALB1 AMC1 / EUS1 EUO1 / EGI1 MAD1 / CIT1 AFG1 SIA1 / AUW1 / - / 19 Obb: A=10 B=17 C=3 D=4 E=18
L'obbiettivo è semisegreto perché gli altri giocatori sanno che è uno tra 10, 17, 3, 4 e 18, ma non sanno quale perché
finché non rivelo la password, non sanno che ho scelto il D.
Ovviamente in più si è e più piccolo è il "ventaglio" di obbiettivi per ogni giocatore, quindi meno segreto l'obbiettivo
(3 giocatori: A-F, 4 giocatori A-E, 5 giocatori A-D, 6 giocatori A-C)
Il nuovo codice del programmino):
Blu: ONT1 / VEN1 PER1 / ISL1 / AFN1 AFS1 / URA1 JAC1 / NGU1 AUE1 / - / 20 Obb: A=14 B=9 C=13 D=5 E=7
Verde: ASK1 QUE1 USW1 / BRA1 / GBR1 / AFO1 / SIB1 JPN1 IND1 CIN1 / - / 20 Obb: A=1 B=8 C=12 D=16 E=6
Rosso: TNO1 USE1 / ARG1 / SCA1 EUM1 UKR1 / CON1 / KAM1 MON1 MDO1 / IDS1 / - / 19 Obb: A=20 B=2 C=11 D=15 E=19
Giallo: GRO1 ALB1 AMC1 / EUS1 EUO1 / EGI1 MAD1 / CIT1 AFG1 SIA1 / AUW1 / - / 19 Obb: A=10 B=17 C=3 D=4 E=18
Può essere usato per rendere un po' segreto l'obbiettivo. Basta che prima di iniziare, ogni giocatore scelga una
lettera da A a E senza comunicarla, la cripti usando questo: http://infoencrypt.com/ , e posti la criptatura.
Il suo obbiettivo sarà quello corrispondente alla lettera scelta, nel ventaglio di obbiettivi del colore che gli viene
assegnato dal sorteggio.
Esempio:
In privato, scelgo la lettera D, e la cripto usando la password "123prova".
Dichiaro pubblicamente che il mio obbiettivo è <Encrypted>lNgSHZZTnjs=</Encrypted>
Si sorteggiano i colori e mi capita il Giallo, quindi il mio obbiettivo è il numero 4:
Giallo: GRO1 ALB1 AMC1 / EUS1 EUO1 / EGI1 MAD1 / CIT1 AFG1 SIA1 / AUW1 / - / 19 Obb: A=10 B=17 C=3 D=4 E=18
L'obbiettivo è semisegreto perché gli altri giocatori sanno che è uno tra 10, 17, 3, 4 e 18, ma non sanno quale perché
finché non rivelo la password, non sanno che ho scelto il D.
Ovviamente in più si è e più piccolo è il "ventaglio" di obbiettivi per ogni giocatore, quindi meno segreto l'obbiettivo
(3 giocatori: A-F, 4 giocatori A-E, 5 giocatori A-D, 6 giocatori A-C)
Il nuovo codice del programmino):
- Spoiler:
- Codice:
/* File: riskshuffle.c
*
* RISKSHUFFLE v0.3
* --------------------------------------------------------------------------------
* Author: Ste
*
* Utility per partite a Risiko su forum: mescola il mazzo delle carte-territorio, le
* distribuisce ai giocatori e stampa su stdout lo "stato" iniziale.
*
* Per compilare:
* $cc riskshuffle.c -o riskshuffle
*
* Uso: riskshuffle <n>
* dove n è il numero di giocatori (n=3..6)
*
* Rfr: http://en.wikipedia.org/wiki/Knuth_shuffle
* http://rosettacode.org/wiki/Knuth_shuffle#C
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#define NCARDS 42 /* no. di territori (=no. di carte nel mazzo) */
#define PMAX 6 /* no. massimo di giocatori */
#define NTGT 20 /* numero di obbiettivi (obbiettivi = 1 ... NTGT) */
typedef struct {
int Cards[NCARDS]; /* mano */
int Ncards; /* numero di carte */
int Narmies; /* armate */
int Target[6]; /* obbiettivo */
char* Color;
} PLAYERt;
static int Cards[NCARDS]; /* mazzo di carte */
static PLAYERt Player[PMAX]; /* giocatori */
static int Np=4; /* numero di giocatori */
static char* Lands[NCARDS] = {
"ASK1", "TNO1", "GRO1", "ALB1", "ONT1", "QUE1", "USW1", "USE1", "AMC1",
"VEN1", "PER1", "BRA1", "ARG1",
"ISL1", "SCA1", "GBR1", "EUS1", "EUO1", "EUM1", "UKR1",
"AFN1", "EGI1", "CON1", "AFO1", "AFS1", "MAD1",
"URA1", "SIB1", "JAC1", "CIT1", "KAM1", "JPN1", "MON1", "AFG1", "MDO1", "IND1", "CIN1", "SIA1",
"IDS1", "NGU1", "AUE1", "AUW1" };
static int Cont[NCARDS] = {
1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
6, 6, 6, 6 };
static int Narmies[PMAX+1] = { 0, 0, 0, 35, 30, 25, 20 };
static int Ntarget[PMAX+1] = { 0, 0, 0, 6, 5, 4, 3 };
static char* Color[PMAX] = { "Giallo", "Rosso", "Verde", "Blu", "Viola", "Nero" };
static int Target[NTGT];
int PrintCards(int* cards, int ncards) {
int i;
for(i=0; i<ncards; i++)
printf("%u ",cards[i]);
printf("\n");
}
int PrintPlayer(PLAYERt *p) {
int i,c,n;
char* l[]={ "A","B","C","D","E","F"};
c=0;
printf("%s: ",p->Color);
for(i=0; i<p->Ncards; i++)
{
if((c!=0)&&(c!=Cont[p->Cards[i]]))
printf("/ ");
c=Cont[p->Cards[i]];
printf("%s ",Lands[p->Cards[i]]);
//printf("%u ",p->Cards[i]);
}
//printf("/ - / %u Obbiettivo=%u\n",p->Narmies,p->Target[0]);
n=Ntarget[Np];
printf("/ - / %u Obb: ",p->Narmies);
for(i=0; i<n; i++)
printf("%s=%u ",l[i],p->Target[i]);
printf("\n");
}
int Cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int Sort(int *cards, int ncards) {
qsort(cards, ncards, sizeof(int), Cmp);
}
inline int Rrand(int m) {
/* Questo dovrebbe andar bene per smazzate a distanza di giorni l'una dall'altra : */
srand((unsigned int)time(NULL));
return (int)((double)m * ( rand() / (RAND_MAX+1.0) ));
}
void Shuffle(void *obj, size_t nmemb, size_t size) {
/* Mescola il mazzo */
void *temp = malloc(size);
size_t n = nmemb;
while ( n > 1 )
{
size_t k = Rrand(n--);
memcpy(temp, obj + n*size, size);
memcpy(obj + n*size, obj + k*size, size);
memcpy(obj + k*size, temp, size);
}
free(temp);
}
void IssueCards(void) {
/* Distribuisce le carte */
#define P Player[j]
int i,j;
for(j=0;j<Np;j++)
P.Target[0]=Target[j];
i=0;
do {
for(j=0;j<Np;j++)
{
if(i==NCARDS) return;
P.Cards[P.Ncards]=Cards[i];
P.Ncards++;
P.Narmies--;
i++;
}
} while(1);
#undef P
}
void IssueTargets(void) {
/* Distribuisce gli obbiettivi */
#define P Player[j]
int i,j,n,k;
n=Ntarget[Np];
k=0;
for(i=0;i<n;i++)
for(j=0;j<Np;j++)
{
P.Target[i]=Target[k];
k++;
}
#undef P
}
#define USAGE \
"\nUso: %s <n>\n"\
"n = numero di giocatori (3..6, default n=4)\n\n\n",argv[0]
int main(int argc, char** argv, char** env) {
// argv 1 = numero di giocatori 2...6
int i,j;
if(argc>2)
{
printf(USAGE);
return 0;
}
if(argc==2)
{
Np = atoi(argv[1]);
if((Np<3)||(Np>6))
{
printf("\nArgomento non valido.\n");
printf(USAGE);
return 0;
}
}
/* Inizializza il mazzo */
for(i=0; i<NCARDS;i++)
Cards[i]=i;
for(i=0; i<NTGT; i++)
Target[i]=i+1;
/* Inizializza i giocatori */
for(j=0; j<Np;j++)
{
for(i=0; i<NCARDS;i++)
{
Player[j].Cards[i]=-1;
Player[j].Ncards=0;
Player[j].Narmies=Narmies[Np];
Player[j].Color = Color[j];
Player[j].Target[0] = -1;
}
}
/* Mescola */
Shuffle(Cards,NCARDS,sizeof(int));
Shuffle(Target,NTGT,sizeof(int));
IssueCards();
IssueTargets();
//PrintCards(Cards,NCARDS);
for(j=0; j<Np;j++)
Sort(Player[j].Cards,Player[j].Ncards);
for(j=Np-1; j>-1;j--)
PrintPlayer(&Player[j]);
return 0;
}
/* eof */
Ultima modifica di Ste il Lun Mar 15, 2010 9:12 pm - modificato 2 volte. (Motivazione : aggiunti i tag 'code' attorno al codice del programmino)
Re: Risiko su forum (making of)
! (fischio)
si può iniziare? Chi gioca?
si può iniziare? Chi gioca?
Ransie-
Numero di messaggi : 8845
Età : 42
Reputazione : 10
Punti : 8835
Data d'iscrizione : 14.02.09
Re: Risiko su forum (making of)
Io volentieri.
Però magari aspettiamo di aver finito la partita a Monopoli, sennò finisce che ci perdo troppo tempo.
Però magari aspettiamo di aver finito la partita a Monopoli, sennò finisce che ci perdo troppo tempo.
Re: Risiko su forum (making of)
si si magari settimana prossima...
digi- Numero di messaggi : 1586
Reputazione : 3
Punti : 1588
Data d'iscrizione : 16.02.09
Pagina 8 di 8 • 1, 2, 3, 4, 5, 6, 7, 8
Argomenti simili
» Giochi da forum
» Regata (making of)
» Non t'arrabbiare (making of)
» Scarabeata desinenza (the making of O'Scarraforum)
» Introduzione al forum
» Regata (making of)
» Non t'arrabbiare (making of)
» Scarabeata desinenza (the making of O'Scarraforum)
» Introduzione al forum
La Darsena :: La Locanda :: Caffè
Pagina 8 di 8
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.