dobbelsteen

algemene C code
Berichten: 11
Geregistreerd: 03 Okt 2020, 10:42
Woonplaats: Denekamp

Re: dobbelsteen

Berichtdoor melvinkamphuis » 04 Okt 2020, 18:59

Koepel schreef:Je hebt nu [ \ code ] in plaats van [ / code ].
Meestal wordt een forward slash gebruikt voor dit soort tags, de backslash is soms een escape karakter.
Volgens mij is dat ergens in de jaren tachtig ontstaan met een tekstverwerker. Het begin van dikgedrukt werd met [ bold ] gedaan en het einde met [ / bold ]. Het wordt heel vaak gebruikt. Bijvoorbeeld in de brontekst van een webpagina kun je de HTML code zien. Dat is daar van afgeleid. Met bijvoorbeeld <big> als begin en </big> om het eind aan te geven.

De oplossing is eenvoudig.
Gebruik niet de knop "Plaats een snelle reactie", maar "Plaats een reactie".
Gebruik dan de knop "Code" die de code-tags geeft. Zet daar je sketch tussen.
Wijzigen het net zo lang totdat de sketch als code te zien, zodat wij het inspringen kunnen zien.

Ik schreef dit:
P.S.: Ik vind het erg belangrijk dat de tekst van de sketch er netjes uit ziet. Dus dat het gebruik van spaties, komma's en inspringen er netjes uit ziet. Als het goed is, zie je in één keer de structuur van de sketch.


Als je dat doet, dan zie je in één oogopslag wat het probleem is. Echt waar 8-)

Je kunt ook op Ctrl+T drukken in de Arduino IDE. Dan wordt het in een bepaalde stijl opgemaakt. Dat is misschien niet de stijl die je mooi vind. Je mag elke stijl gebruiken als het maar duidelijk en consequent is.

P.S.: Ik heb overal bij de tags (BBCode) spaties toegevoegd omdat ik niet weet hoe ik de tags tijdelijk uit kan zetten op dit forum.

Tip: Het aantal bonen in een pot witte bonen in tomatensaus is vanzelfsprekend een variabele. De "winst" is iets waar je mee gaat rekenen en dingen bij gaat optellen. Dus de "winst" is vanzelfsprekend een ... (zelf invullen ;) ).

Hieronder zie je die "Code"-knop voor de code-tags.



dank je voor de reactie ik snap niet wat je precies bedoelt :oops:
ik krijg bij de if een foutmelding en weet er geen oplossing voor :| kan u mij daar mee helpen (mits u daar zin en tijd voor heeft)

dit is de code:
Code: Alles selecteren
/*
  Name: dobbelsteen met winstmarche
  Date:04-10-2020
  Author: Melvin Kamphuis

  Description:

  Revision:
*/

// include libraries

// ----- Declare Constants -----

// ----- Declare Objects -----

// ----- Declare subroutines and/or functions -----

// ----- Declare Global Variables -----
long randNumber_1; // dobbelsteen 1
long randNumber_2; // dobbelsteen 2
long randNumber_3; // dobbelsteen 3

// Setup
void setup()
{
  Serial.begin(9600);
  randomSeed( analogRead(0) );
}

// Main loop
void loop()
{
  randNumber_1 = random(1, 7);
  Serial.print ("dobbelsteen_1");
  Serial.print ("=     ");
  Serial.println (randNumber_1);

  randNumber_2 = random(1, 7);
  Serial.print ("dobbelsteen_2");
  Serial.print ("=     ");
  Serial.println (randNumber_2);

  randNumber_3 = random(1, 7);
  Serial.print ("dobbelsteen_3");
  Serial.print ("=     ");
  Serial.println (randNumber_3);
  Serial.println ();

  delay(1000);
}
if (randNumber_1 == randNumber_2) {
  Serial.print ("WINST= €2,-");
}
else if (randNumber_2 == randNumber_3) {
  Serial.print ("WINST= €6,-");
}
else if (randNumber_1 == randNumber_3) {
  Serial.print ("WINST= €2,-");
}
else if (randNumber_1 == randNumber_2 == randNumber_3) {
  Serial.print ("WINST= €6,-");
}
else if (randNumber_1 == randNumber_2 == randNumber_3 == 6) {
  Serial.print ("WINST= €2,-")
}
// Function or subroutine
void function() {

}

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: dobbelsteen

