Toon posts:

[GWBasic] Kaartspelletje maken *

Pagina: 1
Acties:
  • 571 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo allemaal,

De situatie is als volgt, voor school moeten we een programmatje schrijven die het volgende doet:

Er moeten 52 verschillende kaarten random verdeeld worden over vier handen zodat iedere hand precies 13 kaarten krijgt,

Nu moeten we dus een programma maken waarbij er uiteindelijk de kaarten verdeelt gaan worden, zodat je iets te zien krijgt als: R2:R3:J1 (waarbij R voor ruiten staat en J voor joker)

nu heb ik daarbij een powerpoint presentatie met het volgende:

Strategie 1
Pak de kaarten in een van te voren afgesproken volgorde van waarde en kleur. Loot voor iedere kaart in welke hand hij geplaatst wordt. Houd daarbij wel in de gaten of deze hand nog geen 13 kaarten heeft. Ga door tot 52 kaarten geplaatst zijn.

met een groot gedeelte van de code erbij,

nu is het zo dat we extra studiepunten kunnen verdienen door dit dus zelf uit te voeren zonder dat we er ooit les in hebben gehad, want ze verwachten tegenwoordig dat je steeds meer zelf uitzoekt, maar nu is het probleem dus dat ik nog nooit een programmatje heb geschreven.

Natuurlijk heb ik zitten googlen en kwam ik tot een tutorial uit die een simpel hello world op mn scherm toverde, maar daar kwam ik dus ook niet echt veel mee verder, verder kwam ik dit ook nog tegen
nu heb ik dus die commando's die bij de ppt presentatie zaten in een .bas bestandje gezet, en die geopend met GWBasic, wat het de ene keer wel doet, en andere keer niet, ik denk dat ik dus iets verkeerd doe met het openen van dat bestandje, trouwens, het enigste wat ik te zien krijg zijn cijfers, geen tekst zoals in het .bas bestandje (staat in de ppt presentatie onderaan deze post)

nu mijn vragen samengevat:

hoe krijg ik dit programma compleet met behulp van de presentatie?
moet ik de 2 code's van de presentatie met elkaar combineren?
als alle kaarten moeten worden uitgezocht, R1:R2 en dergelijke, hoe zet ik dat dan in de code?

ik heb de powerpoint presentatie waar de code's (tevens de hele opdracht) geupload op badongo.com

Linkje: http://www.badongo.com/file/3068380

Ik hoop dat iemand mij begrijpt en me kan helpen, want ik kom er zelf ook niet uit,

in ieder geval bedankt voor de moeite en het lezen! ;)

(p.s. als deze post op de verkeerde plek staat, dan hoor ik het wel ;)

--EDIT--

Hierbij de code die ik er dus bij heb gekregen:


Ik vroeg om je eigen code, niet de code die je gekregen hebt, en ik heb je ook gewezen op code tags...


Strategie 2:



Ik vroeg om je eigen code, niet de code die je gekregen hebt, en ik heb je ook gewezen op code tags...


dit zit dus bij mijn powerpoint presentatie,

nu heb ik (apart) de code's in een .bas bestand gezet maar ik krijg eerst de foutmelding "path not found" terwijl ik het bestand er dus gewoon insleep, als ik het bestand op mijn C: schijf zet, en het daarna probeer te openen krijg ik de foutmelding "syntax error"

ik snap dat ik iets verkeerd doe, maar wat?, met het load commando ervoor wordt er ook niets geopend, maar het is me 1 keer gelukt het te openen, ik meende wel gewoon op dezelfde manier, maar ik kreeg niet meer als cijfers te zien.
wat ik dus ook niet begrijp, hoe zet ik die namen voor ruiten, klaver,schoppen en harten (afgekort als R, K, S, H met een cijfer erachter voor de betekenis en J voor joker dan in de code?

[ Voor 51% gewijzigd door RobIII op 16-05-2007 17:30 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op woensdag 16 mei 2007 @ 16:53:
(p.s. als deze post op de verkeerde plek staat, dan hoor ik het wel ;)
Daar denken wij anders over ;) Als deze post op de verkeerde plek staat, dan hoor ik het wel. Maar geen zorgen; je topic staat goed. Dat had je zelf ook kunnen uizoeken door Waar hoort mijn topic? even te lezen.

Het is in PRG echter ook niet de bedoeling dat je met zulke 'vage' vragen komt; we zien hier graag wat concreter waar het probleem zit; wat je hebt geprobeerd en wat er niet lukte. Lees onze Programming Beleid Quickstart eens door en pas dan je topic even aan (Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/tweakers/images/icons/edit.gif) zodat het voldoet aan deze quickstart.

Daarnaast is het handig om te weten of je (bijvoorbeeld) foutmeldingen krijgt (tijdens runnen of compileren etc.) en of je uberhaupt al ervaring hebt met programmeren. Heb je al eens wat tutorials doorgenomen?

Tot slot: Ik heb aardig de indruk dat je van ons verwacht dat we het hele probleem voor je gaan voorkauwen; die vlieger gaat helaas niet op (zie scriptrequest). We zijn prima bereid je met het een en ander te helpen, maar dan zullen je vragen dus wat concreter moeten zijn.

Post je (eigen én relevante! dus niet complete!) code eens (zie daarvoor ook het gebruik van code tags) en probeer je probleem aan de hand daarvan te analyseren voor ons en aan te geven waar het precies fout gaat volgens jou.

edit:
Oh, en je krijgt een gratis title-fix van me ;)
Probleem met GWBasic -> [GWBasic] Kaartspelletje maken *

