renx777
12/30/2017 - 8:44 PM

game of life beta final

game of life beta final

body{
  background:#0c136beb
}


br{
 line-height:20px
}

#hide{
 visibility: hidden;
  margin-top:-27px
}

#board{
     border: 10px solid #790000;
    padding-left: 5px;
    padding-bottom: 10px;
    padding-top: 5px;
    background-color: #da1414;
    min-width: 100px;
    display: inline-block;
    padding-right: 5px;
          box-shadow: 0px -4px 40px 1px rgba(255, 255, 255, 0.98), 0 6px 20px 0 rgb(173, 173, 173);
  
}

#bottomBoard{
  
}

#topBoard{
display:block;
  margin:0 auto;
 width:600px;
}



#bottomBoard{
display:block;
  margin:0 auto;
    width:600px;

}
#gen{
  color:white;
  font-size:30px
}

#app{
  text-align:center;
}


button {
    background-color:#1D1F20;
    border: none;
    color: white;
    padding: 15px 32px;
    text-align: center;
    text-decoration: none;
  margin-right:5px;
    display: inline-block;
  cursor:pointer;
    font-size: 16px;
}

button:hover{
  background: #da1414;
  
  color:white;
  font-weight:bold;
    padding:50x
}

span{
   color:white;
  font-size:30px;
    font-family:roboto;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
var k

const Cell = React.createClass({
//   set initial size of the board
  getInitialState() {
    return {
      row: 65,
      col: 65,
      initialRender:0,
      generations:0,
      clearingBoard:0,
      gameStarted:0
    };
  },
  handleClick(evt) {
    var id = evt.target.id.split(" ");
    var i = parseInt(id[0]);
    var j = parseInt(id[1]);
    
    $("#0 0").css( "backround", "pink" );
    var newBoard = this.state.BoardState;

    if (newBoard[i][j] == 0) {
      newBoard[i][j] = 1;
    } else {
      newBoard[i][j] = 0;
    }

    this.setState({
      BoardState: newBoard,
      generations:this.state.generations-1
    });
  },
  handleStart(){
   
    k=setInterval(this.handleGame,300)
  },
  handlePause(){
    clearInterval(k)
  },
  handleGame(){
   
    
    var currentB=this.state.BoardState
    var nextGen=[]
    var r=this.state.row
    var c=this.state.col
    function find(z,x) {
      var len
      if(x=="i"){
        len=c
      }
      if(x=="j"){
        len=r
      }
      
      
      if (z < 0) {
        z = z % len + r;
      }
      

      if (z >= r) {
        z = Math.abs(z) % len;
      }

      return z;
    }
    function conway(y) {
     
      var arr = y.slice(0);

      var ngen = [];

      for ( var i = 0; i < r; i++) {
        var ab = [];
        for (var j = 0; j < c; j++) {
          ab.push(0);
        }
        ngen.push(ab);
      }

      for (var i = 0; i < r; i++) {
        for ( var j = 0; j < c; j++) {
          var sum = 0;

          

          var a = find(i - 1,"i");
          var b = find(j - 1,"j");
          sum += arr[a][b];
          
          var a = find(i,"i");
          var b = find(j - 1,"j");
          sum += arr[a][b];
         
          var a = find(i + 1,"i");
          var b = find(j - 1,"j");
          sum += arr[a][b];
        
          var a = find(i - 1,"i");
          var b = find(j,"j");
          sum += arr[a][b];
        
          var a = find(i,"i");
          var b = find(j,"j");
          sum += arr[a][b];
         
          var a = find(i + 1,"i");
          var b = find(j,"j");
          sum += arr[a][b];
        
          var a = find(i - 1,"i");
          var b = find(j + 1,"j");
          sum += arr[a][b];
         
          var a = find(i,"i");
          var b = find(j + 1,"j");
          sum += arr[a][b];
          
          var a = find(i + 1,"i");
          var b = find(j + 1,"j");
          sum += arr[a][b];
         
          if (sum == 3) {
            ngen[i][j] = 1;
             var elem = document.getElementById(i+ " "+j);
            elem.style.background="red"
          } else if (sum == 4) {
            
            ngen[i][j] = arr[i][j];
          } else {
            
           
            ngen[i][j] = 0;
          }
        }
      }

      nextGen = ngen.slice(0);
     

       
    }
    
    conway(currentB)
    
this.setState({
      BoardState:nextGen
       })
    
    
  },
handleClear(){
  this.handlePause();
 this.setState({
   generations:0,
  
 })
    var board = [];
    for (var i = 0; i < 80; i++) {
      var dummy = [];
      for (var j = 0; j < 80; j++) {
        dummy.push(0);
      }
      board.push(dummy);
    }

    this.setState({
      BoardState: board
    });
},
  handleSizeA(){
   this.handlePause()
     this.setState({
      row: 30,
       col:30
    });
    
    var board = [];
    for (var i = 0; i < 30; i++) {
      var dummy = [];
      for (var j = 0; j < 30; j++) {
        dummy.push(Math.random() < 0.85 ? 0 : 1);
      }
      board.push(dummy);
    }

    this.setState({
      BoardState: board
    });
   
   
    this.handleStart()
  },
  handleSizeB(){
   
    this.handlePause()
     this.setState({
      row: 40,
       col:40
    });
    
    var board = [];
    for (var i = 0; i < 40; i++) {
      var dummy = [];
      for (var j = 0; j < 40; j++) {
        dummy.push(Math.random() < 0.85 ? 0 : 1);
      }
      board.push(dummy);
    }

    this.setState({
      BoardState: board
    });
    
   
    console.log(this.state.BoardState)
   
    this.handleStart() 
    
    
  },
   handleSizeC(){
     this.handlePause()
     this.setState({
      row: 60,
       col:60
    });
     console.log(this.state.row + " " + this.state.col)
   var board = [];
    for (var i = 0; i < 60; i++) {
      var dummy = [];
      for (var j = 0; j < 60; j++) {
        dummy.push(Math.random() < 0.85 ? 0 : 1);
      }
      board.push(dummy);
    }

    this.setState({
      BoardState: board
    });
     
      console.log(this.state.BoardState)
     
    this.handleStart()
     
  },
  
  componentWillMount() {
    var board = [];
    for (var i = 0; i < this.state.row; i++) {
      var dummy = [];
      for (var j = 0; j < this.state.col; j++) {
        dummy.push(Math.random() < 0.85 ? 0 : 1);
      }
      board.push(dummy);
    }

    this.setState({
      BoardState: board
    });
  },
  render() {
//     increment generations after every render
    if(this.state.initialRender==0){
       this.handleStart()
      this.setState({
        initialRender:1
      })
    }
   
   
    if(this.state.generations>0){
      
    }
     
   this.state.generations+=1;
       
    
   
//     reset board
    
   
    
    
    var Board = [];
    var bState = this.state.BoardState;
   

    for (var i = 0; i < this.state.row; i++) {
      for (var j = 0; j < this.state.col; j++) {
        var style = {
      height: "11px",
      width: "11px",

      display: "inline-block",
      border: "1px solid #222"
    };
        
        if (bState[i][j] == 0) {
          style.background = "black";
        }
        if (bState[i][j] == 1) {
          style.background = "pink";
        }

        Board.push(
          <div class="cells" onClick={this.handleClick} style={style} id={i + " " + j} />
        );
      }

      Board.push(<div id="hide">i</div>);
    }
  

    return (
      <div>
        <div id="topBoard">
        <button onClick={this.handleStart}>Start</button>
         <button onClick={this.handlePause}>Pause</button>
          <button onClick={this.handleClear}>Clear</button>
          <span id="gen"> Generations: {this.state.generations-1}</span>
        </div>
        <br />
       
        <br />
        
        <div id="board">{Board}</div>
         
        <br />
        <br />
       <div id="bottomBoard">
         <span>Change Size :</span>
        <button onClick={this.handleSizeA}>30 X 30</button>
         <button onClick={this.handleSizeB}>40 X 40</button>
         <button onClick={this.handleSizeC}>60 X 60</button>
        
        </div>
        
      </div>
    );
  }
});

ReactDOM.render(<Cell />, document.getElementById("app"));