C言語何でも質問掲示板


Total hit  今日  昨日  

必ずお読み下さい → 規約と注意事項  アンケートはこちら  エラーで投稿できない方はこちら  過去ログ検索はこちら

 
   3Dでの床の判定    
     ・[52657] Ma 
     ・[52714] KOZAN 
   DXライブラリで3D素材 ....   
     ・[52673] 紗々 
     ・[52682] Justy 
     ・[52710] 紗々 
     ・[52711] 紅葉 
   図形を→キーで動かし ....   
     ・[52686] ru 
     ・[52688] ハナブトオオトカゲ 
   友達のPCのCドライブ ....   
     ・[52506] Ma 
     ・[52514] デラ初心者 
     ・[52518] Ma 
     ・[52523] シエル 
     ・[52542] たかぎ 
     ・[52566] デラ初心者 
     ・[52567] たかぎ 
     ・[52569] Dixq (管理人) 
     ・[52570] たかぎ 
     ・[52571] dic 
     ・[52572] シエル 
     ・[52598] デラ初心者 
     ・[52599] softya 
     ・[52604] たかぎ 
     ・[52608] Ma 
     ・[52613] デラ初心者 
     ・[52615] Dixq (管理人) 
     ・[52620] Ma 
     ・[52622] デラ初心者 
     ・[52623] デラ初心者 
     ・[52624] Dixq (管理人) 
     ・[52627] たかぎ 
     ・[52634] デラ初心者 
     ・[52637] Ma 
     ・[52638] Ma 
     ・[52658] asd 
     ・[52660] たいちう 
     ・[52670] デラ初心者 
     ・[52675] asd 
   龍神録プログラミング ....   
     ・[52625] Dixq (管理人) 
     ・[52626] Dixq (管理人) 
     ・[52629] Dixq (管理人) 
     ・[52633] マクベ 
     ・[52635] Justy 
     ・[52636] Dixq (管理人) 
     ・[52639] Justy 
     ・[52643] Dixq (管理人) 
     ・[52644] Justy 
     ・[52647] Dixq (管理人) 
   こういうのって出来ま ....   
     ・[52616] Ma 
     ・[52617] Dixq (管理人) 
     ・[52618] Dixq (管理人) 
     ・[52621] Ma 
     ・[52645] 深黒 
   記憶クラス(メモリの ....   
     ・[52541] たかぎ 
     ・[52552] ムンバ 
     ・[52555] たかぎ 
     ・[52576] たかぎ 
     ・[52581] ムンバ 
     ・[52582] たかぎ 
     ・[52583] softya 
     ・[52586] たかぎ 
     ・[52642] ムンバ 
   コーテーションを含む ....   
     ・[52640] Ma 
   モンテカルロ法を用い ....   
     ・[52554] 子コッと 
     ・[52556] たかぎ 
     ・[52558] 子コッと 
     ・[52562] たいちう 
     ・[52631] 子コッと 
   構造体 ポインタ   
     ・[52601] box 
     ・[52607] asdf 
     ・[52609] box 
     ・[52610] Ma 
     ・[52612] box 
     ・[52630] asdf 
   キャラクターを動かし ....   
     ・[52606] たかぎ 
     ・[52611] Ma 
   Visual C++ 2008   
     ・[52527] ru 
     ・[52605] マクベ 
   初投稿です イベント ....   
     ・[52603] たかぎ 
   素朴な疑問   
     ・[52481] たかぎ 
     ・[52482] 三郎 
     ・[52495] softya 
     ・[52560] 三郎 
     ・[52574] dic 
     ・[52575] 三郎 
     ・[52577] Dixq (管理人) 
     ・[52579] たかぎ 
     ・[52580] softya 
     ・[52584] 三郎 
     ・[52585] softya 
     ・[52587] 三郎 
     ・[52588] softya 
     ・[52590] 三郎 
     ・[52593] バグ 
     ・[52596] softya 
     ・[52602] たかぎ 
   敵の消滅エフェクトの ....   
     ・[52530] ru 
     ・[52589] fank 
     ・[52595] ru 
   初心者です   
     ・[52568] ru 
     ・[52573] 深黒 
     ・[52578] Dixq (管理人) 
     ・[52591] 深黒 
     ・[52592] 深黒 
   Visual Studio 2010 e ....   
     ・[52499] ターボ 
     ・[52509] Ma 
     ・[52513] fatens 
     ・[52564] ターボ 
   逆行列を求めたいので ....   
     ・[52498] 組木紙織 
     ・[52501] Justy 
     ・[52563] 堀江伸一 
   whileループでノ問題   
     ・[52459] たかぎ 
     ・[52461] たいちう 
     ・[52462] たかぎ 
     ・[52463] lotus 
     ・[52464] 組木紙織 
     ・[52465] たかぎ 
     ・[52466] lotus 
     ・[52467] たかぎ 
     ・[52468] lotus 
     ・[52469] ムンバ 
     ・[52470] 組木紙織 
     ・[52471] たかぎ 
     ・[52472] ムンバ 
     ・[52473] ムンバ 
     ・[52474] sizuma 
     ・[52475] たかぎ 
     ・[52476] たかぎ 
     ・[52477] sizuma 
     ・[52479] ムンバ 
     ・[52533] lotus 
     ・[52534] たかぎ 
     ・[52535] lotus 
     ・[52536] ムンバ 
     ・[52537] lotus 
     ・[52538] ムンバ 
     ・[52539] lotus 
     ・[52540] たかぎ 
     ・[52544] lotus 
     ・[52545] ムンバ 
     ・[52546] たかぎ 
     ・[52547] lotus 
     ・[52548] たかぎ 
     ・[52549] lotus 
     ・[52550] lotus 
     ・[52553] たかぎ 
     ・[52557] lotus 
     ・[52559] lotus 
     ・[52561] 組木紙織 
   無題   
     ・[52543] たかぎ 
   C言語:メモリの確保   
     ・[52492] box 
     ・[52496] やっくん 
     ・[52508] box 
     ・[52516] やっくん 
     ・[52519] たかぎ 
     ・[52528] やっくん 
     ・[52529] たかぎ 
     ・[52531] やっくん 
   無題   
     ・[52520] たかぎ 
     ・[52521] Ma 
     ・[52524] M 
   BOX2Dのスケール変換   
     ・[52515] 組木紙織 
     ・[524871274841918] NJ 
   DXライブラリのDrawBo ....   
     ・[52503] Justy 
     ・[52507] Ma 
     ・[52512] Rom 
   始めたばかりで・・・   
     ・[52486] たいちう 
     ・[52488] 深黒 
     ・[52489] ru 
     ・[52491] やっくん 
     ・[52502] 深黒 
     ・[52505] ru 
     ・[52510] やっくん 
     ・[52511] 深黒 
   無題   
     ・[52440] 胡椒 
     ・[52441] Dixq (管理人) 
     ・[52442] toyo 
     ・[52444] 胡椒 
     ・[52453] ookami 
     ・[52454] Dixq (管理人) 
     ・[52456] 胡椒 
     ・[52483] やっくん 
   これからの学習の指針 ....   
     ・[52401] シエル 
     ・[52403] MNS 
     ・[52404] やっくん 
     ・[52406] たかぎ 
     ・[52414] しろ 
     ・[52416] Ma 
     ・[52455] しろ 
     ・[52458] 組木紙織 
     ・[52460] たかぎ 
     ・[52478] Ma 
   無題   
     ・[52447] Dixq (管理人) 
     ・[52448] マクベ 
     ・[52450] マクベ 
     ・[52451] Dixq (管理人) 
     ・[52452] ookami 
   FPSのようなカメラ移動 ....   
     ・[52262] Justy 
     ・[52289] ヒーはん 
     ・[52290] 通りすがり 
     ・[52299] ヒーはん 
     ・[52328] Justy 
     ・[52449] ヒーはん 
   CUIゲームでの画面クリ ....   
     ・[52394] バグ 
     ・[52395] たいちう 
     ・[52420] 山崎 
     ・[52423] バグ 
     ・[52426] たいちう 
     ・[52429] 山崎 
     ・[52445] バグ 
   STGの敵のスクリプトコ ....   
     ・[52435] ookami 
     ・[52436] TKOZ 
     ・[52437] たいちう 
     ・[52438] たいちう 
     ・[52443] TKOZ 
   無題   
     ・[52434] ookami 
   超初心者です。   
     ・[52431] たいちう 
     ・[52432] Dixq (管理人) 
     ・[52433] 春すぎて 
   C#メッセージボックス   
     ・[52424] バグ 
     ・[52425] lion 
     ・[52427] lion 
     ・[52428] バグ 
   メタセコ 選択できな ....   
     ・[52370] ムンバ 
     ・[52376] ムンバ 
     ・[52383] Ma 
     ・[52393] Ma 
     ・[52409] ムンバ 
     ・[52415] Ma 
     ・[52422] ムンバ 
   3章でつまづきました ....   
     ・[52418] やっくん 
     ・[52419] 灯雷 
   2Dエフェクトエディタ ....   
     ・[51961] Justy 
     ・[51964] やっくん 
     ・[51980] やっくん 
     ・[51981] softya 
     ・[51983] やっくん 
     ・[51984] softya 
     ・[51985] やっくん 
     ・[51986] softya 
     ・[51987] やっくん 
     ・[51988] たいちう 
     ・[51989] softya 
     ・[51990] やっくん 
     ・[51991] softya 
     ・[51998] やっくん 
     ・[51999] Justy 
     ・[52000] やっくん 
     ・[52001] softya 
     ・[52005] Justy 
     ・[52007] やっくん 
     ・[52008] やっくん 
     ・[52009] softya 
     ・[52011] Justy 
     ・[52015] やっくん 
     ・[52019] Justy 
     ・[52048] やっくん 
     ・[52200] やっくん 
     ・[52206] Justy 
     ・[52208] やっくん 
     ・[52255] やっくん 
     ・[52263] Justy 
     ・[52267] やっくん 
     ・[52327] Justy 
     ・[52331] やっくん 
     ・[52375] やっくん 
     ・[52382] Justy 
     ・[52408] やっくん 
     ・[52411] Justy 
     ・[52417] やっくん 
     ・[519601274823274] やっくん 
   フロイドのアルゴリズ ....   
     ・[52407] たいちう 
   ファイルサイズ0のフ ....   
     ・[52387] たいちう 
     ・[52388] ookami 
     ・[52390] dic 
     ・[52402] ぽこ 
   [雑談]Cの効率の良い覚 ....   
     ・[52300] softya 
     ・[52303] たかぎ 
     ・[52312] Dixq (管理人) 
     ・[52329] ムンバ 
     ・[52352] デラ初心者 
     ・[52353] たかぎ 
     ・[52354] softya 
     ・[52397] デラ初心者 

Name: KOZAN  ..ぴよぴよ(566ポイント)   Date: 2010/05/24(月) 05:16   No:52648       
Title: 3Dでの床の判定    
連絡が遅くなってしまい申し訳御座いません。 
別スレにて質問させて頂いたKOZANです。
http://www.play21.jp/board/formz.cgi?action=res&resno=52351&page=&lognum=160&id=dixq&rln=523511274645701

過去ログに入ってしまった為新たに質問させて頂きます。

なんとかそれっぽい動作にすることが出来ました。 
但し問題が発生してしまっております。 
ゆるい斜面では座標を戻してくれるのですが急斜面(直角ではない)では 
反応してくれません。 
ソースコードの判定が甘いのかと思うのですが 
どこら辺が駄目なのかをご指摘頂けないでしょうか? 

又、X-FILEを使っております。 
自分で作れる環境はあるのですが 
あまり高度の物が作れません。 
テスト環境で使えるようなサンプルファイルやキャラクターが 
置いてありそうな場所はないでしょうか? 

    // マップとの当たり判定    
    MV1SetupCollInfo( MapModelH, 0, 8, 8, 8 ) ;
    Player.HitPoly = MV1CollCheck_Line( MapModelH, 0, VGet(Player.Pos.x,Player.Pos.y+2.5f,Player.Pos.z), VGet(Player.Pos.x,Player.Pos.y-2.5f,Player.Pos.z)) ;
    
    if( Player.HitPoly.HitFlag == 1 ){
        Player.Pos.y = Player.HitPoly.HitPosition.y + 2.0f;
        Player.Move.y = 0;
    }else{
        Player.Pos.y -= 0.2f;
    }
    
    // 移動量の初期化
    Player.Move.x = 0;
    //Player.Move.y = 0;
    Player.Move.z = 0;
    
    float rot = float(Player.rot/180*M_PI);

    // 移動処理
    if( Key[KEY_INPUT_UP].Flg == 1 ){
        Player.Move.x += sin(rot) * Player.MoveSpeed * -1;
        Player.Move.z += cos(rot) * Player.MoveSpeed * -1;    
    }
    if( Key[KEY_INPUT_DOWN].Flg == 1 ){
        Player.Move.x += sin(rot) * Player.MoveSpeed;
        Player.Move.z += cos(rot) * Player.MoveSpeed;
    }
    //  ジャンプ処理
    if( Key[KEY_INPUT_SPACE].trgKey == 1 ){
        if(Player.Move.y == 0)    Player.Move.y = 4;
    }

    if(Player.Move.y != 0){
        Player.Move.y -= 0.2f;
    }

    // 移動値加算
    Player.Pos.x += Player.Move.x;
    Player.Pos.y += Player.Move.y;
    Player.Pos.z += Player.Move.z;

    // Yは0より下がらない
    /*
    if(Player.Pos.y <= 0){
        Player.Pos.y = 0;
        Player.Move.y = 0;
    }
    */

    MV1SetPosition( Player.ModelH, Player.Pos ) ;

 


2倍のポイントを手に入れた! 218ポイント を手に入れた。


Name: Ma  ..ハッカー(101,075ポイント)   Date: 2010/05/24(月) 12:00   No:52657     
Title: Re:3Dでの床の判定    
2.5f をもっと長くしたら直るってことはないですか?


23ポイント を手に入れた。

Name: KOZAN  ..ぴよぴよ(585ポイント)   Date: 2010/05/25(火) 01:43   No:52714     
Title: Re:3Dでの床の判定    
出来ました〜原因はモデルにあったみたいです。
本当に助かりました。


19ポイント を手に入れた。



Name: 紗々  ..ぴよぴよ(79ポイント)   Date: 2010/05/24(月) 09:17   No:52652       
Title: DXライブラリで3D素材を読み込む    
DXライブラリで3D素材を読み込んで表示するとテクスチャがなくなってしまいます。
※モデルが全て白くなってしまう

MV1LoadModelで読み込んで表示する以外にいないといけないことはあるのでしょうか?
モデルと同じフォルダにテクスチャは入っております。
DirectX Viewerでも正しく表示されております。
形式はX-Fileです。


79ポイント を手に入れた。


Name: 紗々  ..ぴよぴよ(127ポイント)   Date: 2010/05/24(月) 19:01   No:52673     
Title: Re:DXライブラリで3D素材を読み込む    
テストで使用している素材をはらせて頂きます。


2倍のポイントを手に入れた! 48ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(536,799ポイント)   Date: 2010/05/24(月) 20:50   No:52682     
Title: Re:DXライブラリで3D素材を読み込む    
 スペキュラが強すぎて、色が飛んでいるのでしょう。
 添付は手動で修正したものです。

 モデリングツールでマテリアル周りを調整してみてください。


51ポイント を落としてしまった。

Name: 紗々  ..ぴよぴよ(245ポイント)   Date: 2010/05/25(火) 01:37   No:52710     
Title: Re:DXライブラリで3D素材を読み込む    
回答ありがとうございます。
正常に表示できました。

これからも別のモデルを使うので自分で直せるようにしたいのですが
スペキュラはどこで弄るのでしょうか?
マテリアル関連で探してみたのですが見つかりません。
max?みたいな名前のツールを使っております。※違ったらすみません。


118ポイント を手に入れた。

Name: 紅葉  ..上級者(15,424ポイント)   Date: 2010/05/25(火) 01:38   No:52711     
Title: Re:DXライブラリで3D素材を読み込む    
質問に対してはわかりませんが
ツール名は3dsMaxではないでしょうか?
私もそのツールに困らされているのでww


50ポイント を手に入れた。



Name: ハナブトオオトカゲ [URL]  ..ぴよぴよ(637ポイント)   Date: 2010/05/24(月) 21:26   No:52684       
Title: 図形を→キーで動かしたいです。    
DXライブラリを昨日始めた中学2年です。

13. 裏画面処理をして画像を動かす。

までやってみて、それまでのやり方などを使って、円を右矢印と左矢印のキーを押したら左右に動くようなものを作ってみたいのですが、うまくいきません。(イメージとしてはウィンベーダーゲーム)

うまくいかないというのを具体的に書くと、左キーがうまく動作しません。

なぜか教えてください。

#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
        if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 
 
        SetDrawScreen(DX_SCREEN_BACK);
    int i=100,j=100;
    int mugen;
    int White,x;
        White=GetColor(255,255,255);
    while(CheckHitKey(KEY_INPUT_RIGHT)==0&&CheckHitKey(KEY_INPUT_LEFT)==0){
        if( ProcessMessage() == -1 )
                         break ;        // エラーが発生したらループを抜ける
        }
    while(CheckHitKey(KEY_INPUT_RIGHT)==1){
        ClearDrawScreen();
        if( ProcessMessage() == -1 )
                         break ;        // エラーが発生したらループを抜ける
            
        for(x=0;x<640;x+=20){
        ClearDrawScreen();
        DrawCircle(x,100,50,White,TRUE);
        ScreenFlip();
        if( ProcessMessage() == -1 )
                         break ;
             }
        }
    while(CheckHitKey(KEY_INPUT_LEFT)==1){
        ClearDrawScreen();
        if( ProcessMessage() == -1 )
                         break ;        // エラーが発生したらループを抜ける
            int y;
        for(y=0;y>0||y<640;y-=20){
        ClearDrawScreen();
        DrawCircle(y,100,50,White,TRUE);
        ScreenFlip();
        if( ProcessMessage() == -1 )
                         break ;
             }
        }
        

 
        WaitKey() ;             // キーの入力待ち(『WaitKey』を使用) 
        DxLib_End() ;           // DXライブラリ使用の終了処理
        return 0 ;              // ソフトの終了
}



637ポイント を手に入れた。


Name: ru  ..かけだし(1,782ポイント)   Date: 2010/05/24(月) 21:59   No:52686     
Title: Re:図形を→キーで動かしたいです。    
イメージ
#include "DxLib.h" 
  
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{ 
        ChangeWindowMode( TRUE ) ; // ウインドウモードに変更 
        if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了  
  
        SetDrawScreen(DX_SCREEN_BACK);

        int x = 320;
        int White = GetColor(255, 255, 255);

        while(ProcessMessage() != -1 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
        {
            ClearDrawScreen();

            if(CheckHitKey(KEY_INPUT_RIGHT))    x += 20;
            if(CheckHitKey(KEY_INPUT_LEFT))        x -= 20;
            if(x < 0)    x = 0;
            if(x > 640) x = 640;

            DrawCircle(x, 100, 50, White, TRUE);

            ScreenFlip();
        }

        DxLib_End(); // DXライブラリ使用の終了処理 
        return 0;  // ソフトの終了 
}



394ポイント を手に入れた。

Name: ハナブトオオトカゲ [URL]  ..ぴよぴよ(811ポイント)   Date: 2010/05/24(月) 22:16   No:52688 解決!     
Title: Re:図形を→キーで動かしたいです。    
迅速な回答ありがとうございました。
 while(ProcessMessage() != -1 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
は次の章を読んでよくわかりました。
勉強の息抜きとしてやっています。
これからもよろしくお願いします。


2倍のポイントを手に入れた! 174ポイント を手に入れた。



Name: デラ初心者  ..初心者(5,817ポイント)   Date: 2010/05/22(土) 19:03   No:52494       
Title: 友達のPCのCドライブとDドライブが開かない    
お世話になっております。 デラ初心者です。
今回はプログラムに関係ありません。

友達のPCのCドライブとDドライブが開かないです。

前までは、Dドライブが開かなかったのですが、悪化してCドライブまで
開かなくなりました。

一応エラーチェックはしました。
あと、右クリックの開くが文字化けしています。

PCのスペックですが
sony vaio 8年前の物です。
os windows xp sp2
他、不明です。



122ポイント を手に入れた。


Name: Ma  ..比類無きプログラマー(99,620ポイント)   Date: 2010/05/22(土) 20:20   No:52506     
Title: Re:友達のPCのCドライブとDドライブが開かない    
*注意:全然詳しくない人からの助言です。

まず、C,D,はドライブ名を変えたものではないですよね?
最初のドライブ名でのC,Dが開かないと解釈します。
OSが起動したのなら、アクセスできないなんてことないと思うんですけどね・・・。

「指定して起動」だったかな?あれは試しましたか?
コマンドプロンプトでもアクセスできませんか?
検索機能とかも死んでいますか?
ウィルスなどの可能性はありますか?あるなら対策ソフトは試しましたか?
再セットアップも検討してみては?(ハードの問題かもしれないけど・・・)


200ポイント を手に入れた。

Name: デラ初心者  ..初心者(5,930ポイント)   Date: 2010/05/22(土) 21:16   No:52514     
Title: Re:友達のPCのCドライブとDドライブが開かない    
名前は変えていません。

指定して起動はやり方が分かりません。
教えて下さい。

検索機能が死んでるかどうかは分かりません。
多分生きています。

ウイルスソフトは入っていません。(多分ですが)
OSがないと言われたので出来ませんorz


113ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(99,858ポイント)   Date: 2010/05/22(土) 22:16   No:52518     
Title: Re:友達のPCのCドライブとDドライブが開かない    
OS 入っていないんじゃ、私はまったく手助けできませんね・・・。
マシンを自作した経験すらないので、すいません(汗

ココはもっと上級者の方に頼るか(コメントを待つか)、身近にPCをパーツから自作できる経験が豊富な人とかを探すとか。
というか、自作するぐらいのモチベーションがあるなら、その友人本人が行動した方がいいと思いますよ。
その方が質問も具体的になると思うので。


134ポイント を手に入れた。

Name: シエル  ..ぴよぴよ(813ポイント)   Date: 2010/05/22(土) 22:35   No:52523     
Title: Re:友達のPCのCドライブとDドライブが開かない    
情報が少なすぎます。

ドライブが開かない以外にほかに何か出来なくなったこととか、開かなくなったときに何かエラー(ブルースクリーン)とか出なかったか等、もっと情報をくれないと答えようがありません。


91ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,795ポイント)   Date: 2010/05/23(日) 04:15   No:52542     
Title: Re:友達のPCのCドライブとDドライブが開かない    
> OSがないと言われたので

起動もできないということでしょうか?


15ポイント を手に入れた。

Name: デラ初心者  ..初心者(6,010ポイント)   Date: 2010/05/23(日) 11:09   No:52566     
Title: Re:友達のPCのCドライブとDドライブが開かない    
OSは起動できます。

情報が少なくてすいません。
開かなくなった時にエラーとかは、出てないようです。

関係あるか分かりませんが、起動時にF1を押さないと起動出来ない
変わったPCでした。


80ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,972ポイント)   Date: 2010/05/23(日) 11:18   No:52567     
Title: Re:友達のPCのCドライブとDドライブが開かない    
> OSは起動できます。

"ない"ものがどうして起動できるのでしょうか?
さっぱり意味がわかりません。


11ポイント を手に入れた。

Name: Dixq (管理人)  ..ウィザード(1,192,004ポイント)   Date: 2010/05/23(日) 12:00   No:52569     
Title: Re:友達のPCのCドライブとDドライブが開かない    
無いというのは、インストールディスクが無いので再インストールや修復が出来ないという意味ではないでしょうか?

開かないというのはマイコンピュータでダブルクリックなどをしても中身を見る事が出来ないということですか?

もう少し色んな情報が得られないとよくわからないんじゃないかと思います


89ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(191,004ポイント)   Date: 2010/05/23(日) 12:03   No:52570     
Title: Re:友達のPCのCドライブとDドライブが開かない    
> OSがないと言われたので 

誰にどのようにいわれたのかがわからないので、どうしようもないですね。


32ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(67,595ポイント)   Date: 2010/05/23(日) 12:14   No:52571     
Title: Re:友達のPCのCドライブとDドライブが開かない    
OSは自動で読み込むから起動できるが
エクスプローラー(でしたっけ?)からはCドライブにアクセスできない(操作できない)
ってことでしょうか?

スタート → 名前を指定して実行 → cmd.exe リターンキー

はできますかね?


98ポイント を落としてしまった。

Name: シエル  ..ぴよぴよ(869ポイント)   Date: 2010/05/23(日) 12:17   No:52572     
Title: Re:友達のPCのCドライブとDドライブが開かない    
もう一度状況を整理して、皆に分かりやすく具体的に説明して頂かないと
回答する側も困って、苛立たせるだけですよ。


56ポイント を手に入れた。

Name: デラ初心者  ..初心者(6,203ポイント)   Date: 2010/05/23(日) 18:33   No:52598     
Title: Re:友達のPCのCドライブとDドライブが開かない    
分かりました。 
一旦整理します。

管理人さんがおっしゃる通り再インストールCDが無くしたので、再インストールは出来ません。
他に再インストールの方法があれば教えて下さい。

開かないとゆうのは、ダブルクリックなどをしても中身が見れないとゆうことです。
デスクトップにあるショートカットしてあるプログラムは開きます。
すべてのプログラムからもプログラムは開きます。

cmdは多分出来ます。

曖昧で申し訳ありません


193ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(166,486ポイント)   Date: 2010/05/23(日) 18:35   No:52599     
Title: Re:友達のPCのCドライブとDドライブが開かない    
つまりエクスプローラが開かないって事でしょうか?


23ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(192,101ポイント)   Date: 2010/05/23(日) 19:10   No:52604     
Title: Re:友達のPCのCドライブとDドライブが開かない    
> 他に再インストールの方法があれば教えて下さい。 

新たに購入してください。

> 開かないとゆうのは、ダブルクリックなどをしても中身が見れないとゆうことです。 

"何を"ダブルクリックしたのでしょうか?
"など"には何が含まれますか?

> デスクトップにあるショートカットしてあるプログラムは開きます。 

フォルダではなくプログラムをショートカットしたのですか?
だとしたら、そのプログラムとは?

> すべてのプログラムからもプログラムは開きます。 

これも同様です。

> cmdは多分出来ます。 

多分ではなく試してください。

いずれにせよ、もう少し国語をしっかり身に付けてください。
表現だけでなく、文法もかなづかいもボロボロです。


131ポイント を手に入れた。

Name: Ma  ..ハッカー(100,223ポイント)   Date: 2010/05/23(日) 19:46   No:52608     
Title: Re:友達のPCのCドライブとDドライブが開かない    
現状の説明じゃ正直よくわからないです、笑っちゃうぐらい言葉が足りません。
というか、友達にもっと詳しく書かせるべきです。


ところで、私のPCは警告はるもののディスクなしでも再セットアップできました。(昔のXPですが。)
4回ぐらい再セットアップしましたが、全部問題なく成功しました。

CDとかPC購入時についてなくて、どうしろと?って思っていたのですが、
半分自暴自棄になってやってみたら、上手くいったんですよね(笑
(プリインストールのPC買うと普通ついてくるものなの?)

PCのマニュアルに再セットアップの仕方のところの手順にしたがってみてはいかが?
(失敗しても責任は負えません。) 編集済み


243ポイント を手に入れた。

Name: デラ初心者  ..初心者(6,373ポイント)   Date: 2010/05/23(日) 20:29   No:52613     
Title: Re:友達のPCのCドライブとDドライブが開かない    
>"何を"ダブルクリックしたのでしょうか? 
ダブルクリックして開かないのはマイコンピューターのCドライブとDドライブです。

>"など"には何が含まれますか?
右クリックの開くでも開けませんでした。

>だとしたら、そのプログラムとは?
エクセルやインターネットエクスプローラーです。

>これも同様です

すべてのプログラムに入ってるのは全て開けました。

マニュアル見てみます。

国語力がなくてごめんなさい。

友達に詳しく書かせたいのですが、パソコンはド素人で
OSやCPUやHDDすら知らないです。





170ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,193,180ポイント)   Date: 2010/05/23(日) 20:41   No:52615     
Title: Re:友達のPCのCドライブとDドライブが開かない    
再インストールディスクは無いと出来ません(修正追記:メーカーPCは出来る物があるようです)。
とは言えまた購入するとお金がかかって馬鹿らしいと思います。
そんな時はヤフオクで買うといいですよ。
同じ機種のvaioのリカバリディスクがあれば
http://search3.auctions.yahoo.co.jp/jp/search/auc?p=vaio&auccat=2084047151
購入して下さい。大した金額ではありません。

無いようなら新しいOSを買いましょう。
Homeなら1万円ちょいで買えると思います。
http://www.coneco.net/PriceList/1090925604/order/MONEY/

後コマンドプロンプトを開いて、dirコマンドで一覧を表示させたり出来ますか?
また、出来るのならcdコマンドでディレクトリに移動したりできますか?

それから、何かの間違いでダブルクリックの設定が変わってるとかでダブルクリック出来ていないという事などはありませんか?
「右クリック」>「開く」でも開けませんか?


262ポイント を手に入れた。

Name: Ma  ..ハッカー(100,516ポイント)   Date: 2010/05/23(日) 20:56   No:52620     
Title: Re:友達のPCのCドライブとDドライブが開かない    
ちょっと調べてみたんですが、必ずしも再セットアップ == 再インストールというわけではないようです。

一部のPCにおいては、再セットアップはディスクなしでも可能なようで(リカバリー領域がHDDにある。)、たとえばNECの一部(?)のPCはディスクなしで再セットアップできるようです。

一概にすべてのPCにあるわけではないようです。


115ポイント を手に入れた。

Name: デラ初心者  ..初心者(6,483ポイント)   Date: 2010/05/23(日) 21:02   No:52622     
Title: Re:友達のPCのCドライブとDドライブが開かない    
安いですね。

windows7をインストールしても重くて動かなくなりそうです。
XPがあれば探してみます。

dirコマンドを試してみます。
cdコマンドとはどの様に使えばいいのでしょうか?
dir cdの様に打てばいいですか?

右クリックでも開けません。


110ポイント を手に入れた。

Name: デラ初心者  ..初心者(6,501ポイント)   Date: 2010/05/23(日) 21:04   No:52623     
Title: Re:友達のPCのCドライブとDドライブが開かない    
そうですか!!

でも8年前のPCにそのような機能はありますかね?

マニュアルを見てみます。


18ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,193,606ポイント)   Date: 2010/05/23(日) 21:05   No:52624     
Title: Re:友達のPCのCドライブとDドライブが開かない    
Maさん、あぁなるほど・・。メーカーPCだと出来るのですね。訂正ありがとうございます。

しかし右クリック>開くが出来ないとは妙ですね・・。

システムの復元などは試されましたか?

あと、cdは現在いる位置を変更するコマンドです。
linuxやwindowsなど共通して使えるコマンドです。

ざっとでいいので読んでみて下さい。
http://www.google.co.jp/search?hl=ja&q=%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88&lr=lang_ja


162ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(192,211ポイント)   Date: 2010/05/23(日) 21:18   No:52627     
Title: Re:友達のPCのCドライブとDドライブが開かない    
> でも8年前のPCにそのような機能はありますかね? 

あります。
ハードディスクにリカバリデータが入っているのは割とふつうのことです。


2倍のポイントを手に入れた! 60ポイント を手に入れた。

Name: デラ初心者  ..初心者(6,560ポイント)   Date: 2010/05/23(日) 22:23   No:52634     
Title: Re:友達のPCのCドライブとDドライブが開かない    
>システムの復元などは試されましたか?
復元とは
マイコンピューター>ローカルディスクC>右クリック>ツール>エラーチェックのことでしょうか?



59ポイント を手に入れた。

Name: Ma  ..ハッカー(100,661ポイント)   Date: 2010/05/23(日) 23:08   No:52637     
Title: Re:友達のPCのCドライブとDドライブが開かない    
>dirコマンドを試してみます。 
>cdコマンドとはどの様に使えばいいのでしょうか? 
>dir cdの様に打てばいいですか? 

調べればでてきます。
コマンドプロンプト cd で検索するだけでも。

他力本願になりすぎてませんか?
ばんばん質問するより、少し調べてみてください。


140ポイント を手に入れた。

Name: Ma  ..ハッカー(100,762ポイント)   Date: 2010/05/23(日) 23:10   No:52638     
Title: Re:友達のPCのCドライブとDドライブが開かない    
システムの復元についても同様です。
XP システムの復元 で検索するだけでいろいろでてきます。

そのうちのいくつかがこちら
http://support.microsoft.com/kb/306084/ja
http://support.microsoft.com/kb/882796/ja


*追記

あ、中身は中級者なのにハッカーになってしまった。。。 編集済み


101ポイント を手に入れた。

Name: asd  ..上級者(20,288ポイント)   Date: 2010/05/24(月) 13:25   No:52658     
Title: Re:友達のPCのCドライブとDドライブが開かない    
個人的な意見ですが、現象が発生する前に何かソフトをインストールしたり設定変更をしたりなど、
原因推量をある程度してからでないとシステムの復元は危ないと思います。
(データ不整合が発生する可能性がある)

またsonyのPCだけではなく型番等も補足するなど、使用者本人に聞かなくては問題の解決を先送りにするだけです。

---
管理人様
リカバリCDの購入方法として公式サイトではなくヤフオクを薦めておられますが、
通常メーカープリインストールマシンのリカバリディスクのみを譲渡することは
ソフトウェア利用許諾違反になり、利用権のないOSをつかませるようなものです。
(OME版についてはプリインストールマシンと一緒に譲渡する必要がありますので)

リカバリCDは以下から公式サイトで購入することが可能なようです。
http://vcl.vaio.sony.co.jp/service/recoverydisc/index.html


268ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(84,138ポイント)   Date: 2010/05/24(月) 14:07   No:52660     
Title: Re:友達のPCのCドライブとDドライブが開かない    
困っている人:PC初心者
  自発的に必要な情報を発信することはできない。
  有効な情報を得るためには、随時「適切な」質問をする必要がある。

↑電話でのやり取り?


質問者:PC初心者?(中級者?)
  問題解決のために何が必要かは判らない。
  状況を正確に第三者に伝える能力に欠けている。

↑掲示板でのやり取り


回答者:PC初心者〜PC上級者まで様々
  回答までタイムラグあり。
  回答者によって違うアドバイスが書かれた場合、質問者には取捨選択が必要。


このような構図ですよね?
どこか改善しないと解決は遠いと思います。
全員にストレスがかかるだけではありませんか?

提案1 サポートセンターの利用
提案2 持込の相談を受け付けている販売店に持っていく

一般的なPCの使用に関連する質問なので、解決は難しくないでしょう。
(金銭的・時間的に簡単と言っている訳ではありません)


2倍のポイントを手に入れた! 736ポイント を手に入れた。

Name: デラ初心者  ..初心者(6,687ポイント)   Date: 2010/05/24(月) 16:58   No:52670 解決!     
Title: Re:友達のPCのCドライブとDドライブが開かない    
マイコンピューターのフォルダでツリーにしてそこから
ローカルディスクCをダブルクリックしたら開けました。

友達は開けるからこれでいいらしいです。

大変ご迷惑をお掛けしました。
原因は分かりませんが開けましたので
解決とさせていただきます。

本当にありがとうございました。


127ポイント を手に入れた。

Name: asd  ..上級者(20,371ポイント)   Date: 2010/05/24(月) 19:09   No:52675     
Title: Re:友達のPCのCドライブとDドライブが開かない    
解決とされているのと当人が出てきていないので言っても意味がないかもしれませんが、

>原因は分かりませんが開けましたので

で、その方法でも開けなくなったらまた質問されるんですか?
開けるうちにバックアップを取っておく事をお勧めします。


83ポイント を手に入れた。



Name: マクベ  ..ぴよぴよ(649ポイント)   Date: 2010/05/23(日) 20:53   No:52619       
Title: 龍神録プログラミングの館    
こんばんは。
龍神録プログラミングの館の2章、「まずは実行させてみよう」で実行してみたのですが
LINK : fatal error LNK1104: ファイル 'libtheora_static_d.lib' を開くことができません。
というエラーが出てしまいます。
過去ログに同じような質問があったので参考にしてみたのですが解決しませんでした。
どうすれば実行できるようになりますか?よろしくお願いします。


12ポイント を手に入れた。


Name: Dixq (管理人) [URL]  ..ウィザード(1,193,662ポイント)   Date: 2010/05/23(日) 21:06   No:52625     
Title: Re:龍神録プログラミングの館    
最近この質問が多いですね・・。
プロジェクトファイルを2010で作り直してアップロードしなおすので少々お待ち下さい。


56ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,193,746ポイント)   Date: 2010/05/23(日) 21:12   No:52626     
Title: Re:龍神録プログラミングの館    
なるほど、VC++のバージョンの違いじゃなく、DXライブラリのバージョンだけ新しくしたから起きた問題のようですね・・。

ぐ・・60章全部やり直すのか・・。
1時間後位にアップしますね。


84ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,193,714ポイント)   Date: 2010/05/23(日) 21:51   No:52629     
Title: Re:龍神録プログラミングの館    
龍神録プログラミングの館のプロジェクトファイル一式更新しました。
再度ダウンロードして、試していただけないでしょうか?


32ポイント を落としてしまった。

Name: マクベ  ..ぴよぴよ(670ポイント)   Date: 2010/05/23(日) 22:02   No:52633 解決!     
Title: Re:龍神録プログラミングの館    

再DLすると無事、実行させることができました。
本当にありがとうございます!


21ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(536,550ポイント)   Date: 2010/05/23(日) 22:48   No:52635     
Title: Re:龍神録プログラミングの館    
 気のせいでしょうか。
 多分前の時からだとは思いますが、Debugでビルドした時  DxLib_dをリンクしないで、
DxLib.libをリンクしているように見えます。

 例えば VisualStudio 2008 SP1で11章をビルドすると、出来上がった実行ファイルは DxLib_d.libを含まずに
 DxLib.libを含んでいるようです。


 以下はリンカに /VERBOSEオプションをつけて Debugでビルドした時のログの一部です。

1>      "int __cdecl DxLib::GetHitKeyStateAll(char *)" (?GetHitKeyStateAll@DxLib@@YAHPAD@Z) が見つかりました。
1>        key.obj で参照されています。
1>        DxLib.lib(DxInput.obj) を読み込みました。
1>      "int __cdecl DxLib::printfDx(char const *,...)" (?printfDx@DxLib@@YAHPBDZZ) が見つかりました。
1>        key.obj で参照されています。
1>        load.obj で参照されています。
1>        main.obj で参照されています。
1>        DxLib.lib(DxWin.obj) を読み込みました。


 以下はリンカに /MAPオプションをつけて Debugでビルドしたときに生成された mapファイルの一部です。

0002:0000fbf0       ?GetHitKeyStateAll@DxLib@@YAHPAD@Z 00577bf0 f   DxLib:DxInput.obj
0002:00018000       ?printfDx@DxLib@@YAHPBDZZ  00580000 f   DxLib:DxWin.obj



 本来は以下のような出力になるはずです。

1>      "int __cdecl DxLib::GetHitKeyStateAll(char *)" (?GetHitKeyStateAll@DxLib@@YAHPAD@Z) が見つかりました。
1>        key.obj で参照されています。
1>        DxLib_d.lib(DxInput.obj) を読み込みました。
1>      "int __cdecl DxLib::printfDx(char const *,...)" (?printfDx@DxLib@@YAHPBDZZ) が見つかりました。
1>        key.obj で参照されています。
1>        load.obj で参照されています。
1>        main.obj で参照されています。
1>        DxLib_d.lib(DxWin.obj) を読み込みました。


0002:0000fbf0       ?GetHitKeyStateAll@DxLib@@YAHPAD@Z 00578bf0 f   DxLib_d:DxInput.obj
0002:00018000       ?printfDx@DxLib@@YAHPBDZZ  00581000 f   DxLib_d:DxWin.obj


 まぁこれで実害があるか、というとそんなにないような気はしますが、一応ご報告まで。


1,153ポイント を落としてしまった。

Name: Dixq (管理人) [URL]  ..ウィザード(1,193,787ポイント)   Date: 2010/05/23(日) 23:00   No:52636     
Title: Re:龍神録プログラミングの館    
なるほど、そんな事が・・。
ソリューションエクスプローラーに入れこんでしまっているのが原因なのでしょうか。
本家でプロジェクトの作り方ページにそのような事は書いていないですね;
どうプロジェクトを作るのが正解なのでしょう・・。


73ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(536,699ポイント)   Date: 2010/05/23(日) 23:11   No:52639     
Title: Re:龍神録プログラミングの館    
>ソリューションエクスプローラーに入れこんでしまっているのが原因なのでしょうか。
 多分そうでしょうね。


>どうプロジェクトを作るのが正解なのでしょう・
 DXライブラリはヘッダにリンクするライブラリが指定されていますので、
ソリューションエクスプローラから libファイルを削除して、
リンカに "../include"のパスを通しておけばいいかと。


149ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,193,817ポイント)   Date: 2010/05/23(日) 23:55   No:52643     
Title: Re:龍神録プログラミングの館    
> Justyさん

ありがとうございます。
修正しましたが、これで大丈夫でしょうか?
http://dixq.net/rp/zip/project.zip


30ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(536,736ポイント)   Date: 2010/05/24(月) 00:02   No:52644     
Title: Re:龍神録プログラミングの館    
 修正お疲れ様です。

 11章で確認しました。
 DxLib_dがリンクされていましたので、大丈夫だと思います。
 


37ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,193,848ポイント)   Date: 2010/05/24(月) 00:15   No:52647     
Title: Re:龍神録プログラミングの館    
Justyさん

助かりました。
御助言、更に御確認までありがとうございます。


31ポイント を手に入れた。



Name: 深黒  ..かけだし(1,014ポイント)   Date: 2010/05/23(日) 20:38   No:52614       
Title: こういうのって出来ますか?    
画像をクリックしたらこの処理をするみたいなのって出来ますか?
やっぱり、画像のある範囲を指定して、そこがクリックされたら処理をするみたいなプログラムを打たなければなりませんか?


24ポイント を手に入れた。


Name: Ma  ..ハッカー(100,401ポイント)   Date: 2010/05/23(日) 20:45   No:52616     
Title: Re:こういうのって出来ますか?    
できます。
そうです。

if(クリック判定){
    if(枠当たり判定){
        処理
    }
}


53ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,193,400ポイント)   Date: 2010/05/23(日) 20:47   No:52617     
Title: Re:こういうのって出来ますか?    
一応軽くでいいので、利用規約を読んでから投稿して下さいね。
トピックを見ても何の質問か解らない質問になってしまっているので・・。

前回の流れから推測すると、DXライブラリでの話だと思いますが、
「特定の画像をクリックしたか」を判定する関数があるかということでいいでしょうか。
それでしたらありません。

今画像が100x200だとし、(100,100)の座標に表示しているならば、

if( 100<=x && x<=100+100  &&  100<=y && y<=100+200 ){
    if( クリックされた ){
        処理;
    }
}

という感じする必要があると思います。


220ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,193,444ポイント)   Date: 2010/05/23(日) 20:47   No:52618     
Title: Re:こういうのって出来ますか?    
Maさんに思いっきり被りました、すみません;

2倍のポイントを手に入れた! 44ポイント を手に入れた。

Name: Ma  ..ハッカー(100,521ポイント)   Date: 2010/05/23(日) 20:57   No:52621     
Title: Re:こういうのって出来ますか?    
いえいえ

5ポイント を手に入れた。

Name: 深黒  ..かけだし(1,036ポイント)   Date: 2010/05/24(月) 00:04   No:52645 解決!     
Title: Re:こういうのって出来ますか?    
やはりそういう方針になりますか・・・
返信ありがとうございました


22ポイント を手に入れた。



Name: ムンバ  ..熟練のプログラマー(49,360ポイント)   Date: 2010/05/23(日) 02:27   No:52532       
Title: 記憶クラス(メモリの領域?)につきまして    
こんばんはっ!

C言語?での、静的領域についての詳細(定義など)を知りたかったので
検索エンジン(←ヤホーですみません。)で「C言語 静的領域」と入力し、検索しました。

OS:Win NT(32bit) VC++2008(SP1)

===↓表題(タイトル・通称?)===

・記憶クラス
・4つの記憶クラス
・メモリの4領域
・変数の記憶クラス
・(その他、他にも色々ありました。)

===↑表題(タイトル・通称?)ここまで===


