kaartspel programmeren in java
-
Hi!
Wij zijn voor ons profielwerkstuk een vorm van het kaartspel SET aan het programmeren in java. We hebben de 81 kaarten al gemaakt. De kaarten hebben vier verschillende eigenschappen: hoeveelheid, kleur, vorm en vulling. Van elke eigenschap zijn drie varianten. Een 'set' bestaat uit drie kaarten. Bij alle drie de kaarten moet elke eigenschap precies gelijk zijn of juist volledig verschillend zijn.
De kaarten zijn nu allemaal losse SVG bestanden.
Er moeten twaalf random kaarten verschijnen op het scherm, waar geen dubbele tussen zitten. Momenteel kunnen we wel twaalf random kaarten laten zien, maar soms zitten daar twee dezelfde kaarten tussen.
Daarnaast moeten we de kaarten eigenschappen toekennen, om te kunnen laten controleren of het een set is.
Dus onze vragen zijn:
-Hoe kunnen we zorgen dat er geen dubbele kaarten tussen de twaalf random kaarten zitten?
-Hoe kunnen we de eigenschappen aan de kaarten toekennen zodat er gecontroleerd kan worden of het een set is of niet?Alvast bedankt!
Niké, Masha en Ella
-
Hey @pws14
Klinkt als een tof project!
- Om ervoor te zorgen dat er geen dubbele kaarten tussen zitten kun je denk het beste ergens in je main klasse een lijst bijhouden van Java objecten die de 12 kaarten die op tafel zijn voorstellen. Dan moet je vervolgens voordat je daar een kaart aan toevoegd eerst in die lijst kijken of die er niet al tussen zit.
- De reden dat ik wil dat die 12 kaarten hierboven als een java object in die lijst komen is omdat je dan gelijk bij die objecten hun eigenschappen kan vergelijken of ze een set zijn. Weten jullie hoe je een java object maakt met jullie eigen eigenschappen?
Als jullie daar uitkomen moet dat voor de rest wel lukken denk ik, anders moet je vooral door vragen!
Groetjes,
Jip -
Hi Jip, bedankt voor je reactie!
Wij hebben tot nu toe het volgende bedacht/ geprogrammeerd:
- 81 afbeeldingen met de naam k + een getal van 0 t/m 80
- Omdat we 12 random kaarten willen, hebben we 12 variabelen aangemaakt: k1 t/m k12 en deze een random waarde gegeven van 0 tot 80 dmv de functie Math.floor(Math.random() * 81)
- de afbeeldingen laden we vervolgens in html door <script>document.write("<img src=kaarten/k" + k1 +".svg i>");</script> (dit voor alle kaarten, dus k1 t/m k12)
- om ervoor te zorgen dat de random waardes voor k1 t/m k12 niet toevallig hetzelfde zijn, hebben we dit bedacht: while (k1==k2 || k1==k3 || k1==k4 || k1==k5 || k1==k6 || k1==k7 || k1==k8 || k1==k9 || k1==k10 || k1==k11 || k1==k12) { k1 = Math.floor(Math.random() * 81);} en dan vervolgens hetzelfde voor de rest van de kaarten k2 t/m k12. Hierdoor, krijgt de kaart een nieuwe waarde als deze overeenkomt met de waarde van een van de andere kaarten.
- het is de bedoeling dat er 3 kaarten aangeklikt worden (met elk een eigen waarde voor de eigenschappen vorm, kleur, aantal en vulling, afhankelijk van de naam/ het nummer van de kaart) en dus dachten wij aan iets in deze richting, waarbij wij de 3 varianten van elke eigenschap de waardes 0, 1 en 2 hebben gegeven:
--we hebben eerst onclick='myFunction1()' in de html code van de afbeelding geplaatst--
function myFunction1() {
var kclick1 = k1;
}
if kclick1 = 0 {
var vorm1 = 0;
var kleur1 = 0;
var aantal1 = 0;
var vulling1 = 0;
}
Het probleem hierbij is echter dat je deze 5 regels 81 keer moet herhalen, voor elke kclick(1 t/m 3) dus 243 keer. En je moet op een of andere manier, aan de hand van de volgorde waarin de kaarten aangeklikt worden, bepalen welke kaarten kclick1, kclick2 en kclick3 worden.
De dingen die wij nu hebben bedacht kunnen vast een stuk efficiënter, maar wij weten niet hoe. Het zou inderdaad handig handig zijn de kaarten in een lijst bij te houden, maar wij weten niet hoe we dit het beste kunnen aanpakken...Op welke manier kunnen wij onze tot nu toe bedachte code verbeteren en hoe werkt het bijhouden van de kaarten in een lijst?
Alvast bedankt!
Ella, Masha en Niké
-
Hey @pws14
Ojee ojee ojee, ik ben bang dat we niet helemaal op 1 lijn zitten. Zo te horen programmeren jullie niet in Java maar in JavaScript! Java combineren met HTML gaat namelijk helemaal niet. Even kijken of ik jullie nog goed kan helpen hoor, wat jullie willen in JavaScript is namelijk veel moeilijker dan als we in Java bezig waren, maar we gaan eruit komen.
Wat ik eerst heb beantwoord geldt nog steeds wel, alleen het stukje over de "main klasse" moeten jullie negeren. Gelukkig kan JavaScript namelijk ook objecten maken! En dat is precies wat we nodig hebben.
Een "Object" in programmeer termen is namelijk precies wat je denkt dat het is. Een echt object in de normale wereld heeft eigenschappen. Ik als persoon heb bijvoorbeeld een naam, een leeftijd en een adres. Wat handig is bij het programmeren is als we 2 personen willen maken, we niet 2 keer defineren dat een persoon een naam en een leeftijd en een adres heeft. Maar dat we dat maar 1 keer doen. We defineren dan eerst wat een persoon is. Namelijk een object met een naam, een leeftijd en een adres. En daarna als we iemand willen toevoegen, zeggen we alleen maar. Dit is een persoon, geef hem de waardes: Jip, 20 etc.
Wat al helemaal top is dat je dan ook functies kan toevoegen aan deze objecten. Dat klinkt als wat jullie nodig hebben om te bepalen of een kaart een set is.
Voor nu wil ik jullie meegeven even de 81 kaart objecten uberhaupt te maken. Ik verwacht dat dit een object wordt met de volgende eigenschappen.
Class setKaart { String foto Integer vorm Integer kleur Integer aantal Integer vulling Boolean clicked }
(Dit hierboven is geen echte code!!!)
Kijk of jullie deze objecten kunnen schrijven. Zoek een tutorial in google onder het mom: "Object Orientated Programming in JavaScript" Degene die daar gelinkt is is de eerste die ik vond en zal zeker niet perfect zijn. Want als jullie die objecten hebben worden de vervolg stappen stukke makkelijker.
Op het moment dat jullie de objecten hebben kun je spelen met een lijst ervan maken. Ook dat kun je lekker googlen.
Ik kan de rest van jullie vragen beantwoorden maar als jullie hiermee aan de slag gaan verwacht ik dat jullie vanzelf zullen in zien hoe jullie sommige problemen oplossen. Schroom niet om mij nog meer vragen te stellen (code stuur je handig met ``` eromheen)
Laat maar weten hoe het gaat.
Jip