From 4d968c00f93cecba94f5b839ac7cbf328dac2100 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Fri, 24 Jun 2022 10:54:43 -0400 Subject: [PATCH 1/4] Add files via upload --- rz.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 rz.txt diff --git a/rz.txt b/rz.txt new file mode 100644 index 0000000..613e663 --- /dev/null +++ b/rz.txt @@ -0,0 +1 @@ +rz \ No newline at end of file From a6f09a6765940421a5f0764be27a35569b9e91a5 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Sat, 25 Jun 2022 11:28:07 -0400 Subject: [PATCH 2/4] Delete rz.txt --- rz.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 rz.txt diff --git a/rz.txt b/rz.txt deleted file mode 100644 index 613e663..0000000 --- a/rz.txt +++ /dev/null @@ -1 +0,0 @@ -rz \ No newline at end of file From 2f548fb5ee217ebd74525be6a7118adee20be561 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Mon, 27 Jun 2022 09:48:53 -0400 Subject: [PATCH 3/4] Add files via upload --- kyros homework.html | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 kyros homework.html diff --git a/kyros homework.html b/kyros homework.html new file mode 100644 index 0000000..b795966 --- /dev/null +++ b/kyros homework.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + \ No newline at end of file From cc9fc6410f2a1c7d4cc82123dc23ce7912fde2f8 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Thu, 7 Jul 2022 17:24:29 -0400 Subject: [PATCH 4/4] Add files via upload --- kyros.jsx | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 kyros.jsx diff --git a/kyros.jsx b/kyros.jsx new file mode 100644 index 0000000..81f2002 --- /dev/null +++ b/kyros.jsx @@ -0,0 +1,146 @@ +function Square(props) { + return ( + + ); + } + + class Board extends React.Component { + renderSquare(i) { + return ( + this.props.onClick(i)} + /> + ); + } + + render() { + return ( +
+
+ {this.renderSquare(0)} + {this.renderSquare(1)} + {this.renderSquare(2)} +
+
+ {this.renderSquare(3)} + {this.renderSquare(4)} + {this.renderSquare(5)} +
+
+ {this.renderSquare(6)} + {this.renderSquare(7)} + {this.renderSquare(8)} +
+
+ ); + } + } + + class Game extends React.Component { + constructor(props) { + super(props); + this.state = { + history: [ + { + squares: Array(9).fill(null) + } + ], + stepNumber: 0, + xIsNext: true + }; + } + + handleClick(i) { + const history = this.state.history.slice(0, this.state.stepNumber + 1); + 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 + } + ]), + stepNumber: history.length, + xIsNext: !this.state.xIsNext + }); + } + + jumpTo(step) { + this.setState({ + stepNumber: step, + xIsNext: (step % 2) === 0 + }); + } + + render() { + const history = this.state.history; + const current = history[this.state.stepNumber]; + const winner = calculateWinner(current.squares); + + const moves = history.map((step, move) => { + const desc = move ? + 'Go to move #' + move : + 'Go to game start'; + return ( +
  • + +
  • + ); + }); + + let status; + if (winner) { + status = "Winner: " + winner; + } else { + status = "Next player: " + (this.state.xIsNext ? "X" : "O"); + } + + return ( +
    +
    + this.handleClick(i)} + /> +
    +
    +
    {status}
    +
      {moves}
    +
    +
    + ); + } + } + + // ======================================== + + const root = ReactDOM.createRoot(document.getElementById("root")); + root.render(); + + 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; + } + \ No newline at end of file