<?xml version="1.0" encoding="UTF-16"?>
<!-- This XML file has been created by WebEJS 1.0. Visit http://t.um.es/webejs -->
<!-- Please, open it with WebEJS or save the file to your hard disk on your EJS' user directory and open it with Desktop Ejs 6.01 or later. -->
<Osejs version="7.0" password="">
<Osejs.Information>
<Title><![CDATA[Solve the linear equation]]></Title>
<Copyright><![CDATA[]]></Copyright>
<Keywords><![CDATA[]]></Keywords>
<Password><![CDATA[]]></Password>
<Level><![CDATA[]]></Level>
<Language><![CDATA[]]></Language>
<Abstract><![CDATA[]]></Abstract>
<FixedNavigationBar>false</FixedNavigationBar>
<RunAlways>true</RunAlways>
<UseInterpreter>true</UseInterpreter>
<UseDeltaForODE>false</UseDeltaForODE>
<PreviewFullModel>false</PreviewFullModel>
<ModelTab></ModelTab>
<ModelTabTitle><![CDATA[]]></ModelTabTitle>
<ModelName><![CDATA[]]></ModelName>
<CSSFile></CSSFile>
<HTMLHead><![CDATA[<script 
async="true" src="https://www.googletagmanager.com/gtag/js?id=G-S9EWRY1CPJ"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-S9EWRY1CPJ');
</script>]]></HTMLHead>
<SaveInXMLFormat>true</SaveInXMLFormat>
<IncludeSource>true</IncludeSource>
<IncludeLibrary>true</IncludeLibrary>
<UglifyJS>false</UglifyJS>
<Logo>./logo2.png</Logo>
<Author><![CDATA[MarinahToh;lookang;DesK]]></Author>
<AuthorLogo>;./01authorlookang50x50.png;</AuthorLogo>
<DetectedFiles><![CDATA[./01authorlookang50x50.png;./logo2.png]]></DetectedFiles>
<AuxiliaryFiles><![CDATA[./Unnamed3/;./logo2.png;./newsoccerball.png]]></AuxiliaryFiles>
</Osejs.Information>
<Osejs.Description>
<Osejs.Description.Page>
<Type>DESCRIPTION_EDITOR</Type>
<Name>Introduction</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<OneHTMLPage>
  <Locale>_default_</Locale>
  <Title>Introduction - Solving Linear Equations with integer coefficients</Title>
  <External>false</External>
  <![CDATA[
<html>
<head></head>
<body>
<h1>Pre-requisites</h1><ol><li>Know the concepts of, and distinguish an expression from an equation.</li><li>State that <em>x</em> = 4 is a solution to the equation <em>x</em> + 2 = 6.</li><li>Solve linear equations (with integer coefficients).</li></ol><h1>Learning Outcome</h1><ol><li>Solve linear equations (with integer coefficients).<br></li></ol><h1>Introduction</h1><p>This game serves as a formative tool for students to assess their mastery of solving linear equations.</p>
</body>
</html>
]]>
</OneHTMLPage>
</Content>
</Osejs.Description.Page>
<Osejs.Description.Page>
<Type>DESCRIPTION_EDITOR</Type>
<Name>Activity (Instructions)</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<OneHTMLPage>
  <Locale>_default_</Locale>
  <Title>Activity (Instructions)</Title>
  <External>false</External>
  <![CDATA[
<html>
<head></head>
<body>
<h1>Activity (Instructions)</h1><ol><li>Press the Play button to start.<br></li><li>There will be 5 linear equations to solve. For each linear equation,<br><ol><li>solve and obtain its solution and,</li><li>align the bunny to the soccer ball that corresponds to the correct solution.<br></li></ol></li><li>A new linear equation will be given once the correct solution is obtained.</li><li>At the end of 5 linear equations, the game will end.</li><li>Scoring<ol><li>Each correct solution yields 2 points.</li><li>If the correct solution flew past the bunny, half a point will be deducted.<br></li><li>If the bunny is matched to an incorrect solution, 1 point will be deducted.</li></ol></li></ol>
</body>
</html>
]]>
</OneHTMLPage>
</Content>
</Osejs.Description.Page>
</Osejs.Description>
<Osejs.Model>
<Osejs.Model.FramesPerSecond>20</Osejs.Model.FramesPerSecond>
<Osejs.Model.StepsPerDisplay>1</Osejs.Model.StepsPerDisplay>
<Osejs.Model.RealTimeVariable></Osejs.Model.RealTimeVariable>
<Osejs.Model.Autostart>false</Osejs.Model.Autostart>
<Osejs.Model.Variables>
<Osejs.Model.Variables.Page>
<Type>VARIABLE_EDITOR</Type>
<Name>EditableVariables</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<PageComment><![CDATA[]]></PageComment>
<Variable>
<Name><![CDATA[numberofrounds]]></Name>
<Value><![CDATA[5]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[numberofoption]]></Name>
<Value><![CDATA[4]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[answerstringarray]]></Name>
<Value><![CDATA[[["-1","1","2","-2"],["2","-2","4/3","-4/3"],["-1","1","-1.5","1.5"],["2","-2","1","-1"],["3","-3","1/3","-1/3"],["3","-3","0","1"]]]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[[numberofoption][numberofrounds+1]]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[catchanswerarray]]></Name>
<Value><![CDATA[["2x + 3 = 1","3x - 5 = 1","4x - 1=-5","3 - 2x=-1","5 - 3x=-4","3 - x = 0"]]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[[numberofoption][numberofrounds+1]]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[]]></Name>
<Value><![CDATA[]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[vx]]></Name>
<Value><![CDATA[Math.max(Math.random(),0.3)]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[[numberofoption]]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[backGroundImage]]></Name>
<Value><![CDATA["./Unnamed3/soccer-field.png"]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[title]]></Name>
<Value><![CDATA["Solve the linear equation:"]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[]]></Name>
<Value><![CDATA[]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
</Content>
</Osejs.Model.Variables.Page>
<Osejs.Model.Variables.Page>
<Type>VARIABLE_EDITOR</Type>
<Name>Var Table</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<PageComment><![CDATA[]]></PageComment>
<Variable>
<Name><![CDATA[font]]></Name>
<Value><![CDATA[""]]></Value>
<Type><![CDATA[String]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[t]]></Name>
<Value><![CDATA[0]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[dt]]></Name>
<Value><![CDATA[0.05]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[n]]></Name>
<Value><![CDATA[numberofoption]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[x]]></Name>
<Value><![CDATA[2.8]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[[n]]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[ymax]]></Name>
<Value><![CDATA[6]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[y]]></Name>
<Value><![CDATA[""]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[[n]]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[[1,2.5,4,5.5]]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[vy]]></Name>
<Value><![CDATA[0]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[[n]]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[Math.max(Math.random(),0.5)]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[text]]></Name>
<Value><![CDATA[[1,2,3,4]]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[[n]]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[textanswer]]></Name>
<Value><![CDATA[[answerstringarray[0][0],answerstringarray[0][1],answerstringarray[0][2],answerstringarray[0][3],answerstringarray[0][4]]]]></Value>
<Type><![CDATA[String]]></Type>
<Dimension><![CDATA[[n]]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[["took","taked","takes","take"]]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[vocabaudio]]></Name>
<Value><![CDATA[]]></Value>
<Type><![CDATA[boolean]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[a]]></Name>
<Value><![CDATA[Math.round(Math.random()*10)]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[[n]]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[b]]></Name>
<Value><![CDATA[Math.round(Math.random()*10)]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[[n]]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[c]]></Name>
<Value><![CDATA[1]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[[n]]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[]]></Name>
<Value><![CDATA[]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
</Content>
</Osejs.Model.Variables.Page>
<Osejs.Model.Variables.Page>
<Type>VARIABLE_EDITOR</Type>
<Name>Var Table 2</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<PageComment><![CDATA[]]></PageComment>
<Variable>
<Name><![CDATA[xc]]></Name>
<Value><![CDATA[0]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[yc]]></Name>
<Value><![CDATA[2.5]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[score]]></Name>
<Value><![CDATA[0]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[textcatch]]></Name>
<Value><![CDATA[""]]></Value>
<Type><![CDATA[String]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA["take"]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[correct]]></Name>
<Value><![CDATA[0]]></Value>
<Type><![CDATA[String]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[log]]></Name>
<Value><![CDATA[]]></Value>
<Type><![CDATA[String]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[notrynumber]]></Name>
<Value><![CDATA[0]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[]]></Name>
<Value><![CDATA[]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[public]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
</Content>
</Osejs.Model.Variables.Page>
</Osejs.Model.Variables>
<Osejs.Model.Initialization>
<Osejs.Model.Initialization.Page>
<Type>CODE_EDITOR</Type>
<Name>shuffleArray(array)</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[

textcatch = catchanswerarray[0] // assign first word to catcher rabbit
//numeric.linspace (start,stop,number)
y = numeric.linspace(0,ymax,numberofoption) //using numeric library to arrange


shuffleArray(y);
//
setResponsiveFontSize()

]]></Code>
</Content>
</Osejs.Model.Initialization.Page>
<Osejs.Model.Initialization.Page>
<Type>CODE_EDITOR</Type>
<Name>undefined</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
if (log==undefined){
  log="";
  }
]]></Code>
</Content>
</Osejs.Model.Initialization.Page>
<Osejs.Model.Initialization.Page>
<Type>CODE_EDITOR</Type>
<Name>messageSize</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
if (_isMobile){
  //do nothing
  }
  
  else{
    // copy this into the initialization
// make the font bigger
var fontSize = "1vw"
_view.plottingPanel.getMessageDecoration("TL").getFont().setFontSize(fontSize);
_view.plottingPanel.getMessageDecoration("TR").getFont().setFontSize(fontSize);
_view.plottingPanel.getMessageDecoration("BL").getFont().setFontSize(fontSize);
_view.plottingPanel.getMessageDecoration("BR").getFont().setFontSize(fontSize);

//_view.plottingPanel.getMessageDecoration("TL").getStyle().setFillColor("red");
    }
]]></Code>
</Content>
</Osejs.Model.Initialization.Page>
<Osejs.Model.Initialization.Page>
<Type>CODE_EDITOR</Type>
<Name>picturesize</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
//orig_listener = _view.plottingPanel.getAxisX().panelChangeListener; _view.plottingPanel.getAxisX().panelChangeListener = function(e) { orig_listener(e); _view.backgroundsoccerfield.setSizeX(_view.plottingPanel.getRealWorldXMax()-_view.plottingPanel.getRealWorldXMin()); _view.backgroundsoccerfield.setSizeY(_view.plottingPanel.getRealWorldYMax()-_view.plottingPanel.getRealWorldYMin()); }
]]></Code>
</Content>
</Osejs.Model.Initialization.Page>
</Osejs.Model.Initialization>
<Osejs.Model.Evolution>
<Osejs.Model.Evolution.Page>
<Type>ODE_EDITOR</Type>
<Name>Evol Page</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<PreliminaryCode>
<Comment><![CDATA[Code to be executed before rate equations are evaluated]]></Comment>
<Code><![CDATA[

]]></Code>
</PreliminaryCode>
<ErrorHandling>
</ErrorHandling>
<DelayInitialCondition>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[

]]></Code>
</DelayInitialCondition>
<Discontinuities>
</Discontinuities>
<Events>
<Event.Page>
<Type>EVENT_EDITOR</Type>
<Name>collisioncorrect</Name>
<Active>true</Active>
<Internal>false</Internal>
<EventContent>
<EventType>CROSSING_EVENT</EventType>
<Method>BISECTION</Method>
<Iterations>100</Iterations>
<Tolerance><![CDATA[1.0]]></Tolerance>
<StopAtEvent>false</StopAtEvent>
<ZeroCondition><![CDATA[
return Math.sqrt((x[0]-xc)*(x[0]-xc)+(y[0]-yc)*(y[0]-yc))-0.5;
]]></ZeroCondition>
<Action><![CDATA[
//alert();
score=score+2;
correct = correct +1;
_view.audio.play();
log = log+"\n"+textanswer[0]+" is the solution to "+textcatch+"✅"; 
x[0]=3;
x[1]=3;
x[2]=3;
x[3]=3;
shuffleArray(y); 
//speech("correct");
speech(textanswer[0]+" is the solution to "+textcatch);
//alert();
if (correct==5){ // game mechanism counter
  _pause();
  _tools.showOkDialog("Well Done，your score is "+score+"/"+2*numberofrounds+" !");
  _view.audio1.play();
  }
  else{
textanswer=answerstringarray[correct]; //since correct is increase by 1, use this to change 4 options
textcatch=catchanswerarray[correct]; // change basket text as well
} // game mechanism counter
vyspeedchange ();
notrynumber=0;
]]></Action>
<Comment><![CDATA[]]></Comment>
</EventContent>
</Event.Page>
<Event.Page>
<Type>EVENT_EDITOR</Type>
<Name>miss</Name>
<Active>true</Active>
<Internal>false</Internal>
<EventContent>
<EventType>CROSSING_EVENT</EventType>
<Method>BISECTION</Method>
<Iterations>100</Iterations>
<Tolerance><![CDATA[1.0e-5]]></Tolerance>
<StopAtEvent>false</StopAtEvent>
<ZeroCondition><![CDATA[
return x[0]-0;
]]></ZeroCondition>
<Action><![CDATA[
x[0] = 3;
notrynumber = notrynumber+1;
if (notrynumber%4==0) {
score=score-0.5;
log = log+"\n"+"Hurry! Did you choose a solution to "+textcatch+"❓";
}
]]></Action>
<Comment><![CDATA[]]></Comment>
</EventContent>
</Event.Page>
<Event.Page>
<Type>EVENT_EDITOR</Type>
<Name>miss1</Name>
<Active>true</Active>
<Internal>false</Internal>
<EventContent>
<EventType>CROSSING_EVENT</EventType>
<Method>BISECTION</Method>
<Iterations>100</Iterations>
<Tolerance><![CDATA[1.0e-5]]></Tolerance>
<StopAtEvent>false</StopAtEvent>
<ZeroCondition><![CDATA[
return x[1]-0;
]]></ZeroCondition>
<Action><![CDATA[
x[1] = 3;
notrynumber = notrynumber+1;
if (notrynumber%4==0) {
score=score-0.5;
log = log+"\n"+"Hurry! Did you choose a solution to "+textcatch+"❓";
}
]]></Action>
<Comment><![CDATA[]]></Comment>
</EventContent>
</Event.Page>
<Event.Page>
<Type>EVENT_EDITOR</Type>
<Name>miss2</Name>
<Active>true</Active>
<Internal>false</Internal>
<EventContent>
<EventType>CROSSING_EVENT</EventType>
<Method>BISECTION</Method>
<Iterations>100</Iterations>
<Tolerance><![CDATA[1.0e-5]]></Tolerance>
<StopAtEvent>false</StopAtEvent>
<ZeroCondition><![CDATA[
return x[2]-0;
]]></ZeroCondition>
<Action><![CDATA[
x[2] = 3;
notrynumber = notrynumber+1;
if (notrynumber%4==0) {
score=score-0.5;
log = log+"\n"+"Hurry! Did you choose a solution to "+textcatch+"❓";
}
]]></Action>
<Comment><![CDATA[]]></Comment>
</EventContent>
</Event.Page>
<Event.Page>
<Type>EVENT_EDITOR</Type>
<Name>miss3</Name>
<Active>true</Active>
<Internal>false</Internal>
<EventContent>
<EventType>CROSSING_EVENT</EventType>
<Method>BISECTION</Method>
<Iterations>100</Iterations>
<Tolerance><![CDATA[1.0e-5]]></Tolerance>
<StopAtEvent>false</StopAtEvent>
<ZeroCondition><![CDATA[
return x[3]-0;
]]></ZeroCondition>
<Action><![CDATA[
x[3] = 3;
notrynumber = notrynumber+1;
if (notrynumber%4==0) {
score=score-0.5;
log = log+"\n"+"Hurry! Did you choose a solution to "+textcatch+"❓";
//log = log+"\n"+"口口"+textcatch+"❓";
}
]]></Action>
<Comment><![CDATA[]]></Comment>
</EventContent>
</Event.Page>
<Event.Page>
<Type>EVENT_EDITOR</Type>
<Name>collisionwrong2</Name>
<Active>true</Active>
<Internal>false</Internal>
<EventContent>
<EventType>CROSSING_EVENT</EventType>
<Method>BISECTION</Method>
<Iterations>100</Iterations>
<Tolerance><![CDATA[1.0]]></Tolerance>
<StopAtEvent>false</StopAtEvent>
<ZeroCondition><![CDATA[
return Math.sqrt((x[1]-xc)*(x[1]-xc)+(y[1]-yc)*(y[1]-yc))-0.25;
]]></ZeroCondition>
<Action><![CDATA[
//alert();
score=score-1;
log = log+"\n"+textanswer[1]+" is NOT the solution to "+textcatch+"❌";
//x[0]=3;
x[1]=3;
//x[2]=3;
//x[3]=3;
]]></Action>
<Comment><![CDATA[]]></Comment>
</EventContent>
</Event.Page>
<Event.Page>
<Type>EVENT_EDITOR</Type>
<Name>collisionwrong 3</Name>
<Active>true</Active>
<Internal>false</Internal>
<EventContent>
<EventType>CROSSING_EVENT</EventType>
<Method>BISECTION</Method>
<Iterations>100</Iterations>
<Tolerance><![CDATA[1.0]]></Tolerance>
<StopAtEvent>false</StopAtEvent>
<ZeroCondition><![CDATA[
return Math.sqrt((x[2]-xc)*(x[2]-xc)+(y[2]-yc)*(y[2]-yc))-0.25;
]]></ZeroCondition>
<Action><![CDATA[
//alert();
score=score-1;
log = log+"\n"+textanswer[2]+" is NOT the solution to "+textcatch+"❌";
//x[0]=3;
//x[1]=3;
x[2]=3;
//x[3]=3;
]]></Action>
<Comment><![CDATA[]]></Comment>
</EventContent>
</Event.Page>
<Event.Page>
<Type>EVENT_EDITOR</Type>
<Name>collisionwrong 4</Name>
<Active>true</Active>
<Internal>false</Internal>
<EventContent>
<EventType>CROSSING_EVENT</EventType>
<Method>BISECTION</Method>
<Iterations>100</Iterations>
<Tolerance><![CDATA[1.0]]></Tolerance>
<StopAtEvent>false</StopAtEvent>
<ZeroCondition><![CDATA[
return Math.sqrt((x[3]-xc)*(x[3]-xc)+(y[3]-yc)*(y[3]-yc))-0.25;
]]></ZeroCondition>
<Action><![CDATA[
//alert();
score=score-1;
log = log+"\n"+textanswer[3]+" is NOT the solution to "+textcatch+"❌";
//x[0]=3;
//x[1]=3;
//x[2]=3;
x[3]=3;

]]></Action>
<Comment><![CDATA[]]></Comment>
</EventContent>
</Event.Page>
</Events>
<ZenoEffect>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[

]]></Code>
<StopAfterEffect>true</StopAfterEffect>
</ZenoEffect>
<IndependentVariable>t</IndependentVariable>
<Increment>dt</Increment>
<Rate state="x[i]">-vx[i]</Rate>
<Method>RungeKutta</Method>
<Tolerance></Tolerance>
<InternalStep></InternalStep>
<MemoryLength></MemoryLength>
<MaximumStep></MaximumStep>
<MaximumNumberOfSteps>10000</MaximumNumberOfSteps>
<AbsoluteTolerance>0.00001</AbsoluteTolerance>
<RelativeTolerance></RelativeTolerance>
<EstimateFirstStep>false</EstimateFirstStep>
<AccelerationIndependentOfVelocity>false</AccelerationIndependentOfVelocity>
<ForceSynchronization>false</ForceSynchronization>
<UseBestInterpolation>false</UseBestInterpolation>
<EventMaximumStep></EventMaximumStep>
<DelayList><![CDATA[]]></DelayList>
<DelayMaximum><![CDATA[]]></DelayMaximum>
<DelayAddDiscont><![CDATA[]]></DelayAddDiscont>
<DirectIncidenceMatrix><![CDATA[]]></DirectIncidenceMatrix>
<Comment><![CDATA[]]></Comment>
</Content>
</Osejs.Model.Evolution.Page>
</Osejs.Model.Evolution>
<Osejs.Model.Constraints>
<Osejs.Model.Constraints.Page>
<Type>CODE_EDITOR</Type>
<Name>FixRel Page</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[

]]></Code>
</Content>
</Osejs.Model.Constraints.Page>
</Osejs.Model.Constraints>
<Osejs.Model.Library>
<Osejs.Model.Library.Page>
<Type>LIBRARY_EDITOR</Type>
<Name>shuffleArray(array)</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
// in initialization
// possible usage if x is the array
//shuffleArray(x);


