[OOP]Waarde overnemen andere class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Developer

As a PHP Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a PHP Developer at Coolblue? As a PHP Developer you work together with other development teams to make our webshop work as optimal as possible and to make our customers happy. Although you are a PHP Developer, you are not averse to a little TypeScript or other technologies that might be used. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing vanilla PHP code. Working with

Bekijk vacature »

.Net Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

Bekijk vacature »

Lead React Developer

Dit ga je doen Als Lead React Developer zul jij je voornamelijk gaan bezighouden met: Het werken aan tal van uiteenlopende projecten waar gloednieuwe (web)applicaties van scratch af aan ontwikkeld worden met o.a. React (Native) en Drupal; Het aansturen van een team bestaande uit 5-6 talentvolle en gedreven ontwikkelaars; Het adviseren en meedenken over nieuwe (technische) oplossingen en te gebruiken tools/frameworks; Het meedenken over de architectuur en de juiste implementatiebeslissingen maken; De doorontwikkeling van huidige applicaties. Hier ga je werken Als je inderdaad een ervaren Lead React Developer bent die zichzelf graag nog verder wil ontwikkelen dan is het goed

Bekijk vacature »

Senior Mobile Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Senior Mobile Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

Full Stack Developer/ Applicatie Ontwikkelaar

Wat jij doet Als Applicatie Ontwikkelaar ben je onderdeel van het team die de Rimote omgeving ontwikkeld en onderhoud. Hierbij kan je denk aan de cloud, on premise en webapplicaties welke worden gebruikt in bijvoorbeeld industriële bakkerijen, biogasinstallaties en kwekerijen. Deze applicaties verzorgen (remote) de aansturing en monitoring van processen, machines en robots. Van a tot z ben je betrokken bij projecten. Dit betekent vanaf ontwerp tot oplevering. Je moet samen met jouw team een goed product neer zetten. Dit begint met het opzetten van het ontwerp. De basis van de software moet staan als een huis. Daarvoor moet jij

Bekijk vacature »

Developer

Functie omschrijving In deze functie ga je werken als C# Developer. Jij gaat aan de slag met de volgende taken: Maatwerk software bouwen; Huidige softwareprojecten verder uitbouwen en optimaliseren; Ideeën van de klant omzetten naar handige oplossingen en tools; Bovenstaande doe je middels de Microsoft- stack: C#, ASP.NET en MVC/ Entity Framework. Ben je net afgestudeerd aan een HBO opleiding Informatica, aarzel dan niet om te solliciteren. Dit is namelijk de ideale startersfunctie! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van websites. Dit is door

Bekijk vacature »

Junior .NET developer

Functie Om half 9 kom jij binnen en pak jij als eerst natuurlijk een bakje koffie of thee. Vervolgens ga jij je voorbereiden op de stand-up van kwart voor 9. Zijn er bijvoorbeeld dingen waar jij nog tegen aan loopt? Of is er nog code die getest of gereviewd moet worden? Vervolgens starten jullie met de stand up en na de stand up zoeken jullie elkaar op en gaan jullie aan de slag. Als team met 6 developers werken jullie in drie wekelijkse sprints. Het einde van een sprint is altijd op een donderdag zodat jullie op vrijdag de demo

Bekijk vacature »

Fullstack developer

Functie omschrijving We are looking for a dutch native speaker Wil jij werken als Senior Developer en werken aan een applicatie die duizenden marketingcampagnes automatisch aanstuurt? Dit is je kans! Kom werken voor onze opdrachtgever en in deze rol zul je veel vrijheid en verantwoordelijkheid krijgen om gezamenlijk de applicatie naar een hoger plan te tillen. Wat ga je verder doen: Optimaliseren, beheren en uitbreiden van onze applicatie; Het bouwen van aansluitingen op de systemen van partners middels API’s; Meedenken over de technische/ontwikkel-standaarden; Proactief verbeterpunten voorstellen. Bedrijfsprofiel Het is een organisatie die met een team van verschillende developers én marketeers

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

Medior Front-end Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Medior Front-end Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

Fullstack Webdeveloper .NET Azure Big Data SaaS