うまくお伝えできるかどうか、相変わらず不安なのですが・・・
お断り:疑問符(?)多くて、すみません。(汗

以下、記憶クラスの呼び名(通称の名前とでも言うのでしょうか?^^;)と
種類?(3つとか4つとか)について、箇条書きとさせて頂きます。


---メモリの領域---(括弧内入れて4種?)

 ・テキスト領域
 ・データ領域(静的領域 と ヒープ領域)
 ・スタック領域

---記憶クラス---(4種)

 ・自動変数
 ・静的変数
 ・外部変数
 ・レジスタ変数

---記憶クラスの種類---(3種)

 ・自動変数
 ・静的変数
 ・外部変数
 (・レジスタ変数無し?)

---C言語のメモリの使い方---(4種)

 ・コード(code)
 ・データ(data)
 ・ヒープ(heap)
 ・スタック(stack)

---C言語で扱うメモリ領域---(4種)

 ・プログラム領域
 ・静的領域
 ・スタック領域
 ・ヒープ領域

---記憶クラス指定子---(4種?)

 変数の内部
 ・auto(記憶場所:スタック)
 ・register(記憶場所:レジスタまたはスタック)
 ・static(記憶場所:静的領域)
 ・extern(他で定義されている外部変数をこの関数ないで 使用できることを宣言する)

 変数の外部
 ・なし(記憶場所:静的領域)
 ・static(記憶場所:静的領域)
 ・extern(他で定義されている外部変数をこの関数ないで 使用できることを宣言する)


今の所、上述した(静的領域について)検索したページで
図解入りで一番、自分が解りやすいと思ったページが
ttp://www.sekine-lab.ei.tuat.ac.jp/lecture/MP/2004/part06/node8.html
でした。

各サイトを参照させて頂き(手持ちの教本も含め)静的領域について、理解できたと思うのですが
各サイトを参照させて頂いてるうちに
自分の頭の中が、さらにごちゃごちゃになってしまったので
ご意見頂ける方がいらっしゃいましたら、ご指導の程、宜しくお願いします。

相変わらずなのですが、悪意とか批判とか意地などなどでは無く
自分で言うのも変なのですが(自分は、変ですが。w)
純粋な質問です。
頭は単細胞なので、ごちゃごちゃになってます。

質問1:メモリの領域 == 記憶クラス

    この時点で、私は既にごちゃごちゃですか?
    総称はともかく、記憶クラスと呼ばれるのは「4種類」
    で、宜しいのでしょうか?<初心者向けで、お願い致します。

深夜に質問投げ捨てで、大変申し訳ないのですが寝てしまいます。
毎回、勝手で申し訳御座いません。
おやすみなさい!(∪。∪)。。。zzzZZ


780ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(190,780ポイント)   Date: 2010/05/23(日) 04:13   No:52541     
Title: Re:記憶クラス(メモリの領域?)につきまして    
言語規格について知りたいのか、特定処理系の実装について知りたいのか、どちらでしょうか?


30ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(49,965ポイント)   Date: 2010/05/23(日) 04:37   No:52552     
Title: Re:記憶クラス(メモリの領域?)につきまして    
たかぎさん、おはようございます。
お世話になります。

C言語を勉強中の超初級者(と言われる方)に対する、本やサイトに記載されている
記憶クラスについての解説での、質問です。

この様な質問をしておいて
色々な方針を目指して勉強されてる方々には、大変失礼かと思うのですが
言語規格と特定処理系の実装の区別も付きません。

さらに、ごちゃごちゃになってしまいました。(汗
すみません。
明るくなって来たので、今度こそ寝ます。
おやすみなさい!


43ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,936ポイント)   Date: 2010/05/23(日) 04:40   No:52555     
Title: Re:記憶クラス(メモリの領域?)につきまして    
> 言語規格と特定処理系の実装の区別も付きません。 

ここをゴチャマゼにすると、収拾がつかなくなります。

> C言語を勉強中の超初級者(と言われる方)に対する、本やサイトに記載されている 
> 記憶クラスについての解説での、質問です。 

超初級者が相手なら、こんな厳密な話はしないのでは?


36ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(191,594ポイント)   Date: 2010/05/23(日) 12:36   No:52576     
Title: Re:記憶クラス(メモリの領域?)につきまして    
少し整理してみることにします。

まず、考慮しなければならない項目を列挙することにします。

・記憶クラス指定子(および記憶クラス)
・記憶域期間
・結合

これ以外のことはプラットフォームに依存します。
一般論で話すと非常に煩雑で難しくなりますが、必要ならざっとでも説明します。どうしますか?


Cの記憶クラス指定子には以下のものがあります。

・auto
・register
・extern
・static
・typedef

このうち、typedefはあくまでもシンタックス上の都合で記憶クラス指定子に分類されているだけなので、本当に記憶クラスを指定するものではありません。


記憶域期間には以下のものがあります。

・自動記憶域期間
・静的記憶域期間
・割付け記憶域期間


結合は以下のものがあります。

・外部結合
・内部結合
・無結合


これらの分類を字句に理解するようにしてください。


2倍のポイントを手に入れた! 590ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(50,419ポイント)   Date: 2010/05/23(日) 13:04   No:52581     
Title: Re:記憶クラス(メモリの領域?)につきまして    
おはようございます。

>>超初級者が相手なら、こんな厳密な話はしないのでは?

 14歳からはじめる C言語オンラインゲーム プログラミング教室(本)
 の、「C言語の文法をおさらいしよう」の中で「ポインタとメモリー管理のおさらい」
 という項目があって、ここでは(実際は図になってるんですが)

 ・スタック領域(ローカル変数はここに確保)
 ・コード領域
 ・静的領域(グローバル変数はここに確保)
 ・ヒープ領域
 ・システム予約領域

 と、領域が分かれている。
 「(1)グローバル変数を使う」のところで

グローバル変数は静的領域って領域に確保されるんだ。
と、思ったのが始まりで「静的領域」を検索かけまくったら
記憶クラスやメモリの領域など、たくさんの種別が出てきたので
質問させて頂きました。

現時点では、スタック領域と静的領域が理解できれば良いかと思うのですが
他の領域の名前ぐらいは覚えておいた方が良いのではないか?
と思ったので、検索したら、色々な領域の名前が出てきたので
ごちゃごちゃになってしまっての質問です。

つまり現時点では、領域の種類が知りたかっただけなのですが。(汗


454ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(191,843ポイント)   Date: 2010/05/23(日) 13:10   No:52582     
Title: Re:記憶クラス(メモリの領域?)につきまして    
スタック領域などは、一応、特定処理系に特化した話になります。
あと、その本はCとC++の区別もあいまいになっているので、細かなところはあてにしない方がよいと思います。


43ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(166,303ポイント)   Date: 2010/05/23(日) 13:34   No:52583     
Title: Re:記憶クラス(メモリの領域?)につきまして    
まず、「14歳からはじめる C言語オンラインゲーム プログラミング教室」で言うところの
 ・コード領域
 ・システム予約領域 
は自分で変更する処ではないので置いておきます。
あとの
 ・スタック領域(ローカル変数はここに確保)
 ・静的領域(グローバル変数はここに確保)
 ・ヒープ領域
で、ヒープ領域はmallocなどで使いますので理解しておいた方が良いでしょう。
静的領域は、static記憶クラスの変数も置かれますのでこれも理解しておいてください。ちなみにこの話は、プラットフォーム依存です。

中途半端な理解だと後々混乱というかデバッグでもプログラミングでも困ることになると思いますので、プッラットフォーム依存限定で良いのでたかぎさんの話を全て理解しておくことをお勧めします。


293ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(192,077ポイント)   Date: 2010/05/23(日) 14:04   No:52586     
Title: Re:記憶クラス(メモリの領域?)につきまして    
>  ・スタック領域(ローカル変数はここに確保) 
>  ・静的領域(グローバル変数はここに確保) 
>  ・ヒープ領域 

メモリマップを直接触ったり、アセンブリ言語を使うのでない限り、上記についてはわざわざ処理系依存の理解をする必要はありません。
つまり、実際に領域が"どこ"に割り付けられるは重要な問題ではなく、いつからいつまで割り付けられているかによる分類である記憶域期間だけ分かれば十分です。

関数の内部で、staticもexternも付けずに宣言されたオブジェクト、関数の仮引数、式の評価結果である一時オブジェクトは、すべて自動記憶域期間を持ちます。
関数の外、またはstaticを付けて宣言されたオブジェクトは静的記憶域期間を持ちます。
mallocやcallocで割り付けられたオブジェクトは割付け記憶域期間を持ちます。


234ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(51,895ポイント)   Date: 2010/05/23(日) 23:40   No:52642 解決!     
Title: Re:記憶クラス(メモリの領域?)につきまして    
おはようございます?!アンドすみません!
5時間近く、昼寝してしまいました。^^;
レス遅くなりました。すみません。

たかぎさん、softyaさん、お世話になります。
他の方々の、ご質問とご解説も、いつも見させて頂き、勉強させて頂いてます。
いつも、ご丁重なご解説どうもありがとうございます!

この項目、今後もゲームを作る上で一番大事な所なのではないかと自分なりに感じ
調べたり、こちらで質問してるうちに気が付いたら夜が明けてました。

それで誠に勝手ではありますが
まず、このページごと保存させて頂きました。
(定期的にバックアップするフォルダに保存したので
 消える事は無いと思います。w)

今すぐ、お二方のご解説を理解するのは無理だと思いますので
(私、本当に理解力に欠けてまして、ご迷惑お掛けしてます。)
この後、何度も読み返して整理していきたいと思います。

==============
たかぎさんへ
==============

>>一般論で話すと非常に煩雑で難しくなりますが、必要ならざっとでも説明します。どうしますか?

 すみません。止めといて下さい。(汗
 現時点では、今回のたかぎさんのご解説で自分には十分だと思います。(_ _)
 これ以上、突っ込まなければならなくなった際には
 勝手ながら、また質問させて頂きますので
 その際は、また突っ込んで頂けます様、宜しくお願い致します。^^

>>これらの分類を軸に理解するようにしてください。
>>(途中、略させて頂きます。)
>>スタック領域などは、一応、特定処理系に特化した話になります。

 分類、どうもありがとうございます。
 了解しました。今から、じっくりと勉強させて頂きます!

>>その本はCとC++の区別もあいまいになっているので、細かなところはあてにしない方がよいと思います。

 以前にも、たかぎさんはおっしゃってましたよね。
 あれから、この本を読みながら色々と調べてるうちに
 表題に、「C言語」ってうたっているのにC++が入ってたりして・・・。
 と、思う様になりました。
 今は、できるだけC言語だけでやりたいと思ってるのですが
 なかなか、区別が付きませんし余裕もありません。
 いずれは、C++も勉強してみたいと思ってます。(笑

 この本の、おさらいの項目は飛ばして
 次の章のゲーム作りに入ろうかとも思ったのですが
 お金出して買った手前もあり性格上、さらっと流す事ができず
 細かい所は当てにせず、自分で調べたり、こちらで質問させて頂いたりしてました。
 「ポインタとメモリ管理のおさらい」が、この章の最後の項目なので
 次から、いよいよDXライブラリを使ってゲームを作る章なのです。
 今まで、こちらのサイトの「ゲームプログラミングの館」にて
 勉強させて頂いてますので、楽しみにしてる章です。
 
 Dixqさんや、Dixqさんのページを批判するとかではなく ←信じて下さいっ!
 実際、この様にすごくお世話になってますし、勉強させて頂いてますので。^^

 「C言語何でも質問サイト」となっていて
 そこに「ゲームプログラミングの館」内で、DXライブラリを使ってるので
 初めてDXライブラリを使う事になりましたし、良く解らなかった私には・・・
 実際、何を使ってどの様にすれば、作りたいゲームが作れるんだろ?って
 ふらふらとネット上でさまよっていたら、たどり着いたページが
 こちらのサイトだったんです。
 何か、また日記みたいになってしまいますが。^^;

 その時に、こちらの掲示板で質問させて頂いた内容は
 (全文、詳細は覚えてなくて申し訳け御座いませんが。)
 「C++を使って、過去にあったネットゲームを再現したい。」
  の様な質問をした時に、どなたかにレス頂いたのですが
 「ここはC言語ですが、大丈夫でしょうか?」
  と、言うような内容のレスを頂きました。
 言い訳がましいですが、つまり、その時点で
 DXライブラリ == C言語
 という法則が、私の中で成り立ってしまっていた訳です。<言い訳

==============
softyaさんへ
==============

 こんばんは!
 お世話になります。
 (このページ、全て保存させて頂きました。
  ゆっくりと整理させて頂きます。(_ _))

>>ヒープ領域はmallocなどで使いますので理解しておいた方が良いでしょう。
>>静的領域は、static記憶クラスの変数も置かれますのでこれも理解しておいてください。
 
 了解しました!
 ご指導ありがとうございます。
 関数例?で、挙げて頂いた関数が、領域を理解する突破口になりそうです。
 ありがとうございます!

>>中途半端な理解だと後々混乱というかデバッグでもプログラミングでも困ることになると思いますので
>>プッラットフォーム依存限定で良いのでたかぎさんの話を全て理解しておくことをお勧めします。

 No:52586 のたかぎさんの、ご解説を含めまして、今後とも勉強させて頂きます。
 softyaさん、ご解説ありがとうございました!

================================================================================================

たかぎさんっ!

>>関数の内部で、staticもexternも付けずに宣言されたオブジェクト、関数の仮引数、式の評価結果である一時>>オブジェクトは、すべて自動記憶域期間を持ちます。 
>>関数の外、またはstaticを付けて宣言されたオブジェクトは静的記憶域期間を持ちます。 
>>mallocやcallocで割り付けられたオブジェクトは割付け記憶域期間を持ちます。

 申し訳け無いのですが、専門用語(漢字の部分)は、まだ良く解らないので(謝
 今後、さらに勉強させて頂きます。ありがとうございます!
 記憶領域につきましては、このご解説で(一部ですが)理解できた様な気がします。^^
 聞いた事がある(勉強した)関数の例を挙げて頂きありがとう御座いました。
 
 少しずつですが、整理できてきました。
 焦らず整理しながら、勉強していきたいと思います。

================================================================================================

記憶領域につきまして、たかぎさん、softyaさん、ご指導ご解説、どうもありがとうございました。
長々とお付き合い頂き、また貴重なお時間を割いて頂き、すみませんでした。(感謝
自分なりに整理が付きましたら、次の章に進みたいと思います。

自分が質問する(したい)趣旨が質問を考えてるうちに
いつも、何を質問したいのか解らなくなってくる馬鹿な自分です。
今後とも、ご迷惑をお掛けする事と思いますが何卒、宜しくお願い致します。

どうもありがとうございましたっ!

---誤字がありましたので、一部変更させて頂きました--- 編集済み


1,476ポイント を手に入れた。



Name: mii  ..上級者(15,955ポイント)   Date: 2010/05/23(日) 22:02   No:52632       
Title: コーテーションを含むコメント判定    
以前コメントプログラムでお世話になったmiiです。

ダブル、シングルコーテーションの判定ロジックが分からないので教えていただきたです。
    printf("\\");/*  ←コメントではない行
    a*/ ←コメント行
    putchar('\\');/* ←コメントではない行
    a*/ ←コメント行
    printf("\'");/* ←コメントではない行
    a*/ ←コメント行
    putchar('\'');/* ←コメントではない行
    a*/ ←コメント行
    printf("\"");/* ←コメントではない行
    a*/ ←コメント行
    putchar('\"');/* ←コメントではない行
    a*/ ←コメント行
    printf("/*'\''""", /*\\"); ←コメントではない行
    printf("'\"*/); ←コメント行


最初の文字がダブルコーテーションだったら次のダブルコーテーションを見つけるまで
読み飛ばすようにしていたのですが、\マークが入るとわけがわからなくなります^^;

どのように判定すれば正しく処理できるのでしょうか?


247ポイント を手に入れた。


Name: Ma  ..ハッカー(100,868ポイント)   Date: 2010/05/23(日) 23:21   No:52640     
Title: Re:コーテーションを含むコメント判定    
どのような出力を期待しているのですか?
また、具体例を出すかもうしこし詳しく書かないと何がわからないのかこちらがよくわかりません。

ダブルクオーと内の/* は文字列として扱われます。
そのダブルクオート内で、ダブルクオートの文字を使いたいならエスケープしますが、
シングルクオートは文字列となるのでエスケープする必要ありません。


106ポイント を手に入れた。



Name: 子コッと  ..ぴよぴよ(644ポイント)   Date: 2010/05/23(日) 04:34   No:52551       
Title: モンテカルロ法を用いた円周率のことで質問です    

まず最初に下にプログラムを載せるのですが、簡単に説明をします。


半径1の円を四分割し、その中の一つを直径1の正方形で囲んだとする。

その一つの正方形の中にN個の点を打ち、その中で円の中にある点をnとし、
N個の点の数をプログラム中ではmaxとしています。

円の面積はS(つまりπ)、正方形の面積は1となるので次式で

max:n=1:S

S=max/n

となる。点の比によって円周率を求めるプログラムになっています。

私がわからない部分ですが、円の中に点があるかどうか判断する部分です。
これはどういった公式を使っているのでしょうか?

プログラム中ではこの部分です。下に全体のプログラムを載せます。

if((x*x+y*y)<=1.0)     
    n++;



全体のプログラムを載せます。


//モンテカルロ法を用いた円周率の計算

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main(void)
{
    double i,n=0.0,max=100.0;
    double x,y,pai;
    
    for(i=0;i<=max;i++){
        
        x=rand()/(RAND_MAX+1.0);
        y=rand()/(RAND_MAX+1.0);
        
        if((x*x+y*y)<=1.0)    ←この部分
            n++;
            
    }
    
    pai=n/max*4.0;
    
    fprintf(stdout,"%.10f\n",pai);
    fprintf(stdout,"%.10f\n",M_PI);
    return 0;
}






それではよろしくお願いします。






644ポイント を手に入れた。


Name: 子コッと  ..ぴよぴよ(710ポイント)   Date: 2010/05/23(日) 04:40   No:52554     
Title: Re:モンテカルロ法を用いた円周率のことで質問です    
すいません。少し間違えました。

円の面積ですが上ではπと書いてますが、
正確には

S=π/4

でした。プログラム中でもそうしています。

すみませんでした。


66ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,961ポイント)   Date: 2010/05/23(日) 04:42   No:52556     
Title: Re:モンテカルロ法を用いた円周率のことで質問です    
> これはどういった公式を使っているのでしょうか? 

どんな答えを期待しているのかよくわかりませんが、三平方の定理とか、円の方程式とかです。


25ポイント を手に入れた。

Name: 子コッと  ..ぴよぴよ(831ポイント)   Date: 2010/05/23(日) 04:51   No:52558     
Title: Re:モンテカルロ法を用いた円周率のことで質問です    
たかぎさんありがとうございます。

それとすみません。私の質問の仕方が悪かったです。申し訳ありませんでした。


分からない所なのですが、どうしてこの式で円の中に点があるかどうかを
判断できるのかがわかりません。

if((x*x+y*y)<=1.0)      
    n++; 


再度よろしくお願いします。




121ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(83,282ポイント)   Date: 2010/05/23(日) 08:26   No:52562     
Title: Re:モンテカルロ法を用いた円周率のことで質問です    
プログラムで√という記号は使えませんが、
if (√(x*x+y*y) <= 1.0) だったら意味は理解できますか?
三平方の定理により、原点Oと点P(x, y)の距離ですので、
これが1以下ならばPは円の内部と判断できます。

xとyが実数の時、条件√(x*x+y*y) <= 1.0 と、
条件(x*x+y*y) <= 1.0は、同値ですので、
√の計算は不要です。


164ポイント を手に入れた。

Name: 子コッと  ..ぴよぴよ(860ポイント)   Date: 2010/05/23(日) 21:55   No:52631 解決!     
Title: Re:モンテカルロ法を用いた円周率のことで質問です    
たいちうさんありがとうございます。

理解できました。


29ポイント を手に入れた。



Name: asdf  ..ぴよぴよ(943ポイント)   Date: 2010/05/23(日) 18:24   No:52597       
Title: 構造体 ポインタ    
C言語で、構造体のメンバ変数がポインタのときについてなのですが、
struct Data {
    char *n;        
         char *m;
};

int main(void) {
    struct Data data[] = {
                  {"Suzuki", "Taro"},
        {"Sato"  , "Taro"}
    };
         return 0;
}


のように、なぜ、メンバ変数がポインタなのに文字列を代入してもよいのでしょうか?
前に、ここでポインタについて質問させてもらったときに、

char *str; 

ではデータを入れるための領域は確保されていません。 

char a100[5]; 

とかけば5バイトのものが入れられる入れ物が用意されます。 
文字列を入れたいなら必要なバイト数先に確保しなくてはなりません。

と教えてもらったので、メンバ変数を今回のようにポインタではなく、配列にしないといけないような気がするのですが、どうなのでしょうか?

よろしくお願いします。


323ポイント を手に入れた。


Name: box  ..ハッカー(153,276ポイント)   Date: 2010/05/23(日) 18:57   No:52601     
Title: Re:構造体 ポインタ    
> のように、なぜ、メンバ変数がポインタなのに文字列を代入してもよいのでしょうか?

文字列(リテラル)を代入しているのではなく、
その文字列リテラルの先頭のアドレスを代入しているのです。

char *n;
n = "Suzuki";

という書き方は、普通にありますよね。これと同じです。


51ポイント を手に入れた。

Name: asdf  ..かけだし(1,121ポイント)   Date: 2010/05/23(日) 19:16   No:52607     
Title: Re:構造体 ポインタ    
なるほど。
では、
int main(void) {
    //int a;
    int *b;
    
    //b = &a;
    
    scanf("%d", b);
    printf("%d", *b);
    
    
    return 0;
}


がだめな理由は、bのアドレスが不明なのに、そのアドレスに値を書き込もうとしているからで、コメントの//をとったプログラムが正常に動作するのは、bはaをさしているから、そのaのアドレスに値を書き込もうとしているから・・・という感じでよいのでしょうか?


178ポイント を手に入れた。

Name: box  ..ハッカー(153,357ポイント)   Date: 2010/05/23(日) 19:47   No:52609     
Title: Re:構造体 ポインタ    
>bのアドレスが不明なのに、そのアドレスに値を書き込もうとしている

大きな誤解があります。
int *b;
と定義した時点で、変数bのアドレス(変数bがメモリー空間のどこにあるか)は確定しています。
変数bの値(つまり、どこを指しているか)が不定なのです。


81ポイント を手に入れた。

Name: Ma  ..ハッカー(100,304ポイント)   Date: 2010/05/23(日) 20:00   No:52610     
Title: Re:構造体 ポインタ    
個人的解釈ですが、質問は、
char *n; 
n = "Suzuki"; 
において、 Suzuki はいったいどこでどうやって確保されているのですか?
ということじゃないでしょうか?

私も正直知りませんw


81ポイント を手に入れた。

Name: box  ..ハッカー(153,400ポイント)   Date: 2010/05/23(日) 20:13   No:52612     
Title: Re:構造体 ポインタ    
> char *n; 
> n = "Suzuki"; 
> において、 Suzuki はいったいどこでどうやって確保されているのですか?

"Suzuki"の先頭アドレスがnに入っていますので、
printf("%p\n", n);
とすれば、「あぁ、そこに"Suzuki"という文字列リテラルが確保してあるのね」
ということがわかります。

元の質問者さんは、変数の値とアドレスとがごっちゃになっているのだと思います。
 編集済み


43ポイント を手に入れた。

Name: asdf  ..かけだし(1,167ポイント)   Date: 2010/05/23(日) 21:54   No:52630 解決!     
Title: Re:構造体 ポインタ    
はい、boxさんの言うとおりだと思います。
もっと、ポインタについて勉強してみます。
ありがとうございました。



46ポイント を手に入れた。



Name: かなり初心者  ..ぴよぴよ(389ポイント)   Date: 2010/05/23(日) 18:50   No:52600       
Title: キャラクターを動かしたいんですが・・・    

現在、シューティングゲームを作っているところなのですが、
(といっても、ブロックが動いたり、上から降ってくるようなものです)
左右にキャラクターは動かせても、前後にキャラクターを動かすことができません。
どうやったら、動かせますか?教えてください。


↓が実際に打ってみたプログラムです。
間違っているところがあったら、教えてください。

// メイン関数
void main(void)
{
    // ここで初期化します

    // プレイヤの座標
    float playerX = 0.0f;
    float playerY = 0.0f;
    // プレイヤの移動速度
    float playerVX = 0.0f;
    float playerVY = 0.0f;
    // プレイヤの速さ
    float playerSpeed = 0.5f;
    // プレイヤの移動範囲
    float playerXMin = -19.0f;
    float playerXMax = 18.0f;
    float playerYMin = -14.0f;
    float playerYMax = 13.0f;

    // ゲームループ
    // Windowが閉じたら、繰り返しを終了します。
    while( IsActive() )
    {

        // ここでゲームの処理をします


        // ここで描画処理をします



        // 移動速度を初期化する
        playerVX = 0.0f;

        // 自機の移動
        // 左キーが押された?
        if (GetKey(VK_LEFT))
        {
            // 移動速度の設定をする
            playerVX = -playerSpeed;
        }
        // 右キーが押された?
        if (GetKey(VK_RIGHT))
        {
            // 移動速度を設定する
            playerVX = playerSpeed;
        }
        // 上キーが押された?
        if (GetKey(VK_UP))
        {
            // 移動速度の設定をする
            playerVY = playerSpeed;
        }
        // 下キーが押された?
        if (GetKey(VK_DOWN))
        {
            // 移動速度を設定する
            playerVY = -playerSpeed;
        }

        // 位置を更新する
        playerX += playerVX;
        playerY += playerVY;

        // 移動範囲の設定(最小)
        if (playerX <= playerXMin)
        {
            // 位置を修正
            playerX = playerXMin;
            // 移動速度の初期化
            playerVX = 0.0f;
        }
        if (playerY <= playerYMin)
        {
            // 位置を修正
            playerY = playerYMin;
            // 移動速度の初期化
            playerVY = 0.0f;
        }
        // 移動範囲の設定(最大)
        if (playerX >= playerXMax)
        {
            // 位置を修正
            playerX = playerXMax;
            // 移動速度の初期化
            playerVX = 0.0f;
        }
        if (playerY >= playerYMax)
        {
            // 位置を修正
            playerY = playerYMax;
            // 移動速度の初期化
            playerVY = 0.0f;
        }

        // 自機の描画
        DrawBox(playerX,playerY);
        // ここまでで描画処理を終了します。

        // 描画を行います。
        Render();
    }

    // 終了処理をします
}




389ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(192,151ポイント)   Date: 2010/05/23(日) 19:11   No:52606     
Title: Re:キャラクターを動かしたいんですが・・・    
> かなり初心者

この名前を今後ずっと使っていくつもりでしょうか? 
それとも、捨てハンのつもりでしょうか? 
いずれにせよ、利用規約を熟読してください。


50ポイント を手に入れた。

Name: Ma  ..ハッカー(100,348ポイント)   Date: 2010/05/23(日) 20:06   No:52611     
Title: Re:キャラクターを動かしたいんですが・・・    
ぱっとみ上下移動できないような問題はない気がする
が、しいて言えば

playerVX = 0.0f; 

の初期化部分に
playerVY = 0.0f; 
を追加するべき。


44ポイント を手に入れた。



Name: マクベ  ..ぴよぴよ(588ポイント)   Date: 2010/05/23(日) 00:05   No:52526       
Title: Visual C++ 2008    
こんばんは。

Visual C++ 2008を使おうと思い、http://www.microsoft.com/japan/msdn/vstudio/2008/product/express/offline.aspx
を読んだのですが、DVDを持ってないのでできませんでした。
DVDを使う以外に入手する方法はないでしょうか? 編集済み


68ポイント を手に入れた。


Name: ru  ..かけだし(1,389ポイント)   Date: 2010/05/23(日) 00:11   No:52527     
Title: Re:Visual C++ 2008    
http://www.daemon-tools.cc/jpn/home

13ポイント を手に入れた。

Name: マクベ  ..ぴよぴよ(637ポイント)   Date: 2010/05/23(日) 19:11   No:52605 解決!     
Title: Re:Visual C++ 2008    
ありがとうございます!
ちょっと使い方が分からなくて戸惑ったけどインストールすることができました!


49ポイント を手に入れた。



Name: 就職活動中 ゲーム大好きです  ..かけだし(1,204ポイント)   Date: 2010/05/23(日) 18:15   No:52594       
Title: 初投稿です イベントの会話での質問    
初めての投稿です。
今、就職活動で作品を提出するのですが、イベントの処理をつくっているのですが、
いまいちうまくプログラムが作れません。

今は、文字表示までいきましたが、キーボードを押したときに次のテキスト表示したいのですが、
うまくいくことができません。switch文を2重にやりやり方は駄目だと先生にいわれました。
どうしたらいいか、知恵を貸してください。
学校で相談できる人がいなくて困っています。
席が離れているのもありますが、なかなか共通の話題があまり見つからず、なかなか話せない状態であります。
こんな私の、質問に答えてください。お願いします。
char EventMain(){
    LPPLAYER lpPl=GetPlayer();
    g_lpPl_surface=GetEvent();
    char ret=GAME_EVENT;//
    //キャラクターによってシナリオ変更
    switch(lpPl->ch.character_select){
        case 0:
            
            //キャラクターの値で処理を変更
            ret=EventContents(lpPl->event_flag);
            
                
            
            break;
    }
    return ret;///イベント


    
}


char EventContents(int no){
    char mes[256]={0};//文字を格納
    static int text_flag=0;//テキスト
    static int Key_flag=TRUE;//次のテキスト言ってもいいかキーボード 
    char ret=GAME_EVENT;//シナリオ
    HDC hDC=NULL;
    
    if(JustKey('S')){
        if(Key_flag){
            
        }
    }
    
    
    ret=Textlist(no,text_flag);
    
    
    return ret;
}

BOOL    LetterExpress(char * letter, int size,int x,int y,COLORREF rgb){
        
        
        HDC hDC=NULL;
        g_lpDDSBack->GetDC(&hDC);
        SetFont(hDC,size,rgb);//フォントの設定
    
        TextOut(hDC,x,y,letter,lstrlen(letter));
        ReleaseFont(hDC);//フォントの解放
        g_lpDDSBack->ReleaseDC(hDC);
    
        return FALSE;

}


char Textlist(int no,int text_no){
    BOOL ret=FALSE;
    
    LetterExpress("これもやつのしわざか",20,0,460,RGB(0,0,0));
    
    
    LetterExpress("これもや",20,0,460,RGB(0,0,0));
    
    
    LetterExpress("これざか",20,0,460,RGB(0,0,0));
    return CHARACTER_SELECT;
    
    /*switch(text_no){
        case 0:LetterExpress("これもやつのしわざか",20,0,460,RGB(0,0,0),text_no);break;
        case 1:LetterExpress("もうだめか",20,0,440,RGB(255,255,255),text_no);break;
        case 2:LetterExpress("だれか",20,0,420,RGB(255,255,255),text_no);return CHARACTER_SELECT;
    }*/
    
    
    //return CHARACTER_SELECT;
    

    /*
    switch(text_no){
        case 0:
        //EventAnimationSet(&g_ply.ani,WALK);
        LetterExpress("これはやつのしわざか?",20,0, 460,RGB(0,200,0));
        break;
        case 1:
        LetterExpress("もはやこれまでか?",20,0, 460,RGB(0,200,0));
        break;
        case 2:
        LetterExpress("もうだめだ",20,0, 460,RGB(0,200,0));
    
    }
    */
    return GAME_EVENT;
}
プログラムはこんな感じにしています。




1,204ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(191,970ポイント)   Date: 2010/05/23(日) 19:05   No:52603     
Title: Re:初投稿です イベントの会話での質問    
> 就職活動中 ゲーム大好きです

この名前を今後ずっと使っていくつもりでしょうか?
それとも、捨てハンのつもりでしょうか?
いずれにせよ、利用規約を熟読してください。


41ポイント を手に入れた。



Name: 三郎  ..かけだし(1,413ポイント)   Date: 2010/05/22(土) 12:08   No:52480       
Title: 素朴な疑問    
DOSでCの少しの経験しかありません。私にとってVisual C++は難しくて大変です。

でもVC++でないと複雑な処理に対応が難しいとの事、分る様な気がしました。

しかし、組み込みシステム等に使われているIDE、コンパイラーなどC++ではなくてCで書いてあるような気がします。
何故未だCが使われているのでしょうか?

プロとか、プロみたいな管理人さん始め皆様はゲームなどプログラムにC++ばかりでなく、Cも使われているようにも思われました。
何故なのでしょうか?

書店で未だ、Cの書籍が多く販売されているのは何故でしょうか?

よろしくお願いします。


226ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(190,617ポイント)   Date: 2010/05/22(土) 13:52   No:52481     
Title: Re:素朴な疑問    
> 何故未だCが使われているのでしょうか? 

いくつか理由があります。

ひとつめは、そもそもそのプラットフォームの開発言語にCかアセンブリしか使えないような場合です。

もうひとつは、Cもそうですが、C++もきちんと理解して使わないといろいろ危険が伴います。
多くの開発現場では、安かろう悪かろうのプログラマを頭数だけかき集めてどうにかしようとしますので、その状況でC++を使うのは危険なのです。

> 書店で未だ、Cの書籍が多く販売されているのは何故でしょうか?

学校で習うからでしょうね。
あるいは、C++をやるにしても、JavaやC#などをやるにしても、最初にCを勧める人が多いのも理由です。
残念ながら日本では、初心者〜初級者向けの本しか多くの部数を売ることは困難ですので、本を出す側も似たり寄ったりの本ばかり出すようになります。


155ポイント を手に入れた。

Name: 三郎  ..かけだし(1,565ポイント)   Date: 2010/05/22(土) 14:14   No:52482     
Title: Re:素朴な疑問    
たかぎさん、ありがとうございます。
分厚い入門書を買ってきた読んでいた当初printfという表現が全く書いてなかったので戸惑ってましたが此処のサイトに来て、むしろその表現が多いのに驚きました。
パソコン等、日日進歩しているので覚える事で頭がパンクします。

そうなれば、不要なものは忘れる事が大事と思いますが(ここが重要)、歴史の転換点なのでしょうか?。

人間の脳はそれ程、進歩していかないと思うので、このギャップは将来どうなるのでしょうか。

情報化社会、先端技術は凡人ではついていけない。多くの国民は取り残されないでしょうか(私も)。


152ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(165,361ポイント)   Date: 2010/05/22(土) 19:12   No:52495     
Title: Re:素朴な疑問    
そういえば、VC++とC++はイコールではありませんが、C言語とC++のどちらを今勉強されているのでしょうか?
(VC++は、マイクロソフト社のC++開発環境に過ぎません。他にもC++の開発環境はあります)

>情報化社会、先端技術は凡人ではついていけない。多くの国民は取り残されないでしょうか(私も)。 
逆に私は今の開発環境がややこしすぎると思います。一般の人はC++など使わないに越したことはありません(一般の人はプログラミング言語などを使いませんが)。
無理してC++を使うよりは、VBやC#を使った方が生産的だと思います。


212ポイント を手に入れた。

Name: 三郎  ..かけだし(1,997ポイント)   Date: 2010/05/23(日) 05:33   No:52560     
Title: Re:素朴な疑問    
1.私は訳が分らない状態で時代に取り残されてはいけないと思い、昔PC9800を購入した。
2.どのその機械にN88BASICが付いており、多少プログラムを作った。
3.BASICでは、制限から64K以上のソフトが造るのが難しくなった。
4.仕方なしに、マイクロソフトのMSCを勉強し、Cを使ってソフトを造った。
5.DOSの機械がこの世から姿を消した!。今までの知識を放棄するのが、勿体無く悩んだ。
6.グラフィックを結構使うのと、全てパソコンで済ましたいので悩んだ結果、MFCが付属しているVisual VC++にしておけば、大は小を兼ね後悔しないと思い、それを勉強しています。(Win全盛だったし)

一般の人は(私)プログラムなど、ややこしい事をせずに済めば、それに越したことはない。
しかし学校教育でも情報教育は必須にならザざるを得なくなり、ソフトはソフト屋さんに任せればよい訳でないと思うようになりました。
何故なら、ソフトを使う人が自分で使うソフトを自分で造らないと、具合のいいものが出来ない事が、よくあります。Visual VC++を選んだ私の理由です。


432ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(67,889ポイント)   Date: 2010/05/23(日) 12:26   No:52574     
Title: Re:素朴な疑問    
N88-BASICですか なつかしいですねw
中学生のころでしょうか 擬似3Dダンジョン作ってました

ただ、三郎さんの状況ではプログラム言語ばかりに注意がいってしまっていてて
かんじんなアルゴリズム(物事の考え方)の組み方に目がいってない気がします

N88-BASICもC/C++も言語は違いますが 何かソフトを作るという目的を達成するための
手段ですので N88-BASICからC/C++に変えたからといって 目的が果たせるわけではないです
変わったのは手段だけであって、目的は変わってません

技術(手段)はどんどんスピードを増して進化してますが
基本的な考え方は今も変わらず、今後も使えると思ってます
私としては、基本的な考え方を習得しておけば、どの技術(手段)でも通用すると考えてます


>ソフトを使う人が自分で使うソフトを自分で造らないと、具合のいいものが出来ない事が、よくあります。
具合のいいものを作るというより、プログラマに「具合のいいもの」というものを伝えないと作れないです
ゲームなんかだとよくありますが、ここで○○のような処理をすると書いてるとすると
それはプログラマの都合の良い方向で考えられます
例としては、座標(100,120)で左クリックして1000ms秒以内にダイアログボックスを
座標(200、220)を左上として表示する
と明確に指示してくれないと伝わらないのがよくあります
なので、文章で伝える(書く)力が必要だと考えてます
 編集済み


294ポイント を手に入れた。

Name: 三郎  ..かけだし(2,020ポイント)   Date: 2010/05/23(日) 12:34   No:52575 解決!     
Title: Re:素朴な疑問    
皆さんに度々愚問な質問をして申し訳ありませんでした。
努力して頑張ります。


23ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,192,749ポイント)   Date: 2010/05/23(日) 12:39   No:52577     
Title: Re:素朴な疑問    
私はC++を勉強し始めるのが遅かった事もあってコンテンツにCが多いのですが、
C++を知るとCに戻れなくなるのは良く解ります。

ただCは知っていてもC++は知らないという人は多いと思います。
ここのHPは初心者をターゲットとしているので(上級者は手取り足とり書かなくても自分で調べて解決しますし)
極力初心者に抵抗の無い記述を心がけています。
よってこれからもCの内容が多くなるかもしれませんが、C++での解説ページも少しくらい作りたいと思っています。

また、現場でCが使われているのは環境的制約がある他に、年配の責任者の考えも影響している場合があります。
まだそれほどC++が主流では無かったころにCを学んだ技術者で、今ではただの責任者になっているような現場で、
その責任人が頑固な人だと
「新しいものは取り入れたくない」
という理由からCのままである所があるようです。

企業は責任がありますから、なるべく安全に作業に取り組みたいと思っています。
万が一不具合が出て製品回収なんてことになったら大損害ですから。

企業で使うOSなんかもひと世代前の物が使われている場合が多いと思います。
まだwindows7が大半を占めているなんてことはないでしょう。
ある程度信頼がおけると解ってから移行すると思います。

前述の頑固オヤジからしてみれば「C++は新しいもので信頼できるか解らない(Cは信頼できると自分が知っている)」とか「単に自分がC++を学びたくない。Cなら現場をとりしきれる」などと思っているのではないでしょうか。
「今までCでやってこれたんだから、わざわざ得体のせいれないものに移行することはない」と思っているかもしれません。

また、組み込み系は制約の問題からCで作ってきた多くのライブラリが存在している場合が多いかもしれません。
近年になってC++が使える組み込みが多くなってきたとは言え、その企業が持っているライブラリの中身はCである為、C++に完全移行する為にはライブラリを作り直さなければならず、その手間を嫌がっている可能性もあります。

私が聞いた話や考えるところの範囲だとこんな感じです。


745ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(191,800ポイント)   Date: 2010/05/23(日) 12:51   No:52579     
Title: Re:素朴な疑問    
> C++に完全移行する為にはライブラリを作り直さなければならず、その手間を嫌がっている可能性もあります。 

これについては誤解も多いので、少し補足しておきます。

C++からはCのライブラリをそのまま利用できると考える人も多いのですが、現実はそれほど甘くありません。
最低限、ヘッダファイルの修正が必要になりますが、多くの場合、extern "C"を付けるだけでは不十分なのです。

だからといって、対応に大きな手間がかかるというわけではないのですが、CとC++の両方を熟知していないと、どれだけの作業が発生するのかが読めません。
また、何も考えずにC++を導入すると、出来上がったプログラムが大きく、遅くなることは避けられません。
これらが一番障害になっているように思います。


206ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(166,010ポイント)   Date: 2010/05/23(日) 12:52   No:52580     
Title: Re:素朴な疑問    
>何故なら、ソフトを使う人が自分で使うソフトを自分で造らないと、具合のいいものが出来ない事が、よくあります。Visual VC++を選んだ私の理由です。 

まぁ、それはその通りです。私は間違いなく、その指向性の人間ですね。
ただ、VC++には固執していません。場合によって使い分けています。
よく使うのは、C言語、VC++とMFC、PHP、VC#です。

>グラフィックを結構使うのと、全てパソコンで済ましたいので悩んだ結果、MFCが付属しているVisual VC++にしておけば、大は小を兼ね後悔しないと思い、それを勉強しています。(Win全盛だったし) 

結局MFCは使いこなせておられるのでしょうか?(思うようなソフトが作れているかと意味です)
MFCの終焉も考慮された方が良いかも知れません。
理由
・既にMFC関係の新しい書籍がほとんど発売されていない。
・マイクロソフトは既にMFCから.NET FrameWorkに軸足を移しています。これは、ViusalBasicとC#とC++/CLI他で共通のフレームワークでマイクロソフトはこちらを中心に据えたいと考えていますね。
・MFCはVisualStudio2010からPro以上エディションでしか使えなくなった(アマチュアやプロでもだが高価すぎて手が出し辛くなっている)
私もMFCは使っていますが、そろそろ別の環境に乗り換えることを検討しています。

私見ですが、プログラミング言語は大は小を兼ねないと思います。それにマイクロソフトの開発環境は変化が激しすぎますので、もっと変化の穏やかな言語や環境を使うことをお勧めします。
OSプラットフォーム依存しないという意味ではJava、10年経っても使えると言う意味でも開発環境の安定という意味でもLinuxOSでC言語やC++でじっくり開発する手もあります。LinuxOSのツールや開発環境の大半はC言語やJavaで構築されています。

Qt(キュート)と言うC++言語用のGUIフレームワーク(ウィンドウアプリ作成)もあります。
http://ja.wikipedia.org/wiki/Qt
※日本語の資料は少ないので、初心者向きとは言えませんが。


649ポイント を手に入れた。

Name: 三郎  ..かけだし(2,152ポイント)   Date: 2010/05/23(日) 13:45   No:52584 解決!     
Title: Re:素朴な疑問    
>結局MFCは使いこなせておられるのでしょうか?(思うようなソフトが作れているかと意味です)

私はつい先日、無謀にもVisual Studioの正式版を購入した矢先です。
例題の初歩的なところを、入門書の解説どおり打ち込んで動く事を確認している段階です。
従ってMFCを使ったソフトは未だ造っていません。Winでのソフトも造っていません。

皆様の経験豊富なコメント心より感謝します。

私は高齢ですので先ず例題を頭ではなく(理解力が弱く)体で覚える感覚でヨチヨチ歩きで進んでいきます。

 


132ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(166,383ポイント)   Date: 2010/05/23(日) 13:51   No:52585     
Title: Re:素朴な疑問    
>例題の初歩的なところを、入門書の解説どおり打ち込んで動く事を確認している段階です。 
ちなみに、どの様な入門書をお使いでしょうか?
他にもオススメ出来る本があるかも知れません。


80ポイント を手に入れた。

Name: 三郎  ..かけだし(2,251ポイント)   Date: 2010/05/23(日) 15:01   No:52587     
Title: Re:素朴な疑問    
私が買ってきた本は
1.明快入門 Visual C++ 2008
  ビギナー偏  林晴比古 著 ソフトバンク クリエーテイブ 出版

2.作って覚える Visual C++ 2008  Express Edition 入門
  宮崎昭世 萩原祐之   著  秀和システム出版

この2冊を買ってきました。


99ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(166,652ポイント)   Date: 2010/05/23(日) 15:59   No:52588     
Title: Re:素朴な疑問    
なるほど一冊目は悪い選択ではないと思いますが、C++の文法の教科書としては力不足かもしれません。
2冊目はMFCの本ではありません。いろんな言い方があり混乱がしますが.NET FrameWorkアプリやマネージドアプリ、CLR、フォームアプリと呼ばれ言語としてC++/CLIと言う名前のC++に別の文法が付け加えられた言語を使用するアプリケーションの作成方法が中心に書かれた本で、一冊目の本のChapter 14から16の内容もそうです。
C++とC++/CLIは別の言語でMFCと.NET FrameWorkは別のフレームワークです。そう意味でも過渡期な次期にMFCを選択された事になりますね。どちらを中心に使われるかよく検討される事をお勧めします。

言語とフレームワークの組み合わせについては以下のとおりです。
・C++とMFC
・C++/CLIと.NET FrameWork
・C++/CLIとMFC(どちらかと言うとマイナーな使い方です)
紹介する本も、どう使うか検討された後で紹介したいと思います。


269ポイント を手に入れた。

Name: 三郎  ..入門者(2,656ポイント)   Date: 2010/05/23(日) 17:14   No:52590     
Title: Re:素朴な疑問    
そうですか、話は完全に前後しますが一体私はどんなソフトを造ろうかと思っているかと云います。
ソフトとして、特にレベルの高いものでなく今、考えてさせられます。

私は産業界で開発現場でのパイロットプラントの一つ手前の段階のベンチプラントの制御監視の装置(簡単な演算、A/D変換、D/A変換、I・O、通信、ANN、表示・記録・集計、etc)をDOSで各社のインタフェースボードを使い適当に作っていました。
信頼性は左程問いません。要するに汎用の中央制御監視装置です。
このような措置を一つ作っておけば、どの様な現場にも容易にアレンジできます。

これを今回Winの環境で再現したく思います。

今回、通信はRS232、USB、LANでインタネットにも繋げれればとの思いもあります。
そしてこの装置に入れる現場からの入出力は、ルネサステクノロジーのワンチップマイコンを考えています。

現在の私の力では将来的にも無理かも分りません。



405ポイント を手に入れた。

Name: バグ  ..ハッカー(197,283ポイント)   Date: 2010/05/23(日) 17:57   No:52593     
Title: Re:素朴な疑問    
通信関係が必要になりそうならば、個人的にMFCよりは、.NETの方が楽かと思います。
そして、もし、.NETを選択するならば、C++よりもVBやC#の方が情報を入手しやすいですね。


75ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(166,463ポイント)   Date: 2010/05/23(日) 18:22   No:52596     
Title: Re:素朴な疑問    
マイコン関係は、たかぎさんの得意分野かも知れませんね。

ただ私の意見としては、こだわりを捨てればRS-232Cは下記のBASICの方が楽に扱えます。USBもマイコン側の都合がありますがCOMポートとして接続出来ればRS-232Cとして扱えます。

(仮称)十進BASICのホームページ
http://hp.vector.co.jp/authors/VA008683/
既に古い技術かも知れませんが、それだけに安心して使えます。Comポートも扱えますし、昔のBASICよりは遥かに親切です。
※ 書き忘れましたが、十進BASIC自体はまだ更新し続けられている現役のソフトです。文法的に古いって意味です。
http://hp.vector.co.jp/authors/VA008683/basic02.htm
それに64Kなんて制限もありません。 編集済み


189ポイント を落としてしまった。

Name: たかぎ [URL]  ..ハッカー(191,929ポイント)   Date: 2010/05/23(日) 19:03   No:52602     
Title: Re:素朴な疑問    
> マイコン関係は、たかぎさんの得意分野かも知れませんね。 

これはマイコンではありませんね。

まあ、いろいろ勧めても混乱するだけですし、Visual C++に決めたのならそれでやればよいと思います。
ただ、できれば外部ライブラリをうまく活用することをお勧めします。
すでにsoftyaさんが指摘されていますが、マイクロソフトの技術は賞味期限が短いので、先々まで使えるライブラリを選ぶ方が長い目で見れば楽だったりします。


148ポイント を落としてしまった。



Name: fank  ..ぴよぴよ(44ポイント)   Date: 2010/05/23(日) 00:02   No:52525       
Title: 敵の消滅エフェクトのDrawGraphに渡す座標パラメータについて    
こんばんは。
19項目の”敵の消滅エフェクトを作ってみよう”を読んでいて疑問に思ったことがあったので質問します。

敵のHPが0以下になった時、del_effect、effectの構造体に値を格納し、DrawGraphにeffectの構造体
の座標を渡しています。

この格納作業はどうして必要なのでしょうか?
DrawGraphに渡す座標なんかは敵のX,Y座標を直接渡せば同じなのではと思ったのですが…。

以上、宜しくお願い致します。


44ポイント を手に入れた。


Name: ru  ..かけだし(1,385ポイント)   Date: 2010/05/23(日) 00:41   No:52530     
Title: Re:敵の消滅エフェクトのDrawGraphに渡す座標パラメータについて    
エフェクトは敵の消滅位置から動かないから


4ポイント を落としてしまった。

Name: fank  ..ぴよぴよ(241ポイント)   Date: 2010/05/23(日) 16:27   No:52589     
Title: Re:敵の消滅エフェクトのDrawGraphに渡す座標パラメータについて    
ご回答ありがとうございます。

試しにDrawGraphの座標を敵の座標に書き換えてみるといろんなところにエフェクトが出現しました。

ただ、敵が死んだ時にフラグを落とす為、敵移動の処理は行われず、敵の座標を渡しても動かない
のではと思いました。
しかし、実際は死んだ後も敵の座標は動いていました。
一体、どのように動いているのでしょうか?

私の認識では敵データの登録をした後、フラグが立っている限りパターンに沿って動くというくらいしか
見えていません。

以上、宜しくお願い致します。


197ポイント を手に入れた。

Name: ru  ..かけだし(1,388ポイント)   Date: 2010/05/23(日) 18:18   No:52595     
Title: Re:敵の消滅エフェクトのDrawGraphに渡す座標パラメータについて    
http://dixq.net/rp/12.html
enemy_num_search
enemy_enter
enemy_act
関数を見ればわかるかも


49ポイント を落としてしまった。



Name: 深黒  ..ぴよぴよ(890ポイント)   Date: 2010/05/23(日) 11:09   No:52565       
Title: 初心者です    
http://dixq.net/g/03.html
このページを参考に、画像を出す事は出来たのですが、逆にこの出した画像を消すにはどうすればいいのでしょうか?


36ポイント を手に入れた。


Name: ru  ..かけだし(1,437ポイント)   Date: 2010/05/23(日) 11:36   No:52568     
Title: Re:初心者です    
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R4N4

2倍のポイントを手に入れた! 52ポイント を手に入れた。

Name: 深黒  ..ぴよぴよ(911ポイント)   Date: 2010/05/23(日) 12:24   No:52573     
Title: Re:初心者です    
返信ありがとうございます
やはりこういうのは全部消すしかないのでしょうか・・・?


21ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,192,918ポイント)   Date: 2010/05/23(日) 12:43   No:52578     
Title: Re:初心者です    
基本的に画面を全てクリアし、必要な物を書きなおすのが普通です。

(1),(2),(3),

という順番で書いた画像の(2)を消したいなら、画面を全て消した後

(1),(3),

という順番で描画します。

ゲームプログラミングの館の3章までだと疑問も出てくるでしょうが、
13章までのプログラムは基本的に書きません。
13章以降のプログラムを利用しますから、そこまでくれば疑問も晴れるかもしれません。


169ポイント を手に入れた。

Name: 深黒  ..ぴよぴよ(978ポイント)   Date: 2010/05/23(日) 17:36   No:52591     
Title: Re:初心者です    
そうですか…返信ありがとうございました

質問が変わりますが、例えば、1秒間待たせる(その状態であり続ける?)みたいな動作はどうプログラミングすればいいでしょうか?


67ポイント を手に入れた。

Name: 深黒  ..ぴよぴよ(990ポイント)   Date: 2010/05/23(日) 17:40   No:52592 解決!     
Title: Re:初心者です    
すみません。自己解決しました。(;−−)

12ポイント を手に入れた。



Name: ターボ  ..入門者(3,066ポイント)   Date: 2010/05/22(土) 19:19   No:52497       
Title: Visual Studio 2010 exress 日本語版    
こんばんは。Visual Studio 2010 exress 日本語版のダウンロードの仕方が解らないのですが、↓のURLからダウンロードできるとどこかのホームページに書いてあったのですが、ダウンロードの仕方がわかりません。なんか、ダウンロードしようにも日本語版は非表示?になっているように見えるのですが、まだダウンロードは出来ないのでしょうか?誰かわかる方がいらっしゃったら教えてください。

http://www.microsoft.com/japan/msdn/vstudio/express/


160ポイント を手に入れた。


Name: ターボ  ..入門者(3,128ポイント)   Date: 2010/05/22(土) 19:22   No:52499     
Title: Re:Visual Studio 2010 exress 日本語版    
すみません。Visual Studio 2010 exress日本語版では無くて、Visual Studio 2010 Express日本語版です。うまくタイピング出来て無かったです。

62ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(99,724ポイント)   Date: 2010/05/22(土) 20:31   No:52509     
Title: Re:Visual Studio 2010 exress 日本語版    
ぱっとみないですね・・・

評価版なら出てますよ
http://www.microsoft.com/japan/visualstudio/download


38ポイント を手に入れた。

Name: fatens  ..中級者(11,005ポイント)   Date: 2010/05/22(土) 21:09   No:52513     
Title: Re:Visual Studio 2010 exress 日本語版    
Web インストール (ダウンロード)をクリックして、あとは実行するだけで良いはずですが、
Visual C++ 2010 Expressだけを使いたいわけではないということでしょうか?

もし他のものもまとめてインストールしたいのであれば、
http://www.microsoft.com/express/downloads/
の All - Offline Install ISO image file からJapanese を選べば、
日本語版のisoイメージがダウンロードできると思います。


16ポイント を手に入れた。

Name: ターボ  ..入門者(3,282ポイント)   Date: 2010/05/23(日) 08:40   No:52564 解決!     
Title: Re:Visual Studio 2010 exress 日本語版    
Maさんfatensさん返信ありがとうございます。
fatensさんへ

>Visual C++ 2010 Expressだけを使いたいわけではないということでしょうか? 

はい。そうなんです。

>All - Offline Install ISO image file からJapanese を選べば、 
>日本語版のisoイメージがダウンロードできると思います。 

本当に大変助かりました。初歩的な質問に大変丁寧に対応していただき誠に感謝しています。


154ポイント を手に入れた。



Name: 堀江伸一  ..ぴよぴよ(109ポイント)   Date: 2010/05/22(土) 17:01   No:52485       
Title: 逆行列を求めたいのですが    
C#でN*N行列(大きくても7*7程度、行列の要素は実数)を取り扱っていて、この行列の逆行列を求めたいのですが、ヘルプを見ても適切な解説がありませんでした。

もしかしてC#の言語使用に、3*3を超える行列を取り扱う方法や逆行列を扱えるメソッドはないのでしょうか?


109ポイント を手に入れた。


Name: 組木紙織  ..比類無きプログラマー(82,182ポイント)   Date: 2010/05/22(土) 19:20   No:52498     
Title: Re:逆行列を求めたいのですが    
C#じゃなくても逆行列を簡単に計算出来る言語は少ないとおもいます。
(すくなくとも私は知らない)
有償・無償のライブラリを使うか、自作するしかないかと。
http://www1.bbiq.jp/sekiya_z/na/e01mpis.html


83ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(537,457ポイント)   Date: 2010/05/22(土) 19:35   No:52501     
Title: Re:逆行列を求めたいのですが    
 検索したら一発目にこれが出てきました。

Mad Control Lab : C#における行列計算ライブラリの作成 - livedoor Blog(ブログ)
http://blog.livedoor.jp/kazunori1110/archives/439959.html

 ざっと見てみたところ、行・列の数は指定可能で、逆行列もサポートしているようです。


101ポイント を手に入れた。

Name: 堀江伸一  ..ぴよぴよ(159ポイント)   Date: 2010/05/23(日) 08:31   No:52563     
Title: Re:逆行列を求めたいのですが    
ありがとうございます。
標準ライブラリの中にあったら楽だったのですがちょっと残念でした。
検討してみます。


50ポイント を手に入れた。



Name: lotus  ..ぴよぴよ(441ポイント)   Date: 2010/05/21(金) 22:49   No:52457       
Title: whileループでノ問題    
[1.1]教授のコメントのいみを理解し直したい。
[1.2]大学のプログラムの授業で、整数を素因数分解するプログラムを作った。
[1.3]whileループで,iが代入されないまま参照されるのを直す。
[1.4]コンパイルすると正しく起動するが 、教授のコメントがわからなくて困っている。    
[2] 環境  
[2.1] OS : Windows vista
[2.2] コンパイラ名 :gcc
[3] その他 
 ・授業で習った程度で、ほとんどわからない状態です

よろしくお願いしますm(__)m

プログラム本体
#include<stdio.h>


int prime(int x);
int getprime(int x); 
void printfact(int x); 


int main(){
  int input;
  printf("正数を入力: "); 
  scanf("%d",&input); 
  if(input < 1){ 
    printf("BAD \n");
    return 0;
  }
  printfact(input); 
  return 0;
}

int prime(int x){
  int k,i;
  
  if(x<2) return 0;
  
  for(k=x-1;k>1;k--){
    if(x%i == 0){
      return 0;
    }
  }
  
  return 1;
}


int getprime(int x){
  int i,k;
  if(x<2) return 0;
  
  
  for(k=1;x>=k;k++){ 
    if(x%k == 0){
      if(prime(k)) return k; 
    }
  }
  return 0; //0を返す
}


void printfact(int x){
  int i;
  char c='='; 
 
  printf("%d",x); 
  
  if(x==1) printf("=1"); 
  else if(x!=0){
    while(i!=0){
      i=getprime(x); 
      if(i!=0){
    printf("%c%d",c,i); 
    c = '*'; 
    x = x/i; 
      }
    }
  }
  printf("\n"); 
  return;
}


441ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(189,706ポイント)   Date: 2010/05/21(金) 22:51   No:52459     
Title: Re:whileループでノ問題    
> 教授のコメントのいみを理解し直したい。 

とのことですが、教授のコメントがわからないと、どうすることもできません。


22ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(83,016ポイント)   Date: 2010/05/21(金) 23:03   No:52461     
Title: Re:whileループでノ問題    
> [1.1]教授のコメントのいみを理解し直したい。

> return 0; //0を返す

コメントって、↑これしかないじゃん。
最悪のコメントに近いです。
(1を返す、などと書いてあったら本当に最悪)
教授の真意は量り知れませんが、
直すとしたら、コメントを削除かな。


> [3] その他 
>  ・授業で習った程度で、ほとんどわからない状態です

何が判らないのですか?
あるいは、どこまでなら判るのですか?


88ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,077ポイント)   Date: 2010/05/21(金) 23:09   No:52462     
Title: Re:whileループでノ問題    
> > return 0; //0を返す 
> コメントって、↑これしかないじゃん。 

まさかとは思いましたが、本当にそうなのかもしれませんね。
ここから読み取れるのは、このソースが純粋なC90のものではなく、C99か、GCC拡張を用いているか、そのどちらかだということですね。


87ポイント を手に入れた。

Name: lotus  ..ぴよぴよ(499ポイント)   Date: 2010/05/21(金) 23:54   No:52463     
Title: Re:whileループでノ問題    
コメントは「whileループで,iが代入されないまま参照されています。」
です。

教科書を見てもこのプログラム作るのにかなりかかりました。

return 0;
をどうしたらいいんですか?

無知ですみません。


58ポイント を手に入れた。

Name: 組木紙織  ..比類無きプログラマー(82,027ポイント)   Date: 2010/05/22(土) 00:07   No:52464     
Title: Re:whileループでノ問題    
もしかして、
コメントって、ソースコード中のコメントではなくて、提出したソースコードに対する
先生のコメントという意味ですか?

それで
>コメントは「whileループで,iが代入されないまま参照されています。」 
このいみは、

void printfact(int x){ 
  int i; 
から
while(i!=0){ 
のまでの間にiに値を入れてないので、プログラムが正しく動かないかもしれませんよという意味です。



145ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,089ポイント)   Date: 2010/05/22(土) 00:13   No:52465     
Title: Re:whileループでノ問題    
> コメントって、ソースコード中のコメントではなくて、提出したソースコードに対する 
> 先生のコメントという意味ですか? 

普通はそうでしょう。


12ポイント を手に入れた。

Name: lotus  ..ぴよぴよ(574ポイント)   Date: 2010/05/22(土) 00:21   No:52466     
Title: Re:whileループでノ問題    
説明不足ですみません。

なるほど、そういうことなんですか。
ずっとwhile文のなかを見ていました。

意味はわかったのですが、それを解決するためには、
どのようにしたらよいのですか?

  i=getprime(x);
これを加えたらよいのでしょうか?


75ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,297ポイント)   Date: 2010/05/22(土) 00:32   No:52467     
Title: Re:whileループでノ問題    
というか、心を持たないコンパイラの警告メッセージじゃあるまいし、先生のコメントも的を射てませんね。
iが初期化されていないのは、printfactだけでなく、primeもそうです。
何か初期値を与えればよいというものではなく、もっと根本的な問題があります。

まずはアルゴリズムを確認し直してください。
Cがそれほど得意ではないのであれば、計算の手順を日本語で正確に記述してから、Cに翻訳することをお勧めします。


208ポイント を手に入れた。

Name: lotus  ..ぴよぴよ(681ポイント)   Date: 2010/05/22(土) 00:55   No:52468     
Title: Re:whileループでノ問題    
たかぎさん
早いコメントありがとうございます。

>iが初期化されていないのは、printfactだけでなく、primeもそうです。 
ということですが、
初期化しないとしたらどのようにしてやればいいのですか?

また、
日本語からCに翻訳とのことですが、そういうことはまったく習っていないです。


107ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(48,350ポイント)   Date: 2010/05/22(土) 01:18   No:52469     
Title: Re:whileループでノ問題    
こんばんは。

以前から気になっていた事があるので
lotusさんの、このご質問に便乗させて頂きます事、ご勘弁下さい。
なお、新しいスレをたてた方が良い様でしたら、ご指導の程、宜しくお願い致します。(_ _)

OS:Windows NT 環境:VC++2008(SP1)

lotusさんの提示されたソースを自分なりに、編集させて頂きました。
編集させて頂いたソースを

try.c
try.cpp

それぞれ、試してみました。
私の環境で、それぞれのファイルで試した結果のエラーや警告を報告させて頂きます。

私の以下のソース内での質問:(↓以前から、これが疑問に思ってた事なのですが^^;)
「IMEの設定で、半角文字設定で押した時のTabキーと
 全角文字設定で押した時のTabキー」の違いはありますか?
 (↑便乗させて頂いた上での質問です。ごめんなさい。)
すみません。試させて下さい。
Tabやタグが、意図通りに表示できなければ、必要であれば編集させて頂きます。(謝

//try.c

#include<stdio.h>                        // 1行目
                                        // 2行目(空行)
int prime(int x);                        // 3行目
int getprime(int x);                    // 4行目
void printfact(int x);                    // 5行目
                                        // 6行目(空行)
int main(){                                // 7行目
                                        // 8行目(空行)
    int input;                            // 9行目
                                        //10行目(空行)
    printf("正数を入力: ");                //11行目
    scanf("%d",&input);                    //12行目
                                        //13行目(空行)
    if(input < 1){                        //14行目
                                        //15行目(空行)
        printf("BAD \n");                //16行目
                                        //17行目(空行)
        return 0;                        //18行目
    }                                    //19行目
                                        //20行目(空行)
    printfact(input);                    //21行目
                                        //22行目(空行)
    return 0;                            //23行目
}                                        //24行目
                                        //25行目(空行)
int prime(int x){                        //26行目
                                        //27行目(空行)
    int k,i;                            //28行目
                                        //29行目(空行)
    if(x<2) return 0;                    //30行目
                                        //31行目(空行)
    for(k=x-1;k>1;k--){                    //32行目
                                        //33行目(空行)
        if(x%i == 0){                    //34行目
                                        //35行目(空行)
            return 0;                    //36行目
        }                                //37行目
    }                                    //38行目
                                        //39行目(空行)
    return 1;                            //40行目
}                                        //41行目
                                        //42行目(空行)
int getprime(int x){                    //43行目
                                        //44行目(空行)
    int i,k;                            //45行目
                                        //46行目(空行)
    if(x<2) return 0;                    //47行目
                                        //48行目(空行)
    for(k=1;x>=k;k++){                    //49行目
                                        //50行目(空行)
        if(x%k == 0){                    //51行目
                                        //52行目(空行)
            if(prime(k)) return k;        //53行目
        }                                //54行目
    }                                    //55行目
                                        //56行目(空行)
    return 0; //0を返す                //57行目
}                                        //58行目
                                        //59行目(空行)
void printfact(int x){                    //60行目
                                        //61行目(空行)
    int i;                                //62行目
    char c='=';                            //63行目
                                        //64行目(空行)
    printf("%d",x);                        //65行目
                                        //66行目(空行)
    if(x==1) printf("=1");                //67行目
    else if(x!=0){                        //68行目
                                        //69行目(空行)
        while(i!=0){                    //70行目
                                        //71行目(空行)
            i=getprime(x);                //72行目
                                        //73行目(空行)
            if(i!=0){                    //74行目
                                        //75行目(空行)
                printf("%c%d",c,i);        //76行目
                                        //77行目(空行)
                c = '*';                //78行目
                x = x/i;                //79行目
            }                            //80行目
        }                                //81行目
    }                                    //82行目
                                        //83行目(空行)
    printf("\n");                        //84行目
                                        //85行目(空行)
    return;                                //86行目
}


------------------------------------------------------------------------------------------------

1>------ ビルド開始: プロジェクト: try, 構成: Debug Win32 ------
1>コンパイルしています...
1>try.c (←誤字編集)
warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. 
 To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 'scanf' の宣言を確認してください。
1>(略)(45) : warning C4101: 'i' : ローカル変数は 1 度も使われていません。
1>(略)(34) : warning C4700: 初期化されていないローカル変数 'i' が使用されます
1>(略)(70) : warning C4700: 初期化されていないローカル変数 'i' が使用されます
1>リンクしています...
1>マニフェストを埋め込んでいます...
1>ビルドログは(略)" に保存されました。
1>try - エラー 0、警告 4
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
 編集済み


349ポイント を手に入れた。

Name: 組木紙織  ..比類無きプログラマー(82,099ポイント)   Date: 2010/05/22(土) 01:23   No:52470     
Title: Re:whileループでノ問題    
>> コメントって、ソースコード中のコメントではなくて、提出したソースコードに対する  
>> 先生のコメントという意味ですか?  

>普通はそうでしょう。 
私はそのような経験がなかったから思いつかなかったのです。
大学時代にコードの添削を受けたことなんてないです。

lotusさんへ
>日本語からCに翻訳とのことですが、そういうことはまったく習っていないです。
C言語を習うことが日常の言語からC言語への翻訳方法を習うことではないですか?


素因数分解を通常どのようにやりますか?
まずはを日本語(+数式)で表現します。
それをC言語に直してあげればプログラムが出来ます。



72ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,355ポイント)   Date: 2010/05/22(土) 01:36   No:52471     
Title: Re:whileループでノ問題    
> 私はそのような経験がなかったから思いつかなかったのです。 
> 大学時代にコードの添削を受けたことなんてないです。 

ソースコードレビューやら静的検証やらで、いうなれば所見が出てくることがあるわけですが、ここでいうコメントはそっちの意味ですね。

> >日本語からCに翻訳とのことですが、そういうことはまったく習っていないです。 
> C言語を習うことが日常の言語からC言語への翻訳方法を習うことではないですか? 

慣れてくれば最初からCで考えますが、不慣れなうちはそれしかありませんね。
英語なんかでもそうですよね。


58ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(48,450ポイント)   Date: 2010/05/22(土) 01:36   No:52472     
Title: Re:whileループでノ問題    
<<No:52469
醜すぎるソースで申し訳御座いません。

//try.cpp の報告 

 1>------ ビルド開始: プロジェクト: training, 構成: Debug Win32 ------
1>コンパイルしています...
1>try.cpp
1>(略)visual studio 2008\projects\training\p46\osarai4.cpp(12) : warning C4996: 'scanf': 
 This function or variable may be unsafe. Consider using scanf_s instead. 
 To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 'scanf' 
 の宣言を確認してください。
1>(略)(45) : warning C4101: 'i' : ローカル変数は 1 度も使われていません。
1>(略)(34) : warning C4700: 初期化されていないローカル変数 'i' が使用されます
1>(略)(70) : warning C4700: 初期化されていないローカル変数 'i' が使用されます
1>リンクしています...
1>マニフェストを埋め込んでいます...
1>(略)Visual Studio 2008\Projects\training\Debug\BuildLog.htm" に保存されました。
1>try - エラー 0、警告 4
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========

こんな感じでした。
お騒がせしました。おやすみなさい。


100ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(48,554ポイント)   Date: 2010/05/22(土) 01:42   No:52473     
Title: Re:whileループでノ問題    
もしかして・・・?(激汗

もしかして、このスレのQ∩Aって
お身内の方々の受け答えだったのですか?(汗
そうでしたら、余計な口出しをして申し訳御座いませんでした。
もし、そうでしたら私のレス、お手数ですが早急に全て削除お願い致します。
失礼します。(_ _)


104ポイント を手に入れた。

Name: sizuma [URL]  ..プログラマー(39,682ポイント)   Date: 2010/05/22(土) 01:52   No:52474     
Title: Re:whileループでノ問題    
>>iが初期化されていないのは、printfactだけでなく、primeもそうです。 
>ということですが、
>初期化しないとしたらどのようにしてやればいいのですか? 

もしかして、各関数で使ってるiとかkが共通だと思ってませんか?
ぱっと見た感想です。


>ムンバさん
ここで質問する意味は分かりませんが、使ってる文字コード表を見ればタブが一つしかないのが分かると思いますけど・・・
もしかしたらいろんなタブがある文字コードがあるのかも知れないのです。
ないとは思いますが。
僕のブラウザの文字エンコーディングを見ると、見慣れぬ文字コードも多々あるので。

#include<stdio.h>
int main(){
    printf("%x\n",'    ');
    printf("%x\n",'    ');
  return 0;
}

こんなんでも結果は分かりますね。
もしかして質問の意図と違うかもしれません。


219ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,430ポイント)   Date: 2010/05/22(土) 01:52   No:52475     
Title: Re:whileループでノ問題    
> お身内の方々の受け答えだったのですか?(汗 

そんなことはありませんので、ご心配なく。

ムンバさんが確認してくださった警告メッセージが、私がいうところの「心を持たないコンパイラの警告メッセージ」に相当します。


75ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,462ポイント)   Date: 2010/05/22(土) 01:55   No:52476     
Title: Re:whileループでノ問題    
うっかりしていました。

> ムンバさん

Cということなので、C++でコンパイルしてはいけません。


32ポイント を手に入れた。

Name: sizuma [URL]  ..プログラマー(39,683ポイント)   Date: 2010/05/22(土) 02:00   No:52477     
Title: Re:whileループでノ問題    
あぁ、たかぎさんのレスで理解しました。
コンパイラの吐き出すメッセージを載せるついでにってことですね。


1ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(48,580ポイント)   Date: 2010/05/22(土) 09:55   No:52479     
Title: Re:whileループでノ問題    
おはようございます!

たかぎさん、sizumaさん、了解しました。
ご解説ありがとうございます。

---追加---
sizumaさん、例文ありがとうございます。
先ほどは、急いでいたもので
編集・追加になってしまいました。
失礼しました。


---脱字編集--- 編集済み


26ポイント を手に入れた。

Name: lotus  ..ぴよぴよ(801ポイント)   Date: 2010/05/23(日) 02:31   No:52533     
Title: Re:whileループでノ問題    
コメントが遅くなりました。

sizumaさん
>もしかして、各関数で使ってるiとかkが共通だと思ってませんか? 
>ぱっと見た感想です。

そうは思っていません。

どのようにしたらいいのか見当がつきません。
どのようにしたら、
教授の「whileループで,iが代入されないまま参照されています。」
を直すことができるのでしょうか?

よければ教えていただけないでしょうか?


120ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,729ポイント)   Date: 2010/05/23(日) 02:52   No:52534     
Title: Re:whileループでノ問題    
> どのようにしたら、 
> 教授の「whileループで,iが代入されないまま参照されています。」 
> を直すことができるのでしょうか? 

それを直すだけなら、変数の定義時に初期化子を指定するか、定義直後に何らかの値を代入すれば済みます。
ただし、ここで考えないといけないのは、教授のコメントに対応することが目的なのか、まともに動かすことが目的なのかということです。


15ポイント を手に入れた。

Name: lotus  ..ぴよぴよ(957ポイント)   Date: 2010/05/23(日) 03:07   No:52535     
Title: Re:whileループでノ問題    
たかぎさんありがとうございます。
>それを直すだけなら、変数の定義時に初期化子を指定するか、定義直後に何らかの値を代入すれば済みます。
ということは、

int i = 0;
int k = 0;

としたらいいのですよね?

>ここで考えないといけないのは、教授のコメントに対応することが目的なのか、まともに動かすことが目的なのかということです。 

ということですが、
初めのソースをコンパイルして実行すると、正しく動きます。
上の方でたかぎさんは、根本的な問題があるとおっしゃいましたが、
それはどういう意味なのですか?


156ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(49,595ポイント)   Date: 2010/05/23(日) 03:20   No:52536     
Title: Re:whileループでノ問題    
おはようございます〜?!

>どのようにしたら、 
>教授の「whileループで,iが代入されないまま参照されています。」 
>を直すことができるのでしょうか?

教授のコメント:「whileループで,iが代入されないまま参照されています。」

 ,i だと参照されないのでは無いのでしょうか?

>Title: whileループでノ問題 

 の ノ に、何か意味が、あるいは訴えたい事があるのかもしれません。

,i は、代入されてません。

,i を i に変えて、教授に「whileループで、iが代入されないまま参照されています。」
の間違えなのではないでしょうか?
と、質問されては如何でしょうか。
今日は、日曜日なので無理かもしれませんが、次回の通学時に
その教授が見つかれば、お聞きしては如何ですか?


235ポイント を手に入れた。

Name: lotus  ..かけだし(1,131ポイント)   Date: 2010/05/23(日) 03:31   No:52537     
Title: Re:whileループでノ問題    
ムンバさん
おはようございますw

>Title: whileループでノ問題 
の ノ は変換ミスです。 
すみません。

教授のコメントは正しくは
「whileループの最初で,iが代入されないまま参照されています.」
こうでした。
間違っていてすみません。


2倍のポイントを手に入れた! 174ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(49,695ポイント)   Date: 2010/05/23(日) 03:58   No:52538     
Title: Re:whileループでノ問題    
おはようございます〜!
カラス鳴いてますしね。^^

教授のコメントの違いが知りたいので、お時間ある時にでも
ご解説お願い致します。

>教授の「whileループで,iが代入されないまま参照されています。」
が、↓
>教授の「whileループの最初で,iが代入されないまま参照されています.」

に変更されてます。

---編集部位・突っ込むつもりは無いんです。---
半角/全角の記号に変換(変更)されてる事が気になっただけです。
おやすみなさい。
 編集済み


100ポイント を手に入れた。

Name: lotus  ..かけだし(1,135ポイント)   Date: 2010/05/23(日) 04:09   No:52539     
Title: Re:whileループでノ問題    
ムンバさん

コメントの違いは、教授のコメントを正しく書き直しただけなので
僕にもよくわかりません。

教科書を読んでも描いてなかったので質問なのですが、
初期化子とは、何のことなのですか?
int i = 0;
のようにするのとは違うのですか?


4ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,750ポイント)   Date: 2010/05/23(日) 04:12   No:52540     
Title: Re:whileループでノ問題    
> 初めのソースをコンパイルして実行すると、正しく動きます。 

たまたま動くことがあるのかもしれませんが、私の手元ではまともに動きません。


21ポイント を手に入れた。

Name: lotus  ..かけだし(1,262ポイント)   Date: 2010/05/23(日) 04:18   No:52544     
Title: Re:whileループでノ問題    


>教科書を読んでも描いてなかったので質問なのですが、 
>初期化子とは、何のことなのですか? 
i>nt i = 0; 
>のようにするのとは違うのですか? 

たかぎさん

>たまたま動くことがあるのかもしれませんが、私の手元ではまともに動きません

そうなんですか!?

>変数の定義時に初期化子を指定するか、定義直後に何らかの値を代入すれば済みます。

とのことですが、ネットでも初期化子について調べていたのですが、
初期化子のことがよくわかりません。
教えていただけないでしょうか?


127ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(49,922ポイント)   Date: 2010/05/23(日) 04:21   No:52545     
Title: Re:whileループでノ問題    
その教授のコメントは見るたびに

. が 。

,; が , ;
に、変わってしまう
lotusさんにも解らない、教授のコメントなんですね。
理解できました。再度ありがとうございました。
おやすみなさい。

===================================================

以降、lotusさんの、再度ご質問

>教科書を読んでも描いてなかったので質問なのですが、 
>初期化子とは、何のことなのですか? 
>int i = 0; 
>のようにするのとは違うのですか?



227ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,794ポイント)   Date: 2010/05/23(日) 04:27   No:52546     
Title: Re:whileループでノ問題    
> ネットでも初期化子について調べていたのですが、 初期化子のことがよくわかりません。 