//https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
/**
 * Randomize array element order in-place.
 * Using Durstenfeld shuffle algorithm.
 */
function shuffleArray(array) {
    for (var i = array.length - 1; i > 0; i--) {
        var j = Math.floor(Math.random() * (i + 1));
        var temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}
]]></Code>
</Content>
</Osejs.Model.Library.Page>
<Osejs.Model.Library.Page>
<Type>LIBRARY_EDITOR</Type>
<Name>speech</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
// copy this custom function
// in iOS need to add speech to the play button as On iOS the API works but must be triggered by a user action callback, like a response to a tap event, to provide a better experience to users and avoid unexpected sounds out of your phone
function speech (option) {


// allow code to run in Student Learning Space 
var isCordova = (!!this.parent.cordova || !!window.cordova);
if(isCordova) { // check it is running in Android or iOS
        parent.TTS.speak({text:option,locale:'en-US'});
	// parent.TTS.speak({text:option,locale:'en-US'});
} else {
  var msg = new SpeechSynthesisUtterance(option);

  //https://stackoverflow.com/questions/43983845/speechsynthesis-api-for-english-firefox
  // Set the text.
	//msg.text = option; 
	//https://forums.developer.apple.com/message/323564#323564
	// comment out the next 2 lines for english
//msg.voice = speechSynthesis.getVoices().filter(function(voice) { return voice.name == 'Ting-Ting'; })[0];
msg.lang = 'en-US'; // need for android?

//https://flaviocopes.com/speech-synthesis-api/
//debug
//console.log(`Voices #: ${speechSynthesis.getVoices().length}`)
//speechSynthesis.getVoices().forEach(voice => {
// console.log(voice.name, voice.lang)
//})
//debug

// Queue this utterance.
window.speechSynthesis.speak(msg);
}

}
]]></Code>
</Content>
</Osejs.Model.Library.Page>
<Osejs.Model.Library.Page>
<Type>LIBRARY_EDITOR</Type>
<Name>vyspeedchange</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[

function vyspeedchange () {
  for (var counter=0; counter<n  ; counter++) {
  //vx[counter] = 0.3
  vx[counter] = Math.max(Math.random(),0.3);
  }
}
]]></Code>
</Content>
</Osejs.Model.Library.Page>
<Osejs.Model.Library.Page>
<Type>LIBRARY_EDITOR</Type>
<Name>setResponsiveFontSize</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
function setResponsiveFontSize() {
    // Get the viewport dimensions
    var viewportWidth = window.innerWidth || document.documentElement.clientWidth;
    var viewportHeight = window.innerHeight || document.documentElement.clientHeight;
    var percent = 0.03
    // Calculate the font size based on viewport width or height
    var fontSize = Math.min(viewportWidth * percent, viewportHeight * percent); // Adjust the multiplier as needed

    // Set the font size
    font = "normal normal " + fontSize + "px"; // You can use px or other units as needed

    // Apply the font size to your elements
    // For example, you can apply it to a specific element with a class
    //document.getElementById("yourElementId").style.font = font;
}
]]></Code>
</Content>
</Osejs.Model.Library.Page>
</Osejs.Model.Library>
<Osejs.Model.Elements>
<Osejs.Model.Elements.Element>
<Osejs.Model.Elements.Element.Classname>org.colos.ejss.model_elements.numerics.NumericJavascriptElement</Osejs.Model.Elements.Element.Classname>
<Osejs.Model.Elements.Element.Name>numericJS</Osejs.Model.Elements.Element.Name>
</Osejs.Model.Elements.Element>
</Osejs.Model.Elements>
</Osejs.Model>
<Osejs.HtmlView>
<Osejs.HtmlView.Page>
<Type>HTML_VIEW_EDITOR</Type>
<Name>HtmlView</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<SizeOption>0</SizeOption>
<X>0</X>
<Y>0</Y>
<Width>800</Width>
<Height>600</Height>
<KeepHidden>true</KeepHidden>
<RootProperties>
</RootProperties>
<Tree>
<HtmlView.Element>
<Expanded>true</Expanded>
<Type>Elements.Panel</Type>
<Name><![CDATA[singlePlotPanel]]></Name>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Label</Type>
<Name><![CDATA[title]]></Name>
<Parent><![CDATA[singlePlotPanel]]></Parent>
<Property name="Text"><![CDATA[%title%]]></Property>
<Property name="Font"><![CDATA[%font%]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Expanded>true</Expanded>
<Type>Elements.Panel</Type>
<Name><![CDATA[executionPanel]]></Name>
<Parent><![CDATA[singlePlotPanel]]></Parent>
<Property name="Font"><![CDATA[%font%]]></Property>
<Property name="Display"><![CDATA["inline-block"]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.TwoStateButton</Type>
<Name><![CDATA[runPauseButton]]></Name>
<Parent><![CDATA[executionPanel]]></Parent>
<Property name="OffClick"><![CDATA[%_pause%]]></Property>
<Property name="TextOn"><![CDATA["Play▶"]]></Property>
<Property name="State"><![CDATA[_isPaused]]></Property>
<Property name="Tooltip"><![CDATA["Play/Pause"]]></Property>
<Property name="TextOff"><![CDATA["Pause❚❚"]]></Property>
<Property name="OnClick"><![CDATA[_play();
//speech("玩"); 
]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Button</Type>
<Name><![CDATA[stepButton]]></Name>
<Parent><![CDATA[executionPanel]]></Parent>
<Property name="Tooltip"><![CDATA["Step"]]></Property>
<Property name="Text"><![CDATA["Step|►"]]></Property>
<Property name="OnClick"><![CDATA[%_step%]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Button</Type>
<Name><![CDATA[initButton]]></Name>
<Parent><![CDATA[executionPanel]]></Parent>
<Property name="Tooltip"><![CDATA["Initialize"]]></Property>
<Property name="OnClick"><![CDATA[%_initialize%]]></Property>
<Property name="Display"><![CDATA["none"]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Button</Type>
<Name><![CDATA[resetButton]]></Name>
<Parent><![CDATA[executionPanel]]></Parent>
<Property name="Tooltip"><![CDATA["Reset"]]></Property>
<Property name="Text"><![CDATA["Reset↻"]]></Property>
<Property name="OnClick"><![CDATA[%_reset%]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Expanded>true</Expanded>
<Type>Elements.PlottingPanel</Type>
<Name><![CDATA[plottingPanel]]></Name>
<Parent><![CDATA[singlePlotPanel]]></Parent>
<Property name="Gutters"><![CDATA[[0,0,0,0]]]></Property>
<Property name="XFixedTick"><![CDATA[0]]></Property>
<Property name="Enabled"><![CDATA[true]]></Property>
<Property name="MaximumY"><![CDATA[6]]></Property>
<Property name="MaximumX"><![CDATA[3.5]]></Property>
<Property name="YFixedTick"><![CDATA[0]]></Property>
<Property name="TRMessage"><![CDATA["Total Score="+score+"/"+2*numberofrounds+"\n"+log ]]></Property>
<Property name="YAutoTicks"><![CDATA[false]]></Property>
<Property name="GridYShow"><![CDATA[true]]></Property>
<Property name="MinimumX"><![CDATA[-0.5]]></Property>
<Property name="MinimumY"><![CDATA[0]]></Property>
<Property name="XTickStep"><![CDATA[1]]></Property>
<Property name="MarginY"><![CDATA[20]]></Property>
<Property name="XAutoTicks"><![CDATA[false]]></Property>
<Property name="Height"><![CDATA[""+window.innerHeight*0.9]]></Property>
<Property name="GridXShow"><![CDATA[true]]></Property>
<Property name="Width"><![CDATA["100%"]]></Property>
<Property name="TLMessage"><![CDATA["Score = "+score]]></Property>
<Property name="BRMessage"><![CDATA["Not attempted = "+notrynumber]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Image2D</Type>
<Name><![CDATA[background]]></Name>
<Parent><![CDATA[plottingPanel]]></Parent>
<Property name="SizeX"><![CDATA[4]]></Property>
<Property name="X"><![CDATA[1.5]]></Property>
<Property name="ImageUrl"><![CDATA[%backGroundImage%]]></Property>
<Property name="Y"><![CDATA[2.5]]></Property>
<Property name="SizeY"><![CDATA[ymax*(1.2+0.2)]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.ImageSet2D</Type>
<Name><![CDATA[imageSet]]></Name>
<Parent><![CDATA[plottingPanel]]></Parent>
<Property name="NumberOfElements"><![CDATA[numberofoption]]></Property>
<Property name="SizeX"><![CDATA[150]]></Property>
<Property name="X"><![CDATA[x]]></Property>
<Property name="Y"><![CDATA[y]]></Property>
<Property name="ImageUrl"><![CDATA["./newsoccerball.png"]]></Property>
<Property name="SizeY"><![CDATA[150]]></Property>
<Property name="PixelSize"><![CDATA[true]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Expanded>true</Expanded>
<Type>Elements.Group2D</Type>
<Name><![CDATA[group]]></Name>
<Parent><![CDATA[plottingPanel]]></Parent>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Image2D</Type>
<Name><![CDATA[image]]></Name>
<Parent><![CDATA[group]]></Parent>
<Property name="Sensitivity"><![CDATA[0]]></Property>
<Property name="SizeX"><![CDATA[160]]></Property>
<Property name="X"><![CDATA[xc]]></Property>
<Property name="ImageUrl"><![CDATA["./Unnamed3/hoppi with card.png"]]></Property>
<Property name="Y"><![CDATA[yc]]></Property>
<Property name="SizeY"><![CDATA[240]]></Property>
<Property name="PixelSize"><![CDATA[true]]></Property>
<Property name="EnabledPosition"><![CDATA["ENABLED_Y"]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Expanded>true</Expanded>
<Type>Elements.Group2D</Type>
<Name><![CDATA[group2D_2]]></Name>
<Parent><![CDATA[group]]></Parent>
<Property name="X"><![CDATA[0.075]]></Property>
<Property name="Y"><![CDATA[0.125]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Shape2D</Type>
<Name><![CDATA[whitecard]]></Name>
<Parent><![CDATA[group2D_2]]></Parent>
<Property name="X"><![CDATA[xc-0.25]]></Property>
<Property name="Y"><![CDATA[yc-0.4]]></Property>
<Property name="SizeX"><![CDATA[1]]></Property>
<Property name="SizeY"><![CDATA[0.5]]></Property>
<Property name="ShapeType"><![CDATA["RECTANGLE"]]></Property>
<Property name="FillColor"><![CDATA["White"]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Text2D</Type>
<Name><![CDATA[textcatch]]></Name>
<Parent><![CDATA[group2D_2]]></Parent>
<Property name="FillColor"><![CDATA["Black"]]></Property>
<Property name="RelativePosition"><![CDATA["WEST"]]></Property>
<Property name="X"><![CDATA[xc-0.25]]></Property>
<Property name="Y"><![CDATA[yc-0.4]]></Property>
<Property name="Text"><![CDATA[%textcatch%]]></Property>
<Property name="Font"><![CDATA["normal bold 18px \"Comic Sans MS\", cursive, sans-serif"]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Expanded>true</Expanded>
<Type>Elements.Group2D</Type>
<Name><![CDATA[group2D]]></Name>
<Parent><![CDATA[plottingPanel]]></Parent>
<Property name="Y"><![CDATA[-0.1]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.TextSet2D</Type>
<Name><![CDATA[answerstringarray]]></Name>
<Parent><![CDATA[group2D]]></Parent>
<Property name="NumberOfElements"><![CDATA[n]]></Property>
<Property name="FillColor"><![CDATA["rgb(250,250,250)"]]></Property>
<Property name="RelativePosition"><![CDATA["CENTERED"]]></Property>
<Property name="X"><![CDATA[x]]></Property>
<Property name="Y"><![CDATA[y]]></Property>
<Property name="Text"><![CDATA[%textanswer%]]></Property>
<Property name="OnPress"><![CDATA[speech(textanswer[vocabaudio]); ]]></Property>
<Property name="Visibility"><![CDATA[true]]></Property>
<Property name="EnabledPosition"><![CDATA["ENABLED_NO_MOVE"]]></Property>
<Property name="Font"><![CDATA["normal normal x-large Arial, Helvetica, sans-serif"]]></Property>
<Property name="ElementInteracted"><![CDATA[vocabaudio]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Audio</Type>
<Name><![CDATA[audio]]></Name>
<Parent><![CDATA[singlePlotPanel]]></Parent>
<Property name="AudioUrl"><![CDATA["./Unnamed3/Ding Sound Effect.m4a"]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Audio</Type>
<Name><![CDATA[audio1]]></Name>
<Parent><![CDATA[singlePlotPanel]]></Parent>
<Property name="AudioUrl"><![CDATA["./Unnamed3/SMALL_CROWD_APPLAUSE-Yannick_Lemieux-1268806408.mp3"]]></Property>
</HtmlView.Element>
</Tree>
</Content>
</Osejs.HtmlView.Page>
</Osejs.HtmlView>
</Osejs>