Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   Racegame in C# (https://forum.scholieren.com/showthread.php?t=1923654)

Maylena 26-10-2016 09:10

Racegame in C#
 
Ik weet niet of dit hier goed staat, maar ik begin net een maand met programmeren in C# (Visual Studio 2015) en ik moet een racegame maken.

Hoe kan ik ervoor zorgen dat een object, in dit geval een autootje, een maximum snelheid heeft? Nu hebben we (van een voorbeeld die we mogen gebruiken):

if (e.KeyCode == Keys.Up)
{
speed = speed + 2f;

if (speed >= 10.0)
{
speed = 10.0f;
}
}
if (e.KeyCode != Keys.Up)
{
speed -= 1;
}
if (e.KeyCode == Keys.Down)
{
speed -= 2;
}

Maar als hij snelheid 10 bereikt, blijft hij dus continu 10 rijden (trouwens ook met langzamere snelheden, dan blijft hij ook doorrijden).

Hebben jullie ideeën om dit te fixen?
De dingen die we op internet tegenkomen, zijn erg ingewikkeld, omdat we nog maar net begonnen zijn.

Bedankt!

deadlock 26-10-2016 11:56

Waar is mijn antwoord gebleven? :eek:

deadlock 26-10-2016 12:06

Nou jah, poging 2 dan maar:

De reden waarom het fout gaat is omdat je ergens bovenaan hebt:
Code:

if (speed >= 10.0)
{
speed = 10.0f;
}

Wat je moet doen is een andere volgorde hanteren, en tevens je variabelen wat handiger benoemen en er meer van moet gebruiken (of constanten maar de maximumsnelheid kan variabel zijn) en je moet explicieter zijn in wat je wil volgens mij staat hierboven alleen keys.up gedefinieerd en daarna alle andere dingen. In een ietwat vreemde volgorde.

En leer ook de [code] tags gebruiken voor duidelijkheid, dat vind je op heel veel verschillende platformen terug, sommige websites hebben zelfs syntax highlighting.

Ik ga er even vanuit dat de snelheid een integer is:

Code:

int intVarMaxSpeed = 10
int intVarSpeed = 0
int intVarSpeedStep = 1

if Keys.Up
{
  if (intVarSpeed + intVarSpeedStep => intVarMaxSpeed)
  {
    intVarSpeed = intVarMaxSpeed;
  }
  else
  {
    intVarSpeed = intVarSpeed + intVarSpeedStep;
  }
}
if Keys.Down
{
  if (intVarSpeed + intVarSpeed <= 0) //minimumsnelheid mag niet onder 0 uitkomen
  {
    intVarSpeed = 0;
  }
  else
  {
    intVarSpeed = intVarSpeed - intVarSpeedStep;
  }
}

Is dat duidelijk zo?

deadlock 26-10-2016 12:08

Disclaimer: De laatste keer dat ik C# heb gebruikt was toen de taal versie 1 nog lang niet bereikt had in 2000/2001...

bierkoning 26-10-2016 12:33

Citaat:

deadlock schreef: (Bericht 34245423)
Waar is mijn antwoord gebleven? :eek:

Die is dan niet doorgekomen. Ik zie niets hier verder. En heb ook niets verwijderd

deadlock 26-10-2016 12:35

Citaat:

bierkoning schreef: (Bericht 34245495)
Die is dan niet doorgekomen. Ik zie niets hier verder. En heb ook niets verwijderd

Er stond geen onvertogen woord in dus ik ging er ook niet vanuit dat een van de mods het had gedaan. Kreeg net een 503 error op DK maar de post was wel gemaakt. Misschien heb ik iets te enthousiast CTRL-W gedrukt bij een ander tabblad.

@noniem 15-06-2017 20:35

Ik weet niet of je er nog wat aan hebt maar goed. De reden dat hij op 10 blijft is omdat je zegt speed >= 10, oftewel speed is hoger dan of gelijk aan 10 en dan maak je hem 10... als je dus speed > 10 doet zou het weg moeten zijn.

BerendBokkepoot 15-06-2018 10:47

Ik persoonlijk raad aan om een switch case te gebruiken in deze situatie,

switch (boolval) {
case true:
/* code */
break;
case false;
/* code */
break;
}


dit om het alom bekende bethesda probleem te vermijden.
ik hoop dat je het nu wel lukt,

xxx

Patrice


Alle tijden zijn GMT +1. Het is nu 09:37.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.