みけCATのにっき(仮)
つれづれなるまゝに、日くらし、PCにむかひて、心に移りゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。
(本当か!?)
出典

【閑話休題】文字が流れる

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

【閑話休題】文字が流れる

投稿記事 by みけCAT » 13年前

DXライブラリで適当なものを作ってみました。
その名も「文字が流れるwwwww」
その名の通りウィンドウ上をひたすら文字が流れていくだけです。
nagareru_screenshot.jpg
スクリーンショットです。
nagareru_screenshot.jpg (31.23 KiB) 閲覧数: 159 回
流れる文字は自由に設定できます。
あなたも好きな文字を流してみませんか?(笑)

こちらがプログラムです。

CODE:

#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;
}
シンプルながらも、シューティングゲームの敵出現の基本です。な~んてね。あはは。(CV:大亀あすか)

え?DXライブラリを使ったソフトをコンパイルできない?
大丈夫。そんな方のためにコンパイル済みのexeファイルを用意しました。
あらかじめいくつかのリストファイルも入っています。
え?Windowsではない?
ごめんなさい。wineで頑張ってください。
添付ファイル

[拡張子 zip は無効化されているため、表示できません]


コメントはまだありません。