ネットもよいですが、体系立った学習にはまともな書籍を使うことをお勧めします。


42ポイント を手に入れた。

Name: lotus  ..かけだし(1,323ポイント)   Date: 2010/05/23(日) 04:27   No:52547     
Title: Re:whileループでノ問題    
もしよろしければ、
初めに書いたソースを
正しく書き直してくれないでしょうか?

初期化子についても教えてもらえるとうれしいのですが・・・・・


61ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,808ポイント)   Date: 2010/05/23(日) 04:28   No:52548     
Title: Re:whileループでノ問題    
> 初めに書いたソースを 
> 正しく書き直してくれないでしょうか? 

それはあなたの仕事です。


14ポイント を手に入れた。

Name: lotus  ..かけだし(1,433ポイント)   Date: 2010/05/23(日) 04:30   No:52549     
Title: Re:whileループでノ問題    
昨年度の後期に買ったC言語入門という教科書を読んでみたのですが、初期化については書いてあったのですが、初期化子についてはかいてなかったためネットでも調べてみたのですが、初期化子がどのようなものかわからなかった次第です><


110ポイント を手に入れた。

Name: lotus  ..かけだし(1,434ポイント)   Date: 2010/05/23(日) 04:34   No:52550     
Title: Re:whileループでノ問題    
たかぎさん
その通りです
甘えてしまい申し訳ないです。


1ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,900ポイント)   Date: 2010/05/23(日) 04:38   No:52553     
Title: Re:whileループでノ問題    
> 初期化子についても教えてもらえるとうれしいのですが・・・・・

