Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Processing: Classes en variabelen

Pagina: 1
Acties:

Verwijderd

Topicstarter
class kaart {
public int nummer;
public String naam;
public int setID;
public float x;
public float y;

}


int rij = 4;
int modus = rij*rij;

kaart myKaart1;
kaart myKaart2;
kaart myKaart3;
kaart myKaart4;
kaart myKaart5;
kaart myKaart6;
kaart myKaart7;
kaart myKaart8;

myKaart1 = new kaart();
myKaart1.nummer = 1;
myKaart1.naam = "Fiets";
myKaart1.x = 0;
myKaart1.y = 0;

myKaart2 = new kaart();
myKaart2.nummer = 2;
myKaart2.naam = "Boot";
myKaart2.x = 0;
myKaart2.y = 0;

myKaart3 = new kaart();
myKaart3.nummer = 3;
myKaart3.naam = "Auto";
myKaart3.x = 0;
myKaart3.y = 0;


-----

Hoe kan ik het aanmaken van het onderstaande stukje code automatiseren?

***
kaart myKaart1;
myKaart1 = new kaart();
*****

ik wil met een for loop myKaart1 t/m 8 laten initialiseren. Kan dit?

[ Voor 97% gewijzigd door Verwijderd op 07-11-2014 23:09 ]


  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

Je wil een array gebruiken

Iperf


Verwijderd

Topicstarter
Heb het geprobeerd maar dat was niet gelukt.
kaarten[] = new kaart(); ?????????????

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:58
Het staat echt letterlijk in hun documentatie: https://processing.org/reference/Array.html

Verwijderd

Topicstarter
Ik snap wel hoe je een array aanmaakt.

int kaarten[] = new int(8);

Nu zijn er 8 binnen kaarten.

Alleen krijgt ik dit niet voor elkaar bij de class.

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:58
Wat is er dan niet duidelijk aan het 3e voorbeeld op die pagina?
C:
1
2
3
4
5
6
7
int degrees = 360;
float[] cos_vals = new float[degrees];
// Use a for() loop to quickly iterate
// through all values in an array.
for (int i=0; i < degrees; i++) {         
  cos_vals[i] = cos(TWO_PI/degrees * i);
}

Combineer dat dan met binnen de loop "new Kaart()" aan te roepen en je bent er toch?
Als je meer over een for loop wil weten verwijs ik je naar de wiki pagina daarover: Wikipedia: For loop Die in processing zal hetzelfde werken als in java en c/c++

[ Voor 34% gewijzigd door Caelorum op 07-11-2014 23:47 ]


Verwijderd

Topicstarter
Omdat dit ints en floats zijn. Dit lukt mij nog wel.

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:58
Vergelijk:
C:
1
2
3
4
5
6
int aantal = 8;
kaart[] kaarten = new kaart[aantal];

for(int i=0; i< aantal; i++) {
   kaarten[i] = new Kaart();
}

eens met het voorbeeld dat zij geven:
C:
1
2
3
4
5
6
7
int degrees = 360;
float[] cos_vals = new float[degrees];
// Use a for() loop to quickly iterate
// through all values in an array.
for (int i=0; i < degrees; i++) {         
  cos_vals[i] = cos(TWO_PI/degrees * i);
}


Ik zou als ik jou was even goed uitzoeken wat een array is en hoe een for loop werkt. En niet alleen het voorbeeld dat ik gaf overnemen, maar even goed uitzoeken waarom het zo werkt.

[ Voor 17% gewijzigd door Caelorum op 07-11-2014 23:52 ]


  • bwerg
  • Registratie: Januari 2009
  • Niet online

bwerg

Internettrol

'int', 'float' en 'kaart' zijn gewoon types. Ja, kaart is een klasse en daarmee inhoudelijk wat anders dan een int of float, maar het is en blijft een type. Een array van ints werkt wat dat betreft gewoon hetzelfde als een array van kaarten.

Wil je ints in je array, dan gebruik je zoals gezegd
C++:
1
int[] rijtje = new int[8];

Wil je kaarten in je array... nouja, vervang 'int' door 'kaart'. ;)

[ Voor 26% gewijzigd door bwerg op 08-11-2014 11:47 ]

Heeft geen speciale krachten en is daar erg boos over.


Verwijderd

Topicstarter
Kijk nu maken we stappen. True story dat het er letterlijk staat, maar ik dacht dat het bij classes anders zat.
Excuses als ik wat achterlijk overkom, probeer het ook maar te leren!

Bedankt, ik ga even puzzelen!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:58
Verwijderd schreef op vrijdag 07 november 2014 @ 23:54:
[...] Excuses als ik wat achterlijk overkom, probeer het ook maar te leren![...]
Het is niet erg als je iets niet snapt, dat deden wij ook niet toen we begonnen, maar als je een voorbeeld krijgt zou ik er wel even goed naar kijken en het een en ander zelf uitzoeken ^^

Verwijderd

Topicstarter
Nogmaals bedankt, ik hou het topic op de hoogte (voor de geïnteresseerden).
Het betreft een memory spel.

Verwijderd

