その名も「文字が流れるwwwww」
その名の通りウィンドウ上をひたすら文字が流れていくだけです。 流れる文字は自由に設定できます。
あなたも好きな文字を流してみませんか?(笑)
こちらがプログラムです。
#include "DxLib.h"
struct nagareru_t {
int exist;
int x;
int y;
char* moziretu;
int color;
int width;
int speed;
};
#define MOZIRETU_MAX 1000
#define APPEAR_MAX 100
char nagareru_list[MOZIRETU_MAX][1000];
nagareru_t nagareru[APPEAR_MAX];
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
SetMainWindowText("文字が流れるwwwww");
SetAlwaysRunFlag(TRUE);
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
SetDrawScreen( DX_SCREEN_BACK ); //裏画面に設定
char filename[1000]={0};
OPENFILENAME ofn={0};
ofn.lStructSize=sizeof(ofn);
ofn.hwndOwner=GetMainWindowHandle();
ofn.lpstrFilter="テキストファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*.*\0\0";
ofn.nFilterIndex=1;
ofn.lpstrFile=filename;
ofn.nMaxFile=sizeof(filename);
ofn.lpstrTitle="流す文字のリストを指定してください";
ofn.Flags=OFN_CREATEPROMPT | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST;
if(!GetOpenFileName(&ofn)) {
DxLib_End();
return 0;
}
int max;
int fp;
fp=FileRead_open(filename);
if(!fp) {
MessageBox(GetMainWindowHandle(),
"ファイルが開けません。","エラー",MB_OK | MB_ICONWARNING);
DxLib_End();
return 1;
}
for(max=0;max<MOZIRETU_MAX && !FileRead_eof(fp);max++) {
if(FileRead_gets(nagareru_list[max],sizeof(nagareru_list[max]),fp)==-1) {
FileRead_close(fp);
MessageBox(GetMainWindowHandle(),
"ファイルが読み込めません。","エラー",MB_OK | MB_ICONWARNING);
DxLib_End();
return 1;
}
}
FileRead_close(fp);
int i;
for(i=0;i<APPEAR_MAX;i++) {
nagareru[i].exist=0;
}
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない
//ココに処理を書いていく
//出現処理
if(GetRand(9)==0) {
for(i=0;i<APPEAR_MAX;i++) {
if(!nagareru[i].exist) {
nagareru[i].exist=1;
nagareru[i].x=640;
nagareru[i].y=GetRand(450);
nagareru[i].moziretu=nagareru_list[GetRand(max-1)];
nagareru[i].color=GetColor(GetRand(225)+30,GetRand(225)+30,GetRand(225)+30);
nagareru[i].width=GetDrawStringWidth(nagareru[i].moziretu,strlen(nagareru[i].moziretu));
nagareru[i].speed=GetRand(9)+1;
break;
}
}
}
//移動と描画処理
for(i=0;i<APPEAR_MAX;i++) {
if(nagareru[i].exist) {
//左に移動
nagareru[i].x-=nagareru[i].speed;
//左端を超えたら消す
if(nagareru[i].x<-nagareru[i].width) {
nagareru[i].exist=0;
} else {
//描画
DrawString(nagareru[i].x,nagareru[i].y,nagareru[i].moziretu,nagareru[i].color);
}
}
}
ScreenFlip();//裏画面を表画面に反映
}
DxLib_End();
return 0;
}
え?DXライブラリを使ったソフトをコンパイルできない?
大丈夫。そんな方のためにコンパイル済みのexeファイルを用意しました。
あらかじめいくつかのリストファイルも入っています。
え?Windowsではない?
ごめんなさい。wineで頑張ってください。