fc2ブログ

シューティングゲームプログラミングの基礎、画面の描画/『聴読中国語』また、1周読了、HSK6級への道/今週も通院、そして、またつらい仕事が始まる

HSK 6級 過去問 リスニング 《H61005》






HSK6級、リスニング、もう少しで全部聞き取れる。
でも、まだまだ。






プログラミング講座 第21回【シューティングゲーム作成(1)/JavaScript】



上の動画では、シューティングゲームの基本である、背景の星の描画について説明しています。
下がソースコードです。


//画面サイズ
const SCREEN_W = 180;
const SCREEN_H = 320;

//キャンバスサイズ
const CANVAS_W = SCREEN_W *2;
const CANVAS_H = SCREEN_H *2;

//フィールドサイズ
const FIELD_W = SCREEN_W *2;
const FIELD_H = SCREEN_H *2;

//星の数
const STAR_MAX = 300;

//キャンバス
let can = document.getElementById("can");
let con = can.getContext("2d");
can.width = CANVAS_W;
can.height = CANVAS_H;

function rand(min, max)
{
    return Math.floor(Math.random()*(max-min+1) ) +min;
}
class Star
{
    constructor()
    {
        this.x = rand(0, FIELD_W)<<8;
        this.y = rand(0,FIELD_H)<<8;
        this.vx = 0;
        this.vy = rand(30,200);
        this.sz = rand(1,2);
}

draw()
{
        con.fillStyle=rand(0,2)!=0?"66f":"8af";
        con.fillRect(this.x>>8,this.y>>8,this.sz,this.sz);
}

update()
{
        this.x += this.vx;
        this.y += this.vy;
        if( this.y>FIELD_H<<8 )
        {
            this.y=0;
            this.x=rand(0,FIELD_W)<<8;
        }
}

let star=[];
for(let i=0; i<STAR_MAX; i++)star[i]=new Star();
for(let i=0; i<STAR_MAX; i++)star[i].draw();

con.fillStyle="black";
con.fillRect(0,0,SCREEN_W,SCREEN_H);





シフト演算子について説明しているサイトから引用

シフト演算子はビット演算子の一つで数値の各ビットを左又は右へシフトさせるための演算子です。


<<= a = a << 2 左シフト
>>= a = a >> 2 右シフト


0000000000001011  = 11
----------------
0000000000010110  = 22


各ビットを指定した数だけ左へシフトします。左端からはみ出した部分は削除され、シフトしたことによって空いた右端は「0」が格納されます。結果として11を1ビット左へシフトすると22となります。


引用元:https://www.javadrive.jp/cstart/ope/index7.html




プログラミング講座 第22回【シューティングゲーム作成(2)/JavaScript】






・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・




昨日、例によって『聴読中国語』をゆっくりバージョンで62課全部を一周音読した。

やはり、自分は『聴読中国語』をちゃんと読めていると思い込んでいただけの部分があって、
昨日読んでみると、ちゃんと理解しないで、読んでいるだけのところがあった。

もう一度、文の内容を噛みしめながら、内容をきちんと理解しながら、読んでいこうと思った。





HSK6級も、自分の実力だともう、合格できるレベルなはずなんだが。
なにか1つ足りない。
かといって、これ以上テキストを買っても意味が無いと思っている。
今、もっているテキストを、今以上にしっかり理解していく必要があるんじゃないかと思っている。

職場の中国人が言っていることで分からないことも、おそらく、HSK6級を難なく合格できるレベルになったら、ちゃんとしっかり聞き取れることができるんじゃないかと思う。




多分、HSK6級を難なく合格できるレベルになったら、ちょっとした故事成語や慣用句の知識を勉強しさえすれば、中国語検定準1級は合格できるだろうし。




・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・




何か集中できるものを見つけておかないとつらい。
それは、今、まさに、職場でのパワハラと吊るし上げを受けているから。

この1ヶ月ちょっと、休職をして、さらに仕事に戻してもらえない現状。
そして、毎日の叱責。

このつらい時期が早く過ぎないか、それを考えている。




思い返してみれば、
江戸川区で働いていた頃から整理整頓、掃除は苦手だった、
それから、江東区で働いていたときに、事務処理でミスをして、仕事を取られてしまった。

いったい、自分には何が足りなかったのだろうか。
どうして、他の人ができていることが、自分にはできないのだろうか。




明日から職場に行くのが、やはり、どうしても、苦痛になる。
いったい、どうして、こんなことになってしまったのだろうか。




悪い見本を見て、それを模倣する癖がついてしまったのだろうか。




確かに江戸川区時代は、暴力、暴言、公文書紛失、など、今では考えられないようなことが、もっと起こっていた。
しかし、そういうことを模倣して、何の疑問に思っていなかったのだとしたら、それは自分が悪いと気付くべきだろう。





・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・




数ヶ月前は、全く考えてもみなかった、
今、こんな事態になってしまったなんて。

数ヶ月前は、イケイケで、あれもこれもと、いろんなことをやりたいと思って、エキシビジョンに向けて頑張っていたのに。

それを全て取り上げられ、
そして、指導にも復帰できず、

いったい、何が悪かったのか。
あのとき、作品がすぐに見つかればよかったのか、
作品の提出遅れがなければよかったのか、
9月ごろ、体力がダウンしていたのを、いち早く回復していればよかったのか、


こんな吊るし上げの状態を受けて、
いつまでも続く、この苦しい状態。


考えたら、自分で選んだ、「来年もいたいです(異動しません)」の一言。
来年残留しても苦しいだけじゃないのかという思い。
でも、自分のことを慕っている子供たちのために居続けたいという思い。




いったい、何が原因でこんなことになってしまったんだろう・・・・
もっと、自分の行動や状況、状態に慎重になるべきだったんだろう。




・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・





ダウンロード



金曜日に病院に行って、また、木曜日、今度は上司同伴で行く。
もう、かれこれ、9月17日から、毎週のように病院に行っている。

もう、こりごりだ。


また、明日から仕事だ、
こんなに仕事がつらいなんて。
あんなに好きだった仕事だったのに、、、



スポンサーサイト



新しく作ったゲーム(9年前にプログラムしたゲームの改変)とソースコードのアルゴリズム整理

game20221.png

今回も、一人一人に絵を描かせて、それをゲームにした。

ゲームのクオリティとしては、初代ファミコンのゼビウスかツインビー程度のもの。

プログラム自体は、私が数年前にプログラミングしたものを改変したものだ。



この夏休暇は、10時間ぐらい時間をかけてプログラムを改変し、
そして、子どもたちの絵を一つずつプログラムに取り込む作業をしていた。
なおかつ、いつまで経っても提出しない子どもがいたので、誰が、誰がまだ出していないのか確認する作業に本当に苦労した。

しかしながら、あと、4人取り込めば本当の意味でゲームが完成する。



そして、これから、このJavaアプレットのソースコードをJavascriptに書き換えるために、ソースコードのアルゴリズムを再整理していこうと思っている。

この下、ソースコード。



アプレットメインクラス

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package yokoshoot218.jp.ohtsuki.minigame;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.sound.sampled.Clip;


public class YokoShootMainApplet extends GameHoneGumiApplet {
public static final int GAMEN_W = 624;
public static final int GAMEN_H = 480;

BufferedImage charaimage1,charaimage2,charaimage3,tikeiimage, startimage, biBoss, biJiki, biItem,backimage1,bitimage,biBoss2,biBoss3,biBoss4,biBoss5,biBoss6,biBoss7,backgasimage,backimage2,backimage3,backimage4,backimage5,backimage6,kowareimage,barrierimage,loveimage;
        Jiki jiki;
        int zanki = 6;
        int iHappy = 0;        
        int iHeart = 0;           
        Bit bit;
        Boss boss;
        Barrier barrier;
        Boss2 boss2;
        boolean upkey, downkey, rightkey, leftkey, spacekey;
ArrayList jikitamas, tekis, tekitamas, bakuhatsus, items, kowares;
int rensya=0;
int tekitamarate = 100;
int score, highscore, stagenum=1;
Clip seClip1,seClip2,seClip3,seClip4,seClip5;
        int iBackgroundX = 0;
        int iBackgroundX2 = 0;
TikeiMap tikeimap;
        Koware koware;
        int iBossTairyoku = 20;
        int barrierup = 10;
        boolean barrierflag = false;
        int iGotItemNum = 0;

