2015年10月19日月曜日

test

#include "scriptparts.h"
#include "voice.h"

wstring g_LastString;
map g_Val;

int ReadBox(FILE *fp,const wchar_t *boxpath,int nst,int nIfFlg)
{
    long RtnLine=0;
    map l_Val;/* ローカル変数 */
    int nRet = 0;
    int nPos = 0;
//    wchar_t wszLine[LINE_SIZE] = {0};
    wchar_t wcsc = 0;
    wstring strLine;
    wstring strLast=L"";
    wstring func;
    map localVal;
    nst++;

//    printf("%d\n",nst);

//    while(fgetws(wszLine,sizeof(wszLine)-1,fp) != NULL)
    while((wcsc = fgetwc(fp)) != WEOF)
    {
        int nPos = 0;
        //strLine = wszLine;
        if(wcsc == L'\\')
        {
            fgetwc(fp);
            continue;
        }
        else
        {
            strLine = strLine + wcsc;
            if(wcsc != L'\n')
            {
                continue;
            }
        }
        //wcout << strLine << endl;
        nPos = strLine.find(L"!",0);
        if(nPos == 0)
        {
            /* 無変換で出力する */
            wstring substr = strLine.substr(nPos+1);
            wcout << substr;
            strLine = L"";
            continue;
        }

        nPos = strLine.find(L"#",0);
        if(nPos != wstring::npos)
        {
            /* コメントアウト */
            strLine.replace(nPos,strLine.size(),L"");
        }

        //strLine = wszLine;
        //改行削除
        nPos = strLine.find(L"\n",0);
        if(nPos != wstring::npos)
        {
            strLine.replace(nPos,1,L"");
        }

        if(strLine.size() < 1)
        {
            strLine = L"";
            continue;
        }
        //タブ削除
        while(1)
        {    int nPos = 0;
            nPos = strLine.find(L"\t",0);
            if(nPos == wstring::npos)
            {
                break;
            }
            strLine.replace(nPos,1,L"");
        }

        //スペース削除
        while(1)
        {    int nPos = 0;
            nPos = strLine.find(L" ",0);
            if(nPos == wstring::npos)
            {
                break;
            }
            strLine.replace(nPos,1,L"");
        }
        /* 変数の展開 */
        strLine = ExpandValue(l_Val,strLine);

        /* ローカル変数の宣言 */
        nPos = strLine.find(L"=",0);
        if(nPos != wstring::npos)
        {
        //    wprintf(L"きた\n");
            wstring c = L"=";
            c = strLine.substr(nPos+1,1);
    //        wprintf(L"%ls\n",c.c_str());
            if(c != L"=")
            {
                /* == ではないことをチェック */
                /* 変数の宣言 */
                if(nst == 0)
                {
                    SetVal(strLine);
                }
                else
                {
                    SetVal(strLine);
                    //SetLocalVal(l_Val,strLine);
                }
                strLine = L"";
                continue;
            }
        }

        /* 変数の展開 */
        strLine = ExpandValue(l_Val,strLine);

    //    wcout << strLine << endl;
        nPos = strLine.find(BOX_DEF_START,0);
        if(nPos != wstring::npos)
        {
            /* BOX定義開始だった */
            BoxSkip(fp);
            strLine = L"";
            continue;
        }

        nPos = strLine.find(BOX_DEF_END,0);
        if(nPos != wstring::npos)
        {
            /* BOX定義終了だった */
            break;
        }

        /* if_endが来た */
        nPos = strLine.find(IF_END,0);
        if(nPos != wstring::npos)
        {
            break;
        }

        /* else */
        nPos = strLine.find(ELSE_START,0);
        if(nPos != wstring::npos)
        {
            if(nIfFlg == 0)
            {
                //wprintf(L"elseでRead\n");
                strLine = L"";
                continue;
            //    ReadBox(fp,boxpath,nst,nIfFlg);
            }
            else
            {
            //    wprintf(L"else不一致\n");
                SearchElseIf(fp);
            }
            strLine = L"";
            continue;
        }

        /* elseif */
        nPos = strLine.find(ELSEIF_START,0);
        if(nPos != wstring::npos)
        {
            //wprintf(L"きてはいるんだよな\n");
            if(isMatchelseIf(strLine))
            {
                /* 一致した */
                nIfFlg = 1;
                strLine = L"";
                continue;
            //    ReadBox(fp,boxpath,nst,nIfFlg);
            }
            else
            {
                SearchElseIf(fp);
            }
            strLine = L"";
            continue;
        }

        /* ifの開始 */
        nPos = strLine.find(IF_START,0);
        if(nPos != wstring::npos)
        {
            //wprintf(L"ifきました\n");
            if(isMatchIf(strLine))
            {
                /* 一致した */
            //    wcout << strLine << endl;
                nIfFlg = 1;
                ReadBox(fp,boxpath,nst,nIfFlg);
                strLine = L"";
                continue;
            }
            else
            {
                /* 一致しなかった */
                //wprintf(L"一致してません\n");
                SearchElseIf(fp);
                //nIfFlg = 0;
                ReadBox(fp,boxpath,nst,0);
                strLine = L"";
                continue;
            }
        }

        nPos = strLine.find(IFLAST_START,0);
        if(nPos != wstring::npos)
        {
            /* iflastの開始だった */
            if(isMatchIfLast(strLine,strLast))
            {
                //一致した
                //wprintf(L"一致しました\n");
                ReadBox(fp,boxpath,nst,nIfFlg);
                strLine = L"";
                continue;
            }
            else
            {
                //一致しなかった
            //    wprintf(L"一致しなかった\n");
                iflastSkip(fp);
                strLine = L"";
                continue;
            }
        }
        nPos = strLine.find(IFLAST_END,0);
        if(nPos != wstring::npos)
        {
            /* iflast終了だった */
            break;
        }

        nPos = strLine.find(GOTOFIN,0);
        if(nPos != wstring::npos)
        {
            /* FINだった */
            GotoFIN(fp);
            strLine = L"";
            continue;
        }



        nPos = strLine.find(L"|",0);
        if(nPos != wstring::npos)
        {
            strLine = Which(strLine);
            //選んだ結果がboxだった
        }

        nPos = strLine.find(CALL_BOX,0);
        if(nPos != wstring::npos)
        {
            /* BOXをコールされた */
            nPos = nPos + wcslen(CALL_BOX);
            wstring title=strLine.substr(nPos);
            RtnLine = SearchBoxDef(fp,title,boxpath,nst,nIfFlg);
            ReadBox(fp,boxpath,nst,nIfFlg);
            fseek(fp,RtnLine,SEEK_SET);
            //fgetws(wszLine,sizeof(wszLine)-1,fp);
            strLine = L"";
            continue;
        }

        wcout << strLine << endl;
        //wprintf(L"%ls\n",RetString.c_str());
        g_LastString = strLine;
        strLine = L"";
    }
}


/* main関数 */
int main(int argc,char *argv[])
{
    int nRet = 0;
    FILE *fp = NULL;
    int nLine = 0;
    wchar_t wszLine[LINE_SIZE] = {0};
    wstring strLine;
    wstring func=L"";
    long *RtnLine = 0;
    wchar_t szBoxPath[MAX_PATH]={0};
    struct timeval tv;

    gettimeofday(&tv,NULL);
    srand(tv.tv_usec);
   
    setlocale(LC_ALL,"");

    if(argc <= 2)
    {
        wprintf(L"Usage filename boxpath\n");
        return -1;
    }

    if(argc == 2)
    {
         wcscpy(szBoxPath,L"./");
    }
    else
    {
        mbstowcs(szBoxPath,argv[2],sizeof(szBoxPath)-1);
    }

    fp = fopen(argv[1],"r");
    if(fp == NULL)
    {
        wprintf(L"%s not exist.\n",argv[1]);
        return -1;
    }

    ReadBox(fp,szBoxPath,-1,0);

    fclose(fp);

    return 0;
}

2015年8月31日月曜日

パーセプトロン未完成コード

//============================================================================
// Name        : perceptron.cpp
// Author      : konishi
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include
#include
using namespace std;

double CalcNet(double *pX,double *pW,int nSize)
{
    double net = 0.0;
    int i = 0;

    for(i = 0; i < nSize;i++)
    {
        net = net+pX[i]*pW[i];
    }

    return net;
}

void ChangeWait(double *pW,double *pX,double out,double Y,int nSize)
{
    int i = 0;
    for(i = 0; i < nSize;i++)
    {
        pW[i] = pW[i] + (Y-out)*pX[i];
    }
    for(i = 0; i < nSize;i++)
    {
        printf("%lf,",pW[i]);
    }
    printf("\n");
}

int main() {
    double net = 0.0;
    double W[3] = {0.0,0.0,0.0};        //重み
    double X[][3] = {{1.0,0.0,0.0},
                     {1.0,0.0,1.0},
                     {1.0,1.0,0.0},
                     {1.0,1.0,1.0}};    //入力信号
    double Y[4] = {0.0,1.0,1.0,1.0};    //教師信号
    double out = 0.0;
    int nLearnFlg = 0;
    do
    {
        nLearnFlg = 0;
        for(int i = 0; i < 4;i++)
        {
            net = CalcNet(X[i],W,4);
            out = net >= 0 ? 1.0:0.0;
            if((out-Y[i]) != 0.0)
            {
                nLearnFlg = 1;
                ChangeWait(W,X[i],out,Y[i],3);
            }
        }
    }while(nLearnFlg==1);

    printf("end\n");
    return 0;
}

