スポンサーサイト

一定期間更新がないため広告を表示しています

スポンサードリンク | - | | - | - |

FightCode

FightCodeというブラウザゲームをやってみた。

javascriptでロボットの行動をプログラムして戦うゲーム。

そうそう、僕がイメージしてたのはこういうやつ!昔あったカルネージハートというゲームもこういう感じらしくて気になる。

 

たとえばこのコードは砲塔を一度ずつ回しながら索敵して視線上に敵がいたら射撃、再度砲塔回転に戻るというもの。


//FightCode can only understand your robot
//if its class is called Robot
var Robot = function(robot) {

};
var n = 1;
Robot.prototype.onIdle = function(ev) //アイドル時
{
    var robot = ev.robot;
     robot.rotateCannon(n);
 };

 

Robot.prototype.onScannedRobot = function(ev) //視線上に敵がいたとき
{
    var robot = ev.robot;
    robot.fire();
};
 

次のように変えると

 

Robot.prototype.onScannedRobot = function(ev) //視線上に敵がいたとき
{
    var robot = ev.robot;
    robot.fire();

    n = 0;
};
 

敵がみつかったら砲塔回転完全にやめて連射する。でもたぶんその後敵見失ったら絶望。

 

これ面白いぞ。

ジャジャガッチ | コンピュータ | 23:13 | comments(0) | trackbacks(0) |

unityで最速降下曲線

unityでサイクロイド曲線にボール転がしてみた。

 

まずサイクロイド曲線のパラメータを決める必要がある。

θ=0で(x,y)=(0,0)とすると

x=A(θ-sinθ)

y=A(1-cosθ)

という式で表される。(0,0)と(x0,x0)を結ぶことにすると

A(θ0-sinθ0)=A(1-cosθ0)

となる。θ0について解けばθ0≒2.41201となる。あとは具体的にx0の値を決めればAも決まる。

x0=-10として次のコードでサイクロイドの座標を生成した。

 

#include <stdio.h>
#include <math.h>

int main()
{
    double theta0 = 2.41201;
    double x0 = -10, y0 = -10;
    double A = y0 / (1 - cos(theta0));

    for (double theta=0; theta<=theta0; theta+=0.05)
    {
        double x = A*(theta - sin(theta));
        double y = A*(1 - cos(theta));
        printf("%e %e¥n", x, y);
    }

    return 0;
}

 

座標データをjwcadに取り込んでdxfファイルに変換し、creo elementsに取り込んで坂を作成した。生成したstlファイルをblenderに取り込んでobjファイルをエクスポートすればunityにインポートできる。

creo elementsに取り込むときの注意としては、ちゃんと坂をワールド原点付近にとらないと、unityで配置するとき苦労する。

スタートゲートは上キーで開くようにした。

    void Update () {
       // Destroy(gameObject);
        if (Input.GetAxis("Vertical")!=0) Destroy(gameObject);
    }

ジャジャガッチ | コンピュータ | 22:56 | comments(0) | trackbacks(0) |

unityに任意曲面データを取り込む

任意曲面でボール転がしてみたいのでまずは3dデータを作りましょう。

まずは3次元の数値データを用意します。

z = √x^2+y^2としました。

 

#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;

int main() {
    for (double x = -10; x <= 10; x += 0.1)
        for (double y = -10; y <= 10; y += 0.1)
        {
            printf("%f %f %f¥n", x, y, sqrt(x*x + y*y));

        }
}

 

これをMeshで読み込ませた後、

 

Filters/Pointset/Compute nomals for point seets/

 

を実行。次に

 

Filters/Remeshing simpleification and Reconstruction/Surface Reconstruction : Ball Pivoting/

 

を実行してメッシュにします。最後にスムージング。

 

Filters/Smooth ,Fairing and Deformation/Laplacian Smooth/

 

あとは適当な形式で保存すればOK。

 

このままunityに取り込めばいけるかなと思ったが、どうもうまくいかない。

厚みがゼロなのが悪いのかな。

3dプリンタも視野に入れて厚みをつけとくか。

 

blenderにMeshLabから出力したファイルを読み込ませます。

 

左下のボタンでモード変更してエディットモードにします。