         public void init() {
super.init(GAMEN_W, GAMEN_H, "GAME");
setBackground(Color.BLACK);
                
try {
charaimage1 = ImageIO.read(getClass().getResource("chara01.PNG"));
                        charaimage2 = ImageIO.read(getClass().getResource("chara02.PNG"));
                        charaimage3 = ImageIO.read(getClass().getResource("chara03.png"));
        
                        bitimage = ImageIO.read(getClass().getResource("bit.png"));
                        backimage1 = ImageIO.read(getClass().getResource("bg1.png"));
                        backimage2 = ImageIO.read(getClass().getResource("bg2.png"));
                        backimage3 = ImageIO.read(getClass().getResource("bg3.png"));
                        backimage4 = ImageIO.read(getClass().getResource("bg4.png"));
                        backimage5 = ImageIO.read(getClass().getResource("bg5.png"));
                        backimage6 = ImageIO.read(getClass().getResource("bg6.png"));
                        backgasimage = ImageIO.read(getClass().getResource("backgas.png"));
tikeiimage = ImageIO.read(getClass().getResource("tikeidata01.PNG"));
                        barrierimage = ImageIO.read(getClass().getResource("barrier.png"));
                        kowareimage = ImageIO.read(getClass().getResource("tikeidata01.PNG"));
startimage = ImageIO.read(getClass().getResource("start.jpg"));
                        biBoss = ImageIO.read(getClass().getResource("boss.png"));
                        biBoss2 = ImageIO.read(getClass().getResource("boss2.png"));
                        biBoss3 = ImageIO.read(getClass().getResource("boss3.png"));
                        biBoss4 = ImageIO.read(getClass().getResource("boss4.png"));
                        biBoss5 = ImageIO.read(getClass().getResource("boss5.png"));
                        biBoss6 = ImageIO.read(getClass().getResource("boss6.png"));
                        biBoss7 = ImageIO.read(getClass().getResource("boss7.png"));
                        biJiki = ImageIO.read(getClass().getResource("jiki.png"));
                        biItem = ImageIO.read(getClass().getResource("power.png"));
                        loveimage = ImageIO.read(getClass().getResource("love.png"));
                        
} catch (IOException e) {
e.printStackTrace();
}
seClip1 = otoYomikomi("burst01.wav");
seClip2 = otoYomikomi("fm005.wav");
seClip3 = otoYomikomi("smoke03.wav");
                seClip4 = otoYomikomi("pow.wav");
                seClip5 = otoYomikomi("se_sac03.wav");
 
goStartGamen();
}

public void initStageStart() {
jiki = new Jiki(GAMEN_W/2,GAMEN_H/2,biJiki);
jikitamas = new ArrayList();
tekis = new ArrayList(); 
tekitamas = new ArrayList();
bakuhatsus = new ArrayList();
                items = new ArrayList();
                kowares = new ArrayList();
upkey=false; downkey=false; rightkey=false;
leftkey=false;
tikeimap = new TikeiMap(tikeiimage,"00" + stagenum + ".map","001.pat");
                koware = new Koware(tikeiimage,"00" + stagenum + ".map","001.pat");

                if (gamemainstate == GM_ZAKO) {
                   
midiseq.setTickPosition(0);
midiseq.start();
}

public void initStageClear() {
stagenum = stagenum+1;
                if(stagenum > 6)stagenum=1;
score = score + stagenum * 100;                
                if(score%1000 == 0)zanki++;

                
                iBackgroundX = 0;
midiseq.stop();
                iBossTairyoku = (40*stagenum)/2;
                }

public void initGameOver() {
if (score>highscore) highscore = score;
score = 0;
                iHappy = 0;
                iHeart = 0;
                
                iBackgroundX = 0;
                iBackgroundX2 = 0;
                iGotItemNum = 0;
                barrierup = 10;
                barrierflag = false;
midiseq.stop();
seClip3.setFramePosition(0);
seClip3.start();
                iBossTairyoku = 100;
                zanki--;
                gamemainstate = GM_ZAKO;
                
                stagenum++;
                if(stagenum >= 7)stagenum = 1;

}

public void keyPressedGameMain(int key) {
if (key==KeyEvent.VK_UP) upkey=true;
if (key==KeyEvent.VK_DOWN) downkey=true;
if (key==KeyEvent.VK_LEFT) leftkey=true;
if (key==KeyEvent.VK_RIGHT) rightkey=true;
//if (key==KeyEvent.VK_SPACE) spacekey=true;
            
                jiki.setKey(upkey, downkey);
}
public void keyReleasedGameMain(int key) {
if (key==KeyEvent.VK_UP) upkey=false;
if (key==KeyEvent.VK_DOWN) downkey=false;
if (key==KeyEvent.VK_LEFT) leftkey=false;
if (key==KeyEvent.VK_RIGHT) rightkey=false;
//if (key==KeyEvent.VK_SPACE) spacekey=false;

                jiki.setKey(upkey, downkey);
}

public void runStartGamen(Graphics g) {
g.drawImage(startimage,0,0,this);
                g.setFont(new Font("SansSerif",Font.PLAIN,24));
drawStringCenter("コントローラーの 1 のボタンをおすとはじまるよ",20,g);
}

public void runStageStart(Graphics g) {
g.setColor(Color.BLACK);
g.fillRect(0,0,GAMEN_W,GAMEN_H);
g.setColor(Color.CYAN);
g.setFont(new Font("SansSerif",Font.BOLD,60));
drawStringCenter("ステージ"+ stagenum,200,g);
drawStringCenter("ゲームスタート!",280,g);                
                spacekey=false;
}

public void runStageClear(Graphics g) {
g.setColor(Color.CYAN);
g.setFont(new Font("SansSerif",Font.BOLD,60));
drawStringCenter("ステージクリアー",200,g);
}

public void runGameMain(Graphics g) {
                
g.clearRect(0,0,GAMEN_W,GAMEN_H);
                iBackgroundX-=2;
                if (iBackgroundX < -1600) {                    
                iBackgroundX = 0;
                }
                if(stagenum == 1){
g.drawImage(backimage1 ,iBackgroundX,0,this);
g.drawImage(backimage1 ,iBackgroundX + 1600,0,this);
                }else if(stagenum == 2){
                g.drawImage(backimage2 ,iBackgroundX,0,this);
g.drawImage(backimage2 ,iBackgroundX + 1600,0,this);
                }else if(stagenum == 3){
                g.drawImage(backimage3 ,iBackgroundX,0,this);
g.drawImage(backimage3 ,iBackgroundX + 1600,0,this);
                }else if(stagenum == 4){
                g.drawImage(backimage4 ,iBackgroundX,0,this);
g.drawImage(backimage4 ,iBackgroundX + 1600,0,this);
                }else if(stagenum == 5){
                g.drawImage(backimage5 ,iBackgroundX,0,this);
g.drawImage(backimage5 ,iBackgroundX + 1600,0,this);
                }else{
        g.drawImage(backimage6 ,iBackgroundX,0,this);
g.drawImage(backimage6 ,iBackgroundX + 1600,0,this);
            }
                iBackgroundX2-=3;
                if (iBackgroundX2 < -1600) {
                      iBackgroundX2 = 0;
                }
g.drawImage(backgasimage,iBackgroundX2,0,this);
g.drawImage(backgasimage,iBackgroundX2 + 1600,0,this);


                
                Jiki jikiCheck = jiki.getTest();
                jikiCheck.move(upkey,downkey,leftkey,rightkey);   
                        
if(tikeimap.isAtari(jikiCheck.getx1(),jikiCheck.gety1())==true ||
tikeimap.isAtari(jikiCheck.getx2(),jikiCheck.gety2())==true) {
                    
                    jiki.osare();
    
}else if(koware.isAtari(jikiCheck.getx1(),jikiCheck.gety1())==true ||
koware.isAtari(jikiCheck.getx2(),jikiCheck.gety2())==true) {
                    
                    jiki.osare();
    
}
                else {
                    jiki.move(upkey,downkey,leftkey,rightkey);                    
                }
                
                if (jiki.isSotoNiDeta()) {
                    goGameOver();
                }
            if (spacekey == true && rensya==0){
jikitamas.add(new JikiTama(jiki.chara_x+36,
jiki.chara_y+24,charaimage1,12, 0));
                        
                        if (iGotItemNum >= 3) {
                            jikitamas.add(new
JikiTama(jiki.chara_x+36,jiki.chara_y+24,charaimage1, 12, -4));
                        }
                        if (iGotItemNum >= 4) {
                            jikitamas.add(new JikiTama(jiki.chara_x+36,jiki.chara_y+24,charaimage1, 12, 4));
                        }
                        if (iGotItemNum >= 5) {
                            jikitamas.add(new JikiTama(jiki.chara_x,jiki.chara_y+24,charaimage1, -12, -4));
                        }
                        if (iGotItemNum >= 6) {
                            jikitamas.add(new JikiTama(jiki.chara_x,jiki.chara_y+24,charaimage1, -12, 4));
                        }
                        if (iGotItemNum >= 8) {
                            jikitamas.add(new JikiTama(jiki.chara_x-24,jiki.chara_y+48,charaimage1, 12, 0));
                        }
                        if (iGotItemNum >= 10) {
                            jikitamas.add(new JikiTama(jiki.chara_x-24,jiki.chara_y-36,charaimage1, 12, 0));
                        }
                       
rensya = 30;
}
                         if (iGotItemNum >= 8) {  
                          bit = new Bit(jiki.chara_x-48,jiki.chara_y+48,bitimage);
                            bit.draw(g, this);

                        }
                         if (iGotItemNum >= 10) {
                            bit = new Bit(jiki.chara_x-48,jiki.chara_y-36,bitimage);
                            bit.draw(g, this);

                        }

                        if (iGotItemNum >= 15) {
                            if (!barrierflag) {
                                barrierup = 10;
                                barrierflag = true;
                            }
                            
                            barrier = new Barrier(jiki.chara_x+64,jiki.chara_y+6,barrierimage);
                            barrier.draw(g, this);
                        }


if (rensya>0) rensya = rensya-1;
                
jiki.draw(g,this);
                
Iterator it = jikitamas.iterator();
while(it.hasNext()==true){
JikiTama jt = (JikiTama)it.next();
jt.draw(g,this);
if(jt.isSotoNiDeta()==true) it.remove();
}
                
it = items.iterator();
while(it.hasNext()==true){
Item bh = (Item)it.next();
bh.draw(g,this);
if(bh.isSotoNiDeta()==true) it.remove();
}
                
it = bakuhatsus.iterator();
while(it.hasNext()==true){
Bakuhatsu bh = (Bakuhatsu)it.next();
bh.draw(g,this);
if(bh.isSotoNiDeta()==true) it.remove();
}

                if (gamemainstate == GM_ZAKO) {
                    
                    runGameMainZako(g);
                }else {
                    
                    runGameMainBoss(g);


                }

g.setColor(Color.WHITE);
g.setFont(new Font("SansSerif",Font.PLAIN,30));
                
    
                g.drawString("スコア"+iHappy,2,40);
                g.drawString("ボスのハート€"+iHeart, 2,80);
                
                g.setColor(Color.RED);
                
                g.fillRect(20, GAMEN_H - 5, iGotItemNum * 50, 15);

        }
public void runGameMainBoss(Graphics g) {

               if (boss == null) {
                   midiseq.stop();
                   midiYomikomi("bossbgm2.mid");
                   midiseq.setTickPosition(0);
                   midiseq.start();//2
                   if(stagenum == 1){
                    boss = new Boss(GAMEN_W - 150, GAMEN_H/2 - 100, biBoss3, "-1,-3,50,-1,3,50,1,-3,50,1,3,50,-10,10,50,0,-20,50,10,10,50");
                   }else if(stagenum == 2){
                    boss = new Boss(GAMEN_W - 150, GAMEN_H/2 - 100, biBoss4, "-1,-3,50,-1,3,50,1,-3,50,1,3,50,-5,5,50,0,-10,50,5,5,50,-3,3,50,0,-6,50,3,3,50");
                   }else if(stagenum == 3){
                    boss = new Boss(GAMEN_W - 150, GAMEN_H/2 - 100, biBoss5, "-1,-3,50,-1,3,50,1,-3,50,1,3,50,-15,0,50,15,0,50,0,-5,50,-15,0,50,15,0,50,0,10,50,-15,0,50,15,0,50,0,-5,50");
                   }else if(stagenum == 4){
                    boss = new Boss(GAMEN_W - 150, GAMEN_H/2 - 100, biBoss2, "-1,-3,50,-1,3,50,1,-3,50,1,3,50,-10,10,50,0,-20,50,10,10,50,-10,0,50,10,0,50,-10,0,50,10,0,50,-10,-10,50,0,20,50,0,-20,50,10,10,50");
                   }else if(stagenum == 5){
                    boss = new Boss(GAMEN_W - 150, GAMEN_H/2 - 100, biBoss6, "-1,-3,50,-1,3,50,1,-3,50,1,3,50,-15,2,50,15,-2,50,0,-5,50,-15,2,50,15,-2,50,0,10,50,-15,2,50,15,-2,50,0,-5,50");
                   }else{
                    boss = new Boss(GAMEN_W - 150, GAMEN_H/2 - 100, biBoss7, "-1,-3,50,-1,3,50,1,-3,50,1,3,50,-10,10,50,0,-20,50,10,10,50,-10,0,50,10,0,50,-10,0,50,10,0,50,-10,-10,50,0,20,50,0,-20,50,10,10,50,-1,-3,50,-1,3,50,1,-3,50,1,3,50,-15,0,50,15,0,50,0,-5,50,-15,0,50,15,0,50,0,10,50,-15,0,50,15,0,50,0,-5,50,-1,-3,50,-1,3,50,1,-3,50,1,3,50,-10,10,50,0,-20,50,10,10,50");        
                   }
                }
                
                boss.draw(g,this);
               

                if (Math.random()*tekitamarate<2){
tekitamas.add(new TekiTama(boss.chara_x-8, boss.chara_y+24,jiki.chara_x, jiki.chara_y, charaimage1));
}
                Iterator it3 = tekitamas.iterator();
                        while(it3.hasNext()==true){
TekiTama tt = (TekiTama)it3.next();
if(tt.isAtari(jiki)){
                            
                            iHappy += 1;
                            iHeart += 1;
                            seClip5.stop();
seClip5.setFramePosition(0);
                                seClip5.start();
                              
                         
}
}
                it3 = tekitamas.iterator();
while(it3.hasNext()==true){
TekiTama tm = (TekiTama)it3.next();
tm.draw(g,this);
if(tm.isSotoNiDeta()==true) it3.remove();
}
                
                
                Iterator it2 = jikitamas.iterator();
                while(it2.hasNext()==true){
                        JikiTama jt = (JikiTama)it2.next();
                        if(boss.isAtari(jt)==true) {
                                bakuhatsus.add(new Bakuhatsu(jt.chara_x, jt.chara_y, charaimage1));

                                it2.remove();
                                iBossTairyoku--;
                                score = score+10;
                                if(score%1000 == 0)zanki++;

                                seClip1.stop();
                                seClip1.setFramePosition(0);
                                seClip1.start();
                                break;
                        }
                }
                
                if(boss.isAtari(jiki)){
                    
                    if(barrierflag){
                                barrierup -=0;                                 
                                if(barrierup <= 0){
                                barrierflag = false;

                                }
                    }                                
                    if(!barrierflag){
                        iGotItemNum -= 0;                        
                        if(iGotItemNum < 0){
                               
                            }
                        }
                }
                if(iHeart > 30){
                    boss = null;
                    midiseq.stop();
                      
                    midiYomikomi("bgm1.mid");
                    midiseq.setTickPosition(0);
                    gamemainstate = GM_ZAKO;
                    iHeart = 0;
                    goStageClear();
                    }
        }
public void runGameMainZako(Graphics g) {
                
                if(stagenum == 0 || stagenum == 1){
                    
                    ArrayList al = tikeimap.getNewTeki(charaimage2);
                    if (al.size()>0) tekis.addAll(al);
                }else if(stagenum == 2 || stagenum == 3){
                    
                    ArrayList al = tikeimap.getNewTeki(charaimage1);
                    if (al.size()>0) tekis.addAll(al);
                }
                else{
                    
                    ArrayList al = tikeimap.getNewTeki(charaimage3);
                    if (al.size()>0) tekis.addAll(al);
                }

Iterator it = tekis.iterator();
while(it.hasNext()==true){
Teki tk = (Teki)it.next();
if (Math.random()*tekitamarate<0.0){
                                tekitamas.add(new TekiTama(tk.chara_x-8, tk.chara_y+24,
jiki.chara_x, jiki.chara_y, charaimage1));
seClip2.stop();
seClip2.setFramePosition(0);
seClip2.start();
}
}
                Iterator it4 = kowares.iterator();
while(it4.hasNext()==true){
Koware ko = (Koware)it4.next();

}

tikeimap.draw(g,this);
it = tekis.iterator();
while(it.hasNext()==true){
Teki tk = (Teki)it.next();
tk.draw(g,this);
if(tk.isSotoNiDeta()==true) it.remove();
}
it = tekitamas.iterator();
while(it.hasNext()==true){
TekiTama tm = (TekiTama)it.next();
tm.draw(g,this);
if(tm.isSotoNiDeta()==true) it.remove();
}
it = tekis.iterator();
while(it.hasNext()==true){
Teki tk = (Teki)it.next();
Iterator it2 = jikitamas.iterator();
while(it2.hasNext()==true){
JikiTama jt = (JikiTama)it2.next();
if(tk.isAtari(jt)==true) {
                                   
                                    bakuhatsus.add(new Bakuhatsu(tk.chara_x, tk.chara_y, charaimage2));
                                    
                                        bakuhatsus.add(new Bakuhatsu(tk.chara_x, tk.chara_y, charaimage1));
                                    
                                            if (Math.random()*10<6){
                                                items.add(new Item(tk.chara_x, tk.chara_y, biItem));
                                            }
it.remove();
it2.remove();
score = score+10;
                                        if(score%1000 == 0)zanki++;
                                       
seClip1.stop();
seClip1.setFramePosition(0);
seClip1.start();
break;
}
}
}

it = items.iterator();
while(it.hasNext()==true){
Item tk = (Item)it.next();
if(tk.isAtari(jiki)){
                                
                                it.remove();
                                
                                iGotItemNum++;
                                if(iGotItemNum > 15)iGotItemNum = 15;
                                score = score+10;                
                                if(score%1000 == 0)zanki++;

seClip4.stop();
seClip4.setFramePosition(0);
                                seClip4.start();

}
}
                
it = tekis.iterator();
while(it.hasNext()==true){
Teki tk = (Teki)it.next();
                        
                        tk.isAtari(jiki);
if(tk.isAtari(jiki)){
                            it.remove();
                            
                            
                            iGotItemNum++;
                            if(iGotItemNum > 15)iGotItemNum = 15;
                            seClip5.stop();//
                            seClip5.setFramePosition(0);
                            seClip5.start();
                            iHappy += 1;
                            if(barrierflag){
                                barrierup -=0;                                 
                                if(barrierup <= 0){
                                barrierflag = false;

                                }
                            }
                                if(!barrierflag){
                                iGotItemNum -= 0;
                                if(iGotItemNum < 0)
break;
                                }
                            
}
}
it = tekitamas.iterator();
while(it.hasNext()==true){
TekiTama tt = (TekiTama)it.next();
if(tt.isAtari(jiki)){
                            
                             if(barrierflag){//2019114hazusu
                                barrierup -=1;
                                 if(barrierup <= 0){
                                barrierflag = false;
                                
                                }
                            }
                                if(!barrierflag){
                                iGotItemNum -= 1;
                                if(iGotItemNum < 0)
break;
        }
                          
                    }
}


if(tikeimap.isMapEnd()==true) gamemainstate = GM_BOSS;

   
}

public void runGameOver(Graphics g) {
            if(zanki<0){                
                stagenum = 1;
                
                zanki = 6;
            }
g.setColor(Color.RED);
g.setFont(new Font("SansSerif",Font.BOLD,80));
drawStringCenter("ゲームオーバー",220,g);
g.setFont(new Font("SansSerif",Font.PLAIN,24));
drawStringCenter("④ のボタンをおしてください,300,g);
}

}



/*アルゴリズム*/

main appletクラス アルゴリズムの整理
importの宣言
GameHoneGumiAppletクラスの継承
 画面は横624ピクセル
 画面は縦480ピクセル
画像の追加
変数の宣言
init関数
 画面の大きさ・色の定義
 敵キャラクター、背景などの読み込み
 サウンドの読み込み
 goStartGamen関数の開始
initStageStart関数
 自機、弾、敵、敵の弾などの生成
 キーイベントをfalseにする
 地形マップの生成(別ファイルに地形データがある)
 もしgamemainstateがGM_ZAKOならBGMを最初から開始する
initStageClear関数
 ステージ数、スコアなどの定義
 iBackgroundXが0ならBGMを停止する
 ボスの体力の定義
initGameOver関数
 ゲームオーバーになったら0にする変数を定義
keyPressedGameMain関数
 キーイベント処理
keyReleasedGameMain関数
 キーイベント処理
runStartGamen関数
 初期画面の描画
runStageClear
 ステージクリア画面の描画
runGameMain関数
 画面を再生成する
 背景を2ピクセルずつ動かす
 1600ピクセルになったらiBackgroundを0にする
 ステージによる背景の定義
 tikeimap.isAtari 自機が背景の壁に当たっているかチェックする
  当たっていれば押されたと判定
  自機が画面の外に押されたらgoGameOver(ゲームオーバー)
 もし、spacekeyがtrueで、rensyaが0なら弾を生成する
 iGotItemNumの数値によって発射する弾の数を増やす、ビットやバリアーを増やす
 rensyaを30にする(弾を発射する頻度)
 rensyaが0より大きければ-1する
 自機の描画
 Iterator 自機の弾の生成、画面の外に出たら消す
 Iterator アイテムの生成、画面の外に出たら消す
 Iterator 爆発画面の生成、画面の外に出たら消す
 もし、gamemainstateがGM_ZAKOなら
  runGameMainZakoを開始
 そうでなければ、
  runGameMainBossを開始
 画面内の文字の描画
 public void runGameMainBoss関数
  bossがnullならば
  ボスのBGMを流す
  ステージによってそれぞれのボスを描画する
  ボスの動きの定義
  ボスの描画
  ボスの弾の生成
  Iterator 敵の弾の生成
   もし、ボスの弾と当たっていたら得点を増やす、サウンドを鳴らす
   ボスの弾が外に出たら消す
   自機の弾とボスが当たったら爆発を描画
   ボスの体力の処理
   ボスと当たったらバリアーの減少
   ハートの数が30以上ならば
    bossをnullにする
    BGMを止める
    gamemainstateをGM_ZAKOにする
    goStageClear関数の開始
  public void runGameMainZako関数の開始
   tikeimap(地形マップ)から敵データを読み込む
   敵の弾の生成
   BGMを流す
   壊れる壁の生成
   tikeimap(地形マップ)の描画
   敵の描画
   画面の外に出たら消す
   敵の弾の描画
   画面の外に出たら消す
   自機の弾と敵が当たったら爆発を生成
   敵を消去
   サウンドを流す
   アイテムの生成
   自機と当たったら消す
   スコアを増やし、1000点ごとにzankiを増やす
   敵と自機が当たったらバリアーの減少の処理
   tikeimap.isMapEndがtrueならばgamemainstateをGM_BOSSにする
public void runGameOver関数
 ゲームオーバー画面の描画



/*ゲーム骨組みソース*/

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package yokoshoot218.jp.ohtsuki.minigame;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JApplet;
import javax.swing.JFrame;


public abstract class GameHoneGumiApplet extends JApplet implements Runnable  {
public static final int GS_STARTGAMEN = 0;
public static final int GS_STAGESTART = 1;
public static final int GS_STAGECLEAR = 2;
public static final int GS_GAMEOVER = 3;
public static final int GS_GAMEMAIN = 4;
        
        public static final int GM_ZAKO = 0;
        public static final int GM_BOSS = 1;

private int gamestate;
        protected int gamemainstate;
//public JFrame frame1;
//public BufferStrategy bstrategy;
public Sequencer midiseq = null;
        public Sequencer midiseq2 = null;
private int waittimer;
public void init(int w,int h, String title){
//frame1 = new JFrame(title);
//frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBackground(Color.WHITE);
//setResizable(false);
setVisible(true);
Insets insets = getInsets();
setSize(w + insets.left + insets.right,
h + insets.top + insets.bottom);
//frame1.setLocationRelativeTo(null);
//frame1.createBufferStrategy(2);
//bstrategy = frame1.getBufferStrategy();
//frame1.setIgnoreRepaint(true);
                   requestFocusInWindow(); 
                
addKeyListener(new GameHoneGumiApplet.MyKeyAdapter());
                
                
                Thread myThread = new Thread(this);
                myThread.start();
}
public void goStartGamen(){
gamestate = GS_STARTGAMEN;
                gamemainstate = GM_ZAKO;
//Timer t = new Timer();
//t.schedule(new GameHoneGumiApplet.MyTimerTask(), 10, 30);
}
public void goStageStart(){
initStageStart();
waittimer = 100;
gamestate = GS_STAGESTART;
}
public void goStageClear(){
initStageClear();
waittimer = 100;
gamestate = GS_STAGECLEAR;
}
public void goGameMain(){
gamestate = GS_GAMEMAIN;
}
public void goGameOver(){
initGameOver();
gamestate = GS_GAMEOVER;
}
public abstract void initStageStart();
public abstract void initStageClear();
public abstract void initGameOver();
public abstract void keyPressedGameMain(int keycode);
public abstract void keyReleasedGameMain(int keycode);
public void drawStringCenter(String str, int y, Graphics g) {
int fw = getWidth() / 2;
FontMetrics fm = g.getFontMetrics();
int strw = fm.stringWidth(str) /2 ;
g.drawString(str,fw-strw,y);
}
public Clip otoYomikomi(String fname) {
Clip clip = null;
try {
AudioInputStream aistream = AudioSystem.
getAudioInputStream(getClass().getResource(fname));
DataLine.Info info = new DataLine.Info(Clip.class, aistream.getFormat());
clip = (Clip)AudioSystem.getLine(info);
clip.open(aistream);
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (LineUnavailableException e) {
e.printStackTrace();
}
return clip;
}
  public void midiYomikomi(String fname) {
if (midiseq == null){
try {
midiseq = MidiSystem.getSequencer();
midiseq.open();
} catch (MidiUnavailableException e1) {
e1.printStackTrace();
}
}
try {
Sequence seq = MidiSystem.getSequence(getClass().getResource(fname));
midiseq.setSequence(seq);
} catch (InvalidMidiDataException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public abstract void runStartGamen(Graphics g);
public abstract void runStageStart(Graphics g);
public abstract void runStageClear(Graphics g);
public abstract void runGameMain(Graphics g);
public abstract void runGameOver(Graphics g);

private class MyKeyAdapter extends KeyAdapter{
public void keyPressed(KeyEvent ev) {
if (gamestate == GS_GAMEMAIN){
keyPressedGameMain(ev.getKeyCode());
}
}
public void keyReleased(KeyEvent ev) {
int keycode = ev.getKeyCode();
switch(gamestate){
case GS_GAMEMAIN:
keyReleasedGameMain(keycode);
break;
case GS_STARTGAMEN:
if (keycode == KeyEvent.VK_P) goStageStart();
break;
case GS_GAMEOVER:
if (keycode == KeyEvent.VK_R) goStartGamen(); }
}
}
        
        public void run() {
            try {
                while(true){
                    repaint();
                    Thread.sleep(30);
                }
            }catch(Exception e){}
        }
        
        public void paint(Graphics g) {
            
            Dimension size = getSize();
            
            Image back = createImage(size.width, size.height);
            
            Graphics buffer = back.getGraphics();
Insets insets = getInsets();
buffer.translate(insets.left, insets.top);
switch(gamestate){
case GS_STARTGAMEN:
runStartGamen(buffer);
break;
case GS_STAGESTART:
runStageStart(buffer);
waittimer = waittimer-1;
if (waittimer < 0) goGameMain();
break;
case GS_STAGECLEAR:
runStageClear(buffer);
waittimer = waittimer-1;
if (waittimer < 0) goStageStart();
break;
case GS_GAMEMAIN:
runGameMain(buffer);
break;
case GS_GAMEOVER:
runGameOver(buffer);
break;
}
                                g.drawImage(back, 0, 0, null);
g.dispose();
}

}


/*アルゴリズム整理*/

importの宣言
public abstract class GameHoneGumiApplet extends JApplet implements Runnable関数
 ステージ画面の定義(0~4)
 ゲームモードの定義(GM_ZAKO GM_BOSS)
  midiseq(MIDI音源)をnullにする
 waittimerの宣言
public void init関数
 画面の設定
 キーリスナーの追加
 スレッドの生成
 スレッドの開始
public void goStartGamen関数
 スタート画面の開始
public void goStageStart
 initStageStart関数
public void goStageClear
  initStageClear関数
 waittimerを100にする

public void goGameMain

public void goGameOver関数
 initGameOver関数

public abstract void initStageStart();
public abstract void initStageClear();
public abstract void initGameOver();
public abstract void keyPressedGameMain(int keycode);
public abstract void keyReleasedGameMain(int keycode);

public void drawStringCenter関数
 文字の描画の設定

public Clip otoYomikomi関数
 Clipをnullにする
 音響ファイル(効果音)の読み込み

public voidmidiYomikomi関数
 midi音源の読み込み(BGM)

public abstract void runStartGamen(Graphics g);
public abstract void runStageStart(Graphics g);
public abstract void runStageClear(Graphics g);
public abstract void runGameMain(Graphics g);
public abstract void runGameOver(Graphics g);

private class MyKeyAdapter extends KeyAdapter関数
 キーイベント
 gamestateによってゲームの画面を変える

public void run関数
 スレッドを30ミリ秒ごとにsleepして再描画

public void paint関数
 画面の描画の設定
 gamestateによってステージを変える



自作ドラクエ1的ゲームを作るために、参考プログラムで書かれたゲームを貼り付ける(プレイできます)/血圧を下げる方法、たまねぎ茶/自己主張が強い人に一方的に言われる、悔しい経験/英語の5文型を復習する

↑↑↑ 実際にプレイできます。 ↑↑↑
開始ボタン → スペースキー
上下左右で移動、エンターキーでコマンド



ゲームソース元:https://www.programmingmat.jp/


上のゲームは上記のリンクの開発者様が制作しました。
(オリジナルではありません。)
開始ボタンを押す。
画面をクリックする。スペースキーを押すとゲームが始まります。
上下左右 キー と エンターキーでゲームが進みます。



このゲームの仕組みを徹底的に解析して、自分なりのRPGを作ろうと思う。
多分、これだけ完成度が高いRPGがあれば、本物と同じクオリティの初代ドラクエ1までなら、3ヶ月あればできると思う。






よっしゃ!!!、いくぞ!!!
ドラクエ1を、このプログラムをもとにして自分で作るぞ!!!


ファイナルファンタジーでもいいけどww





・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・






【血圧を下げる方法】血圧を1か月で劇的に下げる食べ物 高血圧は薬に頼らない 朝の食事で治る!How to lower blood pressure



血圧を下げるレシピ
・納豆
・アマニ油/エゴマ油
・野菜ジュース
・たまねぎ茶

納豆はきらいなので無理ですが、それ以外は実践してみようと思います。




もうすぐ職場の健康診断。

それまでに、
腹筋、腕立て伏せ、スクワット、毎日、100回、サイタマみたいにやる。
酒を飲まない。
黒酢、たまねぎ茶、アマニ油・エゴマ油を飲む。
極力塩分の多いものを食べない。





・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・





英語指導者となるための英語基礎おさらい


英語5文型のおさらい

第1文型で用いられる動詞は全て自動詞です。自動詞とは、目的語を必要としない動詞のことで、第1文型(SV)と第2文型(SVC)で使われます。

自動詞の対になるものとして他動詞があります。他動詞とは、後ろに目的語を必要とする動詞のことで、第3文型(SVO)、第4文型(SVOO)、第5文型(SVOC)で使われます。

引用元:https://manabitimes.jp/english/2236


「主語+動詞」だけでは意味が不完全な場合に補語を付け足す文が第2文型です。意味上、「主語=補語」の関係になります。動詞は「状態」、「状態の継続」、「状態の変化」、「漠然とした印象」、「感覚」のいずれかの意味を表わします。

第2文型(SVC)の形をとる動詞
①状態 「~である」
②状態の継続 「~のままである」
③状態の変化 「~になる」
④漠然とした印象 「~のようである」「~に思われる」
⑤感覚 「~と感じる」

第3文型(SVO)をとる動詞の中には目的語を2つ続けることのできる動詞があります。それが第4文型(SVOO)の動詞です。第4文型は「~に~をする」という形で目的語が2つ続きます。O1(~に)は間接目的語、O2(~を)は直接目的語と言います。第4文型の文を第3文型の文に変える場合、toが続く場合とforが続く場合があります。


第3文型「S+V+O+for A」に書き換え可能な第4文型の動詞
get AにBを与える
leave AにBを残す
buy AにBを買う
call AにBを呼ぶ
make AにBを作る
do AにBをする
第3文型「S+V+O+to A」に書き換え可能な第4文型の動詞
give AにBを与える
show AにBを見せる
hand AにBを手渡す
lend AにBを貸す
sell AにBを売る
send AにBを送る
teach AにBを教える
throw AにBを投げる
write AにBを書く
直接目的語が「疑問詞+to不定詞」や、that, why, whether, ifなどの名詞節の場合
tell Aに~ということを言う
assure Aに~ということを保証する
remind Aに~ということを思い出させる
pay AにBを支払う
第3文型に書き換えることができない第4文型の動詞
cost AにB(お金・費用・労力など)がかかる
envy AのBをうらやむ
save AにBを省かせる



英語の基本文は、主語(S)・動詞(V)・目的語(O)・補語(C)・修飾語句(M)から成り立ちますが、動詞がどのように目的語と補語をとるかで5つの文型に分類されます。 動詞の後に目的語と補語がくる型が第5文型です。第5文型の補語は目的語について説明するので「目的格補語」と呼ばれます。

第5文型の形をとる12の必須動詞
call OをCと呼ぶ
name OをCと名づける
elect 投票でOをCに選ぶ
appoint OをCに任命する
find OがCだとわかる(気づく)
make OをCにする
get OをCの状態にする
set OをCの状態にする
keep OをCの状態のままにする
leave OをCの状態のままにする
drive OをCの状態にさせる、追いやる
paint OをC色に塗る

引用元:https://www.sanctio.net/svc/





・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・





昨日は研究部の会議。
T辺さん、腹立つなあ、模造紙の書きかたが整理されてないって説教してくるし、
頭固いんだよ。
っていうか、融通きかなさそうだよね。
頑固一点張りっていうか、決め付け系っていうか、

それから、転校してきた、グレード4のやんちゃ娘がそこに在籍してるんで、許可を取って手紙を書いてあげてたんだけど、それをみてまた、T辺が、

「非常識過ぎる!!!」
「もう、みんな閉めて帰る時間なのに!」
「なにやってるの!?!?!」
「こんなところで自分の仕事をしているの!ありえない!!!!」

って一方的に攻めて来るんだ。

それをみた、そこで働いてる某氏、50代おばちゃんTがすかさずフォローに入ってきたら、
T辺氏は自分が勘違いしていることに気付いて、私に土下座せんばかりの勢いで謝ってきたけど。
そうでもなかったら、私も怒り心頭だったからね。



自己主張が強い人って、どうなんだろうね。
なんでも言ったもの勝ちって世の中は嫌いです。


ロシアは敗北するか/Javascriptの横スクロールゲームをブログに貼り付けてみた/鬱の特効薬、それは、「日焼けするぐらい」日光に当たる、ミンティアドライハードは気分改善に最適/中国語の文章を毎日一句「暗唱」する習慣を身につけて本気で中国語マスターになる/ザンビア人の英語力の高さについて

ゲームができます。IEだと遅いかもしれません。反応しなかったら画面をクリックしてください。上下左右キーで移動、スペースでジャンプします。 このゲームは自作ではなく、拾いものです。 ソース元:http://d.hatena.ne.jp/nakamura001/20100309/1268100948





職場でパソコンで子どもに絵を描かせて、それをゲームの中に入れようと思っている。
その大元になるゲームを今、準備している。
それが上のゲーム。
ゲームのソースは、別の人がプログラムしたもの。私がプログラムしたものではありません。
それを解析して、自分なりに改造してみようと思います。魔改造します。

ちなみに、ゲームは著作権フリーです。






・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・








ロシアは敗北するか~開戦から100日のウクライナ戦争を徹底解説【豊島晋作のテレ東ワールドポリティクス】(2022年6月2日)






【ライブ】ウクライナ侵攻 最新情報:ロシア軍、ウクライナ東部完全制圧へ…攻勢かけるセベロドネツクとは?/EUが追加制裁 ロシア産石油 部分輸入禁止に







ロシアがデフォルトした。早くウクライナから撤退して欲しい。
しないんだろうけど、
もう、いやだ。こんな戦争、21世紀にありえない。






・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・








人類史最悪のバブル崩壊







・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・





フラッシュ ダンス






スチュワーデス物語「What a feeling」1983 麻倉未稀




スチュワーデス物語の背景にある飛行機が、御巣鷹山に落ちた日航123便の飛行機そのものらしいです。日本人にとっては特別な機体です。





・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・





mintia.jpg

最近ミンティアの黒にはまっている。
以前、32~33歳の頃、毎日食べていた。

ここ数ヶ月の鬱の状態を脱するために、いろいろ薬とかサプリメントを飲んできたんだけど、
ある意味、このミンティアの黒(ドライハード)はテンションを上げるうえでよく効く。

レクサプロを辞めた今、私にとっては、セントジョーンズワート、カフェイン、ビタミンB類、そして、このミンティアの黒がテンションを上げる薬になっている。





最近気づいた鬱を治す方法

運動をする。特に、筋トレは最強。
日光を浴びる。日焼けするほど浴びると鬱が治る。
酒を減らす。
ベタベタするほど親密な人間を1人つくる。
好きなコンテンツ(映画、アニメ、ゲーム)を見つける。
自分に合った薬やサプリメントを見つける。





・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・






dmmenglishfav2.png



DMM英会話で新しいお気に入りの講師をまた見つけた。


ザンビア人の女性講師だ。



ザンビア人、英語力高すぎ!!!!!



日本人からしたら、ノンネイティブの英語講師といったらフィリピン人だと思う人が多いかもしれないが、ザンビア人の英語力はおそらく、平均的に言ったら、フィリピン人のワンランク、ツーランク上だと思う。

それぐらい、ザンビア人の英語力が高い。

これからも、ザンビア人の講師の開拓をしていこう。
もちろん、女性講師だけじゃなく、男性講師も。






・・・・・・・・・・・・・・・・・・・・・・・




中国語については、最近、勉強の方法をちょっと変えてみた。

毎日、一日、一句、CCレッスンのレッスンのときに、「暗唱」をすることにした。
「暗唱」の学習効果は半端ない。
暗唱半端ないって!





・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・






この年齢になって、生涯の貯蓄額がどうしても気になってきた。
ボーナスをこれから20年(使わないで全額)貯めたとしても2000万円。
とは言っても、ボーナスを使わないわけにはいかないので、2000万円なんて貯まらない。

さて、どうしたものか。


金持ちの女性と結婚するか。


2000万円あっても、切り詰めないと生きていけないよな。
年間200万円で生活したとしても10年で終わっちゃうよ。
年金とか、貯金とかでいくらカバーできるか考えなきゃいけない。






合法的な副業と、退職後の収入源を模索している/日経VIは年間で4回ぐらい高いときがある、外国人投資家の売買状況/Javascriptのテトリスのソースコードを読み込んでいた

tousibumonnbetubaibaijoukyou.png

投資部門別売買状況を見ると、外国人投資家の売買状況が日経平均に大きく影響を与えていることが分かる。

日経平均との連動性が低い銘柄、つまり、ベータ値の低い銘柄を選ぶということも下落に巻き込まれない方法だ。


nikkeivi2021.png

日経VI
ボラティリティが高いゾーン、24~27になることが年3、4回ある。
そして、一度高いゾーンになると3日ぐらいその状態が続く、
しかし、だいたい、3日ボラが高い状態を終えると、下がることが多い。




マザーズ指数が地獄のような大暴落へ。ここで投資をするべき!世界的にグロース株売られる。



マザーズが大幅に下げている。
週明け火曜日からいきなりインするのはやめた方がいいかもしれません。

まあ、プロは「恐怖で買う」のだそうですが。




・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・





プログラミング講座 第13回【テトリスを作る(1)/JavaScript】Akichon/あきちょん




tetris2.png

参照引用元:http://kmaebashi.com/programmer/tetris/index.html



久しぶりに、ガチのソースコードを読みたくなったので、長いテトリスのコードを解析してみます。




ソースコードは上記から引用しています。

テトリス ソースコード開始


class Tetris {
    constructor() {
        this.stageWidth = 10;//ステージのマス目の数 横
        this.stageHeight = 20;//ステージのマス目の数 縦

        this.stageCanvas = document.getElementById("stage");//画面読み込み
        this.nextCanvas = document.getElementById("next");//裏バッファー

        let cellWidth = this.stageCanvas.width / this.stageWidth;//キャンバスの長さを縦横で割る
        let cellHeight = this.stageCanvas.height / this.stageHeight;//同じ

        this.cellSize = cellWidth < cellHeight ? cellWidth : cellHeight;//横が縦より小さいか、trueなら、横がセルサイズ、falseなら、縦がセルサイズ

        this.stageLeftPadding = (this.stageCanvas.width - this.cellSize * this.stageWidth) / 2;
//キャンバスの余白をセルとキャンバスから計算
        this.stageTopPadding = (this.stageCanvas.height - this.cellSize * this.stageHeight) / 2;

        this.blocks = this.createBlocks();//ブロックオブジェクト生成
        this.deletedLines = 0;

        window.onkeydown = (e) => {//キー入力 37とかはキーボードのボタンと対応
            if (e.keyCode === 37) {
                this.moveLeft();
            } else if (e.keyCode === 38) {
                this.rotate();
            } else if (e.keyCode === 39) {
                this.moveRight();
            } else if (e.keyCode === 40) {
                this.fall();
            }
        }

        document.getElementById("tetris-move-left-button").onmousedown = (e) => {
            this.moveLeft();
        }//WEBボタンでキー操作をする
        document.getElementById("tetris-rotate-button").onmousedown = (e) => {
            this.rotate();
        }
        document.getElementById("tetris-move-right-button").onmousedown = (e) => {
            this.moveRight();
        }
        document.getElementById("tetris-fall-button").onmousedown = (e) => {
            this.fall();
        }
    }

    createBlocks() {
        let blocks = [
            {
                shape: [[[-1, 0], [0, 0], [1, 0], [2, 0]], 
                        [[0, -1], [0, 0], [0, 1], [0, 2]],       
                        [[-1, 0], [0, 0], [1, 0], [2, 0]],       
                        [[0, -1], [0, 0], [0, 1], [0, 2]]],      
//このブロックの表し方がよく分からない
                color: "rgb(0, 255, 255)",
                highlight: "rgb(255, 255, 255)",
                shadow: "rgb(0, 128, 128)"
            },
            {
                shape: [[[0, 0], [1, 0], [0, 1], [1, 1]],
                        [[0, 0], [1, 0], [0, 1], [1, 1]],
                        [[0, 0], [1, 0], [0, 1], [1, 1]],
                        [[0, 0], [1, 0], [0, 1], [1, 1]]],
                color: "rgb(255, 255, 0)",
                highlight: "rgb(255, 255, 255)",
                shadow: "rgb(128, 128, 0)"
            },
            {
                shape: [[[0, 0], [1, 0], [-1, 1], [0, 1]],
                        [[-1, -1], [-1, 0], [0, 0], [0, 1]],
                        [[0, 0], [1, 0], [-1, 1], [0, 1]],
                        [[-1, -1], [-1, 0], [0, 0], [0, 1]]],
                color: "rgb(0, 255, 0)",
                highlight: "rgb(255, 255, 255)",
                shadow: "rgb(0, 128, 0)"
            },
            {
                shape: [[[-1, 0], [0, 0], [0, 1], [1, 1]],
                        [[0, -1], [-1, 0], [0, 0], [-1, 1]],
                        [[-1, 0], [0, 0], [0, 1], [1, 1]],
                        [[0, -1], [-1, 0], [0, 0], [-1, 1]]],
                color: "rgb(255, 0, 0)",
                highlight: "rgb(255, 255, 255)",
                shadow: "rgb(128, 0, 0)"
            },
            {
                shape: [[[-1, -1], [-1, 0], [0, 0], [1, 0]],
                        [[0, -1], [1, -1], [0, 0], [0, 1]],
                        [[-1, 0], [0, 0], [1, 0], [1, 1]],
                        [[0, -1], [0, 0], [-1, 1], [0, 1]]],
                color: "rgb(0, 0, 255)",
                highlight: "rgb(255, 255, 255)",
                shadow: "rgb(0, 0, 128)"
            },
            {
                shape: [[[1, -1], [-1, 0], [0, 0], [1, 0]],
                        [[0, -1], [0, 0], [0, 1], [1, 1]],
                        [[-1, 0], [0, 0], [1, 0], [-1, 1]],
                        [[-1, -1], [0, -1], [0, 0], [0, 1]]],
                color: "rgb(255, 165, 0)",
                highlight: "rgb(255, 255, 255)",
                shadow: "rgb(128, 82, 0)"
            },
            {
                shape: [[[0, -1], [-1, 0], [0, 0], [1, 0]],
                        [[0, -1], [0, 0], [1, 0], [0, 1]],
                        [[-1, 0], [0, 0], [1, 0], [0, 1]],
                        [[0, -1], [-1, 0], [0, 0], [0, 1]]],
                color: "rgb(255, 0, 255)",
                highlight: "rgb(255, 255, 255)",
                shadow: "rgb(128, 0, 128)"
            }
        ];
        return blocks;
    }

    drawBlock(x, y, type, angle, canvas) {
        let context = canvas.getContext("2d");
        let block = this.blocks[type];//ブロックのタイプがリスト内の個数で定義
        for (let i = 0; i < block.shape[angle].length; i++) {
            this.drawCell(context,
                     x + (block.shape[angle][i][0] * this.cellSize),
                     y + (block.shape[angle][i][1] * this.cellSize),
                     this.cellSize,
                     type);
        }
    }//ブロックの描画位置を定義

    drawCell(context, cellX, cellY, cellSize, type) {
        let block = this.blocks[type];
        let adjustedX = cellX + 0.5;
        let adjustedY = cellY + 0.5;
        let adjustedSize = cellSize - 1;
        context.fillStyle = block.color;
        context.fillRect(adjustedX, adjustedY, adjustedSize, adjustedSize);
        context.strokeStyle = block.highlight;
        context.beginPath();
        context.moveTo(adjustedX, adjustedY + adjustedSize);
        context.lineTo(adjustedX, adjustedY);
        context.lineTo(adjustedX + adjustedSize, adjustedY);
        context.stroke();
        context.strokeStyle = block.shadow;
        context.beginPath();
        context.moveTo(adjustedX, adjustedY + adjustedSize);
        context.lineTo(adjustedX + adjustedSize, adjustedY + adjustedSize);
        context.lineTo(adjustedX + adjustedSize, adjustedY);
        context.stroke();
    }

    startGame() {
        let virtualStage = new Array(this.stageWidth);
        for (let i = 0; i < this.stageWidth; i++) {
            virtualStage[i] = new Array(this.stageHeight).fill(null);
        }
        this.virtualStage = virtualStage;
        this.currentBlock = null;
        this.nextBlock = this.getRandomBlock();
        this.mainLoop();
    }//ゲーム画面を表示

    mainLoop() {//ブロックが無ければ生成
        if (this.currentBlock == null) {
            if (!this.createNewBlock()) {
                return;
            }
        } else {
            this.fallBlock();//ブロックがあれば落とす
        }
        this.drawStage();
        if (this.currentBlock != null) {
            this.drawBlock(this.stageLeftPadding + this.blockX * this.cellSize,
                this.stageTopPadding + this.blockY * this.cellSize,
                this.currentBlock, this.blockAngle, this.stageCanvas);
        }
        setTimeout(this.mainLoop.bind(this), 500);
    }

    createNewBlock() {
        this.currentBlock = this.nextBlock;
        this.nextBlock = this.getRandomBlock();
        this.blockX = Math.floor(this.stageWidth / 2 - 2);
        this.blockY = 0;
        this.blockAngle = 0;
        this.drawNextBlock();
        if (!this.checkBlockMove(this.blockX, this.blockY, this.currentBlock, this.blockAngle)) {
            let messageElem = document.getElementById("message");
            messageElem.innerText = "GAME OVER";
            return false;
        }
        return true;
    }

    drawNextBlock() {
        this.clear(this.nextCanvas);
        this.drawBlock(this.cellSize * 2, this.cellSize, this.nextBlock,
            0, this.nextCanvas);
    }

    getRandomBlock() {
        return  Math.floor(Math.random() * 7);
    }

    fallBlock() {
        if (this.checkBlockMove(this.blockX, this.blockY + 1, this.currentBlock, this.blockAngle)) {
            this.blockY++;
        } else {
            this.fixBlock(this.blockX, this.blockY, this.currentBlock, this.blockAngle);
            this.currentBlock = null;
        }
    }

    checkBlockMove(x, y, type, angle) {
        for (let i = 0; i < this.blocks[type].shape[angle].length; i++) {
            let cellX = x + this.blocks[type].shape[angle][i][0];
            let cellY = y + this.blocks[type].shape[angle][i][1];
            if (cellX < 0 || cellX > this.stageWidth - 1) {
                return false;
            }
            if (cellY > this.stageHeight - 1) {
                return false;
            }
            if (this.virtualStage[cellX][cellY] != null) {
                return false;
            }
        }
        return true;
    }

    fixBlock(x, y, type, angle) {
        for (let i = 0; i < this.blocks[type].shape[angle].length; i++) {
            let cellX = x + this.blocks[type].shape[angle][i][0];
            let cellY = y + this.blocks[type].shape[angle][i][1];
            if (cellY >= 0) {
                this.virtualStage[cellX][cellY] = type;
            }
        }
        for (let y = this.stageHeight - 1; y >= 0; ) {
            let filled = true;
            for (let x = 0; x < this.stageWidth; x++) {
                if (this.virtualStage[x][y] == null) {
                    filled = false;
                    break;
                }
            }
            if (filled) {
                for (let y2 = y; y2 > 0; y2--) {
                    for (let x = 0; x < this.stageWidth; x++) {
                        this.virtualStage[x][y2] = this.virtualStage[x][y2 - 1];
                    }
                }
                for (let x = 0; x < this.stageWidth; x++) {
                    this.virtualStage[x][0] = null;
                }
            let linesElem = document.getElementById("lines");
                this.deletedLines++;
                linesElem.innerText = "" + this.deletedLines;
            } else {
                y--;
            }
        }
    }

    drawStage() {
        this.clear(this.stageCanvas);

        let context = this.stageCanvas.getContext("2d");
        for (let x = 0; x < this.virtualStage.length; x++) {
            for (let y = 0; y < this.virtualStage[x].length; y++) {
                if (this.virtualStage[x][y] != null) {
                    this.drawCell(context,
                        this.stageLeftPadding + (x * this.cellSize),
                        this.stageTopPadding + (y * this.cellSize),
                        this.cellSize,
                        this.virtualStage[x][y]);
                }
            }
        }
    }

    moveLeft() {
        if (this.checkBlockMove(this.blockX - 1, this.blockY, this.currentBlock, this.blockAngle)) {
            this.blockX--;
            this.refreshStage();
        }
    }

    moveRight() {
        if (this.checkBlockMove(this.blockX + 1, this.blockY, this.currentBlock, this.blockAngle)) {
            this.blockX++;
            this.refreshStage();
        }
    }

    rotate() {
        let newAngle;
        if (this.blockAngle < 3) {
            newAngle = this.blockAngle + 1;
        } else {
            newAngle = 0;
        }
        if (this.checkBlockMove(this.blockX, this.blockY, this.currentBlock, newAngle)) {
            this.blockAngle = newAngle;
            this.refreshStage();
        }
    }

    fall() {
        while (this.checkBlockMove(this.blockX, this.blockY + 1, this.currentBlock, this.blockAngle)) {
            this.blockY++;
            this.refreshStage();
        }
    }

    refreshStage() {
      this.clear(this.stageCanvas);
      this.drawStage();
      this.drawBlock(this.stageLeftPadding + this.blockX * this.cellSize,
                this.stageTopPadding + this.blockY * this.cellSize,
                this.currentBlock, this.blockAngle, this.stageCanvas);
    }

    clear(canvas) {
        let context = canvas.getContext("2d");
        context.fillStyle = "rgb(0, 0, 0)";
        context.fillRect(0, 0, canvas.width, canvas.height);
    }
}




・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・




退職後に副収入をなんとかして得る方法、もしくは、在職中でも合法的に副収入を得る方法

老後2000万円問題を目の前にして、残り25年の労働生活で、どう乗り切っていくか。非常に大きな問題だ。



・・・・英語の家庭教師
        文法の知識や発音記号、難単語を再度復習する必要あり

・・・・ピクシブを通して絵を販売する
        絵の総数がまだ少ない、数十枚単位で絵を描く必要あり

・・・・株式投資
        これが副業の王道だと思う。資産減少リスクがあるのが難

・・・・YOUTUBE
        日・英・中などのコンテンツで広告収入を得る
        ・・・・費用対効果に合わない。実際に、映像作るの大変。
        英語サイトを広告塔にして、生徒を集めるという手段もある

・・・・アフィリエイト
        まず、無理ゲー、市場が飽和し過ぎている。

・・・・出版社に申し込んでイラストレーターとして正式に依頼を受ける
        将来的にも続いていく着実な方法ではある。
        ピクシブで知名度を上げることで相互作用があるかもしれない。




多分、一番着実で、手っ取り早いのが、英語の個人指導と、イラスト販売だろう
考えるよりも早く、まず、動き出してみるか。



①.英語の家庭教師をやるために、基礎的な文法事項を復習する。
客寄せのためにTOEICで950点以上取る。もしくは、英検1級を取る。


②.ピクシブに絵を数十枚単位でアップして、有料で売る。
まず、人気が出ないとそういう状態にはならない。


③.出版社にアポイントを取ってイラストの仕事をもらえないかアピールする。
出版社アピール用のイラストを複数枚描いてポートフォリオを作成する。




・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・






【国公立編】大学群別の難易度を徹底比較!【東京一工/地方旧帝大/上位国公立/その他】



jouikokuritudai.png



・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・




中国語翻訳日記

我最近切实感受到了自我展示的重要性。
毕竟,人对别人的事情没有兴趣。
如果自己不表现出自己的优点,周围的人就不会评价你。
我觉得我的英语能力很好。
但是,因为没什么说话的机会,周围的人都忘记了我会说英语。
如果想让周围的人对自己会说英语给予更多的评价,就必须更加积极地说英语,展现自己的英语能力。
不久前,别的职员问过我的英语能力。
那个时候,“你的英语水平是多少?中级左右?”被问到。
被问到那个的时候,我很震惊。
因为我自负自己的英语能力可以和本地人匹敌。
但是,因为没有自我展示,所以没有被正式评价。

翻訳:百度翻訳




・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・



絵と英語は自分の最強の武器だ。
だから、すばらしい絵の作品をたくさん早く描いて、早く世間から評価されないといけないし、
英語についても、いつまでもダラダラしてないで、早く、TOEIC900点台後半とか、英検1級を取って、文法も単語も全て完璧にしてネイティブレベルにならないといけない。



自分の市場価値を高める一番の武器なんだから。

頭が良いとは、抽象化して考えられるということ/シューティングゲームのソースを読んでいた/四季報通読2周目、浮動株比率に着目


悩みが無くなる「異次元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級へ・・・
やればできる。




・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・




2b22bc021f73a8aae1f2bfaa6086a542_2021112407103245b.png


マンガの模写をしました。
桂正和さんの絵を模写していました。


今年は経済の勉強を徹底的にやっていきます/最強のモチベーションを手に入れろ!/ゲームプログラミング、自作ゲームの拡張ステージ用の画像を描く

motivation2_20210101045833932.jpg


hatuhinode.png


saikyounomotibe-shon.png




motivation_20210101045835bda.png





・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・





jisakugame202111.png


今作っている自作ゲーム、


jisakugame2021112.png


自作ゲームの背景をずっと描いてました。


jisakugame2021113.png


20ステージ分の背景を描きました。


敵の画像が適当なので、これは子どもが描いた絵に取り替える。





・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・






【経済学】“本当は簡単”な経済の仕組み - 経済学者・マスコミに騙されないための「経済学」基礎 ~情報リテラシー大全「経済学」




今年は、経済に関する本をたくさん読もうと思ってます。



30分で判る 経済の仕組み Ray Dalio





経済に関する何十冊も読みます。

何百冊以上、いけるかな。

無理なことは書かないとして、「何十冊」は確実に読もうと思う。


経済について誰よりも詳しくなります。

経済や金融に関する資格もいくつか取りたいです。





・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・





2021年のTODO


英語をネイティブレベルにする

年内に1回TOEICを受験(目標900点以上)


もう、確実にネイティブと同レベルになってはいるんですが、

今年は4月から新しい英語の講師も来ることですので、

そこで、自分が、「どやぁw!」っていうふうになれるように英語を喋りまくります。




それから、

中国語検定2級に合格する

中国語の流暢さを向上させる


韓国語準2級に向けた単語、文法学習をすすめる


経済に関連する本をたくさん読む


スケボーで初級レベルの技術をマスターする





・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・





tabletillust.jpg


タブレットでたくさんイラストを描いて、かきためていこうと思う。

副業として絵を描くためには、

たくさん絵を描いて、人・世間から注目を得る必要がある。




絵もたくさん描かないといけない。

数十とかじゃなくて、

数百枚とかそのくらいのオーダーで描いていかないと受注は来ないだろう、、、



そのくらいの勢いでやっていたら副業としても定着することだろう。






・・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・・






韓国語翻訳日記


서울 아파트값 주간 상승률이 7·10 부동산 대책 직후 수준으로 올랐다. 지방은 정부가 조정대상지역 등 규제지역을 무더기로 지정한 여파로 상승세가 꺾였으나 여전히 높은 수준으로 오르고 있다. 한국부동산원은 12월 4주(28일 기준) 전국 주간 아파트가격 동향을 조사한 결과 전국의 아파트 매매가격은 0.28% 상승한 것으로 집계됐다고 31일 밝혔다.


ソウルのマンション価格週間の上昇率が7・10不動産対策直後のレベルに上がった。地方政府が調整対象地域などの規制地域を大量に指定された影響で、上昇の勢いが折れたが依然として高い水準に上がっている。韓国の不動産ウォンは12月4週(28日基準)全国週間マンション価格動向を調査した結果、全国のマンション売買価格は0.28%上昇したと集計されたと31日明らかにした。


서울ソウル 아파트값アパート価格 주간週間 상승률이上昇率が 7·10 부동산不動産 대책対策 직후直後 수준으로レベルに 올랐다.上がった 지방은地方の 정부가政府が 조정대상지역調整対象地域 등などの 규제지역을規制地域を 무더기로大量に 지정한指定された 여파로影響で 상승세가上昇の勢いが 꺾였으나折れたが 여전히依然として 높은高い 수준으로水準に 오르고 있다.上がっている 한국부동산원은韓国不動産員は 12월月 4주週(28일日 기준基準) 전국全国 주간週間 아파트가격アパート価格 동향을動向を 조사한調査した 결과結果 전국의全国の 아파트アパート 매매가격은売買価格は 0.28% 상승한上昇した 것으로と 집계됐다고集計されたと 31일日 밝혔다.明らかにした



引用元:https://www.yna.co.kr/economy/index

翻訳:GOOGLE





・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・





「精神がおかしくなって、シャワー浴びながら叫んでました」(マコなり社長のしくじりランキング・後編)





・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・




babypowder.png




ずれ抜けるから、ベビーパウダー買わなきゃ



・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・・





【与沢翼】仮想通貨(ビットコイン リップル)大暴落!






損をして悔しい。

本当に悔しい。




自分には勉強が足りない。

自分には判断力が足りない。

自分には情報が足りない。




だから死ぬほど勉強しなければいけない。

結婚とか、

そういう、どうでもいいことに気持ちを煩わされないようにしなくちゃ、


勉強しかないんだ、

惰眠をむさぼったり、

意味の無いテレビをみたり、

エロいことをしたり、

酒を飲んだり、

ゲームをしたり、

そんなことをするために時間があるんじゃない。


勉強するしか自分を守れないんだから。


勉強しなきゃ。


勉強しなきゃ。


勉強したい、


自分には知らないことが多すぎる。



【ビットコイン&リップル&ネム&イーサリアム】XRP急落。ついにCoinbaseも取引停止!注目はより一層BTCとETHか



誰の言うことも信じちゃいけない。

自分しか自分を守れないんだから。


だから、誰よりも強くなる。

ゲームプログラミング、大量の画像をゲームに入れるための格闘/孤独に勝てないやつは「オワコン」??/限りなく賢い存在になるために

ぼっちな人がまともになり、群れる人が無知で性格も悪くなる理由があった【心理学】



群れなきゃ怖いやつはオワコン。


ま、こんなこと公言しちゃったら非難されるだろうけどw

別に、村八分になっても気にしないけどねww



人類史上最もポジティブな村八分になってみせるよ。




今回のコロナが人々の価値観を変えたんじゃないの?

いつも誰かとつるんでいないと寂しい奴は淘汰されたんじゃないの?

自分はそう思うけどね、

価値観が変わったっていうこと、





自分の意見を持たないで、誰かに追随するのはね。

強い意見の人についていって、

自分が正しい、自分が幸せだと勘違いする。


世間の価値観に合わせているような人たち。





孤独ってのは怖いですよ、

でも、最終的には自分一人で判断しなきゃいけないわけですから。





・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・






famicom1-a_2020123110380244d.jpg



自作ゲームを自分で作っています。

プログラミングというやつです。


「自作」を「自分で作る」という日本語の重複は置いといて。


Javascriptでゲームプログラミングをしているんだが、

どうしても、

上手く動かない。

バグというやつだ。



いや、以前、一度動いていたプログラムなんだが、

子どもたち、数百人に絵を描かせて、その数百枚の絵を一つのゲームの中で再現しようとしたら、とたんにプログラムがおかしくなってきた。



一つずつつぶしていくバグ。




ゲームプログラミング、果てしなく大変・・・・


でも、なんとか終わらせないと、、、



・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・




pasokonngaosoi.png


パソコンが遅い。



いちいち動作が止まる。

1世代前のパソコンにWIN7だし、

しかたがないのだが、


そろそろ、今のパソコンがクラッシュする前に新しいパソコンを買うかな、

高スペックの、、、




・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・






95%の個人投資家が機関や大口に負ける理由!ウォーレンバフェットの最近の動向も含めて




機関投資家と同じ視線で動かないとまけるという意見。

勉強になります。






高IQ集団MENSAとは!?本当に天才なの?MENSA会員○○説の説を募集します!!!




賢くなりたい、

誰にも負けたくない、

自分にそのポテンシャルがあるだろうか。




人生の目的を果たすためには、今以上の知性が必要なんだ、

それをどうやったら手に入れられるか。。。





・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・




bane.png


シリコンバンドが磨耗したので交換しました。




・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・

・・・・・・・・・・・・・・・・・・・





1月1日~1月6日にかけてやること TODOリスト


毎日1時間散歩をする(中国語を聴きながらシャドウイングをしながら)

スケボーを30分練習する

ゲームプログラミングを拡張する(1日1時間程度)

桜美林大学の遠隔講習を受講する(毎日30分~1時間程度)


いつものTODO

中国語の発音や構文などを練習する

英語の単語に着目しながら流暢さを鍛える



英語をふたたび流暢になるために、音読教材をひたすら読む/ゲームプログラミングとコードリーディングふたたび

yukkurinyu-sudaijesuto.jpg
最近、英語の発話スピードが遅くなってきたので、
再度トレーニングをするために、アマゾンでかなりの安値で買ったテキスト。


このテキストを何度も音読する。
このテキストはもう、15年ぐらい前に一度買って、
カナダにいた時代に何度も何度も、朝の5:00に音読していたテキストだった。


あのころは、DMM英会話もレアジョブもない時代だったから、
朝5:00に起きてからのテキストの音読は英語力アップのために必須だった。


このゆっくりニュースダイジェストは、本当、脊髄反射レベルで言えるまで音読を繰り返した記憶がある。
それこそ、100回以上は余裕で音読を繰り返した記憶がある。



それを、この2020年。
もう一度、音読を繰り返すために買いました。
前のはもう、ボロボロすぎて、ゴミと間違えて捨ててしまいましたから。




中国語も英語もテキストがボロボロになるまで音読してきました。
それでこそ、流暢に話せるようになるというものです。



・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


中国語がかなり聞き取れるようになってきました。
言いたいことを言うこともだんだんできるようになってきました。


毎日1時間スカイプで勉強しているだけのことはあります。


これまで何度も中国語検定2級に落第しているこれまでの自分の中国語とはレベルが変わってきているように思います。



今度また保護者とのやり取りがあるから、そのときに向かってがんばります。





それにしても、本当に喋れるようになるまでには、自分のプライベートをここまで犠牲にしなければいけないんだなぁ、、、、
週1時間の片手間の趣味、外国語会話スクールじゃあ、喋れるようにならないんだなぁぁぁ、、、、


この1年間、、、1年半、、、、

プライベートなんて何も無かったなぁ。。。。
中国語の勉強ばかりしてて、、、、



それでも、
まだ、ペラペラ自由自在というレベルには程遠いなぁぁぁぁ・・・




結婚も、仕事の充実も、友達関係も、他の趣味も全くなく、そして、中国語だけ勉強してきた約1年半でした。





・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・





game2020912.png



子どもたちに自由にパソコンで絵を描かせて、動いて遊べるゲームにする。
そのために、Javascriptのソースをいじっているんだけど、
うまく変更が反映されない。


職場のPCで書いていたからだろうか。


たいして長いソースコードじゃないんだけど、
コードリーディングをすることにした。


ゲームプログラミングはここのところやっていないんだけど、
過去にガチでやっていたこともあるので、
1日、2日、ソースコードをながめていれば、問題は解決するはずなんだけど。






(function() {
var config = {
cols: 10,
rows: 15,
cellWidth: 32,
cellHeight: 32,
bulletWidth: 4,
bulletHeight: 4,
bulletSpeed: 20,
bitbulletSpeed: 40,
reloadCount: 2,
itemSpeed: 1
};//1,2
//アイテムを追加↑変数と↓画像の宣言
var status = {};
var imageName = ["my", "bullet", "rock1", "rock2", "rock3", "item10", "wepon10", "bit"];//3
var images = {};
var cacheControl = function() {
var cache = window.applicationCache;
if(cache) {
cache.addEventListener("updateready", function() {
try {
cache.swapCache();
} catch(e) {}
window.location.reload();
});
if(window.navigator.onLine && cache.status != 0) {
try {
cache.update();
} catch(e) {}
}
}
};

var drawBackground = function() {
var bottom = config.height + config.cellHeight - status.currentTop;
if(bottom) {
status.ctx.drawImage(status.bgCtx.canvas, 0, status.currentTop, config.width, bottom, 0, 0, config.width, bottom);
}
if(config.height - bottom) {
status.ctx.drawImage(status.bgCtx.canvas, 0, bottom);
}
};
var draw = function() {
drawBackground();
if(status.state == "gaming") {//生きているなら主人公を描画
status.ctx.drawImage(images["my"], status.x - (config.cellWidth / 2) | 0, status.y - (config.cellHeight / 2) | 0);
if(status.bit == 1){
status.ctx.drawImage(images["bit"], status.x - 64 | 0, status.y | 0);
}
if(status.bit >= 2){
status.ctx.drawImage(images["bit"], status.x - 64 | 0, status.y | 0);
status.ctx.drawImage(images["bit"], status.x + 48 | 0, status.y | 0);
}

} else if(status.state == "dying") {
status.ctx.drawImage(images["bomb" + status.dying], status.x - (config.cellWidth / 2) | 0, status.y - (config.cellHeight / 2) | 0);
if(++status.dying > 10) {
status.state = "gameover";
}
}
// タイミングがおかしいかも
createItem();
createWepon();//ここ追加
};

var drawSpace = function(x, y) {//背景を描画
status.bgCtx.drawImage(images["space" + Math.floor(Math.random() * 10 + 1)], x * config.cellWidth, y * config.cellHeight);
};
var createBullet = function(dx, dy) {//弾丸を描画
return {x: status.x, y: status.y, dx: config.bulletSpeed * dx, dy: config.bulletSpeed * dy};
};
//ここ追加ビット
var createbit1Bullet = function(dx, dy) {//ビット1弾丸を描画
return {x: status.x-64, y: status.y, dx: config.bitbulletSpeed * dx, dy: config.bitbulletSpeed * dy};
};
var createbit2Bullet = function(dx, dy) {//ビット2弾丸を描画
return {x: status.x+48, y: status.y, dx: config.bitbulletSpeed * dx, dy: config.bitbulletSpeed * dy};
};
var createRock = function() {//敵の描画 ここを改造してアイテムにする
var level = (status.frameCount / 500) | 0;
var x = status.x + Math.random() * 100 - 50;
var fy = (level >= 4)? ((Math.random() * 2) | 0) * config.height: 0;
var y = status.y + Math.random() * 100 - 50;
var fx = Math.random() * config.width;
var r = Math.atan2(y - fy, x - fx);
var d = Math.random() * (5.5 + level) + 1.5;
d = (d < 10)? d: 10;
var hp = (Math.random() * Math.random() * ((5 + level / 4) | 0)) | 1;
return {x: fx, y: fy, dx: Math.cos(r) * d, dy: Math.sin(r) * d, hp: hp, score: hp * hp * 100, state: "rock" + ((Math.random() * 3 + 1) | 0)};
};
//アイテム描画の追加
var createItem = function(){
// アイテムが存在しない場合
if (!status.items.flg) {
return;
}
// iy += config.itemSpeed;
// images["item10"];
// status.items.x;
// config.cellWidth;
// status.items.y;
// config.cellHeight;
status.items.y += config.itemSpeed;
status.ctx.drawImage(images["item10"], status.items.x - (config.cellWidth / 2) | 0, status.items.y - (config.cellHeight / 2) | 0);
if(status.items.x < 0 || status.items.x > config.width || status.items.y < 0 || status.items.y > config.height) {
// delete status.items[key];
status.items.flg = false;
}
//return {x: status.x, y: status.y, ix: 0, iy: config.itemSpeed};
};
//ウエポン描画の追加
var createWepon = function(){
// アイテムが存在しない場合
if (!status.wepons.flg) {
return;
}
status.wepons.y += config.itemSpeed;
status.ctx.drawImage(images["wepon10"], status.wepons.x - (config.cellWidth / 2) | 0, status.wepons.y - (config.cellHeight / 2) | 0);
if(status.wepons.x < 0 || status.wepons.x > config.width || status.wepons.y < 0 || status.wepons.y > config.height) {
status.wepons.flg = false;
}
};
//4
var tick = function() {
setTimeout(tick, 1000 / 30);
if(status.state == "loading") {
return;
}
status.frameCount++;
status.currentTop--;
status.currentTop = status.currentTop || (config.height + config.cellHeight);
if(status.currentTop % config.cellHeight == 0) {
var line = status.currentTop / config.cellHeight - 1;
for(var x = 0; x < config.cols; x++) {
drawSpace(x, line);
}
}
draw();
//ここ弾のパターン追加可能、他レベルの処理を敵撃破の近くに書く、ゲームオーバーと最初の初期化をする
if(status.state == "gaming" && status.frameCount % config.reloadCount == 0) {
if(status.powerUp <= 2){
//status.bullets[status.frameCount + "a"] = createBullet(-1, -1);
status.bullets[status.frameCount + "b"] = createBullet(0, -1);
//status.bullets[status.frameCount + "c"] = createBullet(1, -1);
//status.bullets[status.frameCount + "d"] = createBullet(-1, 1);
//status.bullets[status.frameCount + "e"] = createBullet(1, 1);
}else if(status.powerUp >= 3 && status.powerUp <= 5){
status.bullets[status.frameCount + "a"] = createBullet(-1, -1);
//status.bullets[status.frameCount + "b"] = createBullet(0, -1);
status.bullets[status.frameCount + "c"] = createBullet(1, -1);
//status.bullets[status.frameCount + "d"] = createBullet(-1, 1);
//status.bullets[status.frameCount + "e"] = createBullet(1, 1);
}else if(status.powerUp >= 6 && status.powerUp <= 10){
status.bullets[status.frameCount + "a"] = createBullet(-1, -1);
//status.bullets[status.frameCount + "b"] = createBullet(0, -1);
status.bullets[status.frameCount + "c"] = createBullet(1, -1);
status.bullets[status.frameCount + "d"] = createBullet(-1, 1);
status.bullets[status.frameCount + "e"] = createBullet(1, 1);
}else if(status.powerUp >= 11 && status.powerUp <= 16){
status.bullets[status.frameCount + "a"] = createBullet(-1, -1);
status.bullets[status.frameCount + "b"] = createBullet(0, -1);
status.bullets[status.frameCount + "c"] = createBullet(1, -1);
//status.bullets[status.frameCount + "d"] = createBullet(-1, 1);
//status.bullets[status.frameCount + "e"] = createBullet(1, 1);
}else if(status.powerUp >= 17 && status.powerUp <= 20){
status.bullets[status.frameCount + "a"] = createBullet(-1, -1);
status.bullets[status.frameCount + "b"] = createBullet(0, -1);
status.bullets[status.frameCount + "c"] = createBullet(1, -1);
status.bullets[status.frameCount + "d"] = createBullet(-1, 1);
status.bullets[status.frameCount + "e"] = createBullet(1, 1);
}
if(status.bit == 1){
status.bullets[status.frameCount + "f"] = createbit1Bullet(0, -1);
}else if(status.bit >= 2){
status.bullets[status.frameCount + "f"] = createbit1Bullet(0, -1);
status.bullets[status.frameCount + "g"] = createbit2Bullet(0, -1);
}
}
if(status.rockCount < 5 + status.frameCount / 500) {
status.rocks[status.frameCount + "r"] = createRock();
status.rockCount++;
}
for(var key in status.bullets) {
var bullet = status.bullets[key];
bullet.x += bullet.dx;
bullet.y += bullet.dy;
if(bullet.x < 0 || bullet.x > config.width || bullet.y < 0 || bullet.y > config.height) {
delete status.bullets[key];
} else {
status.ctx.drawImage(images["bullet"], bullet.x - ((config.bulletWidth / 2) | 0), bullet.y - ((config.bulletHeight / 2) | 0));
for(var rkey in status.rocks) {
var rock = status.rocks[rkey];
if(Math.abs(bullet.x - rock.x) < config.cellWidth / 2 && Math.abs(bullet.y - rock.y) < config.cellHeight / 2) {
if(rock.hp) {
delete status.bullets[key];
// hpが0の場合
if(--rock.hp == 0) {
status.score += rock.score;
status.score = (status.score > 999999999)? 999999999: status.score;
status.scoreElement.innerHTML = "000000000".substring(0, 9 - (status.score + "").length) + status.score;
rock.dx = rock.dy = 0;
// 爆発画像名を付与する
rock.state = "bomb1";
} else {
rock.state = (rock.state + "w").substring(0, 6);
}
}
}
}
}
}
for(var key in status.rocks) {
var rock = status.rocks[key];
rock.x += rock.dx;
rock.y += rock.dy;
if(rock.x < 0 || rock.x > config.width || rock.y < 0 || rock.y > config.height) {
delete status.rocks[key];
status.rockCount--;
} else {
status.ctx.drawImage(images[rock.state], rock.x - ((config.cellWidth / 2) | 0), rock.y - ((config.cellHeight / 2) | 0));
// hpが0の場合
if(rock.hp == 0) {
var next = (+rock.state.substring(4, 6)) + 1;
// 爆発画像が描画(bomb1~bomb10まで)終了した場合
if(next > 10) {

// 敵を消す
delete status.rocks[key];
status.rockCount--;

// 既ににアイテムがフィールド上に存在する場合
if (status.items["flg"]) {
continue;
}
// 既ににウエポンがフィールド上に存在する場合
if (status.wepons["flg"]) {
continue;
}
// アイテムになる確率を乱数で調整します
var random = Math.random();
random = random * 100;
if (random > 50 && random <= 89 && !status.wepons["flg"] == true) {
status.items["flg"] = true;
//status.wepons["flg"] = false;
status.items["state"] = "item10";

// 敵の座標を引き継ぐ
status.items["x"] = rock.x;
status.items["y"] = rock.y;
}
if (random >90 && !status.items["flg"] == true){
status.wepons["flg"] = true;
//status.items["flg"] = false;
status.wepons["state"] = "wepon10";

// 敵の座標を引き継ぐ
status.wepons["x"] = rock.x;
status.wepons["y"] = rock.y;
}

} else {
rock.state = "bomb" + next;//ここ改造してアイテムにif文追加
}
} else {
rock.state = rock.state.substring(0, 5);
if(status.state == "gaming" && Math.abs(status.x - rock.x) < config.cellWidth * 0.7 && Math.abs(status.y - rock.y) < config.cellHeight * 0.7) {
status.state = "dying";
status.dying = 1;
}
if(status.state == "gaming" && Math.abs(status.x - status.items.x) < config.cellWidth * 0.7 && Math.abs(status.y - status.items.y) < config.cellHeight * 0.7 && status.items.flg == true) {
status.items.flg = false;
status.powerUp += 1;
if(status.powerUp > 20){
status.powerUp = 20;
}

}
if(status.state == "gaming" && Math.abs(status.x - status.wepons.x) < config.cellWidth * 0.7 && Math.abs(status.y - status.wepons.y) < config.cellHeight * 0.7 && status.wepons.flg == true) {
status.wepons.flg = false;
status.bit += 1;
if(status.bit > 2){
status.bit = 2;
}

}
}
}
}
};

var initialize = function() {
for(var x = 0; x < config.cols; x++) {
for(var y = 0; y < config.rows + 1; y++) {
drawSpace(x, y);
}
}
for(var i = 0; i < 3; i++) {
var canvas = document.createElement("canvas");
canvas.width = config.cellWidth;
canvas.height = config.cellHeight;
var ctx = canvas.getContext("2d");
ctx.drawImage(images["rock" + (i + 1)], 0, 0);
//ここを書き換えて敵を増やす必要あり。2020/9/12
ctx.globalCompositeOperation = "source-in";
ctx.fillStyle = "#fff";
ctx.fillRect(0, 0, canvas.width, canvas.height);
images["rock" + (i + 1) + "w"] = canvas;
}
//ここ初期化の処理
status.currentTop = config.height + config.cellHeight;
status.x = (config.width / 2) | 0;
status.y = (config.height * 3 / 4) | 0;
status.frameCount = 0;
status.rockCount = 0;
status.score = 0;
status.powerUp = 0;//ここ追加
status.bullets = {};
status.rocks = {};
status.items = {};//5
status.wepons = {};
status.bit = 0;
status.scoreElement.innerHTML = "000000000";
status.state = "gaming";
setTimeout(function() { window.scrollTo(0, 0); }, 250);
};

window.onload = function() {
cacheControl();
config.width = config.cols * config.cellWidth;
config.height = config.rows * config.cellHeight;
status.scoreElement = document.getElementsByTagName("div")[0];
status.scoreElement.style.width = config.width + "px";
var canvas = document.getElementById("canvas");
canvas.width = config.width;
canvas.height = config.height;
status.ctx = canvas.getContext("2d");
var bgCanvas = document.createElement("canvas");
bgCanvas.width = config.width;
bgCanvas.height = config.height + config.cellHeight;
status.bgCtx = bgCanvas.getContext("2d");
for(var i = 0; i < 10; i++) {
imageName.push("space" + (i + 1));
imageName.push("bomb" + (i + 1));//アイテム追加
}
var checkLoad = function() {
status.loadedCount++;
if(status.loadedCount == imageName.length) {
initialize();
}
};
status.loadedCount = 0;
for(var i = 0; i < imageName.length; i++) {
var image = document.createElement("img");
image.onload = checkLoad;
images[imageName[i]] = image;
image.src = "img/" + imageName[i] + ".png";
}
status.state = "loading";
tick();
document.body.onmousedown = document.body.ontouchstart = function(e) {
e.preventDefault();
e = (e.touches && e.touches[0]) || e;
status.lastX = e.pageX;
status.lastY = e.pageY;
if(status.state == "gameover") {
initialize();
}
};
document.body.onmousemove = document.body.ontouchmove = function(e) {
e = (e.touches && e.touches[0]) || e;
if(status.state == "gaming" && status.lastX != null) {
status.x += (e.pageX - status.lastX) * 2.5;
status.y += (e.pageY - status.lastY) * 3;
status.x = ((status.x < 0)? 0: ((status.x > config.width)? config.width: status.x)) | 0;
status.y = ((status.y < 0)? 0: ((status.y > config.height)? config.height: status.y)) | 0;
}
status.lastX = e.pageX;
status.lastY = e.pageY;
};
};
})();

タブレットでプレイできるゲームの拡張/中国語のリスニング、課題いまだ多く

programming.jpg

javascript.jpg
Javascriptを使ったゲームの改造を進めていこうと思う。

それほど時間はかからなそうだ。

1.画面を大きくする=>敷き詰めるタイルの配列要素を増やす+画面設定の定数を増やす
2.アイテムを増やす=>これまでの応用でできる
3.左右にも進めるようにする=>上から下に画面が遷移するところで、キー入力の判別式を入れる

game2016111.png
このゲームが職場のタブレットでプレイできるので、改造してメールで送ろうと思う。

改造するまえに、コードリーディング

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

いつの日か、ファミコンみたいなゲームをたくさん作ってみたい、
って思ってたけど、
なかなか、まとまった時間が取れない。

時間が取れても、結局、今みたいに中国語地獄になって、ゲームプログラミングどころじゃなくなる。
famicom.jpg
famicom2.jpg
famicom3.png
famicom4.jpg
Javaでゲームを作った。
それが、2013年。

アクションゲームやシューティングゲームであれば経験があるから作れる。

RPGを作りたいんだが、
管理する値・フラグが多過ぎて、挫折したな・・・・

格闘ゲームも作りたかったけど、
結局、スパルタンXみたいなものになってしまった・・・・

だから、ゲームプログラミングって、とても奥が深いんだよ。

でも、勉強したら、しただけ、面白い物が作れる。

10年前の自分だったら、↓↓↓みたいなプログラムコードをみたら、オゲェってなってたんだけど、
成長したな、自分。
って、思う。
だから、勉強って面白い。

またプログラミング、集中して勉強したい。

(function() {
var config = {
cols: 10,  変更点
rows: 15,  変更点
cellWidth: 32,
cellHeight: 32,
bulletWidth: 4,
bulletHeight: 4,
bulletSpeed: 20,
bitbulletSpeed: 40,
reloadCount: 2,
itemSpeed: 1
};//1,2
//アイテムを追加↑変数と↓画像の宣言
var status = {};
var imageName = ["my", "bullet", "rock1", "rock2", "rock3", "item10", "wepon10", "bit"];//3
var images = {};
var cacheControl = function() {
var cache = window.applicationCache;
if(cache) {
cache.addEventListener("updateready", function() {
try {
cache.swapCache();
} catch(e) {}
window.location.reload();
});
if(window.navigator.onLine && cache.status != 0) {
try {
cache.update();
} catch(e) {}
}
}
};

var drawBackground = function() {
var bottom = config.height + config.cellHeight - status.currentTop;
if(bottom) {
status.ctx.drawImage(status.bgCtx.canvas, 0, status.currentTop, config.width, bottom, 0, 0, config.width, bottom);
}
if(config.height - bottom) {
status.ctx.drawImage(status.bgCtx.canvas, 0, bottom);
}
};
var draw = function() {
drawBackground();
if(status.state == "gaming") {//生きているなら主人公を描画
status.ctx.drawImage(images["my"], status.x - (config.cellWidth / 2) | 0, status.y - (config.cellHeight / 2) | 0);
if(status.bit == 1){
status.ctx.drawImage(images["bit"], status.x - 64 | 0, status.y | 0);
}
if(status.bit >= 2){
status.ctx.drawImage(images["bit"], status.x - 64 | 0, status.y | 0);
status.ctx.drawImage(images["bit"], status.x + 48 | 0, status.y | 0);
}

} else if(status.state == "dying") {
status.ctx.drawImage(images["bomb" + status.dying], status.x - (config.cellWidth / 2) | 0, status.y - (config.cellHeight / 2) | 0);
if(++status.dying > 10) {
status.state = "gameover";
}
}
// タイミングがおかしいかも
createItem();
createWepon();//ここ追加
};

var drawSpace = function(x, y) {//背景を描画
status.bgCtx.drawImage(images["space" + Math.floor(Math.random() * 10 + 1)], x * config.cellWidth, y * config.cellHeight);
};
var createBullet = function(dx, dy) {//弾丸を描画
return {x: status.x, y: status.y, dx: config.bulletSpeed * dx, dy: config.bulletSpeed * dy};
};
//ここ追加ビット
var createbit1Bullet = function(dx, dy) {//ビット1弾丸を描画
return {x: status.x-64, y: status.y, dx: config.bitbulletSpeed * dx, dy: config.bitbulletSpeed * dy};
};
var createbit2Bullet = function(dx, dy) {//ビット2弾丸を描画
return {x: status.x+48, y: status.y, dx: config.bitbulletSpeed * dx, dy: config.bitbulletSpeed * dy};
};
var createRock = function() {//敵の描画 ここを改造してアイテムにする
var level = (status.frameCount / 500) | 0;
var x = status.x + Math.random() * 100 - 50;
var fy = (level >= 4)? ((Math.random() * 2) | 0) * config.height: 0;
var y = status.y + Math.random() * 100 - 50;
var fx = Math.random() * config.width;
var r = Math.atan2(y - fy, x - fx);
var d = Math.random() * (5.5 + level) + 1.5;
d = (d < 10)? d: 10;
var hp = (Math.random() * Math.random() * ((5 + level / 4) | 0)) | 1;
return {x: fx, y: fy, dx: Math.cos(r) * d, dy: Math.sin(r) * d, hp: hp, score: hp * hp * 100, state: "rock" + ((Math.random() * 3 + 1) | 0)};
};
//アイテム描画の追加
var createItem = function(){
// アイテムが存在しない場合
if (!status.items.flg) {
return;
}
// iy += config.itemSpeed;
// images["item10"];
// status.items.x;
// config.cellWidth;
// status.items.y;
// config.cellHeight;
status.items.y += config.itemSpeed;
status.ctx.drawImage(images["item10"], status.items.x - (config.cellWidth / 2) | 0, status.items.y - (config.cellHeight / 2) | 0);
if(status.items.x < 0 || status.items.x > config.width || status.items.y < 0 || status.items.y > config.height) {
// delete status.items[key];
status.items.flg = false;
}
//return {x: status.x, y: status.y, ix: 0, iy: config.itemSpeed};
};
//ウエポン描画の追加
var createWepon = function(){
// アイテムが存在しない場合
if (!status.wepons.flg) {
return;
}
status.wepons.y += config.itemSpeed;
status.ctx.drawImage(images["wepon10"], status.wepons.x - (config.cellWidth / 2) | 0, status.wepons.y - (config.cellHeight / 2) | 0);
if(status.wepons.x < 0 || status.wepons.x > config.width || status.wepons.y < 0 || status.wepons.y > config.height) {
status.wepons.flg = false;
}
};
//4
var tick = function() {
setTimeout(tick, 1000 / 30);
if(status.state == "loading") {
return;
}
status.frameCount++;
status.currentTop--;
status.currentTop = status.currentTop || (config.height + config.cellHeight);
if(status.currentTop % config.cellHeight == 0) {
var line = status.currentTop / config.cellHeight - 1;
for(var x = 0; x < config.cols; x++) {
drawSpace(x, line);
}
}
draw();
//ここ弾のパターン追加可能、他レベルの処理を敵撃破の近くに書く、ゲームオーバーと最初の初期化をする
if(status.state == "gaming" && status.frameCount % config.reloadCount == 0) {
if(status.powerUp <= 2){
//status.bullets[status.frameCount + "a"] = createBullet(-1, -1);
status.bullets[status.frameCount + "b"] = createBullet(0, -1);
//status.bullets[status.frameCount + "c"] = createBullet(1, -1);
//status.bullets[status.frameCount + "d"] = createBullet(-1, 1);
//status.bullets[status.frameCount + "e"] = createBullet(1, 1);
}else if(status.powerUp >= 3 && status.powerUp <= 5){
status.bullets[status.frameCount + "a"] = createBullet(-1, -1);
//status.bullets[status.frameCount + "b"] = createBullet(0, -1);
status.bullets[status.frameCount + "c"] = createBullet(1, -1);
//status.bullets[status.frameCount + "d"] = createBullet(-1, 1);
//status.bullets[status.frameCount + "e"] = createBullet(1, 1);
}else if(status.powerUp >= 6 && status.powerUp <= 10){
status.bullets[status.frameCount + "a"] = createBullet(-1, -1);
//status.bullets[status.frameCount + "b"] = createBullet(0, -1);
status.bullets[status.frameCount + "c"] = createBullet(1, -1);
status.bullets[status.frameCount + "d"] = createBullet(-1, 1);
status.bullets[status.frameCount + "e"] = createBullet(1, 1);
}else if(status.powerUp >= 11 && status.powerUp <= 16){
status.bullets[status.frameCount + "a"] = createBullet(-1, -1);
status.bullets[status.frameCount + "b"] = createBullet(0, -1);
status.bullets[status.frameCount + "c"] = createBullet(1, -1);
//status.bullets[status.frameCount + "d"] = createBullet(-1, 1);
//status.bullets[status.frameCount + "e"] = createBullet(1, 1);
}else if(status.powerUp >= 17 && status.powerUp <= 20){
status.bullets[status.frameCount + "a"] = createBullet(-1, -1);
status.bullets[status.frameCount + "b"] = createBullet(0, -1);
status.bullets[status.frameCount + "c"] = createBullet(1, -1);
status.bullets[status.frameCount + "d"] = createBullet(-1, 1);
status.bullets[status.frameCount + "e"] = createBullet(1, 1);
}
if(status.bit == 1){
status.bullets[status.frameCount + "f"] = createbit1Bullet(0, -1);
}else if(status.bit >= 2){
status.bullets[status.frameCount + "f"] = createbit1Bullet(0, -1);
status.bullets[status.frameCount + "g"] = createbit2Bullet(0, -1);
}
}
if(status.rockCount < 5 + status.frameCount / 500) {
status.rocks[status.frameCount + "r"] = createRock();
status.rockCount++;
}
for(var key in status.bullets) {
var bullet = status.bullets[key];
bullet.x += bullet.dx;
bullet.y += bullet.dy;
if(bullet.x < 0 || bullet.x > config.width || bullet.y < 0 || bullet.y > config.height) {
delete status.bullets[key];
} else {
status.ctx.drawImage(images["bullet"], bullet.x - ((config.bulletWidth / 2) | 0), bullet.y - ((config.bulletHeight / 2) | 0));
for(var rkey in status.rocks) {
var rock = status.rocks[rkey];
if(Math.abs(bullet.x - rock.x) < config.cellWidth / 2 && Math.abs(bullet.y - rock.y) < config.cellHeight / 2) {
if(rock.hp) {
delete status.bullets[key];
// hpが0の場合
if(--rock.hp == 0) {
status.score += rock.score;
status.score = (status.score > 999999999)? 999999999: status.score;
status.scoreElement.innerHTML = "000000000".substring(0, 9 - (status.score + "").length) + status.score;
rock.dx = rock.dy = 0;
// 爆発画像名を付与する
rock.state = "bomb1";
} else {
rock.state = (rock.state + "w").substring(0, 6);
}
}
}
}
}
}
for(var key in status.rocks) {
var rock = status.rocks[key];
rock.x += rock.dx;
rock.y += rock.dy;
if(rock.x < 0 || rock.x > config.width || rock.y < 0 || rock.y > config.height) {
delete status.rocks[key];
status.rockCount--;
} else {
status.ctx.drawImage(images[rock.state], rock.x - ((config.cellWidth / 2) | 0), rock.y - ((config.cellHeight / 2) | 0));
// hpが0の場合
if(rock.hp == 0) {
var next = (+rock.state.substring(4, 6)) + 1;
// 爆発画像が描画(bomb1~bomb10まで)終了した場合
if(next > 10) {

// 敵を消す
delete status.rocks[key];
status.rockCount--;

// 既ににアイテムがフィールド上に存在する場合
if (status.items["flg"]) {
continue;
}
// 既ににウエポンがフィールド上に存在する場合
if (status.wepons["flg"]) {
continue;
}
// アイテムになる確率を乱数で調整します
var random = Math.random();
random = random * 100;
if (random > 50 && random <= 89 && !status.wepons["flg"] == true) {
status.items["flg"] = true;
//status.wepons["flg"] = false;
status.items["state"] = "item10";

// 敵の座標を引き継ぐ
status.items["x"] = rock.x;
status.items["y"] = rock.y;
}
if (random >90 && !status.items["flg"] == true){
status.wepons["flg"] = true;
//status.items["flg"] = false;
status.wepons["state"] = "wepon10";

// 敵の座標を引き継ぐ
status.wepons["x"] = rock.x;
status.wepons["y"] = rock.y;
}

} else {
rock.state = "bomb" + next;//ここ改造してアイテムにif文追加
}
} else {
rock.state = rock.state.substring(0, 5);
if(status.state == "gaming" && Math.abs(status.x - rock.x) < config.cellWidth * 0.7 && Math.abs(status.y - rock.y) < config.cellHeight * 0.7) {
status.state = "dying";
status.dying = 1;
}
if(status.state == "gaming" && Math.abs(status.x - status.items.x) < config.cellWidth * 0.7 && Math.abs(status.y - status.items.y) < config.cellHeight * 0.7 && status.items.flg == true) {
status.items.flg = false;
status.powerUp += 1;
if(status.powerUp > 20){
status.powerUp = 20;
}

}
if(status.state == "gaming" && Math.abs(status.x - status.wepons.x) < config.cellWidth * 0.7 && Math.abs(status.y - status.wepons.y) < config.cellHeight * 0.7 && status.wepons.flg == true) {
status.wepons.flg = false;
status.bit += 1;
if(status.bit > 2){
status.bit = 2;
}

}
}
}
}
};

var initialize = function() {
for(var x = 0; x < config.cols; x++) {
for(var y = 0; y < config.rows + 1; y++) {
drawSpace(x, y);
}
}
for(var i = 0; i < 3; i++) {
var canvas = document.createElement("canvas");
canvas.width = config.cellWidth;
canvas.height = config.cellHeight;
var ctx = canvas.getContext("2d");
ctx.drawImage(images["rock" + (i + 1)], 0, 0);
ctx.globalCompositeOperation = "source-in";
ctx.fillStyle = "#fff";
ctx.fillRect(0, 0, canvas.width, canvas.height);
images["rock" + (i + 1) + "w"] = canvas;
}
//ここ初期化の処理
status.currentTop = config.height + config.cellHeight;
status.x = (config.width / 2) | 0;
status.y = (config.height * 3 / 4) | 0;
status.frameCount = 0;
status.rockCount = 0;
status.score = 0;
status.powerUp = 0;//ここ追加
status.bullets = {};
status.rocks = {};
status.items = {};//5
status.wepons = {};
status.bit = 0;
status.scoreElement.innerHTML = "000000000";
status.state = "gaming";
setTimeout(function() { window.scrollTo(0, 0); }, 250);
};

window.onload = function() {
cacheControl();
config.width = config.cols * config.cellWidth;
config.height = config.rows * config.cellHeight;
status.scoreElement = document.getElementsByTagName("div")[0];
status.scoreElement.style.width = config.width + "px";
var canvas = document.getElementById("canvas");
canvas.width = config.width;
canvas.height = config.height;
status.ctx = canvas.getContext("2d");
var bgCanvas = document.createElement("canvas");
bgCanvas.width = config.width;
bgCanvas.height = config.height + config.cellHeight;
status.bgCtx = bgCanvas.getContext("2d");
for(var i = 0; i < 10; i++) {
imageName.push("space" + (i + 1));
imageName.push("bomb" + (i + 1));//アイテム追加
}
var checkLoad = function() {
status.loadedCount++;
if(status.loadedCount == imageName.length) {
initialize();
}
};
status.loadedCount = 0;
for(var i = 0; i < imageName.length; i++) {
var image = document.createElement("img");
image.onload = checkLoad;
images[imageName[i]] = image;
image.src = "img/" + imageName[i] + ".png";
}
status.state = "loading";
tick();
document.body.onmousedown = document.body.ontouchstart = function(e) {
e.preventDefault();
e = (e.touches && e.touches[0]) || e;
status.lastX = e.pageX;
status.lastY = e.pageY;
if(status.state == "gameover") {
initialize();
}
};
document.body.onmousemove = document.body.ontouchmove = function(e) {
e = (e.touches && e.touches[0]) || e;
if(status.state == "gaming" && status.lastX != null) {
status.x += (e.pageX - status.lastX) * 2.5;
status.y += (e.pageY - status.lastY) * 3;
status.x = ((status.x < 0)? 0: ((status.x > config.width)? config.width: status.x)) | 0;
status.y = ((status.y < 0)? 0: ((status.y > config.height)? config.height: status.y)) | 0;
}
status.lastX = e.pageX;
status.lastY = e.pageY;
};
};
})();

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

piraseta_20200104065350a39.jpg

昨日は東小金井でマンツーマン。
リスニングに特化して勉強してました。

ピラセタム(頭の良くなる薬)を半錠飲んで取り組む、

分からない単語が多過ぎてとてもへこみました。


つまり、まだまだ先は長いということです。


CCレッスンでも、毎回、リスニングを練習する時間を取ろうと思う。

昨日は、脳を使いすぎたため、また、歩き始めたらフラフラとめまいがしました。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

CCレッスン用のテキスト

便捷的网络、更新换代的智能手机给人们的生活带来更大的便利,对于自制力较薄弱的青少年来说,却可能带来负面影响。用智能手机长时间玩游戏、聊天、看视频的“低头族”开始在青少年人群里蔓延,日本也不例外。
  日本内阁府于2019年3月公布了对青少年互联网使用情况的调查报告。该调查从2018年11月3日至2018年12月3日为期一个月的时间内,分别对5000名10周岁至17周岁的青少年及5000名与青少年同居的监jian1护人进行调查,并收到了3288名青少年和3469名监护人的调查样本。调查结果显示,在青少年使用智能手机的监护人中,通过过滤lǜ或技术手段等来管理孩子使用网络的监护人高达84.9%。
  在这些对青少年使用智能手机进行管控的家长中,“通过过滤手段”进行管控kong4的占36.1%,“掌握孩子的网络使用情况的”占36.2%,“在大人的视线xi4范围内使用”占34.4%,“指定使用时间及场所的”则占29.8%。即便如此,日本文部科学省2019年3月公布的调查显示,日本中小学生的视力不足1.0的人数已经创造了历史最高纪录。在文部科学省2018年对日本340多万的学生进行调查后发现,小学生视力不足1.0的占34.1%,高中生占67.23%,这两个比列均达到自1979年开始进行该调查以来的最高值。日本国内认为,造成该结果的很大一个因素在于青少年长时间使用智能手机和便携式游戏机。
  日本人曾经把眼镜看作优等生的标志。随着使用普通手机的青少年逐渐向使用智能手机过渡,他们使用智能手机的时间也在增加。2018年日本青少年日平均使用智能手机的时间比2017年增加9分钟,高达169分钟,而在日本小学生当中更是增加了21分钟。在日本的青少年中,使用智能手机看视频、进行交际和打游戏的占据前三位,分别为77.1%、75%和70.5%,通过智能手机进行学习的只占到33.3%。因此,现如今在日本戴眼镜的学生未必就是学习好的学生。
  此外,据日本某移动运营商调查显示,每三个中学生中就有一个曾经浏览过不良网页。曾经受到短信、广告等欺诈的占到了三成。鉴jiàn此,日本政府为了给青少年使用智能手机营造安全互联网的环境,制定了相关法律进行限制。如果手机签约者是未满18岁的青少年,原则上规定手机运营商有义务向用户提供过滤服务。如根据年龄层不同限制使用手机软件的范围等。日本在2018年2月1日修订的相关法律中规定,运营商有义务在签订新手机合同时向青少年进行确认,将进行过滤设定等限制青少年使用手机网络的相关措施,以此为青少年营造利于学习的网络氛围。同时,日本手机运营商们也会根据不同年龄段的青少年出售不同的手机类型。有的手机被限制了邮件的使用和互联网的使用,有的则只能进行点对点的联系或只能打电话发信息。因此,日本青少年家长大多情况下会选择给孩子购买此类智能手机。日本还有一些新的机种帮助青少年家长对青少年使用手机情况进行管理,他们能够通过智能手机的实时定位、防走路看手机、求救和防霸凌等功能掌握孩子的安全状况。
  据记者了解,有不少日本青少年认为经常访问互联网可以有效地学习课外知识以及防止与社会脱节。但是,这并不能说明他们愿意分享自己的网络活动,特别是把智能手机看成是个人隐私。由于青少年生理和心理尚未成熟,对不良信息缺乏甄zhēn别能力,因此造成沉迷手机问题尤为突出,严重的不仅对青少年的学习、生活和身心健康产生影响,还有可能衍生出其他社会性问题,形成新的社会矛盾。
  阻止青少年使用智能手机是不符合时代发展潮流的,但如何让青少年的手机不再是游戏机,而是互联网时代的学习工具,又考验着每一个日本家长甚至是学校。
引用元:http://media.people.com.cn/n1/2019/0530/c40606-31109739.html


家长科学的引导对孩子使用手机的用途影响显著
游戏一直是家长们控诉的主要内容。调研发现,有40.59%的未成年受访者表示使用手机的主要用途为玩游戏,位居玩手机的主要用途中的第四。虽然游戏是孩子使用手机的主要用途之一,但并没有家长和老师们认为的那样严重:老师认为孩子使用手机的用途中,游戏排第一;家长则认为排第三。
被称为“互联网原住民”的这代未成年人,学习和生活都是在智能手机的陪伴下展开的。手机带给孩子们的利大还是弊大?对此,不同的群体态度不同。调查结果显示,孩子自身对于手机对未成年人的影响持正面态度;家长的态度是好坏参半;老师则持较为负面的态度。
但几类群体的一个相同的态度是:家长在引导未成年人使用手机中扮演主要角色。调研深入分析发现,在家长对孩子使用手机的时间和方式作出管理和要求的情况下,孩子的手机应用内消费、遭遇网络欺凌、遭遇色情、暴力信息等情况均有显著减少。比如,在家长进行管理的情况下,未成年人遭遇网络色情、暴力信息的概率会从36%降至18.5%。
不过,有约四成的受访家长表示不太懂得如何引导孩子正确使用手机。
家长管理孩子使用手机的方式一般有三种:设置密码,规定使用时间段和有条件使用。调查显示,这三种方式均有一定的效果。其中,有条件使用手机这一方式效果最为明显,能将孩子使用手机学习的概率提高77%,规定使用时间段和设置密码分别能将孩子使用手机学习的概率提高52.6%和39%。
同时,家长的以身作则也十分重要。调查显示,父母每天在家使用手机的时间越长,孩子使用手机进行学习的比例越低。
“在调查中,当我们研究员问几名父母经常不在身边的初二学生:如果爸爸陪在身边和每天能自由使用手机中选一个,你会怎么选?‘选择爸爸陪在身边’是他们的一致回答。”娜迪娅nà dí yà 对此表示,“所以我们的感受是,能够科学合理引导孩子使用手机的,可能并不是学历最高或最懂互联网的家长,而是能够有更多时间陪伴孩子的家长。”
引用元:http://www.handannews.com.cn/news/content/2019-08/08/content_8021258.html

200jikannohousoku.png
200時間の法則

とあるサイトで見かけた言葉です。
人間はあることに集中して学習していると、200時間程度で一つの段階を達成することができるらしいです。

以前、1000時間の法則とか、10000時間の法則とかみましたけどね。
1000時間やれば、どんなこともみにつく。
10000時間やれば、上級者になれる・・・など。

私は平日は30分程度しか中国語を勉強する時間はとれません。
その代わり、土日は3~4時間は勉強するようにしています。
週10時間勉強したとして、20週間(5ヶ月)で次のステップに進めるということでしょうか。


いずれにしても、
もう、これ以上時間をかけたくありません。

もっと早く、
もっと早く、
中国語を上達したいものです。

いつか拡張するシューティングゲームの画像やソース/日経ダブルインバースの信用買い残増について/中国語のリスニングがようやく上達してきた

charge_20191104140400b42.png
両国でドラリオンのプログラマーさんとシューティングゲームの仕様を拡張していたときに作成したイラスト。
上のは、チャージビームの装置ですね。

アイアンマンが手元にエネルギーを「ビリビリビリ・・・・」って充填しているイメージです。
実際にでっかい、強力な弾が出るプログラムも書きました。

mineshop_20191104140406157.png
地雷です。
8方向に弾が飛び散ります。
使い勝手はイマイチ?

shopmissle_20191104140410aa6.png
ミサイルです。
そのまんま。

いちおう、普通のビームでは破壊できない。地上の火山などを攻撃できるという設定で作りました。

kazan_2019110414040128e.png
kazandead_201911041404039c8.png
火山 破壊前と破壊後 なんかゼビウスみたいですね。

koware.png
壊れる壁。
アールタイプのステージ4のパクリですね。

shop_2019110414040937f.png
お店です。
ファンタジーゾーンみたいです。

warp_20191104140412545.png
ワープゾーンですね。
キングスナイトとか、スーパースターフォースっぽいですかね。

ゲーム自体は既に2013年にできていて、いろいろなところで発表していますが、
これらを含めて拡張したバージョンはまだ日の目を見ていません。

チャージショットの部分のソース

import java.awt.image.BufferedImage;

public class JikiTameTama extends GameChara {
private int _iMx, _iMy;
public JikiTameTama(int x, int y, BufferedImage img) {
super(x, y, 12, 12, img, 0, 0, 48, 48);//240, 0を0, 96
}
public JikiTameTama(int x, int y, BufferedImage img, int iMx, int iMy) {
super(x, y, 12, 12, img, 0, 0, 48, 48);
_iMx = iMx;
_iMy = iMy;
}

public void move() {
chara_x = chara_x + _iMx;//12;
chara_y = chara_y + _iMy;//12;
}

}

地雷の部分のソース
import java.awt.image.BufferedImage;

public class Mine extends GameChara {
private int _iMx, _iMy;
private int iTimerCount = 30;
public Mine(int x, int y, BufferedImage img) {
super(x, y, 12, 12, img, 0, 0, 24, 24);//240, 0を0, 96
}
public Mine(int x, int y, BufferedImage img, int iMx, int iMy) {
super(x, y, 12, 12, img, 0, 0, 24, 24);
_iMx = iMx;
_iMy = iMy;
}

public void move() {
chara_x = chara_x + _iMx;//12;
chara_y = chara_y + _iMy;//12;
}

public boolean isBakuha() {
iTimerCount--;
if (iTimerCount < 0) {
// 爆破
return true;
}
// まだ爆破しない
return false;

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

信用買い残の増加をどう見るか

信用取引では、資金を借りて株式を購入する買建てのポジションと、株式を借りてその売却から取引に入る売建てのポジションの2つが存在する。相場の上昇が見込まれる時には前者、相場の下落が見込まれる時には後者のポジションを取る。

市場において、買建てポジションの残高は信用買い残、売建てポジションの残高は信用売り残と呼ばれる。これらの残高状況は信用取引の取り組み状況とも呼ばれ、非常に重要なデータとなる。なぜ信用取引の残高状況は重要となるのだろうか。

まず一つ目の理由は、市場参加者がその銘柄をどのように見ているかを把握できる点である。信用買い残の増加は、資金を借りてでもその銘柄へ投資をしようとする人の増加と言い換える事ができ、ポジティブな見方をする投資家の増加を意味する。信用売り残の増加は下落を予想する投資家の増加であり、ネガティブな相場観と見る事ができる。これらは、短期的な株価動向の方向性を予想する時に役立つ。
引用元:https://zuuonline.com/archives/184930

日経ダブルインバースの買い残が増えています。
これはどういうことでしょうか。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

この2日間、中国語にしがみついて、必死で勉強してきた。

そして、不特定多数の講師からティンリー(リスニング)が良いと言われ始めている。
そうなのかなぁ・・・・・・

蘇州出身の10歳の子の言ってることが全然分からなくて凹んでるんだけど、
自信もっていいのかなぁ、、、

ま、これだけ勉強したんだから結果がついてきたって考えればいいんでしょうか。

頑張れ自分、

もう中国語を喋る場面で逃げ出したくなんてない。

過去のパソコンからゲームのソース(溜め打ちショット、店、ワープ、壊れる壁、地雷、地上ミサイル)の発見/天才さん「出番でーす」/化けの皮が剥がれる前に、脳ミソが爆発するまで勉強しろ

sinyoukaizanzouka.png
信用買い残の増加ランキングで日経ダブルインバースが依然としてトップに来ている。

おそらく、ここちかいうちに大きく下げることを意味しているのでしょう。
株で勝つためにはプロがどう動いているのかを調べ続けないといけない。
情報弱者では勝てない。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

tmj.png
以前無料で申し込んだ投資顧問から何度も勧誘メールがやってくる。
「今がラストチャンスだ」と。

過去に投資顧問に申し込んで、信じきって大損したことあるから。

人の言葉なんか信じるか。
自分で調べまくる、考えまくるしかないんだ。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

start_2019110407490953b.jpg
廃棄寸前のパソコンからデータを救出していたんだけど、
何年も前に作っていたシューティングゲームのソースが出てきた。


そのソースでは、
溜め打ち(アールタイプのチャージショット、DBのかめはめ波、みたいな溜めて強く打つ弾)
地雷(一定時間が来ると四方八方に弾が跳ぶ)
地上破壊ミサイル

の3つの特殊武器が作られていた。

他には、
ワープゾーン
店(上記の武器が買える)
壊れる壁

これだけのプログラムが保存されていた。

今のゲームに移植したいぐらいです。

bun114.png

ブラウザ上でサクッと動くゲームを作りたいのです。
ダウンロードとか、そういうのは無しです。

だから、昔だったら、アプレット、フラッシュ、
今だったらHTML5なのでしょうか。

bun1142.png

とにかく極めたいね。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

中国語は昨日は1日中勉強してて、そして、2人の講師から「 Ju 」の発音を何回も直されました。
しんどかったです。
最後の小平さんとはスムーズな自由会話ができて、それがなによりの救いでした。

職場では、あまり大勢の職員の前で堂々と中国語を喋る機会が少なくって、
それでいて、
ダイナピンク2号が教え子の男の子の流暢な中国語をきいて自分も勉強したくなってきたみたいで、

私は、
五十路おばさんに負けたくないと思いつつ、
あの度胸には負ける。

あの程度の中国語でどうして、電話対応や、中国人たちに突っ込んでいけるんだろうと。

私は言ってみれば一兵卒で、
いつでも、殺されてもいい捨て駒部隊で、
そんななかで、五十路おばさんが、「ランボー」みたいに力強く見えるんだよね。

私もいつか、というか、すぐ、明日にでも「ランボー」みたいになりたいんだ。

私は外で銃撃戦が行われていても、
聞こえていないフリをしている。
自分の中途半端な中国語がバレたくないから。
だから戦場に行かない。

DBのヤジロベーみたいだ。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

とにかく、数ヶ月以内には中国語をマスターしなければいけないんだ。




「詐欺師」

「お前詐欺師」




・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・





「手の包帯とってみろよ」


「・・・・・・・・・・」


「聞こえてるんだろ」


「・・・・・・・・。」


「本当は」


「手の包帯をとって、ピアノソナタ弾いてみろよ」


samuragoutimamoru_201911040820387c4.jpg


「(早くこの場から去らなければ)」

聴覚障害者に対して失礼よ!!
彼は天才なのよ!

「(ピアノなんて弾けない、それがバレるのが怖い)」






・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・






「GOKUHさん、中国人の保護者がいるんですが、通訳してもらえますか?」






何度となく訪れたラッキー。
でも、いつか、ヤジロベーの自分もセルと戦わないといけない。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

watasihasagisijanai.png

mezamete.png

オレは屁たれじゃない!!!

ランボーみたいに戦場で戦うんだ!!!

中国人、みんな、束になってかかって来い!!!!

私の中国語のフルスピードで片付けてやる!!!!!


ぐぅ・・・

できない・・・・・

ぅぅぅぅ・・・・・

まだ、死ねる。
殺される。
自分の中国語なんか、

苫米地英人の英語並み、
中野裕太のスペイン語並み、
佐村河内守のピアノ並み、
スペインボルハ市のキリスト猿BBAの画力並み、

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

自分の中国語のレベルは中検2級レベルなので、
本来であれば、中国人と対応可能なはずなんですが、

どうしても、
怖いのです。

だって、
彼ら早口じゃないですか。

それが始まったら死んじゃうよ。

それから、不明瞭な話し方するし。

嗚呼・・・・・・・・
嗚呼・・・・嗚呼・・・・・・・・


noumiso.png


早く中国語を極めたい。
そして、韓国語を勉強したい。
そして、ゲームプログラミングを再開したい。
そして、投資について徹底的に勉強したい。
そのまえに、プロとして美術指導を勉強しなければいけない。

人生は有限だ。

ゲームプログラミング、JavascriptのRPG(クソゲー)を埋め込む/Javaゲーム(シューティング)の改良/人間関係を精査すること、職場の無駄な飲み会で意味の無いゴシップに時間を浪費しないこと/ジョギング11km、走力の回復とコエンザイムQ10/韓国語の音読、夕方のピラセタムが有効


以前購入したHTML5とCANVASで作るRPGという本を見て作ったゲーム。
画面をクリックしてから上下左右ボタンとENTERキーで遊べます。
RPGです。
クソゲーというか、クズゲーですが・・・

ゲームの基礎は本に書かれていたソースを元にしていますが、それをかなり改造して書き替えています。
魔法を追加したり、道具を追加したり、レベルアップのシステムを追加したりしています。

このゲームはJavascriptですが、昨日は職場でJavaの方のゲームを改良していました。

気付かなかったんですが、シューティングゲームでボスにやられてゲームオーバーになったときに、ボスオブジェクトにnullを代入していなかったために、死んでからもう一度同じステージをプレイすると、前と同じボスが同じ状態で再登場してしまうというバグが出てしまいました。
そのため、Boss=null;というような一文を書くという極めて基本的な作業をしていました。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


どんな外国語でも半年でマスターしてしまう方法 | クリス・ロンズデール | TEDxLingnanUniversity
「どんな大人でも半年以内に外国語を流暢に使えるようになる」と言ったらどう思いますか? 心理学研究に基づく5つの原則を守り7つの実践を行うことでそれは可能だとクリス・ロンズデールは言います。才能も現地生活も必要ありません。
引用元:YOUTUBE

イングリッシュ・デフ=英語聴覚障害

人間の脳には聞きなれた言葉しか聞き取れないというフィルターがあるため、たくさん聞いたり喋ったりするトレーニングが必要だという。
つまり、語学学習は勉強ではなく、むしろ身体トレーニングなのだという。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・



自分はなぜ人付き合いを最小限にしようとしているのか。
自分はなぜ恋愛や結婚に対して消極的になっているのか。

最近、その原因が分かってきたというか、
そもそも分かっていたものを再認識できるようになってきたと言った方がいいかもしれない。

まず、自分の欲求として、
難解なものを理解できるようになりたい。
今まで出来なかったことを出来るようになりたい。
人より優れた存在でありたい、なりたい。

という、人生における達成欲求が自分の人生のプライオリティ・ワンになっていて、
それを妨げる人間関係の煩雑さを只管避けようとしている自分がいる。

職場の人たちとつるんで飲み会に行ってると、たいていは、
・職場の子ども、特に言うことを聞かない子の悪口
・上司や同僚の批判、悪口、ゴシップ
・スポーツや芸能の話
・結婚や子育て、家族の話

などなど、特に目新しい話題もなく、気付いたらいつも同じことを話している。
酔いが入ってくると尚更いつもと同じ話題のループになってくる。

正直、そういう話に付き合っていることが面倒というか、時間の無駄という感覚があって、
人付き合いを最小限に削減したいという想いが、30代になるころから生まれてきた。

人生で達成したいことを成し遂げるためには、無駄な人付き合いを減らすべきだと考えるようになった。
結果的に、ちょっとコミュ障っぽい感じになってしまったのも事実だけど。

・・・・・・・・・・・・・・・・・・・・
達成したいこと?
・・・・・・・・・・・・・・・・・・・・

難解なゲームのソースコードを何度も読んで理解して、自分なりにゲームを再構成してプログラムすること。

難解な英語の文章を読んだり聞いたりして、自分の意見を構築してスピーチすること。

中国語や韓国語を理解して会話すること。4ヶ国語YOUTUBERになる目標を実現すること。

今回のエキシビジョンもそうだけど、誰もできないようなイベントを企画して大勢をサプライズさせること。
(4年前にも自分の担当している子ども39人を総動員して劇をやったよ 社長からは怒られたけど、同僚や親は驚いていた)

普通の人には描けないようなイラスト・絵画を短時間で描くこと。そして、個展を開くこと。

多くの哲学書などの書籍を読んで理解し、この世界の事実の相互関係を抽象的に理解すること。

株式投資で儲ける仕組みを理解して、一生涯では使い切れない富を自分の力で稼ぐこと。

・・・・・・・・・・・・・・・・・・・

難解とか、不可能とか、難しくて出来ないっていうことが自分の知的好奇心を駆り立てる。

達成したいことというよりは、この中の多くは既に実現していることではある。

友達に中には私と同じように人生の野望・野心をもっていて、お互いにインスパイアしているような人もいる。
きゃわいたさんがその一人かもしれない。

ike.jpg

きゃわいたさんは、私のことを尊敬している。
というのも、嘘・はったりではなく、きゃわいたさん自身が言っていたからだ。

私もきゃわいたさんを尊敬している。
仕事をしながらビジネスを始めたり、投資に積極的に挑戦したり、
それでいて、歌が誰よりも上手いんだよ、彼は。

相互インスパイア関係は、彼しかいないかもしれない。

・・・・・・・・・・・・・・・・・・・・

スポーツの試合を見に行くことが楽しみの人がいて、
年齢相応の結婚や子育てをすることがステータスの人がいて、
家・マンション・車を持っていることがステータスの人がいて、
セクロスが人生の楽しみな人がいて、
人の噂・ゴシップ・悪口が楽しみな人がいて、

・・・・・・・・・・・・・・・・・・・・

そして、そういうものの全てから離れていたいという自分がいる。

私にとっては、難解なものを理解し、不可能なことを可能にすることの方が素晴らしく崇高で価値のあること。

結婚や子育てを半ば諦めた自分としては、株で大金を稼ぐことが老後のケアギバーを得るための手段でもある。
かすかな希望はあるものの、毎回失敗しているので失望しています。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

昨日はNOVAでした。
韓国語で講師と私のラッキーマンツーマンでした。

ですが、会話が続かず、講師にアクビをさせてしまいました。
英語だったらこんなこと絶対に無いのに。
英語だったら、どんなシチュエーションでも講師に対してチャレンジングな質問を投げかけて会話を盛り上げられるのに。

結局、韓国語の実力不足。

明確な練習方法は音読を繰り返すということしかない。
これ以上明確に上達をさせられる練習方法は無い。
集中して練習するバッチの時間が必要だ。
バッチの時間が無いと、脳細胞を再構成することができないからだ。

夕方にピラセタムを飲むことも有効だということが分かってきた。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

今日は11kmジョギングをしてから、DMM英会話、そして、アトリエ。

ジョギングの走力は若干、回復しているように思える。
昨日からコエンザイムQ10を服用している。
鉄分はこの2週間飲んでいる。

アトリエでは会長が人の私生活を詮索してくるのが嫌な感じになってるのが困る。
中学生の男の子もいろいろと時々聞いてくるので避けている。

ゲームの拡張、バリアーの追加、画像の追加、ステージの拡張/DMM英会話の予習「心臓発作」/ギャランティスのアルバムをダウンロード


Galantis - No Money (Official Video)

ギャランティスをiTunesでダウンロードしました。

Maroon5に続いて、自分にベストマッチの音楽を探求する日々は続く。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

DMM英会話の予習

Heart attack types and diagnosis

A heart attack is also called a myocardial infarction, sometimes simply referred to as an “MI.” A heart attack occurs when a blockage in one or more coronary arteries reduces or stops blood flow to the heart, which starves part of the heart muscle of oxygen.

The blood vessel blockage might be complete or partial:
•A complete blockage of a coronary artery means you suffered a STEMI heart attack – which stands for ST-elevation myocardial infarction.
•A partial blockage translates to an NSTEMI heart attack – a non-ST-elevation myocardial infarction.

Diagnostic steps differ for STEMI and NSTEMI heart attacks, although there can be some overlap.

引用元:http://www.heart.org/en/health-topics/heart-attack/diagnosing-a-heart-attack

今日の朝のDMM英会話は心臓発作について

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

mai.png

昨日はいつものコースを10kmジョギングしたけど、走力が落ちてしまい、途中で歩いてしまう。
朝、に1kmのコースをダッシュする練習をしたら改善すると思う。

ダラダラ走っていても時間の無駄になってしまう。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

yu.png
fi.png

昨日は午後からゲームプログラミングの拡張をしていました。

・ステージを4から6まで延長
・ボスキャラの絵、新しい背景の絵を追加
・ボスの動きを定義
・マップデータの新規作成
・アイテムを必要数取ったらバリアーが出る設定を追加

その後ゲームパッドでゲームをしていました。

これで、子供たちに描いてもらった絵は全て入れて、実質的に完成となりました。
店の追加
壊れる壁の追加
ワープゾーンの追加
溜め撃ちビームの追加
爆弾の追加
ボスがやられるときのエフェクトの追加

これらは今後時間があり次第追加していく。

今の仕様でグラディウスみたいなゲームになっているので、
頑張ってアールタイプみたいなゲームになるようにゲームを拡張していく。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

今週が始まる。
月曜は休みでした。

今週のやることを確実に終わらせて、
土曜日のデートが問題なく終わればOK。

株も値上がりしてくれるのを待つのみ。

近所のプログラミングスクールがダメだった件/キャスケット帽が欲しい/本物ペニーボードで町内一周もストレスフリーで/YOUTUBE、英語の原稿作成と中韓国語の朗読練習、そして撮影

kyasuketto.jpg
キャスケット帽 欲しい。

kyasukettomenzu.jpg
キャスケット帽 メンズ

kyasukettochuusei.jpg
中性的な感じのモデル、メンズでもレディースでも似合いそう。

今日、アトリエからの帰りに買おうかな・・・。
どこかに店があれば良いんだけど。

orinasu.jpg
FLAVA 錦糸町 オリナス店

sibuyabousi.png
渋谷 C P H | C−PLUS HEAD WEARS

一方でキャスケット帽はダサいっていうGOOGLEサジェストがあって気になるんだけど。
でも、さ。
自分じゃなきゃできないファッションをするべきだよね。
第三者の意見は取り入れるとはしても。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

puroguramingusuku-ru.jpg
昨日はプログラミングスクールに行ってきました。
バスで一之江まで行ってからの地下鉄です。

気がついたんだけど、ここってミルキーの本部があったところ???
なんか懐い感じがしました。
10年以上前にミルキーで働くときに最初に来た場所です。

で、プログラミングスクールなんですが、
受講しないことにしました。

理由なんですが、
1.すごくダルい、基本的なこと(For文とか)から全部やらないといけないこと
2.基本しか勉強できないこと
3.ゲームプログラミングみたいな難解なことは教えてくれないこと
4.ゲームプログラミング講座はあるのにenchant.jsをいじるだけ→→それはゲームプログラミングとは言わない
5.しかもゲームプログラミング講座だと22000円もかかること
6.普通の講座でも入会金5500円、月謝9900と割高なこと

初心者ならまだしも、経験者がもろ高い値段を払って通う価値はあるのかというと疑問が大です。
しかも、値段が割高だと感じました。
ターゲットはいったい誰・どんな人なのでしょう。

enchant.jsはゲームプログラミングじゃないでしょ。
誰だって作れるし、それで、22000円ってボッタクリだと思います。
ゲームが作れますで、中高生を持つ親を釣ってるとしか思えない。

今はタイムチケットで土曜日に1時間3000円でアンドロイドを教えてくれる人とつながってます。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

peni_2018050606350519a.png
今朝は4:30からペニーボードで町内を一周してきました。

偽者ペニーと違い、本物はターンも楽々で、スピードも出て、音も静かで、ホントにストレスフリーです。

本物、買って良かった!!!!!

あのまま偽者でガーーーーー!!!
とかうるさい音出して乗ってたら赤っ恥モノだったよ。
ま、良い練習にはなったけど。

偽者ペニーで練習したから、本物ペニーでもすぐに乗れたってことで。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

今日のTODO

4:30 ペニーボードで町内一周
6:00 YOUTUBER 英語の原稿作成・中韓国語の原稿を読む練習
7:30 ジョギング 2km
8:00 YOUTUBER映像撮影
9:00 DMM英会話
9:30 アトリエに出発

ロールプレイングゲーム、戦闘中の画面遷移の処理で苦労する

rpg2017717.png
魔法を使うと、そこで戦闘が止まってしまう。
このようなバグを一つ一つ解明して潰していく予定。
現在、4:31。

if(str.equals("キュアー")){
if(mp>=3){
game_flags[44]=true;

mpが3以上で フラグが44ならキュアーが発動する

1855行目

mpが0でもキュアーを唱えている

if(game_flags[44]){
//System.out.println("キュアーを使った");
hp += 20+level*3;
mp -= 3;

if(hp >= Maxhp)hp=Maxhp;
game_flags[44]=false;//この2行を足すとキュアーを唱えられなくなる
game_flags[23]=true;

}
2114行目のゲームフラグ38は反応あり

2114行目と2115行目は意味ありそうなのでコメントアウトを外す。

elseに入った が悪さをしてそう

1813行目
/*else{
System.out.println("elseに入った");
counterMagic++;
game_flags[38]=game_flags[39]=true;//ここはなんなのか?
}*/
コメントアウト

1845行目
game_flags[38]=game_flags[39]=false;を足してみる

1836行目
game_flags[38]=game_flags[39]=false;//ここ追加7/17
//ここを足すとMP不足になってからおかしくなる

ゲームフラグ38が悪さをしている可能性が高い

1857行目 ゲームフラグ40がTRUEなのはおかしい

ゲームフラグ38も明らかに悪さをしている
1856行目にフラグ38と39をfalse入力

1871行目にフラグ38のFALSEを入力
game_flags[44]のメソッドを上のネストに入れる

1875行目にnextdo_flagsy=0を書く

とりあえず、フラグ38をFALSEにするタイミングでnextdo_flagsy=0を同時に行う
どこかの時点でおかしいのでキュアーが選べないバグ

今度は魔法を使っても攻撃になってしまった。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

デバッグの手法を変えないと、頭のスイッチを切り替えないと、このまま行き詰ってたら挫折してしまう・・・・・

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

目標、午前中にDMM英会話を入れて、そこを目標にデバッグの第一弾を終わらせる。

そして、13:00~14:00ごろにジムに行く予定を立てて、それまでに大規模な構造改築を終わらせる。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

1882行目あたり、フラグ44のIF文の中でフラグ管理を行うとちょっと上手くいった。

魔法を唱えると同時に敵も攻撃してしまう。
攻撃描画処理の中で攻守交替処理を書いているので、魔法も同じようにする。
それと、一度キュアーを選ぶと、次から魔法を選択すると、勝手にキュアーになってしまう。
そこを改善する。


今、10:30。
4:30から始めたけど、1時間ぐらい食事やDMM英会話もやっているので、4時間半ぐらいプログラミングをしていた。

自作ロールプレイングゲームの進展、「やくそう」を使えるようにした

yakusou1.png
昨日、実装した仕様。
やくそうを使用すると、・・・・・・。
↓↓↓

yakusou2.png
HPが回復して、道具リストからやくそうが消える。

書いたソースは以下の通り

else if(itempointer>=1){
String str=null;

str=item.get(itempointer-1);
//System.out.println("アイテム名=="+str);
if(str.equals("やくそう")){
hp += 30;
if(hp >= Maxhp)hp=Maxhp;
item.remove(itempointer-1);

ここでitempointer変数を-1しなかったためにバグが出続けていた。
itempointerが0のときは、もどるボタン
itempointerが1のときは、やくそうだけど、item配列の0番目にやくそうが入ってるため、itempointerを意図的に-1する必要があった。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

minamisenju.jpg
今から9年前、上野のビルの一室で始まった私のプログラミング人生。

当時は、DOJAというテクノロジーを使ってゲームプログラミングを勉強していた。
結局、DOJAは携帯電話で使われるテクノロジーだったので、私がDOJAで何かを作ることはなかった。

その後、飯田橋などに場所を変えてプログラミングを勉強し続けたんだけど、今、私がやっていることは、ゼロから初代ドラクエみたいなゲームを作ること。

朝、余裕があるときはJavaの開発環境に向かってプログラミングをして、
そして、月に1回、プログラマーさんに助言をもらっている。

実際のところ、初代ドラクエは、ほぼ骨組み部分は完成しつつある。

・・・・・・・・・・・・・・・

次に実装したいのは、「店」で道具を買うことと、装備をすること。
多分、マップとグラフィックを再度整理しないといけないと思う。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

1486411184385.png

今日のDMM英会話の予習のために、下のような記事を読んでいた。
i Phoneがデビューしてから10年、私たちの生活は大きく変わったし、今さらそれを取り除くことはできない。
そして、今から10年後、どんなテクノロジーが登場するか、それを予測することは難しい。

OPINION: This year marks the 10th anniversary of the iPhone's debut, the start of a societal revolution that no-one quite expected and a chance, perhaps, to reflect on the impact of the revolutionary technologies to come.

The iPhone's rapid takeover of our everyday lives has been nothing short of astonishing. We rely on these devices to navigate almost every aspect of our lives.

It's probably too late to peel ourselves away from our screens: Who, after all, wants to give up instantaneous contact, the Internet at our fingertips, a GPS in every pocket and self- portraits on demand?

But it might be the right moment to pause, recognise just how quickly and thoroughly smartphones upended our ways of being, and consider whether a more intentional approach might be merited when the next "revolutionary" tool arrives.

引用元:http://www.stuff.co.nz/technology/digital-living/89137594/Beware-the-next-tech-revolution

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

Reen al la tago-al-taga
日常に戻る(エスペラント語)

昨日は、やはりアトリエで絵を描いていた。
i Padを使ってだ。

一般人や、学生、子ども、講師たちと関わっていると緊張感が無いので落ち着く。

自作ゲームの進展、自分のダメージエフェクト、敵の強さデータの作成/今描いている絵の途中の絵/女性曲歌うんだったら原曲キーでいけよ

rpg56.png
自作ロールプレイングゲームの進捗

敵によって、敵の名前、HP、MP、強さ、お金、経験地を変更した。
画像は相変わらず楕円形だけど・・・

それから、自分がダメージを食らったときのエフェクトを追加した。

だいぶ進展してきたと思う。

今日書いたソースだけど、バグがあるので改善する予定。

public void tekiattack(Graphics g){
int rlimit = -10;
int llimit = 30;
if(tekidamagedcounter == 0){
hp -= tekihitdamage;
}
bufferg.setColor(Color.WHITE);
bufferg.drawString(tekiname+"の攻撃。",25,325);
bufferg.drawString(name+"に"+tekihitdamage+"ポイントのダメージをあたえた。",25,345);
if(!game_flags[24]){
if(repeatmy < 20){
if(window4x >= rlimit && moveXmy > 0){
moveXmy = -3;
repeatmy++;
} else if(window4x <= llimit && moveXmy < 0){
moveXmy = 3;
repeatmy++;
}
// System.out.println(tekix);
window4x += moveXmy;
}
if(repeatmy >= 20){
repeatmy = 0;
game_flags[35]=false;
}
}


[ゲーム動画] ファイナルファンタジー OP~ED (1987年 ファミコン)

こんなゲームを作りたい。


Javaでゲームを作ろう1 - シューティングゲーム編 -
もろ、スターフォースなゲームですね。


この本を買うと作れるようになるゲームです。
中級者以上向け。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

tochuu2.png
昨日、ネズミ王国駅のマクドナルドで描いていた絵。まだ、途中です。

i Pad proでアップルペンで描いてました。
他の客からジロジロ見られましたけど。

マックナゲットのわさびマヨはまあまあだったかな。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

jimu_20170506081102c71.jpg
昨日はネズミーシー近くのジムで運動しました。
時速10kmで25分、時速8kmで15分走りました。
さらに、筋トレをあれこれ。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


小飼弾の対弾 第一弾「天才プログラマー清水亮の履歴書」

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


三日月 キー2下げ

おい! 三日月ぐらい原曲キーで歌えよ!!!

右の人の方がうまい。


何度でも キー5下げ

何度でもぐらい原曲キーで歌え!!

普通に上手いけど。

昨日もカラオケでビブラートの練習をしていた。
高音域はHi Fは余裕で出ている。
ビブラートも徐々に上手くなってきたと思う。

こうやって、人って歌が上達するんだなって思っている。

女性曲も原曲キーで歌いまくってますが、何か。


この人、男なのに声キレイ!!!

女の声みたい。

って、途中まで思ってたら、サビで裏声のオ○マみたいな声になってがっかり。
高音域すごい無理してる。( ´,_ゝ`)プッ

女性曲歌うんだったら、原曲キーで歌えーー!!

高い声出ないんだったら、カラオケとかで毎日自分の最高音をシャウトし続けろ!!!!

自分ももっと歌うまくなってやる!!!!
課題はビブラートだって分かってるからっっ!

自作ロールプレイングゲームの進展、戦闘中に道具を使えるようになった/神奈川県までおでかけの昨日

rpgsentoudogu.png
自作ロールプレイングゲームの進展

戦闘中に道具を選べるようにした。
しかし、また、お決まりの不具合にて中断。

スムーズに進んでいるようでいて、ときどきバグが発生する。

次は戦闘中に魔法を使えるようにする。
それから、レベルアップや敵の強さを変える仕様を行っていく。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

今回書いたソース。

if(game_flags[32]){
counterItem+=1;
if(counterItem==1){
game_flags[33]=true;
}
}
if(game_flags[33]){
if(itempointer==0){
if(counterItem>=2){
game_flags[32]=game_flags[33]=false;
counterItem=0;
counterCommand=0;
}
}
if(key_states[0]==2){
System.out.println("アイテムポインターY"+itempointery);
System.out.println("アイテムポインター"+itempointer);
itempointery -= 30;
itempointer -= 1;//何番目をさしているか
if(itempointer <= 0)itempointer = 0;
if(itempointery <= 30){
itempointery=30;
}
}
if(key_states[1]==2){
System.out.println("アイテムポインターY"+itempointery);
System.out.println("アイテムポインター"+itempointer);
itempointery += 30;//30=>15
itempointer += 1;
if(itempointer >= numItems)itempointer = numItems;
if(itempointery >= 30*(numItems+1)){//itempointery >= 30*(numItems+1
itempointery=30*(numItems+1);
}
if(itempointery >= 330)itempointery=330;
}
}


この本、おすすめです。
ただし、ソースがCD-ROMなどで付いてないです。
この方のサイトでソースが拾えるかと思います。

http://kinchannn.jp/javagame_skk/
このサイトおすすめです。
調べてみたところ、ソースがZIPファイルでダウンロードできるみたいです。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

実家に帰りたい。
両親に久しぶりに会いたい。

もう5年も帰ってない。

祖母が亡くなってから。

母親に結婚しないのかと聞かれて、彼女のこととか弟から詮索されて、ちょっとうざくなってのが原因なんだけど。
自分としては、彼女や息子を連れて、晴れて実家に堂々と帰りたいと思いつつ。意地ばかり張ってしまって、もう5年も両親に会ってない。
横浜と東京で近いのに・・・

電話で、「帰ってきたら」って言ってくれたら、帰ってやってもいいんだけど・・・

母はどんなに老けただろう。
親不孝をしている自分が悔しくて。
でも、変えられない人生があって。
きっと、親が亡くなるときに、今の自分を後悔するのは明らかで・・・

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

odakyuu.png

昨日は楽しかった。
町田の方に行っていた。

電車の中ではi Pad proで絵を描いていた。
ちょっとずつ慣れてきたかもしれない。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

昨日、きゃわいたさんからラインで電話があった。

元同僚の大型さんの結婚式に参加したのに、なんで、私が来なかったのかということだった。
私が結婚できないのを苦に参加を拒否したのかと思っていたみたいだった。

個人的には、私は大型さんの結婚式に興味が無かっただけだったんだけど、あまり、後半関係が薄くなってきたし・・・

ゲームプログラミングの進展、道具コマンドでの不具合解決、魔法を覚えるようにした

rpgkyua-.png
今朝から進めていたゲームプログラミング

作っていたロールプレイングゲームがそれらしくなってきた!!
なんと、レベル2になると、回復魔法の「キュアー」を覚えるのだ。

はい、それだけです。

ケアルやホイミみたいな魔法です。

まだ、文字が表示されるだけで使うことはできません。(意味無し)
これから実装していきます。

しかしながら、ゲームがどんどん形になっていく感じがあるのが良い。

昨日出た道具コマンドを一度閉じたら開かなくなる不具合も直った。
今回追加したソースは以下。

if(game_flags[18]&&nextdo_flagsy==0&&nextdo_flagsx==0){
counterCommand+=1;
System.out.println("カウンターコマンド"+counterCommand);
if(counterCommand==2){//連続判定防止
game_flags[27]=true;
}
}
if(game_flags[27]){
counterItem+=1;
if(counterItem==1){
game_flags[28]=true;
}
}
if(game_flags[28]){
if(itempointer==0){
if(counterItem>=2){
game_flags[27]=game_flags[28]=false;
counterItem=0;
counterCommand=0;
}
}
}

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


JAVAでゲームプログラミングをする上でオススメの本。

すぐに動くソースが付いているので、「改造」することからゲーム開発を覚えられるヨ。↑↑

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


Mortal Kombat Style Fighting Game with Java


Java Dragonball Z Fighting Game

Javaでゲームを作ってる人たち。
自作でこのレベルは凄いと思います。

No im sry most things I learned with learning by doing.sometimes I asked for help on java forums or etc if couldnt solve a problem by my own. But experience is very important, so start with easy games/projects and work through to complexer games like such a fighting game.
引用元:https://www.youtube.com/watch?v=OA_ODrCHUUQ

上のドラゴンボールのゲームを作った人が言った言葉です。(引用文)
経験が大事で、簡単なゲームから徐々に複雑なゲームを作っていったのだと言っています。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

tako.png

・・・・・・・・・・・・・・・・

今日はちょっと外出してこようと思います。
それにしても、スカパーが不具合で映らないのが気になる。
一応、スカパーにメールは送ったんだが。

宿泊座禅会へ問い合わせをしているが、電話に出んわ。
なぜいつも留守電なんだろう。

ゲームプログラミング、敵を倒すことがきる。次は、アイテムを「落とし」て「拾える」ようにする。

rpg52.png
今日は朝5:00からプログラミングをしていた。

敵を倒した後に出るバグを解決。

次のステップに進めるようになった。
次は、敵がアイテムを落とし、自分の手持ちのアイテムが増えるというアレだ。

まずは、「やくそう」を落とさせようと思う。
そして、配列にやくそうを入れたり、出したりするようにする。

ようやくロールプレイングゲームが形になりつつある。

「道具」や「魔法」を実装していければと考えている。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

さて、今までJavaアプレットでプログラミングをやってきたんだが、アプレットの利用が正式に終了している中で、自分なりに現在のアプレットのソースをHTML5に書き替えようと思っている。

JavaとJavascroptは似ているところも多いものの、やはり、そのままというわけにはいかないので、時間が必要かと思われる。

アトリエで知り合ったプログラマーさんにはUnityを薦められたが、イマイチ、気が乗らない。
ちょっと触ってみようかと思うけど。

敵ダメージ時の画面エフェクトを追加

rpg425.png
日曜日に追加した制作中のRPGの仕様

プレイヤーが攻撃すると敵が左右にブルブルふるえます。
ダメージ時の画像エフェクトです。

逆に、敵からプレイヤーがダメージを受けたときは、ウィンドウがふるえるなどのエフェクトを加えようと予定しています。

・・・・・・・・・・・・・・

書き替えたゲームのソース

public void attack(Graphics g){
int rlimit = 117;
int llimit = 107;
bufferg.setColor(Color.WHITE);
bufferg.drawString(name+"の攻撃。",25,325);
bufferg.drawString(tekidata+"に"+hitdamage+"ポイントのダメージをあたえた。",25,345);
if(tekix >= rlimit && moveX > 0){
moveX = -1;
repeat++;
} else if(tekix <= llimit && moveX < 0){
moveX = 1;
repeat++;
}
System.out.println(tekix);
tekix += moveX;
if(repeat >= 20){
game_flags[22] = true;
}
}


ファミコン ドラクエ1
目指しているゲーム。

・・・・・・・・・・・・・・・・

ゴールデンウィーク中までに完成したい仕様

・プレイヤーが攻撃→敵を倒す
・敵が攻撃→プレイヤーがダメージOR死に
・および、そのエフェクト

・敵によって攻撃力やHPを変える

・経験値によってレベルが上がる
・レベルによるステータスの変化

・レベルアップによる魔法の習得
・フィールド画面での魔法の使用
・戦闘画面での魔法の使用

・道具の獲得
・フィールド、戦闘画面での道具の使用

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

特定 パナソニック(株)
[東]6752 現物
- 売 200 1,308 04/24
当日 約定済 200株-1,308円

1280円で買いなので、5600円の利益

特定 (株)ミスターマックス
[東]8203 現物
- 売 1,000 440 04/17
当日 約定済 1,000株-445円

424円で買いなので、21000円の利益

累計総株利益  :340万7174円
国内株利益 : 261641円
配当金利益 : 2391円

三昨年国内株利益 :90万5377円(2013年確定)
二昨年国内株利益 :70万9719円 (2014年確定)
一昨年国内株利益 :64万1363円(2015年確定)
昨年国内株利益   :51万6103円(2016年確定)
三昨年配当金利益 : 2万7227円(2013年確定)
二昨年配当金利益 : 6万3409円(2014年確定)
一昨年配当金利益 : 7万1764円(2015年確定)
昨年配当金利益  : 8万2686円(2016年確定)
三昨年中国株利益 : 8万8000円(2013年確定)
一昨年中国株利益 : 6万6414円(2015年確定)

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

screen480x480.jpg
procreateで誰かさんが描いたイラスト

procreateで今は城の絵を描いている。
ファンタジー系のイラストをたくさん描きたい。

それに、今作っているゲームが本格的に完成したら、グラフィックの凄いゲームにするために、procreateで敵キャラをたくさん描いていくってのもワクワクする。