Berichtdoor Koepel » 04 Okt 2020, 20:20

De groene pijlen is het openingshaakje '{' van de functies setup() en loop().
De rode pijlen is waar de functie wordt afgesloten met '}'.
Dan komt daarna nog wat. Zomaar wat code die in de lucht hangt. Daar begrijpt de compiler niets van. Het hoort nergens bij.
Bijlagen
haakjes.png
haakjes.png (49.05 KiB) 6591 keer bekeken

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: dobbelsteen

Berichtdoor shooter » 06 Okt 2020, 17:51

het haakje net onder de delay moet weg, eigenlijk beter om de delay naar onder te zetten dan krijg je dus elke seconde een uitkomst.
je schrijft telkens ifelse maar daar moet je even bij nadenken want soms zijn er twee regels waar.
de volgorde van vaststellen is belangrijk,
en ga een teller bijhouden zodat je weet of je aan het eind winst maakt danwel verlies.
ik wil graag de verhouding weten waar je op uitkomt en het theoretisch winst.
ofwel de kans dat je 3 6 gooit is 1/6 van 1/6 van 1/6 hoeveel is dat?
paul deelen
shooter@home.nl

Berichten: 11
Geregistreerd: 03 Okt 2020, 10:42
Woonplaats: Denekamp

Re: dobbelsteen

Berichtdoor melvinkamphuis » 06 Okt 2020, 19:39

Code: Alles selecteren
/*
  Name: dobbelsteen met winstmarche
  Date:04-10-2020
  Author: Melvin Kamphuis

  Description:

  Revision:
*/

// include libraries

// ----- Declare Constants -----

// ----- Declare Objects -----

// ----- Declare subroutines and/or functions -----

// ----- Declare Global Variables -----
byte dobbelsteen_1;
byte dobbelsteen_2;
byte dobbelsteen_3;
float uitslag_6 = (6-1);
float uitslag_4 = (4-1);
float uitslag_2 = (2-1);
float uitslag_0 = (0+1);//verlies

// Setup
void setup()
{
  Serial.begin(9600);
  randomSeed( analogRead(0) );
  pinMode (10, INPUT_PULLUP);
}

// Main loop
void loop()
{
  if (!digitalRead (10)) {
  dobbelsteen_1 = random(1, 7);
  Serial.print ("dobbelsteen_1");
  Serial.print ("=     ");
  Serial.println (dobbelsteen_1);

  dobbelsteen_2 = random(1, 7);
  Serial.print ("dobbelsteen_2");
  Serial.print ("=     ");
  Serial.println (dobbelsteen_2);

  dobbelsteen_3 = random(1, 7);
  Serial.print ("dobbelsteen_3");
  Serial.print ("=     ");
  Serial.println (dobbelsteen_3);
  {
  if (dobbelsteen_1 == dobbelsteen_2 && dobbelsteen_1 == dobbelsteen_3)
  {
   
    if (dobbelsteen_1 == 6)
    {
      Serial.print("          WINST= €");
      Serial.print(uitslag_6);
      Serial.println(",-");
    }
    else
    {
      Serial.print("          WINST= €");
      Serial.print(uitslag_4);
      Serial.println(",-");
  }
  }
  else {
    if (dobbelsteen_1 == dobbelsteen_2 or dobbelsteen_2 == dobbelsteen_3 or dobbelsteen_1 == dobbelsteen_3) {
      Serial.print ("          WINST= €");
      Serial.print(uitslag_2);
      Serial.println(",-");
    }
    else {
      Serial.print ("          VERLIES= €");
      Serial.print (uitslag_0);
      Serial.println (",-");
    }
  }
 
}
  }
  else {
    Serial.println ("gooien a.u.b."); 
  }
 
delay(2000);
}


is wat ik tot nu toe heb het is hem nog niet maar het begint wat te worden :)

groeten
melvinkamphuis

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: dobbelsteen

Berichtdoor shooter » 07 Okt 2020, 14:39

prima bezig lijkt mij, gewoon doorgaan.
wat zie je nu op je scherm?
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: dobbelsteen

Berichtdoor Koepel » 07 Okt 2020, 21:28

