Springen naar inhoud


- - - - -
C# 2010

Bijhouden Welke Conditie Waar Is?



  • Log in a.u.b. om te beantwoorden
Er zijn 5 reacties in dit onderwerp

#1 Zitteke

Zitteke

    Starting Developer

  • Leden
  • 13 berichten
    Laatst bezocht 03 mrt 2014 18:06

Geplaatst op 01 maart 2014 - 14:11

Hallo,

Ik ben bezig met een klein projectje (soort poker) in C#. Ik zou ook graag in een listbox bijhouden wat er iedere ronde in het spel gebeurt is.
Momenteel heb ik bijvoorbeeld dit (ik denk wel dat er makkelijkere manieren zijn om deze code te schrijven maar ik deed het zo):

Code:
			if (gtl1speler == gtl2speler || gtl1speler == gtl3speler || gtl1speler == gtl4speler || gtl1speler == gtl5speler || gtl2speler == gtl3speler || gtl2speler == gtl4speler || gtl2speler == gtl5speler || gtl3speler == gtl4speler || gtl3speler == gtl5speler || gtl4speler == gtl5speler)
{

}

Ik zou graag hebben dat wanneer bijvoorbeeld de tweede conditie waar is, dat er dan een bepaalde tekst wordt toegevoegd (dus 1p3), of wanneer bijvoorbeeld de derde conditie waar is er dan 1p4 wordt toegevoegd etc.

Mijn vraag is dus, is er een manier om bij te houden welke/de hoeveelste conditie er waar is?


Alvast bedankt.

#2 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1153 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 02 maart 2014 - 10:39

Bericht bekijkenZitteke, op 01 maart 2014 - 14:11, zei:

Mijn vraag is dus, is er een manier om bij te houden welke/de hoeveelste conditie er waar is?
Ja, natuurlijk: zowel welke als welke in rang, of beiden.
Maar niet zoals je het nu doet.
Maar graag wat meer info, eerst:
- wat doet die vergelijking
- wat moet er gebeuren indien true, of false
- wat is het type van gtl<n>speler.
- wat is de inhoud van gtl<n>speler en waar komt dat vandaan
- waarom zijn dat 5 afzonderlijke variabelen en zitten die niet in een soort collectie
...

#3 Zitteke

Zitteke

    Starting Developer

  • Leden
  • 13 berichten
    Laatst bezocht 03 mrt 2014 18:06

Geplaatst op 02 maart 2014 - 19:01

Bericht bekijkenDirk Andries, op 02 maart 2014 - 10:39, zei:

Ja, natuurlijk: zowel welke als welke in rang, of beiden.
Maar niet zoals je het nu doet.
Maar graag wat meer info, eerst:
- wat doet die vergelijking
- wat moet er gebeuren indien true, of false
- wat is het type van gtl<n>speler.
- wat is de inhoud van gtl<n>speler en waar komt dat vandaan
- waarom zijn dat 5 afzonderlijke variabelen en zitten die niet in een soort collectie
...


1. Die vergelijking is eigenlijk om te weten of de speler 2 getallen in een reeks heeft die hetzelfde zijn. Dan heeft de speler een paar, en daarop zou ik dan graag bijvoorbeeld 1paar2 tonen (dus 2x een nummer 2).
2. Dan zet ie een bool op true en voegt ie wat toe aan een listbox (die 1paar2 dus bijvoorbeeld).
3. Integers, moeten getallen zijn van 1 tem 6
4. Als je op een knop klikt dan maakt ie voor gtl1speler tem gtl5speler een nieuw random getal aan, en die worden daarin dan bijgehouden.
5. Dat weet ik zelf niet.  Ik ben C# nog maar aan het leren, en ik dacht al wel dat er een makkelijkere methode was. Zou dit dan mogelijk zijn met een list of array? Of welke methode zou er dan werken?

Alvast bedankt.

#4 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1153 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 03 maart 2014 - 16:50

We starten bij het begin (ik weet niks van poker, dus als ik daar de mist in ga gelieve te corrigeren).
Blijkbaar heeft een speler een hand van 5 kaarten? Een kaart heeft een kleur en een waarde.
We vangen dat dan zo met een enum voor kleur en waarde (als bijvoorbeeld aas hoger is, dan kan je die als laatste plaatsen):
C Code:

public enum Waarde
{ Aas, Twee, Drie, Vier, Vijf, Zes, Zeven, Acht, Negen, Tien, Boer, Dame, Heer }