2015年2月4日水曜日

やばい、UIデザインが難しい

ゲーム作成ツールでやりたいことがだいぶ決まってきたような決まってきてないような。
せっかく作ったアニメーション作成ツールも複数アニメーションを作ろうとすると、今ひとつ使いにくい。

で、またUI再作成。
VisualStdioをまねた感じにするしかない。

もう、なかなか進まないよ、今畜生。

2015年2月1日日曜日

アニメーション作成ソフト


ゲームのアニメーション画像を作るとき、大抵ひとつの大きな画像ファイルに複数のアクション(歩く、走る、飛ぶ、剣を振る、ダメージを受ける、魔法を使うなど)の絵を作成し、そこから必要な部分だけ切り出してフレームごとに表示します。

そうすると、いろんなアクションを固定位置に作成しておかないと、アニメーションが表示できません。
そしてアニメーションに変更が入ると、画像とプログラムの両方を直さなくてはならなくなります。

このソフトはアクションごとにフレームの位置をCSV形式で吐き出します。
そのため、アニメーションに変更が加わったとき、CSV形式のファイルだけ差し替えれば、
プログラムの修正はいらなくなります。
もちろん、CSV形式のデータを読み込むクラスを使用する必要はあります。



2015年1月26日月曜日

UNDOとREDOの実装が地味にめんどくさかった

ここのところ、オンラインゲームを作るのか、それともandroidで動くゲームを作るのか迷いが生じています。
悩みながらなのであまり進みませんが、どちらを作るにせよ、必要となるのがマップ作成ツールとアニメーション作成ツール。

最近まで作っていたマップエディタは使いにくい。
そんで直そうとすると、設計がいまいちなので大修正。
進まねー!!

そんなわけで作り直し中ですorz。
今日は、アニメーションツクールに着手。
ちっこいウインドウから画像を切り出して大きいウインドウに並べるツールです。
32×32単位で切り出せます。
で、メイン画面を矩形で選択し、キー割り当てを設定するとアニメーションが表示できるようにするつもりです。
で、それが出来たらアニメーションフォーマットでファイル出力。

そんでもって、地味にUNDOとREDOの実装がめんどくさかった。
画像をメモリに全部覚えさせていると、すぐにメモリ不足エラーが起きました。
そんなわけで、ひとまずtempファイルに画像を逐一出力して、いつでも戻せるようにして、記憶できる画像数を増やしました。

アニメーションが動くようになったら面白いんだけどなー。
まだまだかかりそうだ。

2014年12月7日日曜日

ドット絵描ける人募集中

 色々考えた末、ドット絵ベースのMMORPGを作ろうかと思いはじめ、コーディングを始めました。
言語はJAVA。ゆくゆくはandroidにも移植しようと思っていて、JAVAならある程度移植ができるという理由から、JAVAを選択しました。
GUIが中々慣れなくてググりまくりですが。

オンラインゲームのサーバー部分の雛形とクライアントの雛形は結構なペースで進むのですが、MMOのマップ作成が手作業ではとてもできそうにないのでMAPツールを作っている状況です。
ちまたにはマップエディターなどが何本か出ているみたいなのですが、どれもマップだけで、マップ内にイベントを埋め込み、かつCSVなど汎用性のあるデータ形式に落とし込めるものがないのですね。

ちょっと年内にできるか自信はないですが、年内目標に、マップとイベントを組み込めるツールを作りたいと思います。

サーバーはSQLITEのDBを使用しているので、基本的にはDBに書き込む形式になるとは思うのですが。

誰も見ちゃいないと思いますが、ご期待ください。
今度はエロくないプログラムで稼げるように頑張りたいと思います。

ドット絵描ける人、募集中です。


2014年6月15日日曜日

memorize less password

 It is troublesome in management of a password.
However, it is an application recommended to such a direction which must change a password.

This software is software which creates another complicated password from the password which you are using now.
If you remember the password currently used usually even if you forget the created password, the same complicated password is generable from the password.
For example, suppose that your password is "googlepasswd".
This password called ")agEDP7-0!hgatpn" if "googlepasswd" is inputted soft is generated.
Usually, although you use the password of ")agEDP7-0!hgatpn", if "googlepasswd" is inputted into this application once again when you should forget, you will teach that it is ")agEDP7-0!hgatpn".
It becomes unnecessary thereby, to manage a password.
However, please forget and twist the original password and make it like.
Moreover, since it has copied to the clipboard, the created password can be paste easily another application.
https://play.google.com/store/apps/details?id=com.nimonoty.passwdmaker