Bedrijfsomschrijving Deze klant van ons is recentelijk onderdeel geworden van een grote moederorganisatie, ze zijn dé partij als het gaat om software maken voor ambitieuze ondernemers, ze maken maatwerk software. Vanuit het fantastisch vormgegeven hightech gebouw te Rotterdam centrum werken ze met zo'n 40 medewerkers aan hoogwaardige software gericht op financiële data, betaalinformatie, maar ook backoffice software. De software wordt webbased, desktop en mobile aangeboden en er worden zeer moderne ontwikkeltechnieken toegepast. Je moet dan denken aan patroonherkenning, Big Data, Machine Learning en OCR. Als Developer, ongeacht je niveau, ga je hier te maken krijgen met de allerleukste kant van

Bekijk vacature »

3D BIM Add-on Developer

As a 3D BIM add- on developer at KUBUS, you will develop add-ons (called BCF- Managers) to the leading building information modeling (BIM) programs Revit, Navisworks, Archicad, AutoCAD and Tekla Structures. BCF Managers enable data transfer between BIM software and BIMcollab. You will work on both the front- and the back-end. As a software company, KUBUS is in a unique position. We build our own products that are used by tens of thousands of users worldwide. Our company is just the right size: big enough to make a real impact in the market, but small enough that as an individual

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Java developer

Als Java Developer bij Sogeti ben je onderdeel van onze toonaangevende community die bestaat uit ruim 100 gepassioneerde Java professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze top-opdrachtgevers. Geen werkdag is hetzelfde! Je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfs kritische systemen voor onze klanten in regio Noordoost zoals DUO, ING, CJIB en Tendernet. Natuurlijk krijg jij de mogelijkheid je verder te certificeren in dit vakgebied. We organiseren regelmatig technische Meetups en doen veel aan kennisdeling. Sogetisten hebben plezier in hun werk en staan

Bekijk vacature »

Lead developer

Functie Als Lead developer wordt jij onderdeel van een multidisciplinair team van circa 23 software engineers. Als team werken jullie agile en zijn termen als Continuous Integration en Continuous Delivery dagelijkse koek. Jullie werken aan uitdagende en afwisselende projecten met als doel klanten een totaal oplossing aan te kunnen bieden. Jij wordt verantwoordelijk voor complete projecten waarbij jij als verantwoordelijke zorgt dat het project op de juiste manier blijft draaien. Zo haal jij ook de requirements op bij de klant en kijk jij samen met het team en met de salesafdeling hoeveel uren hiervoor nodig zijn. Daarnaast stuur jij jouw

Bekijk vacature »
Dizzy

Dizzy

24/06/2009 22:53:00
Quote Anchor link
PHPer,

Het is vakantie, hier en daar dus terug scriptneigingen.
Vandaag zijn de microben weer overgeslagen op mij en heb een project bedacht. Een Texas Hold'em script. Dit is eveneens een goede reden om te beginnen met OOP. Ik heb enkele tutorials gelezen, onderandere ook van deze site. Daarin staat duidelijk vermeld dat OOP een denkwijze is. Het verband tussen Classes zoals : maand extends dag, mastadizzy extends gebruiker, et cetera.
Nu zie ik deze logische verbanden niet echt terug in classes om kaarten te schudden en de kaarten te delen.

Even over de vraag waarmee ik zit. Hoe kan ik mijn geschudde kaarten ($kaarten) gebruiken in mijn volgend class? Zoals je wel kan zien schud ik de kaarten in mijn eerste class, en wil ik om te testen die geschudde kaartenarray oproepen in mijn volgende functie van een andere class (delen).

edit: Even vergeten bij te vermelden. Ik krijg netjes de array te zien die geprint wordt (dus de output van de eerste print_r van de functie schudden). daarna krijg ik 2 errors.

Notice: Use of undefined constant kaarten - assumed 'kaarten' in D:\wamp\www\class.inc.php on line 20

Notice: Object of class delen could not be converted to int in D:\wamp\www\class.inc.php on line 20
1


class.inc.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?PHP

class shuffle_kaarten
{
    var
$kaarten = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52);

    function
