You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.7 KiB
68 lines
1.7 KiB
require('../../sass/board/grid.scss');
|
|
|
|
var React = require('react');
|
|
var Values = require('./Values');
|
|
var State = require('../State');
|
|
|
|
var Cell = React.createClass({
|
|
render() {
|
|
var classname = ['cell', 'x' + this.props.x, 'y' + this.props.y];
|
|
|
|
return (<div className={classname.join(' ')}>{this.props.value}</div>);
|
|
}
|
|
});
|
|
|
|
module.exports = React.createClass({
|
|
generateValues() {
|
|
return Values.generate(this.props.width * this.props.height, State.level);
|
|
},
|
|
|
|
getInitialState() {
|
|
return { values: this.generateValues() };
|
|
},
|
|
|
|
componentDidMount() {
|
|
State.subscribe('level/next', this.levelNext);
|
|
},
|
|
|
|
checkComplete() {
|
|
if (Values.checkComplete(this.state.values, State.level) === true) {
|
|
State.publish('level/complete');
|
|
}
|
|
},
|
|
|
|
levelNext() {
|
|
this.setState({ values: this.generateValues() });
|
|
},
|
|
|
|
munch(x, y) {
|
|
var i = y * this.props.width + x;
|
|
|
|
if (this.state.values[i] === "") {
|
|
return;
|
|
}
|
|
|
|
if (Values.validate(this.state.values[i], State.level)) {
|
|
this.state.values[i] = "";
|
|
this.setState({ values: this.state.values }, this.checkComplete);
|
|
State.publish('munch/successful');
|
|
}
|
|
else {
|
|
State.publish('munch/failed', this.state.values[i]);
|
|
}
|
|
},
|
|
|
|
render() {
|
|
var cells = [];
|
|
var i;
|
|
|
|
for (var x = 0; x < this.props.width; x++) {
|
|
for (var y = 0; y < this.props.height; y++) {
|
|
i = y * this.props.width + x;
|
|
cells.push(<Cell value={this.state.values[i]} x={x} y={y} key={i} />);
|
|
}
|
|
}
|
|
|
|
return (<div className='grid'>{cells}</div>);
|
|
}
|
|
});
|
|
|