2017-03-23 5 views
0

Donc, pour l'école, je fais un projet avec de petites bases, l'idée est très simple, tout comme ma question. Je fais une sorte de simulateur de jeu.Small Basic if-statement

ready: 
TextWindow.WriteLine("Do you want to bet? yes(1) or no(2).") 
answer = TextWindow.ReadNumber() 
If answer = 1 Then 
    Goto start 
Else 
    Goto ready 
    EndIf 
    start: 
TextWindow.WriteLine("Ok lets go.") 
points = 100 
var1 = Math.GetRandomNumber(10) 
If 5 < var1 < 9 Then 
    points = points + 100 
ElseIf 9 < var1 < 10 then 
    points = points + 200 
Elseif 1 < var1 < 5 then 
    points = points - 100 
EndIf 

TextWindow.WriteLine("You rolled " + var1 + ". You now have " + points + " points.") 

Le problème est que im face quoi qu'il arrive à mon var1 100 est ajouté à mes points, même quand var1 est par exemple 1 ou 10.

J'ai demandé à mon professeur, il ne pouvait pas m'expliquer ce qui n'allait pas. que dois-je faire?

merci d'avance

+0

problème est 'Aller ready'. Il n'y a pas de bloc 'ready:', donc le code continue sans sauter et 'points = 100' est exécuté tout le temps. Bonne chance et bonne programmation! –

+0

n'est pas le bloc "ready" sur la première ligne? – koceeng

+0

Je ne suis pas un expert de smallbasic mais après un peu de googling, je pense que 'si x koceeng

Répondre

0

Vous avez eu trois problèmes.

  1. Comme le suggère + koceeng, petite dose de base prend pas en charge la structure "x < y < z". Ce qui aggrave la situation, c'est la tendance de Small Basic à se mettre en sécurité, ce qui signifie que cela se compilera, mais je ne donnerai pas le résultat escompté. La structure correcte pour cette logique est "x < y et y < z". En d'autres termes, toute logique est binaire et les comparaisons ne devraient se produire que deux par deux.
  2. Vous avez un bug de logique lorsque vous passez de if à else. "5 < var1 et var1 < 9" combiné avec "9 < var1 et var1 < 10" a un trou dedans. Neuf abandons de la logique et l'instruction if ne correspond jamais. La même chose arrivera à 5. La combinaison correcte utilise un signe égal à une extrémité de la logique ou de l'autre: "9 < = var1 et var1 < 10".
  3. Votre boucle goto me faisait mal à la tête. À moins que vous ne fassiez quelque chose de simple comme créer une boucle infinie, en sautant du bas de votre programme vers le haut, vous devriez généralement éviter complètement l'instruction goto. Une boucle while est un meilleur choix pour le type de protection d'entrée que vous faites.

Voici une version corrigée de votre code:

answer = 2 
While answer <> 1 'Input Protection 
TextWindow.WriteLine("Do you want to bet? yes(1) or no(2).") 
answer = TextWindow.ReadNumber() 
EndWhile 

TextWindow.WriteLine("Ok lets go.") 
points = 100 
var1 = Math.GetRandomNumber(10) 
If 5 <= var1 And var1 < 9 Then 
    points = points + 100 
ElseIf 9 = var1 or var1 = 10 then 
    points = points + 200 
Elseif 1 <= var1 and var1 < 5 then 
    points = points - 100 
EndIf 

TextWindow.WriteLine("You rolled " + var1 + ". You now have " + points + " points.")