schudden()
    {

        shuffle($this->kaarten); //schud array met kaarten
        print_r($this->kaarten); //print array geschudde kaarten
    }
}


class delen
{
    var
$aantal_spelers;
    
    function
showkaarten()
    {

        print_r($this-kaarten); //om te testen array met geschudde kaarten weergeven    
    }
    
    function
delen_speler1()
    {

        for($i=1;$i<=9;$i++)
        {

            echo $kaarten;
        }
    }
    function
delen_computer()
    {
        
    }
}

?>



Het PHP bestand dat de classes oproept:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?PHP
include 'class.inc.php';

$shuffle = new shuffle_kaarten;
$shuffle->schudden();

$kaartendelen = new delen;
$kaartendelen->showkaarten();


?>


Bij voorbaat dank!
Gewijzigd op 01/01/1970 01:00:00 door Dizzy
 
PHP hulp

PHP hulp

17/11/2024 19:53:56
 
TJVB tvb

TJVB tvb

24/06/2009 23:10:00
Quote Anchor link
Objecten zijn voorwerpen/mensen/dingen. Delen is een handeling en geen object dus geen class. shuffle_kaarten ook niet.

Verder hoor je geen echo/print etc in een class te doen maar netjes het resultaat terug te geven. (tenzij de class een view is, daar kan natuurlijk wel output)

pseudocode
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
    class TexasHoldEm
    {
        private $kaarten = array();
        private $spelers = array();
        private $aantalBijDelen = 9;
        
        public function __construct()
        {

            $this->refillKaarten();
        }

        
        public function schudden()
        {

            $this->kaarten = shuffle($this->kaarten);
        }

        
        public function delen()
        {

            $kaartenSpeler = array();
            for($i=0; $i< $this->aantalBijDelen; $i++)
            {

                $kaarten[] = array_shift($this->kaarten);
            }
        }

        
        public function addSpeler($speler)
        {

            $this->spelers[] = $speler;
        }

        
        public function refillKaarten()
        {

            $this->kaarten = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52);
        }
    }

?>


Edit:
Vergeet bijna het gebruik.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    $casinoTafel
= new TexasHoldEm();
    $casinoTafel->schudden();
    $kaartenSpelers = $casinoTafel->delen();
    $kaartenComputer = $casinoTafel->delen();
?>


Je kunt het opslaan van de kaarten ook netjes in de class doen.
Gewijzigd op 01/01/1970 01:00:00 door TJVB tvb
 
Dizzy

Dizzy

24/06/2009 23:20:00
Quote Anchor link
Ok, hier kom ik al een heel eind mee verder!
Ik vond het persoonlijk raar om alles in 1 class te plaatsen.
Uiteindelijk, moet ik de validator ook in deze class schrijven? Of kan ik de denkpiste volgen: validator extends Texas hold'em ... omdat een validator een deel is van texas hold'em?

Bedankt alvast voor het bovenstaande!
 
PHP erik

PHP erik

24/06/2009 23:59:00
Quote Anchor link
"omdat een validator een deel is van texas hold'em"
Je zegt zelf al waarom "validator extends texas hold'em" niet kan. Validator is een ONDERDEEL van texas hold'em, het is niet "een texas hold'em"

Maar even terug op je originele post. Je moet bij poker denken aan objecten als:

Game
Player
Card
Deck
Dealer
Pot
Stack
Combination (bijv: Royal Flush of 3 of a kind)
Table

Je start een Game. Die deelt via je Dealer een aantal Cards aan een Player. De Cards haal je uit je Deck zodat er geen dubbele kaarten komen. Elke Player heeft een Stack (aantal fiches), bij inzetten gaat een deel van de Stack naar de Pot. Na inzetten komen er enkele Cards op de Table. Na nog een paar keer inzetten kijk je bij elke Player of zijn Cards met de Cards op de Table een Combination vormen. Als een Player een Combination heeft kun je een compare() uitvoeren tussen verschillende Players om te kijken wie de hoogste combinatie heeft. Vervolgens gaat de inhoud van de Pot naar een Player of wordt het gesplit. Een aantal van deze pokerregels zul je dus in Game (of in Dealer) programmeren, die gebruikt gewoon al die andere objecten.

