Monday, July 31, 2017

Tic - Tac - Toe


In our Childhood we played this game Tic-Tac-Toe



Now Lets look how to build this using React JS ...

First We must have Updated Node.JS in our Workplace
  1. Then we have to create an environment to code this game
    1. Create React App is the best way to start building a new React single page application.
    2. These are the codes to create an environment
      • npm install -g create-react-app 
      • create-react-app my-app
        • cd my-app
          • npm start
    3.  By this we have create our frontend not backend.
  2. After creating Frontend now lets now on to backend..
  3. Now lets Delete all files in the src/ folder of the my-app.
  4. Add a file named index.css in the src/ folder with above code
    • body {
        font: 14px "Century Gothic", Futura, sans-serif;
        margin: 20px;
      }

      ol, ul {
        padding-left: 30px;
      }

      .board-row:after {
        clear: both;
        content: "";
        display: table;
      }

      .status {
        margin-bottom: 10px;
      }

      .square {
        background: #fff;
        border: 1px solid #999;
        float: left;
        font-size: 24px;
        font-weight: bold;
        line-height: 34px;
        height: 34px;
        margin-right: -1px;
        margin-top: -1px;
        padding: 0;
        text-align: center;
        width: 34px;
      }

      .square:focus {
        outline: none;
      }

      .kbd-navigation .square:focus {
        background: #ddd;
      }

      .game {
        display: flex;
        flex-direction: row;
      }

      .game-info {
        margin-left: 20px;
      }
  5. Add a file named index.js in the src/ folder with above code.
    • import React from 'react';
      import ReactDOM from 'react-dom';
      import './index.css';

      function Square(props) {
        return (
          <button className="square" onClick={props.onClick}>
            {props.value}
          </button>
        );
      }

      class Board extends React.Component {
        renderSquare(i) {
          return (
            <Square
              value={this.props.squares[i]}
              onClick={() => this.props.onClick(i)}
            />
          );
        }

        render() {
          return (
            <div>
              <div className="board-row">
                {this.renderSquare(0)}
                {this.renderSquare(1)}
                {this.renderSquare(2)}

              </div>
              <div className="board-row">
                {this.renderSquare(3)}
                {this.renderSquare(4)}
                {this.renderSquare(5)}

              </div>
              <div className="board-row">
                {this.renderSquare(6)}
                {this.renderSquare(7)}
                {this.renderSquare(8)}
               
              </div>
            </div>
          );
        }
      }

      class Game extends React.Component {
        constructor() {
          super();
          this.state = {
            history: [{
              squares: Array(9).fill(null)
            }],
            xIsNext: true
          };
        }

        handleClick(i) {
          const history = this.state.history;
          const current = history[history.length - 1];
          const squares = current.squares.slice();
          if (calculateWinner(squares) || squares[i]) {
            return;
          }
          squares[i] = this.state.xIsNext ? 'X' : 'O';
          this.setState({
            history: history.concat([{
              squares: squares
            }]),
            xIsNext: !this.state.xIsNext,
          });
        }

        render() {
          const history = this.state.history;
          const current = history[history.length - 1];
          const winner = calculateWinner(current.squares);

          const moves = history.map((step, move) => {
            const desc = move ?
              'Move #' + move :
              'Game start';
            return (
              <li>
                <a href="#" onClick={() => this.jumpTo(move)}>{desc}</a>
              </li>
            );
          });

          let status;
          if (winner) {
            status = 'Winner: ' + winner;
          } else {
            status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O');
          }

          return (
            <div className="game">
              <div className="game-board">
                <Board
                  squares={current.squares}
                  onClick={(i) => this.handleClick(i)}
                />
              </div>
              <div className="game-info">
                <div>{status}</div>
                <ol>{moves}</ol>
              </div>
            </div>
          );
        }
      }

      // ========================================

      ReactDOM.render(
        <Game />,
        document.getElementById('root')
      );

      function calculateWinner(squares) {
        const lines = [
          [0, 1, 2],
          [3, 4, 5],
          [6, 7, 8],
          [0, 3, 6],
          [1, 4, 7],
          [2, 5, 8],
          [0, 4, 8],
          [2, 4, 6],
        ];
        for (let i = 0; i < lines.length; i++) {
          const [a, b, c] = lines[i];
          if (squares[a] && squares[a] === squares[b] && squares[a] === squares[c]) {
            return squares[a];
          }
        }
        return null;
      }
  6. Now go to your file folder and open Terminal
    • type npm start
    • You will be in live at http://localhost:3000 
    • Now just go and visit in your local host and Enjoy Playing the game.

Now its my turn to play my game, If you want try mine........... Tic-Tac-Toe





2 comments:

My First Day with Uki DN Cohort 1

 "Hello WORLD!"