|
Name: situmon ..かけだし(1,273ポイント)
Date: 2008/08/31(日) 15:52
No:20742
|
|
Title: 画像表示
|
|
前は棒人間の画像しか作れませんでしたが時間が余ったときに
新しく画像を作成しました。
(32×64)
今度はきちんと作成しました。
#include "DxLib.h"
typedef struct{
int x,y,img,muki,walking_flag;
}ch_t;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int image[16];
char Key[256];
ch_t ch;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
ch.x =320;
ch.y =160;
ch.walking_flag=0;
ch.muki=3;
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 64 , image ) ;//画像を分割してimage配列に保存
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
else if( Key[ KEY_INPUT_LEFT ] == 1 ) //左ボタンが押されたら
ch.muki=1; //左向きフラグを立てる
else if( Key[ KEY_INPUT_DOWN ] == 1 ) //下ボタンが押されたら
ch.muki=2; //下向きフラグを立てる
else if( Key[ KEY_INPUT_RIGHT] == 1 ) //右ボタンが押されたら
ch.muki=3; //右向きフラグを立てる
else //何のボタンも押されてなかったら
ch.walking_flag=0; //歩かないフラグを立てる
}
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y--;
else if(ch.muki==1) //左向きならch.x座標を減らす
ch.x--;
else if(ch.muki==2) //下向きならch.y座標を増やす
ch.y++;
else if(ch.muki==3) //右向きならch.x座標を増やす
ch.x++;
}
ch.img=image[(ch.x%32+ch.y%64)/8 + ch.muki*4]; //画像をセット
DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画
ScreenFlip();
}
DxLib_End();
return 0;
}
で表示させたいのですが表示できませんどうすればいいでしょう。
856ポイント を落としてしまった。
|
|
|
|
Name: KEV ..入門者(4,852ポイント)
Date: 2008/08/31(日) 17:31
No:20748
|
|
Title: Re:画像表示
|
|
添付の画像ファイルをダウンロードしたんですが、
大きさが(88×175)になってます。
きっとsitumonさんはこれを4×4に分割したいのだと思うので、
その場合は 横22×縦44に分割するのがいいと思います。
上のプログラムでは(32×64)で分割しようとしているので、
画像読み込みでエラーが出ました。
>>LoadDivGraph( "char.png" , 16 , 4 , 4 , 22 , 44 , image ) ;//画像を分割してimage配列に保存
こう書き換えたら上記のプログラムで十字キーを押したときにキャラが描写されました。
ただ、現時点では
>>if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
で1マスずつが32と指定しているのに対して、
>>ch.img=image[(ch.x%32+ch.y%64)/8 + ch.muki*4]; //画像をセット
で上に行くときは64で割っているため、画像が正常に描写されていないです。
とりあえず、
>>ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4]; //画像をセット
こう書き換えたらそれなりにちゃんと動きました。
しかしまだ上下左右の移動のときの画像がちゃんとあってなさそうだったり、
上下移動量を64にした場合、初期値の(ch.y=160)が64で割れないため
画像が表示されなかったり、まだ変更できる箇所はありそうなので
situmonさんの意図する動作をするように色々と修正していってみてください。
437ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(709,238ポイント)
Date: 2008/09/04(木) 23:14
No:20942
|
|
Title: Re:画像表示
|
|
画像の保存場所も画像の分割も恐らくあっていると思います。
画像サイズも仰る通りであっています。
間違っているのは画像番号の計算式です。
(ch.x%32+ch.y%64)/8 + ch.muki*4
これですね。まず、何故64で割っているのでしょう?32にすれば直ると思いますが、一応下へ続きを。
最大でいくらになるか考えて見ましょう。
ch.y%64は最大で63だから63/8は7、ch.mukiが3の時は3*4は12となり、19番が示される場合があります。
しかし画像番号は15までしかないはずです。
ch.x++;
}
ch.img=image[(ch.x%32+ch.y%64)/8 + ch.muki*4]; //画像をセット
DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画
と書かれている部分を
ch.x++;
}
int num=(ch.x%32+ch.y%64)/8 + ch.muki*4;
DrawFormatString(0,0,GetColor(255,255,255),"%d",num);
ch.img=image[num]; //画像をセット
DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画
と変更して、どのように画像番号が変更されているか確認してみて下さい。
378ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..入門者(4,762ポイント)
Date: 2008/09/04(木) 23:16
No:20943
|
|
Title: Re:画像表示
|
|
プログラム中に使ってる数値((ch.x%32+ch.y%64)/8やch.muki*4)を表示して確かめたらいいと思います。
48ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(709,519ポイント)
Date: 2008/09/04(木) 23:23
No:20944
|
|
Title: Re:画像表示
|
|
後、進行方向と画像番号があってないのはいいんでしょうか?
上、左、下、右という向き番号になっているのに対して画像が
正面、右、左、正面となっているので。
とりあえず、ちゃんと動く事がわかったら修正されるのだと思いますが、念の為に。
また、画像の中心がずれているので、スムーズに動いているように見えないと思います。
モーションを作る時、例えば同じような画像を4つ並べるのは難しいと思いますから、
そんなときは、一枚書いたら四方一番はしっこの1ピクセル何か違う色でマークをかいて
画像の端っこがわかるようにしておいて、4つ並べたりした方が解り易いと思いますよb
281ポイント を手に入れた。
|
|
|
|
|
Name: situmon ..入門者(3,167ポイント)
Date: 2008/09/07(日) 20:23
No:21007
|
|
Title: Re:画像表示
|
|
ではこういうことですか
#include "DxLib.h"
typedef struct{
int x,y,img,muki,walking_flag;
}ch_t;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int image[16];
char Key[256];
ch_t ch;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
ch.x =320;
ch.y =160;
ch.walking_flag=0;
ch.muki=3;
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 64 , image ) ;//画像を分割してimage配列に保存
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
else if( Key[ KEY_INPUT_LEFT ] == 1 ) //左ボタンが押されたら
ch.muki=1; //左向きフラグを立てる
else if( Key[ KEY_INPUT_DOWN ] == 1 ) //下ボタンが押されたら
ch.muki=2; //下向きフラグを立てる
else if( Key[ KEY_INPUT_RIGHT] == 1 ) //右ボタンが押されたら
ch.muki=3; //右向きフラグを立てる
else //何のボタンも押されてなかったら
ch.walking_flag=0; //歩かないフラグを立てる
}
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y--;
else if(ch.muki==1) //左向きならch.x座標を減らす
ch.x--;
else if(ch.muki==2) //下向きならch.y座標を増やす
ch.y++;
else if(ch.muki==3) //右向きならch.x座標を増やす
ch.x++;
}
int num=(ch.x%32+ch.y%32)/8 + ch.muki*4;
DrawFormatString(0,0,GetColor(255,255,255),"%d",num);
ch.img=image[num]; //画像をセット
DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画
ScreenFlip();
}
DxLib_End();
return 0;
}
2倍のポイントを手に入れた! 1,926ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..入門者(4,851ポイント)
Date: 2008/09/07(日) 20:27
No:21009
|
|
Title: Re:画像表示
|
|
まず、
DrawFormatString(0,0,GetColor(255,255,255),"%d",num);
としていますがその値は正しいですか?
45ポイント を手に入れた。
|
|
|
|
|
Name: situmon ..入門者(3,255ポイント)
Date: 2008/09/08(月) 20:41
No:21062
|
|
Title: Re:画像表示
|
|
できました!!ありがとうございます。
でもキャラが早く動きません。
早くするにはどうすれば?
それとも処理落ちですか?
60ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(787,023ポイント)
Date: 2008/09/08(月) 20:48
No:21064
|
|
Title: Re:画像表示
|
|
移動計算部分の計算式を変えたらいいですよ。
例えば
ch.x--;
を
ch.x-=2;
にすれば2倍のスピードになりますし、
ch.x-=4;
にすれば4倍のスピードになります。
ここで注意しないといけないのが、32で割り切れる場所を通った時を1単位にして処理していますので、
ch.x-=3;
などの32の倍数を通らない数で加算する時は何か個別の処理をして下さい。
132ポイント を手に入れた。
|
|
|
|
Name: wing ..ぴよぴよ(11ポイント)
Date: 2008/09/08(月) 17:45
No:21054
|
|
Title: 自動避けプログラムの作り方
|
|
龍神録プログラミングの館を参考にしています。
以前からこのようなプログラムが作れないかと思っていたのですが、
プログラムで自動的にキャラを操作して、弾に当たらないように動かす事は出来ないでしょうか?
もしよければ理論のアドバイスなど頂けると嬉しいです。
11ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(785,954ポイント)
Date: 2008/09/08(月) 18:12
No:21055
|
|
Title: Re:自動避けプログラムの作り方
|
|
結構難しそうですね。
今存在している弾を10フレーム位先まで計算してやり、当たらない場所を見つける方法のように
一回シミュレートしてみるのが早いんですが、
龍神録プログラミングの館で敵が撃って来るショットは乱数が使われている物がある為、
一回先に計算して、もう一度後で計算すると計算結果が変わってしまいます。
先に計算した結果を後の動作にコピーする方法もあるでしょうが、
今の関数を用いるにはかなりややこしい構造になりそうです。
この仕様を実現する方法はいくつか考えられるのだと思いますが、
私がパッと思いつく方法は、どこのエリアにどれ位の密度で弾があるか計算する方法でしょうか。
赤が自機、青が弾だと思って下さい。
今、こんな感じで弾が存在しているとします。
エリアを外側8区間、内側8区間で区切ってみます。
どのエリアにどれ位弾が存在しているのか計算し、一番弾が存在していないエリアの方向にキャラを動かしてみます。
優先順位は内側です。
外側より内側に弾があったほうが危ないですからね。
これは2層ですが、このエリアを何層にもして計算してやれば結構精度は上がるんじゃないでしょうか。
ただ上の図であるエリアに何%青い領域が占めているか計算する方法はすみません、パッと思いつきません。
積分して面積比を出してやれば何%か計算出来そうですが・・・、もっと簡単な方法があるかもしれません。
592ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(786,077ポイント)
Date: 2008/09/08(月) 18:22
No:21056
|
|
Title: Re:自動避けプログラムの作り方
|
|
安っぽいアルゴリズムですし、これじゃ限界があると思いますが、
フレームごとにシミュレートしてみてもいいかもしれません。
8方向にそれぞれ移動したことにして、それぞれその方向に移動してその場で被弾するか計算します。
左に行ってあたり、静止していたら当たらず、右に行って当たらない時には右に行く。
といったように、なるべく弾から離れるようにし、
全方向どちらに移動しても当たらなければ定位置方向に移動するようにしてみるとか。
123ポイント を手に入れた。
|
|
|
|
Name: abc ..かけだし(1,791ポイント)
Date: 2008/09/08(月) 09:21
No:21031
|
|
Title: C++ 図形透明
|
|
C++6.0での質問です。
タイトルのとおりなんですが、たとえば数字の六を書きその上に円を書いてアクティブになっているように見せたい時円を透明にして下の六を透かしたいのですが、どのような方法があるのでしょう?
ちなみに円はEllipse関数を使っています。
よろしくお願いします。
2倍のポイントを手に入れた! 176ポイント を手に入れた。
|
|
|
|
Name: abc ..かけだし(1,753ポイント)
Date: 2008/09/08(月) 10:24
No:21033
|
|
Title: Re:C++ 図形透明
|
|
> 開発環境はVC++6.0みたいですが、MFCですか?
そうです。MFC AppWizard(exe) のダイアログベースです。
よろしくお願いします。
38ポイント を落としてしまった。
|
|
|
|
|
Name: バグ ..ハッカー(108,029ポイント)
Date: 2008/09/08(月) 10:42
No:21034
|
|
Title: Re:C++ 図形透明
|
|
例えば…ですが。
1:画面を一旦クリアする。(今回の場合は数字の6を描画する)
2:1の画像の上に描画したい画像(今回の場合は円)のマスク画像を用意する(背景…黒、円…RGB(0x88, 0x88, 0x88)くらい?)
3:Bitblt関数で1と2の論理和(SRCPAINT)で転送する
4:Bitblt関数で3の画像と描画したい画像(背景…白)を論理積(SRCAND)で転送する
これで透過できるはずです。
透過率の調整は2のマスク画像の円の部分の色を調整してやればできると思います。
208ポイント を手に入れた。
|
|
|
|
|
Name: abc ..かけだし(1,798ポイント)
Date: 2008/09/08(月) 10:53
No:21035
|
|
Title: Re:C++ 図形透明
|
|
ありがとうございます。
バグさんのを参考にやってみます。
ちょっと難しそうですが(ーー)がんばってみます。
45ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(108,143ポイント)
Date: 2008/09/08(月) 12:12
No:21036
|
|
Title: Re:C++ 図形透明
|
|
私の方が勘違いしていたらいけないので、確認です。
テスト的な簡単なものを組んでみたのですが、こういう事でよかったんでしょうか?(画像参照)
青い丸がマウスカーソルの位置に、RGB(0x00, 0x00, 0xFF)の色で描画されています。
114ポイント を手に入れた。
|
|
|
|
|
Name: ま〜く ..初心者(7,292ポイント)
Date: 2008/09/08(月) 12:50
No:21037
|
|
Title: Re:C++ 図形透明
|
|
たぶんやりたいことは、ブラシを透明ブラシにすれば出来ると思いますよ。
・CreateBrushIndirectでlbStyleをBS_NULLにするとか。
・GetStockObjectでHOLLOW_BRUSHを取得するとか。
65ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(108,329ポイント)
Date: 2008/09/08(月) 13:34
No:21040
|
|
Title: Re:C++ 図形透明
|
|
>>タイトルのとおりなんですが、たとえば数字の六を書きその上に円を書いてアクティブになっているように見せたい時円を透明にして下の六を透かしたいのですが、どのような方法があるのでしょう?
よくよく質問を見返してみると…私が勘違いしているっぽいですね(^_^;)
ひょっとして、質問者さんは丸いボタンコントロールのようなものを作成したいのでしょうか?
148ポイント を手に入れた。
|
|
|
|
|
Name: abc ..かけだし(1,894ポイント)
Date: 2008/09/08(月) 14:02
No:21041
|
|
Title: Re:C++ 図形透明
|
|
いやバグさんのやり方であっています。
あのですね失礼かも知れないのですが、作られていたソースをいただけないでしょうか?
こちらのソースを公開することができないので、理不尽なんですが、できたらお願いします。
96ポイント を手に入れた。
|
|
|
|
|
Name: abc ..かけだし(1,954ポイント)
Date: 2008/09/08(月) 14:09
No:21042
|
|
Title: Re:C++ 図形透明
|
|
簡単な例として、時計の短い針の指す先が12時だとすると、12に円をのせアクティブになっているように見せるような感じにしたいです。
60ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(108,391ポイント)
Date: 2008/09/08(月) 14:36
No:21043
|
|
Title: Re:C++ 図形透明
|
|
ソースを渡すのは構いませんが、その前に分からない部分を明らかにしておいた方がよくないですか?
私が書き込みした1〜4の手順は試してみました?
もし、分からないのであれば、どの段階でつまづいていますか?
62ポイント を手に入れた。
|
|
|
|
|
Name: abc ..かけだし(1,999ポイント)
Date: 2008/09/08(月) 15:04
No:21045
|
|
Title: Re:C++ 図形透明
|
|
円とかは、ビットマップでもっていなくて、Ellipseや文字の6とかを使っています。
Bitblt関数について少し調べたら画像処理に使うようなことが書いてあったんで、
24ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(108,464ポイント)
Date: 2008/09/08(月) 15:41
No:21046
|
|
Title: Re:C++ 図形透明
|
|
はい、最初にEllipse関数を使用していると書かれていましたので、おそらくCDCクラスのEllipse関数だろうと思い、毎回デバイスコンテキストを取得して描画しなおしています。
私の方法では、メモリ上にビットマップを何枚か用意して、それらを重ね合わせる事で描画しています。
73ポイント を手に入れた。
|
|
|
|
|
Name: abc ..かけだし(2,121ポイント)
Date: 2008/09/08(月) 16:12
No:21047
| 解決!
|
Title: Re:C++ 図形透明
|
|
なるほど画面をメモリにおいて、Bitblt関数で重ねるんですね。
わかりました!だいたいわかったのでやってみます。
とりあえず解決にさせていただきます。
もしつまずいたらもう一度たずねるかもしれません。
バグさんどうもありがとうございました。
122ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(108,511ポイント)
Date: 2008/09/08(月) 16:16
No:21050
|
|
Title: Re:C++ 図形透明
|
|
解決したようで何よりです(^-^)
おそらくダブルバッファリングが必要になると思いますので、そちらもググってみるとよいかもしれません。
47ポイント を手に入れた。
|
|
|
|
|
Name: abc ..かけだし(2,141ポイント)
Date: 2008/09/08(月) 16:48
No:21052
|
|
Title: Re:C++ 図形透明
|
|
ありがとうございます(^^)
リングバッファはやった事がありますが、ダブルバッファリング調べてみます><
ありがとうございました。
20ポイント を手に入れた。
|
|
|
|
Name: あなざぁ ..かけだし(1,471ポイント)
Date: 2008/09/06(土) 23:37
No:20984
|
|
Title: フルスクリーンが戻らない
|
|
プログラミングに関係のない話ですいません・・・
いつからか、急にコンソールアプリケーションを実行されると、
フルスクリーンになってしまいます。
どのようにすれば元に戻りますか?
84ポイント を手に入れた。
|
|
|
|
Name: J ..初心者(8,876ポイント)
Date: 2008/09/07(日) 06:58
No:20986
|
|
Title: Re:フルスクリーンが戻らない
|
|
うーん。上の説明ではよくわかりません。
コマンドプロンプトが全画面で表示されてしまうということですか?
47ポイント を手に入れた。
|
|
|
|
|
Name: あなざぁ ..かけだし(1,535ポイント)
Date: 2008/09/07(日) 08:41
No:20988
|
|
Title: Re:フルスクリーンが戻らない
|
|
そうです。
また、プログラミング中にも、コンパイル・メイクする際に
一瞬画面が黒くなります。
OSはWindowsXPです。
64ポイント を手に入れた。
|
|
|
|
|
Name: J ..中級者(9,037ポイント)
Date: 2008/09/07(日) 08:54
No:20989
|
|
Title: Re:フルスクリーンが戻らない
|
|
>また、プログラミング中にも、コンパイル・メイクする際に
>一瞬画面が黒くなります。
それはちょっとおかしいですね。
作成しているプログラムではなくて、
環境がおかしいのだと思います。
特にプログラミング中とはどのようなタイミングですか?
99ポイント を手に入れた。
|
|
|
|
|
Name: あなざぁ ..かけだし(1,610ポイント)
Date: 2008/09/07(日) 10:18
No:20990
|
|
Title: Re:フルスクリーンが戻らない
|
|
開発環境はBCC Developperなのですが、
コンパイル、メイクのボタンをクリックすると、
コンパイルまたはメイク中に一瞬画面が黒くなります。
また、VC++も入っているのですが、やはり二つ同時はダメなのでしょうか?
75ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..入門者(4,806ポイント)
Date: 2008/09/07(日) 12:02
No:20991
|
|
Title: Re:フルスクリーンが戻らない
|
|
スタート->全てのプログラム->アクセサリからcmdを起動して、
タイトルバーで右クリックして既定値をクリックしするとダイアログが出るので、
オプションタブ内の表示オプションを変更してください。
44ポイント を手に入れた。
|
|
|
|
|
Name: J ..中級者(9,119ポイント)
Date: 2008/09/07(日) 16:36
No:20996
|
|
Title: Re:フルスクリーンが戻らない
|
|
フルスクリーン・・・と言いましたが、
ウィンドウの最大化のようになっているのですか?
2倍のポイントを手に入れた! 82ポイント を手に入れた。
|
|
|
|
|
Name: ま〜く ..初心者(7,227ポイント)
Date: 2008/09/07(日) 17:37
No:20997
|
|
Title: Re:フルスクリーンが戻らない
|
|
コマンドプロンプトの表示オプションが全画面表示になっていると思います。
スタート>アクセサリ>コマンドプロンプトで右クリックして、プロパティを表示し
オプションでウィンドウ表示にすれば戻ると思いますよ。
または、すでにフルスクリーンになっている場合、ALT+TABで一旦 最小化し、タスクバーの
コマンドプロンプトで右クリックし先ほどのオプションを変更すればよいと思います。
その際、適用範囲を聞かれると思うので、このウィンドウを起動したショートカットに適用
すればよいかと。
228ポイント を手に入れた。
|
|
|
|
|
Name: J ..中級者(9,362ポイント)
Date: 2008/09/07(日) 20:11
No:21006
|
|
Title: Re:フルスクリーンが戻らない
|
|
おお。コマンドプロンプトでも全画面表示ってできるのですね。
初めて知りました。最大化ぐらいかなと思っていましたが、そんなことも。
因みに、コマンドプロンプトを終了させるコマンドは「exit」です。
そして、ま〜くさんの言うとおり、Alt + Tabでも最小化できますが、Win + Dでも最小化できると思います。
Win + Dは便利です。何せAlt + Tabはウィンドウ切り替えのためにありますが、Win + Dはデスクトップを表示させるショートカットキーです。どんなにウィンドウ開いていても一発で解決です。
あ、関係の無いことでしたね。。すみません。
243ポイント を手に入れた。
|
|
|
|
|
Name: あなざぁ ..かけだし(1,650ポイント)
Date: 2008/09/08(月) 16:12
No:21048
|
|
Title: Re:フルスクリーンが戻らない
|
|
返信が遅れてしまいすみませんでした。(><)
無事解決しました!みなさんありがとうございます!
40ポイント を手に入れた。
|
|
|
|
Name: 自由闊達 ..ぴよぴよ(131ポイント)
Date: 2008/09/07(日) 18:26
No:20998
|
|
Title: 入力状態取得について
|
|
Visual C++ 2008 Express Editionを使っています。
A〜Zのいずれかのキーが入力されてる場合ってのをやりたいのですが、
(GetHitKeyStateAll_2(Key)を使っています)
if(Key[KEY_INPUT_A]==1||Key[KEY_INPUT_B]==1||…(略)…Key[KEY_INPUT_Z]==1){・・・}
とやるしかないんでしょうか?
もっと簡単な方法があったら教えてもらえないでしょうか?
131ポイント を手に入れた。
|
|
|
|
Name: GPGA ..熟練のプログラマー(50,060ポイント)
Date: 2008/09/07(日) 18:53
No:21000
|
|
Title: Re:入力状態取得について
|
|
KEY_INPUT_A〜KEY_INPUT_Zまでは連番で保障されていないので
リストを作成して、ループでまわしてやるのがわかりやすいと思います。
const int list[] = {
KEY_INPUT_A, KEY_INPUT_B, KEY_INPUT_C, KEY_INPUT_D,
KEY_INPUT_E, KEY_INPUT_F, KEY_INPUT_G, KEY_INPUT_H,
KEY_INPUT_I, KEY_INPUT_J, KEY_INPUT_K, KEY_INPUT_L,
KEY_INPUT_M, KEY_INPUT_N, KEY_INPUT_O, KEY_INPUT_P,
KEY_INPUT_Q, KEY_INPUT_R, KEY_INPUT_S, KEY_INPUT_T,
KEY_INPUT_U, KEY_INPUT_V, KEY_INPUT_W, KEY_INPUT_X,
KEY_INPUT_Y, KEY_INPUT_Z,
};
int i;
for (i = 0; i < sizeof(list) / sizeof(list[0]); ++i) {
if (Key[list[i]] == 1) {
break;
}
}
if (i != sizeof(list) / sizeof(list[0])) {
// いづれかのキーが押された処理
}
としては、いかがでしょうか?
355ポイント を手に入れた。
|
|
|
|
|
Name: 自由闊達 ..ぴよぴよ(185ポイント)
Date: 2008/09/08(月) 02:33
No:21030
| 解決!
|
Title: Re:入力状態取得について
|
|
おぉ!できました!
なるほど、こーゆー方法があったのですね、勉強になります。
教えてくださってどうもありがとうございました。
54ポイント を手に入れた。
|
|
|
|
Name: 藍 ..入門者(3,458ポイント)
Date: 2008/09/08(月) 00:16
No:21020
|
|
Title: 書き込み中アクセス違反?
|
|
龍神録プログラミングの館25章の部分を追加して、デバックを行うとエラーはでないのですが
実行時に0x0054c954 で初回の例外が発生しました: 0xC0000005: 場所 0x00f44000 に書き込み中にアクセス違反が発生しました。
となって、実行できない状態に陥ってしまいました。
25章のプログラムソースを丸々コピーでなく、全部手打ちでやっているので打ち間違えの可能性も捨てきれないのですが、
追加部分を何回か見比べても打ち間違えはみつからなかったので、どういうときにこのようなことが起こるかわかる人がいましたら、
教えていただけると大変ありがたいです。
プログラムリストのほうも添付したほうがいいのかと思うのですが、なにぶんオリジナルの部分も混じっていたり、どの部分でエラーが出てるかはっきりわからないので、
とりあえず今は何も添付しないでおきますが、そこのプログラムどうなってるんやーなど、ありましたら、随時添付いたします。
プログラムのほうは、ここの龍神録プログラムの館に沿って、作成しています。
何かお気づきのことがありましたら、お願いします。
431ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(713,267ポイント)
Date: 2008/09/08(月) 00:40
No:21021
|
|
Title: Re:書き込み中アクセス違反?
|
|
アドレスの指している箇所がおかしいのではないでしょうか。
ブレイクポイントの使い方はご存知でしょうか?
まず、メインループで主な関数をいくつか呼んでいると思いますが、
ブレイクポイントをその関数ごとに付け、
どこでエラーが起きているか突き止めてみてはどうでしょう。
最初はおおまかにポツポツとブレイクポイントをうっておき、
引っかかったらその辺を重点的に細かく調べていけば良いと思います。
どうしても解決しない時はこちらに音楽ファイル以外の全てのデータをプロジェクトごと圧縮して
私の方に送ってもらえたら調べますよ。
161ポイント を手に入れた。
|
|
|
|
|
Name: 藍 ..入門者(3,554ポイント)
Date: 2008/09/08(月) 00:47
No:21022
|
|
Title: Re:書き込み中アクセス違反?
|
|
毎回毎回すばやいお返事ありがとうございます。
とりあえず、ブレイクポイントで突き止めて見たいと思います。
また不明な点があれば質問されていただきます。
これも勉強の一部なので、管理人さんに送るのは本当の最終手段で、使わない気持ちでがんばります。
96ポイント を手に入れた。
|
|
|
|
|
Name: array ..プログラマー(25,768ポイント)
Date: 2008/09/08(月) 00:48
No:21023
|
|
Title: Re:書き込み中アクセス違反?
|
|
実行時にエラーが出てるので、最初の方にエラーがあるんだとおもいます
load.cpp
ini.cpp
他ヘッダファイル
に変な処理をしてないか確認してみてはどうでしょうか。
最終手段として、25章を追加する前のソースはバックアップを取っているのでしょうか?もし取っているのなら、一度戻して再度導入を試みてはどうでしょうか。
54ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(713,512ポイント)
Date: 2008/09/08(月) 01:01
No:21024
|
|
Title: Re:書き込み中アクセス違反?
|
|
ポインタとか使わず、単純なプログラムしか書いてない場合は
「書き込み中にアクセス違反が発生しました。」
と出るときは大抵初期化していない変数を使用しているか、
ループが行き過ぎてオーバーフローになっているかだと思いますから
もし心当たりがあればそちらを確認してみては。
もし初期化してない変数を使用している時は警告が出ると思いますから、
警告が出ているときはそこからダブルクリックで辿ってみて下さい。
まぁブレイクポイントで探していけば見つかると思いますよ。
後関数ポインタ使ってますからエクセルに弾幕番号をかくとこで用意していない番号をかくと
そのようなエラーになると思います。この場合は確かにプログラムコードを読んだだけじゃわからないですね。
たとえ関数ポインタの配列要素を10用意していたとしても、
例えば2つしか格納していないと3つ目から後はアドレス0をさしているわけですから、
用意している数ではなく、関数のアドレスを実際に格納した配列要素数を確認して下さい。
245ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(715,066ポイント)
Date: 2008/09/08(月) 01:14
No:21025
|
|
Title: Re:書き込み中アクセス違反?
|
|
上の補足で、関数ポインタを使っているのは
enemy.cppの一番上
void (*enemy_pattern[ENEMY_PATTERN_MAX])(int) = {
enemy_pattern0, enemy_pattern1, enemy_pattern2, enemy_pattern3, enemy_pattern4,
enemy_pattern5, enemy_pattern6, enemy_pattern7, enemy_pattern8, enemy_pattern9,
enemy_pattern10,
};
(これだと番号は10まで指せます)
そして
shot.cppの一番上
void (*shot_bullet[SHOT_KND_MAX])(int) ={
shot_bullet_H000,shot_bullet_H001,shot_bullet_H002,shot_bullet_H003,shot_bullet_H004,
shot_bullet_H005,shot_bullet_H006,shot_bullet_H007,shot_bullet_H008,shot_bullet_H009,
shot_bullet_H010,shot_bullet_H011,shot_bullet_H012,shot_bullet_H013,shot_bullet_H014,
shot_bullet_H015,shot_bullet_H016,shot_bullet_H017,
};
(上の例では17まで指せます)
そして、一番有力なのが、25章付近で追加した、ボスの弾幕に関する関数ポインタです。
func.h
void (*boss_shot_bullet[DANMAKU_MAX])() =
{
boss_shot_bulletH000,
boss_shot_bulletH000,
boss_shot_bulletH000,
boss_shot_bulletH000,
boss_shot_bulletH000,
boss_shot_bulletH000,
boss_shot_bulletH000,
};
(これなら6まで指せます)
多分ここじゃないかな〜・・と思うんですが、まぁ違うかもしれません^^;
エクセルデータもよく確認してみて下さい。
2倍のポイントを手に入れた! 1,554ポイント を手に入れた。
|
|
|
|
|
Name: 藍 ..入門者(3,908ポイント)
Date: 2008/09/08(月) 01:18
No:21026
| 解決!
|
Title: Re:書き込み中アクセス違反?
|
|
ここまで書いてもらっていて、エラーの原因がまさかの、 < が抜けていただけなんて!ちょっと恥ずかしすぎる・・・orz
ブレイクポイント使っていったら簡単に見つかりました。こんな便利な機能があっただなんて・・本当にありがとうございます!!
あと、しょーもないミスでここまで書いてもらって本当にすみませんでした!
大変ご迷惑をおかけしました・・・orz
2倍のポイントを手に入れた! 354ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(785,289ポイント)
Date: 2008/09/08(月) 01:31
No:21027
|
|
Title: Re:書き込み中アクセス違反?
|
|
>しょーもないミスでここまで書いてもらって本当にすみませんでした!
いえいえ。しかし、
「一番有力なのが」とかわざわざ赤字にしておいて、原因が違ったという空振りさw
"<"抜けということでしたが、もしよければ具体的にどういうミスだったか教えてもらえませんか?
過去ログに残しておけば、もしかしたら今後似たようなミスをした方の参考になるかもしれません。
ブレイクポイントはわざわざprintfDxとかしなくても
そこで変数に何が入ってるか確認も出来るし便利ですよb
223ポイント を手に入れた。
|
|
|
|
|
Name: 藍 ..入門者(3,989ポイント)
Date: 2008/09/08(月) 01:38
No:21028
|
|
Title: Re:書き込み中アクセス違反?
|
|
原因はini.cpp内のvoid ini()で
for(int i=0;i<DANMAKU_MAX;i++)//弾幕それぞれの背景の種類
boss.back_knd[i]=1;
ここの、i<DANMAKU_MAX;の < が抜けていたというすごく簡単なミスでした。
しかし、ビルド時にはまったくエラーを出してくれなく、デバックで実行したとたんに先ほどのエラーが出るという始末でした。
参考?になるかわかりませんが全力でご協力いたします。
あぁ、恥ずかしすぎて誰か幻想郷にとばしてくれ(ぁ
81ポイント を手に入れた。
|
|
|
|
Name: JK ..ぴよぴよ(183ポイント)
Date: 2008/09/07(日) 22:31
No:21014
|
|
Title: このサイトにおけるソースに関して…
|
|
こんばんわ。始めまして
このたびゲームプログラミングを組もうと思っているのですが……
私のパソコンには現在通常のCは実行できるのですがこちらのサイトを見る限りBorlandC++やらVisualC++となっていますが通常のCでソースそのままでだいじょうぶですかね?
検索/過去ログで探してみたものの検索の仕方が悪いせいか似たような記事は見つかりませんでした
このような質問をしていいかどうか悩んだ末なのですが、もしよろしければ教えていただけますでしょうか
よろしくお願いいたします
183ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(712,953ポイント)
Date: 2008/09/07(日) 23:17
No:21016
|
|
Title: Re:このサイトにおけるソースに関して…
|
|
DXライブラリそのものが「C++言語用の2Dゲームライブラリです」と紹介されているので、
C++対応のコンパイラの方が良いと思います。
具体的にどんな弊害があるのかはよく知りません。
また、龍神録プログラミングの館などに書かれているコードはC++用のコンパイラじゃないと通らないコードも含まれています。
逆にVisualStudioなどをインストールされない理由は何ですか?
157ポイント を手に入れた。
|
|
|
|
|
Name: JK ..ぴよぴよ(256ポイント)
Date: 2008/09/07(日) 23:23
No:21018
| 解決!
|
Title: Re:このサイトにおけるソースに関して…
|
|
管理人様どうもありがとうございます
私は今までCをある程度経験してるのでそちらのほうに慣れていてC++には一切触れていない為Cがよかったのです。
どうもありがとうございます
73ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(713,106ポイント)
Date: 2008/09/07(日) 23:28
No:21019
|
|
Title: Re:このサイトにおけるソースに関して…
|
|
書き方はCで、C++のコードはありません。
例えばfor文内で変数宣言するとか、C++のコンパイラじゃないとコンパイルが
通らない書き方が一部あるというだけなので、
Cの知識しかなくても十分です。
C++のコンパイラでもCのコードはコンパイル出来ますから
是非VisualStudio2008とかフリーで手に入るのでインストールされることお勧めします。
144ポイント を手に入れた。
|
|
|
|
Name: 藍 ..入門者(3,027ポイント)
Date: 2008/09/07(日) 22:30
No:21013
|
|
Title: 龍神録プログラミングの館23章
|
|
喰らいボムを作ってみようで、変更が記載されていない部分を見つけましたのでご報告しておきます。
char.cpp のvoid ch_moveで
void ch_move(){
int i,sayu_flag=0,joge_flag=0;
double x,y,mx,my,naname=1;
double move_x[4]={-4.0,4.0,0,0},move_y[4]={0,0,4.0,-4.0};
int inputpad[4];
inputpad[0]=CheckStatePad(configpad.left); inputpad[1]=CheckStatePad(configpad.right);
inputpad[2]=CheckStatePad(configpad.down); inputpad[3]=CheckStatePad(configpad.up);
if(ch.flag==1)return;//喰らいボム受付中は動かせない
以下省略
if(ch.flag==1)return;//喰らいボム受付中は動かせない が記載されていません。
314ポイント を手に入れた。
|
|
|
Name: せいじ ..ぴよぴよ(588ポイント)
Date: 2008/09/06(土) 13:08
No:20960
|
|
Title: C言語課題について
|
|
まだC言語を習い始めて半年ほどの初心者です。
テ ー マ : 整数配列の計算
プログラム説明: 配列Xに整数をキーボードより入力し、0が入力されたときそ
れまでに入力されたデータを降順にソートし、データ数、総和、
平均を出力する。
補 足 : データ数、総和、平均の桁位置を揃える。ただし、平均は小数点
以下4桁出力する。
出 力 例 :
データ入力
入力 X[0] ? 54
入力 X[1] ? 53
入力 X[2] ? 86
入力 X[3] ? 0
出力 X[0] = 86
出力 X[1] = 54
出力 X[2] = 53
データ数 = 3
総和 = 193
平均 = 64.3333
前回のナオユキさんと同じ課題なんですが、
ソートがうまくできません。
ほかの箇所は動くのですが、
入力した順番のまま表示してしまいます。
間違えている箇所の指摘をお願いします。
#include <stdio.h>
main()
{
int ia,ib,iw,ig,X[256];
double hei;
ia=ig=0;
X[0]=0;
printf("データ入力\n");
while(1){
printf("X[%d] ?",ia);
scanf("%d",&iw);
if(iw==0){
break;
}
ib=ia;
do{
if(iw>=X[ib]){
X[ib+1]=X[ib];
ib--;
}
}while(ib<0&&iw<=X[ib]);
X[ib+1]=iw;
ia++;
}
for(ib=0;X[ib]!=0;ib++){
printf("出力 X[%d] =%d\n",ib,X[ib]);
ig+=X[ib];
}
hei=(double)ig/ia;
printf("データ数 =%5d\n",ia);
printf("総和 =%5d\n",ig);
printf("平均 =%10.4f\n",hei);
}
588ポイント を手に入れた。
|
|
|
|
Name: array ..上級者(24,644ポイント)
Date: 2008/09/06(土) 13:38
No:20961
|
|
Title: Re:C言語課題について
|
|
確認してないので、勘違いしてたらすみません
while(ib<0&&iw<=X[ib]);
ibが0未満なら実行になってるので、do-while完全無視してるような気がします。ibが0以上にしてあげればいいんじゃないですか?
while(ib>=0&&iw<=X[ib]);
また言いますが勘違いしてたらすみません〜
144ポイント を手に入れた。
|
|
|
|
|
Name: フリオ ..プログラマー(27,212ポイント)
Date: 2008/09/06(土) 21:09
No:20976
|
|
Title: Re:管理人様へ
|
|
タイトルは、内容がわかるものにしてほしい。
ソートが、どう上手くできないのか書いてほしい。
とりあえず気づいたことだけ、
"while(...){***}"も"do{***}while(...)"も"(...)"の中に書くのは、終了条件ではなく、継続条件です。
114ポイント を手に入れた。
|
|
|
|
|
Name: せいじ ..ぴよぴよ(696ポイント)
Date: 2008/09/07(日) 15:14
No:20994
|
|
Title: 自宅からです
|
|
管理人様をはじめ、多くの方から助言を頂きありがとうございます。
始めにフローチャートを書いた際に継続条件ではなく終了条件を書いてしまいそのまま記述してしまいました。
単純なことですが、終了条件を書くことに慣れてしまっていて気がつきませんでした。
さて、管理人様のご指摘ですが、入力→入力終了→ソート→出力というプログラムはできました。
あえて今回は面倒な方法をとったわけですが、やはり入力しつつソートすると言う方法はよくないのでしょうか?
私の中のイメージでは入力された整数を配列の一番最後の要素から比べていけばと思ったのですが。
最後に管理人様にご迷惑をおかけしたことを改めてお詫びいたします。
74ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(125,447ポイント)
Date: 2008/09/07(日) 19:14
No:21001
|
|
Title: Re:自宅からです
|
|
> 入力しつつソートすると言う方法
データ構造によるのではないでしょうか。
リスト構造であれば、その方法でよいかもしれません。
配列の場合、入れる場所を見つける手間はリスト構造の場合と
ほぼ同じだと思いますが、見つけた場所より後ろの要素を
一つずつ移動させねばなりません。その分だけ手間がかかります。
ところで、
自宅からのアクセスかどうかは、どうでもいい話です。
書いている「内容」にふさわしいタイトルを付けてほしいです。
5ポイント を手に入れた。
|
|
|
|
|
Name: せいじ ..ぴよぴよ(558ポイント)
Date: 2008/09/07(日) 22:48
No:21015
| 解決!
|
Title: 解決しました。
|
|
ソートの部分に関しては初心者の私には非常に難しく理解するのに時間がかかりました。
しかし多くの方の力添えによりなんとか課題を提出する事ができそうです。
私の理解が足りない部分が多くご迷惑をおかけしましたが、無事解決しました。
本当にありがとうございました。
少し背伸びしすぎたかもしれませんが良い勉強になったと思います。
本当に本当にありがとうございました。
138ポイント を落としてしまった。
|
|
|
|
Name: 玲 ..ぴよぴよ(119ポイント)
Date: 2008/09/07(日) 05:04
No:20985
|
|
Title: 文字表示についての質問
|
|
このサイトの掲示板への初投稿です。よろしくお願いします。
今年大学に入り、C言語を学び始めました。わからないことだらけでC言語について調べていたところ、こちらのサイトにたどり着きました。こちらのサイトで学んでゲームが作れたらと思っています。
本題は、「ゲームプログラミングの館」の、〜入門編〜の、6.文字を表示する、についての質問です。
「どこがわからないのか」…文字を表示することはできたのですが、文字を消す方法が分からず、文字を消すことができなくて困っています。
「自分はどこまでやったのか」…白で文字を表示していたので、同じ座標に背景と同じ色で同じ文字を表示しようとしましたがエラーになってしまいました。
「結局何が行いたいのか」…行いたいことは、まず文字を表示して、ENTERを押したらその文字を消すという処理です。
「自分のC言語の知識はどの程度なのか」…この春から学び始めたばかりで果てしなく初心者です。
長文失礼しました。基本的なことだとは自覚してはいますが、そこから学ばないといけないレベルなのでどうか返信よろしくお願いします。
119ポイント を手に入れた。
|
|
|
|
Name: J ..初心者(8,938ポイント)
Date: 2008/09/07(日) 07:03
No:20987
|
|
Title: Re:文字表示についての質問
|
|
この質問には私からは答えることはしません。
ただ、第13章まで進んでみてください。
きっと私が教えるより、理解できるでしょう。
私が言えるのはこれだけです。
62ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..上級者(15,766ポイント)
Date: 2008/09/07(日) 12:05
No:20992
|
|
Title: Re:文字表示についての質問
|
|
>背景と同じ色で同じ文字を表示
「背景と同じ色」というのはどのように色を指定しましたか?
出たというエラーの内容が分からないのですが、宣言していない変数を使ったのではないですか?
>行いたいことは、まず文字を表示して、ENTERを押したらその文字を消すという処理です。
ということですが、ENTERを押されるまでは文字を表示して、押されたら文字を表示しない、と置き換えてもいいですか?
それとも、ENTERを押された後は 背景と同じ色で文字を上書きして見た目だけ消えたように見せるのですか?
後者の方法だと、背景が単色でなければ使えません。
なので前者の方法で進めていきます。
ENTERがまだ押されてなければ「文字を表示する処理」をする、押されていたら「文字を表示する処理」をしない。
このように条件によって違うことがしたい(したくない)場合にはif文を使います。
if ( /*ENTERがまだ押されていない*/ ) { /*文字を表示する*/ }
if文の()の中が真、つまり条件が満たされているか0以外の値であれば{}内の処理がされます。
そしてENTERが押される前か後かを判別する方法ですが、後で第19章と第22章を読んでください。
ここでは簡単に説明します。
ENTERが押されたかどうかの「フラグ」を用意して、ENTERが一度でも押されたら0、まだ押されてなければ1と
仮に決めておいて、フラグが1ならば文字を表示する処理を行う({}内の処理を行う)ようにif文の()の中身を
書いてあげます。等号は「==」です。「=」一つだけだと代入になるので気を付けてください。
キーの入力については第10章がそのまま使えますのでここであえて説明する必要も無いでしょう。
では頑張ってください。
632ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(711,667ポイント)
Date: 2008/09/07(日) 12:15
No:20993
|
|
Title: Re:文字表示についての質問
|
|
規約をよくお読みになって丁寧に質問してくださりありがとうございますm(_ _)m
Jさんの仰るとおり、13章までやってみて下さい。
先に回答すると
ClearDrawScreen();
という関数を呼べば、画面に描いてある内容は消えます。
しかしこれだけでは色んな弊害が出てくるはずです。
まぁとにかく13章まで先に読んでもらったほうが良いと思います。
ただ
>同じ座標に背景と同じ色で同じ文字を表示しようとしましたがエラーになってしまいました。
エラーというのはコンパイル出来ないということですか?
同じ座標に背景と同じ色で描画する事は出来ます。
黒はGetColor(0,0,0)で取得出来ますから、この色で書けばエラーにはなりません。
もしそれでもエラーになるときは、ソースコードを投稿してもらったらはっきりするかもしれません。
286ポイント を手に入れた。
|
|
|
|
|
Name: 玲 ..ぴよぴよ(165ポイント)
Date: 2008/09/07(日) 15:36
No:20995
|
|
Title: Re:文字表示についての質問
|
|
Jさん、木霊さん、管理人さん質問への早いご回答ありがとうございます。
Jさんと管理人さんが仰っているように13章まで進んでみようと思います。それでもわからない場合は改めて質問させていただこうかと思います。
できれば木霊さんの仰っている19章と20章にも、頭が混乱しない程度に先に目を通してみます。
最後にもう1度、回答ありがとうございました。
46ポイント を手に入れた。
|
|
|
|
|
Name: 玲 ..ぴよぴよ(289ポイント)
Date: 2008/09/07(日) 18:42
No:20999
|
|
Title: Re:文字表示についての質問
|
|
とりあえず現状を報告いたします。
13章までを読み、管理人さんの言うとおりに同じ場所に背景と同じ色で文字を表示することができることを確認しました。
どうやら昨日は寝ぼけていたのか失敗していたようです。申し訳ありませんでした。
次は文字に色を重ねるのではなく、文字を消すということに挑戦してみたいと思います。
124ポイント を手に入れた。
|
|
|
|
|
Name: 玲 ..ぴよぴよ(621ポイント)
Date: 2008/09/07(日) 19:25
No:21002
|
|
Title: Re:文字表示についての質問
|
|
連続投稿になりますが文字を消す簡単なプログラムを書いてみました。起動も試して成功したのですが、直すべき点がございましたら、ご指導お願いします。↓がプログラムになります。なおプログラムの元はこのサイトの6章と13章を引用させていただきました。ありがとうございます。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
int White,Black ;
White = GetColor( 255 , 255 , 255 ) ;
while( CheckHitKey( KEY_INPUT_Z ) == 0 ){
DrawString( 200, 150 , "zを押すと文字を消します。" , White );
if( ProcessMessage() == -1 )
break ;
}
ClearDrawScreen();
while( CheckHitKey( KEY_INPUT_RETURN ) == 0 ){
DrawString( 200 , 250 , "ENTERキーを押すと終了します。" , White );
if( ProcessMessage() == -1 )
break ;
}
DxLib_End() ;
return 0 ;
}
ご指導お待ちしています。
332ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(712,023ポイント)
Date: 2008/09/07(日) 19:32
No:21003
|
|
Title: Re:文字表示についての質問
|
|
「文字を消す」のではなく、「文字を書かない」という考えの方が正しいと思います。
このループのアルゴリズムは
while(){
メッセージ処理;
画面消去;
描画;
描画反映;
}
となっていますから、毎回描画したものだけこちらに見えるわけですので、
書かなければ(処理しなければ)描画されないわけです。
36章のプログラム
http://dixq.net/g/#36
に赤字の部分を追加したプログラムがこちらです。
#include "DxLib.h"
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
if(Key[KEY_INPUT_Z]==1)
DrawString(0,0,"Zキーが押されていますよ。",GetColor(255,255,255));
ScreenFlip();
}
DxLib_End();
return 0;
}
このプログラムがわかれば「消す」ではなく「描画しない」ことによって
真っ暗になるのが解ると思います。
また13章以降は一部を除いて順番が特にないので、どの章から読んでいただいても大丈夫です。
(まぁ順番に読んでもらった方が良いとは思います)
356ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(712,768ポイント)
Date: 2008/09/07(日) 19:57
No:21005
|
|
Title: Re:文字表示についての質問
|
|
先ほどの投稿はNo:21002の投稿された記事を見ずに投稿しました。
投稿されたプログラムについての回答は以下に書きますのでご覧下さい。
まず、ゲームを作るときは裏画面処理が必須になってくるので、
13章以前のプログラムコードは忘れて下さい。
41章に、毎回必ず書くべきコードをかいています。
http://dixq.net/g/#41
これからプログラムを書くときは毎回これをコピペして、
//ココ
と書かれている部分を消してその部分に処理を書いていってください。
while(継続条件){
//処理
}
を連続して書いていく方法では、もし似たような処理を10個行いたくなったらどうしましょう?
while(継続条件){
//処理
}
while(継続条件){
//処理
}
while(継続条件){
//処理
}
while(継続条件){
//処理
}
while(継続条件){
//処理
}
while(継続条件){
//処理
}
while(継続条件){
//処理
}
while(継続条件){
//処理
}
while(継続条件){
//処理
}
while(継続条件){
//処理
}
と書いていくのは大変です。しかし
私が上に提示したプログラムを拡張して
A〜Iキーが入力されたらそのキーが入力中だと表示するプログラムをこのようにかくと
#include "DxLib.h"
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
if(Key[KEY_INPUT_A]==1) DrawString(0,0,"Aキーが押されていますよ。",GetColor(255,255,255));
if(Key[KEY_INPUT_B]==1) DrawString(0,0,"Bキーが押されていますよ。",GetColor(255,255,255));
if(Key[KEY_INPUT_C]==1) DrawString(0,0,"Cキーが押されていますよ。",GetColor(255,255,255));
if(Key[KEY_INPUT_D]==1) DrawString(0,0,"Dキーが押されていますよ。",GetColor(255,255,255));
if(Key[KEY_INPUT_E]==1) DrawString(0,0,"Eキーが押されていますよ。",GetColor(255,255,255));
if(Key[KEY_INPUT_F]==1) DrawString(0,0,"Fキーが押されていますよ。",GetColor(255,255,255));
if(Key[KEY_INPUT_G]==1) DrawString(0,0,"Gキーが押されていますよ。",GetColor(255,255,255));
if(Key[KEY_INPUT_H]==1) DrawString(0,0,"Hキーが押されていますよ。",GetColor(255,255,255));
if(Key[KEY_INPUT_I]==1) DrawString(0,0,"Iキーが押されていますよ。",GetColor(255,255,255));
ScreenFlip();
}
DxLib_End();
return 0;
}
似たような重複した記述が少なく、効率的ですよね。
このように、
ループの中の
while(){
ProcessMessage();
ClearDrawScreen();
//ココ
ScreenFlip();
}
「//ココ」に処理を追加していく書き方がよいでしょう。
828ポイント を手に入れた。
|
|
|
|
|
Name: 玲 ..ぴよぴよ(773ポイント)
Date: 2008/09/07(日) 22:06
No:21012
| 解決!
|
Title: Re:文字表示についての質問
|
|
ご評価ありがとうございます。私はまだ先に進んでいないので意味が10分の1も理解できていないと思いますが、効率的にプログラムを書く方法をわかりやすく教えてくださったんだと思います。今回の「文字を書かない」というプログラムについては解決できたと感じているので解決のマークを表示させていただきます。Jさん、木霊さん、管理人さん、本当にありがとうございました。この先ゲームを作っていく上でいろんな問題が発生すると思いますが、その時もこの掲示板を利用させてください。また、その時はよろしくお願いします。
152ポイント を手に入れた。
|
|
|
|
Name: fight ..ぴよぴよ(177ポイント)
Date: 2008/09/06(土) 15:18
No:20964
|
|
Title: 教えてください
|
|
c言語を始めて間もないものです。添付してあるソースプログラムはBinary Dataに2進数の文字列を入力するとビットごとにある確率で0を1に、1を0に変更して出力させるものです。ある方に作成していただいたのですが・・・これを少し書き換えてBinary Dataを1回入力したら一気に10回実行して出力するようにしたいと思っています。自分でfor文を使用して色々やってみたのですがうまくいきません。このような場合どのようにすればいいのか教えていただきたくて質問させていただきました。よろしくお願いします。
177ポイント を手に入れた。
|
|
|
|
Name: array ..プログラマー(25,108ポイント)
Date: 2008/09/06(土) 19:24
No:20966
|
|
Title: Re:教えてください
|
|
原因はポインタにある・・・のかもしれません。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
char bin[100];
char bin2[100];
char *p;
int pcnt;
int error;
int i;
/* 乱数の初期化 */
srand(time(0));
/* データ入力 */
printf("Noise Rate (%%) ? "); scanf("%d", &pcnt);
while(1) {
printf("Binary Data ? "); scanf("%s", bin);
p = bin;
/* 入力情報をコピる */
strcpy(bin2, bin);
/* 実行打ち切り */
if( *p != '0' && *p != '1') break;
for(i=0; i<10; i++){
/* 入力情報を戻す */
strcpy(bin, bin2);
/* 番地を戻す */
p = bin;
/* 確率pcnt%でのノイズ混入実行 */
while( *p != '\0' ) {
error = (int)rand()%100 < pcnt;
if( error ) {
if( *p == '0') *p = '1';
else *p = '0';
}
p++;
}
/* 出力 */
printf("Output = %s\n", bin);
}
}
return 0;
}
こんな感じで10回出力してくれたりしませんかね・・・結果確認してないので出来てなかったら言ってください。実際に試してみます。
464ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(125,373ポイント)
Date: 2008/09/06(土) 19:50
No:20967
|
|
Title: Re:教えてください
|
|
> 自分でfor文を使用して色々やってみたのですがうまくいきません。
その、うまくいかないコードを載せてみる予定はありますか?
26ポイント を手に入れた。
|
|
|
|
|
Name: fight ..ぴよぴよ(532ポイント)
Date: 2008/09/06(土) 20:41
No:20968
|
|
Title: Re:教えてください
|
|
>boxさん 本当に恥ずかしいのですが・・・自分で手を加えたのはこれです。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
char bin[100];
char *p;
int pcnt;
int error;
int i;
/* 乱数の初期化 */
srand(time(0));
/* データ入力 */
printf("Noise Rate (%%) ? "); scanf("%d", &pcnt);
for(i = 0; i <= 10; i++){
while(1) {
printf("Binary Data ? "); scanf("%s", bin);
p = bin;
/* 実行打ち切り */
if( *p != '0' && *p != '1') break;
/* 確率pcnt%でのノイズ混入実行 */
while( *p != '\0' ) {
error = (int)rand()%100 < pcnt;
if( error ) {
if( *p == '0') *p = '1';
else *p = '0';
}
p++;
}
/* 出力 */
printf("Output = %s\n", bin);
}
}
return 0;
}
355ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(125,442ポイント)
Date: 2008/09/06(土) 21:01
No:20975
|
|
Title: Re:教えてください
|
|
> 携帯からご覧になると、投稿時の添付ファイルが見えないのですが、
> プログラムは添付してあるようです。
最初の投稿で添付してあったのは、
> 添付してあるソースプログラムはBinary Dataに2進数の文字列を入力すると
> ビットごとにある確率で0を1に、1を0に変更して出力させるものです。
> ある方に作成していただいたのですが・・・
であって、
> これを少し書き換えてBinary Dataを1回入力したら
> 一気に10回実行して出力するようにしたいと思っています。
> 自分でfor文を使用して色々やってみたのですがうまくいきません。
これではないです。
だから、
> その、うまくいかないコードを載せてみる予定はありますか?
と書きました。
29ポイント を手に入れた。
|
|
|
|
|
Name: array ..プログラマー(25,551ポイント)
Date: 2008/09/06(土) 21:22
No:20979
|
|
Title: Re:教えてください
|
|
あれ、実行してみると私の思ってるとおり動作しているのですが、この動作は間違ってるのでしょうか
>Binary Dataを1回入力したら一気に10回実行して出力するようにしたいと思っています
入力後、そのデータにノイズ混入シュミレーションを10回繰り返すんですよね。
上記のプログラムそのままです。
#######実行結果########
Noise Rate (%) ? 50
Binary Data ? 00000000 ←2進数入力
Output = 11101101 ←以下ノイズが50%で混入
Output = 00101001
Output = 11000110
Output = 10001101
Output = 11101111
Output = 11100010
Output = 00111100
Output = 11111100
Output = 00111011
Output = 11101101
Binary Data ? ←再度入力
#######実行結果2########
Noise Rate (%) ? 10 ←ノイズ混入10%
Binary Data ? 00000000
Output = 00100000
Output = 00000001
Output = 00000000
Output = 00100000
Output = 00000000
Output = 00010000
Output = 01000000
Output = 00000000
Output = 00000000
Output = 00001000
Binary Data ?
443ポイント を手に入れた。
|
|
|
|
|
Name: あっちゃん ..ぴよぴよ(138ポイント)
Date: 2008/09/06(土) 21:40
No:20980
|
|
Title: Re:教えてください
|
|
間違えて覚えている人がホントに多いけど
(誤)シュミレーション
(正)シミュレーション simulation
36ポイント を手に入れた。
|
|
|
|
|
Name: array ..プログラマー(25,714ポイント)
Date: 2008/09/06(土) 21:53
No:20981
|
|
Title: Re:教えてください
|
|
すみません、ご指摘ありがとうございます。
一応知ってはいるのです、間違いに気づいたのは高校時代。
最近、シュミットトリガなるものが授業ででてきて、それこそノイズを除去するのに重要な回路なんですよね(←とくに意味はありません)
間違い意識が薄くなってました・・・orz
間違って一度覚えた事だから意識してないと、今までのノリでやっぱりシュミレーションと書いちゃいます・・・よね?^^;
163ポイント を手に入れた。
|
|
|
|
|
Name: fight ..ぴよぴよ(577ポイント)
Date: 2008/09/06(土) 22:30
No:20983
| 解決!
|
Title: Re:教えてください
|
|
>arrayさん あれ!?今やってみると上手くいきました!!!勘違いをしていてすみません(><)ありがとうございました☆
40ポイント を手に入れた。
|
|
|
|
Name: フォンクス ..ぴよぴよ(753ポイント)
Date: 2008/09/06(土) 20:42
No:20969
|
|
Title: リンク中にエラー
|
|
ここサイトのプログラムを見ながら自分で作ってみたのですが、
リンク中にエラーが出るんですがそれがどうしても直せません。
リンクしています...
fps.obj : error LNK2005: "struct player_t Player" (?Player@@3Uplayer_t@@A) は既に firstinit.obj で定義されています。
main.obj : error LNK2005: "struct player_t Player" (?Player@@3Uplayer_t@@A) は既に firstinit.obj で定義されています。
setcolor.obj : error LNK2005: "struct player_t Player" (?Player@@3Uplayer_t@@A) は既に firstinit.obj で定義されています。
load.obj : error LNK2005: "struct player_t Player" (?Player@@3Uplayer_t@@A) は既に firstinit.obj で定義されています。
player.obj : error LNK2005: "struct player_t Player" (?Player@@3Uplayer_t@@A) は既に firstinit.obj で定義されています。
gameinitialize.obj : error LNK2005: "struct player_t Player" (?Player@@3Uplayer_t@@A) は既に firstinit.obj で定義されています。
sturct player_t Player は構造体の宣言のすぐ下に
typedef struct{
double x,y; //座標
int img;
int shot[11][15];
int counter;
}player_t;
player_t Player;
としか書いてないんですが
501ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(125,413ポイント)
Date: 2008/09/06(土) 20:52
No:20971
|
|
Title: Re:リンク中にエラー
|
|
> player_t Player;
これと同じ内容が、複数のソースファイル
(リンク・エラーが出ている〜.objに対応する〜.c)に
存在していませんか?
40ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(711,381ポイント)
Date: 2008/09/06(土) 20:58
No:20974
|
|
Title: Re:リンク中にエラー
|
|
恐らく複数のファイルからその定義をしたファイルをインクルードしているのだと思います。
ファイルの作り方がよくわからない場合は、シューティングの館にも、龍神録プログラミングの館にも
プロジェクトファイルがダウンロード出来るのでそちらをご覧下さい。
見比べていただければ解り易いと思います。
145ポイント を手に入れた。
|
|
|
|
|
Name: フォンクス ..ぴよぴよ(806ポイント)
Date: 2008/09/06(土) 21:18
No:20977
|
|
Title: Re:リンク中にエラー
|
|
> > player_t Player;
>
> これと同じ内容が、複数のソースファイル
> (リンク・エラーが出ている〜.objに対応する〜.c)に
> 存在していませんか?
> 恐らく複数のファイルからその定義をしたファイルをインクルードしているのだと思います。
> ファイルの作り方がよくわからない場合は、シューティングの館にも、龍神録プログラミングの館にも
> プロジェクトファイルがダウンロード出来るのでそちらをご覧下さい。
> 見比べていただければ解り易いと思います。
早速見させてもらいました。
player_t Player;の場所を同じようなところに書き換えたところ
でなくなりました
boxさん 管理人さん
答えてきただきありがとうございました。
53ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(49,705ポイント)
Date: 2008/09/05(金) 10:29
No:20947
|
|
Title: Re:画像をぐにゃぐにゃさせるには・・・?
|
|
ラスタースクロールですね。
画像を縦一ドット単位で、X座標をずらしながら表示することで実現できます。
X座標のずらしは、sinやcosの使用をおすすめします。
39ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(17,454ポイント)
Date: 2008/09/05(金) 10:50
No:20948
|
|
Title: Re:画像をぐにゃぐにゃさせるには・・・?
|
|
ゲーム専用機ならH-Blank毎の割り込み使ってX位置変化させるだけですむんですけどね
DxLibならGIFアニメのように複数の画像を用意して表示するのが簡単かな
41ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(709,823ポイント)
Date: 2008/09/05(金) 11:10
No:20949
|
|
Title: Re:画像をぐにゃぐにゃさせるには・・・?
|
|
サンプルを作ってみました。
ぐにゃぐにゃさせたい画像をapple.pngとしています。
ここの画像は任意にご変更下さい。
実行結果
元の画像 → http://dixq.net/img/apple.png
変換後
#include "DxLib.h"
#include <math.h>
#define PI 3.1415926535898
//周期
#define T 200
//ぐにゃぐにゃする間隔
#define L 0.6
//ぐにゃぐにゃする大きさ
#define R 20
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int i,image,count=0;
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;
image=LoadGraph("apple.png");
while(ProcessMessage()==0&&ClearDrawScreen()==0&&CheckHitKey( KEY_INPUT_ESCAPE )==0){
for(i=0;i<480;i++){
SetDrawArea( 0 , i , 640 , i+1 ) ;
DrawGraph(100+R*sin(PI*2*((int)(count+i/L)%T)/T),0,image,TRUE);
}
count++;
ScreenFlip();
}
DxLib_End();
return 0;
}
以下プログラムコードの説明です。
表示サイズが640x480なので、480回にわけて、
1行ずつx座標をずらしながら描画を繰り返しています。
その際、描画領域を設定する関数SetDrawAreaで描画可能エリアをセットします。
1回目の描画は0<=x<640,0<=y<1
2回目の描画は0<=x<640,1<=y<2
3回目の描画は0<=x<640,2<=y<3
・・・の範囲でyを480まで増加させます。
x座標の計算式はこれです。
100+R*sin(PI*2*((int)(count+i/L)%T)/T)
見た目わけわかんないですね・・。
まず、sinの性質はOKでしょうか。
2πで1周期になりますね。その間、-1<=sin(θ)<=1の間を綺麗に移動してくれます。
今振幅(動かしたい幅)を例えば20とすると
sin(θ)*20は上記の式から
-20<=sin(θ)*20<=20
となります。これで揺らしたい幅がセットできます。
お次は揺らしたい周期です。どれだけでゆらゆらゆれてもとの位置に戻るかです。
ここで、モニタは60FPSだとします。
countは1周で1増えますから、1秒だと60増えますね。
すると(count%60)/60.0は1秒かけて0から1(に近い値)まで増加します。
1秒かけて2πまで増加させたいのなら
2π*(count%60)/60.0
となります。この60は周期なのでTで定義しておきます。また、πもPIとして定義します。
2*PI*(count%T)/T (この時、PIがdoubleなので、全体はdoubleになります。)
後は、y座標によってゆれる位置を変えたいので、countにy座標であるiを足してみます。
どれ位足すかはLで調整出来るようにしておきます。
count+i/L
こうなりますね。これらを全てあわせると
100+R*sin(PI*2*((int)(count+i/L)%T)/T)
となるわけです。Rは上でいう20、100は単に初期位置です。
T,L,Rの値を自分がしたい動作になるように変更して下さい。
301ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(710,638ポイント)
Date: 2008/09/05(金) 17:35
No:20951
|
|
Title: Re:画像をぐにゃぐにゃさせるには・・・?
|
|
ちょうどいい値を見つけられるようツールモドキにしてみました。
先ほどdefineで定義していた値はそのキーを押しながら左右キーを押す事で変動します。
つまり周期Tを変化させたい時は、キーボードのTキーを押しながら十字キーの左右を押してください。
L,Rキーも押しながら左右キーを押す事でそれぞれ値が変動します。
確認しながら値が変更できるので、ちょうど良い値が見つけやすいと思います。
なお、0割りなどのエラー処理はしていませんので、値が0や負にならないようにして下さい。
#include "DxLib.h"
#include <math.h>
#define PI 3.1415926535898
//周期
int T=200;
//ぐにゃぐにゃする間隔
double L=0.6;
//ぐにゃぐにゃする大きさ
int R=20;
int Key[256];
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int i,image,count=0;
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;
image=LoadGraph("apple.png");
while(ProcessMessage()==0&&ClearDrawScreen()==0&&
GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
for(i=0;i<480;i++){
SetDrawArea( 0 , i , 640 , i+1 ) ;
DrawGraph(100+R*sin(PI*2*((int)(count+i/L)%T)/T),0,image,TRUE);
}
if(Key[KEY_INPUT_T]>0){
if(Key[KEY_INPUT_LEFT ]==2)T-=10;
if(Key[KEY_INPUT_RIGHT]==2)T+=10;
}
if(Key[KEY_INPUT_L]>0){
if(Key[KEY_INPUT_LEFT ]==2)L-=0.05;
if(Key[KEY_INPUT_RIGHT]==2)L+=0.05;
}
if(Key[KEY_INPUT_R]>0){
if(Key[KEY_INPUT_LEFT ]==2)R-=1;
if(Key[KEY_INPUT_RIGHT]==2)R+=1;
}
SetDrawArea( 0 , 0 , 640 , 480 ) ;
DrawFormatString(0,460,GetColor(255,255,255),"T=%d,L=%.2f,R=%d",T,L,R);
count++;
ScreenFlip();
}
DxLib_End();
return 0;
}
815ポイント を手に入れた。
|
|
|
|
|
Name: J ..初心者(8,829ポイント)
Date: 2008/09/05(金) 21:17
No:20953
|
|
Title: Re:画像をぐにゃぐにゃさせるには・・・?
|
|
す、凄まじい計算式ですね・・・圧巻です。。
こういう式を思いつく人には頭が上がりません(笑)
三角関数は確かに習いましたが、こういう形になると全く理解していないことに気がつかされます(汗
アニメーション全般に関わると言われているんですよね・・・三角関数は。
是非ともどこかでマスターしたいものです。言うだけ言えますけどね(大汗
皆様、回答ありがとうございます。管理人さんのソースは今実行してみるので、
質問があったらまた書き込みます。
131ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(710,963ポイント)
Date: 2008/09/05(金) 22:36
No:20954
|
|
Title: Re:画像をぐにゃぐにゃさせるには・・・?
|
|
いえいえ、式がややこしくみえるだけで、全く難しいことは書いて無いです。
2πで1周期になること、sin(θ)は-1から1まで変化することだけ知っていれば
誰にでも作れる式だと思います。
上の例では常に増加するカウンタを使って任意の周期に変換するという作業が入っているので少々
難しそうに見えるだけだと思います。
私も数学はべつに得意じゃないですし、特に三角関数を意識したこともないです。
なので、あまり構えずにリラックスしてみてみてくださいb
179ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..中級者(14,947ポイント)
Date: 2008/09/06(土) 01:33
No:20955
|
|
Title: Re:画像をぐにゃぐにゃさせるには・・・?
|
|
関数化してみました。
第一引数 画像を表示する領域の中心座標(X)
第二引数 画像を表示する領域の中心座標(Y)
第三引数 表示する画像のグラフィックハンドル
第四引数 ラスタースクロールの周期
第五引数 ラスタースクロールの振動幅
const double PI = 3.14159265358979323846;/* グローバル変数 */
void Raster_Scroll ( const int &X, const int &Y, const int &Gr_Handle, double Cycle, double Shake )
{
int Width = 0, Height = 0;/*画像の横幅と縦幅*/
static int Correction = 0;/*ラスタースクロールの補正*/
GetGraphSize ( Gr_Handle, &Width, &Height );
for( int I = 0; I < Height; ++ I ) {
DrawRectGraph ( X -Width /2 +cos ( ( I +Correction )/ 180.0 *PI *Cycle ) *Shake, Y -Height /2 +I,
0, I, Width, 1, Gr_Handle, TRUE, FALSE );
}
++ Correction;
return;
}
色んなやり方を見た方が勉強になるので管理人さんとは別のDxLib関数を使いました。
452ポイント を手に入れた。
|
|
|
|
|
Name: レッツ ..ぴよぴよ(403ポイント)
Date: 2008/09/06(土) 02:44
No:20956
|
|
Title: Re:画像をぐにゃぐにゃさせるには・・・?
|
|
横から質問すみません。
constって値を変えられなくするんですよね。
一方ポインタで受け取るのは値が書き換えられるようにするためですよね。
constでポインタで受け取る意味ってあるのでしょうか?
70ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..上級者(15,134ポイント)
Date: 2008/09/06(土) 03:16
No:20957
|
|
Title: Re:画像をぐにゃぐにゃさせるには・・・?
|
|
void Function ( int argv )
このような普通の形だと、関数が呼ばれた時にint型の変数argvが新しく宣言、値がコピーされ、関数を抜ける時に破棄されます。
void Function ( const int &argv )
一方、こちらはアドレスを介して値を参照してるわけです。
これがint型やdouble型ならたいした意味はないかもしれませんが、構造体だったらどうでしょう?
上の形だと構造体が新しく宣言されるので、そこに含まれる全ての変数が宣言されます。
構造体のメンバに更に別の構造体・・・となるとかなりの数の変数が宣言され、破棄されるわけです。
下のように参照渡しにすると、無駄な変数宣言が減ることになります。
そして、アドレスを渡すということは値を変更できる、ということなんですが、
今回は「逆に変更されたくない」からconst宣言をしているわけです。
187ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..上級者(21,451ポイント)
Date: 2008/09/06(土) 09:58
No:20958
|
|
Title: Re:画像をぐにゃぐにゃさせるには・・・?
|
|
> constでポインタで受け取る意味ってあるのでしょうか?
簡単に言うと、ポインタを書き換えるのはダメだけど、ポインタの指すエリアの値は更新してもいいよってこと。
関数内で間違ってポインタを書き換えてしまうようなソースを書いたとき、コンパイルエラーで見つけられるようにするための方法。
25ポイント を手に入れた。
|
|
|
|
|
Name: フリオ ..プログラマー(27,098ポイント)
Date: 2008/09/06(土) 11:16
No:20959
|
|
Title: Re:画像をぐにゃぐにゃさせるには・・・?
|
|
"const" がつく場所によって意味が変わります。
"const int *np" の場合は、
"np ++" は可ですが、"(*np) ++" は不可。
つまり、ポインタの値は変更できるが、
そのポインタによって参照される値は変更できない。
"int *const np" の場合は、
"np ++" は不可ですが、"(*np) ++" は可。
つまり、ポインタの値は変更できないが、
そのポインタによって参照される値は変更できる。
"const int *const np" の場合は、
"np ++" も、"(*np) ++" も不可。
つまり、ポインタの値も、
そのポインタによって参照される値も変更できない。
220ポイント を手に入れた。
|
|
|
|
Name: array ..上級者(21,252ポイント)
Date: 2008/08/30(土) 19:42
No:20704
|
|
Title: 龍神録の館について
|
|
一応利用規約が存在していますが、不明な点があったので。
私の読解力が低いのかもしれませんし
>また、同梱されている素材の中にはここでの使用に限って許可を頂いている素材もある為、
など以下にも説明がありますが、
龍神録の館で配布されているプログラムに同梱されている画像及び効果音は2次使用可能なのでしょうか。
あまり関係有りませんが、シューティングの館を参考にゲームを作っていたのですが
途中から龍神録の館が公開され、現在では37章をベースに色々機能追加をしていって、後は弾幕データやストーリー作成になったのですが、せっかくなのでキャラクター選択でアイシャも使えるようにしたいなと考えてるのですが。
※
自分が 使いたい&作るのが面倒だと思っているもので使用しても良いものがあるのか、リストを書いておきます。
・アイシャのアイコン(ドット絵)
・アイシャの立ち絵
・各弾画像
・各効果音
特に弾画像や効果音は自分で描いても多分、見栄えが悪くなるし、効果音はセンスの無いものになってしまうので、許可がもらえれば今後の製作意欲が強くなるのですが。<!--23-->
344ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(703,607ポイント)
Date: 2008/08/30(土) 19:56
No:20705
|
|
Title: Re:龍神録の館について
|
|
二次使用を許可すると歯止めが効かなくなりそうなのでとりあえず今の所ダメということでお願いします。
ただ報告して下さった方、作品を拝見させて下さる方、無料で公開される方に限り、
申し訳ないですが私の判断で許可させて頂きたいと思っています。
ただし、アイシャの立ち絵だけは私が製作したものではないので許可出来ないかもしれません。
今度聞いておきます。
元々私はこういう規約に全くうるさくない人間なので、全て気軽に使っていただきたいのですが、
どうも規約を細かく設けないと心無い使用をされる方がいらっしゃるようなので、仕方なく設けています・・。
もちろんarrayさんが心無い使用をされるとは思っていませんが、一般的にラインを決めないといけないので、
どうかご理解頂けるとありがたいと思います。
あと、最初は限りなく東方に似るように作ったため、色んな素材が東方に似ているのですが、
もし販売などお金に関わることをされる場合は、あまりよくないと思うので
完全にオリジナルにされた方がいいかもしれませんm(_ _)m
318ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(21,359ポイント)
Date: 2008/08/30(土) 21:01
No:20718
| 解決!
|
Title: Re:龍神録の館について
|
|
そうですか、まず完成するのか分りませんが、完成してから使用許可が下りなかったら凹むと思って事前に 管理人さんの判断がどのくらいの範囲なのか 確認をしておこうと思ったのですが。
許可が出ない部分は後から改善すれば良いので
とりあえず、完成させてからもう一度連絡してみます。
107ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(23,444ポイント)
Date: 2008/09/04(木) 19:02
No:20931
|
|
Title: Re:龍神録の館について
|
|
おぉ〜(・◇・ )
とりあえず、完成させようと思って色々頑張ってたのですが・・・ここまでしてもらって、完成まで持っていけなかったらスミマセンm(_ _)m
なにしろ素材が圧倒的にないので・・・ペイントを使い、ドット絵に挑戦しコピーして動きを作ろうとしても、なぜか正しくコピーされない(情報が失われてる?)ので綺麗なアニメーションにならない・・・。
なのでとりあえず絵的な物は置いておいて、大好きなプログラムを弄ってました^^
本題に入りますが・・・いや、トピにも関係ない雑談ですが、龍神録Pulsのラスボスはリリアですよね。そして、夢世界の崩壊と終焉が最終弾幕だと思ってるのですが、斧を手に入れる事が出来ないので、エクストラステージから挑戦して、やっとの思いでクリアしたと思ったらバットエンディング!? 「倒しきる事が出来なかった」という感じで終わるのですが、ノーボム、ノーミスでクリアしないと真エンディングは見れなかったりしますか?
どこかに説明文があれば、一応探したのですが見落としてました><
どこかに説明文があるか、一応探しましたが。あったらすみません。見落としてました。
2倍のポイントを手に入れた! 876ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 ..伝説のハッカー(708,158ポイント)
Date: 2008/09/04(木) 19:48
No:20932
|
|
Title: Re:龍神録の館について
|
|
ちと携帯からなので、手短に‥。
龍神録は困った事になってるんですよね‥。
プラスじゃなかった頃の龍神録はご存知ですか?
最初は通常5面のみ遊べるゲームで特定の条件を満たすとEXステージが出現するものでした。
特定の条件とEXステージの関係は以下のようなものです。
通常ステージをノーコンテニューでクリアすると、ショップで斧が買えるようになるので、斧を買ってキコリに話しかけます。すると道を邪魔していた木を切ってくれるので、下のエリアに進めるようになります。そこがEXステージです。出現させたらメニューから選択できるようになります。
最初の龍神録はここまでで、EXをクリアしても、屍は意味深な言葉を残すだけで物語は解決しません。
その後、ストーリーを完結させるために、パッチを出すつもりでしたが、この時製作時間は1000時間を越えていて疲れ切ってたので、少し話の続きをかいて龍神録は幕を閉じる予定でした。
しかしみなさんから沢山励ましの声を頂いたので、もっと頑張ってみようと、プラスを作る事にしました。
もう1ステージつくるならEXの延長ということになり、そうするとファンタズムステージになります。
プラスは、今までの教訓もいかして、弾幕から演出まで出来るだけ精一杯作りました。
だから私としては、プレイヤーさんに一番見てほしいのはファンタズムステージ。
しかしファンタズムの位置付けはEXをクリアした次。
ただでさえ、出現も困難なEX。ましてやクリアする人が全体の何%いるだろうか‥。
そうなると一番見てほしいファンタズムがほとんど見てもらえない‥、ということで仕方なく初回限定で、条件無しでEXもPHも遊べるようにしました。
で‥‥、
(う、重くなって来たので次へf^_^;
562ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(23,652ポイント)
Date: 2008/09/04(木) 19:57
No:20933
|
|
Title: Re:龍神録の館について
|
|
携帯からこの量・・・。
>プラスじゃなかった頃の龍神録はご存知ですか?
当時あまりプレイしませんでしたが(STGセンスがない orz)知ってますよ〜。PC初期化とともに消えてしまって残念に思ってるのですが、龍神録のロゴが動いてましたよね。
>通常ステージをノーコンテニューでクリアすると、ショップで斧が買えるようになる
これはクリアすると、説明(?)がでますよね。 正直無理!って思ってますけどw
208ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 ..伝説のハッカー(708,422ポイント)
Date: 2008/09/04(木) 19:58
No:20934
|
|
Title: Re:龍神録の館について
|
|
どうしたらストーリーの順番を保ちつつ、みんなにファンタズムを遊んでもらえるだろうと考えつつ、まぁもう少し後で考えたらいいやと思ってるうちに今になりました;
だから現在、斧はなんの意味もないです。
また、ファンタズムは難しすぎてライトプレイヤーに遊んでもらえない、ってことで、ファンタズムより簡単なファンタズムライトを作りました。
しかし、どちらも同じエンディングでは、本当のファンタズムをクリアする意味がなくなってしまうので、トゥルーエンディングは本当のファンタズムをクリアしないと見れないようにしてあります。
そして、元々作る予定のなかったファンタズム。村からいく方法がないんですよね;
今後何かの拡張の為にと、村に他にも木は生やしてあるんですが、ストーリー上、ファンタズムは村からいけてはおかしい;
EXをクリアした直後じゃないとおかしいんですよね‥。
こんな計画性の無い理由であれこれ機能やステージをつけた結果こんなわかりにくくなりましたf^_^;
自分で攻略サイトでも作りましょうか^^;
ゲーム製作に結果性は大事ですねorz
(そして全然手短じゃないw
264ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 ..伝説のハッカー(708,573ポイント)
Date: 2008/09/04(木) 20:09
No:20935
|
|
Title: Re:龍神録の館について
|
|
>PC初期化とともに消えてしまって残念に思ってるのですが、龍神録のロゴが動いてましたよね。
あ、以前そうおっしゃってたのはarrayさんでしたか。
そうそう、無駄なところで処理を重くしてましたよw
重いと散々言われたのであちこち改善しましたw
>正直無理!って思ってますけどw
クリアはイージーでよく、アイテムフル装備の、喰らいボムうちまくりでいいんですが、難しいですか?w
ちと改善予定なんで、もしよければ次回バージョンで頑張ってみてくださいw
151ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(24,011ポイント)
Date: 2008/09/04(木) 20:26
No:20936
|
|
Title: Re:龍神録の館について
|
|
私にSTGの腕があれば、攻略サイト作りたいんですけどね。
STGをまともにできない人の攻略サイトって何?となっちゃうので自粛しときます。
とりあえず、どこかにストーリー系列的な説明で、通常→EX→ファンタズム(かな?)と書いてあればストーリーが分りやすくなるのかもしれません。(最初は会話読まないでSTGだけ楽しもうとしてた自分が言う事じゃないですけどね・・・本当スミマセン)
攻略サイト作れる実力の人ってニコニコにプレイ動画を上げてる、あのうp主さんですかね。テスターもされていたとか。
>以前そうおっしゃってたのはarrayさんでしたか。
以前から、バックアップ取り忘れたと後悔してたんですが、掲示板で発言してましたっけ。記憶にないですw
あと、イージーではプレイしないので分らないのですが、あの6ステージを3〜5ステージくらいで何度もコンテニュー状態になると、流石に心が折れます。
359ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(24,183ポイント)
Date: 2008/09/04(木) 20:34
No:20937
|
|
Title: Re:龍神録の館について
|
|
ならイージーでしろ。ってなっちゃいますけど、なぜか一番難しい方でやりたいという心理が働くんですよね。
今度時間がある時にイージーでやってみます。
>次回バージョンで頑張ってみてくださいw
まさか3Dですかw? まあ違うと思いますけど、なんかアニメーションが強化されてそうですね^^
というか次回バージョン開発中とは知りませんでしたw 楽しみにしてます(^o^)
172ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(708,860ポイント)
Date: 2008/09/04(木) 21:15
No:20938
|
|
Title: Re:龍神録の館について
|
|
>最初は会話読まないでSTGだけ楽しもうとしてた
私もその辺のフリーゲームのSTGやるときに会話とか読んでないですし皆そんなもんだと思いますよw
>イージーではプレイしないので分らないのですが
まずイージーからやるべきでは^^;
ハードノーコンとか製作者である私でもかなり気合入れないと難しいですよw
まぁ通常ステージにエンディングは無いんですけどね。
>次回バージョン
次回バージョンアップ版と、次回作は違います^^;
一応次回作も今作っていますけど、現在の龍神録のバージョンアップもまだやって行きます。
とりあえずパワー1になるとムリゲーになるのを何とかします。
今日中にバージョンアップ版をあげれたらいいな・・。
287ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(24,213ポイント)
Date: 2008/09/04(木) 21:28
No:20939
|
|
Title: Re:龍神録の館について
|
|
>とりあえずパワー1になるとムリゲーになるのを何とかします。
たしかにパワー1だときついですよね。でもその為のレーザーだと思ってました。
通常5>レーザー>通常1って感じですかね。
>今日中にバージョンアップ版をあげれたらいいな・・。
結構遠いい話だと思ってましたけど、意外すぎるほど早いですね▽・w・▽
今度はイージーで全クリ目指してみます。
30ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(24,500ポイント)
Date: 2008/09/05(金) 17:26
No:20950
|
|
Title: Re:龍神録の館について
|
|
勘違いしててEXじゃなくてファンタズムのイージーを何度もプレイしてました。あれでやっとクリアして喜んでてEDどうやってみれるのか思ってたのですが。通常じゃないと見れないんですね。ファンタズムをやってみると難しすぎるw
イージーの弾幕なら、避けれるけど、通常になるとある程度誘導してあげないと避けれなくなるのが何個かありますよね・・・さっきから、何度も挑戦してるのですが、今のところ、スペクタクルズワルツまでしか進めないです。
一番楽しい弾幕は『夢世界の崩壊と終焉』です(*・・*)(イージーですが)。スピード感が好きです^^
それと、ちょっと違和感があったのですが、通常のファンタズムは食らいボムの受付時間が短くなってますか?・・・そんなことはないと思ってイージーと比べてみましたが、体感的にはちょっと違う感じがします。
287ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(710,784ポイント)
Date: 2008/09/05(金) 17:40
No:20952
|
|
Title: Re:龍神録の館について
|
|
あぁなるほど・・。
ファンタズムのイージーはオマケです^^;
ファンタズムや、通常のハードをクリアするにはやっつけ戦法じゃ無理なんで、かなり気合いれていかないと難しいと思いますw
>スペクタクルズワルツ
これ案外難しいですよねw
一度でも見た弾幕は練習できるようになるので、苦手なものは是非プラクティスで練習をっ!
>喰らいボム
イージーorライトは通常orハードの2倍の時間受付が許されます。
タネ明かししてしまうと、デフォルトで、
通常orハードは10FPS、つまり1/6秒受け付けますが、
イージーorライトは20FPS、つまり1/3秒受け付けます。
イージーはアイテムフル装備なら下手したら1秒いきそうな位判定が甘いです^^;
146ポイント を手に入れた。
|
|
|
|
Name: サブマリン ..ぴよぴよ(40ポイント)
Date: 2008/09/04(木) 15:21
No:20925
|
|
Title: 龍神録プログラミングの館13章
|
|
龍神録の館のプログラムで一通りSTGの勉強をしている者ですが、
13章の冒頭に「プロジェクトをダウンロード」と書いていますがその
ページにはダウンロードのリンクが無いようです。
消えている、それとも見落としている場所にあるのでしょうか?
こんな質問ですいませんが、よろしくお願いします。
40ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(707,484ポイント)
Date: 2008/09/04(木) 15:38
No:20926
|
|
Title: Re:龍神録プログラミングの館13章
|
|
龍神録プログラミングの館をご覧下さってありがとうございます。
>そのページにはダウンロードのリンクが無いようです。
プロジェクトのダウンロードリンクは一つしかありません。
トップページの37章へのリンクの下に
「この章までのプロジェクトを一括ダウンロード」
があると思いますので、それをクリックしてダウンロードして下さい。
13章の文章は紛らわしいですね。修正しておきました。
114ポイント を手に入れた。
|
|
|
|
|
Name: サブマリン ..ぴよぴよ(84ポイント)
Date: 2008/09/04(木) 22:42
No:20941
| 解決!
|
Title: Re:龍神録プログラミングの館13章
|
|
そこにあったんですね、気が付きませんでした。
素早い対応ありがとうございました。
44ポイント を手に入れた。
|
|
|
|
Name: 七雲紫 ..ぴよぴよ(114ポイント)
Date: 2008/09/04(木) 16:32
No:20927
|
|
Title: 音楽の読み込みについて
|
|
サンプルの龍神録や本家東方も同じですが
ボスが出現した際に音楽の切り替えをしていますがどのように記述しているのでしょうか?
今現在はmain処理にこちらで紹介されている以下の方法
PlayMusic("../dat/music/トラック05.ogg" , DX_PLAYTYPE_LOOP ) ; //トラック05.oggのループ演奏
を記述し音楽を流していますが1ステージ毎やボス戦などの音楽の切り替え処理の方法が分からないのですがどういう記述をすればよいのでしょう??
114ポイント を手に入れた。
|
|
|
|
Name: J ..初心者(8,426ポイント)
Date: 2008/09/04(木) 17:07
No:20928
|
|
Title: Re:音楽の読み込みについて
|
|
StopMusic関数なるものがあったと思います。
詳しくはDxライブラリ本家の解説をお読みになるとよいかと思います。
また、PlayMusicはいちいち音楽をハードディスクより読み込んでいるので、
メモリに音楽を読み込んで再生できる状態にする関数があるので(LoadSoundMemだったかと)
そちらのほうを使いましょう。
144ポイント を手に入れた。
|
|
|
|
|
Name: 七雲紫 ..ぴよぴよ(145ポイント)
Date: 2008/09/04(木) 17:34
No:20930
|
|
Title: Re:音楽の読み込みについて
|
|
皆様ご回答ありがとうございました。
参考になりました。
31ポイント を手に入れた。
|
|
|
|
Name: fumi ..ぴよぴよ(29ポイント)
Date: 2008/09/02(火) 21:38
No:20874
|
|
Title: リンクに関する警告が出ます。
|
|
初めまして!
日ごろここで勉強させてもらっている、fumiと申します。
C言語歴は1年弱程度の初心者です。
早速質問なのですが、龍神録の館のプログラムをビルドしますと、何回かに1回リンクに関する下記のような警告がでてしまいます。
LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合していま す。/NODEFAULTLIB:library を使用してください。
この警告を解決するにはどのようにしたらいいのでしょうか?
環境は、
Windows XP
Visual C++ 2005 ExpressEdition
です。
プログラム自体は実行しますとちゃんと動くのですが、ちょっと気になっていたので投稿させていただきました。
どうかご教授お願いします。
29ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(219,507ポイント)
Date: 2008/09/03(水) 00:37
No:20882
|
|
Title: Re:リンクに関する警告が出ます。
|
|
>この警告を解決するにはどのようにしたらいいのでしょうか?
37章のプロジェクトで見てみました。
あー、なるほど。たしかに。
とりあえず、修正手順を下に書いてみました。
うちは VS2008なのでひょっとしたらうまくいかないかもしれません。
一応念のため、プロジェクト一式のバックアップをとった上でお試し下さい。
1 ソリューションエクスプローラのリソースファイルのフォルダから
*.libを全て消します(選択して DELキーを押して、確認ダイアログで「はい」を選択」)。
2 プロジェクトのプロパティを開きます。(プロジェクトメニューのプロパティ)
プロジェクトメニューのプロパティを選択するか、ソリューションエキスプローラ上の
Ryujinと書かれているところを右クリックして、プロパティを選択して下さい。
3 プロパティページの上部にある構成を 「アクティブ(Debug)」から「すべての構成」に切り替えます。
4 「構成プロパティ」の「リンカ」の「全般」の中に「追加のライブラリディレクトリ」というのが
あるので、そこに記述されている文字列を消して "..\include"と記述します。
5 プロパティ上部にある構成を Relaseに切り替えます。
6 構成プロパティ」の「C/C++」の「コード生成」の中に「ランタイムライブラリ」というのが
あるので、そこをマルチスレッドデバッグ(MTd)から マルチスレッド (MT)に
切り替えます。
これで、出なくなるかと思います。
663ポイント を手に入れた。
|
|
|
|
|
Name: fumi ..ぴよぴよ(71ポイント)
Date: 2008/09/04(木) 03:27
No:20917
| 解決!
|
Title: Re:リンクに関する警告が出ます。
|
|
Justyさん、ありがとうございます。
教えてくださった修正手順のようにしてみたら、警告がでなくなりました。
この警告は、いったい何だったのでしょうか?
また、1〜4はライブラリのリンクの仕方を変えたのだと理解できたのですが、5、6でReaseのマルチスレッドデバッグからマルチスレッドに切り替えを行ったのは何故なのでしょうか?
お手数ですが、もう一歩理解を深めたいので教えてくれたら幸いです。
(当初の問題は解決したので、マークを「解決!」にしておきました。)
42ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(17,143ポイント)
Date: 2008/09/04(木) 10:08
No:20919
|
|
Title: Re:リンクに関する警告が出ます。
|
|
5,6について
LIBCMTはマルチスレッド(MT)用のCランタイムライブラリ(LIBC)です。
VC++にはデバッグモード用のLIBCとしてLIBCMTDというライブラリもあります。
これらはコンパイルオプションの /MT でLIBCMTが /MTd でLIBCMTDがリンクされます。
普通にプロジェクトを作るとデバッグモードでは /MTd に、リリースモードでは /MT に設定されます。
最初のエラーについて
最初の状態ではリソースファイルの部分にDXLibのライブラリファイルがすべて入っています。
よく見ると同じ名前で_dのついたファイルとペアになっているのがわかると思います(DxLib.libとDxLib_d.lib)。
_dのないライブラリはLIBCMTを_dのついたライブラリはLIBCMTDを使っているものと考えられます。
プロジェクトにリソースファイルとして追加されているためこれらを同時にリンクしようとするのですがプログラムにリンクできるのはLIBCMTかLIBCMTDのどちらか1つだけですのでエラーが出たわけです。
ひとつの解決法としてデバッグモードしか使わないというのであれば_d.libだけ残して他の.libファイルをリソースファイルから削除すればデバッグモードでのエラーは出なくなるはずです。
でもせっかくDxLib.hで
#ifdef _DEBUG
#pragma comment( lib, "DxLib_d.lib" ) // DXライブラリ使用指定
#pragma comment( lib, "DxUseCLib_d.lib" ) // 標準Cライブラリを使用する部分の lib ファイルの使用指定
#else
#pragma comment( lib, "DxLib.lib" ) // DXライブラリ使用指定
#pragma comment( lib, "DxUseCLib.lib" ) // 標準Cライブラリを使用する部分の lib ファイルの使用指定
#endif
と設定してあるのでライブラリのリンクはDxLib.hにまかせてプロジェクトファイルからは削除するのが正常なやり方でしょう。
624ポイント を手に入れた。
|
|
|
|
|
Name: fumi ..ぴよぴよ(257ポイント)
Date: 2008/09/04(木) 12:38
No:20920
|
|
Title: Re:リンクに関する警告が出ます。
|
|
toyoさん、回答ありがとうございます。
丁寧かつわかりやすい内容で理解を深めることができました。
>リンクはDxLib.hにまかせてプロジェクトファイルからは削除するのが正常なやり方でしょう。
文の前後関係から、プロジェクトファイルからは削除しない、と捉えてよろしいのでしょうか?
また、DxLib.hにまかせる、ということは、DxLib.h内で"_DBUG"を自分で定義するということなのでしょうか?
186ポイント を手に入れた。
|
|
|
|
|
Name: at ..かけだし(2,430ポイント)
Date: 2008/09/04(木) 13:08
No:20921
|
|
Title: Re:リンクに関する警告が出ます。
|
|
_DEBUG はVC++でデバッグビルドすると勝手に宣言されます。リリースビルドだと宣言されないはずです。
>LIBCMT
VC++ではいわゆるLIBC問題というものがあり、デバッグ+シングル、デバッグ+マルチ、リリース+シングル、リリース+マルチで使われるライブラリが微妙に異なるので、「外部スタティックライブラリを使用する際は、競合するどれかのライブラリを手動で解除しなければならない」ことになっています。話せば長くなるのでその辺は各自お調べください。
これは以前からバグだといわれてきた問題ですが、今のところ決定的な対応策はありません。
ライブラリが競合してるといわれたら、そのつどリンクを解除するしかないと思います。
159ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(17,413ポイント)
Date: 2008/09/04(木) 14:07
No:20923
|
|
Title: Re:リンクに関する警告が出ます。
|
|
>リンクはDxLib.hにまかせてプロジェクトファイルからは削除するのが正常なやり方でしょう。
プロジェクトファイルRyuJin.vcprojから削除するという意味です
元のRyuJin.vcprojでは
<File
RelativePath="..\include\DxLib.lib"
>
</File>
のように記述されていますが
1 ソリューションエクスプローラのリソースファイルのフォルダから
*.libを全て消します(選択して DELキーを押して、確認ダイアログで「はい」を選択」)。
とすることでプロジェクトファイルの記述も削除されます。
"_DEBUG"はプロパティで定義されています。
メニューの「プロジェクト」「プロパティ」を開くと「構成プロパティ」「C/C++」「プリプロセッサ」のところの「プリプロセッサの定義」で
デバッグモードなら"WIN32;_DEBUG;_WINDOWS"が
リリースモードなら"WIN32;NDEBUG;_WINDOWS"が定義されています。
270ポイント を手に入れた。
|
|
|
|
|
Name: fumi ..ぴよぴよ(630ポイント)
Date: 2008/09/04(木) 15:17
No:20924
|
|
Title: Re:リンクに関する警告が出ます。
|
|
atさん、回答ありがとうございます。
>VC++ではいわゆるLIBC問題というものがあり
そのような問題があるのですか…
ライブラリを使用する際のリンク等のシステム的なエラーは私のような初心者には何だか敷居が高いように思えます。
>ライブラリが競合してるといわれたら、そのつどリンクを解除するしかないと思います。
はい。もしまたこのようなエラーが出たらJustyさん、toyoさんから教えて下さった方法を元にリンクを解除致します。
toyoさん、回答ありがとうございます。
>1 ソリューションエクスプローラのリソースファイルのフォルダから
*.libを全て消します(選択して DELキーを押して、確認ダイアログで「はい」を選択」)。
とすることでプロジェクトファイルの記述も削除されます。
早速テキストエディタでvcprojファイルを開いてみたところ、確かにリソースファイルの*.libを消したら
<File
RelativePath="..\include\DxLib.lib"
>
</File>
の部分も消えていました。
というか、リソースファイルや、includeするファイル、またプロジェクトに関する設定は、*.vcprojで管理されていることを初めて知りました…
>"_DEBUG"はプロパティで定義されています。
確認致しました。
なるほど、デバックモードとリリースモードではこのように"_DEBUG"や"NDEBUG"が定義されているかどうかで判断しているのですか…大変勉強になりました。
皆様、本当にありがとうございます!
気になっていた事が無事解決致しました!
最後に皆様の深い知識に敬意を表しますm(_ _)m
373ポイント を手に入れた。
|
|
|
|
Name: いけやん ..初心者(8,366ポイント)
Date: 2008/09/01(月) 14:33
No:20778
|
|
Title: 再帰処理(再帰関数)について
|
|
いつも、お世話になっております、いけやんです。
タイトル通り「再帰処理、又は、再帰関数についての質問です」
環境
Windows XP sp2
VC++ MFC ダイアログです。
@今現在、テキストからデータを読み込み、
Aそれを親子関係にして、
Bそして、全ての親子にチェックを付ける,(チェック)外す,展開する,圧縮する
ちなみにチェック付ける(外す)は解っていただけると思います(汗
展開するは
+aaa→ーaaaa
│-iii
│-uuu
圧縮は逆です。(-→+)
上記にある@Aはココで質問さして頂き解決したのですが
Bでうまく行かず困っています。
どなたか、お力添えをお願い致します。
また、最近やっと関数の作り方や処理を勉強したので
至らない所も多々ありますが、アドバイス等でもいいので
よろしくお願い致します。
後ほど、ソース乗せます。
88ポイント を手に入れた。
|
|
|
|
Name: いけやん ..初心者(7,987ポイント)
Date: 2008/09/01(月) 14:42
No:20779
|
|
Title: Re:再帰処理(再帰関数)について
|
|
関数宣言
void All_Node_Expand(HWND hWndTree,HTREEITEM hParent);
省略
:
:
void CVctreeDlg::All_Node_Expand(HWND hWndTree,HTREEITEM hParent){
HTREEITEM hItem;
//全アイテムに対して処理したいなら、ここに入れる
hItem = TreeView_GetChild(hWndTree,hParent);//子アイテムを取得
while(hItem){
m_tree.Expand(hItem,TVE_EXPAND);//展開処理
All_Node_Expand(hWndTree,hItem);//再帰処理
hItem = TreeView_GetNextSibling(hWndTree,hItem);//兄弟アイテムを取得
}
}
//全ノード展開
void CVctreeDlg::OnButton2()
{
HWND hWndTree;
All_Node_Expand(hWndTree,TreeView_GetRoot(hWndTree));//ルートのアイテムを取得
}
上記の様なソースになっています。
コンパイルエラー等は出なく、普通に動くのですが
ボタン2を押しても全く処理がされません。
もしかして、関数の作り方等間違っていますでしょうか?
お手数ですが、お願い致します。
379ポイント を落としてしまった。
|
|
|
|
|
Name: 御津凪 [URL] ..初心者(7,158ポイント)
Date: 2008/09/01(月) 15:42
No:20793
|
|
Title: Re:再帰処理(再帰関数)について
|
|
hWndTree には何も設定されていないので、関数どおりに動きません。
HWND 型ということは、Win32API を使用しているのですね?
関数宣言の All_Node_Expand 関数はグローバル関数の宣言なので、
単に All_Node_Expand 関数を呼び出すと、グローバルの All_Node_Expand なのか、
CVctreeDlg クラスの All_Node_Expand なのかが分かりません。
コンパイルでは CVctreeDlg クラスの All_Node_Expand を呼び出していますが。
この場合、グローバルの関数がないので、関数宣言は不要です。
なので、削除したほうがいいです。
(コンパイラによってはエラーを返すものがあります)
確認のためですが、ヘッダファイルには、
class CVctreeDlg{
/*色々省略...*/
void All_Node_Expand(HWND hWndTree,HTREEITEM hParent);
/*色々省略...*/
};
となっていますか?
この All_Node_Expand の部分がクラスメンバの関数宣言です。
(CVctreeDlg::All_Node_Expand はクラスメンバの関数です)
話を戻しますが、
hWndTree には、ツリービューコントロールのウインドウハンドルを入れなければ動きません。
513ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(104,915ポイント)
Date: 2008/09/01(月) 15:42
No:20794
|
|
Title: Re:再帰処理(再帰関数)について
|
|
とりあえず、試していただきたいのですが、OnButton2関数の中でどこでもいいので、ブレイクポイントを設定してみてください。
そして、そこでプログラムが止まらないようであれば、きちんとイベントハンドラが追加されていないことになります。(もし、既に試しているのならば、ごめんなさい)
67ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..初心者(8,018ポイント)
Date: 2008/09/01(月) 16:38
No:20798
|
|
Title: Re:再帰処理(再帰関数)について
|
|
>VC++6.0 MFC ダイアログです。
思いっきり環境無視でした。
>HWND 型ということは、Win32API を使用しているのですね?
HWND 型はwin32API専用?の型なんですか?
何も知らずに書いていました。すいません。
なので前回、御津凪さんに提示して頂いたサンプルを使わせて頂きたいと思います。
ソースをコロコロと変えて申し訳ないです。
//再帰処理(再帰関数)
void CVctreeDlg::All_Node_Expand(CTreeCtrl* tree, HTREEITEM item){
HTREEITEM child;
if(tree->ItemHasChildren(item)){//子があるかどうか
child = tree->GetChildItem(item);//最初の子を取得
while(child != NULL){//全ての子に対して処理する
/*ココでchildに対して処理*/
m_tree.Expand(child,TVE_EXPAND);
All_Node_Expand(tree,child);//再帰処理
child = tree->GetNextItem(child,TVGN_NEXT);//次の子を取得
}
}
}
vctreeDlg.h内
class CVctreeDlg{
void All_Node_Expand(CTreeCtrl* tree,HTREEITEM item);
}
>関数宣言の All_Node_Expand 関数はグローバル関数の宣言なので、
>単に All_Node_Expand 関数を呼び出すと、グローバルの All_Node_Expand なのか、
>CVctreeDlg クラスの All_Node_Expand なのかが分かりません。
>コンパイルでは CVctreeDlg クラスの All_Node_Expand を呼び出していますが。
>この場合、グローバルの関数がないので、関数宣言は不要です。
すいません。まだ本の基本的な関数の作り方しか知らなくて。
>確認のためですが、ヘッダファイルには、
見抜かれてますね・・・(汗
ヘッダには書いていませんでした。
で書いたのですが、40個ぐらいエラーがでてきました。
バグさん。
>そして、そこでプログラムが止まらないようであれば、きちんとイベントハンドラが追加されていないことに
>なります。
ブレイクを張ったのですが、見事に通り抜けました。
なので、そのイベントハンドラに追加の仕方をご存知ですか?
お願い致します。
14ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..初心者(8,048ポイント)
Date: 2008/09/01(月) 17:06
No:20800
|
|
Title: Re:再帰処理(再帰関数)について
|
|
>一から十まで聞くよりまずぐぐって調べられたほうがよいと思いますよ。
>そのほうが、勉強にもなるし早いだろうし。
Mistさん、すいません。
イベントハンドラについて調べるのを忘れていました。
まだまだ、調べる「癖」がついてないですね。
出直してきます。
30ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(105,027ポイント)
Date: 2008/09/01(月) 17:26
No:20804
|
|
Title: Re:再帰処理(再帰関数)について
|
|
リソースエディタ(ダイアログの見た目を編集をするツール)で、貼り付けてあるボタンをダブルクリックしてみてください。
それだけで、イベントハンドラが追加されるはずです。これで、そのボタンが押されるたびに追加された関数が呼ばれるようになります。
ですので、その追加された関数の中を編集してやってください。
112ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(105,117ポイント)
Date: 2008/09/01(月) 17:30
No:20805
|
|
Title: Re:再帰処理(再帰関数)について
|
|
>>御津凪さん
今回の件に関してだけ言えば、privateでも問題ないのではないでしょうか?
ダイアログベースアプリで、なおかつダイアログの中だけで完結してしまう処理のようですし…?
90ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..初心者(7,698ポイント)
Date: 2008/09/01(月) 17:32
No:20806
|
|
Title: Re:再帰処理(再帰関数)について
|
|
> 今回の件に関してだけ言えば、privateでも問題ないのではないでしょうか?
> ダイアログベースアプリで、なおかつダイアログの中だけで完結してしまう処理のようですし…?
あ、そうでした。(汗
すいません。 "private:" でしたね。
25ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(104,988ポイント)
Date: 2008/09/01(月) 17:37
No:20807
|
|
Title: Re:再帰処理(再帰関数)について
|
|
>>いけやんさん
MFCはクセがあって慣れるまでは使いづらいですし、ましてやVC++6.0だと答えられる人も少ないかもしれませんが、頑張って慣れてください(ぉぃ)
私も趣味以外ではあまり使わなくなりましたが、VC++6.0は速くて素晴らしい環境だと思ってます。
129ポイント を落としてしまった。
|
|
|
|
|
Name: 御津凪 [URL] ..初心者(7,858ポイント)
Date: 2008/09/01(月) 17:46
No:20813
|
|
Title: Re:再帰処理(再帰関数)について
|
|
実は私はMFCを使ったことありません。
(VisualStudioの製品版を買ったことがないので)
ではなぜ MFC 系の質問に答えられるかというと、
MSDN に MFC のオンラインリファレンスがあるからで。
2倍のポイントを手に入れた! 108ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(105,222ポイント)
Date: 2008/09/01(月) 17:57
No:20817
|
|
Title: Re:再帰処理(再帰関数)について
|
|
MSDNは便利ですよね(^-^)
MSDNで調べれば、大抵のことは分かりますし♪
ただ、MSDNを見て理解できるのはある程度の知識と経験がある人だと思うんですよね。
まるっきりの初心者にも分かり易いかと言われると…(^_^;)
>>いけやんさん
もう古い本ですが、林晴比古著の【新VisualC++6.0入門】のスーパービギナー編、ビギナー編、シニア編の3冊はMFCの基本が分かりやすく解説されているのでオススメですよ。あ、でもビギナー編を買うなら、スーパービギナー編は不要かな?結構…というか、かなり内容が被ってますんで(苦笑)
古本でよければアマゾンとかで安く入手できると思います。新品でそろえると諭吉さんが飛んでいきます(笑)
私は今の職場に入社したときに、自分を追い詰める意味も込めて新品で全部そろえました(^_^;)
234ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..初心者(8,454ポイント)
Date: 2008/09/01(月) 18:02
No:20818
|
|
Title: Re:再帰処理(再帰関数)について
|
|
いっぱい返ってきてましたね。
プログラムは、まだエラー出しながらやっているので
返信できる所だけで、
え〜と御津凪さんpublicとprivateは、
前に少しだけかじったVBの意味で言うと
publicは意味的にいえば「公共の」とかでどこからでも参照でき、
privateはそのprivate内だけ、他からは参照できない。とかでしたっけ?
Cでも一緒なんですかね。違っていたらすいません。
バグさん。
>頑張って慣れてください
ありがとうございます。
以前にどこかで、いつまでそんな古いの使ってんだよって言われて
ちょっと凹んでいました。
なので
>VC++6.0は速くて素晴らしい環境だと思ってます。
この言葉は励み(少しだけやる気)になりました。
また、イベントハンドラ、ヘッダの定義等の処理をして
何らかの変化(多分エラー)がありましたら、また返信します。
2倍のポイントを手に入れた! 406ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..初心者(7,962ポイント)
Date: 2008/09/01(月) 18:07
No:20821
|
|
Title: Re:再帰処理(再帰関数)について
|
|
public や private の意味はそれであっていますね。
(ちなみに継承先のみ参照可能な"protected"もあります)
あと、これはC++での機能です。
Cでは存在しません。
48ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..中級者(9,037ポイント)
Date: 2008/09/01(月) 18:16
No:20827
|
|
Title: Re:再帰処理(再帰関数)について
|
|
御津凪さん。
>実は私はMFCを使ったことありません。
>(VisualStudioの製品版を買ったことがないので)
>ではなぜ MFC 系の質問に答えられるかというと、
>MSDN に MFC のオンラインリファレンスがあるからで。
え?リファレンスを見ながらソース等、提示して頂いてたのですか。
本当に感謝しています。
素人なんでこんなコメントしか言えませんが、すごいですね。
バグさん。
>ただ、MSDNを見て理解できるのはある程度の知識と経験がある人だと思うんですよね。
>まるっきりの初心者にも分かり易いかと言われると…(^_^;)
その通りなんです(泣
今の僕には、msdnのリファレンスを見てもチンプンカンプンですね。
>もう古い本ですが、林晴比古著の【新 VisualC++6.0入門】のスーパービギナー編、ビギナー編、シニア編の
>冊はMFCの基本が分かりやすく解説されているのでオススメですよ。あ、でもビギナー編を買うなら、スーパ
>ビギナー編は不要かな?結構…というか、かなり内容が被ってますんで(苦笑)
う!えっとですね。自分が悪いのですが
8月だけで、林さんの新C言語入門ビギナー編 シニア編を買って
VC++の勉強もした方がいいとの事だったので、林さんのC++入門?(名前忘れました。) を買い
さらにVC++の入門?みたいな物を買い
ポインタも怪しいので完全制覇ポインタ〜(名前覚えてないです。)計5冊程
なので、お金が・・・
来月に検討した方がいいですね。
583ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(106,440ポイント)
Date: 2008/09/02(火) 10:39
No:20852
|
|
Title: Re:再帰処理(再帰関数)について
|
|
試しに作ってみました。本当は兄弟アイテムを検査する部分も再帰処理にしようかと思いましたが、流れが分かりづらくなりそうなので止めておきました(^_^;)
///////////////////////////////////////////////////////////////////////////////////////////////////////
// 指定したアイテムより下位にある全アイテムに対してExpand関数を実行する(再帰関数)
//
// CTreeCtrl& tree = 操作したいCTreeCtrlクラス
// HTREEITEM item = 操作したいツリーアイテム(最初にルートアイテムを指定すれば全アイテムを操作できる)
// UINT code = Expand関数の第2引数と同じ値を指定する
///////////////////////////////////////////////////////////////////////////////////////////////////////
void CVctreeDlg::ExpandAllNode(CTreeCtrl& tree, HTREEITEM item, UINT code)
{
// Expand関数を実行する
tree.Expand(item, code);
// 子アイテムの取得(子アイテムが無い場合はchild = NULLとなる)
HTREEITEM child = tree.GetChildItem(item);
// 子アイテムが存在している間、ループ処理を行う
while (child != NULL)
{
// 子アイテムの下に、更に子アイテムが無いかを検索する(再帰部)
ExpandAllNode(tree, child, code);
// 子アイテムの兄弟アイテムを取得する(兄弟アイテムが無い場合はchild = NULLとなる)
child = tree.GetNextItem(child, TVGN_NEXT);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
// 指定したアイテムより下位にある全アイテムに対してSetCheck関数を実行する(再帰関数)
//
// CTreeCtrl& tree = 操作したいCTreeCtrlクラス
// HTREEITEM item = 操作したいツリーアイテム(最初にルートアイテムを指定すれば全アイテムを操作できる)
// BOOL check = SetCheck関数の第2引数と同じ値を指定する
///////////////////////////////////////////////////////////////////////////////////////////////////////
void CVctreeDlg::SetCheckAllNode(CTreeCtrl& tree, HTREEITEM item, BOOL check)
{
// SetCheck関数を実行する
tree.SetCheck(item, check);
// 子アイテムの取得(子アイテムが無い場合はchild = NULLとなる)
HTREEITEM child = tree.GetChildItem(item);
// 子アイテムが存在している間、ループ処理を行う
while (child != NULL)
{
// 子アイテムの下に、更に子アイテムが無いかを検索する(再帰部)
SetCheckAllNode(tree, child, check);
// 子アイテムの兄弟アイテムを取得する(兄弟アイテムが無い場合はchild = NULLとなる)
child = tree.GetNextItem(child, TVGN_NEXT);
}
}
996ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..中級者(9,308ポイント)
Date: 2008/09/02(火) 10:39
No:20853
|
|
Title: Re:再帰処理(再帰関数)について
|
|
おはようございます。
Mistさんのおっしゃていた。ググってmsdnのリファレンスの
「イベントハンドラの追加」を見ながら色々やってみたのですが
変な?関数がポンポンと追加されていき、結果的に解らなかったので。
質問さして頂きます。
2つ程、自分的にこうではないかと思う事があります。
1つ目は、リファレンスを見ていると5,6番の辺りで
名前を編集とあるのですがここで
ある関数を追加して→名前の編集みたいな事をして
「CVctreeDlg::○○○○○」→「CVctreeDlg::All_Node_Expand」
CVctreeDlg::All_Node_Expandを追加するんですかね?
もう一つは、
>リソースエディタ(ダイアログの見た目を編集をするツール)
すいません。省略させて頂きます
バグさんの書いて頂いたコメントなんですが
ボタンコントロールを→ダブルクリックする→void CVctreeDlg::OnButton2(){}が出来ます。
それをvoid CVctreeDlg::OnButton2() →void CVctreeDlg::All_Node_Expand(){}に
するって事ですか?
説明が下手ですいませんが、お願い致します。
271ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(106,590ポイント)
Date: 2008/09/02(火) 10:52
No:20855
|
|
Title: Re:再帰処理(再帰関数)について
|
|
>>ボタンコントロールを→ダブルクリックする→void CVctreeDlg::OnButton2(){}が出来ます。
>>それをvoid CVctreeDlg::OnButton2() →void CVctreeDlg::All_Node_Expand(){}にするって事ですか?
それでも構わないのですが、その場合は色々と変更しなければいけない箇所が出てきてしまうので、オススメできません。(もし、こちらの方法をお望みの場合はまた質問してください)
ですので、OnButton2関数の中で、All_Node_Expand関数を実行すれば同じことですので、そちらの方が楽です。
※上記を実行する為には、あらかじめ【VctreeDlg.h】内に、All_Node_Expand関数を宣言しておく必要があります。
150ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(106,644ポイント)
Date: 2008/09/02(火) 11:37
No:20857
|
|
Title: Re:再帰処理(再帰関数)について
|
|
全ノードの展開、圧縮、チェックのON・OFFを出来るだけのダイアログを作ってみましたので、参考になれば、どうぞ(^-^)
54ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..中級者(9,931ポイント)
Date: 2008/09/03(水) 09:53
No:20885
|
|
Title: Re:再帰処理(再帰関数)について
|
|
おはようございます。
昨日は、私用でプログラムする時間がなかったので(汗
返信出来ませんでした。すいませんでした。
バグさんサンプル提示&実行可能ファイルまで頂いて、ありがとうございます。
ソースにコメントまで書いて頂いて重ね重ね申し訳ないです。
一応コピペは身につかないと思うので、打ちました。(証拠はないですが・・・)
えっと、そういえば「イベントハンドラに追加」の件ですが
バグさんの物を見せて貰うとVctreeDlg.hに
private:
void All_Node_Expand(CTreeCtrl& tree, HTREEITEM item, UINT code);
宣言をして、後はメインのソースの方に書くだけでした。
色々複雑な処理をするのかと思っていましたが、
思ってたより処理が少なく助かりました。
これが、以前御津凪さんがおっしゃっていた
クラスメンバ関数の宣言?という物にあたるのでしょうか?
間違っていたら、ごめんなさい。
まだ、展開の処理しか書いていないのですが、
バグさんのソースコードで動きました。
言ってなかった私が悪いのですが、
親は(root)は、3つあり今の実行結果では、
始めの親の一族?(適切な表現が浮かびませんでした。)
の部分はうまく行くのですが、残りの2つの部分はうまくいきません。
自分で考えたのですが原因が解りません。
しつこく質問すいませんが、教えて頂けないでしょうか?
//実行結果
---あああ//親
| |-いいい//子
| |-うう//子
| |-え//孫
| |-おおお//孫
|
|-+はは//親
|-+ららら//親
623ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(106,736ポイント)
Date: 2008/09/03(水) 10:06
No:20886
|
|
Title: Re:再帰処理(再帰関数)について
|
|
それでしたら、親(ルートアイテム)の取得の後に、親の兄弟を探すループを追加してやればいけます。
つまり、ExpandAllNode関数や、SetCheckAllNode関数と同じような処理をイベントハンドラの中に追加してやればいいわけです。
下記は展開ボタンが押されたときの例です。
void CVctreeDlg::OnButton1()
{
// CTreeCtrlの取得(メンバを追加しない場合の方法)
CTreeCtrl* tree = (CTreeCtrl*)GetDlgItem(IDC_TREE1);
// ルートアイテムの取得(ルートアイテムが無い場合はroot = NULLになる)
HTREEITEM root = tree->GetRootItem();
// ルートアイテムが無くなるまでループする
while (root != NULL)
{
// 全ノードの展開
ExpandAllNode(*tree, root, TVE_EXPAND);
// ルートアイテムの兄弟アイテムを検索する
root = tree->GetNextItem(root, TVGN_NEXT);
}
}
50ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(107,100ポイント)
Date: 2008/09/03(水) 10:20
No:20887
|
|
Title: Re:再帰処理(再帰関数)について
|
|
おっと、返答忘れしてました(^_^;)
>>えっと、そういえば「イベントハンドラに追加」の件ですが
>>バグさんの物を見せて貰うとVctreeDlg.hに
private:
void All_Node_Expand(CTreeCtrl& tree, HTREEITEM item, UINT code);
>>宣言をして、後はメインのソースの方に書くだけでした。
>>色々複雑な処理をするのかと思っていましたが、
>>思ってたより処理が少なく助かりました。
>>これが、以前御津凪さんがおっしゃっていた
>>クラスメンバ関数の宣言?という物にあたるのでしょうか?
そういう事ですね。イベントハンドラの追加とはちょっと違いますが、クラスのメンバ関数の宣言に関してはあっています。まぁ、イベントハンドラというのも、結局はメンバ関数ではあるんですけどね(^_^;)
イベントハンドラというのはウインドウ上で起こる様々なイベントに対して呼び出される関数だと思っておけばいいかと思います。今回の件ですと『ボタンが押されたら…』というのがイベントにあたります。
他にも『ウインドウのサイズが変わったら…』、『ウインドウの位置が動いたら…』、『マウスがクリックされたら…』、『キーボードから何か入力があったら…』などなど、たくさんあります。
そのイベントに応じて、自分の望んだ動きをさせるのがプログラマの仕事な訳です。こういう動きをするプログラムの事をイベントドリブン形式といいます。
364ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..中級者(9,162ポイント)
Date: 2008/09/03(水) 10:25
No:20888
|
|
Title: Re:再帰処理(再帰関数)について
|
|
MFC でプログラミングできないので、
どうしても回答が回りくどかったので、
バグさんの回答は本当に助かりました。
バグさんのコードでも、問題なく動くはずですが、
汎用的に考えると、下記の方が良い様な気もします。
void CVctreeDlg::ExpandAllNode(CTreeCtrl& tree, HTREEITEM item, UINT code)
{
HTREEITEM brother,child;
brother = item;
do {
// Expand関数を実行する
tree.Expand(brother, code);
// 子アイテムの取得(子アイテムが無い場合はchild = NULLとなる)
child = tree.GetChildItem(brother);
if ( child != NULL) {
ExpandAllNode( tree, child, code );
}
// 兄弟アイテムを取得する(兄弟アイテムが無い場合はbrother = NULLとなる)
brother = tree.GetNextItem( brother, TVGN_NEXT );
} while (brother != NULL); // 兄弟アイテムが存在している間、ループ処理を行う
}
(バグさんの上記で提示していただいたコードから修正を加えました)
313ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(107,083ポイント)
Date: 2008/09/03(水) 10:36
No:20889
|
|
Title: Re:再帰処理(再帰関数)について
|
|
確かにそうですね。その方がすっきりしそうです(^-^)
ただ、新たにbrotherを用意しなくてもよさそうなので、更に改造してみました。
void CVctreeDlg::ExpandAllNode(CTreeCtrl& tree, HTREEITEM item, UINT code)
{
// 兄弟アイテムが存在している間、ループ処理を行う
while (item != NULL)
{
// Expand関数を実行する
tree.Expand(item, code);
// 子アイテムの取得(子アイテムが無い場合はchild = NULLとなる)
HTREEITEM child = tree.GetChildItem(item);
// 子アイテムが存在する場合は更にその下の階層を調べる(再帰処理)
if (child != NULL)
{
ExpandAllNode(tree, child, code);
}
// 兄弟アイテムを取得する(兄弟アイテムが無い場合はitem = NULLとなる)
item = tree.GetNextItem(item, TVGN_NEXT);
}
}
17ポイント を落としてしまった。
|
|
|
|
|
Name: いけやん ..中級者(10,065ポイント)
Date: 2008/09/03(水) 10:48
No:20891
|
|
Title: Re:再帰処理(再帰関数)について
|
|
バグさん。ありがとうございます。
思った様に動作しました。
残りの圧縮、チェック(付ける、外す)も試したいと思います。
>イベントハンドラというのはウインドウ上で起こる様々なイベントに対して呼び出される関数だと思っておけばいいかと思います。
>今回の件ですと『ボタンが押されたら…』というのがイベントにあたります。
>他にも『ウインドウのサイズが変わったら…』、『ウインドウの位置が動いたら…』、『マウスがクリックされたら…』、『キーボードから何か入力があったら…』などなど、たくさんあります。
>そのイベントに応じて、自分の望んだ動きをさせるのがプログラマの仕事な訳です。
>こういう動きをするプログラムの事をイベントドリブン形式といいます。
なるほど、勉強になります。
御津凪さん。ありがとうございます。
後ほど、御津凪さんのプログラムも打ってみます。
では、また返信します。
134ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(107,447ポイント)
Date: 2008/09/03(水) 10:58
No:20892
|
|
Title: Re:再帰処理(再帰関数)について
|
|
よくよく考えたら、ループさせる必要もなかったですね(^_^;)
更に改良してみました。
void CVctreeDlg::ExpandAllNode(CTreeCtrl& tree, HTREEITEM item, UINT code)
{
// Expand関数を実行する
tree.Expand(item, code);
// 子アイテムの取得(子アイテムが無い場合はchild = NULLとなる)
HTREEITEM child = tree.GetChildItem(item);
// 子アイテムが存在する場合は更にその下の階層を調べる(再帰処理)
if (child != NULL)
{
ExpandAllNode(tree, child, code);
}
// 兄弟アイテムを取得する(兄弟アイテムが無い場合はitem = NULLとなる)
item = tree.GetNextItem(item, TVGN_NEXT);
// 兄弟アイテムが存在する場合は更にその下の階層を調べる(再帰処理)
if (item != NULL)
{
ExpandAllNode(tree, item, code);
}
}
364ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..中級者(10,101ポイント)
Date: 2008/09/03(水) 11:13
No:20893
|
|
Title: Re:再帰処理(再帰関数)について
|
|
バグさん。
少し気になったのですが、
while()を使わなくて済むなら使わない方がいいのですか?
while()を使った方が書く処理は短いのですが。
36ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..中級者(9,582ポイント)
Date: 2008/09/03(水) 11:25
No:20894
|
|
Title: Re:再帰処理(再帰関数)について
|
|
項目がそんなに多くない場合は問題ないですが、
何千個、何万個となると問題が出ます。
(処理速度は別)
たとえば、親しかない項目が1000あった場合、
1000回近く再帰呼び出しが行われ、その分引数などの保存領域を必要とします。
プログラムにはスタックバッファというあらかじめ割り当てられた領域があり、
ここに関数の引数などに自動的に割り当てるようになっています。
そのスタックバッファの領域がなくなってしまうと、ランタイムエラーを出して強制終了してしまいます。
(ちなみにプロジェクトのプロパティでスタックバッファの変更は可能です)
私的には、兄弟については while 文で処理したほうが良いと思います。
何千もの子なんて普通使いませんし。
269ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(107,532ポイント)
Date: 2008/09/03(水) 11:26
No:20895
|
|
Title: Re:再帰処理(再帰関数)について
|
|
その辺りは完全に個人の趣味です(笑)
最新のソースは、ループを使用せずに全て再帰処理にしてみただけですので、どちらも同じ動きをするはずですので(^_^;)
whileを使用した方が分かり易ければ、そちらをお使いくださいm(_ _)m
85ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(107,618ポイント)
Date: 2008/09/03(水) 11:29
No:20896
|
|
Title: Re:再帰処理(再帰関数)について
|
|
>>御津凪さん
たしかに、そこまでの状況は考慮してませんでした(^_^;)
再帰処理を使用する際は、絶対に考えておかなければいけない問題ですよね。
>>いけやんさん
という訳で、今回の件は、ループを使用した方がよさそうです。
86ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..中級者(10,475ポイント)
Date: 2008/09/03(水) 11:41
No:20897
|
|
Title: Re:再帰処理(再帰関数)について
|
|
なるほど、
>プログラムにはスタックバッファというあらかじめ割り当てられた領域があり、
そういう物があるんですか。知りませんでした。
>たとえば、親しかない項目が1000あった場合、
>1000回近く再帰呼び出しが行われ、その分引数などの保存領域を必要とします。
>プログラムにはスタックバッファというあらかじめ割り当てられた領域があり、
>ここに関数の引数などに自動的に割り当てるようになっています。
>そのスタックバッファの領域がなくなってしまうと、ランタイムエラーを出して強制終了してしまいます。
上記の事、等も考えてプログラムを組んで行くのですね〜。
奥が深いですね〜。難しい(汗
その状況?えっと臨機応変?に使い分ける事がいいという事ですね。
質問に答えて頂いて、ありがとうございます。
>という訳で、今回の件は、ループを使用した方がよさそうです。
今回のプログラムでは、while()を使いますが、
せっかくみなさんが、答える。又は、考えて頂いたので。
提示して頂いているソースは、全て試します。
(今の所全て試しています。)
では、また返信します。
374ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..中級者(10,541ポイント)
Date: 2008/09/03(水) 15:24
No:20899
|
|
Title: Re:再帰処理(再帰関数)について
|
|
すいません。タイトルとは脱線すると思うのですが
今何気にこの前に買った「新C言語入門」ビギナー編の「関数の項目」
を見ていたのですが、
その一文には、「〜省略 もし引数がない、場合はvoidを使います。」と
書いてあるのですが、この文章で混乱しています。
御津凪さん。バグさんに書いて貰ったコードには
void All_Node_Check(CTreeCtrl& tree, HTREEITEM item, BOOL check);
voidなのに引数を3つ使ってますが。voidでも引数を使っていいのですか?
教えて頂いてもよろしいでしょうか?お願いします。
66ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..上級者(21,408ポイント)
Date: 2008/09/03(水) 15:47
No:20900
|
|
Title: Re:再帰処理(再帰関数)について
|
|
> void All_Node_Check(CTreeCtrl& tree, HTREEITEM item, BOOL check);
先頭のvoidは「戻り値がないこと」をあらわしています。
だから、引数とは関係ありません。
> その一文には、「〜省略 もし引数がない、場合はvoidを使います。」と
この一文は引数が無い関数を作る場合は
void All_Node_Check(void)
としましょう、といっているのです。
98ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..中級者(11,545ポイント)
Date: 2008/09/03(水) 16:29
No:20902
| 解決!
|
Title: Re:再帰処理(再帰関数)について
|
|
すいません。解決にチェック付け忘れていました。
皆さんのおかげで解決しました。
解決は下記のコードです。
//全ノード展開
void CVctreeDlg::OnButton2()
{
//CTreeCtrlの取得(メンバを追加しない場合の方法)
CTreeCtrl* tree = (CTreeCtrl*)GetDlgItem(IDC_TREE1);
//ルートアイテムの取得
HTREEITEM root = tree->GetRootItem();
//ルートアイテムが無くなるまでループする
while(root != NULL){
//全ノードの展開
All_Node_Expand(*tree,root,TVE_EXPAND);
//ルートアイテムの兄弟アイテムを検索する
root = tree->GetNextItem(root,TVGN_NEXT);
}
}
関数本体
void CVctreeDlg::All_Node_Expand(CTreeCtrl& tree, HTREEITEM item, UINT code)
{
//Expand関数を実行する
tree.Expand(item,code);
//子アイテムの取得(子アイテムが無い場合は child = NULLとなる)
HTREEITEM child = tree.GetChildItem(item);
//子アイテムが存在している間、ループ処理を行う
while(child != NULL){
//子アイテムの下に、更に子アイテムが無いかを検索する(再帰処理)
All_Node_Expand(tree,child,code);
//子アイテムの兄弟アイテムを取得する(兄弟アイテムが無い場合はchild = NULLとなる)
child = tree.GetNextItem(child,TVGN_NEXT);
}
}
ヘッダの中
private:
//展開,圧縮用関数
void All_Node_Expand(CTreeCtrl& tree, HTREEITEM item, UINT code);
//チェック用関数
void All_Node_Check(CTreeCtrl& tree, HTREEITEM item, BOOL check);
長い間お世話になりました。
御津凪さん。バグさん。Mistさん。
幾つもの質問答えて頂きありがとうございます。
質問をした頃は、ポイントが初心者だったのに
もう中級者になってしましました。
(実力的には、ぴよぴよですが・・・)
実力的には、あれでも(汗
解決する事はいい事だと思いますが、
何故か今少し寂しい?気がします。
結構長い間考えた問題だったからでしょうか?
何はともあれ、協力して頂いた皆様ありがとうございました。
981ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..中級者(12,035ポイント)
Date: 2008/09/03(水) 18:24
No:20904
|
|
Title: Re:再帰処理(再帰関数)について
|
|
すいません。解決後で、誰も見ないですかね・・・
一応書いてみます。
質問ではないのですが、悩み?みたいな事があります。
void CVctreeDlg::All_Node_Expand(CTreeCtrl& tree, HTREEITEM item, UINT code)
{
//Expand関数を実行する
tree.Expand(item,code);
//子アイテムの取得(子アイテムが無い場合は child = NULLとなる)
HTREEITEM child = tree.GetChildItem(item);
//子アイテムが存在している間、ループ処理を行う
while(child != NULL){
〜省略
これから、頑張っていこうと思うのですが
今日は上記の様なソースを提示頂いたから出来たわけで・・・
正直に聞きたい事は、2つあります。
@今日バグさんのソースを見ながら打ちました。
もちろん解らない者なりに考えながら打ちました。
が身になる?力?こんな事で実力は付くのでしょうか?
答えを見ながらテストを、問題を、解くのと何ら変わりなく
不安に思いました。
今からは取り合えず参考書などの問題を打っていこうと重いますが
例文を何回、何百回打って効果があるのでしょうか?
A御津凪さん。バグさん。の
お二方の様すごくなりたいと思います。
お二方は、どんな事しましたか?
すいません。ちょっと引くかもしれませんが
>不安に思いました。
この辺りが・・・
よければ教えて頂きたいです。
490ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(107,820ポイント)
Date: 2008/09/03(水) 18:55
No:20905
|
|
Title: Re:再帰処理(再帰関数)について
|
|
察しの通り、本を読むだけ、例題を写すだけでは何にもなりません。
ただ、色々な人のソースコードを見るという行為自体は、良くも悪くも非常に勉強になります。
例題を写したあとに、どうしてこういう風に書いたら、こう動くのか?
というのを、プログラムソースと睨めっこして考えてください。
考えるというのは抽象的なので…流れを追いかけてみてください。
なんとなく流れが掴めたら、改造してください。
そうすると、これまでと違う動きになりますね?
そうしたら、また何故そうなるのかを考えてください。
こういう自分で手を加える練習は、やって損はしないと思います。というか、やらなければ上達しません。
で、なんとなく、理解できてきたら、ゼロから自分で書いてみるといいですよ。
197ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..中級者(10,086ポイント)
Date: 2008/09/03(水) 19:09
No:20907
|
|
Title: Re:再帰処理(再帰関数)について
|
|
> すいません。解決後で、誰も見ないですかね・・・
新着記事を見るようにしているので、見ましたよ。
> お二方は、どんな事しましたか?
私の場合、勉強、というより、趣味で覚えましたね。
もちろん好きだから、というのもありますが。
「こういう便利なものを作りたい!」と思って取り組み始め、
闇雲に作ったソースがごちゃごちゃして、修正が効かなくなって挫折…。
こんなことが何回もありましたね。
そうやってプログラミングの技術を身に着けましたね。
それはさておき、
いけやんさんの場合、ソースの意味を「理解」していますでしょうか?
プログラムは絶対的な命令を持ちます。
書いたコードの意味を曖昧にしていると、いざ問題が発生したとき、
どこに問題があるかちんぷんかんぷんになってしまうのではないかと思います。
そんなことになる前に、書いてみたいコードの意味を理解しておく必要があります。
いけやんさんが質問した void でも、文章の意味からでなく、
「voidってなに?」
って所から疑問に思ったほうが良いでしょう。
void の意味を知って、初めて文章の意味が分かるということも決して少なくないはずです。
また、C++を覚える(学ぶと思わないほうが良いと思う)ために、
入門書などで疑問に思った単語やソースなどを調べ、意味を理解する必要があり、
かつ、それがどのように動くか一つ一つ書いて覚えていってください。
ただし、まとめて覚えようとすると、
後でどっちがどっちだか分からないといった混乱を招く恐れがあるのでご注意を。
あと、しっかり覚えるのは「構文と用語の意味」です。
あくまで私論(独学)なので、これかぎりではありません。
バグさんのおっしゃっている通り、
ソースを読み、
どういう動作をしているのか、
どこを変えたら思ったとおりの動作に変えられるか、
を、入門書などのソースからやってみることをお勧めします。
もちろん、意味が分からなければ、
もやもやがなくなるまで徹底して調べ倒すと
後の力になります。
あと、他の方の書いたソースから読むのは余りお勧めできません。
プログラムでは動いていても、初心者には理解不能な格好をしたソースが
あったりするので。
以上、長くなりましたが私からのアドバイスです。
504ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..中級者(13,102ポイント)
Date: 2008/09/04(木) 09:38
No:20918
|
|
Title: Re:再帰処理(再帰関数)について
|
|
バグさん。御津凪さん。
ありがとうございます。
>例題を写したあとに、どうしてこういう風に書いたら、こう動くのか?
>というのを、プログラムソースと睨めっこして考えてください。
はい、画面の前で固ま(睨めっこ)ってみたいと思います。
>考えるというのは抽象的なので…流れを追いかけてみてください。
>なんとなく流れが掴めたら、改造してください。
>そうすると、これまでと違う動きになりますね?
>そうしたら、また何故そうなるのかを考えてください。
>こういう自分で手を加える練習は、やって損はしないと思います。というか、やらなければ上達しません。
>で、なんとなく、理解できてきたら、ゼロから自分で書いてみるといいですよ。
上記の改造等はもう少し先になると思いますね。
>「こういう便利なものを作りたい!」と思って取り組み始め、
>闇雲に作ったソースがごちゃごちゃして、修正が効かなくなって挫折…。
>こんなことが何回もありましたね。
>そうやってプログラミングの技術を身に着けましたね。
やはり「失敗は成功の元」なんですね。
いきなり、うまく事なんてないでもんね。
>書いたコードの意味を曖昧にしていると、いざ問題が発生したとき、
>どこに問題があるかちんぷんかんぷんになってしまうのではないかと思います。
>そんなことになる前に、書いてみたいコードの意味を理解しておく必要があります。
今の所、何となく理解している事ばかりですね。
これでは、ダメですね。
>入門書などで疑問に思った単語やソースなどを調べ、意味を理解する必要があり、
>かつ、それがどのように動くか一つ一つ書いて覚えていってください。
>ただし、まとめて覚えようとすると、
>後でどっちがどっちだか分からないといった混乱を招く恐れがあるのでご注意を。
PCでパチパチ打つだけでなく、書くという事も大事なんですね。
>もちろん、意味が分からなければ、
>もやもやがなくなるまで徹底して調べ倒すと
>後の力になります。
了解です。
>以上、長くなりましたが私からのアドバイスです。
お二人ともありがとうございます。
これから、やる事がかなり多そうですが(汗
何回も失敗して、何回も調べ、何回も書いて、何回も改造していきたいと思います。
(何回って何回書いてるんだよ)
大変参考になりました。
本当に感謝しています。
また、掲示板を利用すると思うので
その時は、よろしくお願い致します。
1,067ポイント を手に入れた。
|
|
|
|
Name: ミシェル ..ぴよぴよ(26ポイント)
Date: 2008/09/03(水) 19:06
No:20906
|
|
Title: 比率について
|
|
Aを3秒表示させ、その後Bを7秒表示させ、それを繰り返すプログラムを書きたいのですが
3:7に分けるにはどうしたら良いのですか?
26ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(57,841ポイント)
Date: 2008/09/03(水) 22:57
No:20915
|
|
Title: Re:比率について
|
|
多くの環境(ただしホスト環境限定)では、
#include <stdio.h>
#include <time.h>
int main()
{
clock_t t;
setbuf(stdout, NULL);
for (;;)
{
fputs("\rA", stdout);
t = clock();
while ((clock() - t) / CLOCKS_PER_SEC < 3)
;
fputs("\rB", stdout);
t = clock();
while ((clock() - t) / CLOCKS_PER_SEC < 7)
;
}
return 0;
}
で大丈夫かと思います。
ただし、これが期待しているものかどうかまでは知りません。
254ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..入門者(4,714ポイント)
Date: 2008/09/04(木) 00:30
No:20916
|
|
Title: Re:比率について
|
|
眠いので我ながらヘンなプログラムですが
/***************************************
* *
* PCを起動してから10秒未満の時と *
* 49.7日起動させている時の動作は *
* 動作は良く分からない。 *
* *
* *
***************************************/
#include<stdio.h>
#include<windows.h>
int main(){
DWORD dwCount=GetTickCount()-10000;
while(1){
while(GetTickCount()-dwCount<7000); //7秒の計測
dwCount=GetTickCount();
printf("A\r");
Sleep(2500); //2.5秒眠らす
while(GetTickCount()-dwCount<3000); //3秒の計測
dwCount=GetTickCount();
printf("B\r");
Sleep(6500); //6.5秒眠らす
}
return 0;
}
259ポイント を手に入れた。
|
|
|
|
Name: あなざぁ ..かけだし(1,347ポイント)
Date: 2008/09/03(水) 20:17
No:20910
|
|
Title: BCCからVC++へ
|
|
こんにちは。
今コンパイラはBorland C++ Compilerを使っているのですが、
Visual C++に変えたくなりました。
Borlandのをインストールする際にパスを通してしまったのですが、
どうすればVC++に合った設定になりますか?
71ポイント を手に入れた。
|
|
|
|
Name: Mist ..上級者(21,426ポイント)
Date: 2008/09/03(水) 20:21
No:20911
|
|
Title: Re:BCCからVC++へ
|
|
VC++インストール時に、自動的に必要なパスは設定されるので別に何もしなくてもいいですよ。
私の環境はBCCとVC++2008EEを共存させていますが、特殊な設定は何もしていません。
18ポイント を手に入れた。
|
|
|
|
|
Name: あなざぁ ..かけだし(1,387ポイント)
Date: 2008/09/03(水) 20:24
No:20912
| 解決!
|
Title: Re:BCCからVC++へ
|
|
そうなんですか、てっきりまた細かい設定をいじるのかと思ってました。
安心しました。ありがとうございます!
40ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(57,587ポイント)
Date: 2008/09/03(水) 22:51
No:20914
|
|
Title: Re:BCCからVC++へ
|
|
もしコマンドラインで利用する場合の話であれば、やはり環境変数の設定が必要になります。
実際には、スタートメニューから、
Microsoft Visual Studio 2008 > Visual Studio Tools > Visual Studio 2008 コマンド プロンプト
を実行すれば、環境変数が設定された状態でコマンドプロンプトが立ち上がります。
バージョンやエディションが異なる場合もそれっぽい名前のメニューがあるはずですから、適当に読み替えてください。
17ポイント を手に入れた。
|
|
|
|
Name: J ..初心者(7,304ポイント)
Date: 2008/09/01(月) 06:07
No:20768
|
|
Title: 東方のクラシックアレンジについて
|
|
どんな雑談でも構わないというので立ててみました。雑談OKなのになかなかそういった真の雑談トピが立たないので。。
おそらく、龍神録に惹かれて来ている方も多いと思ったので東方ネタに走りました。適切でないと思われたら、すみません、削除してください。
では本題に入らせていただきます。
私はクラシックが元々大好きで東方を知って、クラシックアレンジを聞いて感動しました。
特に白と黒の夢郷さん(http://www.mukyou.jp/)の曲が大好きです。が、逆に白と黒の夢郷さんぐらいしかクラシックアレンジを作っている方は知らないのです。ボーカルアレンジはニコニコ動画に度々上がるので見つけやすいのですが。。どなたかいいクラシックアレンジを作っている方を知っているでしょうか?できればURLといっしょに教えていただけると嬉しいです。
お願いします。
103ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..初心者(7,673ポイント)
Date: 2008/09/01(月) 17:23
No:20803
|
|
Title: Re:東方のクラシックアレンジについて
|
|
> はあ〜これだけ音楽が作れればゲームのBGMに苦労しないんでしょうね〜(苦笑
…実は密かに東方アレンジ曲作ってたりします。しょぼいですが…(公開はしてません)。
33ポイント を手に入れた。
|
|
|
|
|
Name: J ..初心者(7,544ポイント)
Date: 2008/09/01(月) 17:46
No:20812
|
|
Title: Re:東方のクラシックアレンジについて
|
|
そうなんですか?!
すごいですね・・・音楽作れる人は。
実は私も「もう歌しか聞こえない」の譜面を手に入れたんで打ち込んでみたんですが・・・
使ったソフトの最大の音階を超えていて最後の部分が打ち込めず、それっきりになっています。。
どのようにしてつくっていらっしゃるのですか?
私ぐらいにでもできるようならやってみたいです。
110ポイント を手に入れた。
|
|
|
|
|
Name: J ..初心者(8,065ポイント)
Date: 2008/09/01(月) 18:06
No:20820
|
|
Title: Re:東方のクラシックアレンジについて
|
|
おお!Frieveさんのでしたか!!
そのソフトは使っていませんが、EditorとAudioを愛用させていただいております。
特にEditorはプログラムの考えまとめるときに非常に便利ですし、Audioは高音質なサウンドドライバ、ASIOを使って再生できるので重宝しています。
話がかなりアレになってしまいますが、アレンジを作るにはまずどんなことから勉強すれば良いのでしょうか?
自分は今まで聞いている立場だったんで・・・
なんか指南があれば教えてください。お願いします。
2倍のポイントを手に入れた! 414ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(705,997ポイント)
Date: 2008/09/01(月) 18:13
No:20824
|
|
Title: Re:東方のクラシックアレンジについて
|
|
> はあ〜これだけ音楽が作れればゲームのBGMに苦労しないんでしょうね〜(苦笑
本当ですよね〜・・、今までに何度そう思ったことか(_ _|||)
1作品に20曲位必要なのでもう煉獄さんに頼る事は出来なさそうです;
ZUNさんも仰っていますが、曲作りがきっとゲーム製作で一番大変なんでしょうね。
彼曰く、プログラムは思ったとおりに動いてくれるが、曲は思ったとおりに作れない時が多いと。
弾幕も作りこめば芸術の領域ですし、曲製作なんてセンスが無いと出来ないでしょうし、
絵だって・・、、東方の場合世界観の統一性や物語まで素晴らしいですし、、。
ゲーム製作って才能が無いと全部一人で作るなんて不可能ですよね;
作曲はとても興味があるので、是非私もやってみたいと思っています。
>…実は密かに東方アレンジ曲作ってたりします。しょぼいですが…(公開はしてません)。
是非聞いてみたいです〜♪
3ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..初心者(7,854ポイント)
Date: 2008/09/01(月) 18:24
No:20829
|
|
Title: Re:東方のクラシックアレンジについて
|
|
> Jさん
> なんか指南があれば教えてください。お願いします。
えーと、私は音楽知識もほぼ何もかも独学でしたので、なんと言えばいいか…。
アレンジして作ったのも、ニコ動に上がってる「耳コピしてみた」系のピアノロールを見てうつして、
チョロっと配置を換えたり、音色を変えたりしているだけなので。
(ドラムパートは表示されていなかったのでその部分は原曲からイメージした感じですが)
でも、アレンジって、こんなところから始めたら面白いかもしれませんよね。
> 管理人さん
> 是非聞いてみたいです〜♪
今はちょっと無理なので、しばらく後でココに上げてみようと思います。
(*.midって添付できましたっけ?)
181ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(706,320ポイント)
Date: 2008/09/01(月) 18:25
No:20830
|
|
Title: Re:東方のクラシックアレンジについて
|
|
>帰ってきたら書き込まれているのを見てなんか安心(?)しました。
あ、何か雑談トピがたっているのを見かけたら
よほど難解だったり、常識を逸脱した何か宗教的な内容みたいなものだったり、
自分に理解出来ないような内容では無い限り
必ず何かコメントしますので、是非お気軽にトピをお立て下さいm(_ _)m
C言語の話だけでなく、せっかく同じ趣味を持った人達が集まっているので、
是非交流を深めて、色んな話が出来たらいいなと思っています。
特に私はバイクがすきなので隼の新車を買ったとか言う人が居たら是非トピをたt・・(自重
239ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(706,566ポイント)
Date: 2008/09/01(月) 18:29
No:20832
|
|
Title: Re:東方のクラシックアレンジについて
|
|
>今はちょっと無理なので、しばらく後でココに上げてみようと思います。
お〜期待しています〜♪
>(*.midって添付できましたっけ?)
投稿記事記入欄下にある
「添付」をクリックすると添付できるファイルの内容が確認出来ます。
GIF JPEG PNG
TEXT LHA ZIP PDF MIDI
WORD EXCEL RM RAM
MPEG MP3 POWERPOINT
が添付出来るようです。 もし添付できない内容でも
恐らくご自分のサーバースペースをお持ちのようですので、
問題ないかと思いますが、もし問題あれば、こちらに送っていただければ
うちのHPからリンクをお貼りする事も出来ますm(_ _)m
246ポイント を手に入れた。
|
|
|
|
|
Name: J ..初心者(8,175ポイント)
Date: 2008/09/01(月) 22:17
No:20842
|
|
Title: Re:東方のクラシックアレンジについて
|
|
おお!
素晴らしいです。
ピアノからいい感じに孤独感を感じます。でも、ピアノもうちょっと音圧あげても良さそうです。
偉そうに言いますが、全体的によくまとまっていると思います。
いいですね〜。こういうアレンジも好きです。
98ポイント を手に入れた。
|
|
|
|
|
Name: 326 ..ぴよぴよ(292ポイント)
Date: 2008/09/02(火) 02:57
No:20849
|
|
Title: Re:東方のクラシックアレンジについて
|
|
クラシックではないですが東方アレンジについては陰ながら協力させてもらってるサークルさんとかありますよ。
ニコニコの東方と陰陽師のMADブーム〜始まりいまじゃあニコニコ動画でも公式アニメのED担当したりドワンゴと東方アレンジの着メロの商業化とかカラオケ業界とか参入していたりメンバーはTV東京で担当していたナレーション番組などあったりして当然賛否も在るような大きな規模になってしまいましたが・・・
166ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..初心者(8,048ポイント)
Date: 2008/09/02(火) 10:39
No:20854
|
|
Title: Re:東方のクラシックアレンジについて
|
|
返答遅くなりました。
> おお!
> 素晴らしいです。
おお!こんなものでも素晴らしいといってくれるのですか。
> ピアノからいい感じに孤独感を感じます。でも、ピアノもうちょっと音圧あげても良さそうです。
> 偉そうに言いますが、全体的によくまとまっていると思います。
> いいですね〜。こういうアレンジも好きです。
もうちょっと修正すれば自サイトでも公開しようかなと考えたのですが、
他の曲が出来てないので、一曲だけ出してもアレなので、気に入っていただけたのであれば
管理人さんの所で置いてもかまわないことにします。
(過去ログに行ったらファイル消えちゃいますし)
そういえば、どっかで、
「東方は漫画やアニメ・ゲームなどの業界の登竜門の一つだ」
というような文を見たことがあります。
142ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(706,748ポイント)
Date: 2008/09/02(火) 13:28
No:20863
|
|
Title: Re:東方のクラシックアレンジについて
|
|
>midi
おぉ!
>しょぼいですが…
とか仰っていますが、素晴らしいじゃないですか!
.midファイルの音ってあまり良い音が出ない印象がありましたが、
いい音でるんですね。
これなら普通にゲームのバックミュージックにありそう・・。
これって耳コピですか?
どこかに落ちてる楽譜とか参考にするんでしょうか?
手元にピアノかシンセサイザーかなにか無いと無理そうですね;
102ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..初心者(8,393ポイント)
Date: 2008/09/02(火) 14:01
No:20864
|
|
Title: Re:東方のクラシックアレンジについて
|
|
> >midi
> おぉ!
> >しょぼいですが…
> とか仰っていますが、素晴らしいじゃないですか!
> .midファイルの音ってあまり良い音が出ない印象がありましたが、
> いい音でるんですね。
ただ単に音符を置くだけだと、音圧が一定なので、
それをしていないmidi曲だといい音にならないみたいです。(ステレオ配置とかも)
音に強弱を付けるだけで結構深みが出るんですよね。
それでもmidiは、音源数が少ないので確かに余り良い音はないです。
(だからしょぼいと言ったのですが)
> これなら普通にゲームのバックミュージックにありそう・・。
どんなとこにつかえそうですかね?
やっぱり洞窟?
> これって耳コピですか?
> どこかに落ちてる楽譜とか参考にするんでしょうか?
> 手元にピアノかシンセサイザーかなにか無いと無理そうですね;
ノートPC一台で完結です。
http://www.nicovideo.jp/watch/sm3476012
確か、こちらの動画から目でうつしましたね。(目コピ?)
(上記でも書いているのですが、ドラムパートは半分耳コピです)
シーケンサソフトのピアノロール表示で、音階や間隔などを確認しながら配置して、
重なって見えないところは省いたり、適当にごまかしたりして、
あとは、長くするために各パートをずらして完成。
って感じです。
(…トピックとまったく関係ない話ですね…)
345ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(706,739ポイント)
Date: 2008/09/02(火) 14:40
No:20865
|
|
Title: Re:東方のクラシックアレンジについて
|
|
>こちらの動画から目でうつしましたね。(目コピ?
新しいw
>ノートPC一台で完結です。
マジですか!
こういうのを作ってる人は高いシンセサイザーとか持っていらっしゃるのかと思っていました。
私のマンションに電子ピアノがあったんですが、最近ピアノよりプログラミングばかりやってるので、
この前家に持って帰ってもらってしまいました・・・おいとけばよかったorz
>やっぱり洞窟?
地霊殿をすっかり忘れて考えると暗い森林の中のようなイメージもわく気がします。
いや〜やっぱり世界観にあった音楽は自分じゃないと作れないですよね。
次の作品では曲は自分で作らないとかな・・。
しかし18曲はいるでしょうし、そんなに作れるのかな・・;
9ポイント を落としてしまった。
|
|
|
|
|
Name: 御津凪 [URL] ..初心者(8,564ポイント)
Date: 2008/09/02(火) 16:05
No:20866
|
|
Title: Re:東方のクラシックアレンジについて
|
|
本格的な曲を作るなら豊富な音源を手に入れなくちゃいけないから金がかかるのですが、
この程度の曲なら無料で出来ますよ。
無料のソフトウェアシンセサイザーとかがあるから、
それを駆使すれば、もっと満足のいく音質になるかもしれませんね。
> 地霊殿をすっかり忘れて考えると暗い森林の中のようなイメージもわく気がします。
> いや〜やっぱり世界観にあった音楽は自分じゃないと作れないですよね。
余り慣れない内は目標とする音楽にたどり着かなくて挫折…。
ということにならないようにどっかで妥協しないといけませんよね。
> 次の作品では曲は自分で作らないとかな・・。
> しかし18曲はいるでしょうし、そんなに作れるのかな・・;
余り慣れない内は(ry
なので、何曲か作って、残りを他の方に作っていただくとか。
たとえば……
え?私?
171ポイント を手に入れた。
|
|
|
|
|
Name: あなざぁ ..かけだし(1,276ポイント)
Date: 2008/09/02(火) 20:01
No:20871
|
|
Title: Re:東方のクラシックアレンジについて
|
|
作曲ですか・・・
MIDIを編集するのに、Dominoっていうフリーソフトが使いやすかったと思います。
44ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(22,328ポイント)
Date: 2008/09/02(火) 21:01
No:20872
|
|
Title: Re:東方のクラシックアレンジについて
|
|
御津凪さんすごいです。良い雰囲気でててゲームにも合いそうだな〜と、ここまでできるのかと感動しながら聞いてました。 1:48秒くらいからテンポが一気に上がる感じなんか、とっても良かったです。
あと聞き覚えがのないのですが、Jさんが言ってるとおりアレンジなんですか?なにのアレンジか気になったので。
78ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(707,004ポイント)
Date: 2008/09/02(火) 21:24
No:20873
|
|
Title: Re:東方のクラシックアレンジについて
|
|
>御津凪さん
音楽作成はまたおくが深そうですもんねぇ。
ゲーム製作は、シナリオ、プログラム、画像、音楽がそろって初めて完成すると思いますが、
それどれか一つでもクオリティを求めるならどれも相当な時間がかかりそうですよね・・。
全部一人で作ってるZUNさんて一体・・。
しかし動画拝見しましたが、目コピと言えどもあそこのピアノ部分はかなり難しそう^^;
これを耳コピとか出来る人すごい・・。
>え?私?
おぉ、ホントですか!
RemicalSoftには声担当、プログラム担当、画像担当、テスト担当がいますが、
音楽は誰も担当してないんですよねorz
RemicalSoftに今必要なのは音楽です(T_T
>arrayさん
arrayさんは東方ご存じなかったんでしたっけ?
これは東方地霊殿というこの前発売したばかりのゲームに入っている曲で
このゲームの2面のボスの曲です。
御津凪が上で動画のリンクを貼っていらっしゃると思います。
ニコニコとかで「地霊殿 2面」とかで検索すれば動画は出てくると思います。
265ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..初心者(8,849ポイント)
Date: 2008/09/02(火) 21:47
No:20875
|
|
Title: Re:東方のクラシックアレンジについて
|
|
> RemicalSoftには声担当、プログラム担当、画像担当、テスト担当がいますが、
> 音楽は誰も担当してないんですよねorz
> RemicalSoftに今必要なのは音楽です(T_T
音楽担当ですか…。
こんな私でよければ。
ちなみに3D(プログラム)も出来ますよ。
っていうか、こんな所でこんな話をしてもいいのでしょうかね。
32ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..中級者(9,313ポイント)
Date: 2008/09/03(水) 10:43
No:20890
|
|
Title: Re:東方のクラシックアレンジについて
|
|
> 個人的なことはmixi日記とかでコメントしてもらった方がいいかもしれませんね^^;
私はmixiはしない派(というより管理をこれ以上増やしたくない)なので、メールでも良いでしょうか?
> しかし音楽作成のいい刺激になりました!
> 私も頑張らなくては><!
>
> 頂いたmid音楽、何度も聞いてます〜b
恐縮です…(照
そういえば、RemicalSoftはメンバー一人(だったっけ?)ですよね。
他にメンバーを加える予定ってあったのでしょうか?
あと、Jさん、
このトピックとはかけ離れた話をしてしまって申し訳ありませんm(_ _)m。
151ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(104,691ポイント)
Date: 2008/08/30(土) 14:23
No:20678
|
|
Title: WebBrowserコントロールについて
|
|
.NETのWebBrowserコントロールについて質問です。
このコントロールを使って、HTMLビューアみたいなことをしたいと思っているのですが、テキストの色や配置、画像などは問題なく表示できるようなのですが、テキストの点滅<BLINK>やスクロール<MARQUEE>なんかは反映されないようなのです。なんとか方法は無いものでしょうか?
134ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(107,623ポイント)
Date: 2008/09/03(水) 14:28
No:20898
| 解決!
|
Title: Re:WebBrowserコントロールについて
|
|
HTMLタグ辞典を見ていたら解決しました。
IEのエンジンではBLINKタグは点滅せずにテキストだけが表示されるようです。
MARQUEEタグに関しては勘違いでした。問題なくスクロールできました。
とりあえず、.NetのWebBrowserコントロールを使用する限り、BLINKタグはプレビューできないようです。
5ポイント を手に入れた。
|
|
|
|
Name: 彩 ..ぴよぴよ(148ポイント)
Date: 2008/09/02(火) 21:51
No:20876
|
|
Title: 東方文花帖の撮影機能について。
|
|
初めまして。
龍神録プログラミングの館を頼りにSTGをある程度作ったのですが、
東方文花帖では、弾を放つのではなく、写真を撮るという内容のゲームなのです。
そこで、撮影機能に凄い興味がわき自分もこの機能の勉強をしたいと思って書き込みました。
どうやってプログラムを組めば、撮影が可能になるのでしょうか??
148ポイント を手に入れた。
|
|
|
|
Name: array ..上級者(22,549ポイント)
Date: 2008/09/02(火) 22:29
No:20877
|
|
Title: Re:東方文花帖の撮影機能について。
|
|
撮影機能は便利なのがDXライブラリにあります。
int SaveDrawScreen( int x1, int y1, int x2, int y2, char *FileName ) ;
を使って、スクリーンショットの範囲を決めてやり、この範囲を少しづつ小さくしていきつつ・・・と説明したら長くなりそうなのでやめますが。
(ショット=写真を撮る)
要点として
ショット中はプレイヤの移動はしない。
ショット中は撮影位置の移動。
ショットは、時間経過に基づき、少しずつ撮影可能範囲が狭くなる。
範囲外に相手が居ればショットミス。
ショット範囲内の弾は消す。
ショット後は次回ショットまでのカウントを初期化する。
他にも細かく言えば要素がありますが、とりあえずこんな感じで組めば良いと思います。
あとは撮影範囲のエフェクトですよね。とりあえず撮影範囲はDrawBox()で描画しておいて、それっぽい動きをさせてやれば良いと思います。
221ポイント を手に入れた。
|
|
|
|
|
Name: 名無しさん ..ぴよぴよ(822ポイント)
Date: 2008/09/02(火) 22:32
No:20878
|
|
Title: Re:東方文花帖の撮影機能について。
|
|
描画をバックバッファに直接行う前にレンダーターゲットテクスチャに描画するだけです
描画したテクスチャをsetTextureしてお好みの範囲(写真の大きさ)を指定して描画すればOKです
73ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(22,568ポイント)
Date: 2008/09/02(火) 22:40
No:20879
|
|
Title: Re:東方文花帖の撮影機能について。
|
|
名無しさんの処理は分らないのですが、なんか軽そうで良いですね。
ちなみに
SaveDrawScreen( ) ;
は、画面を座標範囲を指定してやり、BMPとして保存する関数ですので、重そう・・・。そしてそれを画像として読み込む必要があるので一瞬止まる可能性も(実際にやってみないと分りませんが)。その画像を希望する動きをさせながら定位置に持っていく・・・というのをイメージしてました。
19ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..中級者(14,495ポイント)
Date: 2008/09/02(火) 23:25
No:20880
|
|
Title: Re:東方文花帖の撮影機能について。
|
|
arrayさんと同系列のやり方であれば
GetDrawScreenGraph ( int x1, int y1, int x2, int y2, int GrHandle );
の方が使えそうです。詳細はリファレンスの「グラフィックデータ制御関数」の中ほどからいけます。
画像を保存せずに直接読み込むので少しだけましです。
DerivationGraph( int SrcX, int SrcY, int Width, int Height, int SrcGraphHandle );
と組み合わせて使えば何とかなるかもしれません。
名無しさんのやり方の方はDXライブラリの関数ではなく、DirectXの関数(正確にはその中のDirect3D)なので、
ちょっと敷居が高いです。
171ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(218,844ポイント)
Date: 2008/09/02(火) 23:40
No:20881
|
|
Title: Re:東方文花帖の撮影機能について。
|
|
>名無しさんのやり方の方はDXライブラリの関数ではなく、DirectXの関数(正確にはその中のDirect3D)なので、
>ちょっと敷居が高いです。
DXライブラリでも使えますよ。
MakeScreen()で作ったテクスチャを SetDrawScreen()すれば、
以後は描画したものは全てそのテクスチャにレンダリングされます。
とはいえ、実際にゲームの中で使うには仕様にも依りますが、
望み通りのものを作るには多少工夫が必要になるかもしれません。
30ポイント を手に入れた。
|
|
|
|
Name: kz ..かけだし(2,359ポイント)
Date: 2008/08/29(金) 02:39
No:20626
|
|
Title: DXライブラリのツールバーの画像の取り込み方について
|
|
DXライブラリにはツールバーの設定にSetupToolBarという関数があったのですが、これのリソースから画像を読み込む方法はあるのでしょうか??
45ポイント を手に入れた。
|
|
|
|
Name: kz ..かけだし(2,397ポイント)
Date: 2008/09/02(火) 18:44
No:20869
| 解決!
|
Title: Re:DXライブラリのツールバーの画像の取り込み方について
|
|
>管理人さん
ご返答ありがとうございます。
本家の方で聞いてみます。
38ポイント を手に入れた。
|
|
|
|
Name: こめかみ ..上級者(15,979ポイント)
Date: 2008/09/01(月) 17:38
No:20808
|
|
Title: 【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
解決以外のアイコンが無くなってしまっているのでこのようなタイトルをつけました。
「C++クラスと継承完全制覇」という参考書をもとに、
stringクラスの練習をしようとVC++で以下のソースを打ち込んだら
--
include ファイルを開けません。'cstring.h': No such file or directory
--
と言われてしまいました。
BCCdeveloperでは出来るのでとりあえず差し迫った問題ではないのですが。
VC++の有料版を買わないと標準クラスライブラリを使えないのでしょうか。
そうでないのなら使う方法や参考になるサイトなど教えてください。
//VC++版
#include <cstring.h>
#include <iostream.h>
main()
{
//文字列を作成する.
Cstring s1("Apple");
Cstring s2("Orange");
Cstring s3;
//文字列を代入する.
s3 = s2;
//文字列を比較する.
if(s3 > s1){
cout << s3 << "は" << s1 << "より大きい\n";
}
return 0;
}
//BCC版
#include <cstring.h>
#include <iostream.h>
main()
{
//文字列を作成する.
string s1("Apple");
string s2("Orange");
string s3;
//文字列を代入する.
s3 = s2;
//文字列を比較する.
if(s3 > s1){
cout << s3 << "は" << s1 << "より大きい\n";
}
return 0;
}
290ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..初心者(7,750ポイント)
Date: 2008/09/01(月) 17:42
No:20809
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
確か、
#include <cstring>
と、".h"を外せばインクルードできるはず。
(VC++のインクルードでは拡張子のないヘッダファイルが存在しているようで)
52ポイント を手に入れた。
|
|
|
|
|
Name: J ..初心者(7,434ポイント)
Date: 2008/09/01(月) 17:43
No:20810
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
VC持ってないんで違うかもしれませんが、
stringクラスは
#include <string>
ではなかったでしょうか?
見た感じでは
#include <cstring.h>
はC言語用のヘッダーファイルです。
95ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..上級者(16,003ポイント)
Date: 2008/09/01(月) 17:45
No:20811
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
返信ありがとうございます。
今から試して見ます。
24ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(57,152ポイント)
Date: 2008/09/01(月) 17:49
No:20814
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
使っている本がよくありませんね。Borland C++に強く依存している上に、内容が古すぎます。
C++の標準規格ができる前のBorland C++(Borland C++ Compilerではありません)には、<cstring.h>というヘッダがありました。
その中では、stringクラス(std::stringでもなければ、basic_string<char>のtypedef名でもない)が定義されていていたはずです。
# 確か、tolowerだったか、to_lowerだったかのメンバ関数もあったはずです。
いずれにしても、内容が古すぎて今では使えません。<cstring>は<string.h>に対応したものですので、<string>を使いましょう。
2倍のポイントを手に入れた! 186ポイント を手に入れた。
|
|
|
|
|
Name: J ..初心者(7,651ポイント)
Date: 2008/09/01(月) 17:51
No:20815
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
あ、それと直接は関係ないのですが、
main()
ではなく、
int main()
にすると良いでしょう。
return 0;
の0がおかしいことになってしまいます。
mainに戻り値が無いとOSに渡される終了コードが不定になってしまい、何かと不便なので。
107ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..上級者(15,119ポイント)
Date: 2008/09/01(月) 18:03
No:20819
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
".h"を外してみた結果、インクルードについてのエラーは出なくなったのですが。
1>------ ビルド開始: プロジェクト: 試験, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(41) : error C2065: 'Cstring' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(41) : error C2146: 構文エラー : ';' が、識別子 's1' の前に必要です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(41) : error C3861: 's1': 識別子が見つかりませんでした
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(42) : error C2065: 'Cstring' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(42) : error C2146: 構文エラー : ';' が、識別子 's2' の前に必要です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(42) : error C3861: 's2': 識別子が見つかりませんでした
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(43) : error C2065: 'Cstring' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(43) : error C2146: 構文エラー : ';' が、識別子 's3' の前に必要です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(43) : error C2065: 's3' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(46) : error C2065: 's3' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(46) : error C2065: 's2' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(49) : error C2065: 's3' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(49) : error C2065: 's1' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(50) : error C2065: 'cout' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(50) : error C2065: 's3' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(50) : error C2065: 's1' : 定義されていない識別子です。
1>ビルドログは "file://d:\ゲームプログラミングの館\試験\試験\Debug\BuildLog.htm" に保存されました。
1>試験 - エラー 17、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
このようなエラーが出てヘッダ自体が意味を成して無いような感じです。
#include <string>でも同じでした。
>Jさん
>#include <cstring.h>
>はC言語用のヘッダーファイルです。
BCCではこれでいけました。cppファイルです。
int main()に直しました、気をつけます。
>たかぎさん
>使っている本がよくありませんね。Borland C++に強く依存している上に、内容が古すぎます。
>いずれにしても、内容が古すぎて今では使えません。
そうなんですか、せっかく買ったんですけどね。
C++の初心者向けに詳しい解説が載っていて現代の規格に準拠したお勧めの本やサイトを教えていただけないでしょうか。
うー、うまくいきません。
VC++でもうまくいくソースを教えていただけないでしょうか。
884ポイント を落としてしまった。
|
|
|
|
|
Name: J ..初心者(8,040ポイント)
Date: 2008/09/01(月) 18:11
No:20822
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
う〜ん、おそらくだとは思いますが、
stringをstd::stringにするか
includeの後に
usingnamespace std;
としてみてください。
25ポイント を落としてしまった。
|
|
|
|
|
Name: 御津凪 [URL] ..初心者(8,035ポイント)
Date: 2008/09/01(月) 18:11
No:20823
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
インクルード文の後に、
using namespace std;
を、入れるか、string を
std::string
と付け足すと直ると思います。
73ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..上級者(15,169ポイント)
Date: 2008/09/01(月) 18:13
No:20825
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
ありがとうございます。
早速やってみます。
2倍のポイントを手に入れた! 50ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(706,081ポイント)
Date: 2008/09/01(月) 18:16
No:20826
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
直接関係無い話ですが
>解決以外のアイコンが無くなってしまっているので
マークとアイコンは間違って使っている人が多く、
また、トピの内容は題名を見たらだいたいわかることから必要性があまりないと
判断したのでなくしました。
もし前の方がわかりやすかったと感じられる人が多ければ戻そうと思いますm(_ _)m
まぁ色々試してみようと思います。
84ポイント を手に入れた。
|
|
|
|
|
Name: J ..初心者(8,077ポイント)
Date: 2008/09/01(月) 18:16
No:20828
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
すみません、御津凪さんの方の
using namespace std;
があってます。すみませんでした。
37ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..上級者(15,526ポイント)
Date: 2008/09/01(月) 18:27
No:20831
| 解決!
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
Jさん 御津凪さん ありがとうございました。
以下のソースコードでうまくいきました。
#include <string>
#include <iostream>
using namespace std;
int main()
{
//文字列を作成する.
string s1("Apple");
string s2("Orange");
string s3;
//文字列を代入する.
s3 = s2;
//文字列を比較する.
if(s3 > s1){
cout << s3 << "は" << s1 << "より大きい\n";
}
return 0;
}
参考書とかなり違いますね、無駄な買い物しちゃったのかな。
もしかして「C言語ポインタ完全制覇」もダメですかね?あーもっと下調べをちゃんとしとくんだったよぅ。
管理人さん
>また、トピの内容は題名を見たらだいたいわかることから必要性があまりないと
判断したのでなくしました。
確かにそうですね。関係ないですが緑色のデザインもいい感じです、季節で変えてるのでしょうか。
357ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(57,190ポイント)
Date: 2008/09/01(月) 19:06
No:20835
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
> もしかして「C言語ポインタ完全制覇」もダメですかね?
細部に関しては分かりませんが、特に問題はないと思います(読んでいないので推測ですが)。
ただし、C99に関する知識を得ようとしているのであれば、不適切な可能性はあります(これも推測)。
38ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..上級者(15,684ポイント)
Date: 2008/09/01(月) 19:30
No:20837
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
たかぎさんありがとうございます。
お金が無駄にならなかったのなら嬉しいです。
C99ってわからなかったので調べたのですが、1999年12月に制定されたのなら初版発行が平成13年1月25日なので多分大丈夫です(すいそく!)。
規格って何度も変わるんですね。
仕事にしている方は変わる度に覚え直してるのですか、大変だなー将来が怖いなーついていけるのかなー。
それともしよろしければ
C++の初心者向けに詳しい解説が載っていて現代の規格に準拠したお勧めの本
誰か教えてください。
サイトだけだと目が疲れるので書籍でじっくり読みたいのです。
158ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(57,297ポイント)
Date: 2008/09/01(月) 21:40
No:20838
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
> C99ってわからなかったので調べたのですが、1999年12月に制定されたのなら初版発行が平成13年1月25日なので多分大丈夫です(すいそく!)。
多分ダメだと思います。
> C++の初心者向けに詳しい解説が載っていて現代の規格に準拠したお勧めの本
ある程度Cが分かっているのであれば、『Accelerated C++―効率的なプログラミングのための新しい定跡』なんかが結構よかったりします。
71ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..上級者(15,907ポイント)
Date: 2008/09/01(月) 22:17
No:20841
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
たかぎさん直々にありがとうございます。
ある程度Cが分かっているか自信はありませんが仮に難しくてもCを学ぶモチベーションにはなると思うので買ってみます。
>多分ダメだと思います。
うう…一つ前の規格のポインタの概念って今のとそんなに違うのですか?
たびたびすみませんがCのポインタが詳しい本を教えていただけますでしょうか。
図解C言語 ポインタの極意 (単行本)
柴田 望洋 (著)
この本とかどうなんですかね、学校で使ってる教科書と同じ人の著書なのですが。
223ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(57,346ポイント)
Date: 2008/09/01(月) 23:23
No:20847
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
> うう…一つ前の規格のポインタの概念って今のとそんなに違うのですか?
ポインタの概念自体は変わりません。
> 図解C言語 ポインタの極意 (単行本)
悪くないと思います。
ただ、この手の本ばかり読むより、もう少し実践的な本も読んだ方がよいと思います。
49ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..上級者(16,861ポイント)
Date: 2008/09/02(火) 00:17
No:20848
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
>ポインタの概念自体は変わりません。
そうなのですか。
ポインタの理解を深めたくて買ったのでこの本で頑張ってみます。
もうちょっと調べてみました。C++のような機能がいくつか追加されたのがC99という認識でよいのでしょうか。
C99に興味を持ったときどのような書籍を入手すればいいのか教えていただけないでしょうか。
すぐ買うわけではないのですが多分しばらくしたら興味を持って手を出してみると思うので。
>ただ、この手の本ばかり読むより、もう少し実践的な本も読んだ方がよいと思います。
「この手の本」というのがよくわからないのですが、実践的な本というのは私の欲求に従うのならゲームを実際に作ってみる本だということになります。
私はネット上でちらほら公開されているゲームプログラミングのコンテンツが理解できるようになりたくて、基礎をもっと固めようと思い今頑張っています。
このサイトの管理人さんの龍神録の館も素晴らしく、これからも継続して利用させてもらい、模倣やアレンジをする気は満々なのですが、いかんせん開発スパンが長いのです。いろんなミニゲームを作ってみたいとも考えてる私は、まずテトリスを作ってみようと考え、下記のようなサイトで模倣を試みました。
ttp://codezine.jp/article/detail/207
ttp://www13.plala.or.jp/kymats/study/game_other/SPACE_TETRIS/st1.html
等。(アルゴリズムだけを理解すればDXライブラリでも作れそうですが、その試行錯誤の時間を龍神録の館に取り組む時間に割きたいと考えてしまします。)
しかし教科書にも載っていない見知らぬ知識が多すぎるので挫折し、
それでも理解できるようになろうとして、自分に足りなそうな内容の本を探しています。
息抜きに、必ず使うようになるであろう、と目の前の課題と直接は関係無いC++に手を付けてみたりもしています(シューティングゲーム作りに繋がるであろうという打算もあります)。
とりあえずポインタを深く理解したいと思っています。
ポインタに絡めてC言語のでのゲーム作りができるような本があれば最高なのですが。
実践的な本とはそういうことでしょうか。だとしてもどうやって探せばいいのでしょうか。
954ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(105,444ポイント)
Date: 2008/09/02(火) 08:47
No:20850
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
いきなり答えを求めずに、最終的な目標に辿りつくには何をすべきかを細かく分解して考えてみては如何でしょうか?
私は落ち物パズルが好きなので、テトリスを例に挙げさせていただきますが…
1:7種類のブロックが落ちてくる
2:横一列に隙間なく並べると消える
大雑把なルールはこれだけですよね。しかし、これをさらに突き詰めると…
1:7種類のブロックの作り方はどうしよう?
2:落ちてくるだけじゃない、左右にも動かせるようにしないと…どうしよう?
3:下・左・右へ移動する時に、単純に座標を移動させただけでは、既に存在しているブロックをすり抜けてしまう…どうしよう?
4:そういえば、回転もできるんだっけ…どうしよう?
5:横一列に並んだというのを認識するにはどうしよう?
なんていう問題に突き当たると思います。更に、ゲーム性を高めようと思ったら…
1:ブロックの落下速度を段々と上げたいよなぁ…
2:得点の表示も欲しいよなぁ…
もっと言えば、演出なんてのも…
1:消えるときに点滅させるとか、段々小さくなって消えるとか派手さが欲しいかも…どうやるんだ?
2:音楽も欲しいなぁ…どうやって音楽を鳴らすんだろう?
3:画面もカラフルで綺麗にしたいよなぁ…
本やネットの情報だけに頼るのではなく、とにかく色々なプログラムを書きまくって、自分が何を分かっていないかを理解する、というのが急務かなぁ…と思いますね。
222ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(57,407ポイント)
Date: 2008/09/02(火) 09:45
No:20851
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
> もうちょっと調べてみました。C++のような機能がいくつか追加されたのがC99という認識でよいのでしょうか。
C++から持ってきた機能は、インライン関数(実際には仕様がかなり異なる)、一行コメント、ブロック途中での宣言ぐらいです。
C99での最も大きな仕様変更は、ライブラリ、特に数学ライブラリの追加です。次に大きいのは、GCCの独自拡張機能を追認したことです。
> C99に興味を持ったときどのような書籍を入手すればいいのか教えていただけないでしょうか。
C90が十分分かっていれば、特に書籍は必要ではありませんが、『標準C言語辞典』ピアソン・エデュケーションがあれば重宝します。
> 「この手の本」というのがよくわからないのですが、実践的な本というのは私の欲求に従うのならゲームを実際に作ってみる本だということになります。
大体その認識であっています。
61ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..上級者(17,697ポイント)
Date: 2008/09/02(火) 11:31
No:20856
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
バグさんありがとうございます。
>本やネットの情報だけに頼るのではなく、とにかく色々なプログラムを書きまくって、自分が何を分かっていないかを理解する、というのが急務かなぁ…と思いますね。
既にある情報を理解できるようになるほうが今後にも繋がりそうでいいかな、という判断だったのですが、
試行錯誤こそがプログラミングの骨頂だとおっしゃるのなら何も見ないで頑張ってみようと思います。
テトリスのアドバイスありがとうございます、作ってみたいミニゲームは他にもいくつかあるのでどれが先になるかわかりませんが完成したら真っ先にここに持ってきます。
いきなり答えを求めずに、なおかつ気長になり過ぎないように頑張ってみようと思います。
たかぎさんありがとうございます。
C言語に辞典があるのですか、はじめて知りました。リファレンスとかはみたことありましたが。
なんか最強っぽい本ですね、ぜひ入手してみます。
>大体その認識であっています。
大体というのが気になりますが、わかりました。
いろいろ試してみます。
2倍のポイントを手に入れた! 836ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(57,570ポイント)
Date: 2008/09/02(火) 13:24
No:20862
|
|
Title: Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
|
|
> C言語に辞典があるのですか、はじめて知りました。
『新ANSI C言語辞典』技術評論者の方が有名ですね。
『標準C言語辞典』は、『新ANSI C言語辞典』ほど厳密な記述はないので割とあっさりしています。
厳密な情報が欲しい場合には物足りないですが、そうでない場合は初級者〜中級者でも読みやすいと思います。
なお、『新ANSI C言語辞典』にも間違いは少なからずあるので、本当に厳密な情報が欲しければ規格を調べるしかありません。
> 大体というのが気になりますが、
「ゲームを実際に作ってみる本」というのが、具体的にどんなものを想定しているのかによるということです。
163ポイント を手に入れた。
|
|
|
|
Name: 藍 ..入門者(2,685ポイント)
Date: 2008/09/02(火) 12:33
No:20859
|
|
Title: 龍神録の館24章
|
|
龍神録の館24章で、変更されているが変更箇所として書いていない場所があったので一応報告しておきます。
enemy.cppのvoid enemy_enter()部分で
void enemy_enter(){//敵の行動を登録・制御する関数
int i,j,t;
if(boss.flag!=0)return;
for(t=0;t<ENEMY_ORDER_MAX;t++){
if(enemy_order[t].cnt==stage_count){//現在の瞬間がオーダーの瞬間なら
以下省略
の、if(boss.flag!=0)return;が追加されていますが追加場所として書かれていないです。
これの変更をしないと敵がひっきりなしにでてきます。
私もこれで1回つまって、23章と24章見比べてやっと発見したので、管理人さんが意図的に書いてないのかもしれませんが、一応報告しておきます。
234ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(706,646ポイント)
Date: 2008/09/02(火) 12:52
No:20860
|
|
Title: Re:龍神録の館24章
|
|
ご報告ありがとうございます。
章が進むにつれて、細かい修正箇所が大変多くなっていき、
それを全て紹介すると、かえってみにくくなり、本当に重要な変更点が希薄になってしまう恐れがあったので
細かな変更点は紹介せずにいました。
これは全ての章にサンプルプロジェクトがあるので、大丈夫だと思っていたのですが、
閲覧者の立場から考えるといつの間にか知らないところで細かな変更がされ、
いつの間にか完成している解説では、自分で作ろうとした時に困りますよね・・。
そこで、後からやはり全ての変更点を列挙すべきだと思い、全てかくことにしました。
しかしどの章からどの章にどこが変更されたのか全て覚えているわけないので、
全て挙げるのは不可能でした・・。
なので、中途半端に15章位からそのまま放置状態になっていたのですが、
こめかみさんがご報告くださったので、その修正が現在二十何章まで続けられました。
今そういう状態です。
ですので、私としては全て修正したいので、もし今後同じような記載漏れがありましたら、
厚かましいお願いではありますが、ご報告頂けると非常にあり難いです。
24章の件修正します。ご報告ありがとうございました。
80ポイント を手に入れた。
|
|
|
|
|
Name: 藍 ..入門者(2,713ポイント)
Date: 2008/09/02(火) 13:20
No:20861
| 解決!
|
Title: Re:龍神録の館24章
|
|
すばやい対応お疲れ様ですm(_ _)m
今後も何かありましたら、随時報告させていただきます。
28ポイント を手に入れた。
|
|
|
|
Name: 西村 ..初心者(5,459ポイント)
Date: 2008/09/01(月) 22:15
No:20840
|
|
Title: ヘッダファイルの質問
|
|
以前にさせて頂いたロボカップの質問と二点間の距離を出す質問の延長になるのですが・・・選手のプログラムを作るにあたり、色々な数字(行動に必要なパワーとか)を計算する libsclientex.h というヘッダファイルを作ることになりました。学校で用意されたものに穴埋めをしていくような形なのですが、各関数が間違いなく出来たかどうかを check.c というプログラムでチェック出来るようになっています。しかし、このチェックが一向に通らないのです。どこが間違っているのかが解らないので教えてください。とりあえず、以下に簡略化した libsclientex.c のソースを・・・
/* 2物体の距離を得る
引数
pos1( in ): 対象物体の位置
pos2( in ): 対象物体の位置
返値:pos1とpos2の距離
*/
double get_distance( Pos pos1, Pos pos2 )
{
return(sqrt(((pos1.x - pos2.x) * (pos1.x - pos2.x)) + ((pos1.y - pos2.y) * (pos1.y - pos2.y))));
}
以前に試しに作った二点間の距離を出すプログラムではこれで普通に大丈夫だったのに、何故ヘッダファイルになったらダメなのでしょうか?何か特別なことをしなければならないのでしょうか?
多分説明が全く足りていないと思いますが、お願いします。
505ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(125,250ポイント)
Date: 2008/09/01(月) 22:25
No:20843
|
|
Title: Re:ヘッダファイルの質問
|
|
check.c の中身と仕様を提示してください。
チェックが通らない、という状況が、どういうことを指すのかわかるように説明してください。
> 以下に簡略化した libsclientex.c のソースを・・・
libsclientex.h ではないのですか?ヘッダーファイルを作ろうとしているのですよね?
いずれにしても、関数の実体をヘッダーファイルに書くことは推奨できかねます。
96ポイント を手に入れた。
|
|
|
|
|
Name: 西村 ..初心者(5,793ポイント)
Date: 2008/09/01(月) 22:43
No:20844
|
|
Title: ヘッダファイルの質問
|
|
言い方が無茶苦茶・・・というか、完全に自分の中の印象で話してしまっていました。用意された libsclientex.h を元に選手を関数制御する関数ファイルを作っているというのが正しい・・・のだと思います。
とりあえず、 check.c も結構長くなるのでピックアップして・・・
/*
* 課題1用チェックプログラム
*
* 結果が正しくない関数の関数名が出力される
*/
#include "libsclientex.h"
#include <stdio.h>
int main()
{
PosState my;
Pos pos, pos2;
double pow, dir, dist;
SeenObj obj;
pos.x = -5.0; pos.y = 0.0;
pos.x = pos.y = -3.0;
dist = get_distance( pos, pos2 ); /*距離を計測*/
if( abs( dist - 9.433981 ) < 0.001 ) ;
else
printf( "get_distance\n" );
return 0;
}
間違っていたら get_distance と表示される使用のようです。
別のファイルから関数が数字を受け取る時は最初に書いた libsclientex.c みたいな書き方じゃダメなんですか?
それより、これタイトル変えた方がいいですか?
334ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(125,347ポイント)
Date: 2008/09/01(月) 22:53
No:20845
|
|
Title: Re:ヘッダファイルの質問
|
|
> pos.x = -5.0; pos.y = 0.0;
> pos.x = pos.y = -3.0;
>
> dist = get_distance( pos, pos2 ); /*距離を計測*/
pos2 に値をセットしていない状態で距離を測っています。
それから、
> if( abs( dist - 9.433981 ) < 0.001 ) ;
最後のセミコロンがあるために、コンパイルエラーが出ませんか?
かりにセミコロンを外したとして、else句の方だけに実行文があるのは
何だか不自然な気がします。
不等号の向きを逆にして、条件を満たす場合に"get_distance"と出力する方が、
より自然ではないでしょうか。
まあ、こんなこと言っても、
「表示される使用(仕様)のようです。」と書いてあることから
ご自身が作られたのではないと推測できるため、あまり意味がないようですね。
97ポイント を手に入れた。
|
|
|
|
|
Name: 西村 ..初心者(5,899ポイント)
Date: 2008/09/01(月) 23:03
No:20846
|
|
Title: ヘッダファイルの質問
|
|
言われてみればなかなか怪しいプログラムですね、これ・・・しかし、 check.c とは別に check という実行ファイルも先にもらっているので、こちらでコンパイルを通す必要はないのです。(先に言うべきでした・・)
もう学校からの強制帰宅の時間が来てしまった!
106ポイント を手に入れた。
|
|
|
|
Name: β ..ぴよぴよ(863ポイント)
Date: 2008/08/31(日) 15:44
No:20739
|
|
Title: LEDの点灯の問題です
|
|
BポートのLED下位(4ビット)と上位(4ビット)を交互に点滅させるプログラムを書きなさい。
ただし、点滅時間は0.5秒(delay_ms(500);)とする。
という問題なのですが、以下のプログラムを変更させて記述したいのですが、
どう変更すれば、よいのでしょうか?
C言語を使ってLEDを点灯させるプログラムです。
以下のプログラムを変更して、Aポートの入力(下位4ビット)
と、Cポートの入力(下位4ビット)を加算した値をBポートに出力しなさい
という問題なのですが、加算した値を出力するにはどうプログラムを記述すればいいか
分かりません。教えてください。
delay_ms(500);)をプログラムのどこに入れたらいいか分かりません。
if(input(PIN_b4)){output_high(PIN_d4);}
else{output_low(PIN_d4);}
if(input(PIN_b5)){output_high(PIN_d5);}
else{output_low(PIN_d5);}
if(input(PIN_b6)){output_high(PIN_d6);}
else{output_low(PIN_d6);}
if(input(PIN_b7)){output_high(PIN_d7);}
else{output_low(PIN_d7);}
434ポイント を手に入れた。
|
|
|
|
Name: array ..上級者(21,705ポイント)
Date: 2008/08/31(日) 16:54
No:20745
|
|
Title: Re:LEDの点灯の問題です
|
|
> if(input(PIN_b4)){output_high(PIN_d4);}
> else{output_low(PIN_d4);}
> if(input(PIN_b5)){output_high(PIN_d5);}
> else{output_low(PIN_d5);}
> if(input(PIN_b6)){output_high(PIN_d6);}
> else{output_low(PIN_d6);}
> if(input(PIN_b7)){output_high(PIN_d7);}
> else{output_low(PIN_d7);}
これは何をしているプログラムなのでしょうか。見た感じ関数input()でPIN_b○を受け取り、そのポートの情報を点灯、消灯を反転しているように見えますが・・・。
PIN_b○も何が読み込まれるのか良くわからないのでなにも言えないと思います。
不都合がなければプログラム全体をテキストファイルで添付してみてはどうでしょうか。
117ポイント を手に入れた。
|
|
|
|
|
Name: β ..ぴよぴよ(464ポイント)
Date: 2008/08/31(日) 17:13
No:20746
|
|
Title: Re:LEDの点灯の問題です
|
|
全体のプログラムは以下のようになります。
#include<18F452/h>
#device HIGH_INTS=TRUE
#priority ext,rb
#fuses NOOSCSEN,HS,BORV45,NOBROWNOUT,PUT
#fuses WDT128,NOWDT
#fuses NODEBUG,NOLVP,NOSTVREN
#fuses NOPROTECT,NOCPD,NOCPB
#fuses NOWRT,NOWRTD,NOWRTB,NOWRTC,NOEBTR,NOEBTRB
#use delay (CLOCK=20000000)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)
#byte port_a=0xf80
#byte port_b=0xf81
#byte port_c=0xf82
#byte port_d=0xf83
#byte port_e=0xf84
int i=0,j=0;
void main()
{
if(input(PIN_b4)){output_high(PIN_d4);}
else{output_low(PIN_d4);}
if(input(PIN_b5)){output_high(PIN_d5);}
else{output_low(PIN_d5);}
if(input(PIN_b6)){output_high(PIN_d6);}
else{output_low(PIN_d6);}
if(input(PIN_b7)){output_high(PIN_d7);}
else{output_low(PIN_d7);}
while(1)
{
output_c(0b10101010);
}
}
399ポイント を落としてしまった。
|
|
|
|
|
Name: Hermit ..上級者(22,100ポイント)
Date: 2008/08/31(日) 23:26
No:20763
|
|
Title: Re:LEDの点灯の問題です
|
|
PIC用のものは、特殊な C が多いので、
コンパイラやライブラリの仕様がわからないと何とも言えなさそうです。
まあ、それだけの情報でも、わかる人にはわかるかもしれませんが・・・
PIC 自体の設定などもあるだろうし・・・(私のレベルではよく分かりません(^^;)
あと、加算が、ビット加算か、整数としての加算かも不明ですし。
70ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(22,250ポイント)
Date: 2008/09/01(月) 18:55
No:20834
|
|
Title: Re:LEDの点灯の問題です
|
|
プログラム全体を公開すればアドバイスが貰えると言ってすみません・・・。もう少し関数的な部分も出てくるのかともったのですが、output_c()、output_high()関数などは既存のものなんですかね・・・。
私の経験では・・・と言っても最近かつ初心者なのですが、実質5時間くらい・・・・7セグ点灯やスイッチによる加算、減算、リセットなんかやりました。・・・その時気づいたことなのですが、最初はプログラムだけ頑張ってました・・・でも、たかぎさん、Hermitさん、も言ってもますがマニュアルがないと進まないみたいですね(基本だったのかもしれませんが)
PIC(マイコン?)でプログラムを考えるときは、やはりPICの各ポートの仕様があり、各ポートによってポートの初期化の仕方が違うみたいです。
それはやはりマニュアルに書いてあるらしく、調べて用途に合わせて初期化しないといけない・・・
他にも回路図なんかも関係してくると思うので、このプログラムに関してはアドバイスを貰うのは難しいのかもしれません^^;
と言いつつ・・・・時間的に期限切れだったりするのかもしれませんが、上記のプログラムでは、どのような動作をしているのでしょうか
見た感じ最終的にwihleで無限ループに入ってるのでoutput_c()関数が延々に呼び出されている・・・前のif文では初期状態が下位ビットだけ反転されている・・・ような感じはします・・・
・・・・それが分っても、意味がないかもしれませんが、法則性が見えれば『LED下位(4ビット)と上位(4ビット)を交互に点滅させるプログラム』くらいならアドバイスできるかもしれません。
なんにせよ私もPICについては全然理解してないので・・・・すみません(+_+)
108ポイント を手に入れた。
|
|
|
|
|
Name: nano ..ぴよぴよ(245ポイント)
Date: 2008/09/01(月) 14:57
No:20784
|
|
Title: Re:C言語の課題について
|
|
これだと平均が算出されませんね。
平均は小数計算なのでdouble型。
キャスト演算子というものを調べてみてください。
printf("平均 =%10.4f\n",double(hei));
追加。
souwa += X[i];
書き方的にはこっちの方が好まれると思います。
このとき、変数宣言でsouwa=0;を忘れないように注意。
152ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(104,848ポイント)
Date: 2008/09/01(月) 14:57
No:20785
|
|
Title: Re:C言語の課題について
|
|
とりあえず、コンパイルしてエラーが出なければ合っているのではないでしょうか?
意図したとおりに動くかどうかは別問題ですが…
35ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..初心者(8,004ポイント)
Date: 2008/09/01(月) 15:00
No:20786
|
|
Title: Re:C言語の課題について
|
|
すいません。
自分初心者ですが、
int hei;
printf("平均 =%10.4f\n",hei);
この部分ですが
多分小数点まで出す処理だと思うのですが
heiはint型なので.00小数点より後ろは出ないと思います(多分)
出そうと思うと
double hei;にした方がいいですね。
17ポイント を手に入れた。
|
|
|
|
|
Name: ナオユキ ..ぴよぴよ(540ポイント)
Date: 2008/09/01(月) 15:08
No:20787
|
|
Title: C言語の課題について
|
|
先ほどはすいませんでした。
まだC言語を習い始めて半年ほどの初心者です。
テ ー マ : 整数配列の計算
プログラム説明: 配列Xに整数をキーボードより入力し、0が入力されたときそ
れまでに入力されたデータを降順にソートし、データ数、総和、
平均を出力する。
補 足 : データ数、総和、平均の桁位置を揃える。ただし、平均は小数点
以下4桁出力する。
出 力 例 :
データ入力
入力 X[0] ? 54
入力 X[1] ? 53
入力 X[2] ? 86
入力 X[3] ? 0
出力 X[0] = 86
出力 X[1] = 54
出力 X[2] = 53
データ数 = 3
総和 = 193
平均 = 64.3333
出力 Xのところに、入力した覚えのない数字が表示されます。
下記プログラムの誤りを指摘していただけないでしょうか?
#include <stdio.h>
main()
{
int i=0,n,w,souwa;
int X[256];
double heikin;
printf("データ入力\n");
do{
printf("入力 X[%d] ? ",i);
scanf("%d",&X[i]);
}while(X[i++] != 0);
printf("\n");
for(i=0;X[i]!=0;i++){
for(n=i+1;X[n]!=0;n++){
if(X[i]<X[n])
w=X[i];
X[i]=X[n];
X[n]=w;
}
}
for(souwa = 0,i = 0;X[i] != 0;i++){
printf("出力 X[%d] = %d\n",i,X[i]);
souwa += X[i];
}
heikin=souwa/i;
printf("\n");
printf("データ数 =%5d\n",i);
printf("総和 =%5d\n",souwa);
printf("平均 =%10.4f\n",heikin);
}
284ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(705,719ポイント)
Date: 2008/09/01(月) 15:10
No:20788
|
|
Title: Re:C言語の課題について
|
|
まず、本名や学年や番号ではないかと思われる情報がコードに載っているのはいいのでしょうか?
それと今後はナオユキさんで名前を統一されるということでよかったでしょうか。
あと、添付ファイルにすると、過去ログ落ちしたとき消えてしまうので、出来れば本文に
ソースコードを書いていただけると嬉しいです。
77ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(56,934ポイント)
Date: 2008/09/01(月) 15:14
No:20789
|
|
Title: Re:C言語の課題について
|
|
相変わらず処理系が特定されていませんし、ちゃんと規約を読んだとは到底思えません。
書いてあること、これから書くことの大半が嘘であることも十分予想できます。
また、せっかく回答しても、質問文等が消去される可能性も高いですね。
まずは、信頼を回復するために、自分が何をできるかを考えてください。
143ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(705,922ポイント)
Date: 2008/09/01(月) 15:15
No:20790
|
|
Title: Re:C言語の課題について
|
|
なかなか先にすすみそうにないので、回答へうつります・・。
期待した振る舞いをするかどうかはともかく直した方がいいという箇所を列挙すると
・main()で始めずにint main()で始める方がいい。
・charでXを用意している点(scanfの%dも含む)
・do whileのiは255を超える可能性があり、オーバーフローの危険性がある。
・for文で0が見つからなかったら果てしなく調べていく危険性がある
・for文でi+nが用意した配列要素以上の数にならないかチェックしてないので超える危険性がある
・heiには整数しかはいらない
・heiの表示はintに対して%10.4fになっているのでおかしい
というところでしょうか。
203ポイント を手に入れた。
|
|
|
|
|
Name: ナオユキ ..かけだし(1,104ポイント)
Date: 2008/09/01(月) 15:45
No:20795
|
|
Title: Re:C言語の課題について
|
|
編集キーがわからず編集できないので、返信します。
まだC言語を習い始めて半年ほどの初心者です。
テ ー マ : 整数配列の計算
プログラム説明: 配列Xに整数をキーボードより入力し、0が入力されたときそ
れまでに入力されたデータを降順にソートし、データ数、総和、
平均を出力する。
補 足 : データ数、総和、平均の桁位置を揃える。ただし、平均は小数点
以下4桁出力する。
出 力 例 :
データ入力
入力 X[0] ? 54
入力 X[1] ? 53
入力 X[2] ? 86
入力 X[3] ? 0
出力 X[0] = 86
出力 X[1] = 54
出力 X[2] = 53
データ数 = 3
総和 = 193
平均 = 64.3333
出力 Xのところに、入力した覚えのない数字が表示されます。
下記プログラムの誤りを指摘していただけないでしょうか?
#include <stdio.h>
main()
{
int i=0,n,w,souwa;
char X[256];
double heikin;
printf("データ入力\n");
do{
printf("入力 X[%d] ? ",i);
scanf("%d",&X[i]);
}while(X[i++] != 0);
printf("\n");
for(i=0;X[i]!=0;i++){
for(n=i+1;X[n]!=0;n++){
if(X[i]<X[n])
w=X[i];
X[i]=X[n];
X[n]=w;
}
}
for(souwa = 0,i = 0;X[i] != 0;i++){
printf("出力 X[%d] = %d\n",i,X[i]);
souwa += X[i];
}
heikin = (double)souwa/i;
printf("\n");
printf("データ数 =%5d\n",i);
printf("総和 =%5d\n",souwa);
printf("平均 =%10.4lf\n",heikin);
}
524ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..上級者(21,116ポイント)
Date: 2008/09/01(月) 15:58
No:20796
|
|
Title: Re:C言語の課題について
|
|
if(X[i]<X[n])
w=X[i];
X[i]=X[n];
X[n]=w;
ここ間違い。
ifのかっこを省略するから下の2行は必ず実行されて、ぐちゃぐちゃになってる。
61ポイント を手に入れた。
|
|
|
|
|
Name: ナオユキ ..かけだし(1,137ポイント)
Date: 2008/09/01(月) 16:02
No:20797
| 解決!
|
Title: Re:C言語の課題について
|
|
見事動きました。
ご協力いただき、本当にありがとうございました。
次回また何かあればお願いします。
33ポイント を手に入れた。
|
|
|
|
Name: nano ..ぴよぴよ(93ポイント)
Date: 2008/09/01(月) 14:45
No:20781
|
|
Title: HEXフォーーマット
|
|
インテルHEX形式をモトローラSレコード形式に変換するプログラムを作成する、という課題を出されました。
それぞれのフォーマットなどを調べましたが、どのように取り掛かってよいのか見当もつきません。
インテルHEX形式のデータを読み込んだらまず、
アドレスが通常か、セグメントアドレスか、拡張リニアアドレスか、を判別すべきだとは考えたのですが、
みなさんだったらどのように取り掛かりますか?
課題の提出期限が1週間なので、できるだけはやいレス、ご意見おまちしております!
OS:Windows
環境:Microsoft Visual C++ 2005
93ポイント を手に入れた。
|
|
|
|
Name: array ..上級者(20,908ポイント)
Date: 2008/08/30(土) 18:32
No:20698
|
|
Title: Re:学校の宿題です
|
|
>課題は一応はできたんですが、例を見せてもらいたいので投稿しました
ちょっとやってみようかなと思って頑張ってたのに、出来てるんですか・・・(x_x)
41ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni ..上級者(24,731ポイント)
Date: 2008/08/30(土) 18:43
No:20701
|
|
Title: Re:学校の宿題です
|
|
今自分も作ったのに出来てるんですか・・・wやはりコードを載せたほうがいいでしょうね。指摘をもらうがベストかと。
59ポイント を手に入れた。
|
|
|
|
|
Name: 扇風機 ..ぴよぴよ(0ポイント)
Date: 2008/08/30(土) 18:53
No:20702
|
|
Title: Re:学校の宿題です
|
|
今回の課題の肝心な点は、いきなりゼロを入力した場合を
考えに入れているかどうかです。
出力例には載っていませんが、ゼロ割りを防ぐコーディングは必要でしょう。
21ポイント を落としてしまった。
|
|
|
|
|
Name: kazu ..入門者(2,597ポイント)
Date: 2008/08/30(土) 21:46
No:20722
|
|
Title: Re:学校の宿題です
|
|
それが、作ったのがすべて学校にあるので、よくわからないです。
今度、学校に行くのが提出日の日なのでちゃんとできているか、確認するために投稿しました。
学校の人と一緒にやったので内容を覚えていないです。ここで教えてもらったソースを持って学校で作ったのと比べたいです。
86ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(56,662ポイント)
Date: 2008/08/30(土) 21:58
No:20723
|
|
Title: Re:学校の宿題です
|
|
処理系不明なので...
キーボードから入力するための一般的な方法はありません。
結果の出力はどこに行うのでしょうか?
整数を入力するとのことですが、絶対値がどんなに大きな整数にも対応するのでしょうか?
出力例にカタカナや漢字が含まれていますが、そのような拡張文字集合が使えるかどうかは処理系に依存します。
119ポイント を手に入れた。
|
|
|
|
|
Name: kazu ..入門者(2,642ポイント)
Date: 2008/08/30(土) 22:01
No:20724
|
|
Title: Re:学校の宿題です
|
|
> 処理系不明なので...
>
> キーボードから入力するための一般的な方法はありません。
> 結果の出力はどこに行うのでしょうか?
> 整数を入力するとのことですが、絶対値がどんなに大きな整数にも対応するのでしょうか?
> 出力例にカタカナや漢字が含まれていますが、そのような拡張文字集合が使えるかどうかは処理系に依存します。
>
出力先はディズプレイです
8ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(56,787ポイント)
Date: 2008/08/30(土) 22:18
No:20725
|
|
Title: Re:学校の宿題です
|
|
> 出力先はディズプレイです
「ディスプレイ」の間違いだとして...
ディスプレイに出力するための一般的な方法はありません。
標準出力経由なのか、OSのシステムコールを呼ぶのか、VRAMや制御レジスタを直接操作するのか、完全に処理系に依存しています。
125ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..入門者(4,396ポイント)
Date: 2008/08/30(土) 22:19
No:20726
|
|
Title: Re:学校の宿題です
|
|
取り敢えずソースを組んでみる事をお薦めします。
その上で助言を貰うなりすれば良いと思います。
後、環境(OS、開発環境)は書いておく方がいいと思いますよ。
58ポイント を手に入れた。
|
|
|
|
|
Name: kazu ..入門者(2,663ポイント)
Date: 2008/08/30(土) 22:21
No:20727
|
|
Title: Re:
|
|
まだ初めて時間がたっていないので詳しいことはわからないです。
ソースを組むものも時間もないので、ここでプログラムを教えていただきたいです。
21ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(56,978ポイント)
Date: 2008/08/30(土) 23:10
No:20730
|
|
Title: Re:
|
|
> 処理系とはなんですか?
大雑把にいえば...
・どんなハードウェアや(もしあれば)どんなオペレーティングシステムの上で実行するのか(実行処理系)
・どんなマシン上で、どんなコンパイラやライブラリ等を使って開発するのか(翻訳処理系)
ということです。
例えば、Windowsが載ったPC上で動作するプログラムを、Windows上でVisual C++ 2008を使って開発する場合と、H8/3048マイコンが載った、OSも何も無く、2行のキャラクターLCDしかないボード上で動作するプログラムを、Linux上でGCCを用いて開発する場合ではまったく事情が異なるということです。
127ポイント を手に入れた。
|
|
|
|
|
Name: 扇風機 ..ぴよぴよ(15ポイント)
Date: 2008/08/30(土) 23:30
No:20731
|
|
Title: Re:プログラムを教えてください
|
|
仮に、誰か(私ではないのは確か)がソースを送ってくれたとします。
学校で作ったソースと比べて、どちらを提出する予定ですか?
比べた結果によっては、もらったソースをそのまま提出することがありそうですか?
15ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni ..上級者(24,881ポイント)
Date: 2008/08/30(土) 23:52
No:20732
|
|
Title: Re:プログラムを教えてください
|
|
扇風機さんに追加して・・・。
Windowsが載ったPC上で動作するプログラムを、Windows上でVisual C++ 2008を使って開発する場合
の場合なんですが、
自分が作ったのは自分の勉強も加えていたので、記憶域の確保callocと単純なソートを使っていますが、もし動的な記憶域の確保を勉強していなかったらこれを調べるのにも時間がかかってしまうような・・・。配列を多めに確保しておいて・・・でよいならそんなに難しくないので、整理していけば丸一日あれば(明日)なんとかなりそうな気がするのですが・・・どのあたりがあやふやなのでしょうか?
150ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..入門者(4,455ポイント)
Date: 2008/08/31(日) 06:06
No:20734
|
|
Title: Re:プログラムを教えてください
|
|
まずは作ったソースを見せてください。(どんなのでもいいので)
そして環境(OS,コンパイラ)を明記してください。
そうしてもらわないとこちらは手助けしたくても出来ません。
59ポイント を手に入れた。
|
|
|
|
|
Name: . ..ぴよぴよ(332ポイント)
Date: 2008/08/31(日) 07:28
No:20735
|
|
Title: Re:プログラムを教えてください
|
|
正直に言えばみんな答えてくれたのに。
期限が迫ってるからと丸投げしておいて、丸投げはだめだといわれたら実は既に自分で
もうやってあるなんて言っても嘘だと丸解り。
しかも最初は「期限間近なのでお願いします」しかかいてなかったのに投稿内容修正してあるし。
だいたいみんなアドバイスしてくれてるのに「いいから時間が無いから答え教えて」って態度は酷すぎる
94ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(21,588ポイント)
Date: 2008/08/31(日) 10:22
No:20737
|
|
Title: Re:プログラムを教えてください
|
|
私的には初心者さんの質問だけが、唯一答える事のできるの物なので重宝しており、規約には反してますが丸投げでも、できるだけ答えてあげたかったりします。
しかし、プログラムが出来ているとなると、とりあえずプログラム内容を公開してくださいとなるのは当然の流れです。
そして、プログラムが出来てるのが本当だとしても、私から見て、特にここで回答を貰って比較するレベルの課題では無いと思うので、本当に出来てるのか疑いたくなります。
でもソートの書き方などは参考(比較)にしたくなるんですかね・・・でも課題としてなら出来てるのであれば問題は無いですよね・・・。
---追記
私の最初の推察では、とりあえず課題のプログラムが全然わからないから(丸投げだけど)回答が欲しいと見えたのですが、実際はどうなのでしょうか。・・・一応、出来てると言われるまで公開する気、満々で書いていたプログラムがあるのですが・・・ソートなんかはとっても非効率になってると思います。
なので、プログラムが出来ているのであれば、私からアドバイスできる事は無いです^^;
それと、出来てるプログラムだと後から分かると無駄な時間を使ってしまったと、結構ショックなので、これから他にも質問する機会があれば規約を読んでから、自分の出来てる範囲と、その回答を何に使うのかを明確にしてもらいたいです。
229ポイント を手に入れた。
|
|
|
|
|
Name: kazu ..入門者(3,253ポイント)
Date: 2008/08/31(日) 15:50
No:20741
|
|
Title: Re:プログラムを教えてください
|
|
#include <stdio.h>
#define NMAX 1000
int x[NMAX];
int xp=0;
579ポイント を手に入れた。
|
|
|
|
|
Name: 扇風機 ..ぴよぴよ(115ポイント)
Date: 2008/08/31(日) 16:12
No:20743
|
|
Title: Re:プログラムを教えてください
|
|
平均値を求める際、総和を求めるときと
同じことをしているのはムダです。
せっかく総和を求めたのですから、その結果を使えばいいです。
それから、出力の桁位置がそろっていません。
最初に提示された出力例と見比べてください。
100ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni ..上級者(24,954ポイント)
Date: 2008/08/31(日) 16:22
No:20744
|
|
Title: Re:プログラムを教えてください
|
|
あとはquicksort内の変数kが使われていないことでしょうか^^;
2倍のポイントを手に入れた! 40ポイント を手に入れた。
|
|
|
|
|
Name: フリオ ..プログラマー(26,878ポイント)
Date: 2008/08/31(日) 18:12
No:20749
|
|
Title: Re:プログラムを教えてください
|
|
ソースは、見やすいように"pre"タグで字下げしてほしい。
>がプログラムです。もっと簡単にしたいです。
>何か方法はないですか?
まず、ソースの意味を理解することが必要です。
もうひとつの回答のほうがわかりやすいので、そちらを参考にしてはどうでしょうか?
// 行き先がなくなっているので、リンクは削除しました。
2倍のポイントを手に入れた! 260ポイント を手に入れた。
|
|
|
|
|
Name: 扇風機 ..ぴよぴよ(104ポイント)
Date: 2008/08/31(日) 18:32
No:20750
|
|
Title: Re:プログラムを教えてください
|
|
あれ?
あなたが「けっこう前に作った」と称しているプログラムは、どこにあるのですか?
11ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(704,073ポイント)
Date: 2008/08/31(日) 18:35
No:20751
|
|
Title: Re:プログラムを教えてください
|
|
グローバル変数とローカル変数で同じ名前を付けるのはよくないと思います。
このコードならグローバル変数は使わなくてもかけそうですね。
後、今クイックソートを使う理由はなさそうなので、
解り易い単純ソートなどを使った方が簡単に見えると思います。
もっと簡単にということで、単純ソートならスマートにかけば5行位でかけるかと。
元の投稿内容を拝見しましたが、字下げされていませんでした。
コードを書くときは字下げしたほうがいいですよ。
字下げしたコードをプレタグで囲んで投稿して下さい。
詳しくは規約をご覧下さい。
88ポイント を手に入れた。
|
|
|
|
|
Name: 扇風機 ..ぴよぴよ(164ポイント)
Date: 2008/08/31(日) 22:13
No:20760
|
|
Title: Re:プログラムを教えてください
|
|
あ〜、結局、人からもらったソースを提出しそうですね。
でもって、先生から内容の説明を求められて「アウト!」となるのでしょう。
60ポイント を手に入れた。
|
|
|
|
|
Name: kazu ..入門者(3,328ポイント)
Date: 2008/08/31(日) 22:30
No:20761
|
|
Title: Re:プログラムを教えてください
|
|
本当は友達にみせてもらいながら、やってので自分ではプログラムがわかりません。
なので、みなさんのプログラムを参考につくりたいです。
それを提出するつもりはありません。
提出期限は本当はすぎていたので
69ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(57,059ポイント)
Date: 2008/08/31(日) 23:19
No:20762
|
|
Title: Re:プログラムを教えてください
|
|
> 提出期限は本当はすぎていたので
結局、どこまでが本当のことで、どこからが嘘なのかさっぱり分かりませんね。
そういう場合は全部嘘だと思われても仕方ないことを、理解してください。
それから、規約はちゃんと読んでください。読んでも理解できない場合はその旨を書いてください。
81ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni ..プログラマー(25,193ポイント)
Date: 2008/09/01(月) 00:05
No:20765
|
|
Title: Re:プログラムを教えてください
|
|
うほっ。マルチしてたんですかっ^^;んん〜最後まで処理系明らかになりませんでしたね。。あとこのスレは過去ログに残るので、むやみにやたらに編集してしまうとこのスレの意味がなくなってしまいます。。実際コードすらなくなってますし。
次回質問する場合は、たかぎさんのおっしゃる通り、規約をしっかり読んでください。いつもは見てるだけなんですが、どうしても気になったので。。失礼しました。
174ポイント を手に入れた。
|
|
|
|
|
Name: ..ぴよぴよ(924ポイント)
Date: 2008/09/01(月) 01:08
No:20766
|
|
Title: Re:プログラムを教えてください
|
|
削除された提示されていたプログラムコードはこれです。
綺麗に字下げしておきました。
#include <stdio.h>
#define NMAX 1000
int x[NMAX];
int xp=0;
void quicksort(int a[], int left, int right) {
int i,j,k,x,tmp;
x=a[(left+right)/2];
i=left;
j=right;
while(1) {
while (a[i]>x)
i++;
while (x>a[j])
j--;
if (i>=j)
break;
tmp=a[i]; a[i]=a[j]; a[j]=tmp;
i++;
j--;
}
if (left<i-1)
quicksort(a, left, i-1);
if (j+1<right)
quicksort(a, j+1, right);
}
int sum(int a[], int n) {
int i, s=0;
for (i=0; i<n; i++)
s+=a[i];
return s;
}
double average(int a[], int n) {
double s=0.0;
int i;
if (n<=0)
return 0.0;
for (i=0; i<n; i++)
s+=a[i];
return s/n;
}
int main(void) {
int i;
while(1) {
printf("入力 X[%d] ? ",xp);
scanf("%d",&x[xp]);
if (x[xp]==0 || xp==NMAX-1)
break;
xp++;
}
quicksort(x,0,xp-1);
for (i=0; i<xp; i++)
printf("出力 X[%d] %d\n",i,x[i]);
printf("データ数 =%d\n",xp);
printf("総和 =%d\n",sum(x, xp));
printf("平均 =%.4f\n", average(x,xp));
return 0;
}
マルチポストを指摘された途端に消すとは悪質ですね。
ヤフーの方は見てませんが、そちらも消したんでしょうか?
せっかく回答してくれた人の気持ちとか考えた事あるんでしょうか。
聞く態度がなってないレベル以前の問題ですね。
やる気がなく、マナーも守れないんなら、誰にも聞く事無くさっさと単位落としましょう。
592ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(705,035ポイント)
Date: 2008/09/01(月) 01:33
No:20767
|
|
Title: Re:プログラムを教えてください
|
|
以前自分で課題を解いたといっていたのに、実は嘘で、
期限が9/2までだということだったのにそれも事実と異なり
問題を指摘されるとまるで証拠を隠蔽するような行動を取ったりしては
誰も手を貸してくれなくなります。
ここを拝見されている回答者の方々は皆良い人達ばかりです。
変に嘘など付かなくてもやる気を見せれば皆さん丁寧にアドバイスしてくれます。
正直に、やる気を持って取り組んでみて下さい。
まず規約に目を通し、規約に沿った投稿をして下さい。
まず何を投稿すればいいかは規約に書いてあります。
2倍のポイントを手に入れた! 498ポイント を手に入れた。
|
|
|
|
|
Name: kazu ..入門者(3,353ポイント)
Date: 2008/09/01(月) 13:25
No:20774
|
|
Title: Re:プログラムを教えてください
|
|
はい。わかりました。
また今度丁寧に聞くのでこのスレッドは削除してください。
25ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(705,404ポイント)
Date: 2008/09/01(月) 13:51
No:20775
|
|
Title: Re:プログラムを教えてください
|
|
スレッドごと消すと自分の投稿記事だけでなく、皆さんの投稿も全て消えてしまいますので
スレッドは消せない仕様になっています。
また、無闇に自分の記事を消す事も、規約でしないようお願いしています。
もしもこのスレッドが残る事で何か重大な問題が発生する場合は、その旨をご連絡下さい。
130ポイント を手に入れた。
|
|
|
|
|
Name: kazu ..入門者(3,354ポイント)
Date: 2008/09/01(月) 14:15
No:20777
|
|
Title: Re:プログラムを教えてください
|
|
はい。わかりました。
失礼な事を書いているかもしれないので、これ以上他のみなさんのいやな気持ちにさせたくないです
なので、スレッドを消していただきたいです
1ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(705,583ポイント)
Date: 2008/09/01(月) 14:49
No:20782
|
|
Title: Re:プログラムを教えてください
|
|
恐らく回答者の方々にとっては、書いた記事が全て消えてしまう方が残念だと思います。
ですので、そういう理由でしたら残させてください。
また、時間がある時にでも、トピの質問内容を戻して、課題に取り組んで解決してみて下さい。
後から同じような悩みを持つ閲覧者によい参考になるかもしれません。
2倍のポイントを手に入れた! 160ポイント を手に入れた。
|
|
|
|
|