Qua combinaties.Je maakt dus classes als "RoyalFlush extends Combination" om een combinatie te programmeren, met een functie als RoyalFlush::isHit($playerCards, $tableCards) die true returnt als de kaarten van een speler en de kaarten op tafel valideren tegen geldige pokercombinaties.

Heb ik je al op ideeën gebracht? Er zijn 1000 manieren om dit te doen, bovenstaand zou ook in minder classes kunnen (zo kun je een Stack ook zien als een eigenschap van een Player in plaats van een apart object, maar dat is een keuze).
Gewijzigd op 01/01/1970 01:00:00 door PHP erik
 
Jurgen assaasas

Jurgen assaasas

25/06/2009 11:01:00
Quote Anchor link
Ik denk dat je hier echt stap voor stap moet gaan denken. Zeker als je het nog wil gaan leren. Begin eens makkelijk met een class Deck en een klas Cards.
 
Jacco Engel

Jacco Engel

25/06/2009 11:14:00
Quote Anchor link
Regel 5 kan je beter range gebruiken
 
Dizzy

Dizzy

25/06/2009 12:27:00
Quote Anchor link
Een paar grote wijzigingen gemaakt.

Allereerst heb ik schudden en delen in 1 class gestoken. Zoals TJVB meldde.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?PHP
class TexasHoldEm
{
    private $deck = array(); //array maken voor 52 speelkaarten
    private $spelers = array();
    private $TeDelen = 9; //aantal te delen kaarten (2 voor speler, 2 voor computer, 5 voor de tafel)
    private $playerCards = array(); //array maken voor de kaarten van de speler
    private $computerCards = array(); //array maken voor de kaarten van de computer
    private $tableCards = array(); //array maken voor de kaarten die op tafel komen (flop, turn en river)
    
    public function __construct()
    {

        $this->BijVullen();
    }
    
    public function BijVullen()
    {

        $this->deck = range(1,52); //plaats alle kaarten in het deck
    }
    public function schudden()
    {

        shuffle($this->deck); //schud het deck
    }
    
    public function delen()
    {

        for($i=0; $i < 2; $i++)
        {

            array_push($this->playerCards, array_shift($this->deck)); //geef eerst kaart aan speler
            array_push($this->computerCards, array_shift($this->deck)); //geef daarna kaart aan computer
        }
        for($i=0; $i <5; $i++)
        {

            array_push($this->tableCards, array_shift($this->deck)); //5 kaarten die later op tafel verschijnen
        }
    }
    
}

?>


Jacco schreef op 25.06.2009 11:14:
Regel 5 kan je beter range gebruiken
Bedankt, dit zijn heel waarde volle tips :). Zeker omdat ik nog niet zo'n grote functie kennis heb.

Jurgen schreef op 25.06.2009 11:01:
Ik denk dat je hier echt stap voor stap moet gaan denken. Zeker als je het nog wil gaan leren. Begin eens makkelijk met een class Deck en een klas Cards.
Idd, daarom wil ik er zeker van zijn dat mijn schudden en delen goed zit.
Wat bedoel je met class Deck en class Cards? Kan je even uitleggen wat je denkwijze is voor deze 2 klassen en wat ze doen?
 
Joren de Wit

Joren de Wit

25/06/2009 12:41:00
Quote Anchor link
Kaarten krijgen nu een waarde 1-52, maar hoe ga je later in het spel bepalen wat de eigenlijke waarde van die kaarten is? Met andere woorden, hoe ga je constateren dat iemand een flush of straight heeft of zelfs een paartje?

Zoals je ziet heeft een kaart meer eigenschappen dan enkel een nummer uit de reeks 1-52. Een kaart heeft een kleur en een waarde. Dat zou je heel mooi kunnen vastleggen in een object Card, een instantie van de klasse Card.

