Merge branch 'master' of https://github.com/plane000/Examples
This commit is contained in:
BIN
NodeJS/Snake.rar
Normal file
BIN
NodeJS/Snake.rar
Normal file
Binary file not shown.
@@ -1,24 +1,35 @@
|
||||
/*
|
||||
Author(s): Ben (plane000)#8618
|
||||
Created: 14/06/2018
|
||||
Last Updated: 16/06/2018
|
||||
Last Updated by: Ben (plane000)#8618
|
||||
*/
|
||||
|
||||
let c = document.getElementById("canv");
|
||||
let ctx = c.getContext("2d");
|
||||
|
||||
let screenHeight = 40;
|
||||
let screenWidth = 40;
|
||||
let lost = false;
|
||||
|
||||
let gridSize = 40;
|
||||
let grid = []; //0 = nothing, 1 = snake, 2 = apple
|
||||
|
||||
let direction = 0; //0 = up, 1 = right, 2 = down, 3 = left
|
||||
let direction = 3; //0 = up, 1 = right, 2 = down, 3 = left
|
||||
|
||||
let snakeX = 20;
|
||||
let snakeY = 20;
|
||||
let snake = [[Math.floor(Math.random() * gridSize), Math.floor(Math.random() * gridSize)]];
|
||||
let apple;
|
||||
|
||||
window.addEventListener("keydown", onKeyDown, false);
|
||||
|
||||
for (let i = 0; i < screenHeight; i++) {
|
||||
for (let i = 0; i < gridSize; i++) {
|
||||
grid[i] = [];
|
||||
for (let j = 0; j < screenWidth; j++) {
|
||||
for (let j = 0; j < gridSize; j++) {
|
||||
grid[i][j] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("keydown", onKeyDown, false);
|
||||
spawnApple();
|
||||
render();
|
||||
draw();
|
||||
|
||||
function onKeyDown(event) {
|
||||
switch (event.key) {
|
||||
case 'w':
|
||||
@@ -40,31 +51,99 @@ function onKeyDown(event) {
|
||||
}
|
||||
}
|
||||
|
||||
function gameLoop() {
|
||||
for (let i = 0; i < screenHeight; i++) {
|
||||
for (let j = 0; j < screenWidth; j++) {
|
||||
grid[i][j] = 0;
|
||||
async function gameLoop() {
|
||||
if (!lost) {
|
||||
await updateSnake();
|
||||
await checkColisions();
|
||||
render();
|
||||
draw();
|
||||
} else {
|
||||
for (let i = 0; i < gridSize; i++) {
|
||||
for (let j = 0; j < gridSize; j++) {
|
||||
grid[i][j] = 0;
|
||||
}
|
||||
}
|
||||
snake = [[Math.floor(Math.random() * gridSize), Math.floor(Math.random() * gridSize)]];
|
||||
spawnApple();
|
||||
render();
|
||||
draw();
|
||||
lost = false;
|
||||
}
|
||||
|
||||
if (direction == 0) {
|
||||
snakeY--;
|
||||
} else if (direction == 1) {
|
||||
snakeX++;
|
||||
} else if (direction == 2) {
|
||||
snakeY++;
|
||||
} else if (direction == 3) {
|
||||
snakeX--;
|
||||
}
|
||||
|
||||
grid[snakeX][snakeY] = 1;
|
||||
|
||||
render();
|
||||
}
|
||||
|
||||
function render() {
|
||||
for (let i = 0; i < screenHeight; i++) {
|
||||
for (let j = 0; j < screenWidth; j++) {
|
||||
function updateSnake() {
|
||||
let newX;
|
||||
let newY;
|
||||
if (direction == 0) {
|
||||
newX = snake[snake.length - 1][0];
|
||||
newY = snake[snake.length - 1][1] - 1;
|
||||
} else if (direction == 1) {
|
||||
newX = snake[snake.length - 1][0] + 1;
|
||||
newY = snake[snake.length - 1][1];
|
||||
} else if (direction == 2) {
|
||||
newX = snake[snake.length - 1][0];
|
||||
newY = snake[snake.length - 1][1] + 1;
|
||||
} else if (direction == 3) {
|
||||
newX = snake[snake.length - 1][0] - 1;
|
||||
newY = snake[snake.length - 1][1];
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
grid[snake[0][0]][snake[0][1]] = 0;
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
snake.push([newX, newY]);
|
||||
snake.shift(1);
|
||||
}
|
||||
|
||||
function checkColisions() {
|
||||
if (apple[0] == snake[[snake.length - 1][0]][0] && apple[1] == snake[[snake.length - 1][0]][1] ) {
|
||||
snake.push([apple[0], apple[1]]);
|
||||
apple = [];
|
||||
spawnApple();
|
||||
}
|
||||
if (grid[snake[[snake.length - 1][0]][0]][snake[[snake.length - 1][0]][1]] == 1) {
|
||||
lost = true;
|
||||
}
|
||||
if (snake[[snake.length - 1][0]][0] < 1) {
|
||||
lost = true;
|
||||
}
|
||||
if (snake[[snake.length - 1][0]][0] > gridSize - 2) {
|
||||
lost = true;
|
||||
}
|
||||
if (snake[[snake.length - 1][0]][1] < 1) {
|
||||
lost = true;
|
||||
}
|
||||
if (snake[[snake.length - 1][0]][1] > gridSize - 1) {
|
||||
lost = true;
|
||||
}
|
||||
}
|
||||
|
||||
function spawnApple() {
|
||||
let spawned = false
|
||||
while (!spawned) {
|
||||
let x = Math.floor(Math.random() * gridSize);
|
||||
let y = Math.floor(Math.random() * gridSize);
|
||||
if (grid[x][y] != 1 && x != 0 && y != 0) {
|
||||
apple = [x, y];
|
||||
spawned = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function render() {
|
||||
for (let s = 0; s < snake.length; s++) {
|
||||
grid[snake[s][0]][snake[s][1]] = 1;
|
||||
}
|
||||
grid[apple[0]][apple[1]] = 2;
|
||||
}
|
||||
|
||||
function draw() {
|
||||
for (let i = 0; i < gridSize; i++) {
|
||||
for (let j = 0; j < gridSize; j++) {
|
||||
if (grid[i][j] == 0) {
|
||||
ctx.fillStyle="#FFFFF0";
|
||||
} else if (grid[i][j] == 1) {
|
||||
@@ -72,7 +151,7 @@ function render() {
|
||||
} else {
|
||||
ctx.fillStyle="#00FF00";
|
||||
}
|
||||
ctx.fillRect(i * 10, j * 10, 400 / screenHeight, 400 / screenWidth);
|
||||
ctx.fillRect(i * 10, j * 10, 400 / gridSize, 400 / gridSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<link rel="stylesheet" type="text/css" media="screen" href="css/style.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a href="../index.html">return</a>
|
||||
<canvas id="canv" width="400" height="400" onkeypress="onKeyPressed(event)"></canvas>
|
||||
<script src="game.js"></script>
|
||||
</body>
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "snake",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "Ben (plane000)",
|
||||
"license": "MIT"
|
||||
}
|
||||
160
NodeJS/node-dtdns-updater/.eslintrc.json
Normal file
160
NodeJS/node-dtdns-updater/.eslintrc.json
Normal file
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"extends": "eslint:recommended",
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2017
|
||||
},
|
||||
"env": {
|
||||
"es6": true,
|
||||
"node": true
|
||||
},
|
||||
"globals": {
|
||||
"Exception": true
|
||||
},
|
||||
"overrides": [
|
||||
{ "files": ["*.browser.js"], "env": { "browser": true } }
|
||||
],
|
||||
"rules": {
|
||||
"no-console": "warn",
|
||||
"no-await-in-loop": "warn",
|
||||
"no-compare-neg-zero": "error",
|
||||
"no-extra-parens": ["warn", "all", {
|
||||
"nestedBinaryExpressions": false
|
||||
}],
|
||||
"no-template-curly-in-string": "error",
|
||||
"no-unsafe-negation": "error",
|
||||
"valid-jsdoc": ["error", {
|
||||
"requireReturn": false,
|
||||
"requireReturnDescription": false,
|
||||
"prefer": {
|
||||
"return": "returns",
|
||||
"arg": "param"
|
||||
},
|
||||
"preferType": {
|
||||
"String": "string",
|
||||
"Number": "number",
|
||||
"Boolean": "boolean",
|
||||
"Symbol": "symbol",
|
||||
"object": "Object",
|
||||
"function": "Function",
|
||||
"array": "Array",
|
||||
"date": "Date",
|
||||
"error": "Error",
|
||||
"null": "void"
|
||||
}
|
||||
}],
|
||||
|
||||
"accessor-pairs": "warn",
|
||||
"array-callback-return": "error",
|
||||
"complexity": "warn",
|
||||
"consistent-return": "error",
|
||||
"curly": ["error", "multi-line", "consistent"],
|
||||
"dot-location": ["error", "property"],
|
||||
"dot-notation": "error",
|
||||
"eqeqeq": "error",
|
||||
"no-empty-function": "error",
|
||||
"no-floating-decimal": "error",
|
||||
"no-implied-eval": "error",
|
||||
"no-invalid-this": "error",
|
||||
"no-lone-blocks": "error",
|
||||
"no-multi-spaces": "error",
|
||||
"no-new-func": "error",
|
||||
"no-new-wrappers": "error",
|
||||
"no-new": "error",
|
||||
"no-octal-escape": "error",
|
||||
"no-return-assign": "error",
|
||||
"no-return-await": "error",
|
||||
"no-self-compare": "error",
|
||||
"no-sequences": "error",
|
||||
"no-throw-literal": "error",
|
||||
"no-unmodified-loop-condition": "error",
|
||||
"no-unused-expressions": "error",
|
||||
"no-useless-call": "error",
|
||||
"no-useless-concat": "off",
|
||||
"no-useless-escape": "error",
|
||||
"no-useless-return": "error",
|
||||
"no-void": "error",
|
||||
"no-warning-comments": "warn",
|
||||
"prefer-promise-reject-errors": "error",
|
||||
"require-await": "warn",
|
||||
"wrap-iife": "error",
|
||||
"yoda": "error",
|
||||
|
||||
"no-label-var": "error",
|
||||
"no-shadow": "error",
|
||||
"no-undef-init": "error",
|
||||
|
||||
"callback-return": "error",
|
||||
"handle-callback-err": "error",
|
||||
"no-mixed-requires": "error",
|
||||
"no-new-require": "error",
|
||||
"no-path-concat": "error",
|
||||
|
||||
"array-bracket-spacing": "error",
|
||||
"block-spacing": "error",
|
||||
"brace-style": ["error", "stroustrup", { "allowSingleLine": true }],
|
||||
"comma-dangle": ["error", "always-multiline"],
|
||||
"comma-spacing": "error",
|
||||
"comma-style": "error",
|
||||
"computed-property-spacing": "error",
|
||||
"consistent-this": ["error", "$this"],
|
||||
"eol-last": "error",
|
||||
"func-names": "error",
|
||||
"func-name-matching": "error",
|
||||
"func-style": ["error", "declaration", { "allowArrowFunctions": true }],
|
||||
"indent": ["error", 2, { "SwitchCase": 1 }],
|
||||
"key-spacing": "error",
|
||||
"keyword-spacing": "error",
|
||||
"max-depth": "error",
|
||||
"max-len": ["warn", 160, 2],
|
||||
"max-nested-callbacks": ["warn", { "max": 4 }],
|
||||
"max-statements-per-line": ["error", { "max": 2 }],
|
||||
"new-cap": "off",
|
||||
"newline-per-chained-call": ["error", { "ignoreChainWithDepth": 3 }],
|
||||
"no-array-constructor": "error",
|
||||
"no-inline-comments": "error",
|
||||
"no-lonely-if": "error",
|
||||
"no-mixed-operators": "error",
|
||||
"no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1, "maxBOF": 0 }],
|
||||
"no-new-object": "error",
|
||||
"no-spaced-func": "error",
|
||||
"no-trailing-spaces": "error",
|
||||
"no-unneeded-ternary": "error",
|
||||
"no-whitespace-before-property": "error",
|
||||
"nonblock-statement-body-position": "error",
|
||||
"object-curly-spacing": ["error", "always"],
|
||||
"operator-assignment": "error",
|
||||
"operator-linebreak": ["error", "after"],
|
||||
"padded-blocks": ["error", "never"],
|
||||
"quote-props": ["error", "as-needed"],
|
||||
"quotes": ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": true }],
|
||||
"semi-spacing": "error",
|
||||
"semi": "error",
|
||||
"space-before-blocks": "error",
|
||||
"space-before-function-paren": ["error", {
|
||||
"anonymous": "never",
|
||||
"named": "never",
|
||||
"asyncArrow": "always"
|
||||
}],
|
||||
"space-in-parens": "error",
|
||||
"space-infix-ops": "error",
|
||||
"space-unary-ops": "error",
|
||||
"spaced-comment": "error",
|
||||
"template-tag-spacing": "error",
|
||||
"unicode-bom": "error",
|
||||
|
||||
"arrow-body-style": "error",
|
||||
"arrow-parens": ["error", "as-needed"],
|
||||
"arrow-spacing": "error",
|
||||
"no-duplicate-imports": "error",
|
||||
"no-useless-computed-key": "error",
|
||||
"no-useless-constructor": "error",
|
||||
"prefer-arrow-callback": "error",
|
||||
"prefer-numeric-literals": "error",
|
||||
"prefer-rest-params": "error",
|
||||
"prefer-spread": "error",
|
||||
"prefer-template": "error",
|
||||
"rest-spread-spacing": "error",
|
||||
"template-curly-spacing": "error",
|
||||
"yield-star-spacing": "error"
|
||||
}
|
||||
}
|
||||
2
NodeJS/node-dtdns-updater/.gitignore
vendored
Normal file
2
NodeJS/node-dtdns-updater/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/node_modules/
|
||||
/config.json
|
||||
21
NodeJS/node-dtdns-updater/LICENSE
Normal file
21
NodeJS/node-dtdns-updater/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 Alejandro W. Sior
|
||||
|
||||
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.
|
||||
15
NodeJS/node-dtdns-updater/README.md
Normal file
15
NodeJS/node-dtdns-updater/README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# node-dtdns-updater
|
||||
|
||||
This is a simple Client Updater for [DtDNS.com](http://dtdns.com).
|
||||
|
||||
Install the dependencies with : `npm install`
|
||||
Launch it with : `node index.js`
|
||||
With the `-v` argument it logs everything.
|
||||
|
||||
The first time the program launches, a `config.json` file will be created, you'll have to configure your DtDNS credentials and the update delay.
|
||||
In ip, leave `""` to point to the current ip.
|
||||
|
||||
See [DtDNS api info](https://www.dtdns.com/dtsite/updatespec) for more info.
|
||||
|
||||
## License
|
||||
MIT (SEE LICENSE FILE)
|
||||
71
NodeJS/node-dtdns-updater/index.js
Normal file
71
NodeJS/node-dtdns-updater/index.js
Normal file
@@ -0,0 +1,71 @@
|
||||
const snekfetch = require('snekfetch');
|
||||
const fs = require('fs');
|
||||
|
||||
let verbose = false;
|
||||
|
||||
if (process.argv.indexOf('-v') >= 0 || process.argv.indexOf('--verbose') >= 0) {
|
||||
verbose = true;
|
||||
}
|
||||
|
||||
let config = {};
|
||||
if (!fs.existsSync('./config.json')) {
|
||||
config.id = 'dtdns domain';
|
||||
config.pw = 'dtdns account password';
|
||||
config.ip = 'ip to point (let blank for current ip)';
|
||||
config.delay = 120000;
|
||||
fs.writeFileSync('./config.json', JSON.stringify(config));
|
||||
console.error('Please configure the newly created config.json');
|
||||
process.exit(-1);
|
||||
}
|
||||
else {
|
||||
let text = fs.readFileSync('./config.json');
|
||||
config = JSON.parse(text);
|
||||
}
|
||||
|
||||
if (verbose === true) {
|
||||
log(`Delay set to ${config.delay}`);
|
||||
if (config.ip) {
|
||||
log(`Pointed ip is ${config.ip}`);
|
||||
}
|
||||
else {
|
||||
log('Pointed ip is current ip');
|
||||
}
|
||||
log('Started in verbose mode');
|
||||
}
|
||||
|
||||
async function update() {
|
||||
if (verbose) {
|
||||
log('Attempting GET request.');
|
||||
}
|
||||
try {
|
||||
let req = snekfetch.get('https://www.dtdns.com/api/autodns.cfm')
|
||||
.query('id', config.id)
|
||||
.query('pw', config.pw);
|
||||
if (config.ip !== '') {
|
||||
req.query('ip', config.ip);
|
||||
}
|
||||
req.query('client', 'NodeDtDUp');
|
||||
let res = await req.send();
|
||||
if (verbose) {
|
||||
log(`Server response : ${res.body}`);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
if (verbose) {
|
||||
log(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* eslint-disable */
|
||||
|
||||
function log(message) {
|
||||
let date = new Date();
|
||||
console.log('[' + date.getFullYear() + '/' + date.getDate() + '/' + (date.getMonth() + 1) + '-' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds() + ']' + message);
|
||||
}
|
||||
|
||||
/* eslint-enable */
|
||||
|
||||
update();
|
||||
|
||||
setInterval(update, config.delay);
|
||||
1164
NodeJS/node-dtdns-updater/npm-shrinkwrap.json
generated
Normal file
1164
NodeJS/node-dtdns-updater/npm-shrinkwrap.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
17
NodeJS/node-dtdns-updater/package.json
Normal file
17
NodeJS/node-dtdns-updater/package.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "dtdns-updater",
|
||||
"version": "2.0.0",
|
||||
"description": "A program that automaticly update a ip address on DtDNS.com",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "aws",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"snekfetch": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^4.19.1"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user