venerdì 23 ottobre 2015

Scala 40 e Ramino nuove versioni in arrivo


Mi sono servite tre settimane per capire cosa non andava nel gioco online, la Scala 40 ed il Ramino con iOS9 generavano frequentissime interruzioni delle partite in corso

ho fatto alcune modifiche importanti per migliorare la situazione:
  • ora, in presenza di reti particolarmente lente, il gioco riesce a collegarsi in modo più affidabile al Game Center
  • non è stato possibile impedire che vengano interrotte le partite per cause legate alla rete (comunque molto frequenti su reti Wifi scadenti o in presenza di variazioni della connessione a partita in corso), ma ho comunque potuto identificare il 90% di queste situazioni ed interrompere in modo differente la partita segnalando la presenza di problemi di comunicazione e non l'abbandono da parte degli avversari (cosa che creava molta confusione e risentimenti tra i giocatori)
  • i problemi di connessione alla rete potrebbero essere sia degli avversari che vostri, ma non sono in grado di segnalarvi dove si trova il problema, se avete frequenti interruzioni delle partite probabilmente il problema è legato alla vostra rete, potete provare a passare ad un'altra ad esempio da Wifi a 3G e vedere se le cose migliorano
  • ho reintrodotto i 100 punti di bonus per il vincitore a tavolino quando gli altri giocatori si ritirano volontariamente (non per problemi di  connessione)
  • ho introdotto un sistema per evitare che alcuni bari sfruttino i 100 punti di bonus a tavolino per salire in classifica
  • ho accelerato l'avvio della partita online ora è più rapido
  • ho evitato che a volte le carte vengano distribuite due volte durante il gioco online
  • ho limitato le partite online al solo iOS9, era necessario, tutti i giocatori iOS8 possono tranquillamente aggiornare ad iOS9.1 senza problemi
tutti progressi notevoli, sperando di non aver fatto errori, le modifiche sono tante, a volte, per quanto io collaudi i giochi non riesco a verificare tutto

i giochi ora sono pronti, ma non disponibili, Apple li ha in carico nel giro di 5/10 giorni se avrò il benestare di Apple li metterò online e potrete aggiornarli

buona giornata a tutti
Antonio


giovedì 8 ottobre 2015

Disavventure con iOS9 e Game Center
















Buongiorno a tutti,

in questi giorni ho rilasciato vari aggiornamenti dei miei giochi (Scala 40, Machiavelli e Ramino)

in linea di massima funzionano bene sia online che offline, ma succede di ricevere mail da utenti che hanno problemi con l'Apple Game Center


I problemi sono principalmente legati al gioco online e più raramente alla pubblicazione delle classifiche

Apple Game Center è il sistema di Apple che mi consente di gestire le classifiche e di realizzare il gioco online, purtroppo pare che Apple con l'aggiornamento di iOS9 abbia rotto qualcosa, non si tratta di un problema che riguarda tutti i giocatori, solo alcuni

D'abitudine di fronte a problemi con il Game Center ho sempre consigliato la procedura seguente:

- aprire l'app Impostazioni
- selezionare Game Center
- selezionare il vostro Game Center AppleID (il vostro nome utente in Game Center)
- premere il pulsante Esci
- riavviare il vostri dispositivo (iPad o iPhone)
- riavviare il gioco
- reinserire utente e password di Game Center quando richiesto dal gioco

consiglio comunque di provare, a volte è sufficiente


qui riporto alcuni link dove potete trovare informazioni su questi problemi:

https://discussions.apple.com/thread/7218355

http://www.ibtimes.co.uk/ios-9-bug-update-game-center-not-working-iphone-ipad-ipod-touch-1521185

http://www.ubergizmo.com/2015/10/ios-9-game-center-bug/

pare che la sola soluzione possibile sia quella di ripristinare il proprio dispositivo (iPhone o iPad) alle impostazioni di fabbrica e poi riconfigurare il dispositivo come nuovo

il problema di questa procedura è che si perdono tutti contenuti del dispositivo, vanno reinstallate le applicazioni e non si deve ripristinare un backup precedente poiché  facendolo spesso il problema si ripresenta

alcuni suggeriscono anche di rimuovere iOS9 dal dispositivo e reinstallare iOS8
(non è una cosa che consiglierei di fare non è semplice)