[ Voor 34% gewijzigd door RobIII op 16-05-2007 17:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Werken met array's en collections.
Collections zijn het makkelijkst vind ik zelf.

Maak een Players collection aan (list type) en add voor iedere speler een array of andere list met de kaarten.

in pseudocode

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SPELERS_AANTAL = 4
MAX_AANTAL_KAARTEN = 13

for (i = 0 to i == SPELERS_AANTAL)
{
     for (j = 0 to j == MAX_AANTAL_KAARTEN)
     {
           while(true)
           {
                 kaart_nr = Random(53)
                 if ( al_gedeelde_kaarten.Contains(kaart_nr ) == false )
                 {
                      SPELER_KAARTEN.Add(kaar_nr)
                      exit loop
                      al_gedeelde_kaarten.add(kaar_nr)
                 }
           }
     }
     SPELERS.ADD(SPELER_KAARTEN)
     SPELER_KAARTEN.Clear ()
}


kaar_nr koppel je dmv een functietje aan een kaart...

Alternatief zou je ipv gedeelde kaarten ook een array kunnen maken met alle kaarten en een random kiezen binnen de bounds van de overgebleven kaarten pakken. vervolgens delete je uit die array de waarde. op die manier heb je die while loop niet.
verder zal er vast en zeker een effectievere manier zijn, ik schud dit ook maar even uit de losse pols.

[ Voor 3% gewijzigd door Mischa_NL op 16-05-2007 17:22 ]


Verwijderd

De daar gesuggereeerde oplossing kan rechtstreeks naar [alg] Slechtste programmeervoorbeelden deel 2 ...

Verwijderd

Qlone --> Toon dan hoe het wel kan? En mogen mensen, die nog nooit met bepaalde programma's gewerkt hebben, de code niet gebruiken omdat jij vind dat die slecht is?

  • writser
  • Registratie: Mei 2000
  • Laatst online: 28-11 15:44
Het lijkt me sterk dat je opdracht moet maken in GWBasic? Ik zou zeggen: probeer het in java of python. Zijn tenminste gangbare talen waar enorm veel informatie over te vinden is. Bovendien leer je dan nog iets nuttigs. Over je probleem: bedenk eerst een 'algoritme', oftewel stapsgewijs wat je wil doen. Wat je in het echt doet (bijv. bij een potje hartenjagen):

- Pak een dek met 52 kaarten.
- Schud het dek.
- Geef iedereen 13 kaarten van bovenaf de stapel.

Probeer dit nu stap voor stap te implementeren in je programmeertaal naar keuze. Welke dataformaten heb je nodig? Een array? Een lijst? Een map? Wat is een schudalgoritme? Hoe representeer je kaarten?

Volgens mij heb je trouwens totaal geen programmeerkennis. Dat is niet erg, maar verwacht niet dat je dan meteen een kaartenschudprogramma kan maken. Werk eerst wat simpele tutorials (of nog beter: een boek) door.

Onvoorstelbaar!


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Lees even wat er onder mijn code stond... het is de meest duidelijke oplossing (makkelijkst te implenteren iig) maar zeker niet de snelste
Hier een betere, en denk redelijk snelle.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SPELERS_AANTAL = 4
MAX_AANTAL_KAARTEN = 13
kaarten = new Arraylist
for i = 1 to i = 53
{
     kaarten.add(i)
}

for (i = 1 to i == SPELERS_AANTAL)
{
     for (j = 1 to j == MAX_AANTAL_KAARTEN)
     {
           kaart_nr = Random(kaarten.count)
           SPELER_KAARTEN.Add(kaar_nr)
           kaarten.deletevalue(kaart_nr)
     }
     SPELERS.ADD(SPELER_KAARTEN)
     SPELER_KAARTEN.Clear ()
}

[ Voor 11% gewijzigd door Mischa_NL op 16-05-2007 18:30 ]


Verwijderd

Topicstarter
Qlone had op woensdag 16 mei 2007 @ 17:49 moeten schrijven::
Ik ben zelf een expert op dit gebied en ben ervan overtuigd dat dit soort dingen voor mij appeltje-eitje zijn en wil je hierbij wel helpen dmv een tip/ de juiste richting opsturen maar daar ben ik op dit moment te lui voor, eigenlijk had ik deze reactie dus achterwege moeten laten.
natuurlijk begrijp ik je wel hoor, maar ik vraag het gewoon netjes, ik (en ik ben ervan overtuigd dat ik niet de enigste ben) doe mijn best om op het juiste pad te komen, ik neem aan dat jij ook niet als expert bent begonnen? ik zou ook wel willen dat alles in een paar seconden in mijn hoofdje wordt gepropt zodat ik vervolgens alles begrijp, maar zo gaat dat helaas niet.

[ Voor 4% gewijzigd door Verwijderd op 16-05-2007 18:28 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op woensdag 16 mei 2007 @ 18:27:
ik begrijp je wel hoor, maar ik vraag het gewoon netjes, ik doe mijn best om op het juiste pad te komen, ik neem aan dat jij ook niet als expert bent begonnen? ik zou ook wel willen dat alles in een paar seconden in mijn hoofdje wordt gepropt zodat ik vervolgens alles begrijp, maar zo gaat dat helaas niet.
En dus zul je, net als iedereen, 'beter' moeten worden door tutorials te volgen en proberen te leren van je eigen fouten en leerproces. Als we het (min of meer) voor je voorkauwen leer je niets ;) Tuurlijk ben je hier van harte welkom met (concrete) vragen, maar we verwachten wel een aantal dingen van een topicstarter (waaronder eigen inzet, een béétje kennis en niveau en wat relevante code of een concrete vraag ;) )