public enum Kleur
{ Harten, Ruiten, Klaveren, Schoppen }




Kaart:
C Code:
public class Kaart
{
	 private readonly Kleur _kleur;

	 private readonly Waarde _waarde;

	 public Kaart(Kleur kleur, Waarde waarde)
	 {
		 _kleur = kleur;
		 _waarde = waarde;
	 }

	 public Kleur Kleur
	 {
		 get { return _kleur; }
	 }

	 public Waarde Waarde
	 {
		 get { return _waarde; }
	 }

	 public bool HeeftZelfdeKleur(Kaart andere)
	 {
		 return Kleur == andere.Kleur;
	 }

	 public bool HeeftZelfdeWaarde(Kaart andere)
	 {
		 return Waarde == andere.Waarde;
	 }

	 public override string ToString()
	 {
		 return string.Format("{0} {1}", Kleur, Waarde);
	 }
}


En dan nog een Hand (hand levert ons zelf aanwezige paren)
C Code:
public class Paar
{
	 private readonly Kaart _kaart1;
	 private readonly Kaart _kaart2;

	 public Paar(Kaart kaart1, Kaart kaart2)
	 {
		 if (!IsGeldigPaar(kaart1, kaart2))
		 {
			 throw new InvalidOperationException("Geen geldig paar");
		 }
		 _kaart1 = kaart1;
		 _kaart2 = kaart2;
	 }

	 private static bool IsGeldigPaar(Kaart kaart1, Kaart kaart2)
	 {
		 // mogelijk moet je dit wijzigen, ik weet niet wanneer een paar een paar is in poker
		 return kaart1.Kleur != kaart2.Kleur && kaart1.Waarde == kaart2.Waarde;
	 }

	 public Waarde Waarde
	 {
		 get { return Kaart1.Waarde; }
	 }

	
	 public Kaart Kaart1
	 {
		 get { return _kaart1; }
	 }

	 public Kaart Kaart2
	 {
		 get { return _kaart2; }
	 }

	 public override string ToString()
	 {
		 return string.Format("{1} {0}, {2} {0}", Waarde, Kaart1.Kleur, Kaart2.Kleur);
	 }
}


Test met je Listbox (hier 2 listboxen):

C Code:
public partial class FormPoker : Form
{
	 public FormPoker()
	 {
		 InitializeComponent();
		 Test();
	 }

	 private void Test()
	 {
		 var hand = new Hand();
		 hand.Nieuw(new Kaart(Kleur.Harten, Waarde.Aas));
		 hand.Nieuw(new Kaart(Kleur.Klaveren, Waarde.Boer));
		 hand.Nieuw(new Kaart(Kleur.Ruiten, Waarde.Zes));
		 hand.Nieuw(new Kaart(Kleur.Harten, Waarde.Zes));
		 hand.Nieuw(new Kaart(Kleur.Schoppen, Waarde.Aas));
		 listBoxSpeler1.DataSource = hand.Paren();

		 hand = new Hand();
		 hand.Nieuw(new Kaart(Kleur.Ruiten, Waarde.Drie));
		 hand.Nieuw(new Kaart(Kleur.Klaveren, Waarde.Boer));
		 hand.Nieuw(new Kaart(Kleur.Schoppen, Waarde.Drie));
		 hand.Nieuw(new Kaart(Kleur.Harten, Waarde.Drie));
		 hand.Nieuw(new Kaart(Kleur.Schoppen, Waarde.Boer));
		 listBoxSpeler2.DataSource = hand.Paren();

	 }

}



Bijlage  poker.png   8,35K   2 downloads

#5 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1153 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 03 maart 2014 - 23:59

Euh, ...
klasse Hand ontbrak blijkbaar, sorry daarvoor.
C Code:
	public class Hand
	{

		private readonly List<Kaart> _kaarten = new List<Kaart>();

		public void Nieuw(Kaart kaart)
		{
			_kaarten.Add(kaart);
		}

		public IList<Paar> Paren()
		{
			return
				_kaarten.GroupBy(k => k.Waarde, k => k)
					.Where(g => g.Count() == 2)
					.Select(g => new Paar(g.First(), g.Last())).ToList();

		}
	}



#6 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1153 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 05 maart 2014 - 21:34

En waarom niet de kaarten tonen?

Bijlage  pokerKaart.png   13,45K   4 downloads

VS2010 solution in bijlage

Bijgevoegde Bestanden







Ook met taq C# 2010 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[C# 2010] Untitled 1

Met dank aan J├╝rgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)