Research and Development 1/2010-11/project/4PP-TP/pilot

Uit Werkplaats
Ga naar: navigatie, zoeken

Concept

Texas Hold 'em Op Android telefoon, een spel poker[1] spelen tegen de computer of tegen een andere speler via het internet.

Mogelijke features

  • Smileys om mee te bluffen.
  • Multi-player
    • via bluetooth
    • via internet
    • samen op een telefoon
  • Chatten
  • Kansen / Statistiek
  • Chips/kaarten onthouden zodat de app kan worden afgesloten en later kan worden verdergegaan

Mogelijke Problemen

Voor ons uiteindelijk doel van een poker-spel zullen we de volgende dingen moeten kunnen:

Interface

  • Kaarten duidelijk en zichtbaar weergeven, met een beweging-animatie.
    • In onze pilot app zitten al functies om kaarten weer te geven en te bewegen.
    • In onze app worden kaarten getekend door voor de achterkant een simpel plaatje weer te geven.
    • De voorkant wordt gedaan door eerst een rounded rectangle te tekenen en deze dan op te vullen met de relevante nummers, kleuren en tekens ( harten etc. )
  • User Interface voor 'bet', 'fold', 'raise', 'call'.
    • Begin van de beurt onder aan het scherm een aantal buttons.
    • Als er nog geen bet is geweest dan staan er "Check" en "Bet" buttons. ( small blind telt als bet. )
    • Als er al een bet is geweest dan staan er "Call", "Raise" en "Fold".
    • Als er op "Raise" wordt gedrukt wordt de mogelijkheid weergegeven om het aantal chips te selecteren ( zie beneden. )
    • Als er een andere speler aan de beurt is dan staat er een bericht "Waiting on other players turns."
  • Chips van vele mogelijke hoeveelheden goed weergeven.
    • Enkel een getal weergeven is duidelijk maar saai.
    • Enkel chips weergeven wordt snel chaotisch en onoverzichtelijk wanneer er grote inzetten worden gedaan ( bijv. all-in).
    • Ik stel voor dat er verschillende plaatjes zijn voor categorieën inzet. Bijv:
      • 1-5 chips = plaatje één enkele chip.
      • 6-25 chips = plaatje kleine stapel chips.
      • 26-100 chips = plaatje grotere stapel chips.
      • 100+ chips = plaatje enorme stapel chips.
    • Op het scherm wordt dan dit plaatje weergegeven met hieronder een getal van het werkelijke aantal chips.
  • Kan je voor 8 spelers, alle chips, speler namen, kaarten, etc. tegelijk op het scherm hebben?
    • Voorbeeld1 Voorbeeld2
    • Voorbeeld1 is een goede grootte. Grote plaatjes en getallen zodat het goed te zien en lezen is op de kleinere schermen van mobiele telefoons.
    • Voorbeeld2 is een slechte grootte. Te kleine plaatjes en getallen zodat het moeilijk leesbaar is en niet makkelijk te volgen.
    • In beide voorbeelden is duidelijk dat de belangrijkste componenten zijn:
      • Gebruikers met: Foto, Naam, 2 Kaarten, Hoeveelheid chips en Huidige status ( bijv: "Fold", "Check", "Raise $20" etc. ).
      • De 5 gemeenschappelijke kaarten.
      • De huidige pot.
    • Technisch gezien kan elk component met behulp van de canvas class worden weergegeven, bijv:
      • DrawPicture voor Gebruiker fotos en chips.
      • DrawText voor getallen
      • De methodes in onze pilot app ( die ook via Canvas werken ) voor kaarten.
  • Makkelijk de hoeveelheid chips selecteren om in te zetten.
    • De makkelijkste methode lijkt mij om 2 knoppen met "+" en "-" te hebben.
    • Een korte klik op zo'n knoop verhoogt of verlaagt de geselecteerde hoeveelheid chips met 1.
    • Langer dan 2(?) seconden op een knop drukken verhoogt de geselecteerde hoeveelheid chips elke 0,5(?) seconden met 5(?).
    • Hierdoor kan eerst de "+" knop een korte tijd ingedrukt gehouden worden om in de buurt te komen van het gewenste bedrag.
    • En vervolgens met korte klikken het precieze bedrag te selecteren.

Poker

  • Een kaartspel schudden
  • Een stok kaarten op zo'n manier gebruiken dat dubbele en/of missende kaarten niet mogelijk zijn wanneer er kaarten getrokken worden, het dek gesorteerd wordt etc.
  • Een eerlijke random manier van kaarten trekken en het dek sorteren.
  1. Maak een kaartspel (array van kaart objecten)
  2. Een speler(of server?) schud de kaarten
  3. Deel de kaarten

Android

Overig

  • Encryptie van kaarten : Andere spelers kunnen mijn kaarten niet zien

Pilot App

  • We hebben een solitaire app gevonden om mogelijke oplossingen voor de problemen in te vinden en te onderzoeken.
  • Hier een .zip die door Eclipse via "import" kan worden toegevoegd.

Overige problemen

Source Control

Mercurial met als host bitbucket.

Repository: 4PP-TP

Pilot Model

Pilot uit 3 delen:

  • User Interface ( Ramon )
  • Poker model ( Bas )
  • Internet Socket/Server ( Herre )

De app wordt Video Poker. Gebruiker moet zich registreren bij de server die zijn chips bijhoudt en high-scores. Als de gebruiker speelt kan hij via deze server zijn scores met die van andere gebruikers vergelijken.

Model Functies:

  • void placeBet(int)
  • void exchangeCards(bool[5])
  • boolean register(Name, Password)
  • boolean login(Name, Password)
  • void setIP(IP, Port)
  • list<Card> getCards()
  • int getChipCount()
  • int getPayOut()
  • List<string> getPayTable()
  • List<string> getScoreBoard()

Server Functies:

  • boolean register(Name, Password)
  • boolean login(Name, Password)
  • void setIP(IP, Port)
  • void setChips(int)
  • int getChipCount()
  • List<int> getPayTable() ( [0] = Royal Flush, [1] = Straight Flush etc. )
  • List<string> getScoreBoard()

Card Class:

  • Number ( Aas = 1, Boer = 11, Koning = 13 )
  • Suit

Pilot Design

Standard Activity: Playtable ( Backround ) + 5 cards ( middle ) + exchange button ( bottom ) + PayOutTable ( top )

Login Activity: Username textbox + Password textbox + Login button + Register Button

Bet Activity: Total Chips label + Amount textbox + Bet button

Popup Activity: Text Label with message + Close button

Scoreboard Activity: List with usernames & scores + Close button


1: Open App

  • Open Standard Activity.
  • Create Poker Call: Model.
  • Open Login Activity.
  • On Login button press:
    • Call: Model.SetIP(IP, Port)
    • Call: Model.Login(Name, Password)
    • Continue to 2
  • On Register button press:
    • Call: Model.SetIP(IP, Port)
    • Call: Model.Register(Name, Password)
    • Continue to 2

2.1: Login Succes:

  • Close Login Activity.
  • Open Bet Activity.
  • On Bet button press:
    • Call: Model.PlaceBet(int)
    • Continue to 3.

2.2: Login Fail:

  • Open Popup activity with "Login Failed." argument.
  • Reset Login Activity textboxes.
  • On Login button press:
    • Call: Model.SetIP(IP, Port)
    • Call: Model.Login(Name, Password)
    • Continue to 2.

3: Bet made:

  • Close Bet Activity.
  • Call: Model.GetCards().
  • Display cards returned by GetCards().
  • Continue to 4.

4: Select Cards:

  • Selected cards rise a bit.
  • Click on card to select.
  • Call: Model.ExchangeCard(bool[5])
  • Continue to 5.

6: End Turn.

  • Call: Model.GetPayOut().
  • Open Popup activity with "Won: <PayOut> credits!" argument.
  • Open Bet Activity.
  • On Bet button press:
    • Call: Model.PlaceBet(int)
    • Continue to 3.