Ik heb iets met millis(): https://github.com/Koepel/Fun_with_millis, en ik kon me niet inhouden om iets met een dobbelsteen en millis() te maken :o

De onderstaande sketch kijkt hoevaak een 1 wordt gegooid, hoevaak een 2, enzovoorts. Die getallen worden iedere seconde naar de seriële monitor gestuurd.

Code: Alles selecteren
// Test for random dice
// 7 october 2020
//
// Arduino IDE 1.8.13
// Arduino Uno
//
// For: http://arduinoforum.nl/viewtopic.php?f=9&t=4695
// Using the Blink Without Delay example:
//      https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay
//
// Test if the random() is equally distributed over the numbers 1...6.
//

unsigned long count[7];      // [0] is not used, only [1] to [6] (inclusive)

unsigned long previousMillis;


void setup()
{
  Serial.begin( 9600);
  Serial.println( "Test random distribution of dice");

  // Set a seed.
  randomSeed( analogRead( A0));

  // Clear the array that counts how many times a number of the dice happens.
  for( int i=0; i<7; i++)
  {
    count[i] = 0;
  }
}


void loop()
{
  byte dobbelsteen = random( 1, 7);

  if( dobbelsteen < 1 || dobbelsteen > 6)
  {
    Serial.println( "Error, this is not possible");
    while( true);              // halt
  }

  count[dobbelsteen]++;        // add one for this number of the rolled dice

  unsigned long currentMillis = millis();
  if( currentMillis - previousMillis >= 1000)   // every second
  {
    previousMillis = currentMillis;
   
    for( int i=1; i<=6; i++)
    {
      Serial.print( count[i]);
      Serial.print( ", ");
    }
    Serial.println();
  }
}


Na ruim 6 miljoen keer gooien, heb ik dit als uitkomst:
aantal keren een één gegooid: 1072226
aantal keren een twee gegooid: 1074171
aantal keren een drie gegooid: 1072952
aantal keren een vier gegooid: 1073727
aantal keren een vijf gegooid: 1074926
aantal keren een zes gegooid: 1075395
Dit is niet slecht, het is mooi evenredig verdeeld.

Berichten: 11
Geregistreerd: 03 Okt 2020, 10:42
Woonplaats: Denekamp

Re: dobbelsteen

Berichtdoor melvinkamphuis » 08 Okt 2020, 13:38

Koepel schreef:Ik heb iets met millis(): https://github.com/Koepel/Fun_with_millis, en ik kon me niet inhouden om iets met een dobbelsteen en millis() te maken :o

De onderstaande sketch kijkt hoevaak een 1 wordt gegooid, hoevaak een 2, enzovoorts. Die getallen worden iedere seconde naar de seriële monitor gestuurd.

Code: Alles selecteren
// Test for random dice
// 7 october 2020
//
// Arduino IDE 1.8.13
// Arduino Uno
//
// For: http://arduinoforum.nl/viewtopic.php?f=9&t=4695
// Using the Blink Without Delay example:
//      https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay
//
// Test if the random() is equally distributed over the numbers 1...6.
//

unsigned long count[7];      // [0] is not used, only [1] to [6] (inclusive)

unsigned long previousMillis;


void setup()
{
  Serial.begin( 9600);
  Serial.println( "Test random distribution of dice");

  // Set a seed.
  randomSeed( analogRead( A0));

  // Clear the array that counts how many times a number of the dice happens.
  for( int i=0; i<7; i++)
  {
    count[i] = 0;
  }
}


void loop()
{
  byte dobbelsteen = random( 1, 7);

  if( dobbelsteen < 1 || dobbelsteen > 6)
  {
    Serial.println( "Error, this is not possible");
    while( true);              // halt
  }

  count[dobbelsteen]++;        // add one for this number of the rolled dice

  unsigned long currentMillis = millis();
  if( currentMillis - previousMillis >= 1000)   // every second
  {
    previousMillis = currentMillis;
   
    for( int i=1; i<=6; i++)
    {
      Serial.print( count[i]);
      Serial.print( ", ");
    }
    Serial.println();
  }
}


Na ruim 6 miljoen keer gooien, heb ik dit als uitkomst:
aantal keren een één gegooid: 1072226
aantal keren een twee gegooid: 1074171
aantal keren een drie gegooid: 1072952
aantal keren een vier gegooid: 1073727
aantal keren een vijf gegooid: 1074926
aantal keren een zes gegooid: 1075395
Dit is niet slecht, het is mooi evenredig verdeeld.


