Models code complete. Added factors, addition, and subtraction.

master
Ben Burlingham 9 years ago
parent 3b3b9b9109
commit d35d0792c4
  1. 6
      controllers/board/grid.controller.js
  2. 4
      controllers/board/titlebar.controller.js
  3. 5
      controllers/board/troggle.controller.js
  4. 2
      controllers/options/options.controller.js
  5. 38
      models/addition.model.js
  6. 39
      models/base.model.js
  7. 42
      models/equality.model.js
  8. 54
      models/factors.model.js
  9. 42
      models/inequality.model.js
  10. 57
      models/multiples.model.js
  11. 41
      models/subtraction.model.js
  12. 1
      sass/board/grid.scss
  13. 4
      sass/options/options.scss

@ -1,5 +1,5 @@
import * as GridActions from '../../actions/board/grid.actions'; import * as GridActions from '../../actions/board/grid.actions';
import MultiplesModel from '../../models/multiples.model'; import SubtractionModel from '../../models/subtraction.model';
import SETTINGS from '../../AppSettings'; import SETTINGS from '../../AppSettings';
let values; let values;
@ -10,12 +10,12 @@ const GridCtrl = {
getValues: () => values, getValues: () => values,
generateValues: (level) => { generateValues: (level) => {
values = MultiplesModel.generate(SETTINGS.GRID_WIDTH * SETTINGS.GRID_HEIGHT, level); values = SubtractionModel.generate(SETTINGS.GRID_WIDTH * SETTINGS.GRID_HEIGHT, level);
dispatch(GridActions.update(values)); dispatch(GridActions.update(values));
}, },
isCompleted: (level) => { isCompleted: (level) => {
return MultiplesModel.checkComplete(values, level) return SubtractionModel.checkComplete(values, level)
}, },
hideValue: (index) => { hideValue: (index) => {

@ -1,5 +1,5 @@
import * as TitlebarActions from '../../actions/board/titlebar.actions'; import * as TitlebarActions from '../../actions/board/titlebar.actions';
import MultiplesModel from '../../models/multiples.model'; import SubtractionModel from '../../models/subtraction.model';
let dispatch; let dispatch;
@ -7,7 +7,7 @@ const TitlebarCtrl = {
setDispatch: d => dispatch = d, setDispatch: d => dispatch = d,
setTitle: (level) => { setTitle: (level) => {
const title = MultiplesModel.getTitle(level); const title = SubtractionModel.getTitle(level);
dispatch(TitlebarActions.update(title)); dispatch(TitlebarActions.update(title));
} }
}; };

@ -45,11 +45,14 @@ const TroggleCtrl = {
createTroggles(level) { createTroggles(level) {
const count = Math.min(Math.ceil((level + 1) / 2), 5); const count = Math.min(Math.ceil((level + 1) / 2), 5);
let wait = 0;
for (let index = 0; index < count; index++) { for (let index = 0; index < count; index++) {
const ref = this.createTroggle.bind(this, index); const ref = this.createTroggle.bind(this, index);
wait = wait + Math.random() * 10000;
// troggleCreateTimers[index] = setTimeout(ref, 1000); // troggleCreateTimers[index] = setTimeout(ref, 1000);
troggleCreateTimers[index] = setTimeout(ref, (index + 1) * Math.random() * 10000); troggleCreateTimers[index] = setTimeout(ref, wait);
} }
}, },

@ -2,7 +2,7 @@ import * as OptionsActions from '../../actions/options/options.actions';
import ModeCtrl from '../mode.controller'; import ModeCtrl from '../mode.controller';
let dispatch; let dispatch;
const values = ['Multiples', 'Factors', 'Equality', 'Inequality']; const values = ['Multiples', 'Factors', 'Addition', 'Subtraction'];
let selected = 0; let selected = 0;
const OptionsCtrl = { const OptionsCtrl = {

@ -0,0 +1,38 @@
import BaseModel from './base.model';
const AdditionModel = Object.create(BaseModel);
AdditionModel.generate = function(n, level) {
const equals = [];
const notequals = [];
const target = level + 5;
const midpoint = Math.ceil(target / 2);
let g1, g2, b1, b2;
for (let i = 1; i < midpoint; i++) {
g1 = i;
g2 = target - i;
b1 = Math.max(1, i - Math.ceil(Math.random() * 3));
b2 = Math.max(1, target - i - Math.ceil(Math.random() * 3));
equals.push(`${g2}+${g1}`);
equals.push(`${g1}+${g2}`);
notequals.push(`${b2}+${b1}`);
notequals.push(`${b1}+${b2}`);
}
return this.buildResults(equals, notequals, n);
};
AdditionModel.getTitle = (level) => {
return `Equals ${level + 5}`;
};
AdditionModel.getError = (value, level) => {
return `Oops! ${value} does not equal ${level + 5}.`;
};
export default AdditionModel;

@ -0,0 +1,39 @@
const BaseModel = {
buildResults(validResults, invalidResults, length) {
let valid;
const results = [];
for (let i = 0; i < length; i++) {
valid = Math.random() < 0.5;
if (valid === true) {
results.push({
value: validResults[Math.floor(Math.random() * validResults.length)],
show: true,
valid: true
});
}
else {
results.push({
value: invalidResults[Math.floor(Math.random() * invalidResults.length)],
show: true,
valid: false
});
}
}
return results;
},
checkComplete(values, level) {
for (let i = 0; i < values.length; i++) {
if (values[i].valid === true && values[i].show === true) {
return false;
}
}
return true;
}
};
export default BaseModel;

@ -1,42 +0,0 @@
const MultiplesModel = {
// Anagrams, multiples, equality
generate(n, level) {
const values = [];
let v;
for (let i = 0; i < n; i++) {
v = Math.ceil(Math.random() * 1000);
values.push({
value: v,
show: true,
valid: this.validate(v, level)
});
};
return values;
},
getTitle(level) {
return `Multiples of ${level + 2}`;
},
getError(value, level) {
return `Oops! ${value} is not a multiple of ${level + 2}.`;
},
checkComplete(values, level) {
for (let i = 0; i < values.length; i++) {
if (values[i].valid === true && values[i].show === true) {
return false;
}
}
return true;
}
validate(value, level) {
return ((value || -1) % (level + 2) === 0);
};
};
export default MultiplesModel;

@ -1,42 +1,30 @@
const MultiplesModel = { import BaseModel from './base.model';
// Anagrams, multiples, equality
generate(n, level) {
const values = [];
let v;
for (let i = 0; i < n; i++) { const FactorsModel = Object.create(BaseModel);
v = Math.ceil(Math.random() * 1000);
values.push({
value: v,
show: true,
valid: this.validate(v, level)
});
};
return values;
},
getTitle(level) { FactorsModel.generate = function(n, level) {
return `Multiples of ${level + 2}`; const target = level + 3;
}, const factors = [];
const nonfactors = [];
getError(value, level) { for (let i = 1; i <= target; i++) {
return `Oops! ${value} is not a multiple of ${level + 2}.`; if (target % i === 0) {
}, factors.push(i);
}
checkComplete(values, level) { else {
for (let i = 0; i < values.length; i++) { nonfactors.push(i);
if (values[i].valid === true && values[i].show === true) {
return false;
} }
} }
return true; return this.buildResults(factors, nonfactors, n);
}, };
validate(value, level) { FactorsModel.getTitle = (level) => {
return ((value || -1) % (level + 2) === 0); return `Factors of ${level + 3}`;
} };
FactorsModel.getError = (value, level) => {
return `Oops! ${value} is not a factor of ${level + 2}.`;
}; };
export default MultiplesModel; export default FactorsModel;

@ -1,42 +0,0 @@
const MultiplesModel = {
// Anagrams, multiples, equality
generate(n, level) {
const values = [];
let v;
for (let i = 0; i < n; i++) {
v = Math.ceil(Math.random() * 1000);
values.push({
value: v,
show: true,
valid: this.validate(v, level)
});
};
return values;
},
getTitle(level) {
return `Multiples of ${level + 2}`;
},
getError(value, level) {
return `Oops! ${value} is not a multiple of ${level + 2}.`;
},
checkComplete(values, level) {
for (let i = 0; i < values.length; i++) {
if (values[i].valid === true && values[i].show === true) {
return false;
}
}
return true;
},
validate(value, level) {
return ((value || -1) % (level + 2) === 0);
}
};
export default MultiplesModel;

@ -1,42 +1,37 @@
const MultiplesModel = { import BaseModel from './base.model';
// Anagrams, multiples, equality
generate(n, level) {
const values = [];
let v;
for (let i = 0; i < n; i++) {
v = Math.ceil(Math.random() * 1000);
values.push({
value: v,
show: true,
valid: this.validate(v, level)
});
};
return values; const MultiplesModel = Object.create(BaseModel);
},
getTitle(level) { MultiplesModel.generate = function(n, level) {
return `Multiples of ${level + 2}`; const multiples = [];
}, const nonmultiples = [];
const target = 19//level + 2;
const upperLimit = target * 150;
getError(value, level) { let tmp;
return `Oops! ${value} is not a multiple of ${level + 2}.`; while (multiples.length < Math.ceil(n * 4)) {
}, tmp = Math.ceil(Math.random() * upperLimit);
if (tmp % target === 0) {
multiples.push(tmp);
}
}
checkComplete(values, level) { while (nonmultiples.length < Math.floor(n * 4)) {
for (let i = 0; i < values.length; i++) { tmp = Math.ceil(Math.random() * upperLimit);
if (values[i].valid === true && values[i].show === true) { if (tmp % target !== 0) {
return false; nonmultiples.push(tmp);
} }
} }
return true; return this.buildResults(multiples, nonmultiples, n);
}, };
validate(value, level) { MultiplesModel.getTitle = (level) => {
return ((value || -1) % (level + 2) === 0); return `Multiples of ${level + 2}`;
} };
MultiplesModel.getError = (value, level) => {
return `Oops! ${value} is not a multiple of ${level + 2}.`;
}; };
export default MultiplesModel; export default MultiplesModel;

@ -0,0 +1,41 @@
import BaseModel from './base.model';
const SubtractionModel = Object.create(BaseModel);
SubtractionModel.generate = function(n, level) {
const equals = [];
const notequals = [];
const target = level + 2;
const upperLimit = target * 10;
let g1, g2, b1, b2, b3;
for (let i = target + 1; i < upperLimit; i++) {
g1 = i;
g2 = i - target;
b1 = i + Math.ceil(Math.random() * 3);
b2 = Math.max(1, i - Math.ceil(Math.random() * 3));
b3 = i - target;
// console.log(`(${i}) ${g1} - ${g2} = ${g1 - g2}`);
// console.error(`(${i}) ${b1} - ${b3} = ${b1 - b3}`);
// console.error(`(${i}) ${b2} - ${b3} = ${b2 - b3}`);
equals.push(`${g1}-${g2}`);
notequals.push(`${b1}-${b3}`);
notequals.push(`${b2}-${b3}`);
}
return this.buildResults(equals, notequals, n);
};
SubtractionModel.getTitle = (level) => {
return `Equals ${level + 2}`;
};
SubtractionModel.getError = (value, level) => {
return `Oops! ${value} does not equal ${level + 2}.`;
};
export default SubtractionModel;

@ -7,6 +7,7 @@
.cell { .cell {
border:1px solid purple; border:1px solid purple;
font-size:12px;
height:100px; height:100px;
line-height:100px; line-height:100px;
position:absolute; position:absolute;

@ -1,6 +1,8 @@
.options { .options {
$w: 600px; $w: 600px;
padding:50px;
.line { .line {
line-height:50px; line-height:50px;
margin:5px auto; margin:5px auto;
@ -11,7 +13,7 @@
hr { hr {
border:0; border:0;
border-top:1px #ccc solid; border-top:1px #ccc solid;
margin:50px auto; margin:40px auto;
width:$w; width:$w;
} }

Loading…
Cancel
Save