[OOP]Waarde overnemen andere class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

APEX Ontwikkelaar in een team van Oracle Developer

Bedrijfsomschrijving Wij zijn op zoek naar een APEX Ontwikkelaar om onze opdrachtgever in Den Haag te versterken. In deze rol zul je verantwoordelijk zijn voor het ontwikkelen en onderhouden van de front-end van onze applicaties met behulp van Oracle Application Express (APEX). Je werkt aan zowel inhouse als externe projecten. De sfeer binnen het Oracle team is gemoedelijk en men probeert elkaar te helpen én van elkaar te leren. Zo ontstaat er een prettige en plezierige werksfeer waar ruimte is voor persoonlijke ontwikkeling en groei. Er wordt gewerkt met de meest nieuwe technologieën waardoor je kennis up-to-date blijft. Het bedrijf

Bekijk vacature »

Functioneel applicatiebeheerder - SOP-SYS-SAM

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Functioneel Applicatiebeheerder voor het financiele domein op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je gaat samenwerken in een team van circa 15 functioneel applicatiebeheerders en gaat onderdeel uitmaken van een DevOps team. Met dit team ga je applicaties (laten) ontwikkelen en beheren. Hierbij concentreer je je vooral op

Bekijk vacature »

C# .NET Developer

Functie omschrijving Wij zijn op zoek naar een C# .NET Developer voor een bedrijf in de omgeving van Utrecht! Wil jij werken voor een internationaal bedrijf waar je legio mogelijkheden krijgt als Software Ontwikkelaar? Grijp nu je kans! Je kunt een uitdagende rol gaan vervullen als C#.NET Developer binnen een internationaal bedrijf dat gevestigd is in omgeving van Utrecht. Je zult gaan samenwerken met collega's die over de hele wereld verspreid zitten. Dit bedrijf is zeer vooruitstrevend en werkt met de nieuwste technieken. Als C#.NET Developer ga jij je bezig houden met het volgende: Je blijft op de hoogte van

Bekijk vacature »

Developer Front-end

Functie omschrijving Front-end Developer gezocht! Wij zijn op zoek naar een front-end developer voor een organisatie in de regio Veenendaal die de eindverantwoordelijkheid op zich neemt van alles wat met design te maken heeft. Je hebt in deze functie een adviserende rol hiervoor moet je beschikken over een grote dosis vakinhoudelijke kennis. Je creëert unieke concepten door samen met collega’s en klanten te overleggen over aangeleverde designs. Hiermee draag jij je steentje bij aan de groeiambities van de klant. Jij wordt het vaste aanspreekpunt voor klanten wanneer het gaat over planningen, hierin is het jouw taak om alle betrokkenen goed

Bekijk vacature »

Delphi Programmeur

Functie omschrijving Onze opdrachtgever is gespecialiseerd in kantoor-bedrijfssoftware en zit gevestigd in omgeving Numansdorp. Als programmeur ben jij bij dit bedrijf met het volgende bezig; Je vertaalt technische en functionele ontwerpen naar kwalitatieve software. Je ontwikkelt, ontwerpt en test software. Je maakt daarbij veel gebruik met de volgende tools & technologieën: Delphi 10.3 (Rio), QuickReport 6. Je krijgt in deze rol veel vrijheid en verantwoordelijkheid. Je levert projecten van A - Z op, en werkt daarbij projectmatig en gestructureerd. Bedrijfsprofiel Dit bedrijf richt zich op maatwerk software oplossingen. Deze software oplossingen worden ingezet in de financiële branche. Het betreft een

Bekijk vacature »

PHP Developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »

Senior PHP Developer

Als Senior PHP Developer bij Coolblue zorg je ervoor dat onze webshops elke dag een beetje beter zijn en coach je andere developers op de hard en soft skills. Wat doe je als Senior PHP Developer bij Coolblue? Als PHP Developer werk je met andere development teams samen om onze webshop zo optimaal mogelijk te laten werken en onze klanten blij te maken. Hoewel je een PHP Developer bent, sta je open om C# of Typescript in te zetten of te leren. Ook PHP Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om

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 »

IT Manager team PaaS

TenneT is hard groeiende om haar ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Lead PaaS die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je wordt de Teammanager (Lead) van een nieuw team binnen de afdeling Basic van Information Technology and Facilities (ITF) van TenneT. Het team heet Platform as a Service. Hier wordt elke dag in een goede sfeer met zijn allen hard gewerkt om vanuit IT

Bekijk vacature »

Medior .NET Ontwikkelaar

In het kort Als .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan we deze uitdaging graag met

Bekijk vacature »

Front-End React Developer

Als Front-End React Developer verbeter je de user experience van onze eigen webapplicaties voor onze collega's binnen Coolblue. Wat doe je als Front-End React Developer bij Coolblue? Als Front-end React Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten met React.js. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Daarnaast ben je trots op je werk en verwelkomt alle feedback. Ook Front-end React Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Verbeteren van de gebruiksvriendelijkheid van onze webshop

Bekijk vacature »

Medior/senior front end developer

Functie Vanwege de groei binnen het bedrijf zijn ze op zoek naar een Technische front end developer. Momenteel hun front end back end team gescheiden aan het werk. Hier willen ze verandering in krijgen. Omdat ook veel interne applicaties ontwikkeld worden zoeken ze iemand die hen kan helpen om de interne applicaties te voorzien van de juiste Vue.js componenten. Zodoende willen ze de interactie tussen front end en back end versoepelen en de volgende stap binnen het platform gaan zetten. Deze componenten die jij ontwikkeld zullen in elk project gebruikt worden. Het back end team bestaat momenteel uit 8 ontwikkelaars

Bekijk vacature »

C#.NET developer

Functie Het development team bestaat momenteel uit vijf backend C#/.NET ontwikkelaars. Op dit moment zit één ontwikkelaar dedicated op de mobiele applicatie. Als team werk je samen aan het zelf ontwikkelde software platform. Dit bestaat uit zowel apps als websites. Om het systeem door meer dan honderdduizenden gebruikers wordt gebruikt is het bijna vanzelfsprekend dat de kwaliteit van het product hoog moet liggen. Het systeem bestaat uit drie projecten. Je werkt dus aan deze drie projecten waarbij de focus op z’n tijd verschuift. De technieken die worden toegepast zijn o.a. .NET Core, Xamarin, C# en MVC. Je zal dus met

Bekijk vacature »

.NET developer

Functie Als junior .NET Developer start jij in een team met 15 developers. In het team is er genoeg senioriteit om ervoor te zorgen dat jij de juiste begeleiding krijgt. Jij begint als eerst alle software pakketten en processen eigen te maken. Vervolgens ga jij deze software programmeren, onderhouden en testen. Ook ga jij research doen naar nieuwe mogelijkheden en zoek jij uit hoe je dit kan implementeren. Jullie werken intern op project basis en afhankelijk van het project werken jullie wel of niet iedere ochtend met een standup. 50% van jullie werkzaamheden is maatwerk en de overige 50% is

Bekijk vacature »

C#.NET developer

Functieomschrijving Wij zijn op zoek naar een gepassioneerde Full Stack C#.NET Software Developer. Als Software Developer ben je verantwoordelijk voor het ontwikkelen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere ontwikkelaars en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Testen en valideren van de ontwikkelde software. Ontwikkelen en onderhouden van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je gaat aan de slag met diverse technologieën en frameworks. Denk hierbij aan C#, JS frameworks, HTML, CSS, TypeScript,

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

22/12/2024 09:01:29
 
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.