一応これだけ...

初期化子というのは、オブジェクトを定義する際に、オブジェクトの初期値を指定するためのものです。

int a = 123;
char b[] = "abc";
double c[] = { 1.0, 2.3, 4.5 };

上記のようなオブジェクトの定義があれば、123、"abc"、{ 1.0, 2.3, 4.5 }がそれぞれ初期化子になります。


92ポイント を手に入れた。

Name: lotus  ..かけだし(1,550ポイント)   Date: 2010/05/23(日) 04:44   No:52557     
Title: Re:whileループでノ問題    
たかぎさん
ありがとうございます
初期化したその値のことを初期化子というんですね。

とりあえず、ここで初期化子を与えたプログラムソースを提出してやりたいと思います。

ながながと超初心はに付き合っていただきありがとうございますm(__)m






116ポイント を手に入れた。

Name: lotus  ..かけだし(1,579ポイント)   Date: 2010/05/23(日) 05:31   No:52559 解決!     
Title: Re:whileループでノ問題    
みなさんありがとうございましたm(__)m

いったん提出してみて教授の採点を待ってみます。


29ポイント を手に入れた。

Name: 組木紙織  ..比類無きプログラマー(82,565ポイント)   Date: 2010/05/23(日) 08:12   No:52561     
Title: Re:whileループでノ問題    
どんな値で初期化しても、正しい結果が出るとは思えないのですが。。。

参考までに、サンプルプログラムを書いてみました。
これを解析すれば正しく動くプログラムが作れるはずです。

入力値が2以上のときした正しくうごかない(エラー処理はしてない)のと、
一部実装依存かなと思うところがありますが(確認はしてない)、それは取り合えず無視ということで。

#include <stdio.h>
#define PRINT(x,y)(printf("%d : %d\n",x,y))
void f(int in,int num,int count)
{
    if(in<=1?PRINT(num,count),1:0
        +in%num==0?f(in/num,num,count+1),1:0)return;
    (count!=0)?PRINT(num,count),count=0:1;
    f(in,num+1,count);
}
int main()
{
    f(1008,2,0);
    return 0;
}

/*********************/
追記
一つ言い忘れてましたが、これをそのまま提出しない方がいいと思います。 編集済み


293ポイント を手に入れた。



Name: ナギダ  ..ぴよぴよ(85ポイント)   Date: 2010/05/22(土) 22:28   No:52522       
Title: 無題    
今銃を使ったアクションゲームを製作しているのですが
弾丸を配列で生成して、発射するとフラグオン、射程外まで飛んだらオフにするという方法で
やっているのですが

発射するたびにnewで生成して、射程外になったらdeleteで削除するという方法の方が効率が良いのでしょうか?



85ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(190,752ポイント)   Date: 2010/05/23(日) 04:16   No:52543     
Title: Re:無題    
情報が少なすぎます。
利用規約を熟読した上で、必要な情報を補足してください。


43ポイント を落としてしまった。



Name: やっくん  ..プログラマー(26,694ポイント)   Date: 2010/05/22(土) 18:08   No:52490       
Title: C言語:メモリの確保    
メモリの確保について教えていただけないでしょうか。

言語:C言語
コンパイラ:gccまたはVC++2008 


char *p[10] = {"str1"."str2","str3"};

この場合はコンパイラが自動的にポインタ変数のメモリを静的確保していて、

char *p[10];

この場合はポインタ変数のメモリが確保されないので上と同じような動作を作りたい場合は自分でメモリを動的に確保して使用する、と思っておりました。

しかし、

p = (char**)calloc(3, sizeof(char*));

このような記述をしてもコンパイラに通りません。

ただ単に p と表記した場合はchar型ポインタのポインタになっていると思っていましたが、違うのでしょうか?

もし、違うのならこの場合どのようにメモリを確保することが正しいでしょうか?

いつもは以下のように行っていますが、上の方法でできないか気になったのでよろしくお願いします。

int i;
char **p;
p = (char **)calloc(3, sizeof(char*));
for(i = 0; i < 3; i++)
    p[i] = (char *)calloc(10, sizeof(char));


 編集済み


366ポイント を手に入れた。


Name: box  ..ハッカー(153,001ポイント)   Date: 2010/05/22(土) 18:45   No:52492     
Title: Re:C言語:メモリの確保    
> 上と同じような動作を作りたい場合は自分でメモリを動的に確保して使用する、と思っておりました。

大きな間違いです。
上と同じようにしたければ、

p[0] = "str1";
p[1] = "str2";
p[2] = "str3";

と書くだけです。
malloc系の関数を使う必要など、どこにもありません。

上と下の違いは、
上:配列の定義時に、初期化も行なっている
下:配列を定義しているだけで、初期化はしていない
です。


98ポイント を手に入れた。

Name: やっくん  ..プログラマー(27,082ポイント)   Date: 2010/05/22(土) 19:16   No:52496     
Title: Re:C言語:メモリの確保    
boxさん返信ありがとうございます。

char *p[10];

と宣言した場合、メモリはどのように確保されているのかがわかりません。

boxさんの記述を見ると、まだこの時点ではメモリ確保はされておらず、『コンパイル時に値を代入する処理を行っている際に随時メモリは確保されている』ということでいいでしょうか?

また、

char *p[10];

この記述でプログラム実行中に動的メモリを確保するにはどうすれば良いでしょうか?

実行中にmallocなどを使わずに

p[0] = "str1"; 
p[1] = "str2"; 
p[2] = "str3"; 



とするのはメモリ領域が取られてないので不可能ですよね。


179ポイント を手に入れた。

Name: box  ..ハッカー(153,225ポイント)   Date: 2010/05/22(土) 20:27   No:52508     
Title: Re:C言語:メモリの確保    
> char *p[10];

> と宣言した場合、メモリはどのように確保されているのかがわかりません。

どうしてですか?
配列の要素がchar型へのポインターである、というだけで、
int p[10];
などのような、配列の要素がポインター以外の場合と本質的には全く同じです。

> boxさんの記述を見ると、まだこの時点ではメモリ確保はされておらず、『コンパイル時に値を代入する処理を行っている際に随時メモリは確保されている』ということでいいでしょうか?

いいえ。間違いです。
char *p[10];
と書いた時点で、char型へのポインター10個分を要素とする配列を
メモリーに確保します。

> 実行中にmallocなどを使わずに

> p[0] = "str1"; 
> p[1] = "str2"; 
> p[2] = "str3"; 
> ・
> ・

> とするのはメモリ領域が取られてないので不可能ですよね。

できますよ。実験してみてください。
ていうか、上で書いたとおり、

int p[10];
と定義だけしておいて、実行中に
p[0] = 123;
p[1] = 456;
p[2] = 789;
のように書くのと本質的には同じ話。 編集済み


2倍のポイントを手に入れた! 224ポイント を手に入れた。

Name: やっくん  ..プログラマー(27,377ポイント)   Date: 2010/05/22(土) 22:03   No:52516     
Title: Re:C言語:メモリの確保    
ありがとうございます。

すみません、大きな勘違いをしておりました。

char *str[10];

をポインタの配列と捉えていませんでした(^^;

> p[0] = "str1";  
> p[1] = "str2";  
> p[2] = "str3";  

しかし、このようにするには以下のようにメモリ確保は必要ないのでしょうか?

p[0] = (char *)calloc(256, sizeof(char));
p[1] = (char *)calloc(256, sizeof(char));
p[2] = (char *)calloc(256, sizeof(char));


141ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,626ポイント)   Date: 2010/05/22(土) 22:18   No:52519     
Title: Re:C言語:メモリの確保    
>  しかし、このようにするには以下のようにメモリ確保は必要ないのでしょうか? 

ありません。



9ポイント を手に入れた。

Name: やっくん  ..プログラマー(27,643ポイント)   Date: 2010/05/23(日) 00:28   No:52528     
Title: Re:C言語:メモリの確保    
たかぎさん、返信ありがとうございます。

>ありません。
代入文で文字列を代入したときはコンパイラが自動的にメモリ確保をしてくれてると解釈しました。

しかし、以下のソースをコンパイルし実行するとエラーとなります。
ここでは文字を代入ではなくstrcpyを用いています。
この場合は確保する必要がありますか?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    int i;
    char *str[10];

    //str[0] = (char *)calloc(10, sizeof(char)); // これを入れたら通る
    //str[1] = (char *)calloc(10, sizeof(char));  // これを入れたら通る
    //str[2] = (char *)calloc(10, sizeof(char));  // これを入れたら通る
    
    strcpy(str[0], "str1");
    strcpy(str[1], "str2");
    strcpy(str[2], "str3");

    printf("str[0] = %s\n", str[0]);
    printf("str[1] = %s\n", str[1]);
    printf("str[2] = %s\n", str[2]);

    return 0;
}



266ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(190,714ポイント)   Date: 2010/05/23(日) 00:31   No:52529     
Title: Re:C言語:メモリの確保    
> 文字列を代入したときは

「文字列リテラル」を代入した場合です。

> この場合は確保する必要がありますか? 

こちらは当然何らかの方法でメモリを確保しなければなりません。


4ポイント を手に入れた。

Name: やっくん  ..プログラマー(27,672ポイント)   Date: 2010/05/23(日) 01:19   No:52531 解決!     
Title: Re:C言語:メモリの確保    
boxさん、たかぎさん、ありがとうございました。

解決することができました。


29ポイント を手に入れた。



Name: M  ..かけだし(1,804ポイント)   Date: 2010/05/22(土) 22:12   No:52517       
Title: 無題    
こんばんは。
VisualStudio2008をDLしようと思って下記URLを見たのですが、多すぎて自分にはどれをDLすればいいのか分かりません。
一番上にある開発者用トライアル版でいいのでしょうか?

http://www.microsoft.com/japan/sqlserver/2008/r2/downloads/default.mspx


70ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(190,710ポイント)   Date: 2010/05/22(土) 22:20   No:52520     
Title: Re:無題    
そこはSQL Server 2008 R2のダウンロードであって、そもそもVisual Studioではありません。
なお、Visual Studio 2008は評価版以外はダウンロードできません。パッケージを購入してください。
Visual C++ 2008 Express Edition等の話しであれば、英語サイトからダウンロードできるはずです。


84ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(99,980ポイント)   Date: 2010/05/22(土) 22:22   No:52521     
Title: Re:無題    
注:質問者は私ではありません。


冗談はいいとして、何をDLするかはあなたの目的で左右します。
あなたがDLしようとしているのは、Microsoft SQL Server 2008 です。

とりあえず
Visual Studio 2008 Express Edition 2008 なら
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=3254c868-bcb9-412c-95c6-d100c872ec60


ここからDLできます。

DXライブラリを使ってゲーム開発するだけなら
Visual C++ でOKです。


122ポイント を手に入れた。

Name: M  ..かけだし(1,759ポイント)   Date: 2010/05/22(土) 22:36   No:52524 解決!     
Title: Re:無題    
龍神録プログラミングの館のslnを開くためのものを探してたのですが間違ったものを見てたみたいですね><
早速DLしてきます、ありがとうございました! 編集済み


45ポイント を落としてしまった。



Name: NJ  ..ぴよぴよ(324ポイント)   Date: 2010/05/22(土) 17:39   No:52487       
Title: BOX2Dのスケール変換    
質問失礼します。

OS:WindowsXP Home
コンパイラ?:VisualStudio2005

言語、ライブラリ:
C++
DXライブラリ(3.02c)
Box2D(2.0.1)

現在のC知識:
C、C++歴はおよそ1年半で、オブジェクト指向等の
基本的な点は抑えていると考えております。

-----

現在、上記ライブラリ及び言語を使用し、ゲームを作成中なのですが、

1m → 1pixel を 1m → 100pixel に変換するような、
”DXライブラリ⇔BOX2Dでのスケール変換がどうにも考えつかず”困っております。

そのため、Box2Dの仕様上、物体のサイズ[0.1m〜10.0m]でのシミュレーションが適切に動作するにも関わらず、10.0m以上の物体を使わざるを得ない状況です。


今のところ、物体の生成や移動はBox2D、
描画関係は全てDXライブラリを使用しております。

どのあたりのソースを提示するべきなのか、分かりませんので、
必要そうなソースがあるようでしたら、教えていただきますよう御願申し上げます。


324ポイント を手に入れた。


Name: 組木紙織  ..比類無きプログラマー(82,272ポイント)   Date: 2010/05/22(土) 21:31   No:52515     
Title: Re:BOX2Dのスケール変換    
DXライブラリで表示するためにでBOX2Dから座標を受け取っているんですよね。
なら、表示するときに常に定数倍するようにすればいいのではないでしょうか。
DXライブラリからBOX2Dにデータを送るときは表示するはその定数の逆数倍すればいいのではないですか。




90ポイント を手に入れた。

Name: NJ   Date: 2010/05/26(水) 11:45   No:524871274841918 解決!     
Title: Re:BOX2Dのスケール変換    
お返事ありがとうございました。
返事が遅くなってしまい申し訳ありません。

仰る通りやってみたところ、うまい具合に出来ましたので報告を…
ありがとうございました。

ついでにソースも残しておきます

―――――

定義-----------------------------------------

//1cmを1pixelにする
extern const float SCALE = 1/0.01;

作成時---------------------------------------

        //フィルター設定
        b2FilterData filt;
        filt.categoryBits = 0x0001
        filt.maskBits = 0x0001
        filt.groupIndex = 0;

        //bodyDefを作成
        b2BodyDef bodydef;
        bodydef.position.Set(x / SCALE,y / SCALE);

        //bodyを作成
        b2Body* newbox = world->CreateBody(&bodydef);
        info->setMe(newbox);

        //polygondefを作成
        b2PolygonDef polygondef;
        polygondef.SetAsBox(width / SCALE,height / SCALE);
        polygondef.friction = friction;
        polygondef.restitution = restitution;
        polygondef.density = density;
        polygondef.isSensor = isSensor;
        polygondef.filter = filt;

        //worldにshapeを生成
        newbox->CreateShape(&polygondef);

        //計算を行う
        newbox->SetMassFromShapes();

描画時----------------------------------------
//b2DebugDrawクラスを継承した
//DebugDrawクラス

void DebugDraw::DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color)
{
    int mode;//一時BLEND記録領域
    int parm;//一時BLENDパラメータ記録領域
    GetDrawBlendMode(&mode,&parm);
    
    SetDrawBlendMode(DX_BLENDMODE_NOBLEND,128);

    int i = 1;

    for(; i < vertexCount; i++)
    {
        DrawLine(vertices[i-1].x * SCALE,vertices[i-1].y * SCALE,
                 vertices[i].x * SCALE,vertices[i].y * SCALE,
                 GetColor(255*color.r,255*color.g,255*color.b));
    }
    
    DrawLine(vertices[0].x * SCALE, vertices[0].y * SCALE,
             vertices[i-1].x * SCALE, vertices[i-1].y * SCALE,
             GetColor(255*color.r,255*color.g,255*color.b));
    
    SetDrawBlendMode(mode,parm);
}





Name: Rom  ..ぴよぴよ(30ポイント)   Date: 2010/05/22(土) 19:00   No:52493       
Title: DXライブラリのDrawBox関数について    
はじめまして。
このサイトを見つけてから、
DXライブラリで簡単なシューティングゲームをちびちび作っているんですが、
最近敵や自分のライフをゲージで表示したいなと思い、
このゲームプログラミングの館を参考に作っていました。

そのときに気づいたんですが、
DrawBox関数を使ったとき、右下になんというか余分なものが描写されていまして
試しにゲームプログラミングの館の5章のプログラムを実行してみましたが
塗りつぶさない描写のときに正しく描写されませんでした。

原因はなんでしょうか?

環境は
VC++2088EE Vista


30ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(537,703ポイント)   Date: 2010/05/22(土) 19:37   No:52503     
Title: Re:DXライブラリのDrawBox関数について    
 試しに DxLib_Initを呼ぶ前に 

    SetUse3DFlag(FALSE);

を呼んでみてください。

 もし、これで直ったら原因は環境にあることになりますので、解決方法としては
・ このまま SetUse3DFlagを使用したままで使う
・ 線の方向・長さを調整すれば発生しないこともあるらしいので、そのあたりで工夫する。
・ ビデオカードを別のものに変える
くらいしかないかと。


 これで直らなかったら……ちょっと判らないです。


246ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(99,686ポイント)   Date: 2010/05/22(土) 20:25   No:52507     
Title: Re:DXライブラリのDrawBox関数について    
あぁ、たぶんライブラリ側のバグか、環境依存の何かです。

私のPCでも発生しますが、しっかりしたゲームになってくるとDrawBoxはめったに使わないので
その件は放置するようにしていました。

公式掲示板の方で書き込むことをお勧めします。


66ポイント を手に入れた。

Name: Rom  ..ぴよぴよ(129ポイント)   Date: 2010/05/22(土) 20:59   No:52512 解決!     
Title: Re:DXライブラリのDrawBox関数について    
>Justyさん
その方法で改善されました。
素早いありがとうございます。助かりました。

>Maさん
回答ありがとうございます。
その内大規模なゲーム作れるよう頑張ります。
掲示板のほうも見てみます。


99ポイント を手に入れた。



Name: 深黒  ..ぴよぴよ(102ポイント)   Date: 2010/05/22(土) 16:47   No:52484       
Title: 始めたばかりで・・・    
すみません、初心者C言語初心者です
カードゲームを作ろうと意気込んで、
カードをクリックしてそのカードを場に出す…みたいのをやろうと思ったのですが、クリック判定はどのようにプログラムを打てばいいのか分かりません…
どうか教えてくださいませんか? 編集済み


102ポイント を手に入れた。


Name: たいちう  ..比類無きプログラマー(83,054ポイント)   Date: 2010/05/22(土) 17:07   No:52486     
Title: Re:始めたばかりで・・・    
色々方法はありますが、定番の1つを紹介します。

http://www.kumei.ne.jp/c_lang/index_sdk.html
http://www.kumei.ne.jp/c_lang/mfc/mfc_04.htm


38ポイント を手に入れた。

Name: 深黒  ..ぴよぴよ(233ポイント)   Date: 2010/05/22(土) 18:01   No:52488     
Title: Re:始めたばかりで・・・    
すみません、わざわざ返答してくださったのに、いまいちよく分からなかったです…
範囲を指定して、その範囲内でクリックされた時に、何かしらのアクションを起こすみたいなのがやりたいのですが…
あ、念のため書いておきますと、Visual C++ 2008を使用していて、http://dixq.net/g/ のページで、DXライブラリを使用できる状態にしました。


131ポイント を手に入れた。

Name: ru  ..ぴよぴよ(846ポイント)   Date: 2010/05/22(土) 18:06   No:52489     
Title: Re:始めたばかりで・・・    
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_input.html#R5N8

20ポイント を手に入れた。

Name: やっくん  ..プログラマー(26,903ポイント)   Date: 2010/05/22(土) 18:21   No:52491     
Title: Re:始めたばかりで・・・    
ruさんが示されたURL内の関数を用いて、任意の範囲でのマウスの押し状態を調べます。

カードの座標をこのように仮定します。
x座標:30〜59
y座標:40〜99


クリック判定をしたい場合

int mouse_pos_X; // マウスのx座標
int mouse_pos_Y; // マウスのy座標

mouse_pos_X = -1; // 初期化
mouse_pos_Y = -1; // 初期化