ik heb nu vakantie en dus lekker veel tijd om dingen uit te proberen en testen en dit vind ik er wel interessant uit zien en ga zeker kijken of ik dit kan gaan gebruiken dank je hiervoor
m.v,g
melvinkamphuis

Berichten: 11
Geregistreerd: 03 Okt 2020, 10:42
Woonplaats: Denekamp

Re: dobbelsteen

Berichtdoor melvinkamphuis » 11 Okt 2020, 14:11

Koepel schreef:Ik heb iets met millis(): https://github.com/Koepel/Fun_with_millis, en ik kon me niet inhouden om iets met een dobbelsteen en millis() te maken :o

De onderstaande sketch kijkt hoevaak een 1 wordt gegooid, hoevaak een 2, enzovoorts. Die getallen worden iedere seconde naar de seriële monitor gestuurd.

Code: Alles selecteren
// Test for random dice
// 7 october 2020
//
// Arduino IDE 1.8.13
// Arduino Uno
//
// For: http://arduinoforum.nl/viewtopic.php?f=9&t=4695
// Using the Blink Without Delay example:
//      https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay
//
// Test if the random() is equally distributed over the numbers 1...6.
//

unsigned long count[7];      // [0] is not used, only [1] to [6] (inclusive)

unsigned long previousMillis;


void setup()
{
  Serial.begin( 9600);
  Serial.println( "Test random distribution of dice");

  // Set a seed.
  randomSeed( analogRead( A0));

  // Clear the array that counts how many times a number of the dice happens.
  for( int i=0; i<7; i++)
  {
    count[i] = 0;
  }
}


void loop()
{
  byte dobbelsteen = random( 1, 7);

  if( dobbelsteen < 1 || dobbelsteen > 6)
  {
    Serial.println( "Error, this is not possible");
    while( true);              // halt
  }

  count[dobbelsteen]++;        // add one for this number of the rolled dice

  unsigned long currentMillis = millis();
  if( currentMillis - previousMillis >= 1000)   // every second
  {
    previousMillis = currentMillis;
   
    for( int i=1; i<=6; i++)
    {
      Serial.print( count[i]);
      Serial.print( ", ");
    }
    Serial.println();
  }
}


Na ruim 6 miljoen keer gooien, heb ik dit als uitkomst:
aantal keren een één gegooid: 1072226
aantal keren een twee gegooid: 1074171
aantal keren een drie gegooid: 1072952
aantal keren een vier gegooid: 1073727
aantal keren een vijf gegooid: 1074926
aantal keren een zes gegooid: 1075395
Dit is niet slecht, het is mooi evenredig verdeeld.


ik hoop dat u mij nu kan helpen :?
ik heb nu zo ver dat de dobbelstenen werken en dat met behulp van een counter de aantal worpen bij word gehouden.
nu moet ik de totale winst berekenen (ik zou denken winst - 1 want inleg is €1) wat zou u doen?
dit is wat ik heb:
Code: Alles selecteren
byte dobbelsteen_1;
byte dobbelsteen_2;
byte dobbelsteen_3;
int Winst_6 = 6;
int Winst_4 = 4;
int Winst_2 = 2;
int Winst_0 = 0;
byte counter = 0;
int totaleWinst;
 

// Setup
void setup()
{
  Serial.begin(9600);
  randomSeed( analogRead(0) );
  pinMode (10, INPUT_PULLUP);
}

 