aキーを押すと全選択されます。Ctrl-F=>Solidifyで厚みがつきます。

左側にThicknessというウィンドウが表示されるのでここで厚みを変えれます。

あとはobjとかでエクスポートすればOK。

 

あとはunityで取り込んでdefault_MeshPart*のMeshColiderにチェックを入れればOK。テンション上がる!

副産物として3Dプリンタで任意曲面作れるようになった。

次はサイクロイド取り込む?

ジャジャガッチ | コンピュータ | 14:48 | comments(0) | trackbacks(0) |

unityおもろいな

久しぶりにゲーム作りたくなったので、かなり前から話題のunityに手を出してみた。

C#はよく知らないがきっと大丈夫。

とりあえず玉転がしのチュートリアルを飛ばし飛ばしなんとなくやってみた。

すげえ、簡単にゲーム作れそう。

ジャジャガッチ | コンピュータ | 14:07 | comments(0) | trackbacks(0) |

codingame

paizaの配信メールでcode warriorsというブラウザゲームを知った。

コーディングしてロボット同士で戦うというもので面白そうなのでやってみた。

が、あんまりコーディングする意味を感じなくて面白くなかった。チュートリアルしかやってないので先に進めば面白いのかもしれないけど。ターン制なのでコマンド選択をコードでやってるだけという感じがしたんだけど。

それで消化不良感があったのでempire of codeというゲームを試してみた。リアルタイムストラテジか?こっちのほうが面白そうな感じはしたが、やはり何か求めてるものとは違う感があってチュートリアルだけでやめてしまった。

 

次にcodingameを試してみた。ミニゲームをクリアしていく感じで面白そう。

というわけでいっこやってみた。画面は下のような感じ。

このゲームの目的は主人公を雷マークへ導くこと。

最初は次のコードが雛形として与えられている。

 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

/**
 * Auto-generated code below aims at helping you parse
 * the standard input according to the problem statement.
 * ---
 * Hint: You can use the debug stream to print initialTX and initialTY, if Thor seems not follow your orders.
 **/
int main()
{
    int lightX; // the X position of the light of power
    int lightY; // the Y position of the light of power
    int initialTX; // Thor's starting X position
    int initialTY; // Thor's starting Y position
    cin >> lightX >> lightY >> initialTX >> initialTY; cin.ignore();

    // game loop
    while (1) {
        int remainingTurns; // The remaining amount of turns Thor can move. Do not remove this line.
        cin >> remainingTurns; cin.ignore();

        // Write an action using cout. DON'T FORGET THE "<< endl"
        // To debug: cerr << "Debug messages..." << endl;


        // A single line providing the move to be made: N NE E SE S SW W or NW
        cout << "SE" << endl;
    }
}

 

coutで移動できる仕様となっている。これを改変して目的を達成するわけだ。

動かすと主人公が実際に移動する様子が見えてうれしい。

やってることは競技プログラミングみたいなもんなんだけど、絵があると断然うれしいな。

次のコードでクリアできた。

 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

/**
 * Auto-generated code below aims at helping you parse
 * the standard input according to the problem statement.
 * ---
 * Hint: You can use the debug stream to print initialTX and initialTY, if Thor seems not follow your orders.
 **/
int main()
{
    int lightX; // the X position of the light of power
    int lightY; // the Y position of the light of power
    int initialTX; // Thor's starting X position
    int initialTY; // Thor's starting Y position
    cin >> lightX >> lightY >> initialTX >> initialTY; cin.ignore();
    
    int tx = initialTX;
    int ty = initialTY;
    // game loop
    while (1) {
        int remainingTurns; // The remaining amount of turns Thor can move. Do not remove this line.
        cin >> remainingTurns; cin.ignore();

        // Write an action using cout. DON'T FORGET THE "<< endl"
        // To debug: cerr << "Debug messages..." << endl;


        // A single line providing the move to be made: N NE E SE S SW W or NW
        //cout << "SE" << endl;
        if(lightY-ty > 0)
        {
            cout << "S";
            ty++;
        }
        else if(lightY!=ty)
        {
            cout <<  "N";
            ty--;
        }
        if(lightX-tx > 0)
        {
            cout << "E" << endl;
            tx++;
        }
        else if(lightX!=tx)
        {
            cout <<  "W" << endl;
            tx--;
        }
        else
        {
            cout << endl;
        }
        
    }
}