Topicstarter
kaarten[0].pair = 1;
kaarten[1].pair = 1;
kaarten[2].pair = 2;
kaarten[3].pair = 2;
kaarten[4].pair = 3;
kaarten[5].pair = 3;
kaarten[6].pair = 4;
kaarten[7].pair = 4;


Weet iemand hier toevallig een mooie oplossing voor om dit te automatiseren?
2 kaarten hebben steeds hetzelfde pair ID.

Handmatig natuurlijk prima, maar met loops heb ik hier nog geen mooie oplossing voor.

  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

Ja met een for loop .....

is dit huiswerk ?

Iperf


Verwijderd

Topicstarter
Heb hem! Sorry hoor, maar als je gepikeerd wordt van het feit dat ik snel dingen vraag, benader met dan persoonlijk en vriendelijk.


int multi = 0;
int modulo = 0;
for (int i = 0; i< modus; i++) {
kaarten[i].pair = modulo;
multi++;
if(multi==2){
modulo++;
multi=0;
}
}

  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

Nou ja het is jouw project toch ? anders kun je beter een programmeur betalen. de insteek is het dat je zelf wel moeite moet doen. (nee je mag langer nadnken dan een half uur hoor bit zijn de basics. als ej die niet doorhebt is het voor jezelf beter dat ej ze goed snapt ipv het voorkauwd te krijgen . anders krijg je complexe shit nooit gedaan)

Maar je vergeet wel mijn vraag te beantwoorden.

Ik zou gewoon met een while do het array aflopen lijkt me ee stukje sneller, scheelt je een rekenen en vergelijken
En met aparte teller elke do

kaarten[i].pair = teller
kaarten[i+1].pair = teller

doen

[ Voor 21% gewijzigd door Fish op 08-11-2014 00:56 ]

Iperf


Verwijderd

Topicstarter
Mijn project, true.
School opdracht, false.

Probeer te leren programmeren, maar vind het gewoon niet zo prettig als ik zulke "nare" reacties krijg. Ene kant snap ik je ook wel.

Inmiddels werkt het al en kan ik weer iets verder! Thanks.

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:58
De reacties zijn inderdaad bot, maar het komt dan ook over alsof je niet de moeite neemt het een en ander zelf uit te zoeken in de documentatie of eventueel een zoektocht op google, maar je vraag meteen hier neergooit. Nou kan het zo zijn dat dat niet het geval is, maar dat kunnen wij uit je berichten niet lezen. Het is dan ook handig om in het vervolg even aan te geven wat je zelf al hebt geprobeerd en waarom je denkt dat dat niet werkt. Vaak zal je er dan achter komen dat je het zelf toch weet. Mocht je het toch niet weten, kunnen wij iig jouw gedachtegang zien en aangeven waar het fout gaat en je dus gerichter helpen. Daar heb jij wat aan, want je wordt beter geholpen, en hebben wij wat aan omdat we niet hoeven te gokken, het plezieriger wordt om te helpen en het gewoon minder tijd kost :)

Oja, en het is laat in de avond, dus dan zijn de reacties altijd al iets minder goed doordacht ^^

[ Voor 17% gewijzigd door Caelorum op 08-11-2014 01:02 ]


Verwijderd

Topicstarter
Oke, nu heb ik iets waar ik dus niet uitkom. Het onderstaande stukje code is een voorbeeld.

C:
1
2
3
4
kaarten[0].x = Xposities[random(Xposities.length)];
kaarten[0].y = Yposities[random(Yposities.length)];
kaarten[1].x = Xposities[random(Xposities.length)];
kaarten[1].y = Yposities[random(Yposities.length)];



Ik heb Xposities vastgezet binnen de array Xposities[] en hetzelfde voor Yposities[].
Nu wil ik deze random toewijzen aan de kaarten[].x (Xposities) en de kaarten[].y.

De bovenstaande code werkt niet omdat sommige waardes dubbel gekozen kunnen worden. Daarnaast is in de code ook de random functie niet helemaal goed in werking gebracht, maar dat doet er nu niet toe. Het gaat er puur om dat er begrepen wordt wat ik nou wil doen.

Ik ben er de godganse dag mee bezig geweest, maar heb tot nu toe alleen het bovenstaande stukje code. Dit kan ik wel in een for loop zetten, maar dan blijft de uitkomst hetzelfde.

Zou fijn zijn als iemand mij een duwtje in de juiste richting kan geven!
Bedankt alvast.

  • Cilph
  • Registratie: April 2010
  • Laatst online: 19-11 10:14
Een mogelijkheid is een reeks getallen in een array te zetten en deze te shufflen op een random manier. Dit kun je dan weer aan je kaarten toekennen.

[ Voor 18% gewijzigd door Cilph op 08-11-2014 19:42 ]


Verwijderd

Topicstarter
Heb opzich een leuke oplossing gevonden.
Voordat de xposities aan de kaarten worden toegewezen, shuffle ik de array van de kaarten zodat deze volgorde gewijzigd word.
C:
1
2
import java.util.Collections;
import java.util.Arrays;


// nadat de kaarten zijn aangemaakt in de array kaarten[], shuffle ik de inhoud met:

C:
1
Collections.shuffle(Arrays.asList(kaarten)); 


Vervolgens wijzig ik met een for loop op volgorde van de kaarten de xposities toe.
Pagina: 1