2016-08-06 3 views
1

Каждый раз, когда возникает арифметический вопрос, и всякий раз, когда я выбираю правильный или неправильный ответ, утверждение функции checkanswer() всегда продолжается if-statement «Correct». Как я в состоянии создать, если/другое заявление правильно основываться на арифметической вопрос varanswer = var1 + var2Если/else оператор Lua

function checkAnswer(event) 

if(#theAnswer == questionGen()) then 
     instructionsText.text = "Correct!"; 
     instructionsText:toFront() 
     generateBalls() 
     for i=1, allBallsGroup.numChildren do 
      display.remove(allBallsGroup[1]) 
     end 
    else 
     instructionsText.text = "Incorrect!"; 
     instructionsText:toFront() 
     generateBalls() 
     for i=1, allBallsGroup.numChildren do 
      display.remove(allBallsGroup[1]) 
     end 
    end 
end 


function questionGen() 

local questionVar1 = display.newImage("ygSquare.png", 150, 500); 
local var1 = math.random(1,9) 
local var1Display =display.newText(var1, 200, 500, native.systemFont, 200) 
questionVar1.width = 200 
questionVar1.height = 200 
questionVar1.x = 350 
questionVar1.y = 500 
var1Display.x = 350 
var1Display.y = 500 
var1Display:setTextColor("#000000") 
local questionVar2 = display.newImage("blueSquare.png", 150, 500); 
local var2 = math.random(1,9) 
local var2Display = display.newText(var2, 200, 500, native.systemFont, 200) 
questionVar2.width = 200 
questionVar2.height = 200 
questionVar2.x = 700 
questionVar2.y = 500 
var2Display.x = 700 
var2Display.y = 500 
var2Display:setTextColor("#000000") 
local operator = "   +  " 
local operatorDisplay = display.newText(operator, 400, 500, native.systemFont, 200) 
operatorDisplay:setTextColor("#000000") 
local varAnswer = var1 + var2 
return varAnswer 

end 
+0

Где 'theAnswer' переменная установлена в вашем коде? – slavanap

ответ

0

Ваши случайные значения больше 1 и сложения двух чисел больше, чем 1, будет больше 1. Это означает, что questionGen() всегда возвращает true. Я разделил бы var1 и var2 на 9, чтобы он нормализовался. Также вам нужно будет добавить строку, чтобы проверить, соответствует ли varAnswer более 1 (0,5 + 05) true true else return false.

function questionGen() 

local varAnswer = var1/9 + var2/9 
if(varAnswer>=1) then return true end 
return false 
end 

Теперь в вашей другой функции вы можете проверить if(questionGen()) then

+0

Macroland Я сделал то, что вы сказали о varAnswer, если он> 1, и да, вы дали мне представление о том, как я буду работать с этим кодом, но все равно всегда возвращаю true .. i modified "if (#theAnswer == questionGen()) then "in" if (questionGen (varAnswer)> 1) then ".. –

+0

' if (questionGen (varAnswer)> 1) 'statement не будет работать, так как ваш' varAnswer' в 'questionGen()' является суммой двух случайных результатов. Кстати, в вашем посте я до сих пор не уверен, откуда берется «theAnswer». – macroland

+0

Macro checkAnswer() и локальный varAnswer = var1/9 + var2/9 теперь работают, но он имеет логическую ошибку, в которой входные данные становятся десятичными. Моя игра обычно генерирует арифметическое добавление вопроса и его множественный выбор, а ввод - целые числа , Я чувствую себя немой прямо сейчас, потому что я не могу правильно выполнить математику :( –

0

Это использование для создания входов или выбор в моей игре макро

local theAnswer= ""; 
local theAnswerText; 

function createBall() 

local var numberArray = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "11", "12", "13", "14", "15", "16", "17", "18"}; 
local tens = {questionGen(#theAnswer)} 
local ballType = math.random(8); 
local ballSize = math.random(2) 
local letterIndex 
local letter 
if(createTens == true) then 

    letterIndex = math.random(#tens) 
    letter = tens[letterIndex]; 
else 
letterIndex = math.random(#numberArray); 
letter = numberArray[letterIndex]; 
    letterIndex = math.random(#tens) 
    letter = tens[letterIndex]; 
end 

local ballGroup = display.newGroup(); 
local ball 
local ballRadius 
if(ballType == 1) then 
    ball = display.newImage("whiteBall.png"); 
elseif(ballType == 2) then 
    ball = display.newImage("brownBall.png"); 
elseif(ballType == 3) then 
    ball = display.newImage("pinkBall.png"); 
elseif(ballType == 4) then 
    ball = display.newImage("whiteBall.png"); 
elseif(ballType == 5) then 
    ball = display.newImage("yellowBall.png"); 
elseif(ballType == 6) then 
    ball = display.newImage("whiteBall.png"); 
elseif(ballType == 7) then 
    ball = display.newImage("greenBall.png"); 
else 
    ball = display.newImage("redBall.png"); 
end 
if(ballSize == 1)then 
    ball.width = 200; 
    ball.height = 200; 
    ballRadius = 30; 
else 
    ball.width = 200; 
    ball.height = 200; 
    ballRadius = 30;  
end 

local letterText = display.newText(letter, 0,0, native.systemFontBold, 100); 
letterText:setTextColor(0,0, 0); 
letterText.x = ball.x; 
letterText.y = ball.y; 
ballGroup:insert(ball); 
ballGroup:insert(letterText); 
ballGroup.x = math.random(ballRadius,display.contentWidth-ballRadius*3); 
ballGroup.y= 40; 
physics.addBody(ballGroup, 'dynamic',{friction = 0,bounce = 0,radius = ballRadius*3}); 
ballGroup.name = "ball"; 
ballGroup.letter = letter; 

ballGroup:addEventListener('tap',checkAnswer); 
table.insert(allBalls,ballGroup) 
allBallsGroup:insert(ballGroup) 

конец

+0

Поскольку ваш код не очень ясен, по крайней мере, для меня, чтобы быть на одной странице: пытаетесь ли вы получить случайное число между 1- 18 и в зависимости от числа вы выбираете шарик цвета и показываете, что мяч на экране? ИЛИ Вы пытаетесь показать случайно 9 шаров на экране и тестирование на основе критериев, выбрал ли пользователь правильный шар. Извините, не имея четкого понимания того, что вы делаете, это трудно сделать дальше. – macroland

+0

Чтобы было ясно, я меняю локальные «десятки = {questionGen (#theAnswer)}» на локальные «десятки = {questionGen (varAnswer)}». 1- 18 массив varAnswer плохо показывает вам vi deo захват моей игры heres ссылка: https://www.youtube.com/watch?v=zvF3-Po-wHI&feature=youtu.be –

+0

Я действительно ценю вас, marco, чтобы ответить на мой вопрос, спасибо ... –

Смежные вопросы