ジャジャガッチ | C/C++ | 23:19 | comments(0) | trackbacks(0) |

数学定数の分数表現探してみた

355/113的なやつ探してみた。

https://jajagacchi.github.io/pi2/pi.html

ジャジャガッチ | 数学 | 23:39 | comments(0) | trackbacks(0) |

三角関数の値を素朴に計算してみた

三角関数表ってどうやって作ってんだろうっていう疑問から素朴に三角関数の値計算してみた。

 

https://jajagacchi.github.io/tri/tri.html

ジャジャガッチ | 数学 | 23:05 | comments(0) | trackbacks(0) |

モンテカルロ法で円周率を計算してみる

誤差解析してみた。

https://jajagacchi.github.io/pi/pi.html

ジャジャガッチ | 数学 | 22:49 | comments(0) | trackbacks(0) |

円周率は3.14か

ゆとり教育批判真っ只中の頃は円周率が3なんて!という批判がよく聞かれた。結局これはデマだったようだが。

円周率3が批判される理由のひとつとして、円周率が3だとその円に内接する正六角形と周長が等しくなってしまう、というものがある。

でもこれは3.14でも同じ話だ。円周率が3.14の場合は正57角形が3.1400*で少し円より周長が長くなる。

批判するならこういうことを踏まえた上で批判しましょう。

 

ゆとり教育の円周率3は、場合によっては3で代替するというくらいの話だったようだ。

これは賛成だ。概算という考え方は非常に重要だ。

買い物するときにこれは108円でこれは216円でみたいな足し算中々しないでしょう。

大体これが100円でこれが200円で大体いくらかな、という考え方をするでしょう。

例えば、次のような問題を考える。

 

問. A君は半径2の円の面積が30よりも大きいと言っています。真偽を答えよ。

 

愚直に3.14×2×2を筆算しちゃう子も出てくるんじゃないかと思うんだけど、これは円周率を3ないし安全策で4ととれば瞬時に判断できる。

こういう判断が出来るのは実生活でも科学でも重要じゃないでしょうか。

 

あと関係にないけど曲がった空間では円周率は3.1415…じゃないよ。みんなボールに円を描いて円周率考えてみよう!この場合、円周率は描く円の半径に依存する。面白いね。

 

ジャジャガッチ | 数学 | 21:49 | comments(0) | trackbacks(0) |

TOEIC 700点超えたわ

うん、2月に受けたTOEIC 735 (L:400/R:335)だった。

今年の目標が700突破だったのでもう目標達成してもうたわ。ハードル低すぎた???

以前の結果で手元にあるのは2015/08に受けた530(L:245/R:285)だけだけど、ちょっと経過をメモがてら記録しとく。

 

2015/10から英会話が必要になるのが確定していたため、事前に受けたのが2015/08で530。学生時代に受けたのも入社直後に受けたのも550くらいだったのでまあそれくらいの英語力で上がらず下がらずで数年やって来たって感じ。

2015/10から死にそうになりながら英会話して2016/02に受けた結果が650くらい。リスニングが100点上がってた記憶あり。2016/04くらいから精神的に余裕がなくなって英語の勉強はストップしていたが、2016/08の結果はほぼ変わらずやはり650くらい。英語力が維持できていたとほっとした。2016/10からほぼ英会話の機会はなくなったが、2016/11から勉強を再開して2017/02で735。

結構いいペース?

 

ちなみにTOEIC向けの試験対策は一切していない。問題集も全くやってない。これからもする気はない。

今は単語力増強の為ひたすらDUOをやり続けている。

DUOをやりこんだら文法の基礎を押さえようかなと思っている。

スピーキングの練習もしとかないとなあ。

 

英語嫌いでも必要に迫られれば少しずつ出来るようになるんだねえ。

ジャジャガッチ | その他 | 22:59 | comments(0) | trackbacks(0) |
1/56PAGES | >> |

08
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH