Articoli con tag .NET

getCards

RESTful API JSON Poker Texas Hold’em WCF C#

0

Negli ultimi anni il Poker, nella sua accezione del Texas Hold’em, è diventato il gioco più amato dagli italiani, scavalcato solo dalle scommesse, legalizzate da molto più tempo. Al momento, secondo l’istituto di ricerca Eurispes, quella del gioco d’azzardo è la terza industria del paese per volume d’affari. Il fenomeno è supportato da canali televisivi a tema e dal fenomeno del “divismo” dei giocatori più conosciuti che espongono sui loro capi di abbigliamento sponsor del poker on line.

Dal punto di vista più strettamente informatico sono interessanti alcuni progetti ospitati su code google con licenza GNU GPL che mettono a disposizione un framework e un logic engine per il il Texas Hold’em openholdembot,cspoker.

Nell’ipotesi di sviluppare un servizio RESTFull con Microsoft WCF che faccia da dealer e che possa servire come base per sviluppare un software sul poker ipotizziamo come possibile output un flusso JSON.
Creiamo una WCF Service Application chiamata PokerWcfService e cancelliamo il servizio creato di defaul per crearne uno nostro chiamato PokerService.svc. All’interfaccia IPokerService aggiungiamo un semplice metodo getCards che restituisce che prende in input il numero di giocatori

[OperationContract]
[WebInvoke(Method = "GET",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "getCards/{playersNumber}")]
ResultGetCards getCards(string playersNumber);

Per implementare questo metono ho creato una classe ResultGetCards la quale al suo interno contiente una lista di oggetti di tipo PlayerHand e un oggetto ShowDown.

    /// <summary>
    /// Player hand, two cards
    /// </summary>
    public class PlayerHand
    {
        private string _firstCard;
 
        public string firstCard
        {
            get { return _firstCard; }
            set { _firstCard = value; }
        }
 
        private string _secondCard;
 
        public string secondCard
        {
            get { return _secondCard; }
            set { _secondCard = value; }
        }
    }
 
    /// <summary>
    /// ShowDown Flop
    /// </summary>
    public class ShowDown
    {
        private string _firstCardFlop;
 
        public string firstCardFlop
        {
            get { return _firstCardFlop; }
            set { _firstCardFlop = value; }
        }
 
        private string _secondCardFlop;
 
        public string secondCardFlop
        {
            get { return _secondCardFlop; }
            set { _secondCardFlop = value; }
        }
 
        private string _thirdCardFlop;
 
        public string thirdCardFlop
        {
            get { return _thirdCardFlop; }
            set { _thirdCardFlop = value; }
        }
 
        private string _turn;
 
        public string turn
        {
            get { return _turn; }
            set { _turn = value; }
        }
 
        private string _river;
 
        public string river
        {
            get { return _river; }
            set { _river = value; }
        }
    }


La classe ResultGetCards risulterebbe quindi strutturata in questo modo:

    /// <summary>
    /// getCards Output 
    /// </summary>
    public class ResultGetCards
    {
        private ShowDown _showDown;
 
        public ShowDown showDown
        {
            get { return _showDown; }
            set { _showDown = value; }
        }
 
        private List<PlayerHand> _playerHands;
 
        public List<PlayerHand> playerHands
        {
            get { return _playerHands; }
            set { _playerHands = value; }
        }
    }

Questa è la struttura dei files

Una volta creato il servizio, definito il model e strutturata la soluzione non resta che implementare il metodo getCards.

La tecnica utilizzata è quella di recuperare dall’array di stringhe card i valori per popolare il result composto dallo showdown e dalle playerCards senza ripetere mai gli stessi valori e in maniere casuale. Questo è possibile recuperando il numero necessario di valori, in base al numero di giocatori in input, dall’array che viene ogni volta ordinato in maniera casuale.
L’output finale sarà del tipo:

{"playerHands":[{"firstCard":"6H","secondCard":"QC"},{"firstCard":"1H","secondCard":"4S"},{"firstCard":"3H","secondCard":"8H"},{"firstCard":"6D","secondCard":"JC"},{"firstCard":"QH","secondCard":"3D"},{"firstCard":"2D","secondCard":"9C"},{"firstCard":"KD","secondCard":"10D"},{"firstCard":"6S","secondCard":"8D"}],"showDown":{"firstCardFlop":"5C","river":"9D","secondCardFlop":"JD","thirdCardFlop":"1S","turn":"1D"}}

Se i miei post ti sono stati di aiuto o ti sono sembrati intressanti puoi offrirmi un caffè :)

ZedGraph

Grafici .NET

0

Nell’ultimo anno di lavoro ho utilizzato in maniera molto approfondita tre componenti per generare  grafici su tecnologia ASP.NET: ZedGraph, Infragistics, DundasChart. La scelta di un componente per la creazione di grafici è spesso delicata. Una valutazione errata puo portare a risultati che non soddisfano le esigenze.
ZedGraphZedGraph ha come punto di forza l’essere gratis. Offre una gamma di grafici abbastanza ampia ma che non copre la totalità delle necessità di uno sviluppatore. I grafici a disposizione sono Bar Chart, Line Chart e Pie Chart. Mancano Gantt e Gauge ed  è possibile disegnare solo grafici 2D. Purtroppo ad oggi l’ultima release risale al 28 Novembre 2007, quindi da quasi un anno il progetto sembra essere fermo alla versione 5.1.4.
Per chi non ha budeget da spendere e deve creare grafici semplici ed essenziali perdendo però più tempo per personalizzarli è sicuramente una buona scelta.
Net AdvantageInfragistics fornisce 35 controlli ASP.NET davvero utili e totalmente compatibili con ajax. Tra i tanti ci sono i grafici (UltraChart, UltraGauge) che offrono un alto livello di customizzazione. Infatti non è possibile acquistare esclusivamente solo i componenti grafici ma è necessario acquistare tutta la suite.  L’infragistics, parlando dei grafici sul suo sito, scrive testualmente:

Over 50 2D and 3D Chart Types.
Design-time Convenience – Custom wizard for designing single-layer or multi-layer charts, with optimized default presets to ensure you will make the best presentation of the chart type you have chosen to display.
Composite Charting – Build complex charts with Series Collections, Chart Area Collections and Chart Layers Collections.
Advanced Graphics – Use Anti-Aliasing, Alpha-Blending, Solid 3D, 2D or our custom Paint Elements to design the highest quality visual appearance.
Multiple Rendering – Choose from multiple image types for rendering as well as SVG and SWF
.” Non mi sembra poco!
NetAdvantage for ASP.NET è un’ottima scelta sia per il costo che per la quantità e qualità dei controlli offerti.

Dundas ChartDundas Chart copre la totalità delle rappresentazioni grafiche con ottimi risultati da tutti i punti di vista. Davvero impressionante la funzionalità dello zoom (non presente negli altri), ottenuta trascinando il cursore del mouse lungo un’area del grafico. Pacchetti separati da quello “chart” sono Dundas Gauge e Dundas Map. Ottima scelta per chi ha soldi da spendere e pretende risultati ai massimi livelli.Tra i tre componenti grafici analizzati finora Dundas vince senza dubbio in termini di performance e di copiosità di grafici ma ha un costo piuttosto elevato, mentre Infragistic è un ottimo compromesso tra le performance e il prezzo in quanto ci fornisce oltre ai grafici tanti componenti aggiuntivi.



Se i miei post ti sono stati di aiuto o ti sono sembrati intressanti puoi offrirmi un caffè :)

Popolare ComboBox con Enum

0

In questi giorni, sul progetto che occupa la maggior parte della mia giornata, mi sono imbrattuto nella combobox. Questo strumento puo essere associato a diverse origi dati, una di queste è un enum.
Immaginate di avere una combobox chiamata MyCmb. Ora create un oggetto come questo
public enum Animali { Leone, Zebra, Gazzella };
Di default Leone avrà come value 0, Zebra 1 e Gazzella 2. Per cambiare il valore di partenza con cui contare basta fare così:
public enum Animali { Leone = 10, Zebra, Gazzella };

Lo scopo è quello di popolare la nostra comboBox:
MyCmb.DataSource = System.Enum.GetValues(typeof(Animali));

Per accedere al valore selezionato invece si procede in questo modo:
int valore = ((int)Enum.Parse(typeof(Animali), MyCmb.SelectedValue.ToString(), true));


[avhamazon wishlist="3NHMODHRFICUY" asin="0470187573" linktype="pic" locale="US"]

Se i miei post ti sono stati di aiuto o ti sono sembrati intressanti puoi offrirmi un caffè :)

Torna all'inizio