悩みが無くなる「異次元IQ」頭が良いって何だろう?
頭が良いとは物事を抽象化して考えられるということ。
プログラマーが頭が良いのは、物事を最も抽象的に、論理的に、順序だてて考えられるから。
プログラマーが頭が良いというのは誤謬だ。何事にもプログラミング的思考を取り入れられるということが頭が良いということだ。
【ゆっくり解説】世界を解析する数学「微分積分学」~積分編~
数学の言葉を理解すると、世界を理解できる。
高校で習う数学はいたって簡単だ。
それは、「基礎」だからだ。
平面や立体の面積や体積を測ることは、日常で使う科学では必須だ。
微分や積分は単なるパズルではない。
意味があるから発明されたんだ。
この世界で小数点の無い整数は少数派である。
寧ろ、√2 や 1/3 のように小数の方が多数派である。
しかし、人間は無限に続く小数を計算できない。
分数の誕生である。
1/3は1/3であり、誰も、それをがんばって0.33333・・・と計算しようとは思わない。
それ以上計算が進まなくなるからだ。
計算には約束事が必要だ。
だから、約束事として、数学が発展した。
この人の話を聞け!最強の戦略家!森岡毅。
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・
Javascript シューティングゲーム ソースコード(引用)
Javascriptのソースを何度も読んでいた。
そんなに難しいコードではない。
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// breif : プレイヤークラス
// note :
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
class Player extends createjs.Shape{
// getter
getX() { return this.x; } // X位置を返す。
getY() { return this.y; } // Y位置を返す。
getLevel() { return this.level }
getExp() { return this.exp }
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// breif : コンストラクタ
// note :
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
constructor() {
super(); // 親クラスのコンストラクタ呼び出し
this.x = 0;
this.y = 0;
this.exp = 0;
this.level = 1;
// プレイヤーの形を定義
this.graphics.beginFill("white").moveTo(0, -10).lineTo(-5, 0).lineTo(5, 0).closePath();
}
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// breif : プレイヤーを移動する。
// note :
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
move(stage) {
// 自機をマウス座標まで移動させる(減速で移動)
this.x += (stage.mouseX - this.x) * 0.1;
this.y += (stage.mouseY - this.y) * 0.1;
}
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// breif : 経験値を取得
// note :
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
addExp(exp) {
this.exp = this.exp + exp;
this.level = Math.ceil(this.exp / 500)
}
}
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// breif : エネミークラス
// note :
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
class Enemy extends createjs.Shape{
// getter
getX() { return this.x; } // X位置を返す。
getY() { return this.y; } // Y位置を返す。
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// breif : コンストラクタ
// note :
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
constructor(stageW, stageH) {
super(); // 親クラスのコンストラクタ呼び出し
this.x = 0;
this.y = 0;
// 敵の形を定義
this.graphics.beginFill("red").moveTo(10,-5).lineTo(10,5).lineTo(5,5).lineTo(5,10)
.lineTo(-5,10).lineTo(-5,5).lineTo(-10,5).lineTo(-10,-5).closePath();
// 画面上側からランダムに生成
this.x = stageW * Math.random();
this.y = stageH;
}
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// breif : 敵を移動する。
// note :
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
move() {
// 敵を移動させる。
this.y += 1;
}
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// breif : 敵とプレイヤーの弾との衝突判定をする。
// note :
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
collideWith(bullet) {
// 敵から見た発射弾のローカル座標を取得
var pt = bullet.localToLocal(0, 0, this);
// 当たり判定を行う
return this.hitTest(pt.x, pt.y);
}
}
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// breif : 弾クラス
// note :
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
class Bullet extends createjs.Shape{
// getter
getX() { return this.x; } // X位置を返す。
getY() { return this.y; } // Y位置を返す。
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// breif : コンストラクタ
// note :
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
constructor(x, y, level) {
super(); // 親クラスのコンストラクタ呼び出し
this.x = x;
this.y = y;
this.level = level;
// 弾の形を定義
this.graphics.beginFill("white").drawCircle(0, 0, 3);
}
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// breif : 弾を移動する。
// note :
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
move() {
// 弾を移動させる。
this.y -= 10 + this.level;
}
}
メインコード
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="css/base.css" />
<script src="//code.createjs.com/1.0.0/createjs.min.js"></script>
<script src="js/class/Player.js"></script>
<script src="js/class/Bullet.js"></script>
<script src="js/class/Enemy.js"></script>
<script>
// 読み込みが終わってから初期化
window.addEventListener("load", init);
function init() {
var stage = new createjs.Stage("myCanvas");
敵と弾は複数存在するので配列にする。
var enemyList = []; // 敵の配列
var bulletList = []; // 発射弾の配列
var count = 0; // フレーム番号
var scoreNum = 0; // スコア
var STAGE_W = 540; // 画面サイズ
var STAGE_H = 960;
// 背景を作成
var bg = new createjs.Shape(); オブジェクト生成
bg.graphics.beginFill("black").drawRect(0, 0, STAGE_W, STAGE_H);
stage.addChild(bg);
// 自機を作成
var player = new Player();
描画するのが一番後なので、プレイヤーを最後に定義する。
stage.addChild(player); // ステージに追加
// スコア欄を作成
var scoreBoard = new createjs.Text("", "20px sans-serif", "white");
scoreBoard.text = "Score:" + String(0);
stage.addChild(scoreBoard);
// レベル欄を作成
var levelBoard = new createjs.Text("", "20px sans-serif", "white");
levelBoard.text = "level:" + String(1);
levelBoard.x = 150;
levelBoard.y = 0;
stage.addChild(levelBoard);
// マウス座標欄を作成
var mouseBoard = new createjs.Text("", "10px sans-serif", "white");
mouseBoard.x = 0;
mouseBoard.y = 30;
stage.addChild(mouseBoard);
// タッチ操作も可能にする(iOS,Android向け)
if (createjs.Touch.isSupported()) {
createjs.Touch.enable(stage);
}
ここらへんの書き方はアプリの開発にそのまま使える。
// マウスイベントの登録
stage.addEventListener("click", handleClick);
// tick イベントの登録
createjs.Ticker.framerate = 60; // setFPSは非推奨
createjs.Ticker.addEventListener("tick", handleTick);
// クリックした時の処理
function handleClick(event) {
// レベル増加に合わせて弾数増加
for (var i = 0; i < player.level; i++) {
var bullet = new Bullet(player.x, player.y, player.level);
stage.addChild(bullet); // ステージに追加
bulletList.push(bullet); // 配列に保存
if (player.level > 1) {
var bullet = new Bullet(player.x + i * 10, player.y, player.level);
stage.addChild(bullet); // ステージに追加
bulletList.push(bullet); // 配列に保存
}
if (player.level > 1) {
var bullet = new Bullet(player.x - i * 10, player.y, player.level);
stage.addChild(bullet); // ステージに追加
bulletList.push(bullet); // 配列に保存
}
}
}
// tick イベントの処理
function handleTick() {
// 自機をマウス座標まで移動させる(減速で移動)
player.move(stage);
// フレーム番号を更新(インクリメント)
count = count + 1;
// 60フレームに1回、敵を生成
if (count % 60 == 0) {
// 敵を生成
var enemy = new Enemy(STAGE_W, 50);
stage.addChild(enemy); // ステージに追加
enemyList.push(enemy); // 配列に保存
}
// 発射弾の移動処理
for (var i = 0; i < bulletList.length; i++) {
bulletList[i].move();
// 画面端まで移動したら
if (bulletList[i].x > STAGE_W || bulletList[i].y > STAGE_H) {
stage.removeChild(bulletList[i]); // 画面から削除
bulletList.splice(i, 1); // 配列から削除
}
}
// 敵の移動処理
for (var i = 0; i < enemyList.length; i++) {
// 敵機の移動
enemyList[i].move();
// 画面端まで移動したら
if (enemyList[i].x < 0 || enemyList[i].y > STAGE_H) {
showGameOver(); // ゲームオーバー処理へ
}
}
// 発射弾と敵の当たり判定
for (var j = 0; j < enemyList.length; j++) {
for (var i = 0; i < bulletList.length; i++) {
var bullet = bulletList[i];
var enemy = enemyList[j];
// 当たり判定を行う
if (enemy.collideWith(bullet) == true) {
// 発射弾の削除
stage.removeChild(bullet);
bulletList.splice(i, 1);
コライド関数はすでに当たり判定処理が書かれているらしい。
// 敵の削除
stage.removeChild(enemyList[j]);
enemyList.splice(j, 1);
// スコアの更新
scoreNum += 100;
player.addExp(100);
// ステージクリア判定
if (scoreNum >= 3000) {
showGameClear();
}
break;
}
}
}
// 各テキストの更新
scoreBoard.text = "Score:" + String(scoreNum);
levelBoard.text = "Level:" + String(player.getLevel()) + " Exp:" + String(player.getExp());
mouseBoard.text = "Mouse X:" + String(stage.mouseX) + " Y:" + String(stage.mouseY);
// ステージの更新
stage.update();
}
// ゲームオーバー
function showGameOver() {
alert("ゲームオーバー! あなたのスコアは " + scoreNum + " でした。");
// 各種イベントをまとめて解除
createjs.Ticker.removeAllEventListeners();
stage.removeAllEventListeners();
}
// ステージクリア
function showGameClear() {
alert(scoreNum + "点達成! ゲームクリア!");
// 各種イベントをまとめて解除
createjs.Ticker.removeAllEventListeners();
stage.removeAllEventListeners();
}
}
</script>
</head>
<body>
<canvas id="myCanvas" width="540" height="960"></canvas>
</body>
</html>
引用元:http://www.programmingtheworld.com/index.php/2020/03/04/js-shooting-game/
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・
パウエル再任、間もなく【金利ショック】
やるべきことはたくさんある。
中国語がまだまだ不自由だ。
単語量がまだまだ少ない。
学ぶべきことがたくさんある。
喋りたいことがちゃんと言えない。
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・
四季報をずっと読んでいた。
コインランドリーで布団を選択しながら、蛍光ペンでチェックしていた。
2周目が終わりそう。
2周目は、浮動株比率が10%以下の株に注目してチェックしていた。
チェックする項目はいくつかある。
営業利益が毎年増えているか、
PERは業界平均より低いか、ROAは業界平均より高いか、
売掛残が多くないか、
持ち株は社長か、投資銀行か、
年収は業界平均より高いか、社員の平均年齢は、
これだけでも、四季報を1冊10往復ぐらいしないといけなくなる。
大変だよね・・・
でも、まず、やってみようと思う。
それから、簿記の勉強も続けていこうと思う。
3級から2級へ・・・
やればできる。
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・
マンガの模写をしました。
桂正和さんの絵を模写していました。