Skip to content
This repository has been archived by the owner on Oct 12, 2022. It is now read-only.

Initial commit for react-tic-tac-toe sample #86

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@

##### [Raytracer](raytracer/README.md)

##### [React Tic-Tac-Toe](react-tic-tac-toe/README.md)

##### [Simple](simple/README.md)

##### [SystemJS](systemjs/README.md)
Expand Down
8 changes: 8 additions & 0 deletions react-tic-tac-toe/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# compiled and bundled source
dist

# Node modules
node_modules
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add typings and dist to the .gitignore and remove them


# type definitions
typings
17 changes: 17 additions & 0 deletions react-tic-tac-toe/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# React Tic Tac Toe

A game example built using [TypeScript](https://github.com/Microsoft/TypeScript) and [React](https://github.com/facebook/react), following guidelines from [react-webpack guide](https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/quick-start/react-webpack.md) from TypeScript handbook.

## Build
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Newline after the header

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in fbbea5d


```
npm install -g typescript webpack typings
npm install
npm link typescript
typings install
webpack
```

## Run

Open ```index.html```.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Newline after the header

118 changes: 118 additions & 0 deletions react-tic-tac-toe/css/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
html {
box-sizing: border-box;
}
* {
box-sizing: inherit;
}

.app {
font-family: 'Open Sans', sans-serif;
margin: 100px;
width: 500px;
margin-left: auto;
margin-right: auto;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}

.board {
position: relative;
width: 500px;
height:500px;
}

.cell {
float: left;
width: 33.3333%;
height: 33.3333%;
line-height: 166.67px;
color: black;
font-size: 90pt;
text-align: center;
border-color: orangered;
border-width: 3px;
}
.cell.top {
border-bottom-style:solid;
}
.cell.bottom {
border-top-style:solid;
}
.cell.left {
border-right-style:solid;
}
.cell.right {
border-left-style:solid;
}

.X{
animation-name: appear;
animation-duration: .3s;
}
.O{
animation-name: appear;
animation-duration: .3s;
animation-delay:.3s;
animation-fill-mode: forwards;
opacity: 0;
}
@keyframes appear {
from { font-size: 90pt; opacity: 0;}
to { font-size: 100pt; opacity: 1;}
}

.description{
cursor:pointer;
font-size:25px;
font-weight:bold;
padding:15px 0px;
position: relative;
display: inline-block;
width: 200px;
text-align: center;
margin-top: 30px;
margin-right: -35px;
}
.t1{
margin-left: 60px;
}
.t2{
margin-right: 60px;
}

.gameStateBar {
text-align: center;
font-size: 60px;
font-weight: bold;
height: 60px;
}

.restartBtn {
box-shadow: 3px 3px 9px 2px #54a3f7;
background-color:#007dc1;
border-radius:28px;
border:1px solid #124d77;
cursor:pointer;
color:#ffffff;
font-size:25px;
font-weight:bold;
padding:15px 36px;
text-decoration:none;
text-shadow:0px 0px 7px #154682;
position: relative;
display: block;
margin: 40px auto;
width: 160px;
text-align: center;
}
.restartBtn:hover {
background-color:#0061a7;
}
.restartBtn:active {
position:relative;
top:1px;
}
14 changes: 14 additions & 0 deletions react-tic-tac-toe/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>TicTacToe with TypeScript and React</title>
<link rel="stylesheet" href="css/style.css">
<script src="./node_modules/react/dist/react.js"></script>
<script src="./node_modules/react-dom/dist/react-dom.js"></script>
</head>
<body>
<div id="content"></div>
<script src="./dist/bundle.js"></script>
</body>
</html>
18 changes: 18 additions & 0 deletions react-tic-tac-toe/layout.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
TicTacToe /
|---- css/ // css style sheets
|---- dist/ // folder for typescript-compiled and webpack-bundled js files
|---- node_modules/ // dependent node modules
|---- src/ // .ts and .tsx source files
|---- app.tsx // the App React component
|---- board.tsx // the TicTacToe Board React component
|---- constants.ts // some shared constants and types
|---- gameStateBar.tsx // GameStatusBar React component
|---- restartBtn.tsx // RestartBtn React component
|---- typings/ // type definition .d.ts files
|---- index.html // web page for our app
|---- layout.html // project structure
|---- package.json // node package configuration file
|---- README.md // RAEDME file
|---- tsconfig.json // typescript configuration file
|---- typings.json // typings configuration file
|---- webpack.config.js // webpack configuration file
19 changes: 19 additions & 0 deletions react-tic-tac-toe/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"name": "TicTacToe",
"version": "1.0.0",
"description": "Tic Tac Toe built with TypeScript and React",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Limin Zhu",
"license": "ISC",
"dependencies": {
"react": "^0.14.7",
"react-dom": "^0.14.7"
},
"devDependencies": {
"source-map-loader": "^0.1.5",
"ts-loader": "^0.8.1"
}
}
26 changes: 26 additions & 0 deletions react-tic-tac-toe/src/app.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import * as React from "react";
import * as ReactDOM from "react-dom";
import { Board } from "./Board";
import { RestartBtn } from "./RestartBtn";
import { GameStateBar } from "./GameStateBar";
import { GameState } from "./constants";

class App extends React.Component<void, void> {
render() {
return (
<div className="app">
<Board />
<div>
<span className="description t1"> Player(X) </span>
<span className="description t2"> Computer(O) </span>
</div>
<RestartBtn />
<GameStateBar />
</div>
)
}
}

ReactDOM.render(
<App />, document.getElementById("content")
);
Loading