Vervolgens zou je kunnen kiezen om ook een Deck klasse te gebruiken. Een Deck object zou dan in eerste instantie 52 Card objecten bevatten. De method schudden() is dan een toepassing op een Deck en zou in die klasse thuis horen. Ook zou die klasse een method dealCard() kunnen hebben waarmee er 1 kaart uit het Deck gedeeld wordt. De delen() method uit je TexasHoldEm klasse roept dan een aantal keer die dealCard() method aan.

Een overzichtje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
class Card {
  private $sSuit;
  private $sValue;

  public function __construct($sSuit, $sValue) {
  
  }


  // Aantal methods voor verkrijgen van de waarde en de kleur
}

class Deck {
  private $aCards;

  public function __construct() {
    // Vul $this->aCards met 52 Card objecten
  }

  public function dealCard() {
    return array_shift($this->aCards);
  }
}


class TexasHoldEm {
 // Hier de methods voor het spelen van het spel
}
?>


Mogelijk wil je dit ook nog uitbreiden met bijvoorbeeld een Player object waar je tijdens het spel kaarten aan toe kun wijzen. Er zijn heel veel mogelijkheden, maar dit geeft wel een beetje de basis.
 
Dizzy

Dizzy

25/06/2009 12:54:00
Quote Anchor link
Blanche schreef op 25.06.2009 12:41:
Kaarten krijgen nu een waarde 1-52, maar hoe ga je later in het spel bepalen wat de eigenlijke waarde van die kaarten is? Met andere woorden, hoe ga je constateren dat iemand een flush of straight heeft of zelfs een paartje?

Mijn denkwijze was bijvoorbeeld:
klaveren [1-13] waarbij 1 ace, 11 jack, 12 queen en 13 king.
schoppen [14-26]
harten [27-39]
koeken [40-52]
dus, al je 1 en 14 vast hebt (2 aces dus) ... checken tussen welke waardes liggen. 14 ligt dus in de 2de categorie (schoppen) waardoor je 14-((2-1)*13) doet. (14=nummer-kaart; 2=2de categorie; 1=om de waarde te corrigeren. Zo wordt er geen verschil gemaakt van 26 wat resulteert in een negatief getal; 13=zoveel kaarten zijn er van 1 soort/zitten er in 1 range)
Wat dus waarde 1 terugstuurt. en als 2 waardes gelijk zijn aan elkaar. In dit geval heb je dus (1;1) vast wat dus een pair geeft :)
Inderdaad is dit niet de meest praktische methode, maar in andere poker-scripts(volgens een goede maat van mij) gebruikt men deze methode ook.

Edit:
Hoe kan ik ervoor zorgen dat $aCards in de class Deck niet dezelfde kaarten afhaalt bij de Card-classe?
Want als ik het goed begrijp moet ik 52 keer de Card-classe oproepen in de constructor van class Deck?
Gewijzigd op 01/01/1970 01:00:00 door Dizzy
 
Joren de Wit

Joren de Wit

25/06/2009 13:08:00
Quote Anchor link
Het lijkt mij veel handiger om bijvoorbeeld een method isPair() te hebben die dat voor je doet.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
public function isPair(Card $oCard1, Card $oCard2) {
  if($oCard1->getValue() == $oCard2->getValue()) {
    return true;
  }

  return false;
}

?>

En datzelfde zou je voor de andere combinaties van kaarten kunnen doen. Tenslotte zou je al deze controles met 1 method toe kunnen passen op de kaarten in de hand en de gemeenschappelijke kaarten...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Nicoow Unknown

Nicoow Unknown

25/06/2009 13:16:00
Quote Anchor link
Dit komt me bekent voor,
Ik ben er namelijk ook mee bezig :P

Dit is momenteel mijn opzet voor de deck class.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php

/**
 * @author Nico Kaag
 * @copyright 2009
 */

error_reporting(E_ALL);

class card
{
    public $color;
    public $value;
    function
__construct($color, $value)
    {

        $this->color = $color;
        $this->value = $value;
    }
    
    
}


class deck
{
    //Player Variables
    public $deck;
    private $aSuits = array('H', 'D', 'S', 'C');
    private $aValues = array('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A');
    