è probabile che Apple trovi una soluzione e rilasci un aggiornamento, quando? non si sa, non ci sono comunicazioni ufficiali, speriamo che con la nuova iOS9.1 che sicuramente è in cantiere il problema venga risolto

ad alcuni utenti ho consigliato di fare un esperimento (meno doloroso di una reinstallazione)
- aprire l'app Impostazioni
- selezionare Generali
- selezionare Ripristino
- selezionare "Ripristino Impostazioni"

meglio farlo con il dispositivo carico o collegato alla corrente elettrica
in alcuni casi ha funzionato, non si perdono i propri dati

buona giornata a tutti
Antonio

venerdì 2 ottobre 2015

Mescolare bene le carte!!!





A volte i giocatori di Scala 40, Ramino e Machiavelli contattano il supporto tecnico per fare qualche osservazione sul gioco ed in particolare su come gestisco la casualità e la forza dei giocatori.



Rispondo sempre a tutti (si io sono il supporto tecnico, l'assistenza clienti, lo sviluppatore, quello che scrive il blog, segue la pagina facebook, si occupare del marketing, un "one man band") sempre gentilmente, anche capita di ricevere qualche mail molto risentita a volte insolenti (ma molto molto di rado), alcune con toni vagamente minacciosi...




 Ecco qualche estratto dalle mail ricevute (solo da quelle educate):

ribadisco algoritmo di gestione carte completamente inadeguato.
Le carte devono essere solo "casualità" e non "gestione dei vincitori"
Mi dispiace, spero possiate apportare gli opportuni accorgimenti, diversamente non acquisterò la versione pro.
È la terza volta che capita 6/7 partite.. alcune delle quali erano praticamente vinte,poi la cpu ha iniziato a non darmi più una carta,ma averle fortunatamente buone tutte per se,pescando ogni jolly possibile.. mi sembra un pó troppo per definirle sfortunate combinazioni.. la sfortuna dura da parecchi giorni direi (lavoro in un campo che di notte mi lascia anche troppo tempo), visto che da non si vince una partita da mercoledì scorso con sconfitte a dir poco imbarazzanti e irritanti (tutte le carte scartate sono buone per la cpu,ogni jolly e suo,chiusure al secondo giro senza neanche finire di scartare le 3 o 4 doppie..)..
 le carte non sono mai equilibrate! 
Ingiocabile!!!
Il sistema gestisce le carte per accontentare tutti. Spesso si ha l'apertura in mano e con due pescate si chiude.....spesso gli avversari hanno l'apertura e successiva chiusura in due mani.
Non si tiene conto dell'unica regole delle carte: l'assoluta casualità 


Salve, mi chiamo ..... ....... e ho la versione a pagamento di scala 40. Premetto che sono stato un giocatore di carte per anni e cobosco molto bene i giochi e le statistiche. Uso frequentemente la Vs app e ultimamente mi sono accorto giocando contro il computer in partite a 2, ma non escludo che possa succedere anche a 4, che il computer apre continuamente di prima o al massimo in seconda mano, sempre con 2 o 3 giochi, questo non mi ricordo che sia possibile nella realtà. Chiaramente non escludo un mio errore di valutazione, ma non è piacevole pensare di non vincere mai, passa la voglia di giocare.

Insomma, queste persone non sono contente di me, ho realizzato giochi che non simulano correttamente la realtà, che non li soddifsano, che fanno vincere l'altro troppo spesso, che la casualità è una cosa differente, ecc.ecc. è doppiamente frustrante, sia per i giocatori che persono, sia per me, ricevere lamentele da un utente non è mai gradevole. Le lamentele per fortuna sono poche, ma sarebbe bello capire se c'è realmente un problema e, nel caso, se posso rimediare.

La mia risposta varia di volta in volta (non copio ed incollo le risposte), ma il senso generale è il seguente: queste persone sono proprio vittime del caso, succede di perdere molte partite di fila, come può succedere di vincerne tante sempre di fila, come può succedere di vincerne e perderne in modo equilibrato. La casualità non prevede che esista una certo bilanciamento, un equilibrio negli eventi, si potrebbero fare considerazioni sulla probabilità o non probabilità che un fatto si verifichi e molte molte parole, ma di solito chi è scontento non ascolta  ed insiste dicendo che c'è qualcosa che non va che al bar è differente.

Mi vengono in mente alcune scene al bar, nei paesini, dove giocatori incalliti si sfidano a carte e qualcuno impreca perchè ha una giornata no. Mi vengono in mente partite in cui ho vinto molto facilmente  con gli amici perché le carte erano sempre buone e non perché fossi un buon giocatore (non sono mai stato bravo a carte, non ho memoria, il gioco dopo un po mi annoia, preferisco stare all'aria aperta e andare a spasso)

Come fare a  spiegare che non c'é trucco nei miei giochi?  Ho qualche reminiscenza sul calcolo combinatorio inculcatami da un professore di matematica ormai defunto che amava fumare le "nazionali senza filtro" in classe terrorizzandoci con il suo atteggiamento autoritario, ma non sono sufficienti per spiegare come mai a volte si è sofrtunati al gioco, non lo saprei fare chiaramente.
(Se qualcuno leggesse quasto mio post e ha elementi per aiutarmi accetto di certo suggerimenti!)

Io distinguerei due cose, "come il gioco mischia le carte" e "come giocano gli avversari automatici"
 
"come il gioco mischia le carte"

il gioco le mischia,  eccome se le mischia! usa proprio un sistema basato sulla casualità, non c'è nulla che mi consenta di controllare e decidere quali carte andranno in mano ai singoli avversari, siano essi automi, umani, online oppure offline (online sono solo umani, non ci sono automi o robot online)

posso mostrarvi come faccio, di seguito sia il codice che  un paio di link che ho usato per capire come mischiare correttamente un mazzo di carte.  Se avete osservazioni e suggerimenti autorevoli sarò felice di valutarli.

ecco quindi un estratto dal codice sorgente dei miei giochi
quello che segue è un metodo (una funzione), scritta in ObjectiveC, potete mostrarla a qualunque informatico di vostra conoscenza per chiedergli se sbaglio qualcosa, se c'e' un qualche errore di fondo che mi sfugge


//
// ----------------------------------------------------------------------------
// Algoritmo di mescolmento delle carte presenti nel mazzo
// ----------------------------------------------------------------------------
// fonti che ho utilizzato per scegliere quale alrogimo adottare:
//
//  http://nshipster.com/random///  http://en.wikipedia.org/wiki/Fisher–Yates_shuffle
// ---------------------------------------------------------------------------- 
//
+ (void) mischiaCarte:(NSMutableArray*)arrayDiCarte
{
    NSUInteger count = arrayDiCarte.count;

    if (count > 1) {
        for (NSUInteger i = count - 1; i > 0; --i) {
            [arrayDiCarte exchangeObjectAtIndex:i 

                                           withObjectAtIndex:arc4random_uniform((int32_t)(i + 1))];
        }
    }
}


[Aggiornamento del 15 settembre 2018]
ho aggiornato di recente un paio di giochi (Pinnacola e Machiavelli)
questi sono scritti in linguaggio Swift ed usano un sistema differente per mescolare le carte
a tendere tutti i giochi useranno un algoritmo scritto in Swift 4.2 che si occupa di mescolare una collezione elementi (nel nostro caso le carte)

perché uso un algoritmo differente? in realtà il funzionamento interno è sempre lo stesso, ma dovendo aggiornare tutto al linguaggio Swift mi adeguo a quanto fornito da Apple (tutti gli algoritmo sono egualmente validi e garantiscono la giusta casualità nel mescolamento delle carte)

Ecco l'implementazione per Machiavelli (dal 2018)
// versione Swift 4.1 usa la funzione di GameKit specifica per mescolare una collezione di oggetti
func shuffle()
{
   let shuffledCards =      
        GKRandomSource.sharedRandom().arrayByShufflingObjects(
             in: cards) as! [CCard]
        cards.removeAll()
        cards.append(contentsOf: shuffledCards)
}

Ed ecco l'implementazione per Pinnacola (dal giugno 2018), questa sarà usata anche in tutte le versioni future di Scala 40 e Ramino
 (ed in futuro questo varrà per tutti i giochi)

// versione Swift 4.2 usa la funzione nativa per mescolare una collezione di oggetti
func shuffle()
{
   cards.shuffle() // Swift 4.2
}

[Aggiornamento del 26 Febbraio 2019]

Dal Febbraio 2019 tutti i giochi che ho realizzato sono stati riscritti in linguaggio Swift
ed ora viene usata la  versione 4.2 ( a seguire la 5 più avanti nell'anno )
orma il solo algoritmo usato per mescolare le carte in tutti i giochi e' il seguente

// versione Swift 4.2 usa la funzione nativa per mescolare una collezione di oggetti
func shuffle()
{
   cards.shuffle() // Swift 4.2
}

l'utilizzo della funzione di shuffle degli array in Swift 4.2 è descritta qui sul sito di Apple
https://developer.apple.com/documentation/swift/array/2994753-shuffle

mentre l'implementazione della funzione di shuffle e del generatore di numeri casuali adottato da Apple si trova qui:
https://github.com/apple/example-package-fisheryates/blob/master/Sources/FisherYates/Fisher-Yates_Shuffle.swift

https://github.com/apple/example-package-fisheryates/blob/master/Sources/FisherYates/random.swift

se avete osservazioni vi prego di inviarmele o segnalare direttamente ad Apple


"come giocano gli avversari automatici"


qui non considero il gioco online, nel gioco online non ci sono automi, quindi se prendete delle batoste online, oltre alla sfortuna che vi potrebbe sempre perseguitare dovrete considerare anche se siete più o meno forti dell'avversario

il gioco online sicuramente è più divertente perchè gli avversari sono reali, siete di fronte al bar più grosso che si possa immaginare

nel gioco offline sfidate degli automi, dei giocatori che ho creato simulando un po il mio stile personale di gioco, con tutti i limiti che può avere la mia capacità di giocare oltre a quella di programmare un computer per farlo

in linea di massima gli automi dei miei giochi analizzano tutte le possibili giocate effettuabili, lo fanno in modo un po brutale, anche stupido, ma in poco tempo, sfruttando la velocità del computer riescono ad arrivare ad un buon numero di possibili giocate alternative che potrebbero fare durante il loro turno, una volta che queste giocate ipotetiche sono disponibili ne scelgono selezionandola tra tutte in base ad una strategia (ad esempio una strategia che punta a chiudere al più presto, a rimanere con poche carte in mano con valori bassi, aprire e chiudere in mano, e altre simili)

ho realizzato tre automi, Forte, Medio e Debole
il giocatore Forte, a differenza degli altri due, è in grado di ricordare tutte le carte scartate nel pozzo degli scarti (come farebbe ogni buon giocatore)

il Medio ed il Debole sono più smemorati, non conoscono le carte del pozzo, e non analizzano tutte le giocate possibili ed immaginabili, ma solo un sottoinsieme scelto in modo casuale tra tutte quelle possibili (di nuovo la casualità anche qui)

in base alle impostazioni di gioco potete scegliere se sfidare giocatori Forti, Medi o Deboli
o, di nuovo affidandovi al caso, potete scegliere che sia il gioco ad assegnarvi avversari di forza differente scelta casualmente, in questa modalità potreste ritrovarvi in una partita a 4 sfidando un giocatore forte e due medi, o tre deboli, o due forti ed un debole,  e così via....

ci sono molto configurazioni possibili nel gioco offline, potete cambiare un po le regole del gioco, alternado su queste impostazioni potete fare si che gli avversari si comportino in modo differente rispetto al comportamento standard (ma attenzione le regole cambieranno anche per voi)


Conclusioni
  • il caso c'è eccome, e quindi la fortuna e la sfortuna
  • sicuramente gli automi che ho realizzato sono un po monotoni e sarei più bravo se riuscissi a crearne di più vari e realistici inventando strategie di gioco eterogenee, ho il sospetto che siano proprio gli automi ad annoiare i giocatori e a dar loro la percezione di avere giorante nere, non tanto il come vengono mischiate le carte
  • potrei fare una cosa, ma non sono convinto sia onesta...
    • potrei cercare di tenermi stretti i clienti insoddisfatti e barare
    • barare come? in che senso?
    •  non per far vincere il gioco, al contrario per farlo perdere, per far vincere i giocatori insoddisfatti
    • potrei tracciare le partite vinte e perse e di fronte a continue sconfitte da parte del giocatore umano potrei decidere di fare giocare male gli automi, molto male, al punto che non possano  vincere
    • non saprei dire se questo si chiama barare o solo cercare di adattare la capacità del gioco a quella dell'avversario umano, per rendere tutto più bilanciato
    • non so, non sono convinto, ma se avete opinioni in merito mi piacerebbe parlarne con qualcuno di voi
credo sia il post più lubngo che ho scritto sul mio blog, come sempre avrà un bassissimo numero di lettori, spero che tra questi ci sia qualche giocatore incallito ed esperto che possa darmi dei consigli

buona giornata a tutti