[ Voor 15% gewijzigd door RobIII op 16-05-2007 18:30 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • writser
  • Registratie: Mei 2000
  • Laatst online: 28-11 15:44
Verwijderd schreef op woensdag 16 mei 2007 @ 18:00:
Qlone --> Toon dan hoe het wel kan? En mogen mensen, die nog nooit met bepaalde programma's gewerkt hebben, de code niet gebruiken omdat jij vind dat die slecht is?
Lijkt me niet de bedoeling dat we de hele opdracht voor gaan kauwen. De oplossing van Mischa is in elk geval heel slecht, dit is nl. wat hij zou doen als we een potje gaan hartenjagen:

Hij schudt een pakjes kaarten. Vervolgens neemt hij een willekeurige kaart in gedachten, zoekt deze op en geeft deze aan een speler. Dit doet hij net zo lang tot het pakje leeg is. Maar stel je nou voor dat alleen de schoppen aas nog in het pakje zit. De kans dat hij precies deze kaart in gedachten neemt is heel klein (1/52). Als je pech hebt kiest Mischa steeds voor een willekeurige andere kaart en duurt het eindeloos voor hij de schoppenaas heeft gedeeld.

Het probleem is dat hij niet slim onthoudt welke kaarten hij al heeft uitgedeeld. Daardoor is het delen een heel inefficient proces geworden. Nog erger: je kan niet weten hoe lang het duurt voor hij alle kaarten heeft uitgedeeld. Als hij enorm veel geluk heeft kiest hij steeds de goede kaarten en is het pakje in 52 keer verdeeld. Maar als je pech hebt kiest hij oneindig vaak de verkeerde kaarten en wordt het pakje nooit verdeeld.

Onvoorstelbaar!


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
writser schreef op woensdag 16 mei 2007 @ 18:35:
[...]


Lijkt me niet de bedoeling dat we de hele opdracht voor gaan kauwen. De oplossing van Mischa is in elk geval heel slecht, dit is nl. wat hij zou doen als we een potje gaan hartenjagen:

Hij schudt een pakjes kaarten. Vervolgens neemt hij een willekeurige kaart in gedachten, zoekt deze op en geeft deze aan een speler. Dit doet hij net zo lang tot het pakje leeg is. Maar stel je nou voor dat alleen de schoppen aas nog in het pakje zit. De kans dat hij precies deze kaart in gedachten neemt is heel klein (1/52). Als je pech hebt kiest Mischa steeds voor een willekeurige andere kaart en duurt het eindeloos voor hij de schoppenaas heeft gedeeld.

Het probleem is dat hij niet slim onthoudt welke kaarten hij al heeft uitgedeeld. Daardoor is het delen een heel inefficient proces geworden. Nog erger: je kan niet weten hoe lang het duurt voor hij alle kaarten heeft uitgedeeld. Als hij enorm veel geluk heeft kiest hij steeds de goede kaarten en is het pakje in 52 keer verdeeld. Maar als je pech hebt kiest hij oneindig vaak de verkeerde kaarten en wordt het pakje nooit verdeeld.
bekijk mijn 2e code eens (K).

  • writser
  • Registratie: Mei 2000
  • Laatst online: 28-11 15:44
Doe het in een keer goed .. (K)

Onvoorstelbaar!


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
writser schreef op woensdag 16 mei 2007 @ 18:38:
Doe het in een keer goed .. (K)
:P ik zou als beginnend prg-er die eerste code makkelijker te implementeren vinden dan de 2e. Ik schreef er ook gelijk bij dat he allicht sneller zal kunnen. ook wilde ik maar een duwtje geven, niet gelijk alles voorkauwen... maargoed :P

  • writser
  • Registratie: Mei 2000
  • Laatst online: 28-11 15:44
Mischa_NL schreef op woensdag 16 mei 2007 @ 18:39:
[...]

:P ik zou als beginnend prg-er die eerste code makkelijker te implementeren vinden dan de 2e. Ik schreef er ook gelijk bij dat he allicht sneller zal kunnen. ook wilde ik maar een duwtje geven, niet gelijk alles voorkauwen... maargoed :P
Mee eens, maar als je wil leren programmeren dan is het juist belangrijk dat je snapt waarom een mogelijk algoritme goed of slecht is. Eerst nadenken, de implementatie komt daarna wel. Daarom probeerde ik ook zo uitgebreid mogelijk aan te geven wat er fout was met je eerste oplossing zonder meteen allemaal code te geven.

Onvoorstelbaar!


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
writser schreef op woensdag 16 mei 2007 @ 18:44:
[...]


Mee eens, maar als je wil leren programmeren dan is het juist belangrijk dat je snapt waarom een mogelijk algoritme goed of slecht is. Eerst nadenken, de implementatie komt daarna wel. Daarom probeerde ik ook zo uitgebreid mogelijk aan te geven wat er fout was met je eerste oplossing zonder meteen allemaal code te geven.
Daar moet ik je gelijk in geven. Voor je het weet gaan slechte gewoontes er niet meer 'uit'...

  • yade
  • Registratie: Mei 2002
  • Laatst online: 25-11 14:48
Je kan een array maken van strings. De strings representeren de kaarten.

Vervolgens maak je nog een array met nummers die `wijzen' naar de kaarten.

Daarna deel je de kaarten uit aan de spelers. Dit kan een meerdimensionale array zijn. Waarbij de eerste dimensie de spelers vertegenwoordigen. De tweede dimensie de kaarten.

Ook hier kan je met een array met speler namen een koppeling realiseren tussen de spelers, hun namen en de kaarten.

De uitdeel routine is al voorgekauwd.

Oh, en voor de syntax moet je maar eens een boek lezen over de betreffende taal.

Ik zou overigens ook kiezen voor Java of C#, of desnoods PHP. Daar heb je meer aan, en het is niet echt veel moeilijker. Zeker niet als je toch alles nog moet leren.

[ Voor 20% gewijzigd door yade op 16-05-2007 19:00 ]


Verwijderd

Mischa_NL schreef op woensdag 16 mei 2007 @ 18:24:
[...]

Lees even wat er onder mijn code stond... het is de meest duidelijke oplossing (makkelijkst te implenteren iig) maar zeker niet de snelste
Hier een betere, en denk redelijk snelle.
Die is inderdaad een stuk beter :) . Wat er bij je eerste suggestie fout ging is dat je altijd een willekeurige kaart uit *alle* kaarten pakte en dan pas keek of 'ie niet toevallig was uitgedeeld. Dat heeft de potentie om heel lang te duren als je nog maar een paar kaarten over hebt om uit te delen...

Wat writser dus ook al zei :) .

@de rest: Nee. Ik ga niks voorkauwen. Als de TS met een idee komt daarentegen (al dan niet in pseudo code), ben ik volledig bereid hem daarbij te helpen.

[ Voor 12% gewijzigd door Verwijderd op 16-05-2007 20:37 ]


  • lemming_nl
  • Registratie: Juli 2004
  • Niet online
Misschien een beetje bijdehand maar in je startpost heb je het over een joker, dan heb je meer dan 52 kaarten. Meestal 2 jokers dus 54 kaarten welke je niet kan verdelen over 4 mensen.

Geluk is een weerloos oud vrouwtje, alleen op straat met een bom geld


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
lemming_nl schreef op woensdag 16 mei 2007 @ 20:34:
Misschien een beetje bijdehand maar in je startpost heb je het over een joker, dan heb je meer dan 52 kaarten. Meestal 2 jokers dus 54 kaarten welke je niet kan verdelen over 4 mensen.
Dat is ook niet zo moeilijk. Je deelt de mensen na 52 kaarten random in, als hand volgorde en nummer 1 en 2 achter de dealer krijgen de 2 laatste kaarten. Dat zijn randgevallen!
Pagina: 1