    function
__construct()
    {

        $this->deck = array();
        foreach($this->aSuits as $sSuit)
        {

                    foreach($this->aValues as $sValue)
            {

                         array_push($this->deck, new card($sSuit, $sValue));
                    }
          }
    }
}


?>


en dit is mijn dealer class
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php

/**
 * @author Nico Kaag
 * @copyright 2009
 */

error_reporting(E_ALL);

class dealer
{    
    public $deck;
    public $playerCards;
    private $shuffledDeck;
    public function __construct()
    {

        $this->deck = new deck();
    }

    
    public function dealCards($nrOfPlayers, $nrOfCards)
    {

        $this->shuffleDeck();
        for ($j = 0; $j < $nrOfCards; $j++)
        {

            for ($i = 0; $i < $nrOfPlayers; $i++)
            {

                $this->playerCards[$i][$j] = array_shift($this->shuffledDeck);
            }
        }
    }

    
    private function shuffleDeck()
    {

        $this->shuffledDeck = $this->deck->deck;
        shuffle($this->shuffledDeck);
    }
}


?>



zoals je wel ziet heb ik hier het schudden onder de dealer gezet.
Een deck schud zichzelf namelijk niet.
Dat word geschud door de dealer, dus dat is dan ook een functie die de dealer heeft.
Zo ook bij het delen.
De kaarten worden ook toegekend aan een object player/speler.
Dit gebeurt hier nog niet, omdat k nog niet zo ver ben :P
Gewijzigd op 01/01/1970 01:00:00 door Nicoow Unknown
 
Joren de Wit

Joren de Wit

25/06/2009 13:27:00
Quote Anchor link
Ziet er goed uit alleen bij het schudden van het deck doe je iets niet helemaal goed. Het schudden is een bewerking op het deck en zou dus een method in de deck klasse moeten zijn. Verder hoort er in je dealer klasse geen array met kaarten meer te staan, maar enkel een verwijzing naar het deck dat gebruikt wordt. Dat is immers het object dat jouw kaarten bevat.

Het delen in de dealer klasse gebeurt dus ook door aan je deck object om een kaart te vragen: $deck->dealCard() bijvoorbeeld. In die dealCard() method vind dan de array_shift() plaats.

Verder zou je ook nog een object Player kunnen introduceren. Op die manier ben je af van de array met playerCards in de dealer klasse. Daar heb je dan enkel nog een array met Player objecten die tijdens het delen elk weer kaarten toegewezen krijgen: $player_a->assign() bijvoorbeeld.

Kortom, de basis is goed, alleen zorg dat je de eigenschappen en bewerkingen bij de juiste klasses houdt.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Nicoow Unknown

Nicoow Unknown

25/06/2009 13:56:00
Quote Anchor link
hmm,,
Dus eigenlijk krijg je in de deck class een functie die shufled, en dan in de dealer eentje die hem aanroept.
Voor de rest ben k niet bekend met referenties in PHP, in C# kan ik gewoon ref gebruiken.
voor de rest lees je in de laatste 2 regels dat ik dat ook van plan was/ben.
Voor de rest bestaat er nog een class table, waaraan het spel plaats vind.
en nog een class waarvoor ik eigenlijk niet echt een goede naam weet, maar die handelt alle kaarten af, en berekent het aantal punten.
 
Dizzy

Dizzy

25/06/2009 13:59:00
Quote Anchor link
nico schreef op 25.06.2009 13:56:
en nog een class waarvoor ik eigenlijk niet echt een goede naam weet, maar die handelt alle kaarten af, en berekent het aantal punten.

Validator misschien :)?
 
Jurgen assaasas

Jurgen assaasas

25/06/2009 14:06:00
Quote Anchor link
Dizzy schreef op 25.06.2009 13:59:
nico schreef op 25.06.2009 13:56:
en nog een class waarvoor ik eigenlijk niet echt een goede naam weet, maar die handelt alle kaarten af, en berekent het aantal punten.

Validator misschien :)?


Lijkt me niet. Een score berekenen is niet valideren. Voor de scores zou ik simple een klasse Score maken.
 
Dizzy

Dizzy

