Research and Development 1/2010-11/project/4PP-TP/pilot
Inhoud
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.
- Maak een kaartspel (array van kaart objecten)
- Een speler(of server?) schud de kaarten
- Deel de kaarten
- Functie voor bepalen van de beste hand.
- AI maken die een beetje uitdaging geeft.
Android
- Hoe werkt bluetooth op Android?
- Spelen via internet, hoe werkt internet op Android? (Zonder server? Met server?)
- Hoe bewaar je de state van het spel op de Android?
- Data Storage op Android Developers
- Keuze: in een bestand of in een database.
- Werkt multiplayer anders met meer dan 2 spelers?
- Met bluetooth kan je meer dan twee toestellen verbinden.
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.