• #giochi
  • Hearthstone - chi ci gioca? (e chi ci bara)

Avendo giocato a Magic per tanto tempo da ragazzino (dalle medie) e piu' recentemente a Netrunner, ovviamente ho provato Hearthstone fin dall'uscita, e sebbene sia assolutamente consapevole di quanto sia un gioco succhiasoldi (anche se finora ho comprato solo un pacchetto speciale) e sempliciotto/basato troppo sul random, a periodi alterni finisco sempre per rigiocarci.
Chi ci gioca? Quanto? Che tipi di deck?

Collateralmente: io finisco per giocare sempre ad intermittenza, tipo: escono nuove carte, inizio, gioco, mi accorgo che non riusciro' mai ad ottenerle con i miei ritmi di gioco a meno di pagare, smetto, repeat. A quest'ultimo giro pero' ho deciso che potevo risolvere la questione creandomi un bot che faccia per me le quest mentre sono a lavoro. Ho iniziato a tempo molto perso ma ho comunque un bot che gioca (solo mage) utilizzando euristiche abbastanza semplici. Attualmente, sto facendo la parte che logga le quest attive e non in modo da poter selezionare il mazzo giusto tra un paio di varianti (tipo, quello con molti battlecry se c'e' la quest su battlecry ecc). Per farlo sto modificando Hearthstone Deck Tracker in modo che logghi anche le quest e poi l'idea e' di tenerlo aperto mentre gioco per buildare una sorta di db delle quest, visto che online non ce ne sono di aggiornati. Avendo il db delle quest, posso poi assegnare ad ognuna le preferenze per il tipo di mazzo.
Se giocate, quando ho finito il codice vi posso passare la mia versione modificata di HDT cosi' potete aiutarmi nella costruzione del db di quest globale.
Ovviamente, un obiettivo sarebbe ad un certo punto anche provare qualche tipo di statistical learning in modo da usare il bot non solo per questare ma anche per provare a vincere qualche partita πŸ˜ƒ Ma coi miei tempi probabilmente mai ci arrivero'.
Qualcuno interessato ad un progetto del genere?

Anche io ci gioco sparsamente da quando Γ¨ uscito, perΓ² il mio modus operandi Γ¨:
1- installa il gioco
2- spacchetta le robe gratis
3- qualche partita random, naturalmente persa
4- disinstalla gioco πŸ˜…

11 days later

Update.
La mia IA e' effettivamente un estensione di un noto tool di supporto al gioco di Hearthstone.
Uno delle cose che devo aggiungere atm e' logging delle quest (quali attive, quali complete ecc), che sto aggiungendo, ma ho un problema con l'esportare in XML. Il tool e' in C# che io di fatto non so, quindi vado un po' a naso ma qui non capisco il problema onestamente.
Quello che devo salvare e' la mia classe QuestStats:

public class QuestStats
{
    private const string FileName = "QuestsLog.xml";

    private static Lazy<QuestStats> _instance = new Lazy<QuestStats>(Load);

    [XmlArray(ElementName = "CurrentQuests")]
    [XmlArrayItem(ElementName = "Quest")]
    private List<QuestInfo> _currentQuests;

    [XmlArray(ElementName = "CompletedQuests")]
    [XmlArrayItem(ElementName = "Quest")]
    private List<QuestInfo> _completedQuests;

    private QuestStats()
    {
        _currentQuests = new List<QuestInfo>();
        _completedQuests = new List<QuestInfo>();
    }

    public static QuestStats Instance => _instance.Value;

    private static string FilePath => Path.Combine(Config.AppDataPath, FileName);

    private static QuestStats Load()
    {
        QuestStats instance;
        if (!File.Exists(FilePath))
        {
            instance = new QuestStats();
        }
        else
        {
            try
            {
                instance =  XmlManager<QuestStats>.Load(FilePath);
            }
            catch (Exception e)
            {
                Log.Error(e);
                instance = new QuestStats();
            }
        }
        return instance;
    }

    private static void Save(QuestStats instance) => XmlManager<QuestStats>.Save(FilePath, instance);
    public static void Save() => Save(Instance);

// ALTRO NON IMPORTANTE 
}

public class QuestInfo
{
    public QuestInfo()
    {
    }

    public QuestInfo(long qid, string qname, string qdesc, string qdateGiven, string qdateCompleted)
    {
        QuestId = qid;
        QuestName = qname;
        QuestDescription = qdesc;
        DateGiven = qdateGiven;
        DateCompleted = qdateCompleted;
    }

    [XmlAttribute("questId")]
    //public Guid QuestId { get; set; }
    public long QuestId { get; set; }

    [XmlAttribute("questName")]
    public string QuestName { get; set; }

    [XmlAttribute("questDescription")]
    public string QuestDescription { get; set; }

    [XmlAttribute("dateGiven")]
    public string DateGiven { get; set; }

    [XmlAttribute("dateCompleted")]
    public string DateCompleted { get; set; }
}

Ora, se metto un breakpoint nel metodo privato Save vedo che instance ha qualcosa nelle '_currentQuests' (una quest). Pero' poi dopo che salva, nessun errore, crea il file .xml ma e' vuoto, cioe' c'e' lo schema XML ma nessuna entry dentro il root object

<?xml version="1.0" encoding="utf-8"?>
<Quests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

Cosa mi manca? Una mano? Penso soprattutto a c# boyz tipo @ManHunter e @Nemo ...

[XmlArray(ElementName = "CurrentQuests")]
[XmlArrayItem(ElementName = "Quest")]
private List<QuestInfo> _currentQuests;

[XmlArray(ElementName = "CompletedQuests")]
[XmlArrayItem(ElementName = "Quest")]
private List<QuestInfo> _completedQuests;

I private field non vengono serializzati dall'XmlSerializer.
Quindi o li metti public (soluzione veloce) o ti scrivi una implementazione di IXmlSerializable: https://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

    Ho il mio bel mazzo Tempo Mage con qualche legendary carina che ho craftato, ma la nuova espansione ha dato vita ad incubi come il Pirate Warrior o i mazzi basati su Reno Jackson che ti aprono in due, quindi c'ho perso un po' la voglia ultimamente :S

      AlexElite7 Visto che giochi attivamente, ti andrebbe di aiutarmi? Ho moddato un software esistente (opensource) di supporto al gioco per fargli loggare le quest che uno ottiene/completa mentre gioca. Tramite questi log, posso relativamente facilmente creare un db che associa ogni questID ad una delle possibile strategie della mia AI.
      Tu non devi fare nulla se non tenere aperto questo software quando giochi, che comunque e' un tracker con alcune funzionalita' avanzate. Poi, che ne so, ogni 15 giorni mi spedisci il file in questione. Ti posso linkare il binario su discord quando ci sei. Il codice e' in questa branch:
      https://github.com/winterismute/Hearthstone-Deck-Tracker/tree/questtracking
      cosi' puoi verificare che non ho aggiunto virus o altro πŸ˜ƒ
      Ovviamente vale anche per tutti gli altri.
      cosi' puoi ispezionare che