if(( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0){// 左クリックされたら
  GetMousePoint(&mouse_pos_X, &mouse_pos_X);    // マウスの座標を取得
}

// もし取得したマウスの座標がカードの内側だったら。
if(mouse_pos_X >= 30 && mouse_pos_X <= 59 && mouse_pos_Y >= 40 && mouse_pos_Y <= 99){
  // 処理
}


でどうでしょう?
実際はループなどを組み合わせなければいけません。
ここでは省略させてもらっているのでこれでは動きません(^^;
 編集済み


209ポイント を手に入れた。

Name: 深黒  ..ぴよぴよ(823ポイント)   Date: 2010/05/22(土) 19:35   No:52502     
Title: Re:始めたばかりで・・・    
やっくんさんのを参考に、とりあえず使い方を理解するために
とりあえず指定範囲内をクリックしたら画像を表示するなんて物を組んだのですが…
うまくいきません。
使い方かループの作り方が間違ってるのだと思いますが…
指摘お願いします

#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
    SetGraphMode( 800 , 600 , 32 ) ;
    if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 

    int mouse_pos_X; // マウスのx座標
    int mouse_pos_Y; // マウスのy座標

    mouse_pos_X = -1; // 初期化
    mouse_pos_Y = -1; // 初期化
    while(1){
        if(( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0){// 左クリックされたら
            GetMousePoint(&mouse_pos_X,&mouse_pos_Y);    // マウスの座標を取得
        }

        // もし取得したマウスの座標がカードの内側だったら。
        if(mouse_pos_X >= 0 && mouse_pos_X <= 100 && mouse_pos_Y >= 0 && mouse_pos_Y <= 99){
            LoadGraphScreen( 0 , 0 , "field.bmp" , TRUE ) ;
        }
    }
    DxLib_End() ;           // DXライブラリ使用の終了処理
    return 0 ;              // ソフトの終了
}


590ポイント を手に入れた。

Name: ru  ..かけだし(1,376ポイント)   Date: 2010/05/22(土) 20:00   No:52505     
Title: Re:始めたばかりで・・・    
#include "DxLib.h" 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ 
    ChangeWindowMode( TRUE ) ; // ウインドウモードに変更 
    SetGraphMode( 800 , 600 , 32 ) ; 
    if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了  

    int mouse_pos_X; // マウスのx座標 
    int mouse_pos_Y; // マウスのy座標 

    mouse_pos_X = -1; // 初期化 
    mouse_pos_Y = -1; // 初期化 

    SetDrawScreen( DX_SCREEN_BACK ) ;

    while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){ 
        ClearDrawScreen() ;

        if(( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0){// 左クリックされたら 
            GetMousePoint(&mouse_pos_X,&mouse_pos_Y);    // マウスの座標を取得 
        } 

        // もし取得したマウスの座標がカードの内側だったら。 
        if(mouse_pos_X >= 0 && mouse_pos_X <= 100 && mouse_pos_Y >= 0 && mouse_pos_Y <= 99){ 
            LoadGraphScreen( 0 , 0 , "field.bmp" , TRUE ) ; 
        } 

        ScreenFlip() ;

    } 
    DxLib_End() ;           // DXライブラリ使用の終了処理 
    return 0 ;              // ソフトの終了 
}



530ポイント を手に入れた。

Name: やっくん  ..プログラマー(27,236ポイント)   Date: 2010/05/22(土) 20:34   No:52510     
Title: Re:始めたばかりで・・・    
これで注意しなければいけないところは、ループ内で左クリックした場合に再度左クリックをするまで永続的にmouse_pos_Xとmouse_pos_Yは同じ値を取っているということです。

つまり、漆黒さんのソースでは
x座標:0〜100
y座標:0〜99
となっていますが、この枠の中でクリックした場合、マウスの座標変数はこの範囲の値を常に指します。
よって何度もこの枠の中の処理を繰り返します。

もし、クリックをして一度しか処理をさせたくない場合はwhileループ中の先頭にマウスの座標変数を初期化すると良いかと思います。

でも、このソースでwhileループの中で初期化を行ったら、ループのたびにスクリーンがクリアされるので1度クリックしたら1回だけ画像が表示されてすぐ消えてしまいます。

このことを頭においてマウスの処理を行うと良いですよ


154ポイント を手に入れた。

Name: 深黒  ..ぴよぴよ(854ポイント)   Date: 2010/05/22(土) 20:58   No:52511 解決!     
Title: Re:始めたばかりで・・・    
お二人の意見を取り入れてみたら出来ました!
お二人とも返信ありがとうございました!!
m(_ _)m


31ポイント を手に入れた。



Name: 胡椒  ..初心者(8,181ポイント)   Date: 2010/05/21(金) 16:58   No:52439       
Title: 無題    
ゲームプログラミング館の「t0 セーブデータの作り方」でのコードなんですが、

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
//セーブデータの構造体
typedef struct{
        int clear_flag;         //クリアしたかどうかのフラグ
        int money;                      //お金
        int highscore;          //ハイスコア
}save_data_t;
 
int main(){
        char *name = "save_data.dat"; // save_data.dat(セーブデータファイル)
        FILE *fp;
        save_data_t save_data;
 
        srand( (unsigned) time( NULL ) ); //時間による乱数の初期化
 
        /*ファイルの内容からデータをロード*/
        {
                if( ( fp = fopen( name, "rb" ) ) == NULL ) {
                        printf("ファイルオープンエラー\n");
                }
                else{
                        //ファイルからデータを読み込む
                        fread( &save_data, sizeof(save_data_t), 1, fp ) ;
                        fclose( fp );//解放
                        printf("クリア:%d お金:%d ハイスコア:%d\n",
                                save_data.clear_flag, save_data.money, save_data.highscore);
                }
        }
 
        {       //適当に値を代入してみる
                save_data.clear_flag = rand()%2;
                save_data.money      = rand()%100;
                save_data.highscore  = rand()%10000;
        }
 
        /*データの内容をファイルにセーブ*/
        {
                if( ( fp = fopen( name, "wb" ) ) == NULL ) {
                        printf("ファイルオープンエラー\n");
                }
                else{
                        fwrite( &save_data, sizeof(save_data_t), 1, fp ) ;
                        fclose( fp );
                }
        }
 
        return 0;
}

とありますよね。
なぜここで
char *name = "save_data.dat";
といったポインタを使っているのでしょうか?

f( ( fp = fopen( name, "rb" ) ) == NULL ) {
のところは
char *name = "save_data.dat";
を宣言せずに
f( ( fp = fopen( "save_data.dat", "rb" ) ) == NULL ) {
ではだめなのでしょうか?

一応基本は分かりますが、まだまだポインタは勉強中なのでよろしくお願いします。


770ポイント を手に入れた。


Name: 胡椒  ..初心者(8,197ポイント)   Date: 2010/05/21(金) 17:00   No:52440     
Title: セーブデータについて    
すみません・・・
タイトルをつけるのを忘れてしまいました・・・


16ポイント を手に入れた。

Name: Dixq (管理人)  ..ウィザード(1,191,619ポイント)   Date: 2010/05/21(金) 17:57   No:52441     
Title: Re:無題    
それでもいいですが、後者の場合、ファイル名が変わったら、2ヶ所変更しないといけないですよね。
変更しないといけないヶ所はなるべく少なくしようというわけです。
それなら書き換え可能形式で開けばいいわけですが、なるべくわかりやすくというわけであぁなっています。


75ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(46,096ポイント)   Date: 2010/05/21(金) 18:03   No:52442     
Title: Re:セーブデータについて    

f( ( fp = fopen( "save_data.dat", "rb" ) ) == NULL ) { 
でもOKですよ
でもプログラムを見ると
 if( ( fp = fopen( name, "wb" ) ) == NULL ) { 
と書き込む部分にも同じ変数を使っていますね
ファイル名をsave_data.dat以外に変更したい場合にポインタ変数にしておくと1箇所の書き換えだけですみます
またタイプミスや修正し忘れのようなバグも減るので同じ名前を複数使う場合は変数にしたほうが便利です



124ポイント を手に入れた。

Name: 胡椒  ..初心者(8,240ポイント)   Date: 2010/05/21(金) 18:33   No:52444     
Title: Re:無題    
ありがとうございます。
ではchar *name = "save_data.dat";の部分は
char name[] = "save_data.dat";
でもいいわけですよね。
この違いは何かあるのでしょうか?


43ポイント を手に入れた。

Name: ookami  ..上級者(17,049ポイント)   Date: 2010/05/21(金) 21:12   No:52453     
Title: Re:無題    
↓こんな違いがあります。
http://www.nurs.or.jp/~sug/soft/tora/tora8.htm

これは、今すんなり理解できなくても、すぐに困るということは無いと思います。


64ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,191,915ポイント)   Date: 2010/05/21(金) 21:50   No:52454     
Title: Re:無題    
ookamiさんのリンク先をお読みになれば大体解ると思いますが、
リンク先の事をプログラムで確かめると


#include <stdio.h>

int main(void) {
    char *strA  = "abc";
    char strB[] = "abc";

//    *(strA+1) = 'd';
    *(strB+1) = 'd';

    printf("%s", strA);
    printf("%s", strB);
  
    return 0;
}


上のプログラムのコメントアウトを外すとエラーになるという事ですね。
strBは書き換え可能なアドレスにあるのに対して、strAは書き換えが出来ません。

この辺はなかなか難しい所ですよね〜。
最初のうちはstrAのような書き方はしない方がいいと思います。


165ポイント を手に入れた。

Name: 胡椒  ..初心者(8,275ポイント)   Date: 2010/05/21(金) 22:06   No:52456 解決!     
Title: Re:無題    
ookamiさん
管理人さん

ありがとうございます。勉強になりました。
無事、配列のほうでデータを作ることが出来ました!



35ポイント を手に入れた。

Name: やっくん  ..プログラマー(26,328ポイント)   Date: 2010/05/22(土) 14:52   No:52483     
Title: Re:無題    
/* 質問をしていましたが、スレを立てるので削除しました */ 編集済み

2倍のポイントを手に入れた! 956ポイント を手に入れた。



Name: しろ  ..かけだし(1,550ポイント)   Date: 2010/05/20(木) 22:20   No:52400       
Title: これからの学習の指針について    
C言語学習中の超初心者です。これからの学習の指針についての相談です。

「やさしいC」(高橋麻奈)という本を読んでいます。
構造体の部分もほぼ読み終わり、あとは入出力を残すのみとなっています。

練習問題も解けますし、書いてあることも理解はできるのですが、どうもまだ慣れていない、というか演習量が不足している気がします。

そこで「やさしいC」を読了したあとについて、どうすればいいか? という点です。

最終的にはシューティングゲームや格ゲーなんかを作ってみたいです(ただし、仕事としてのプログラマーを目指している、というわけではありません)。

ただ、なんとなく教本を1冊読んだだけで、いきなりDXライブラリに入るのはいささか背伸びをしすぎな気もします。

「やさしいC」→?→「DXライブラリ」

の間のクッションとしてなにか「これをすべき」みたいなことがあればご教授ください。
演習本や教本でもいいですし、「こういうものを作ってみたら?」的なものでもいいです。もちろん「DXライブラリに直接いって大丈夫」というものでも歓迎です。

ちなみにコマンドプロンプト上で動くテトリス、カードゲームなども興味があります。

なお、ゲーム以外では将来的にはC++やwindowsプログラミングもできるようになりたいと考えています。

いろいろと選択肢が多い中、いったいどういう順序で学習するのが効果的でしょうか? 短期的視野でも長期的視野でもアドバイスをいただけますと大変助かります。

よろしくお願いいたします。



614ポイント を手に入れた。


Name: シエル  ..ぴよぴよ(722ポイント)   Date: 2010/05/20(木) 22:31   No:52401     
Title: Re:これからの学習の指針について    
私はC→C++→WindowsAPIという順序で学習しました。
WindowsAPIをやり始めてからは、ウインドウが作れたり、画像が表示できたりして
どんどん楽しくなっていきました。

私はまだC言語を始めてから一ヶ月ちょっとしか経ってませんが、C言語とWindowsAPIだけで
簡単なシューティングゲームが作れるまでになりました。
今はさらに上を目指してDirectXを勉強中です。

C言語からDXライブラリに入っても、ゲームは作れると思いますが、Windowsの仕組みをあまり
理解せずにゲームが作れてしまうので、私はあまりお勧めしません。

単にゲームが作りたいのであれば、DXライブラリをすぐやり始めても良いと思います。

参考になれば幸いです。


310ポイント を手に入れた。

Name: MNS  ..プログラマー(34,830ポイント)   Date: 2010/05/20(木) 23:04   No:52403     
Title: Re:これからの学習の指針について    
C言語の演習をするにあたって、ゲームを製作することはかなり有効だと思います。
ゲーム制作には、言語のあらゆる機能が幅広く要求され、応用力も求められるので、
ほぼ確実といっていいほど、プログラミングの技術は身につくはずです。

DXライブラリは、C言語を理解していれば(厳密に言えばC++言語の理解も必要ですが)使うのは非常に簡単です。
最初からDirectX、WindowsAPIを使用したりすると、それらの理解に時間を取られたり、
もしくは、Cの理解度に関係なく、それらが理解出来ないが故にゲームが作れないという事態も考えられるので、
純粋にCの勉強にならない可能性も考えられます。
ですから、個人的には最初からDXライブラリを使用して構わないと思います。

加えて、ゲーム製作の経過において、Cの各機能の利便性に気づいたり、
C++で加えられる新機能の利便性が簡単に理解できたりすることもあり、
C→DXライブラリ→C++→WindowsAPI/DirectX
という流れで学習するのが良いのではないかな、と個人的には思います。

なにより、「好きなことをする」ことは非常に重要です。そして、目標を持つことも重要です。
モチベーションを維持できていれば、何かに躓いた時に挫折することも少なくなります。
ゲームを作りたいという強い願望があるなら、それをするに越したことはありません。


575ポイント を手に入れた。

Name: やっくん  ..上級者(23,938ポイント)   Date: 2010/05/20(木) 23:08   No:52404     
Title: Re:これからの学習の指針について    
私の場合はC言語でRPGを作りたいと思い、Cの本を一冊マスターした後にまずはCUIでRPGを作りました。
しろさんのように私もCの基本の本を1冊やったからと言ってGUIは背伸びしすぎだ、と感じたからです。
その後にDXライブラリを用いてGUIのゲーム作りをし始めました。

シエルさんが仰るようにゲームを作るということが目的ならば、DXライブラリを使うだけでいいと思います。ですが、しろさんはWindowsでゲーム作り以外にもソフトを作りたいと仰っているようですのでWindowsAPIも必須になってくるかと思います。ちなみに私は現在ゲームに必要な物を作るためのツールを製作中ですが、WindowsAPIを学んでいないため苦労しています。

とりあえず、今後の方針としてはCを扱うことに慣れるためにCUIで何かを作ってみてはどうでしょうか?
(例えば、オセロやポーカーなどのボードゲームなど)
CUIといってもゲーム作りなので楽しくCの知識を深めることができますよ(^^


209ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(189,684ポイント)   Date: 2010/05/20(木) 23:19   No:52406     
Title: Re:これからの学習の指針について    
MNSさんの意見に賛成です。
一点だけ補足すると、DXライブラリで使うのは、Cではなく、あくまでもC++です。
Cの知識だけでも使えますが、そのことと、実際に使うのがCかどうかとは別の話なのです。
ここを混同してしまうと先々の不安要因になりますので、自分が使っているのがなんというプログラミング言語なのかだけは正確に把握しておいてください。



158ポイント を落としてしまった。

Name: しろ  ..かけだし(1,661ポイント)   Date: 2010/05/21(金) 04:47   No:52414     
Title: Re:これからの学習の指針について    
皆様、貴重なご意見ありがとうございます。

DXライブラリを次にやっても問題ない、とのことなのでとりあえずDXライブラリをやってみようと思います。そして困ったことがあれば、入門書に戻る、みたいな感じで。

なお、DXライブラリの勉強をするのは、当サイトのゲームプログラミング講座で、と思っているのですが、なにかほかにこういうサイトもあるよ、こういう本もあるよ、というのがあれば教えてもらえるとうれしいです。


111ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(99,355ポイント)   Date: 2010/05/21(金) 04:59   No:52416     
Title: Re:これからの学習の指針について    
ココが一番お金かからなくて効率がいいと思いますよ。

14ポイント を手に入れた。

Name: しろ  ..かけだし(1,731ポイント)   Date: 2010/05/21(金) 22:01   No:52455 解決!     
Title: Re:これからの学習の指針について    
>>ココが一番お金かからなくて効率がいいと思いますよ。

わかりました! ここで頑張って勉強してみます。

皆様どうもありがとうございました。


70ポイント を手に入れた。

Name: 組木紙織  ..比類無きプログラマー(81,882ポイント)   Date: 2010/05/21(金) 22:51   No:52458     
Title: Re:これからの学習の指針について    
誰もこめんとしていないけど、
Maさんの
>ココが一番お金かからなくて効率がいいと思いますよ。
は回答者側の負担を一切無視しているので、私としては否定したいです。

掲示板は問題点を解決するのに必要な情報を得るのには有利ですが、体系的な知識を学ぶには
不適当なツールだと思ってます。


やさしいCはC言語の入門としてはやさしすぎて、細かい部分の説明が不十分なので、
(適当な本が思いつきませんが)
もう少しC言語の専門的な本かアルゴリズムの本を選ぶのが良いかと思います。


137ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(189,990ポイント)   Date: 2010/05/21(金) 22:57   No:52460     
Title: Re:これからの学習の指針について    
> やさしいCはC言語の入門としてはやさしすぎて、

この著者の「やさしい〜」シリーズ全般にいえることです。
難しい話は避け、著者が解説できる内容にしぼっているので、本に書かれた内容を理解するのは「やさしい」というだけです。

それでも何か作り始めれば、何が不足しているかもわかってくるので、それから別の本を買っても遅くないと思います。


2倍のポイントを手に入れた! 284ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(99,420ポイント)   Date: 2010/05/22(土) 04:05   No:52478     
Title: Re:これからの学習の指針について    
>>ココが一番お金かからなくて効率がいいと思いますよ。 
>は回答者側の負担を一切無視しているので、私としては否定したいです。 

>掲示板は問題点を解決するのに必要な情報を得るのには有利ですが、体系的な知識を学ぶには 
>不適当なツールだと思ってます。 

「ココ」は掲示板のみを指していません。
ゲームプログラミングの館等も指しています。

ただ、本を否定しているわけではないので、「ココ」をやり終わってから、ちょっと発展的な本とかがいいかと。(個人的な意見) 編集済み


146ポイント を手に入れた。



Name: マクベ  ..ぴよぴよ(383ポイント)   Date: 2010/05/21(金) 20:09   No:52446       
Title: 無題    
初めまして。
昨日このサイトを見つけてシューティング作ってみよう!っと思いDLした者です。
早速ですが、0章でつまづいてしましましたorz


サンプルプログラム実行用フォルダを開いてsinを開こうと思ったのですが、sinという拡張子のファイルがありません。
自分はVisual C++ 2010 Expressを使っています。

サンプルプログラム実行用フォルダの中身は
・DxDirectX.h
・DxLib.h
・DxLib.lib
・DxLib.txt
・DxLib_d.lib
・DxUseCLib.lib
・DxUseCLib_d.lib
・libjpeg.lib
・LIBJPEG_d.lib
・libpng.lib
・LIBPNG_d.lib
・libtheora_static.lib
・libtheora_static_d.lib
・ogg_static.lib
・ogg_static_d.lib
・sample.bdp
・test.cpp
・vorbis_static.lib
・vorbis_static_d.lib
・vorbisfile_static.lib
・vorbisfile_static_d.lib
・ZLIB.LIB
・ZLIB_d.lib

と、これだけのファイルがありました。
どれを開けばsinと同じものが開くのでしょうか?
分かりにくい文ですみません、よろしくお願いします><




383ポイント を手に入れた。


Name: Dixq (管理人) [URL]  ..ウィザード(1,191,657ポイント)   Date: 2010/05/21(金) 20:29   No:52447     
Title: Re:無題    
間違えて「プロジェクトに追加すべきファイル_VC用」を見ていませんか?

2倍のポイントを手に入れた! 38ポイント を手に入れた。

Name: マクベ  ..ぴよぴよ(419ポイント)   Date: 2010/05/21(金) 20:32   No:52448     
Title: Re:無題    
いえ、ちゃんと「サンプルプログラム実行用フォルダ」になってます><
一応全てのフォルダも開いてみましたがどこにも見当たりませんでした。 編集済み


36ポイント を手に入れた。

Name: マクベ  ..ぴよぴよ(520ポイント)   Date: 2010/05/21(金) 21:05   No:52450 解決!     
Title: Re:無題    
すみません、一回DLしなおしてみたらできました。
全く同じ手順でやったのに何が違ったんだろうorz
ほんとすみませんでした、今度からもう少し自分でやれることを全部やりきってから書かせてもらいます><
その時はよろしくお願いします! 編集済み


101ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,191,750ポイント)   Date: 2010/05/21(金) 21:06   No:52451     
Title: Re:無題    
すみません、ちゃんと見ればよかったですね。
恐らくダウンロードされたものはBCC用の物だと思います。
VC++をお使いなのですよね?
VC++をお使いの場合は

http://homepage2.nifty.com/natupaji/DxLib/dxdload.html
「DXライブラリ VisualC++用(Ver3.02c)をダウンロードする(自己解凍形式(約8.46MB))」

のリンクからDLして下さい。


93ポイント を手に入れた。

Name: ookami  ..上級者(16,985ポイント)   Date: 2010/05/21(金) 21:07   No:52452     
Title: Re:無題    
sinではなくslnですね。
"sln"でファイル検索してみてはいかがでしょう?

-- 追記
おっと、ほぼ同時に投稿してしまいました。解決されていましたね。 編集済み


33ポイント を手に入れた。



Name: ヒーはん  ..ぴよぴよ(11ポイント)   Date: 2010/05/17(月) 19:16   No:52243       
Title: FPSのようなカメラ移動    
3Dのアクションゲームを作っていて、
FPSのような、カメラ移動を実装したいのですが、
どの様にすればできるでしょうか?

ちなみに、DXライブラリを使用しています


11ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(533,724ポイント)   Date: 2010/05/18(火) 02:05   No:52262     
Title: Re:FPSのようなカメラ移動    
 DXライブラリ 3.xでのカメラは以下の関数を使います。

・ SetCameraPositionAndTargetAndUpVec
・ SetCameraPositionAndTarget_UpVecY
・ SetCameraPositionAndAngle
・ SetCameraViewMatrix

 よく使うのは多分 1番目か2番目でしょうか。

 2.x系だと
・ CreateLookAtMatrix / CreateLookAtMatrix2 / CreateLookAtMatrixRHなど + SetTransformToView

しかないようです。

 使い方はリファレンスに載っていますが、どれもカメラの姿勢をベクトルないしは行列で指定するタイプの
ものです。


 実装としては基本カメラは座標 [0, 0, 0]に固定(振動などオフセット的な移動は別)、して
マップやキャラクタの方を動かすのがいいでしょう。

 例えば前進するときは、マップ・キャラクタなどプレイヤー以外の全てのオブジェクトを
前から後ろに移動させます。
 そうすると見た目上前進しているように見ます。
 後退するときは反対に後ろから前に動かします。

 少し面倒ですがこうしないと、DXライブラリの内部計算は floatなので
広大なマップを移動して座標の値が大きくなりすぎた時細かい座標の表現に問題がでるからです。
 カメラが常に [0, 0, 0]付近であればまずその心配をしなくて済みます。
(勿論これは可視範囲内は問題が出ないだけで、見えない遠くの方ではおかしなことになっているでしょう)


 とはいえそんな広大なマップは使わないから floatの問題はおきない、ということであれば
カメラの方を動かしても構いません。
 その方が管理は楽ですから。


 こちらはカメラの方を動かしている公式サンプルです。

DXライブラリ置き場 迷路を3Dで表示
http://homepage2.nifty.com/natupaji/DxLib/program/dxprogram_3Dmeiro.html


566ポイント を手に入れた。

Name: ヒーはん  ..ぴよぴよ(47ポイント)   Date: 2010/05/18(火) 18:45   No:52289     
Title: Re:FPSのようなカメラ移動    
すいません、カメラそのものの動かし方ではなく、
マウスでFPSのようにカメラを動かす方法を教えて欲しいです。


36ポイント を手に入れた。

Name: 通りすがり  ..上級者(21,151ポイント)   Date: 2010/05/18(火) 20:14   No:52290     
Title: Re:FPSのようなカメラ移動    
とりあえず今どの程度FPSゲームが出来ているのか教えて下さい。
私たちにはヒーはんさんがどの程度のスキルを持っているのかが解りません。


36ポイント を手に入れた。

Name: ヒーはん  ..ぴよぴよ(129ポイント)   Date: 2010/05/18(火) 21:10   No:52299     
Title: Re:FPSのようなカメラ移動    
>どの程度FPSゲームが出来ているのか教えて下さい。
WSADで移動ができて、左クリックで弾が撃てるぐらいです。

5作品ほどゲームは作ったことがあります。


82ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(534,994ポイント)   Date: 2010/05/19(水) 02:08   No:52328     
Title: Re:FPSのようなカメラ移動    
>FPSのようにカメラを動かす
 回転の方、ということですか?

 あんまりFPSで遊ばないんで、どういう動きがベストなのかは知らないですけど、
大体こんなかんじってところでよければ。

 とりあえず、マウスの相対移動をもって回転させる、ということで。

 現在の画面上のマウスの位置 Mを、前のフレームでのマウスの位置を 0としたときに
画面幅・高さ分移動した場合が 1になるよう正規化します(NM)。
(この際 y軸の符号をどっちにするかはお好みで)

 例えば、前のフレームのマウスの位置が画面中央で、今が画面上部中央なら
NM[x, y] = [0, -0.5 (0.5)]といった感じです。
 
 その正規化された座標 NMと最大角速度 Rを掛けたらその値 (NMR)がそのフレームでの
カメラの回転量になりますので、今のカメラの XYZ軸の回転値に NMR[x]の方を、
カメラのY軸に、NMR[y]の方を X軸の方に足して、終わりです。

 カメラの管理が回転値でなく、ベクトルやら行列で管理されているなら、MMRを行列化して掛けて下さい。


329ポイント を手に入れた。

Name: ヒーはん  ..ぴよぴよ(155ポイント)   Date: 2010/05/21(金) 20:43   No:52449 解決!     
Title: Re:FPSのようなカメラ移動    
できました!!
みなさんのおかげです。ありがとうございました。


26ポイント を手に入れた。



Name: 山崎  ..熟練のプログラマー(40,339ポイント)   Date: 2010/05/20(木) 12:38   No:52391       
Title: CUIゲームでの画面クリアなどに関して    
いつもお世話になっております、山崎です。

先週から、ライブラリを用いずにコマンドプロンプト上で動くような 
簡単なゲームを作ってみようかなと考えております。 
画像ファイルを用いずに、文字だけで表現する感じです。

OSはXP、VisualStudio2010を使っています。

画面に描かれたものをすべて消去し、また必要なものを書く、
という処理を毎フレーム行おうと考えています
(フレームという言葉で合っているかどうかわかりませんが)。

まずは1秒間にメインループを実行する回数を揃えていこうと思い、
以下のコードを試しに書いて実行しました。
60回ループし、1回ループを実行するのにかかる平均tick数を表示するだけのプログラムです。
CLOCKS_PER_SECは1000だったので、1tick=1msecだと思います。

DXライブラリのように約60fps、1フレームを約16msecで処理したいと考えています。
実行してみたところ、計測される部分の行数は大したことがないはずなのに、
1回のループに36〜45tickもかかってしまいました。

この「メインループで毎回system(“cls”)で画面のクリアを行う」という方式では、
Fps60のゲームを作ることは難しいでしょうか。
または、このようなコマンドプロンプトと文字だけのゲームを作るには
どのような方式(画面のクリアや画面出力に関して)をとるのがよいでしょうか。
よろしければご意見をお聞かせください。

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

#include "Screen.h"

int main()
{
    char KeyCode=' ';
    clock_t StartFrameTime,FrameTime;

    int count=0;
    long total=0;
    int ave=0;

    while(KeyCode!=27)    //エスケープキーが押されるまで繰り返す
    {
        StartFrameTime=clock();
        system("cls");    //画面のクリア
        
        if(kbhit()!=0)
            KeyCode=getch();    //処理を止めずにキー入力を得る
        
        FrameTime=clock()-StartFrameTime;
        total=total+FrameTime;
        printf("ave=%d\n",ave);
        if(count==60)
        {
            ave=total/60;
            count=0;
            total=0;
            
        }
        count++;

        if(FrameTime<16)
            Sleep(16-FrameTime);
    }

    return 0;
}

 編集済み


1,032ポイント を手に入れた。


Name: バグ  ..ハッカー(196,662ポイント)   Date: 2010/05/20(木) 13:58   No:52394     
Title: Re:CUIゲームでの画面クリアなどに関して    
コンソールアプリで毎フレーム書き換えするのは厳しいでしょうね。
必要な部分だけを書き換えるなど、別の方法を検討した方がいいかと思います。


63ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(82,199ポイント)   Date: 2010/05/20(木) 14:44   No:52395     
Title: Re:CUIゲームでの画面クリアなどに関して    
> この「メインループで毎回 system(“cls”)で画面のクリアを行う」という方式では、
> Fps60のゲームを作ることは難しいでしょうか。
> または、このようなコマンドプロンプトと文字だけのゲームを作るには
> どのような方式(画面のクリアや画面出力に関して)をとるのがよいでしょうか。
> よろしければご意見をお聞かせください。

コマンドプロンプトへの出力も結構重いですからね。
そもそも画面をクリアしてから再描画を行うとちらつくと思いますが、
これはかまわないのですか?
あまり見栄えが良くなくてもかまわないならば、
FPSももっと小さくて良いのでは?

> または、このようなコマンドプロンプトと文字だけのゲームを作るには

文字だけとはいえ、きれいに動くゲームを作りたいならば、
普通にウィンドウを作ってTextOutやDrawTextで表示してはいかがかと。


99ポイント を手に入れた。

Name: 山崎  ..熟練のプログラマー(40,546ポイント)   Date: 2010/05/21(金) 08:29   No:52420 解決!     
Title: Re:CUIゲームでの画面クリアなどに関して    
バグさん、たいちうさん、ご返信誠にありがとうございます。

やはり、コンソールアプリケーションでそれなりのfpsを出すのは難しいのですね。
DXライブラリを使った場合のようには行かないのですね…いや勉強になりました。

ちらつきの解決については後回しにしようと思っておりました。
なるべくならどうにかしたいですが、
どうにもならないようならちらついても仕方ないかな、と考えてました。

とりあえずコンソールのゲームを作るには、
・fpsは多少低くなっても我慢する
・必要な部分だけ書き換えるようにする
という方式をとろうと思います。

ご意見、ありがとうございました。
もし他の方も何かご意見ございましたら、お聞かせください。


207ポイント を手に入れた。

Name: バグ  ..ハッカー(196,973ポイント)   Date: 2010/05/21(金) 10:16   No:52423     
Title: Re:CUIゲームでの画面クリアなどに関して    
>>ちらつきの解決については後回しにしようと思っておりました。 
>>なるべくならどうにかしたいですが、どうにもならないようならちらついても仕方ないかな、と考えてました。

コンソールアプリというのは、左上から右下まで文字が並んでいるだけだと思ってください。(テキストエディタを思い浮かべていただけると分かり易いかもしれません)その文字列の情報は保持されており、常に表示されるため、Windowsアプリの用に毎フレーム書き換える必要がないのです。DXライブラリとは全く考え方が違う物だと認識してください。

そういう訳なので、コンソールアプリで作成するのであれば、『変更のあった箇所の文字だけを書き換える』という方法が最も効率のよい描画方法になる訳です。この方法ならば、全画面の情報を頻繁に書き換えるような事でもしない限りは、ちらつきも気にならないレベルになると思いますよ。

コンソールアプリ大好きで色々実験してますので、何か方法で分からない事があればまた質問してください(^_^;)

http://park.geocities.jp/bugbugbugbug2001/

手前味噌ですが、ここのHPのコンソールアプリ版テトリス(C#版とC++版があります)でしたら、ソース付きで公開してますので、よかったら御覧ください。


311ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(82,373ポイント)   Date: 2010/05/21(金) 10:32   No:52426     
Title: Re:CUIゲームでの画面クリアなどに関して    
コンソール用のAPIをまとめてあるサイトを見つけましたので、
一応貼っておきます。

『0からのゲームプログラミング』
http://www.plustarnet.com/aspil/Programming/
http://www.plustarnet.com/aspil/Programming/console00.htm


バグさん
> コンソールアプリ大好きで色々実験してますので、
> 何か方法で分からない事があればまた質問してください(^_^;)

コマンドプロンプトでも色々できるもんですね。
テキストを吐き出す使い方しかしてきませんでした。
相応のポテンシャルを秘めているものと認識を新たにすることができました。
情報ありがとうございました。


113ポイント を手に入れた。

Name: 山崎  ..熟練のプログラマー(40,767ポイント)   Date: 2010/05/21(金) 11:16   No:52429     
Title: Re:CUIゲームでの画面クリアなどに関して    
バグさん
いろいろアドバイスくださり、本当にありがとうございますっ!
コンソールアプリ大好きとは頼もしい限りです、もしかしたらまたご質問させていただくかもしれません。
その時はどうかご指導よろしくお願いします。
そして紹介いただいたソースなど、是非ともこれから拝見させていただきますね!
お気に入りに登録させていただきますのでっ!

たいちうさん
サイトご紹介くださりありがとうございます。
私もそのサイトを見ながらいろいろチャレンジしているところでした。
まだ完全に目を通したわけではないですので、引き続き参考にしていきたいと思います。

お二方とも、本当にいろいろありがとうございます。


221ポイント を手に入れた。

Name: バグ  ..ハッカー(197,208ポイント)   Date: 2010/05/21(金) 19:43   No:52445     
Title: Re:CUIゲームでの画面クリアなどに関して    
たいちうさんのリンク先の記事を読ませていただきましたが、考える事は皆さん同じなのでしょうか?(苦笑)
私もコンソールに関する機能をまとめたクラスを自作して使っています(^_^;)

かなり似たような内容ですが、アップしてみますね。



90ポイント を手に入れた。



Name: TKOZ  ..熟練のプログラマー(57,709ポイント)   Date: 2010/05/20(木) 21:03   No:52398       
Title: STGの敵のスクリプトコードについて    
どうも、こんばんは、TKOZです。
STGゲームを作っていて、敵のスクリプトをプログラムソース内に作ってみたのは、いいんですが、
うまく動かないです。
具体的には、敵が前のソースではたくさん出てきたのに、今回はあまり出てこないし、
出てきたは良いんですが、スクリプトどおりに動かないです。

構造体配列の添え字が関係していると思うのですが、特にIF文が怪しい気がします。

enum Scr{UP,DOWN,LEFT,RIGHT,RIGHTROTATE,LEFTROTATE,STOP,RESET,IF,SINMOVE,SHOT,
        RIGHTMOVEROTATE,LEFTMOVEROTATE};

typedef struct Script_{
    int time;//タイム(プログラムカウンタみたいなもの?)
    int Instraction;//命令文
    int Oprand;//引数
}Script_;



typedef struct Enemy_{
    float x;
    float y;
    float Speed;
    int Kind;//敵番号
    int Hp;//体力
    int width;
    int height;
    int Flag;//表示フラグ
    float MoveAngle;//移動角度
    int DrawAngle;//表示角度
}Enemy_;
#define MAX_ENEMY 100
#define MAX_SCRIPT 2


void ExecuteScript(int i,int ScriptNumber)
{
    Script_ SCRIPT[MAX_SCRIPT][20]={
{
    {0,IF,(Enemy[i].x-J.x<10) && (J.x-Enemy[i].x<10)},
    {1,DOWN,2},
    {2,DOWN,2},
    {3,RESET,0},
    {4,RESET,0},
    {5,RESET,0},
    {6,RESET,0},
    {7,RESET,0},
    {8,RESET,0},
    {9,RESET,0},
    {10,RESET,0},
    {11,RESET,0},
    {12,RESET,0},
    {13,RESET,0},
    {14,RESET,0},
    {15,RESET,0},
    {16,RESET,0},
    {17,RESET,0},
    {18,RESET,0},
    {19,RESET,0}
},
    
{
    {0,IF,(Enemy[i].x>J.x)},
    {1,LEFTMOVEROTATE,2},
    {2,IF,(Enemy[i].x>J.x)},
    {3,LEFTROTATE,2},
    {4,IF,(Enemy[i].x<J.x)},
    {5,RIGHTMOVEROTATE,2},
    {6,IF,(Enemy[i].x<J.x)},
    {7,RIGHTROTATE,2},
    {8,DOWN,2},
    {9,RESET,0},
    {10,RESET,0},
    {11,RESET,0},
    {12,RESET,0},
    {13,RESET,0},
    {14,RESET,0},
    {15,RESET,0},
    {16,RESET,0},
    {17,RESET,0},
    {18,RESET,0},
    {19,RESET,0}
}
};
    static int time[MAX_SCRIPT]={0};
    static int time2[MAX_SCRIPT]={0};
    static int Operand[MAX_SCRIPT]={0};
    static int Instraction[MAX_SCRIPT]={0};
    static int flag=0;

    if(flag==0)
    {
        for(i=0;i<MAX_SCRIPT;i++)
            time[i]=timeGetTime();
        flag=1;
    }

    for(int j=0;j<MAX_SCRIPT;j++)
    {
        if(timeGetTime()-time[j]>SCRIPT[i][time2[j]].time)
        {
            time[j]=timeGetTime();
            time2[j]++;
            switch(SCRIPT[i][time2[j]].Instraction)
            {
back:;
            case DOWN:
                Enemy[i].y+=SCRIPT[i][time2[j]].Oprand;
                break;
            case RESET:
                time2[j]=0;
                break;
            case RIGHTROTATE:
                Enemy[i].DrawAngle-=SCRIPT[i][time2[j]].Oprand;
                break;
            case LEFTROTATE:
                Enemy[i].DrawAngle+=SCRIPT[i][time2[j]].Oprand;
                break;
            case RIGHTMOVEROTATE:
                Enemy[i].MoveAngle-=SCRIPT[i][time2[j]].Oprand;
                break;
            case LEFTMOVEROTATE:
                Enemy[i].MoveAngle+=SCRIPT[i][time2[j]].Oprand;
                break;
            case IF:
                if(SCRIPT[i][time2[j]].Oprand)
                {
                    SCRIPT[i][time2[j]].Instraction=SCRIPT[i][time2[j]+1].Instraction ;
                    goto back;
                }else{
                    time2[j]++;
                }
                break;
            }
        }
    }
}

とし、
関数MoveEnemyにて


void MoveEnemy(void)
{
    int i;
    static int diff;

    for(i=0;i<100;i++)
    {
        if(Enemy[i].Flag==1)
        {
            ExecuteScript(i,Enemy[i].Kind );
            switch(Enemy[i].Kind)
            {
            case 1:
                /*
                if( (Enemy[i].x-J.x<10) && (J.x-Enemy[i].x<10) ) Enemy[i].y+=2;
                Enemy[i].y+=2;
                */
                break;

              case 2:
                
                break;
              case 3:
                
                break;
            }
            
            if(Enemy[i].x<0 || Enemy[i].x+32>16*25 || Enemy[i].y>320 || Enemy[i].y<-72)
            {
                Enemy[i].Flag = 0;
            }
        }
    }
}


2,094ポイント を手に入れた。


Name: ookami  ..上級者(16,952ポイント)   Date: 2010/05/21(金) 12:42   No:52435     
Title: Re:STGの敵のスクリプトコードについて    
「うまく動く」について、もうちょっと詳しくお願いします。

160行ものソースにコメントがほとんど無かったので、ソースは読めていませんが、「敵が前のソースではたくさん出てきたのに、今回はあまり出てこない」というのは、スクリプトとは関係ないのではないでしょうか?


125ポイント を手に入れた。

Name: TKOZ  ..熟練のプログラマー(57,471ポイント)   Date: 2010/05/21(金) 15:42   No:52436     
Title: Re:STGの敵のスクリプトコードについて    
ネットカフェから書き込みです。
うまく動かないというのは、例えば、
上の例で言うと、
Script_ SCRIPT[MAX_SCRIPT][20]={ 

    {0,IF,(Enemy[i].x-J.x<10) && (J.x-Enemy[i].x<10)}, //自機とのx座標の差が10ピクセル未満なら
    {1,DOWN,2}, //2ピクセル下降する
//以下、IF文は引数が合致していればそのすぐ下の行を実行し、
//条件が合ってなければ一行飛ばす
    {2,DOWN,2},  //2ピクセル下降する
    {3,RESET,0}, //以下リセット
    {4,RESET,0}, 
    {5,RESET,0}, 
    {6,RESET,0}, 
    {7,RESET,0}, 
    {8,RESET,0}, 
    {9,RESET,0}, 
    {10,RESET,0}, 
    {11,RESET,0}, 
    {12,RESET,0}, 
    {13,RESET,0}, 
    {14,RESET,0}, 
    {15,RESET,0}, 
    {16,RESET,0}, 
    {17,RESET,0}, 
    {18,RESET,0}, 
    {19,RESET,0} 
}, 
     

    {0,IF,(Enemy[i].x>J.x)}, //自機より敵のx座標が大きければ
    {1,LEFTMOVEROTATE,2}, //移動角度を2°左に回転させる
    {2,IF,(Enemy[i].x>J.x)}, //自機より敵のx座標が大きければ
    {3,LEFTROTATE,2}, //描画角度を2°左に回転させる
    {4,IF,(Enemy[i].x<J.x)}, //自機の方がx座標が大きければ
    {5,RIGHTMOVEROTATE,2}, //移動角度を2°右に回転させる
    {6,IF,(Enemy[i].x<J.x)}, //自機の方がx座標が大きければ
    {7,RIGHTROTATE,2}, //描画角度を2°右に回転させる
    {8,DOWN,2}, //無条件で2ピクセル下降する
    {9,RESET,0}, //以下リセット
    {10,RESET,0}, 
    {11,RESET,0}, 
    {12,RESET,0}, 
    {13,RESET,0}, 
    {14,RESET,0}, 
    {15,RESET,0}, 
    {16,RESET,0}, 
    {17,RESET,0}, 
    {18,RESET,0}, 
    {19,RESET,0} 

}; 

この様な動きを再現したかったのですが、うまくいきません。


238ポイント を落としてしまった。

Name: たいちう  ..比類無きプログラマー(82,517ポイント)   Date: 2010/05/21(金) 16:13   No:52437     
Title: Re:STGの敵のスクリプトコードについて    
> 構造体配列の添え字が関係していると思うのですが、
> 特にIF文が怪しい気がします。

InstractionがIFの場合には、
if文の条件としてOprandの評価をしたいのですね。
C/C++ではできません。

ここではパターン毎に関数を作ってますね。
http://dixq.net/rp/12.html

敵の動きをスクリプトにまとめたい、
という気持ちは判りますので、
今週末にでも何か方法を考えてみたいと思います。
実用的な方法を考え出せるとは限りませんけど。


86ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(82,928ポイント)   Date: 2010/05/21(金) 16:56   No:52438     
Title: Re:STGの敵のスクリプトコードについて    
マクロを使ってみた。役に立つかな?
#include <iostream>

using namespace std;

struct Enemy_ {
    float  x;
    float  y;
    float  MoveAngle;
} Enemy[10];

struct Jiki {
    float  x;
    float  y;
} J;

#define LEFTROTATE(X)  Enemy[i].MoveAngle += X
#define RIGHTROTATE(X) Enemy[i].MoveAngle -= X
#define DOWN(X)        Enemy[i].y += X

#define MAKE_PATTERN_BEGIN(PATTERN_NAME) void PATTERN_NAME(int i) { if (false) {
#define CASE(X, Y)                       } if (X) { Y;
#define DEFAULT(Y)                       } else { Y; }
#define MAKE_PATTERN_END                 }

MAKE_PATTERN_BEGIN(enemy_pattern0)
    CASE(Enemy[i].x>J.x, LEFTROTATE(2))
    CASE(Enemy[i].x<J.x, RIGHTROTATE(2))
    DEFAULT(DOWN(2))
MAKE_PATTERN_END

int main() {
    cout << "x, y, MoveAngle : " << Enemy[0].x << ", " << Enemy[0].y << ", " << Enemy[0].MoveAngle << endl;
    J.x = 5;
    enemy_pattern0(0);
    cout << "x, y, MoveAngle : " << Enemy[0].x << ", " << Enemy[0].y << ", " << Enemy[0].MoveAngle << endl;
    J.x = 0;
    enemy_pattern0(0);
    cout << "x, y, MoveAngle : " << Enemy[0].x << ", " << Enemy[0].y << ", " << Enemy[0].MoveAngle << endl;

    return 0;
}


411ポイント を手に入れた。

Name: TKOZ  ..熟練のプログラマー(57,589ポイント)   Date: 2010/05/21(金) 18:09   No:52443 解決!     
Title: Re:STGの敵のスクリプトコードについて    
たいちうさん

ありがとうございます。
解決しました。

それにしてもマクロってこんな使い方も出来るんですね。便利です。


2倍のポイントを手に入れた! 118ポイント を手に入れた。



Name: bb  ..ぴよぴよ(827ポイント)   Date: 2010/05/20(木) 21:08   No:52399       
Title: 無題    
21章の「自機にあたり判定をつける」ですが
自分で用意した画像(一コマ40×40)をしようして試したんですが
どうも画像の(x,y)が(0,0)の個所にあたり判定があるように見受けられます。(画像の左隅、転送原点)
しかし実行結果の動画を見ると画像の中心にあたり判定があるように見えるのですがどうしてでしょうか?
とりあえず
int out_judge_enemyshot(int s,int n){ 

double x=shot[s].bullet[n].x-ch.x+20;//敵と自機ショットとの距離
        double y=shot[s].bullet[n].y-ch.y+20;
としてみたのですがそれっぽくなりはしましたがこれでいいのでしょうか?



162ポイント を手に入れた。


Name: ookami  ..上級者(16,827ポイント)   Date: 2010/05/21(金) 12:27   No:52434     
Title: Re:無題    
こんにちは。
21章というのは、↓これですよね。
http://dixq.net/rp/21.html

ソースを見る限り、out_judge_enemyshot 関数には問題はない(+20とかしなくてよい)と思います。

「自分で用意した画像」にする前は、期待した結果になっていましたか?

座標(shot[s].bullet[n].x,shot[s].bullet[n].y) と、
座標(ch.x,ch.y) は、
それぞれ、弾の中心座標と、敵の中心座標、という認識で合っていますか?

描画のところで、DrawRotaGraphFで指定する x,y は、画像の中心の座標という認識で合っていますか?

描画周りのソースを貼ってもらってもよろしいでしょうか。


2倍のポイントを手に入れた! 428ポイント を手に入れた。



Name: 春すぎて  ..ぴよぴよ(13ポイント)   Date: 2010/05/21(金) 11:19   No:52430       
Title: 超初心者です。    
全くの初心者ですので、恥ずかしい質問をしますが、よろしくお願いします。2〜3週間くらい前から、「ゲームプログラミングの館」を手順通りにやっています。今は(〜入門編〜15.音楽を流す。)のところです。音楽が流れるだけの簡単なソースファイルを作ってみたのですが、エディター画面からデバッグすると、うまく音楽が流れるのに、「サンプルプログラム実行用フォルダ」の「デバッグ」の中にある実行ファイル(〜.exe)をクリックしても、画面表示はされるのに音声が全く出ないのです。理由がまったく分かりません。何かの設定の方法が間違っているのでしょうか?
OS:WindowsXP HomeEdition
VisualC++2008ExpressEdition


13ポイント を手に入れた。


Name: たいちう  ..比類無きプログラマー(82,431ポイント)   Date: 2010/05/21(金) 12:00   No:52431     
Title: Re:超初心者です。    
test.midをDebugフォルダにコピーするとどうなりますか?

2倍のポイントを手に入れた! 58ポイント を手に入れた。

Name: Dixq (管理人)  ..ウィザード(1,191,544ポイント)   Date: 2010/05/21(金) 12:05   No:52432     
Title: Re:超初心者です。    
この質問非常に多いですね。
私も昔悩んだ記憶があります。
館に書いておいた方が良さそうですね。


48ポイント を手に入れた。

Name: 春すぎて  ..ぴよぴよ(103ポイント)   Date: 2010/05/21(金) 12:20   No:52433 解決!     
Title: Re:超初心者です。    
できました! 実行ファイルと同じ場所に音楽ファイルを入れておく必要があるということですね。
二日間も悩んだことが、ここで簡単に解決できて驚きです。ありがとうございました。


90ポイント を手に入れた。



Name: lion  ..ぴよぴよ(562ポイント)   Date: 2010/05/21(金) 10:08   No:52421       
Title: C#メッセージボックス    
C#のMessageBox.Show関数でメッセージボックスの中にstring変数の中身を表示するにはどのような記述をすればいいのでしょうか?

50ポイント を手に入れた。


Name: バグ  ..ハッカー(197,012ポイント)   Date: 2010/05/21(金) 10:22   No:52424     
Title: Re:C#メッセージボックス    
System.String msg = "こんな感じですか?";
System.Windows.Forms.MessageBox.Show(msg);

こんな感じで如何でしょうか?


39ポイント を手に入れた。

Name: lion  ..ぴよぴよ(624ポイント)   Date: 2010/05/21(金) 10:25   No:52425     
Title: Re:C#メッセージボックス    
はい!その通りです

さらにC言語のprintf関数のように
printf("%s",ans);
のような使い方はできないのでしょうか・・・?


62ポイント を手に入れた。

Name: lion  ..ぴよぴよ(644ポイント)   Date: 2010/05/21(金) 10:44   No:52427 解決!     
Title: Re:C#メッセージボックス    
あ、解決しました。思わぬ形で。
バグさん、ありがとうございました。


20ポイント を手に入れた。

Name: バグ  ..ハッカー(197,118ポイント)   Date: 2010/05/21(金) 10:49   No:52428     
Title: Re:C#メッセージボックス    
解決されたようですが、今後同じように躓いた方の参考の為にサンプルを…

System.Int32 test = 100;
System.String msg = System.String.Format("test = {0}", test);
System.Windows.Forms.MessageBox.Show(msg);

こんな感じで、文字列を修飾できます。


106ポイント を手に入れた。



Name: Ma  ..比類無きプログラマー(99,061ポイント)   Date: 2010/05/19(水) 11:51   No:52340       
Title: メタセコ 選択できないorz    
プログラミングに関係なくてすいません。

選択モードでオブジェクトの一部を選択しようとしているんですけど、選択モードになっててもできないんですよね・・・。(青色にならない)
メタセコの経験量はいじってた時間が約十時間ぐらいになるとおもいます。
いままで、こんなこと一度もなかったのになぁ。

http://www1.axfc.net/uploader/Sc/so/115122.avi

動画用意しました。1.7MB ですので、お気軽にどうぞ。
DLキーワード: met

何か間違ったオプションか何か入ってるとおもうんですが、心あたりある方いないでしょうか?
Ctrl+A で全選択もできません。

v2.4.8
よろしくおねがいします。 編集済み


217ポイント を手に入れた。


Name: ムンバ  ..熟練のプログラマー(47,713ポイント)   Date: 2010/05/19(水) 23:23   No:52370     
Title: Re:メタセコ 選択できないorz    
こんばんは。

メタセコイアは、詳しくないので参照させて頂いているサイトを紹介させて頂きます。
既に、ご存知でしたら申し訳御座いません。

ttp://www.fiberbit.net/user/r2-m2/clare/3dcg/index.html

ttp://ktg.xii.jp/mqo/
↑サイト内の
ttp://ktg.xii.jp/mqo/mqo-basic/mqobsc_001.html

ttp://maglog.jp/lightbox/index.php?module=PB
(↑ちょっとマニアックかもしれません。)

お役に立てなければ、すみません。<(_ _)>

---修正部位・アドレス--- 編集済み


196ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(47,807ポイント)   Date: 2010/05/20(木) 01:17   No:52376     
Title: Re:メタセコ 選択できないorz    
>>何か間違ったオプションか何か入ってるとおもうんですが、心あたりある方いないでしょうか?

「何か間違ったオプションか何か入ってる」と思われるのでしたら
それが、心あたりのある事なのではないのでしょうか?


94ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(99,177ポイント)   Date: 2010/05/20(木) 05:10   No:52383     
Title: Re:メタセコ 選択できないorz    
>「何か間違ったオプションか何か入ってる」と思われるのでしたら 
>それが、心あたりのある事なのではないのでしょうか?
それが何かわからないですね(汗
ショートカットキーで間違えておしてしまったとか考えてました。

再インストール試してみます。


116ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(99,212ポイント)   Date: 2010/05/20(木) 13:52   No:52393 解決!     
Title: Re:メタセコ 選択できないorz    
再インストールしたら直りました。
バグなのか、設定ミスなのか原因は分かりませんが、解決にします。


35ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(47,992ポイント)   Date: 2010/05/21(金) 01:46   No:52409     
Title: Re:メタセコ 選択できないorz    
>>バグなのか、設定ミスなのか原因は分かりません

こんばんは!(解決後、すみません。)

 >メタセコの経験量はいじってた時間が約十時間ぐらいになるとおもいます。
  再インストールして直ったのでしたら
  >何か間違ったオプションか何か入ってる
  間違ったオプションが原因だとしたら
  その間違ったオプションが何だったのか
  教えて頂けないでしょうか?

お手数お掛けしますが、宜しくお願い致します。

---編集・追記---
メタセコイアのバグでは無いと思われます。^^ 編集済み


185ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(99,341ポイント)   Date: 2010/05/21(金) 04:59   No:52415     
Title: Re:メタセコ 選択できないorz    
全部しっかり見直してみると、編集オプションの点。辺。面 がすべてOFFになってました。
ONにしてみると直りました。

これはこれは。。。気づかなくてすいません(汗


48ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(48,001ポイント)   Date: 2010/05/21(金) 10:08   No:52422     
Title: Re:メタセコ 選択できないorz    
おはようございます。

こちらこそ、しつこくすみませんでした。
気になったもので。^^;
ご報告ありがとうございました。


9ポイント を手に入れた。



Name: 灯雷  ..ぴよぴよ(117ポイント)   Date: 2010/05/21(金) 03:18   No:52412       
Title: 3章でつまづきました・・・。    

初めまして、灯雷と申します。もっぱらの初心者ゆえなんで、こんな所でつまづいているんだと思われてしまうかもしれませんが・・・。
テンプレ使用で申し訳ありません。
[1] 質問文
 [1.1] ゲームプログラミングの館3章にて文章通りにやったのだがエラーが起こり、コンパイルがうまくいかない。
 [1.2] 1章の画像を指定の場所「サンプルプログラム実行用フォルダ」に保存し、ソースコードをコピペした。
 [1.3]上記の通りソースをコピー&ペーストしました。 
1>test.obj : error LNK2005: _WinMain@16 は既に cha.obj で定義されています。
1>C:\Documents and Settings\灯雷\My Documents\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\DxLib_VC2008用.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。 
と以上のように書かれ起動せず。


[1.4] 以前から画像を取り込めないことに首をかしげていました。他の画像でも試しのですが、画像は出ない。もしかしたら何か通過儀礼のようなものでもあるのでは?と思い、あるならば教えて欲しい。もしくは根本的に間違えているならぜひ指導してほしいです。
      
[2] 環境  
 [2.1] OS : WindowsXP
 [2.2] コンパイラ名 : VC++ 2008EE, 
[3] その他 
 ・まだC++を学び始めて1ヶ月経ったか経たないかぐらいのひよっこです。
 ・ライブラリは?→DXライブラリ、でいいのかな・・・。
お手数だと思いますがご指導いただけると幸いです。


117ポイント を手に入れた。


Name: やっくん  ..プログラマー(25,372ポイント)   Date: 2010/05/21(金) 05:29   No:52418     
Title: Re:3章でつまづきました・・・。    
ソースファイルtestとcha両方にWinMainが呼び出されているのでは無いでしょうか?
一つのプロジェクトの中にWinMain関数(main関数)は1回しか呼べません。

解決策としては、どちらかのソースファイルを消すかWinMain関数をどちらかコメントアウトなどして取り除いてコンパイルを一度してみてもらえませんか?


80ポイント を手に入れた。

Name: 灯雷  ..ぴよぴよ(241ポイント)   Date: 2010/05/21(金) 06:43   No:52419 解決!     
Title: Re:3章でつまづきました・・・。    
出来ました!
なるほどMain関数は1個までですか・・・タメになりました。

またどこかでつまづくと思います、恥ずかしながらそういう者なので。

では、ありがとうございました。


2倍のポイントを手に入れた! 124ポイント を手に入れた。



Name: やっくん  ..上級者(18,704ポイント)   Date: 2010/05/12(水) 01:27   No:51960       
Title: 2Dエフェクトエディタの作成    
http://www.play21.jp/board/formz.cgi?action=res&resno=51633&page=&id=dixq&rln=51946

こちらの続きのようなものです。
スレッドの趣旨が違うので新たに建てさせていただきました。

現在、
・VC++288ExpressEdition
・DXライブラリ
の環境の下にRPGの戦闘部分に使うエフェクト処理の値を簡単に求めるツールを作ろうと思っております。
ツールを作ることが初めてですのでいくらかアドバイスを頂いていきたいと思いスレを立てました。

さっそくですが、以下のプログラムが予定している動作通りに動きません。
期待動作としては「マウスの左ボタンを押下状態にしたとき、その座標に点を描画する。マウスを押下状態のまま移動させると見た目上、連続な線を描ける」というもです。
点の表示はうまくいくのですが、滑らかな線が引けません。(とてもゆっくりマウスを動かすと見た目上、連続的に引ける)
点と点の間隔を操作する方法は無いでしょうか?
以下にマウスの座標を取得して点を描画している関数部分を載せます。
関数はDXライブラリの物を使っております。
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html
描画は裏画面に一度描画して、点を描画する度に画面に表示しております。

void draw()
{
    int x, y; // マウスの座標を保存する
    int MouseInput ; // マウスの入力

    // マウスを表示状態にする
    SetMouseDispFlag( TRUE ) ;

    // マウスの入力を待つ
    MouseInput = GetMouseInput() ;
    while( !ProcessMessage() && (MouseInput & MOUSE_INPUT_RIGHT) == 0 && !Key[KEY_INPUT_RETURN])
    {
        // メッセージ処理
        if( ProcessMessage() == -1 )
        {
            break ;    // エラーが起きたらループから抜ける
        }

        // マウスの入力を得る
        if(GetMouseInput() == MOUSE_INPUT_LEFT){
            GetMousePoint(&x, &y);
            DrawPixel(x, y, GetColor(255, 255, 255));
            ScreenFlip();
        }


    }


}


ちなみに、とりあえずの形として以下のように製作していきたいと思っています。
・任意の2点の座標を入力し、○など見やすい形を描画する(戦闘での自分と敵をイメージした目印)。
・この目印を参考にして、マウスで画像(エフェクト)の座標移動の経路を見える形で描く。
・ファイルに出力。
この段階ではツールとしてのいろいろな機能はまだ考えないこととします。(画像ファイルを開く等)

これを基盤にエフェクトエディタを作って行こうと思っていますが何か良い意見がありましたら教えていただけ無いでしょうか。 編集済み


758ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(529,037ポイント)   Date: 2010/05/12(水) 01:33   No:51961     
Title: Re:2Dエフェクトエディタの作成    
 滑らかな線を引くなら DrawLineを使えばいいんじゃないでしょうか。
 最も、ClearDrawScreenで毎フレーム画面をクリアする必要がありますけど。


46ポイント を手に入れた。

Name: やっくん  ..上級者(19,310ポイント)   Date: 2010/05/12(水) 02:29   No:51964     
Title: Re:2Dエフェクトエディタの作成    
※画像は1つ目の実行結果です。
Justyさん、いつも返信ありがとうございます。
DlawLineを用い、滑らかな線を引くことができました。

void draw()
{
    int x, y; // 現在のマウス押下位置
    int pre_x, pre_y; // 1つ前の状態
    int MouseInput ;
    bool mouse_press_flag; // マウスが押されているかどうか

    // マウスを表示状態にする
    SetMouseDispFlag( TRUE ) ;

    // マウスの入力を待つ
    MouseInput = GetMouseInput() ;
    while( !ProcessMessage() && (MouseInput & MOUSE_INPUT_RIGHT) == 0 && !Key[KEY_INPUT_RETURN])
    {
        // マウスが押されて無いならば。
        if(GetMouseInput() == 0) mouse_press_flag = false;

        // マウスの入力を得る
        if(GetMouseInput() == MOUSE_INPUT_LEFT){
            GetMousePoint(&x, &y);
            if(mouse_press_flag == false){
                pre_x = x;
                pre_y = y;
                b++; // 押下フラグを"true"に
            }
            //DrawPixel(x, y, GetColor(255, 255, 255)); // 点描画
            DrawLine(pre_x, pre_y, x, y, GetColor(255, 255, 255)); // 線描画
            ScreenFlip();

            pre_x = x; pre_y = y;
        }
    }
}


あとは座標をファイルに出力する際に点と点の間の座標を補うような形を作ってみます。

といっても、添付した画像(1個目の実行結果)の座標間隔を元に画像が滑らかに動けば無駄にデータを増やす必要は無いでしょうけど(^^;

とりあえず、座標を補間せずに不連続な状態で画像を動かしてみます。 編集済み


606ポイント を手に入れた。

Name: やっくん  ..上級者(19,534ポイント)   Date: 2010/05/12(水) 15:25   No:51980     
Title: Re:2Dエフェクトエディタの作成    
下の動画ような感じで画像を動かすことができました。(ニコニコ動画)
http://www.nicovideo.jp/watch/sm10695598

次に簡単なファイル操作機能を付けようと思います。
目標としては
・新規ファイルを作って描画→ファイル出力をできる。
・作ったファイルを読み込んでそのファイルに記された通りに画像が動く。

ですが、添付画像のようなメニュー部分を作りたいのですがそうしてしまうと、描画範囲が減ってしまいます。
描画部分は640×480ピクセルにしたいのですが、メニューを作ることにより小さくなってしまいます。

これの対応策として
・スクロールをさせて640×480ピクセルに見せかける。
・メニューだけ別のウインドウで立ち上げる。
を考えております。

ですが1つ目は実装できたとしても使いづらそうなのであまり作りたくはありません。
2つ目をできれば作りたいのですが、マルチウインドウを作るにはどうすればよろしいですか?

また、この方法以外に良い方法はありませんか?


224ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(162,971ポイント)   Date: 2010/05/12(水) 15:42   No:51981     
Title: Re:2Dエフェクトエディタの作成    
メニュー・ウィンドウをWin32APIで作るのなら出来そうです。
Win32APIが始めてだと大変ですけどね。

DXライブラリのウィンドウ自体を広げるのは無しですか?


43ポイント を手に入れた。

Name: やっくん  ..上級者(19,794ポイント)   Date: 2010/05/12(水) 16:03   No:51983     
Title: Re:2Dエフェクトエディタの作成    
softyaさん、返信ありがとうございます。

ウィンドウを広げては見ましたが、あくまでも640×480ピクセルでしたのでメニュー部分を作ると描画部分が640×480ピクセル以下になってしまいます。
DXライブラリの以下の関数を使用しました。
仕様にも比率設定としかないので、ピクセル自体は大きくできないのでしょうけど。
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R11N4
ピクセルを640×480以上にする方法はあるのでしょうか?

Win32APIについては触ったことがありません。
JavaのSwingアプリケーションのように簡単に作れるわけではないですよね?
Win32APIは近い内に学ぼうとしていたものなので良い参考書資料がありましたら教えていただけないでしょうか。

ですが、今はWin32APIに手を出すとこちらの方を一時中断しなければいけないので、出来る限り使わないようにメニューを実装する方法を考えていきたいです。 編集済み


260ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(163,124ポイント)   Date: 2010/05/12(水) 16:36   No:51984     
Title: Re:2Dエフェクトエディタの作成    
SetGraphMode()で変更出来ます。
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R4N1

Win32APIは、手をだすのは危険でしょうね。

「猫でもわかるプログラミング」WindowsSDK編。
http://www.kumei.ne.jp/c_lang/
「Win32API(C言語)編」
http://www.geocities.jp/ky_webid/win32c/index.html
「Win32 API入門」
http://wisdom.sakura.ne.jp/system/winapi/index.html
「超初心者のプログラム入門(C言語 Windows)」
http://www13.plala.or.jp/kmaeda/winc/winc.htm



153ポイント を手に入れた。

Name: やっくん  ..上級者(19,866ポイント)   Date: 2010/05/12(水) 16:57   No:51985     
Title: Re:2Dエフェクトエディタの作成    
URLありがとうございます。

お手軽に変更できたのですね(^^;

Win32Apiは作品を作り終えた後に学ぶことにします。
ところでWin32APIはCやC++の形式とほぼ同じなのでしょうか。


72ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(163,191ポイント)   Date: 2010/05/12(水) 17:05   No:51986     
Title: Re:2Dエフェクトエディタの作成    
>ところでWin32APIはCや C++の形式とほぼ同じなのでしょうか。 

Win32APIは単なるAPI、つまりC言語インターフェイスの関数です。
C言語からでもC++からでも呼び出すことが出来ますよ。


67ポイント を手に入れた。

Name: やっくん  ..上級者(19,876ポイント)   Date: 2010/05/12(水) 17:15   No:51987     
Title: Re:2Dエフェクトエディタの作成    
なるほど。
C、C++専用なのですね。


10ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(80,282ポイント)   Date: 2010/05/12(水) 17:34   No:51988     
Title: Re:2Dエフェクトエディタの作成    
> C、C++専用なのですね。

違います。VBやC#等からでも使います。


20ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(163,240ポイント)   Date: 2010/05/12(水) 17:37   No:51989     
Title: Re:2Dエフェクトエディタの作成    
>C、C++専用なのですね。

いえ、呼び出し規約さえ守れば他の言語でも呼び出せますよ。
C#でもVisualBasicでもExcelVBAでもHSPでもActiveBasic他色々からでも呼び出せます。


49ポイント を手に入れた。

Name: やっくん  ..上級者(19,918ポイント)   Date: 2010/05/12(水) 17:53   No:51990     
Title: Re:2Dエフェクトエディタの作成    
C、C++、JAVAしか言語を知らないので他のプログラム言語はわかりませんが、呼び出し規約というのはVisualBasicならそれ用の形式があるということでしょうか?



42ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(163,325ポイント)   Date: 2010/05/12(水) 18:11   No:51991     
Title: Re:2Dエフェクトエディタの作成    
Win32APIの呼び出し規約はMS stdcallです。
http://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E8%A6%8F%E7%B4%84#stdcall
まぁ、あとは自分で調べてみてください。
今回の件に関係無いですし。


85ポイント を手に入れた。

Name: やっくん  ..上級者(20,040ポイント)   Date: 2010/05/12(水) 22:18   No:51998     
Title: Re:2Dエフェクトエディタの作成    
現在、
@:ファイル名入力(endと入力で処理終了)
A:描画開始
B:描画した座標を実際に動かして確認
C:@に戻る

と、流れを作りました。

動画に取りました。(ニコニコ動画)
http://www.nicovideo.jp/watch/sm10699783?edit=owner

次に画像ファイルなどを「開く」という機能を付けたいのですが、DXライブラリの関数で作れますでしょうか?
自分でファイルパスの入力ができるようにすれば開けますがそれでは効率が悪いので是非実装したい機能です。


122ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(529,227ポイント)   Date: 2010/05/12(水) 22:31   No:51999     
Title: Re:2Dエフェクトエディタの作成    
>次に画像ファイルなどを「開く」という機能を付けたいのですが
 GetOpenFileName関数を使ってみては?

MSDN - GetOpenFileName 関数
http://msdn.microsoft.com/ja-jp/library/cc364716.aspx

ファイルを開くダイアログ - GetOpenFileName
http://richa850.hp.infoseek.co.jp/programming/win05.html



# ところでエフェクトツールとのことですが、具体的にどんなエフェクトをこれで作ろうとしているのですか?


190ポイント を手に入れた。

Name: やっくん  ..上級者(20,253ポイント)   Date: 2010/05/12(水) 22:42   No:52000     
Title: Re:2Dエフェクトエディタの作成    
Justyさん、サンプルソースまで示していただきありがとうございます。
これならば取り入れることができそうです。

私が作っているRPGの戦闘はスーファミのファイナルファンタジーのような物です。
ですので、具体的に言うと二点間(自分と敵)の間を火の玉を飛ばしたり、燃やしたりというような処理を作っていきたいです。

ツールに盛り込む機能として今のところ考えているのは、

・マーク機能(座標を指定して目印を作る)
これは自分と敵キャラの位置を示し、エフェクトを作りやすいようにするためです。

・エフェクト画像の割り当て
一定のタイミングでエフェクト画像が切り替わるように、ファイルに出力する際にはその座標に使う画像パスなども書き込む予定です。

最初はこれくらいのものを作ろうと考えております。
この先はできてから考えようかと。


213ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(163,468ポイント)   Date: 2010/05/12(水) 22:45   No:52001     
Title: Re:2Dエフェクトエディタの作成    
>次に画像ファイルなどを「開く」という機能を付けたいのですが、DXライブラリの関数で作れますでしょうか?

そこはWin32APIのコモンダイアログを使えば比較的簡単に作れます。
これだけなら、Win32APIのややこしいところを知らなくて作れますよ。
http://www14.big.or.jp/~ken1/tech/tech14.html


143ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(529,319ポイント)   Date: 2010/05/12(水) 23:33   No:52005     
Title: Re:2Dエフェクトエディタの作成    
>私が作っている
>〜
>というような処理を作っていきたいです。 

 なるほど。ありがとうございます。
 先はまだ長そうですが、完成したら便利なツールになりそうですね。


 1点だけちょっと気になったのですが、自分と敵の間でエフェクトを飛ばす軌跡をこのツールで作る場合
味方が4人敵が5体とかいた場合下手すると 4×5通り作らなければならなくなるような気がするのですが、
その辺りは何か考えがあるのでしょうか?


92ポイント を手に入れた。

Name: やっくん  ..上級者(20,066ポイント)   Date: 2010/05/12(水) 23:43   No:52007     
Title: Re:2Dエフェクトエディタの作成    
softyaさんありがとうございます。

形を作ることはできました。
あとは自分の使いやすいように書き換えていきます。

サンプルソース中に

ofn.lpstrFileTitle =name; //選択されたファイル名を受け取る

と、あるんですがこれは代入文では無いのでしょうか?
知識不足で何がどのようになっているかわかりません。
動作としてはちゃんとファイル名を受け取っているようですが・・・。


187ポイント を落としてしまった。

Name: やっくん  ..上級者(19,918ポイント)   Date: 2010/05/12(水) 23:55   No:52008     
Title: Re:2Dエフェクトエディタの作成    
>Justyさん
今、作っているRPGが戦闘は1:1限定としていますのでそこまで考えていませんでした(^^;
製作中の物が完成すれば多人数戦闘を実装していこうかと考えていたので、確かにそこは考えなければいけないですね。

やはり理想的なのは対象座標が変化してもエフェクト処理が問題なく対応できる、といったところでしょうか。
少し考えてみましたが良い案は思いつきませんでした(^^;
とりあえず現在は1:1の戦闘を想定したエフェクトツールを作ってみます。


148ポイント を落としてしまった。

Name: softya [URL]  ..ハッカー(163,568ポイント)   Date: 2010/05/13(木) 00:06   No:52009     
Title: Re:2Dエフェクトエディタの作成    
FC/SFC時代のFFの様に考えれば難しくないですよ。
魔法エフェクトは、主人公側と敵側で独立してました。
主人公側から敵側に当たる技って弓矢ぐらい?
後は打撃時は、直接敵の前に移動してましたので。


100ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(529,178ポイント)   Date: 2010/05/13(木) 00:31   No:52011     
Title: Re:2Dエフェクトエディタの作成    
>やっくんさん
>作っているRPGが戦闘は1:1限定
 そうでしたか。
 1:1でも、この方式で自分・敵の位置を固定してエフェクトを作ると後で自分か敵の位置を
変えたくなったときにエフェクトが作り直しになる可能性もありますので、
その辺りは気をつけておいた方がいいかもしれません。


>softyaさん
>FC/SFC時代のFF
 あー。
 たしかに iPhone版の FF2を見てみたら、敵にモノが飛んでいってないですね。
 通常の攻撃は剣だろうが弓だろうが自分のところから一歩前に出て攻撃すると、
次の瞬間敵に命中してる……。


141ポイント を落としてしまった。

Name: やっくん  ..上級者(20,471ポイント)   Date: 2010/05/13(木) 01:15   No:52015     
Title: Re:2Dエフェクトエディタの作成    
>softyaさん
その手がありますね。
FF5あたりではブリザラあたりが敵に飛んでいってたような気がしますが、いつかそのような処理もできるようになりたいものです。

>Justyさん
>自分か敵の位置を 変えたくなったときにエフェクトが作り直しになる可能性もありますので、 
確かにこの仕様だと、そのようなことが起こりえますね(^^;
自分と敵との距離が固定されていれば、自分の座標or敵の座標からの増分でエフェクトを考えるというのも有かもしれません。これならば自分と敵間の距離を変えずに位置変更を行った場合ならば対応できます。
ですが、とりあえずまずは自分と敵の位置は固定しているという前提で作ってみます。


少し汚いですが、この先の構成が大体まとまりました。(添付画像参)
左上が描画領域、右側がメニュー部分、下部に使用する画像一覧です。
メニューには
・保存ファイル名入力 
・使用する画像追加
・マーク機能(詳細は上に記した通りです)
・描画終了ボタン
・動作確認

画像についてですが、
・マウスで描画する際に使用する画像を選択(選択してない場合は描けないようにする)
・複数選択した場合は交互に使われる。(後々、出現割合も決める)
・画像の透過設定はメニューから画像を追加する時か、描画画像に選択する時かのどちらか。

とりあえず、ファイルを開くことができるようになったので明日から徐々にこれを組み立てて行こうと思います。
 編集済み


553ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(529,336ポイント)   Date: 2010/05/13(木) 02:56   No:52019     
Title: Re:2Dエフェクトエディタの作成    
>自分か敵の位置を 変えたくなったとき
 実際のところいろいろ手はありますので、必要になった時点で解決できなければ
また質問してみてください。


>とりあえずまずは自分と敵の位置は固定しているという前提で作ってみます
 了解です。
 頑張ってください。応援しています。



>あるんですがこれは代入文では無いのでしょうか?
 char型のポインタの代入文です。
 元を辿ると判りますが、呼び出しもとの WinMain関数のローカル変数の配列 filenameを差していますので、
GetOpenFileName関数は選択されたファイル名をその filename配列に書き込みます。


158ポイント を手に入れた。

Name: やっくん  ..上級者(20,854ポイント)   Date: 2010/05/13(木) 14:12   No:52048     
Title: Re:2Dエフェクトエディタの作成    
>char型のポインタの代入文です。 
理解できました(^^;
このようなポインタの使い方を今までしたことがなかったため少し戸惑いました。
よくよく考えるとchar型nameのアドレスを渡していて、渡した先の変数には当然nameのアドレスが入ってるので書き換えればnameを書き換えたことになりますね。


143ポイント を手に入れた。

Name: やっくん  ..上級者(21,064ポイント)   Date: 2010/05/16(日) 12:59   No:52200     
Title: Re:2Dエフェクトエディタの作成    
現在、ボタンを作り、そこから操作を行えるようにまでしました。
↓参考動画(ニコニコ)
http://www.nicovideo.jp/watch/sm10732275

今、現在はマーク機能を付けているのですがここである問題が発生しました。
(マーク機能はエフェクトの描画をしやすいように行うための目印をつけることです)

動画とは少し形を変えて、マークを付けるのは描画している任意のタイミングでします。
目印が欲しくなったときに付けるという感じです。
問題になるのは、描画中に付けたマークを削除したいときです。
マーク削除しようとすると私は画面を全部クリアする方法しかしらないため、描画中の線まで消えます。
描画している座標は描画されるごとにファイルに座標として保存しているとはいえ、今までの軌跡が消えるのは少し使いづらくなります。

一部だけ画像を消す、またはレイヤー機能などを追加したいのですがどのように行えば良いでしょうか?


210ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(531,949ポイント)   Date: 2010/05/16(日) 15:06   No:52206     
Title: Re:2Dエフェクトエディタの作成    
 画面ごとさっくり消してしまって再度描画した方が楽ですし、処理も話も早いです。
 軌跡が必要なら座標を全てメモリに覚えておけばいいのです。
 
 あと描画と同時にファイルに保存しているとのことですが、何かのアクション……保存ボタンを
押したときとかに保存する、という方がよくないですか?


>一部だけ画像を消す
 理論的には不可能というわけではないんですが……。
 例えば消したいところを DrawPixel / DrawBox等で背景色で描けばそこは「消えた」ことに
なりますよね。
 ただ、どこを消せばいいのかを割り出すのは結構面倒な気がします。


>レイヤー機能
 今回の目的を実現するためのレイヤー機能をDXライブラリで実現するならば、
オフスクリーンレンダリングとかレンダーテクスチャと呼ばれている機能を使えば一応は可能です。

 これなら軌跡の座標情報を一切記憶することなく、軌跡を描いたレイヤーはテクスチャとして
ずっと保持しておくことになりますので、望みのことはできると思います。

 が、レイヤーの仕組み自体の導入はともかく、その目的が画面をクリアすることなく、
軌跡の絵を保護したいことだとするとあまりお勧めはできません。

 この方針を突き詰めていくと、何でもかんでもレイヤーに分けないと後から部分的に
消せなくなることを意味しています。

 そう考えていくと、オブジェクト管理の面とかメモリや処理速度などどこかで破綻するでしょう。
 やはり画面は全部消して、毎回描きなおすのが現実的だと思います。


467ポイント を手に入れた。

Name: やっくん  ..上級者(21,900ポイント)   Date: 2010/05/16(日) 16:44   No:52208     
Title: Re:2Dエフェクトエディタの作成    
Justyさんありがとうございます。

>軌跡が必要なら座標を全てメモリに覚えておけばいいのです。
今後、ファイルには座標1点1点ごとに何の画像を使うか、透過はどうするか、などの情報も付加していきます。
15秒間マウスを押しっぱなしにして、描画したところファイルには約1000個の座標が書かれていました。
多めに要素数2000個〜3000個くらいの配列を取って、画像の名前を保存する配列も考えて計算しましたが十分メモリ量は足りそうです。
初めは「メモリ使いすぎるかもしれない」と思い座標は描画と同時に保存していました。


>あと描画と同時にファイルに保存しているとのことですが、何かのアクション……保存ボタンを 
>押したときとかに保存する、という方がよくないですか?
これは描画する際の修正が効くようにできるからでしょうか。
確かに描画した座標をメモリに覚えさせていればこちらの方が良さそうです。


>オブジェクト管理の面とかメモリや処理速度などどこかで破綻するでしょう。 
>やはり画面は全部消して、毎回描きなおすのが現実的だと思います。
今回の問題に限らず、画像を追加したり削除する場合もこの方法を取ることにしてみます。

追記:
メモリへ一時データ保存しておいて、ファイルに任意のタイミングで保存するというだけで、2つアイディアが浮かびました。
・描画中に現在のところまでをエフェクトを使って確認。(描画時は画像は用いず選択するだけで実際は線を描いて行うため)
・描画の書き加え(ファイルを開いて、そこに更に書き加えていく)

メニューの方も動画にUPしてる方とは変わるかと思います。
上の内容まで完成したらまた動画を載せるので、良ければ意見をお願いします。

追記2:
任意のタイミングでファイルを保存できるようにすれば、Win32APIの保存機能を使えますね。
そうすればわざわざファイル名を最初に書かなければ行けない手間も省けます。
おかげさまで良い感じになってきました!! 編集済み


322ポイント を手に入れた。

Name: やっくん  ..上級者(22,263ポイント)   Date: 2010/05/17(月) 23:10   No:52255     
Title: Re:2Dエフェクトエディタの作成    
>軌跡が必要なら座標を全てメモリに覚えておけばいいのです。 
アドバイスのおかげで操作性が前回より大幅にUPしたように思えます。

参考動画
http://www.nicovideo.jp/watch/sm10755606

・マーク(目印)セット、削除ができる。
・ファイルの保存を任意のタイミングでできるようになった。
・ファイルへ保存した地点に描画を戻せるようになった。(書き直しができる)
・描画しながら現在の状態を確認ができるようになった。
(ただし、マークの位置は記憶させてないためマーク復元はしてない。)

このような感じで良いでしょうか?
前よりはすっきりした感じがします!!
これに対して何かアドバイスがありましたらよろしくお願いしますm(__)m

次は画像追加機能と描画への画像割り当て機能を追加してみます。


243ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(533,974ポイント)   Date: 2010/05/18(火) 02:41   No:52263     
Title: Re:2Dエフェクトエディタの作成    
 動画拝見しました。
 なかなか頑張ってますね。
 大夫良くなったと思います。

 あとは……そうですね。

 今はリアルタイムで記録していると思います。
 この方式は簡単ではありますが、部分的に微妙にぶれてしまったり、いい線が書けたけど
緩急の付け方に失敗してしまうなど思うような線がすぐに書けない可能性があるのではないでしょうか。

 そこでそういう部分を書いているときか書き終わった後にでも何かしら修正する機能を考えてみると
いうのはどうでしょう。

 実際どういうふうにすればいいのか、というのはなかなか難しいところではありますが……。

 んー、すぐに書き直しができるようになりましたし、要らないですかね。


250ポイント を手に入れた。

Name: やっくん  ..上級者(22,652ポイント)   Date: 2010/05/18(火) 08:06   No:52267     
Title: Re:2Dエフェクトエディタの作成    
返信ありがとうございます。

>そこでそういう部分を書いているときか書き終わった後にでも何かしら修正する機能を考えてみると 
いうのはどうでしょう。 

やはり、これですよね・・・(^^;
動画編集をするような感じで行えたらな、と思ったことがあります。


>すぐに書き直しができるようになりましたし、要らないですかね。

この取らえ方で最初は行こうと思いました。
ですが、画像追加機能を作る前にファイル操作を行う部分は一通り作り終えてた方が楽なので今日1日何かアイディアが無いか考えて見ます。

少し考えてみたところ、最低限必要な物として
・タイミングチャートのようなものの追加(動画編集を行う感じにする)
・上記を作るためのスクロール機能
・描画したものを保存する際に切り捨ててるデータを別ファイルへの保存
(これは描画終了済みファイルを途中から描画再開するときにも必要となる)
の2点ですね。実際に作ると他にもあるかもしれませんが。

スクロール機能についてですが、これは以前にJustyさんに教えていただいた2Dマップを作る際のカメラの概念のようなものを取り入れればよろしいんでしょうか?
それか、スクロール機能をWin32APIで都合よくできたりはしないですよね?


389ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(534,665ポイント)   Date: 2010/05/19(水) 01:21   No:52327     
Title: Re:2Dエフェクトエディタの作成    
>スクロール機能
 考え方としてはそうですね。
 でもこの場合、ゲームほどいろいろ管理する情報はなく、単純にスクロール面の左上と対応する内部座標が
どこにあるか(というか座標の差分がどれだけあるか)で管理していれば基本はOKです。


>スクロール機能をWin32APIで都合よくできたりはしないですよね?
 バーそのものは、一応ありますけど、
 
スクロールバー
http://wisdom.sakura.ne.jp/system/winapi/win32/win50.html

この場合DXライブラリのとは別のウインドウにした方がいいですね。



 あと、すっかり抜けていましたが
>No:52208
>これは描画する際の修正が効くようにできるからでしょうか。 
 それもありますし、毎フレームファイルに書き出すのはさすがにちょっとどうなのかな、と。
 保存先がフロッピーディスクなどアクセスが遅いメディアだったりすると問題になるかもしれませんし。
 編集済み


247ポイント を手に入れた。

Name: やっくん  ..上級者(23,040ポイント)   Date: 2010/05/19(水) 07:09   No:52331     
Title: Re:2Dエフェクトエディタの作成    
Justyさん、返信ありがとうございます。

せっかく回答していただいたのに申し訳ないのですが、今回の編集機能は断念することにしました。
タイムラインを用いた編集を作ろうとすると、スクロールは関係なく子ウィンドウの作成が必要となります。過去ログを参考にしたところ、子ウィンドウは簡単に作れるわけでは無いのですね。DXライブラリでは2窓の製作が不可能みたいなので、今回の任意タイミングでの編集機能は諦めることにします。

(2窓にしないことも考えましたが、その場合は在のメニュー画面を一時的にタイムラインを用いた編集画面にしなければなりません。しかし、今後追加する予定の画像機能のことも考えスペースが取れなくなります。よって2窓にしなければならない、と思いました)

参考にしたログ『DXライブラリ用ウィンドウ生成クラス 』
http://www.play21.jp/board/formz.cgi?action=res&resno=49127&id=dixq&lognum=152&from=tree

Win32APIにおいてのマルチWindow生成に関しての記事
http://d.hatena.ne.jp/shibusawa_1/20081024/1224834973
http://questionbox.jp.msn.com/qa5642592.html
・・・etc

やはりWindowsにおいてC、C++でのGUI開発はWin32APIを学ばなければいけないみたいですね。
ゲーム製作までひと段落したら学ぶことにして、今回はここをスルーすることにします(^^;


388ポイント を手に入れた。

Name: やっくん  ..上級者(23,729ポイント)   Date: 2010/05/20(木) 01:04   No:52375     
Title: Re:2Dエフェクトエディタの作成    
おかげさまで2Dエフェクトツール、ほぼ完成しました。
まだ、描画したファイルの確認モードを作っていないため動画での説明はできませんが、確認モードが出来次第動画を上げますのでご覧になってもらえないでしょうか。

今回は最終段階とも言える画像追加&削除機能(透過、不透過選択可)と描画との関連を加えました。
最終的なファイルの出力形式は以下のような感じです。
宜しければ添付ファイルと見比べてもらえないでしょうか。

N // 画像枚数
画像0名前 画像1名前 ・・・ 画像(N-1)名前
x座標 y座標 画像NO 透過
x座標 y座標 画像NO 透過
x座標 y座標 画像NO 透過
x座標 y座標 画像NO 透過
/*** 略 ***/


添付ファイルの説明
画像NOのところが繰り返し0→1→2のようになっていますが、これは使用する画像を3つ選んだ場合です。
使用する画像が複数の場合はこのように繰り返しで画像が現れるようになっています。
現れる頻度も今後、変えれる様にしていきたいと思っております。
透過は1がTRUE、0がFALSEと自分の中で決めております。

ここで一つ質問があります。
現在、画像名をファイルの2行目に出力する形で作っています。
パスは記述してないので、画像を呼び出す際はこのファイルを利用するプログラム側でその画像までの相対パスを記述するのが一番良いのでしょうか?それ以外にはありませんよね? 編集済み


442ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(536,048ポイント)   Date: 2010/05/20(木) 03:03   No:52382     
Title: Re:2Dエフェクトエディタの作成    
>後追加する予定の画像機能のことも考えスペースが取れなくなります
 今回は断念ということでいいとは思いますが、編集機能に限らず今後いろいろ機能を増やしていくと
どのみち領域が足りなくなるような気がします。
 その度にウインドウを大きくしていくのもアレなので、タブとかスイッチなどで
メニュー画面内の内容をいつでも切り替えられるような仕組みは入れておいた方がいいのかもしれません。
(動画を見る限り、既に今でも内容が切り替わっているようではありますが)


>WindowsにおいてC、C++でのGUI開発はWin32APIを学ばなければいけないみたいですね
 .Net系だともうちょっと楽に扱えますけど、Windowsで GUIを作る以上なかなか WinAPIは
避けて通れないですね。
 そういう意味ではDXライブラリはよく出来ています。


>宜しければ添付ファイルと見比べてもらえないでしょうか
 一応大丈夫そうに見えるんですが

・ ファイル名に空白があった場合の処理
 これを正しく処理できるようになっていますか?
(スペース区切りより、例えばタブで区切った方がいいかな、と。Excelでも列に分けて見られますし)

・ 画像Noとその画像が透過するかどうかの情報の扱い方
 この組み合わは同じ画像 Noなら透過するかしないかはその段階で決まっているのではないでしょうか。
 もしそうであれば、時間毎の座標リストの中に透過情報を含める必要はないと思います。

・ フォーマットの拡張性は十分でしょうか
 今は開発中なのでそれほど大きな問題にはなりませんが、今後機能を追加していくにあたって、
ファイルフォーマットはある程度柔軟に設計しておく必要はないでしょうか。

 例えば多分今は3行目から時間毎の座標リストと扱っているかと思いますが、そのうち4行目移行に
なるかもしれません。
 そんなとき、古いデータを新しいプログラムが解釈できるように作っておかないと過去のデータを
全て捨てるか、手動で修正が必要になるかもしれません。


>画像を呼び出す際はこのファイルを利用するプログラム側でその画像までの相対パス記述するのが一番良いのでしょうか?

 データファイルの画像ファイル名のところを、そのデータファイルからの相対パスで記述する

 これを基本とするのはどうでしょう?
 こうしておけば、プログラムはデータファイルを解析するだけで、画像ファイルの位置が判ります。

 まぁプログラム側からそれをオーバーライドして、プログラム側で指定したディレクトリパスと、
データファイル内の画像ファイルパスから、画像ファイルの位置を割り出す仕組み‘も’
入れておいてもいいですね。
 動きは同じで画像が違う、ということが簡単にできるようになりますし。


1,054ポイント を手に入れた。

Name: やっくん  ..プログラマー(25,223ポイント)   Date: 2010/05/21(金) 01:14   No:52408     
Title: Re:2Dエフェクトエディタの作成    
>メニュー画面内の内容をいつでも切り替えられるような仕組みは入れておいた方がいいのかもしれません。 
現在は、メニューモードと描画モードの2つを切りかえれるようにしております。
メニュー画面を切り替えでうまく編集機能を追加できないかを考えて見ます。

>ファイル名に空白があった場合の処理 
>これを正しく処理できるようになっていますか? 
できていませんでした。
スペースを含むファイル名を考慮し、文字列はタブor改行で区切られてると想定した場合のプログラムを少し書いてみてみました。直貼りで申し訳ないです。実際に現在製作中のプロジェクトに使う場合はクラスなどを用いてるため書き換える部分もあります。

#include <stdio.h>
#include <string.h>

int main(void)
{
    FILE *fp;           // file pointer
    int i;              // 文字のカウント用
    int num=0;          // 文字列のカウント用
    char moji[10][256]; // 文字列
    char buff[256];     // バッファー

    /* file open */
    fp = fopen("test.txt", "r");
    if(fp == NULL){
        printf("file open error\n");
        return 0;
    }

    /* 文字列の読み込み */
    for(i = 0; ; i++){
        buff[i] = fgetc(fp);
        // もし、1文字目にタブ、スペース、改行ならば読み飛ばす
        if(buff[0] == '\t' || buff[0] == ' ' || buff[0] == '\n'){
            i = -1;
            continue;
        }
        // もし、2文字目以降にタブor改行ならば、そこまでを文字列とする
        else if(buff[i] == '\t' || buff[i] == '\n'){
            buff[i] = '\0';
            strcpy(moji[num], buff);
            num++;
            i = -1;
        }
        // もし、ファイルの終端ならループを抜ける
        else if(buff[i] == EOF) break;
    }

    fclose(fp);

    // output
    for(i = 0; i < num; i++) printf("%s\n", moji[i]);

    return 0;
}


プロジェクトに使う場合は読み込みの終了条件を『改行文字を読み込んだら』に書き換えることになると思います。
ところで、現在は1行にファイル名を何個も記述する形を取っていますが、「1つのファイル名について1行ずつ使う」というのに変えようか迷っております。
出力データファイルの1行目で使う画像の個数を書いているので、こちらの方法も有りかなと思ったのですが、どちらが良いでしょうか?数行に分けることでファイルを見るときは見やすくなるのですが、これは自分の好みで良いでしょうか?

>ファイルフォーマットはある程度柔軟に設計しておく必要はないでしょうか。 
今のままでは柔軟とは言えない設計になっています。
具体的に処理を追加するならば1行目あたりにバージョン情報などを付加し、そのバージョンにより場合分けで処理をするように試みます。

>データファイルの画像ファイル名のところを、そのデータファイルからの相対パスで記述する
この発想は全くありませんでした!!これは確かに処理が楽になりそうです。

Justyさん、毎回毎回本当にありがとうございます><


1,285ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(537,356ポイント)   Date: 2010/05/21(金) 02:09   No:52411     
Title: Re:2Dエフェクトエディタの作成    
>どちらが良いでしょうか
 どっちかと言われれば1行1テクスチャですね。
 あとでそのテクスチャに関する補足情報が必要になったとき、同じ行の後ろに追記できますので。


71ポイント を手に入れた。

Name: やっくん  ..プログラマー(25,292ポイント)   Date: 2010/05/21(金) 05:22   No:52417     
Title: Re:2Dエフェクトエディタの作成    
最初の行に画像枚数も記述していることですので1行1画像名を使うことにします。

今回はいろいろと改良点が山積みとなっているので、このことも含めて修正をしてみます。


69ポイント を手に入れた。

Name: やっくん   Date: 2010/05/26(水) 06:34   No:519601274823274 解決!     
Title: Re:2Dエフェクトエディタの作成    
忙しくて報告遅れました。
一応、形だけは完成しました。

http://www.nicovideo.jp/watch/sm10844751

今度はこれを用い、実際にエフェクトを作っていってみて、不便な点を改善していきたいと思います。
助言をしてくださった皆様、本当にありがとうございました。
これで解決とさせてもらいます。




Name: maki  ..ぴよぴよ(793ポイント)   Date: 2010/05/20(木) 23:17   No:52405       
Title: フロイドのアルゴリズム    
私は千葉の大学生です。
フロイドのアルゴリズムを勉強しています!
先生のヒントがあまりなく困ってます><
課題で最短経路(cost)と来た道すじ(via)を表示したいのですが、どのようにしたら良いでしょうか?
/**/の部分を色々考えていたのですが…よろしくお願いします。

#include<stdio.h>
#define NC 10000
#define N 6
int a[N][N] = {
  /* 0 */  {  0, NC, 4,  2, 8, NC},
  /* 1 */  { 5,  0, 1, NC,  8, NC},
  /* 2 */  { NC, 4,  0, NC, NC,  6},
  /* 3 */  { NC, NC, NC,  0,  5, NC},
  /* 4 */  { NC, 2, 1, NC,  0,  46},
  /* 5 */  { NC, NC,  4, NC, NC,  0}
};  //グラフ
int i,j,k,x;
int cost[N][N];  //経路のコスト
int via[N][N];  //どこから来たのか?

for(i=0;i<N;i++){  //直行ならここへ
  for(j=0;j<N;j++){
    cost[i][j]=a[i][j];
    via[i][j]=i;
  }
}

for(k=0;k<N;k++){  //kを経由するならここへ
  for(i=0;i<N;i++){
    for(j=0;j<N;j++){
      x=cost[i][k]+cost[k][j];
      if(x<cost[i][j]){  //コストと来た場所を更新
        cost[i][j]=x;
        via[i][j]=k;
      }
    }
  }
}

/*
for(i=0;i<N;i++){
  for(j=0;j<N;j++){
    opp(i,j);
  }
}

void opp(int p, int q){
  if(via[p][q]=p){
    p=p; q=q;
    printf("%d   %d\n",p,via[p][q]);
    printf("%d   %d\n",via[p][q],q);
  }
  if(via[p][q]!=p){
    printf("%d   %d\n",p,via[p][q]);
    printf("%d   %d\n",via[p][q],q);
  }
}*/

int main(){
  opp(0,5);  //スタートの表示
  return 0;
}
 編集済み


780ポイント を手に入れた。


Name: たいちう  ..比類無きプログラマー(82,260ポイント)   Date: 2010/05/20(木) 23:30   No:52407     
Title: Re:フロイドのアルゴリズム    
似たような課題をやっている人がいます。
ご参考までに。

http://www3.realint.com/cgi-bin/tarticles.cgi?pointc2+9841


61ポイント を手に入れた。



Name: dic  ..熟練のプログラマー(67,622ポイント)   Date: 2010/05/20(木) 08:20   No:52384       
Title: ファイルサイズ0のファイルが削除できない    
タイトルの通りファイルサイズがゼロのファイルを
remove( "hoge.txt" );
と削除しようとしましたが、削除できませんでした
また
DeleteFile( "hoge.txt" );
としても削除できませんでした

ソースとしては下のとおりとなってます
ファイルサイズが15kくらいあるのは削除できるのですが
ファイルサイズがゼロのファイルだけが残ってしまう現象が起きてます

どうやったらファイルサイズゼロのファイルが削除できるのでしょうか?

開発環境:Windows2000 VC++6
確認動作OS:Windows2000,XP
    int    i;
    char    file[1024];
    for( i=1; i<=g_iEnd; i++ )
    {
        memset( file, 0, sizeof(file) );
        sprintf( file, "%d.txt", i );
        DeleteFile( file );

        memset( file, 0, sizeof(file) );
        sprintf( file, "%d_jis.txt", i );
        DeleteFile( file );

        memset( file, 0, sizeof(file) );
        sprintf( file, "%d_list.txt", i );
        DeleteFile( file );
    }



2倍のポイントを手に入れた! 74ポイント を手に入れた。


Name: たいちう  ..比類無きプログラマー(82,100ポイント)   Date: 2010/05/20(木) 08:58   No:52387     
Title: Re:ファイルサイズ0のファイルが削除できない    
VC7.1, Windows XPで試しましたが、remove, DeleteFileともに削除できました。

・sprintfの使い方に勘違いなどはないですか?
  → ファイル名を直接ソースコードに書いても削除できない?
・ファイルをエディタやプログラムの別の部分で開いている?
・VC6のバグ?
  → ちょっと考えにくい。VCのサービスパックは何を当てていますか?
・プログラムでそのファイルに何か書き込みをしてからなら削除できる?


128ポイント を手に入れた。

Name: ookami  ..上級者(16,399ポイント)   Date: 2010/05/20(木) 09:04   No:52388     
Title: Re:ファイルサイズ0のファイルが削除できない    
手元に VC++6 が無いので確認できていないのですが、
(VC++2005Expressでは問題なく削除できることを確認しました)
別プロセスが握っている可能性はありませんか?エクスプローラ上で削除することはできるのでしょうか。


81ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(67,693ポイント)   Date: 2010/05/20(木) 09:17   No:52390 解決!     
Title: Re:ファイルサイズ0のファイルが削除できない    
サービスパックはなにも当てていない状態ですので
サービスパックをあてようと思います

エクスプローラー上では削除できます

また、ファイルサイズがゼロのファイルが作成されないように
出力のところを変更し解決しました

ありがとうございました


71ポイント を手に入れた。

Name: ぽこ  ..中級者(10,906ポイント)   Date: 2010/05/20(木) 22:32   No:52402     
Title: Re:ファイルサイズ0のファイルが削除できない    
こういう時はDeleteFile()が失敗した時のエラー番号をGetLastError()で取得することを
お勧めします。


2倍のポイントを手に入れた! 92ポイント を手に入れた。



Name: デラ初心者  ..初心者(5,498ポイント)   Date: 2010/05/18(火) 20:29   No:52294       
Title: [雑談]Cの効率の良い覚え方    
お世話になっています。 デラ初心者です

C言語を覚えるのに効率の良い覚え方がありますか?

また、皆さんはどの様にして覚えましたか?

効率よく覚えたいので・・・

効率良く覚えるのは、図々しいでしょうか?


37ポイント を手に入れた。


Name: softya [URL]  ..ハッカー(165,197ポイント)   Date: 2010/05/18(火) 21:23   No:52300     
Title: Re:[雑談]Cの効率の良い覚え方    
デラ初心者さんが悩んでいるは、文法の覚え方でしょうか?
それとも、プログラムの作り方や考え方の話でしょうか?
前者なら暗記と言うか正しい書き方のパターンを覚えるだけです。
後者の場合は覚え方はありませんと言うか、作りながら身につけるものです。


122ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(188,327ポイント)   Date: 2010/05/18(火) 21:43   No:52303     
Title: Re:[雑談]Cの効率の良い覚え方    
性能は悪くてもよいので、自分でコンパイラを作るか、それが無理なら、せめて標準ライブラリを自分で作れば、効率良く、かつ確実に覚えられます。


55ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,190,563ポイント)   Date: 2010/05/18(火) 22:27   No:52312     
Title: Re:[雑談]Cの効率の良い覚え方    
基本が解ったのならとにかく自分が好きな物を作ってみるというのが一番じゃないでしょうか。
デラ初心者さんがプログラムを勉強されているのにはきっと理由があるでしょうし、
それは作りたいソフトを作れるようになりたいからじゃないでしょうか?

好きこそものの上手なれという言葉があるとおり、
プログラムを勉強だと思っているうちは成長度合いが低いと思いますが
それが「楽しい・面白い」と思った瞬間から成長度合いがグンと上がると思います。
softyaさんも仰っているように、やはりプログラムは作りながら覚えるものですね。

作りたい目標があれば作る為に必要な勉強は苦にならなくなりますよ。


199ポイント を手に入れた。

Name: ムンバ  ..熟練のプログラマー(47,517ポイント)   Date: 2010/05/19(水) 02:12   No:52329     
Title: Re:[雑談]Cの効率の良い覚え方    
こんばんは。

過去ログにも、同じ様なご質問が多々あったと思いますが
(私も、その一人に入れて下さい。)
デラ初心者さんが、何を目標にしてC言語が必要であるかによって
学ぶ効率の良さ(勉強の仕方・順序など)が異なるかと思うんです。

私の場合は、何をどうやって作るのかは解らないけど
「過去にあったネットゲームを、再現してみたい。仲間内でできるゲームを作りたい。」
という目標があって、色々と検索していたら
いつの間にか、こちらのページにたどり着きました。

いつも、ご解説・ご指導されている方々がおっしゃっている様に
「C言語を使って、何がしたいか?」
だと思うのですね。

Dixqさんがおっしゃられてる様に
>>作りたい目標があれば作る為に必要な勉強は苦にならなくなりますよ。

私の場合、たまに苦になる事もありますが
苦になった時は「苦しんで覚えるC言語」というサイトに行ってます。(笑
解らない事は、こちらの掲示板で質問させて頂いてます。
いつも間抜けな質問ですが。<(_ _)>

ご質問の意図と違うかもしれませんが
C言語を使って、何をプログラミングしたい(作りたい)かで
効率が違ってくると思う、今日この頃です。

余談、失礼しました。
おやすみなさい。


536ポイント を落としてしまった。

Name: デラ初心者  ..初心者(5,654ポイント)   Date: 2010/05/19(水) 18:14   No:52352     
Title: Re:[雑談]Cの効率の良い覚え方    
皆さん回答ありがとうございます。

目標はゲームを作ることです。
初代マリオ位作れれば目標達成と思っています。

基礎的な事は分かってもどの様に使えば良いか分からない感じです。

英語で例えると単語だけ知っている感じです。
(単語 printfなどの関数のことです。)
分かりづらいですかね?




156ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(189,650ポイント)   Date: 2010/05/19(水) 18:34   No:52353     
Title: Re:[雑談]Cの効率の良い覚え方    
> 目標はゲームを作ることです。 
> 初代マリオ位作れれば目標達成と思っています。 

だったら実際に作ればよいのでは?
行動すれば、何が分からないのかも見えてきますし、分からないものが見えてくれば、何を重点的に勉強すればよいのかもわかるはずです。


54ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(165,149ポイント)   Date: 2010/05/19(水) 18:48   No:52354     
Title: Re:[雑談]Cの効率の良い覚え方    
>基礎的な事は分かってもどの様に使えば良いか分からない感じです。 
それは、プログラムの作り方や考え方の話ですね。暗記ではどうにもならないので、作り始めた方が良いと思います。
「ゲームプログラミングの館」は読まれたんですよね?あれから発展させてみてはどうでしょうか。



109ポイント を落としてしまった。

Name: デラ初心者  ..初心者(5,695ポイント)   Date: 2010/05/20(木) 20:25   No:52397 解決!     
Title: Re:[雑談]Cの効率の良い覚え方    
わかりました。

復習が終わったら作ってみたいと思います

ありがとうございました。


41ポイント を手に入れた。




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +