Permalink
Browse files

Add: Some render.

  • Loading branch information...
1 parent ffb99b2 commit 3531107084745561ee92ce65d2ab6ba9633ac3eb @javierbyte committed Jul 27, 2015
View
@@ -0,0 +1,210 @@
+{
+ "parser": "babel-eslint",
+ "plugins": [
+ "react"
+ ],
+ "env": {
+ "browser": true,
+ "node": true
+ },
+ "ecmaFeatures": {
+ "arrowFunctions": true,
+ "blockBindings": true,
+ "classes": true,
+ "defaultParams": true,
+ "destructuring": true,
+ "forOf": true,
+ "generators": false,
+ "modules": true,
+ "objectLiteralComputedProperties": true,
+ "objectLiteralDuplicateProperties": false,
+ "objectLiteralShorthandMethods": true,
+ "objectLiteralShorthandProperties": true,
+ "spread": true,
+ "superInFunctions": true,
+ "templateStrings": true,
+ "jsx": true
+ },
+ "rules": {
+/**
+ * Strict mode
+ */
+ // babel inserts "use strict"; for us
+ // http://eslint.org/docs/rules/strict
+ "strict": [2, "never"],
+
+/**
+ * ES6
+ */
+ "no-var": 0, // http://eslint.org/docs/rules/no-var
+
+/**
+ * Variables
+ */
+ "no-shadow": 2, // http://eslint.org/docs/rules/no-shadow
+ "no-shadow-restricted-names": 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
+ "no-unused-vars": [2, { // http://eslint.org/docs/rules/no-unused-vars
+ "vars": "local",
+ "args": "after-used"
+ }],
+ "no-use-before-define": 2, // http://eslint.org/docs/rules/no-use-before-define
+
+/**
+ * Possible errors
+ */
+ "comma-dangle": [2, "never"], // http://eslint.org/docs/rules/comma-dangle
+ "no-cond-assign": [2, "always"], // http://eslint.org/docs/rules/no-cond-assign
+ "no-console": 0, // http://eslint.org/docs/rules/no-console
+ "no-debugger": 1, // http://eslint.org/docs/rules/no-debugger
+ "no-alert": 1, // http://eslint.org/docs/rules/no-alert
+ "no-constant-condition": 1, // http://eslint.org/docs/rules/no-constant-condition
+ "no-dupe-keys": 2, // http://eslint.org/docs/rules/no-dupe-keys
+ "no-duplicate-case": 2, // http://eslint.org/docs/rules/no-duplicate-case
+ "no-empty": 2, // http://eslint.org/docs/rules/no-empty
+ "no-ex-assign": 2, // http://eslint.org/docs/rules/no-ex-assign
+ "no-extra-boolean-cast": 0, // http://eslint.org/docs/rules/no-extra-boolean-cast
+ "no-extra-semi": 2, // http://eslint.org/docs/rules/no-extra-semi
+ "no-func-assign": 2, // http://eslint.org/docs/rules/no-func-assign
+ "no-inner-declarations": 2, // http://eslint.org/docs/rules/no-inner-declarations
+ "no-invalid-regexp": 2, // http://eslint.org/docs/rules/no-invalid-regexp
+ "no-irregular-whitespace": 2, // http://eslint.org/docs/rules/no-irregular-whitespace
+ "no-obj-calls": 2, // http://eslint.org/docs/rules/no-obj-calls
+ "no-reserved-keys": 2, // http://eslint.org/docs/rules/no-reserved-keys
+ "no-sparse-arrays": 2, // http://eslint.org/docs/rules/no-sparse-arrays
+ "no-unreachable": 2, // http://eslint.org/docs/rules/no-unreachable
+ "use-isnan": 2, // http://eslint.org/docs/rules/use-isnan
+ "block-scoped-var": 2, // http://eslint.org/docs/rules/block-scoped-var
+
+/**
+ * Best practices
+ */
+ "consistent-return": 2, // http://eslint.org/docs/rules/consistent-return
+ "curly": [2, "multi-line"], // http://eslint.org/docs/rules/curly
+ "default-case": 2, // http://eslint.org/docs/rules/default-case
+ "dot-notation": [2, { // http://eslint.org/docs/rules/dot-notation
+ "allowKeywords": true
+ }],
+ "eqeqeq": 2, // http://eslint.org/docs/rules/eqeqeq
+ "guard-for-in": 2, // http://eslint.org/docs/rules/guard-for-in
+ "no-caller": 2, // http://eslint.org/docs/rules/no-caller
+ "no-else-return": 2, // http://eslint.org/docs/rules/no-else-return
+ "no-eq-null": 2, // http://eslint.org/docs/rules/no-eq-null
+ "no-eval": 2, // http://eslint.org/docs/rules/no-eval
+ "no-extend-native": 2, // http://eslint.org/docs/rules/no-extend-native
+ "no-extra-bind": 2, // http://eslint.org/docs/rules/no-extra-bind
+ "no-fallthrough": 2, // http://eslint.org/docs/rules/no-fallthrough
+ "no-floating-decimal": 2, // http://eslint.org/docs/rules/no-floating-decimal
+ "no-implied-eval": 2, // http://eslint.org/docs/rules/no-implied-eval
+ "no-lone-blocks": 2, // http://eslint.org/docs/rules/no-lone-blocks
+ "no-loop-func": 2, // http://eslint.org/docs/rules/no-loop-func
+ "no-multi-str": 2, // http://eslint.org/docs/rules/no-multi-str
+ "no-native-reassign": 2, // http://eslint.org/docs/rules/no-native-reassign
+ "no-new": 2, // http://eslint.org/docs/rules/no-new
+ "no-new-func": 2, // http://eslint.org/docs/rules/no-new-func
+ "no-new-wrappers": 2, // http://eslint.org/docs/rules/no-new-wrappers
+ "no-octal": 2, // http://eslint.org/docs/rules/no-octal
+ "no-octal-escape": 2, // http://eslint.org/docs/rules/no-octal-escape
+ "no-param-reassign": 2, // http://eslint.org/docs/rules/no-param-reassign
+ "no-proto": 2, // http://eslint.org/docs/rules/no-proto
+ "no-redeclare": 2, // http://eslint.org/docs/rules/no-redeclare
+ "no-return-assign": 2, // http://eslint.org/docs/rules/no-return-assign
+ "no-script-url": 2, // http://eslint.org/docs/rules/no-script-url
+ "no-self-compare": 2, // http://eslint.org/docs/rules/no-self-compare
+ "no-sequences": 2, // http://eslint.org/docs/rules/no-sequences
+ "no-throw-literal": 2, // http://eslint.org/docs/rules/no-throw-literal
+ "no-with": 2, // http://eslint.org/docs/rules/no-with
+ "radix": 2, // http://eslint.org/docs/rules/radix
+ "vars-on-top": 2, // http://eslint.org/docs/rules/vars-on-top
+ "wrap-iife": [2, "any"], // http://eslint.org/docs/rules/wrap-iife
+ "yoda": 2, // http://eslint.org/docs/rules/yoda
+
+/**
+ * Style
+ */
+ "indent": [2, 2], // http://eslint.org/docs/rules/
+ "brace-style": [2, // http://eslint.org/docs/rules/brace-style
+ "1tbs", {
+ "allowSingleLine": true
+ }],
+ "quotes": [
+ 2, "single", "avoid-escape" // http://eslint.org/docs/rules/quotes
+ ],
+ "camelcase": [2, { // http://eslint.org/docs/rules/camelcase
+ "properties": "never"
+ }],
+ "comma-spacing": [2, { // http://eslint.org/docs/rules/comma-spacing
+ "before": false,
+ "after": true
+ }],
+ "comma-style": [2, "last"], // http://eslint.org/docs/rules/comma-style
+ "eol-last": 2, // http://eslint.org/docs/rules/eol-last
+ "func-names": 1, // http://eslint.org/docs/rules/func-names
+ "key-spacing": [2, { // http://eslint.org/docs/rules/key-spacing
+ "beforeColon": false,
+ "afterColon": true
+ }],
+ "new-cap": [2, { // http://eslint.org/docs/rules/new-cap
+ "newIsCap": true
+ }],
+ "no-multiple-empty-lines": [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines
+ "max": 2
+ }],
+ "no-nested-ternary": 2, // http://eslint.org/docs/rules/no-nested-ternary
+ "no-new-object": 2, // http://eslint.org/docs/rules/no-new-object
+ "no-spaced-func": 2, // http://eslint.org/docs/rules/no-spaced-func
+ "no-trailing-spaces": 2, // http://eslint.org/docs/rules/no-trailing-spaces
+ "no-wrap-func": 2, // http://eslint.org/docs/rules/no-wrap-func
+ "no-underscore-dangle": 0, // http://eslint.org/docs/rules/no-underscore-dangle
+ "one-var": [2, "never"], // http://eslint.org/docs/rules/one-var
+ "padded-blocks": [2, "never"], // http://eslint.org/docs/rules/padded-blocks
+ "semi": [2, "always"], // http://eslint.org/docs/rules/semi
+ "semi-spacing": [2, { // http://eslint.org/docs/rules/semi-spacing
+ "before": false,
+ "after": true
+ }],
+ "space-after-keywords": 2, // http://eslint.org/docs/rules/space-after-keywords
+ "space-before-blocks": 2, // http://eslint.org/docs/rules/space-before-blocks
+ "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren
+ "space-infix-ops": 2, // http://eslint.org/docs/rules/space-infix-ops
+ "space-return-throw-case": 2, // http://eslint.org/docs/rules/space-return-throw-case
+ "spaced-line-comment": 2, // http://eslint.org/docs/rules/spaced-line-comment
+
+/**
+ * JSX style
+ */
+ "react/display-name": 0,
+ "react/jsx-boolean-value": 2,
+ "react/jsx-quotes": [2, "single"],
+ "react/jsx-no-undef": 2,
+ "react/jsx-sort-props": 0,
+ "react/jsx-sort-prop-types": 0,
+ "react/jsx-uses-react": 2,
+ "react/jsx-uses-vars": 2,
+ "react/no-did-mount-set-state": [2, "allow-in-func"],
+ "react/no-did-update-set-state": 2,
+ "react/no-multi-comp": 2,
+ "react/no-unknown-property": 2,
+ "react/prop-types": 2,
+ "react/react-in-jsx-scope": 2,
+ "react/self-closing-comp": 2,
+ "react/wrap-multilines": 2,
+ "react/sort-comp": [2, {
+ "order": [
+ "displayName",
+ "mixins",
+ "statics",
+ "propTypes",
+ "getDefaultProps",
+ "getInitialState",
+ "componentWillMount",
+ "componentDidMount",
+ "componentWillReceiveProps",
+ "shouldComponentUpdate",
+ "componentWillUpdate",
+ "componentWillUnmount",
+ "everything-else",
+ "render"
+ ]
+ }]
+ }
+}
View
@@ -0,0 +1,2 @@
+/node_modules
+.DS_Store
View
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Dan Abramov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
View
95 README.md 100644 → 100755
@@ -1,4 +1,4 @@
-# Unnamed js AI game.
+# ClashJS
This is an experiment. The idea is to create a battle game, where the participants code their AI, and then we make them fight!
@@ -15,19 +15,19 @@ The game is simple: we will put all the players in a battle arena, and then make
### Game characteristics.
* Every player will have a position and direction on the grid. A player can not go over the grid limits, and can only face north, west, south or east.
* The game will be turn based. Every turn we will excecute the AI of every player passing as arguments:
- * The current position and direction of the player.
- * The position of all other players.
- * The position of the coins.
- * A environment configuration option with:
- * Grid size.
+ * The current position and direction of the player.
+ * The position of all other players.
+ * The position of the coins.
+ * A environment configuration option with:
+ * Grid size.
* Every turn a player must execute some of the following actions:
- * Move one step in its current direction.
- * Turn into any of the four directions.
- * Shoot.
+ * Move one step in its current direction.
+ * Turn into any of the four directions.
+ * Shoot.
* A player can shoot to try to destroy another player. The shoots have the following characteristics:
- * The shoots are executed before the movements in every turn.
- * A shoot have a range of 3 squares.
- * After a shoot, a player will be paralized for the following 3 turns.
+ * The shoots are executed before the movements in every turn.
+ * A shoot have a range of 3 squares.
+ * After a shoot, a player will be paralized for the following 3 turns.
* A player can collect a coin in the moment it steps over it. A new coin may appear in any moment of the game.
* If nobody dies or collects a coin in 50 turns, the game will be considered a tie with all the survivors.
@@ -57,45 +57,54 @@ We should make an app that can take functions provided by the users, execute the
## Hypothesis.
+Let the *player definition* be an object with the player info and its AI function.
+
+ {
+ name: 'javierbyte',
+ ai: function(player, otherPlayers, env) {
+ // think...
+ return 'move';
+ }
+ }
Let the *user state* be an object with a user information like the following:
- {
- xPos: <number>,
- yPos: <number>,
- direction: <number>, // 0: north, 1: east, 2: south, 3: west
- coinsCollected: <number>,
- paralizedTurns: <number>
- }
+ {
+ xPos: <number>,
+ yPos: <number>,
+ direction: <number>, // 0: north, 1: east, 2: south, 3: west
+ coinsCollected: <number>,
+ paralizedTurns: <number>
+ }
Let the *game environment* be a configuration object like the following:
- {
- gridSize: [<number>, <number>],
- coinPositions: <array of [<number>, <number>] arrays>
- }
+ {
+ gridSize: [<number>, <number>],
+ ammoPosition: <array of [<number>, <number>] arrays>
+ }
Let the *game state* be an object with the array of all user states, and the game environment.
- {
- userStates: <array of user states>,
- environment: <game environment>
- }
+ {
+ userStates: <array of user states>,
+ environment: <game environment>
+ }
### Architecture.
We can divide the problem in 3 big steps.
* **AI Runner**. This will take all the user provided functions and the current game state, and execute every function.
- * This will take care of catch errors on the functions, and stop non-responding functions to hang the window.
+ * This will take care of catch errors on the functions, and stop non-responding functions to hang the window.
* **Game Core**. This will take the responses that the AI Runners sends, and apply the game logic on them.
- * Kill killed players.
- * Move and turn players.
- * Collect and count coins.
- * Generate new coins if necessary.
- * Set the paralized turns to players that shooted.
- * Count if too many inactive turns had passed.
- * Stop the game when it ends.
+ * Kill killed players.
+ * Move and turn players.
+ * Collect and count coins.
+ * Generate new coins if necessary.
+ * Set the paralized turns to players that shooted.
+ * Count if too many inactive turns had passed.
+ * Stop the game when it ends.
* **Render**. This will take the game state and render it nicely.
They will interact as follows:
@@ -151,3 +160,19 @@ AI Runner->> Game Core: Results
http://knsv.github.io/mermaid/live_editor/
-->
+
+# CashJS Core.
+
+This is a javascript class that will receive the initial world environment, the player functions, and will calculate the game state.
+
+## Arguments:
+ * Players. An array of *player definition* objects.
+
+## Methods:
+ * getState. Will return the current game state.
+ * nextStep. Will execute a step for every player (all individual plys).
+ * _nextPly. Will execute a step for the next player. (A ply).
+
+## Example:
+
+ this.ClashJS = new ClashJS();
Deleted file not rendered
Deleted file not rendered
Oops, something went wrong.

0 comments on commit 3531107

Please sign in to comment.