25/06/2009 18:24:00
Quote Anchor link
Hoe moet ik de kaarten delen aan de tafel?
Alle 5 de kaarten gewoon in één array gooien? Dit in een aparte functie? (ik heb nu "dealCard" die kaarten deelt alleen aan de spelers). Of moet ik dit doormiddel van nog een FOR-lus bij de "dealCard" toevoegen?

Ik had in mijn gedachte om nog eens 3 aparte functies te maken (dealFlop, dealTurn, dealRiver), maar dit lijkt mij geen goed idee :).

Dit is een deel van mijn Deck-class:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
    public function schudden() //deck schudden
    {
        shuffle($this->deck);
        $shuffledDeck = $this->deck;
        return $shuffledDeck;
    }

    
    public function dealCard($aantalPlayers, $nrCards) //aantal spelers
    {
        $shuffledDeck = $this->schudden();
        
        for ($p=1; $p<=$aantalPlayers; $p++) //delen aan de spelers
        {
            for ($c=1; $c<=$nrCards; $c++)
            {

                $playerCards[$p][$c] = array_shift($shuffledDeck);
            }
        }
    }

?>


PS: hoe kan ik de array $shuffledDeck na het uitvoeren van dealCard terug aanroepen? Ik heb al geprobeerd een functie dealFlop te maken, maar als ik $this->shuffledDeck probeer aan te roepen is dit een lege array. Dit omdat ik niet nogmaals mag schudden (wat dus een compleet nieuw deck oplevert).
Gewijzigd op 01/01/1970 01:00:00 door Dizzy
 
Nicoow Unknown

Nicoow Unknown

25/06/2009 18:47:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
public function schudden() //deck schudden
    {
        shuffle($this->deck);
        $this->shuffledDeck = $this->deck;
        
    }

?>


eigenlijk moet je tafel er zo iets uitzien:
(even snel uit de losse pols)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class table
{
public $players; //een array met alle player objecten
public $deck; //de stapel met kaarten, ook weer een array met objecten dus
public $dealer; //de dealer, die het bovenstaande deck kan aanpassen, en kaarten kan delen aan de bovenstaande spelers.

//alle classes ook aanmaken


$dealer->dealCards(); // en dan moet de functie dealCards zo worden aangepast dat hij weet wat te doen.
Je kan hem ook een lijst met players laten returnen, en dan $players gewoon zo te declareren.
}

?>

Ik weet niet of je al een class diagram heb gemaakt, maar dat zou wel heel handig wezen, voornamelijk voor jezelf.
Je gaat gewoon je probleem opdelen in meerdere stukken.
je begint bij de essentie van poker,
Die ligt bij de tafel.
de tafel heeft verschillende dingen nodig om er een potje poker op te kunnen spelen.
dit zijn:
een dealer
een *x* aantal spelers
een stapel met kaarten

Ga nu gewoon een paar potjes spelen, en speel ieder onderdeel eens zelf, en schrijf dan op wat je allemaal moet doen.
Dat zijn dan de functies die ieder "ding" heeft.
Om dan nog even bij het schudden van de kaarten terug te komen,
Ik ben het niet helemaal eens met blanche dat schudden een onderdeel is van de kaarten, het is een bewerking die door de kaarten word gedaan, maar omdat je de standaard functie shufle al heb, kan je (vind ik) die functie direct op de kaarten uitvoeren, vanuit de dealer class.
Anders krijg je in de deck class een functie als deze:
public function shuflleCards()
{
shuffle($this->deck);
}

en dan heeft de dealer een functie die de functie shuflleCards() aanroept, en die dan weer op het deck aanpassen, beetje dubbel op vind ik.

voor de rest moet je wel een beetje consequent zijn in je taal gebruik,
of engels, of nederlands, niet alle 2.
Bij voorkeur zelfs engels.
 
Dizzy

Dizzy

25/06/2009 19:09:00
Quote Anchor link
Ok, ik ga zometeen alles in het Engels plaatsen.

Ik heb even een schematje gemaakt. Hopelijk bedoel je dit en heb ik het goed gedaan:
http://g.imagehost.org/download/0674/naamloos
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.