// Main loop
void loop()
{
  if (!digitalRead(10))
  {
    counter = counter +1;
    Serial.println();
    Serial.print ("aantal_worpen =  ");
    Serial.println (counter);

    Serial.println();
    dobbelsteen_1 = random(1, 7);
    Serial.print ("dobbelsteen_1");
    Serial.print ("=     ");
    Serial.println (dobbelsteen_1);
   
    dobbelsteen_2 = random(1, 7);
    Serial.print ("dobbelsteen_2");
    Serial.print ("=     ");
    Serial.println (dobbelsteen_2);

 

    dobbelsteen_3 = random(1, 7);
    Serial.print ("dobbelsteen_3");
    Serial.print ("=     ");
    Serial.println (dobbelsteen_3);

 

    if ((dobbelsteen_1 == 6) && (dobbelsteen_2 == 6) && (dobbelsteen_3 == 6))
    {
      Serial.println ("€6,00 Gewonnen") ;
      Winst_6 = 5 - 1;
      Serial.print ("Winst = €");
      Serial.println (Winst_6);
    }
    else
    {
      if ((dobbelsteen_1 == dobbelsteen_2) && (dobbelsteen_1 == dobbelsteen_3) && (dobbelsteen_2 == dobbelsteen_3))
      {
        Serial.println ("€4,00 Gewonnen") ;
        Winst_4 = 4 - 1;
        Serial.print ("Winst = €");
        Serial.println (Winst_4);
      }
      else
      {
        if ((dobbelsteen_1 == dobbelsteen_2) || (dobbelsteen_1 == dobbelsteen_3) || (dobbelsteen_2 == dobbelsteen_3))
        {
          Serial.println ("€2,00 Gewonnen") ;
          Winst_2 = 2 - 1;
          Serial.print ("Winst = €");
          Serial.println (Winst_2);
        }
        else
        {
          Serial.println ("€0,00 Gewonnen") ;
          Winst_0 = 0 - 1;
          Serial.print ("Verlies = €");
          Serial.println (Winst_0);
        }
      }
    }

    delay (1000);
  }



in de seriële monitor ziet het er zo uit:

aantal_worpen = 1

dobbelsteen_1= 1
dobbelsteen_2= 5
dobbelsteen_3= 5
€2,00 Gewonnen
Winst = €1

aantal_worpen = 2

dobbelsteen_1= 1
dobbelsteen_2= 5
dobbelsteen_3= 3
€0,00 Gewonnen
Verlies = €-1

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: dobbelsteen

Berichtdoor Koepel » 11 Okt 2020, 16:31

Dat gaat goed hoor.

Is het bedrag altijd in hele euro's ? en het kan ook negatief zijn ? Dan is een 'int' de juiste keuze. Dus jouw 'int totaleWinst' is de juiste manier.
Er is echter maar één winst, één bedrag. Dus er is ook maar één variabele.



P.S.: Je hoeft mijn bericht niet te quoten, wat ik schreef staat er al ;)
Rechtsboven bij een bericht staat de "Quote" knop, maar linksonder een bericht staat de "Plaats een reactie" knop.

Wat je met deze wilt, begrijp ik niet:
Code: Alles selecteren
int Winst_6 = 6;
int Winst_4 = 4;
int Winst_2 = 2;
int Winst_0 = 0;


je kunt gewoon dit doen:
Code: Alles selecteren
totaleWinst = totaleWinst + 4;   // 4 euro er bij
totaleWinst = totaleWinst - 1;  // start kosten er af
totaleWinst = 0;   // iemand gaat er met de pot vandoor


Stel dat je met 5 personen speelt, dan heb je 5 variabelen nodig om voor ieder de winst bij te houden. Nu heb je echt maar één bedrag, één winst.

Het is tijd om een stapje verder te gaan 8-)
Stel dat je iets wilt doen op het moment dat je een knop indrukt, en niet zolang een knop ingedrukt wordt gehouden.
Daar is de "State Change Detection" sketch voor: https://www.arduino.cc/en/Tutorial/BuiltInExamples/StateChangeDetection.
Het principe is om de vorige waarde te onthouden, en als de nieuwe waarde anders is, dan is er iets veranderd.
Kun je dat aan je sketch toevoegen voor de knop ?

Berichten: 11
Geregistreerd: 03 Okt 2020, 10:42
Woonplaats: Denekamp

Re: dobbelsteen

Berichtdoor melvinkamphuis » 12 Okt 2020, 12:00

ik heb inmiddels contact met m'n leraar gehad en die wil dat er een pot in komt waar de inzet in gaat en waar het gewonnen bedrag uit gaat. het is dan mogelijk dat je op een negatief bedrag komt maar dat komt weer goed als er weer ingezet moet worden. de bedoeling is dan dat je boven in de seriële monitor de aantal spelers invoert :oops: . ik weet niet zo goed hoe dat moet dus hoe kan ik dat het beste aanpakken? :mrgreen:
m.v.g
melvinkamphuis

VorigeVolgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten