ページ 1 / 1
点滅処理
Posted: 2013年2月26日(火) 15:25
by DDF
丸投げですみません…。
今現在、C言語とC++などを用いて文字の点滅処理を作る課題出たのですがまったく分かりません。
納期が近づいてるので、参考になるようなアドバイスまたはサンプルコードで説明して頂ければ幸いです。
Re: 点滅処理
Posted: 2013年2月26日(火) 15:45
by softya(ソフト屋)
そもそも文字の点滅というのが環境に依存します。
それにC言語やらC++やらどっちでも良い的なのは本当に大丈夫でしょうか?
>納期が近づいてるので、参考になるようなアドバイスまたはサンプルコードで説明して頂ければ幸いです。
まず、フォーラムルールのテンプレートに従って投稿をお願いします。
http://dixq.net/board/board.html
Re: 点滅処理
Posted: 2013年2月26日(火) 15:59
by 阿部
コード:
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) {
char Key[256];
int tenmetuflag=0;
int msgnumber,enenumsearchflg=1,walktmp=0;
int attacknumber,tenmetumode=0,attackmode=0,tenmetucounter=0,zoukaryou=0,enezoukaryou=0,turn=1,Eneattackmode=0;
char messagebox[120]="aaaaあああああああああああああああいうえお";
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]) {
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
if(tenmetuflag==0)
DrawFormatString(120,340,GetColor(255,25,255),"%s",messagebox);
if(Key[ KEY_INPUT_RETURN ] == 1)tenmetumode=1;
//敵キャラ死に際点滅犯人か判定違ったらGAMEOVER画面へ
if(tenmetumode==1){
tenmetucounter++;
if(tenmetucounter%3==0)tenmetuflag=1;else tenmetuflag=0;
if(tenmetucounter==60){
tenmetumode=0;
tenmetucounter=0;
}}
ScreenFlip();
}
DxLib_End();
return 0;
}
Re: 点滅処理
Posted: 2013年2月26日(火) 16:06
by DDf
回答ありがとうございます。
ライブラリー依存しないでの書き方または参考になるようなアドバイスなどありましたらよろしくお願いします。
可能であればC言語主体でお願いします。
Re: 点滅処理
Posted: 2013年2月26日(火) 16:15
by softya(ソフト屋)
DDf さんが書きました:回答ありがとうございます。
ライブラリー依存しないでの書き方または参考になるようなアドバイスなどありましたらよろしくお願いします。
可能であればC言語主体でお願いします。
一応点滅しますが、どちらかと言うとチラツキです。
コード:
#include <stdio.h>
int main(void)
{
while(1){
printf("hello world!!");
printf("\r");
printf(" ");
printf("\r");
}
return 0;
}
指定された条件だと出来るのはこのぐらいです。
C言語の基礎の基礎レベルで片付きますね。
Re: 点滅処理
Posted: 2013年2月26日(火) 16:25
by DDf
点滅処理はなんとなくですが理解できました。
最後にに点滅処理後の画面の切り替えはどのような構成で可能でしょうか?
すみませんがよろしくお願いします。
Re: 点滅処理
Posted: 2013年2月26日(火) 16:29
by softya(ソフト屋)
多重投稿に注意して下さい。
>最後にに点滅処理後の画面の切り替えはどのような構成で可能でしょうか?
必要なんでしょうか?
どうしても環境依存するので、CTRL-Cでキャンセルするのが一番だと思います。
ちなみに、私はこれで課題OKになるならC言語を習って初期の段階だけだと思います。
つまり、課題の意図を取り違えていないか気になるんですが大丈夫ですか?
Re: 点滅処理
Posted: 2013年2月26日(火) 16:48
by 阿部
こんなかんじでできます
コード:
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) {
char Key[256];
int tenmetuflag=0;
int msgnumber,enenumsearchflg=1,walktmp=0;
int attacknumber,tenmetumode=0,attackmode=0,tenmetucounter=0,zoukaryou=0,enezoukaryou=0,turn=1,Eneattackmode=0;
char messagebox[120]="aaaaあああああああああああああああいうえお";
char messagebox2[120]="画面切り替わったよ";
int state=0;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]) {
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
switch(state){
case 0:
if(tenmetuflag==0)
DrawFormatString(120,340,GetColor(255,25,255),"%s",messagebox);
if(Key[ KEY_INPUT_RETURN ] == 1)tenmetumode=1;
if( Key[ KEY_INPUT_SPACE ] == 1)state=1;
//敵キャラ死に際点滅犯人か判定違ったらGAMEOVER画面へ
if(tenmetumode==1){
tenmetucounter++;
if(tenmetucounter%3==0)tenmetuflag=1;else tenmetuflag=0;
if(tenmetucounter==60){
state=1;
tenmetumode=0;
tenmetucounter=0;
}}
break;
case 1:
DrawFormatString(120,340,GetColor(255,25,255),"%s",messagebox2);
break;
}
ScreenFlip();
}
DxLib_End();
return 0;
}
Re: 点滅処理
Posted: 2013年2月26日(火) 16:51
by softya(ソフト屋)
阿部さん同じ投稿を2回しないで下さいね。 【補足】微妙には違うみたいですが。
それにDXライブラリで環境に依存しまくっていますので、DDf さんの意図にはそぐわないかと。
※ インデントが乱れているので気をつけたほうが良いと思いますよ。
Re: 点滅処理
Posted: 2013年2月26日(火) 23:21
by しひ
環境が対応しているのであれば、エスケープシーケンスを使う方法もありますね。
コード:
#include <stdio.h>
int main(void) {
printf("\x1b[5mhello world!\x1b[0m\n");
return 0;
}
http://en.wikipedia.org/wiki/ANSI_escape_code
Re: 点滅処理
Posted: 2013年2月27日(水) 18:04
by Dixq (管理人)
必要なコメントに関して完全にスルーされていますが、ちゃんと利用規約を読んだ上で投稿してください。
投稿の仕方がわからない場合はフォーラムルールのテンプレートに従って投稿をお願いします。
http://dixq.net/board/board.html
まず環境が分からないのと詳しい動作仕様が分かりません。
それがはっきりしないと回答もはっきりしないと思います。