C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   格闘ゲームの画像   
     ・[58147] ROM 
     ・[58148] A 
     ・[58167] ookami 
   サウンドノベル風文字 ....   
     ・[58156] ぬるぽ 
     ・[58166] lian 
   ライブラリを公開しよ ....   
     ・[58163] Dixq (管理人) 
     ・[58165] 紅葉 
   OpenGLについて   
     ・[58087] たろ 
     ・[58157] 438番 
   実行ファイル   
     ・[58141] 迷彩吹雪 
     ・[58143] gumball 
   NULL 参照ポインターが ....   
     ・[58105] めるぽん 
     ・[58106] シエル 
     ・[58109] シエル 
     ・[58111] めるぽん 
     ・[58113] シエル 
     ・[58114] めるぽん 
     ・[58115] へろり 
     ・[58116] シエル 
     ・[58117] シエル 
     ・[58118] シエル 
     ・[58119] シエル 
     ・[58120] シエル 
     ・[58122] toyo 
     ・[58123] へろり 
     ・[58125] めるぽん 
     ・[58126] シエル 
     ・[58127] 御津凪 
     ・[58128] シエル 
     ・[58129] シエル 
     ・[58130] 御津凪 
     ・[58131] シエル 
     ・[58132] toyo 
     ・[58133] シエル 
     ・[58134] 御津凪 
     ・[58135] シエル 
     ・[58136] ISLe 
     ・[58137] シエル 
     ・[58138] toyo 
     ・[58139] シエル 
     ・[581041283714184] うしお 
   優先順位を設定する   
     ・[58108] へろり 
     ・[58110] dic 
   CSVファイルから2バイ ....   
     ・[58078] バグ 
     ・[58099] Dixq (管理人) 
     ・[58103] Via 
   龍神録の18章の当たり ....   
     ・[58094] ISLe 
     ・[58097] Dixq (管理人) 
     ・[58102] シエル 
   動画のボタンキャンセ ....   
     ・[58074] naohiro19 
     ・[58080] 通りすがりさん 
     ・[58085] Wグリント 
     ・[58086] 通りすがりさん 
     ・[58089] toyo 
     ・[58090] Wグリント 
     ・[58098] Dixq (管理人) 
     ・[580681281564993] naohiro19 
   「雑談」 自分で作っ ....   
     ・[57676] ぽこ 
     ・[57681] dic 
     ・[57683] めるぽん 
     ・[57708] Tororo 
     ・[57747] Tororo 
     ・[57895] Tororo 
     ・[57896] スキマ妖怪 
     ・[57917] Tororo 
     ・[57933] dic 
     ・[57937] Tororo 
     ・[58027] Tororo 
     ・[58028] Tororo 
     ・[58050] dic 
     ・[58073] Tororo 
     ・[58092] dic 
     ・[58096] Tororo 
   構造体に格納した画像 ....   
     ・[58052] バグ 
     ・[58053] バグ 
     ・[58083] t@ 
     ・[58088] t@ 
     ・[58091] Mist 
     ・[58093] バグ 
     ・[58095] toyo 
   ライツアウトの問題   
     ・[57961] mats 
     ・[57973] 紅葉 
     ・[57983] asd 
     ・[57996] 紅葉 
     ・[58005] フリオ 
     ・[58037] asd 
     ・[58072] mats 
     ・[58081] 紅葉 
     ・[58084] mats 
   無題   
     ・[57916] shuto 
     ・[57965] ookami 
     ・[58075] shuto 
   マルチスレッドのファ ....   
     ・[58033] シエル 
     ・[58040] Mist 
     ・[58041] toyo 
     ・[58042] 御津凪 
     ・[58043] シエル 
     ・[58044] 御津凪 
     ・[58045] シエル 
     ・[58048] お豆 
     ・[58070] C言語です 
   C言語でOS作成   
     ・[58059] たかぎ 
     ・[58060] ぽこ 
     ・[58067] softya 
   visual studio 2005と ....   
     ・[58055] ookami 
     ・[58065] 佐久間 
     ・[58066] 佐久間 
   背景の画像について   
     ・[58064] motuna 
   VisualC++ 2 ....   
     ・[57084] シエル 
     ・[57121] toyo 
     ・[57191] エイジュン 
     ・[57192] シエル 
     ・[57196] エイジュン 
     ・[57206] Dixq (管理人) 
     ・[57295] エイジュン 
     ・[57324] Dixq (管理人) 
     ・[57347] エイジュン 
     ・[57483] ookami 
     ・[57600] nanashi 
     ・[57682] エイジュン 
     ・[57700] naanashi 
     ・[57743] シエル 
     ・[57837] エイジュン 
     ・[57855] naohiro19 
     ・[57902] ISLe 
     ・[57907] エイジュン 
     ・[57908] ISLe 
     ・[57918] エイジュン 
     ・[57928] ナムアニクラウド 
     ・[57936] ISLe 
     ・[58062] エイジュン 
   ウィンドウの枠の太さ   
     ・[57442] Dixq (管理人) 
     ・[57443] yamataka 
     ・[57444] ぬるぽ 
     ・[57445] yamataka 
     ・[57447] シエル 
     ・[57449] yamataka 
     ・[57528] ISLe 
     ・[57542] シエル 
     ・[57608] yamataka 
     ・[57612] Mist 
     ・[57613] Mist 
     ・[58018] yamataka 
     ・[58022] nayo 
     ・[58023] シエル 
     ・[58024] toyo 
     ・[58026] toyo 
     ・[58061] yamataka 
   【雑談歓迎】多人数で ....   
     ・[57863] Dixq (管理人) 
     ・[57868] softya 
     ・[57893] ookami 
     ・[57914] 真等 
     ・[57975] ぜらーちん 
     ・[57977] softya 
     ・[57993] 真等 
     ・[58009] ookami 
     ・[58056] 真等 
   部分的に透明のpngファ ....   
     ・[57878] DVDM 
     ・[57879] シエル 
     ・[57883] sood 
     ・[57884] sood 
     ・[57886] シエル 
     ・[58038] みけCAT 
   三角比   
     ・[58012] ぜらーちん 
     ・[58013] たかぎ 
     ・[58014] fatens 
     ・[58015] ぜらーちん 
     ・[58016] ぜらーちん 
     ・[58019] 1617 
     ・[58020] たかぎ 
   バウンド処理がわかり ....   
     ・[57834] Dixq (管理人) 
     ・[57887] フェノン 
     ・[57899] DecentLove 
     ・[57909] フェノン 
     ・[57979] EX 
     ・[57982] ISLe 
     ・[58002] フェノ 
     ・[58007] フェノン 
   【雑談程度の相談】雪 ....   
     ・[57994] Dixq (管理人) 
     ・[57995] ねんどじん 
     ・[57997] Dixq (管理人) 
     ・[58003] ねんどじん 
     ・[58004] ねんどじん 
   ファイルの読み込み   
     ・[57986] お豆 
     ・[57987] COUTION 
     ・[57988] toyo 
     ・[57991] COUTION 
     ・[57998] nanashi 
     ・[57999] COUTION 
   修正版できました   
     ・[57925] ぬるぽ 
     ・[57930] 白い時空 
     ・[57938] jay 
     ・[57941] 御津凪 
     ・[57943] シエル 
     ・[57948] jay 
     ・[57956] Tatu 
     ・[57974] jay 
     ・[57976] Tororo 
     ・[57985] jay 
   無題   
     ・[57954] シエル 
     ・[57955] ねんどじん 
     ・[57978] DVDM 
     ・[57984] ねんどじん 
   C++の変数のスコープに ....   
     ・[57962] 山崎 
     ・[57963] かぶと 
     ・[57966] たかぎ 
     ・[57967] かぶと 
     ・[57968] シエル 
     ・[57969] たかぎ 
     ・[57980] お豆 
   12章   
     ・[57970] ookami 
     ・[57971] AMU 
     ・[57972] toyo 
   外部データ(画像、音楽 ....   
     ・[57934] TowaK 
     ・[57939] Justy 
     ・[57942] シエル 
     ・[57944] ぬるぽ 
     ・[57945] シエル 
     ・[57953] シエル 
     ・[57958] Justy 
     ・[57964] シエル 
   龍神録60章   
     ・[57951] ねんどじん 
   アプリケーション   
     ・[57833] Dixq (管理人) 
     ・[57835] 16R 
     ・[57836] 16R 
     ・[57838] ISLe 
     ・[57839] 16R 
     ・[57840] Dixq (管理人) 
     ・[57842] ISLe 
     ・[57947] 16R 
   DebugからReleaseへ   
     ・[57922] array 
     ・[57940] Justy 
     ・[57946] imakado 
   DXライブラリによる ....   
     ・[57926] ぬるぽ 
     ・[57927] ナムアニクラウド 
     ・[57929] SR 
     ・[57935] SR 
   デスクトップの枠   
     ・[57900] シエル 
     ・[57901] シエル 
     ・[57904] ISLe 
     ・[57905] DecentLove 
     ・[57906] シエル 
     ・[57931] DecentLove 
   敵のアイコンが重なっ ....   
     ・[57892] jay 
     ・[57894] 画像 
     ・[57903] Tatu 
     ・[57919] jay 
   右詰め   
     ・[57912] 夏天 
     ・[57913] Void 
   URLからIPアドレスを取 ....   
     ・[57876] お豆 
     ・[57882] shiro4ao 
     ・[57898] 夏天 
   確認   
     ・[57851] 御津凪 
     ・[57864] softya 
     ・[57866] Dixq (管理人) 
     ・[57888] 博士 
   インラインアセンブラ ....   
     ・[57870] toyo 
     ・[57872] shiro4ao 
     ・[57874] たかぎ 
     ・[57885] shiro4ao 
   FPS設定   
     ・[57822] Dixq (管理人) 
     ・[57873] EX 
   ソートのオーダーに関 ....   
     ・[57854] ドラ 
     ・[57856] ガラ 
     ・[57871] sizuma 
   マウスでタッチしたマ ....   
     ・[57858] シエル 
     ・[57859] 紅葉 
     ・[57860] 真等 
     ・[57862] mats 
     ・[57865] シエル 
     ・[57867] kabuto 
   OpenGL ESでの範囲指定 ....   
     ・[57709] シエル 
     ・[57803] 蓮 
     ・[57804] めるぽん 
     ・[57852] 蓮 
   初歩的な質問ですみま ....   
     ・[57843] ねんどじん 
     ・[57844] ドラ 
     ・[57845] ねんどじん 
     ・[57846] Dixq (管理人) 
     ・[57847] ねんどじん 
     ・[57848] ISLe 
     ・[57850] ねんどじん 
   初歩的な質問ですが   
     ・[57825] 初級者 
     ・[57826] 初心者 
     ・[57827] もぐりん 
     ・[57828] 初心者 
     ・[57830] Dixq (管理人) 
   DXライブラリのアー ....   
     ・[57718] ookami 
     ・[57740] シエル 
     ・[57763] DVDM 
     ・[57774] jay 
     ・[57806] jay 
     ・[57829] ru-pu 
   タイトルから次の画面 ....   
     ・[57815] シエル 
     ・[57816] じぇれみあ 
     ・[57818] dic 
     ・[57820] シエル 
     ・[57821] Dixq (管理人) 
     ・[57823] じぇれみあ 

Name: A  ..入門者(2,809ポイント)   Date: 2010/08/05(木) 20:58   No:58145       
Title: 格闘ゲームの画像    
格闘ゲームの画像について質問させていただきます。
製作者さんのゲームプログラミングの館で22.キャラを4方向に歩かせる。を応用しているんですが
格闘ゲームに→←の2方向と↓しゃがみ、↑ジャンプをつけたいとおもっていて
↑を押すと上に行かせずにジャンプをさせようと思っていて↓を押すとしゃがみにしたいと思っています。
それでジャンプとしゃがみはどこに書き加えたらいいでしょうか?
いまはC言語でコードは
#include "DxLib.h"
 
typedef struct{
        int x,y,img,muki,walking_flag;
}ch_t;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
        int image[16];
        char Key[256];
        ch_t ch;
 
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
        ch.x    =320;
        ch.y    =160;
        ch.walking_flag=0;
        ch.muki=3;
 
        SetDrawScreen( DX_SCREEN_BACK ) ;                                                 //描画先を裏画面に設定
        LoadDivGraph( "maon.bmp" , 8 , 8 , 1 , 100 , 200 , image ) ;//画像を分割してimage配列に保存
 
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了
 
        if(ch.x%32==0 && ch.y%32==0){         //座標が32で割り切れたら入力可能
            ch.walking_flag=1;         //歩くフラグを立てる。
             if( Key[ KEY_INPUT_LEFT ]  == 1 )  //左ボタンが押されたら
                    ch.muki=1;         //左向きフラグを立てる
            else if( Key[ KEY_INPUT_DOWN ]  == 1 )  //下ボタンが押されたら
                    ch.muki=2;         //下向きフラグを立てる
            else if( Key[ KEY_INPUT_RIGHT]  == 1 )  //右ボタンが押されたら
                    ch.muki=3;         //右向きフラグを立てる
            else                                    //何のボタンも押されてなかったら
                    ch.walking_flag=0; //歩かないフラグを立てる
        }
 
        if(ch.walking_flag==1){        //歩くフラグが立っていたら
          if(ch.muki==1)        //左向きならch.x座標を減らす
                    ch.x--;
            else if(ch.muki==2)        //下向きならch.y座標を増やす
                    ch.y++;
            else if(ch.muki==3)        //右向きならch.x座標を増やす
                    ch.x++;
        }
 
        ch.img=image[(ch.x%64)/8 + 0];            //画像をセット
 
        DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画
 
        ScreenFlip();//裏画面を表画面に反映
    }
 
    DxLib_End();
    return 0;
}
 画像はたて200ピクセル横1600ピクセルです

それと止まっているときにも動きをつけたいんですがどうすればいいんでしょうか

C言語の経験は製作者さんのゲームプログラミングの館と旧シューティングゲームの館まで勉強しました。

アドバイスとかあったらよろです



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


Name: ROM  ..入門者(3,168ポイント)   Date: 2010/08/05(木) 21:22   No:58147     
Title: Re:格闘ゲームの画像    
格ゲーとこのプログラムはにてもにつかないと思うのですが・・。
どんな格ゲーなんですか?
普通にストII的なあれですか?


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

Name: A  ..入門者(2,821ポイント)   Date: 2010/08/05(木) 22:04   No:58148     
Title: Re:格闘ゲームの画像    
そんな感じの2Dゲームを作りたいです。

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

Name: ookami  ..プログラマー(38,002ポイント)   Date: 2010/08/06(金) 10:10   No:58167     
Title: Re:格闘ゲームの画像    
Aさんのご質問は、一見コードも示されていて具体的なように見えますが、
ちょっと答えづらいと思います。

「どこに書くのか」ではなく「どんな風に書くのか」を知りたいんですよね?
(「どこに書くのか」なら、「書き方次第でどこでもいい」です)

とりあえず、少なくとも、
else if(ch.muki==2)        //下向きならch.y座標を増やす 
                    ch.y++; 
の部分は、要らないでしょうね。
しゃがもうとしたら、地面に沈んでってしまいそうですから。

> それと止まっているときにも動きをつけたいんですがどうすればいいんでしょうか 

歩いている時には動きをつけられていますか?
できているならば、それを応用すればよいと思います。
がんばってくださいw 編集済み


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



Name: lian  ..ぴよぴよ(163ポイント)   Date: 2010/08/06(金) 00:17   No:58153       
Title: サウンドノベル風文字列表示法    
ゲームプログラミングの館で、日々学習させてもらっています。
しかし、一つ解らない事があるので質問させていただきました。
ゲームプログラミングの館の、〜サンプルプログラム編〜のs1.サウンドノベル風文字列表示法1についてです。
サンプルプログラムでは…

#include "DxLib.h"
 
int i=0,j,ch_i=0,counter=0,White;
char Key[256],oldKey[256]={},disp[80]="",ch[5][80]={
        "プログラムを習得するには、実際に自分で書いてみることが大事。",
        "参考書を読むことも重要だが、数学のように演習を通して、",
        "体に身につけるようにしよう。",
        "きっと、よりはっきりと、関数の使い方、",
        "プログラムの書き方がわかるだろう。"
};
 
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
        if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
        SetDrawScreen( DX_SCREEN_BACK ) ;
 
        White=GetColor(255,255,255);
        
        while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
 
                for(j=0;j<256;j++){
                        if(oldKey[j]==0 && Key[j]==1)
                                Key[j]=2;
                        oldKey[j]=Key[j];
                }
 
                if(Key[KEY_INPUT_RETURN]==2){    // 前回押されてなくて、今回押されていたら
                        i=0;                     // iを初期値に戻し
                        ch_i++;                  // 表示する配列を1つずらす
                        if(ch_i==5)              // これ以上表示する配列がなくなったらbreak;
                                break;
                }
 
                // 配列の終端-2以下で、今回コピーするiまでの配列要素のi番目が\0じゃなくカウンターが5の倍数なら
                if(i<=80-2 && ch[ch_i][i]!='\0' && counter%5==0){
                        i+=2;                    // 全角文字なので配列要素2つずつカウントアップ
                        strncpy(disp,ch[ch_i],i);// iバイトまでの配列要素をdisp配列にコピー
                        disp[i]='\0';            // 終端記号を代入
                }
 
                DrawFormatString(10,420,White,"%s",disp);//disp配列の文字データを表示
 
                counter++;                          
                ScreenFlip() ;
 
        }
 
        DxLib_End() ;
        return 0 ;
}

となっていますが、これでは一列しか表示できませんでした。
(文字列を一列表示してEnterを押すと表示されていた文字列が消え、次の文字列が表示されるといった具合に)
私は文字列を2,3列位表示させて、Enterを押すと次の文字列を表示されるといったようにしたいのです。
考えてみたのですが、良い方法が思い浮かびませんでした。
まだ初心者なのでこういった事もわからないのですが、どなたかご教授を宜しくお願いします。

<補足>
・Microsoft Visual C++ 2010 ExpressとDXライブラリを使用しています。
・OSはWindows7の32bitです。 編集済み


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


Name: ぬるぽ  ..初心者(5,828ポイント)   Date: 2010/08/06(金) 01:42   No:58156     
Title: Re:サウンドノベル風文字列表示法    
DXライブラリのサンプルに下記のプログラムがあります。
参考にしてみてはいかがでしょうか。

#include "DxLib.h"
#include <math.h>

// 文字のサイズ
#define MOJI_SIZE 24

// 仮想テキストバッファの横サイズ縦サイズ
#define STRBUF_WIDTH    24
#define STRBUF_HEIGHT    20

char StringBuf[ STRBUF_HEIGHT ][ STRBUF_WIDTH * 2 + 1 ] ;    // 仮想テキストバッファ
int CursorX , CursorY ;                        // 仮想画面上での文字表示カーソルの位置
int SP , CP ;                            // 参照する文字列番号と文字列中の文字ポインタ
int EndFlag ;                            // 終了フラグ
int KeyWaitFlag ;                        // ボタン押し待ちフラグ
int Count ;                            // フレームカウンタ

char String[][ 256 ] =
{
    " ゲームプログラムを習得するための一番の近道はとにかく沢山プログラムを組む",
    "ことである。B" ,
    "@ プログラムの参考書にはゲームのプログラムの方法なんて何も書かれていない、B",
    "変数、B配列、B関数、Bループ、B条件分岐…Bこれらすべての説明はゲームで何に使うか",
    "なんてどこにも書いていない、Bせいぜい住所録を題材にした例がある程度である。B" ,
    "C プログラムは習うより慣れろなのでプログラムを組むに当たって少しでも知識が",
    "つけば後はそこからは掘り下げ、広げていけば良いわけで、Bプログラムの参考書を",
    "読んでいて少しでも何か出来るような気がしたらそこでとにかくプログラム",
    "を打ってみることが大事である。E",
} ;

void Kaigyou( void ) ;        // テキストバッファの改行処理関数


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                         LPSTR lpCmdLine, int nCmdShow )
{
    char OneMojiBuf[ 3 ] ;    // 1文字分一時記憶配列
    int i , j ;

    SetGraphMode( 640 , 480 , 16 ) ;
    if( DxLib_Init() == -1 )    // DXライブラリ初期化処理
    {
         return -1;                // エラーが起きたら直ちに終了
    }

    // 描画位置の初期位置セット
    CursorX = 0 ;
    CursorY = 0 ;
    
    // 参照文字位置をセット
    SP = 0 ;    // 1行目の
    CP = 0 ;    // 0文字

    // フォントのサイズセット
    SetFontSize( MOJI_SIZE ) ;

    // 描画先を裏画面にセット
    SetDrawScreen( DX_SCREEN_BACK ) ;

    // フレームカウンタ初期化
    Count = 0 ;

    // ループ
    while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
    {
        // サウンドノベル風文字列描画処理を行う
        // ただし終了フラグが1だった場合は処理をしない
        if( EndFlag == 0 )
        {
            char  Moji ;

            // ボタン押し待ちフラグがたっていた場合はボタンが押されるまでここで終了
            if( KeyWaitFlag == 1 )
            {
                if( ProcessMessage() == 0 && CheckHitKeyAll() != 0 ) 
                {
                    // ボタンが押されていたら解除
                    KeyWaitFlag = 0 ;
                }
            }
            else
            {
                // 文字の描画
                Moji = String[ SP ][ CP ] ;
                switch( Moji )
                {
                case '@' :    // 改行文字

                    // 改行処理および参照文字位置を一つ進める
                    Kaigyou() ;
                    CP ++ ;

                    break ;

                case 'B' :    // ボタン押し待ち文字

                    // ボタンが離されるまで待つ
                    while( ProcessMessage() == 0 && CheckHitKeyAll() != 0 ){}

                    // ボタン押し待ちフラグをたてる
                    KeyWaitFlag = 1 ;
                    CP ++ ;

                    break ;

                case 'E' :    // 終了文字

                    // 終了フラグを立てるおよび参照文字位置を一つ進める
                    EndFlag = 1 ;
                    CP ++ ;

                    break ;

                case 'C' :    // クリア文字

                    // 仮想テキストバッファを初期化して描画文字位置を初期位置に戻すおよび参照文字位置を一つ進める
                    for( i = 0 ; i < STRBUF_HEIGHT ; i ++ )
                    {
                        for( j = 0 ; j < STRBUF_WIDTH * 2 ; j ++ )
                        {
                            StringBuf[ i ][ j ] = 0 ;
                        }
                    }

                    CursorY = 0 ;
                    CursorX = 0 ;
                    CP ++ ;

                    break ;

                default :    // その他の文字

                    // 1文字分抜き出す
                    OneMojiBuf[ 0 ] = String[ SP ][ CP ] ;
                    OneMojiBuf[ 1 ] = String[ SP ][ CP + 1 ] ;
                    OneMojiBuf[ 2 ] = '\0' ;

                    // 1文字テキストバッファに代入
                    StringBuf[ CursorY ][ CursorX * 2 ] = OneMojiBuf[ 0 ] ;
                    StringBuf[ CursorY ][ CursorX * 2 + 1 ] = OneMojiBuf[ 1 ] ;

                    // 参照文字位置を2バイト勧める
                    CP += 2 ;

                    // カーソルを一文字文進める
                    CursorX ++ ;

                    // テキストバッファ横幅からはみ出たら改行する
                    if( CursorX >= STRBUF_WIDTH ) Kaigyou() ;

                    break ;
                }

                // 参照文字列の終端まで行っていたら参照文字列を進める
                if( String[ SP ][ CP ] == '\0' )
                {
                    SP ++ ;
                    CP = 0 ;
                }
            }
        }

        // 画面のクリア
        ClsDrawScreen() ;

        // 背景エフェクトの描画
        {
            int Color ;

            Color = ( int )( sin( Count / 100.0 ) * 80.0 + 125.0 ) ;
            DrawBox( 0 , 0 , 640 , 480 , GetColor( Color , 0 , 0 ) , TRUE ) ;
            Count ++ ;
        }

        // テキストバッファの描画
        for( i = 0 ; i < STRBUF_HEIGHT ; i ++ )
        {
            DrawString( 8 , i * MOJI_SIZE , StringBuf[ i ] , GetColor( 255 , 255 , 255 ) ) ;
        }

        // 裏画面の内容を表画面に反映させる
        ScreenFlip() ;
    }

    DxLib_End() ;                // DXライブラリ使用の終了処理

    return 0 ;                    // ソフトの終了
}



// 改行関数
void Kaigyou( void )
{
    // 描画行位置を一つ下げる
    CursorY ++ ;

    // 描画列を最初に戻す
    CursorX = 0 ;

    // もしテキストバッファ縦幅からはみ出るならテキストバッファを縦スクロールさせる
    if( CursorY >= STRBUF_HEIGHT )
    {
        int i , j ;

        for( i = 1 ; i < STRBUF_HEIGHT ; i ++ )
        {
            for( j = 0 ; j < STRBUF_WIDTH * 2 ; j ++ )
            {
                StringBuf[ i - 1 ][ j ] = StringBuf[ i ][ j ] ;
            }
        }

        // 描画行位置を一つあげる
        CursorY -- ;
    }
}


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

Name: lian  ..ぴよぴよ(194ポイント)   Date: 2010/08/06(金) 09:49   No:58166     
Title: Re:サウンドノベル風文字列表示法    
ありがとうございます!
参考にして早速自分でチャレンジしてみます。


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



Name: 紅葉  ..上級者(16,605ポイント)   Date: 2010/08/06(金) 05:56   No:58160       
Title: ライブラリを公開しようとしております    
ライブラリを公開しようとしております。

DL数を知りたいのでどこかに置きたいのですが条件に当てはまるお勧めのローダはないでしょうか?

【条件】
・zipファイルがおける
・無料である
・DL数がわかる
・長時間消されない

皆さんのご意見を頂けますと幸いです。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,245,790ポイント)   Date: 2010/08/06(金) 07:30   No:58163     
Title: Re:ライブラリを公開しようとしております    
エアロビートの配布に使っているアップローダはどうでしょうか。
かれこれ半年アップしたままですし、DL数もわかります。
http://firestorage.jp/
ただし過去2か月位の数値しかわかりません。

後、気軽に修正は出来なくなりますが、vectorに登録するのもありかもしれません。
龍神録はvectorに登録しました。
こちらは月に一度DL総数が送られてきます。


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

Name: 紅葉  ..上級者(16,633ポイント)   Date: 2010/08/06(金) 09:04   No:58165 解決!     
Title: Re:ライブラリを公開しようとしております    
管理人様
ご紹介ありがとうございます。
ありがたく使わせて頂きます!!


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



Name: 438番  ..ぴよぴよ(71ポイント)   Date: 2010/08/03(火) 22:04   No:58057       
Title: OpenGLについて    
タイトル通りOpenGLについてお聞きしたいのですが
OpenGLでウィンドウを作ろうとしたのですが、うまくいきません
予定では中身が青色で塗りつぶされたウィンドウが表示されると思っているのですが
実行するとただ単に青色の四角形だけがが表示されます
なぜウィンドウの枠が表示されないのでしょうか

OS Ubuntu 8.04
OpenGL(glut)のインストールは
% sudo apt-get install freeglut3 freeglut3-dev
で行いました
初歩的な事ですみませんが、お願いします

ソース
#include <GL/glut.h>

void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  glFlush();
}

void init(void)
{
  glClearColor(0.0, 0.0, 1.0, 1.0);
}

int main(int argc, char *argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGBA);
  glutCreateWindow(argv[0]);
  glutDisplayFunc(display);
  init();
  glutMainLoop();
  return 0;
}


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


Name: たろ  ..ぴよぴよ(52ポイント)   Date: 2010/08/04(水) 14:27   No:58087     
Title: Re:OpenGLについて    
的外れなコメントだったらごめんなさい。
Ubuntuを触ったこともない、LinuxでOpenGLを使ったこともないのですが、
こちらのブログ↓の「タイトルバーが出ない」と同じ症状でしょうか?

Ubuntu でも GLUT してみた
http://d.hatena.ne.jp/xr0038/20080720/1216558117

glutとUbuntuの相性が悪いのかな・・他のディストリビューションなら大丈夫かも・・?


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

Name: 438番  ..ぴよぴよ(90ポイント)   Date: 2010/08/06(金) 02:56   No:58157 解決!     
Title: Re:OpenGLについて    
紹介していただいたサイトと同じ症状です

Ubuntuとの相性が悪いのではとのことでしたのでWindowsXPで実行したところ、
問題なく実行できました
またFedoraでも実行してみましたが,ちゃんと動いてくれました

OpenGLはクロスプラットフォームと聞いていたのでまさかOSとの相性の悪さだとは思いもしませんでした

ありがとうございました


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



Name: gumball  ..ぴよぴよ(63ポイント)   Date: 2010/08/05(木) 19:53   No:58140       
Title: 実行ファイル    
プログラミング初心者です。

龍神録プログラミングの館を見ながらゲームを作っているのですが(と言ってもまだ骨組みも出来てません)、コンパイラしてDebugフォルダの中にある実行ファイル(.exe)を起動すると、黒い画面にread errorと出るだけで何も起こりません。どうしてでしょうか・・
ここでする質問じゃないかもしれませんが、どなたか原因が分かる方は教えてください。

コンパイラはVisualC++2010です。


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


Name: 迷彩吹雪  ..かけだし(2,096ポイント)   Date: 2010/08/05(木) 20:12   No:58141     
Title: Re:実行ファイル    
.exeと同じ場所に画像などを置いて実行してみてください。

VC++から実行した時は自動的にDebugフォルダと同じ階層からパスを辿りますが、
直接.exeをダブルクリックした場合は.exeがある場所がファイル読み込みの起点になります。


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

Name: gumball  ..ぴよぴよ(55ポイント)   Date: 2010/08/05(木) 20:32   No:58143 解決!     
Title: Re:実行ファイル    
解決できました!!
ありがとうございます!


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



Name: シエル  ..熟練のプログラマー(40,541ポイント)   Date: 2010/08/05(木) 08:08   No:58104       
Title: NULL 参照ポインターがスタブに渡されました。    
お世話になります。

デバッグをしていて、「*******で初回の例外が発生しました: *******: NULL 参照ポインターがスタブに渡されました。」
というエラーが右下のログを表示する部分に表示されていることが分かりました。
アスタリスクの部分にはメモリアドレスのようなものが書いてあります。
このようなログは表示されているのですが、ゲームの処理には支障はなく、普通にプレイできます。

ですが、エラーは全て消しておきたいので、このエラーを解消したいと思っています。
手がかりがメモリアドレスだけで、ゲームに支障がないので、どこが原因なのか分からず困っています。
このようなエラーの場合、どこが原因なのかを突き止めるにはどうデバッグすればよろしいでしょうか?
皆さんのお力をお貸し下さい。

よろしくお願い致します!



追記:
コンパイラはvisual c++ 2008EEで、OSはwindows7です。 編集済み


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


Name: めるぽん  ..初心者(8,957ポイント)   Date: 2010/08/05(木) 08:15   No:58105     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
そのエラーは RPC 経由のエラー(RPC_X_NULL_REF_POINTER)ですね。
COM を使ってる部分(多分 DirectX ですかね?)で NULL になってはいけない引数が NULL になってしまっているようです。
DX ライブラリ経由で DirectX を呼び出しているのであれば、DX ライブラリに不要な NULL を渡していないかチェックして、DirectX を直接呼び出しているのであれば、DirectX に不要な NULL を渡していないかチェックしましょう。


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

Name: シエル  ..熟練のプログラマー(40,641ポイント)   Date: 2010/08/05(木) 08:32   No:58106     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
ぬるぽんさん!ありがとうございます。
DirectXで開発しています。
NULLを渡すとまずい部分にNULLを渡すと出てしまうエラーですか。勉強になります!
実はウィンドウをアクティブにするたびに出るんですよね。。。
描画部分かキー入力周りを片っ端から調べてみます!


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

Name: シエル  ..熟練のプログラマー(40,731ポイント)   Date: 2010/08/05(木) 11:00   No:58109     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
う〜ん。探してみたんですが見つからない;

メモリアドレスからどうにかして原因箇所を割り出す方法はないですかね?


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

Name: めるぽん  ..中級者(9,387ポイント)   Date: 2010/08/05(木) 11:20   No:58111     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
そういえば例外投げた瞬間に捕捉する機能が VS にあったようなって調べてみたら、ありました。

http://msdn.microsoft.com/ja-jp/library/d14azbfh.aspx

1. [デバッグ] メニューの [例外] をクリックします。
2. [例外] ダイアログ ボックスで、例外の全体カテゴリの [スローされるとき] を選択します (たとえば、[Common Language Runtime Exceptions] など)。

だそうです。これで COM のエラーを捕捉できるかどうかは分かりませんけど、とりあえず全部にチェックを入れてやってみるといいかもしれません。


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

Name: シエル  ..熟練のプログラマー(41,065ポイント)   Date: 2010/08/05(木) 11:47   No:58113     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
ぬるぽんさん!ありがとうございました!
例外を補足できて、原因箇所が分かりました!
DirectXのエラーではなくて、WindowsAPIのDispatchMessageのところにカーソルが行ったので
DispatchMessageのエラーだと思われます。

が、なぜDispatchMessageでエラーが出るのか分かりません。
該当のコードは以下のようになっております。
色々PeekMessageの引数をPM_NOREMOVEに変えてみたり、GetMessageにしてみたりしたんですが、
エラーが消えません。。。
下記のコードで何かおかしい部分はありますでしょうか?
必要であれば他のコードも載せます。

while(1){
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
   if(msg.message==WM_QUIT)
    break;
   DispatchMessage(&msg);
}else{

//ここにゲーム処理

}


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

Name: めるぽん  ..中級者(9,442ポイント)   Date: 2010/08/05(木) 12:08   No:58114     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
そうなるとちょっと今の段階では分からないですね。
現象の再現するコードと、再現手順があるといいかもしれません。


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

Name: へろり  ..プログラマー(27,219ポイント)   Date: 2010/08/05(木) 12:39   No:58115     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
ディスパッチされたプロシージャの中でエラーが起きてるとかそういうのは無いですか。
ウィンドウをアクティブにするたびに出るということですから、WM_ACTIVATE あたりとか。

エラーが起きる時の msg の中身を記録したりして、プロシージャの中身まで掘り下げていった方がいいかもしれませんね。


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

Name: シエル  ..熟練のプログラマー(41,142ポイント)   Date: 2010/08/05(木) 12:39   No:58116     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
すいません。全部のコードを載せるわけにはいかないので、
今再現するコードを作成中です。

が、再現しない;
やっぱりゲームメインの処理も関係してるのかなぁ。。。


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

Name: シエル  ..熟練のプログラマー(41,483ポイント)   Date: 2010/08/05(木) 12:43   No:58117     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
>>へろりさん
ありがとうございます。

ウィンドウプロシージャで制御してるメッセージは下記のコードだけなんですよね。。。
WM_AVTIVATEは処理してません。
で、色々試しているうちに、PeekMessageの第二引数をNULLからhwndに変えたら、
DispatchMessageではエラーは出なくなったのですが、画面を終了する際に、
ウィンドウプロシージャのWM_CLOSEのif文のところで同じエラーが出るようになってしまったんですよね。
何か思い当たるところがございましたら、ご指導よろしくお願い致します。

LRESULT CALLBACK WinProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
{
    switch(msg){
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;

        case WM_CLOSE:
            if(IDYES==MessageBox(hwnd,TEXT("終了しますか?"),TEXT("終了確認"),MB_YESNO | MB_ICONQUESTION)){
                DestroyWindow(hwnd);
            }
            return 0;
    }
    return DefWindowProc(hwnd,msg,wp,lp);
}


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

Name: シエル  ..熟練のプログラマー(41,436ポイント)   Date: 2010/08/05(木) 12:46   No:58118     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
エラーが出る際の、MSG構造体のmessageメンバの値は「275」でした。
現在調査中です。


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

Name: シエル  ..熟練のプログラマー(41,551ポイント)   Date: 2010/08/05(木) 13:09   No:58119     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
すいません。再現するコードを作っていると、
どうやらDirectsoundの初期化処理をスキップするとエラーが出なくなったので、
もう一度Directsoundの処理を見直してみます。
なので一旦忘れてください。
一応エラーが解消されたら、解決にします。


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

Name: シエル  ..熟練のプログラマー(41,763ポイント)   Date: 2010/08/05(木) 14:57   No:58120     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
すいません。やっぱりわかりません。。。
再現するコードが作成できたので貼ります。
ダイレクトサウンドを初期化して、解放するだけのコードです。
よろしくお願いいたします。

#include <windows.h>
#include <dsound.h>
#pragma comment(lib,"dsound.lib")


HWND hwnd;
HINSTANCE hinst;

LPDIRECTSOUND8 lpds8;

BOOL InitWindowClass(WNDPROC wndproc,LPCTSTR lpszclassname);

HRESULT DsoundInit(void)
{
    if(DS_OK!=DirectSoundCreate8(NULL,&lpds8,NULL))
        return E_FAIL;
    
    if(DS_OK!=lpds8->SetCooperativeLevel(hwnd,DSSCL_PRIORITY)){
        return E_FAIL;
    }

    return S_OK;
}

LRESULT CALLBACK WinProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
{

    switch(msg){
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        case WM_CLOSE:
            if(IDYES==MessageBox(hwnd,TEXT("終了しますか"),TEXT("test"),MB_YESNO))
                DestroyWindow(hwnd);
            return 0;
    }
    return DefWindowProc(hwnd,msg,wp,lp);
}

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nShowCmd)
{
    MSG msg;
    int width=700,height=640;
    hinst = hInstance;

    //親ウィンドウクラス名
    LPCTSTR classname = TEXT("test");

    RECT rect;
    rect.left=0;
    rect.right=width;
    rect.top=0;
    rect.bottom=height;

    AdjustWindowRect(&rect,WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE | WS_MINIMIZEBOX,FALSE);

    if(!InitWindowClass(WinProc,classname)) return -1;

    hwnd = CreateWindow(
        classname,TEXT("テストウィンドウ"),WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE | WS_MINIMIZEBOX,
        (GetSystemMetrics(SM_CXSCREEN)-width)/2,(GetSystemMetrics(SM_CYSCREEN)-height)/2,
        rect.right-rect.left,rect.bottom-rect.top,
        NULL,NULL,hinst,NULL);

    if(hwnd==NULL) return -1;

    DsoundInit();

    while(1){
        
        if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
            if(msg.message==WM_QUIT){
                break;
            }
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }else{
            
            

            Sleep(16);
            //
        }
    }
    
    lpds8->Release();

    return msg.wParam;
}


BOOL InitWindowClass(WNDPROC wndproc,LPCTSTR lpszclassname)
{
    WNDCLASSEX winc;

    winc.cbSize=sizeof(WNDCLASSEX);
    winc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
    winc.lpfnWndProc = wndproc;
    winc.cbClsExtra = winc.cbWndExtra = 0;
    winc.hInstance = hinst;
    winc.hIcon = NULL;
    winc.hCursor = LoadCursor(NULL,IDC_ARROW);
    winc.hbrBackground =NULL;
    winc.lpszMenuName = NULL;
    winc.lpszClassName = lpszclassname;
    winc.hIconSm=NULL;

    return RegisterClassEx(&winc);
}


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

Name: toyo  ..熟練のプログラマー(56,492ポイント)   Date: 2010/08/05(木) 15:48   No:58122     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
私の環境では再現しませんね
例外は出ませんでした
VC++2008 VC++2010EE vista 32bitです

ひょっとして7は64ビットOSでしょうか(EEだと64ビット版はコンパイルできませんよね)


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

Name: へろり  ..プログラマー(27,266ポイント)   Date: 2010/08/05(木) 15:49   No:58123     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
Windows7 Visual Studio .NET 2003 再現しません。

DirectXはさっぱり分かりませんが、DirectX9 SDK 入ってます。


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

Name: めるぽん  ..中級者(9,499ポイント)   Date: 2010/08/05(木) 15:53   No:58125     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
自分の環境でも出なかったです。

WindowsXP
Visual Studio 2008 Standard Edition
DirectX SDK (February 2010)


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

Name: シエル  ..熟練のプログラマー(41,916ポイント)   Date: 2010/08/05(木) 16:15   No:58126     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
皆さんの環境では再現しませんか;
私の環境がまずいのかなぁ。困りましたね。
原因がまったく分からないです。

ちなみに、
OSはWindows7 Home Premiumの32ビットOSです。
SDKはNovember 2008です。

一応デバッグ時の画面を貼っておきます。

何か分かる方、ご教授よろしくお願い致します。


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

Name: 御津凪 [URL]  ..ハッカー(147,161ポイント)   Date: 2010/08/05(木) 16:23   No:58127     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
プロジェクトのプロパティは(インクルードパスとかビルドに必須な個所を除いて)何もいじってないのですよね?
デフォルトから何かいじっているのならそれを書いた方がいいかもしれません。

ですがその前に、 SDK を最新のものにしてみてください。(現段階では June 2010 が最新)
SDK ごとに使用されるランタイムも違うので、もしかしたらそれで解消されるかもしれませんよ。


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

Name: シエル  ..熟練のプログラマー(41,987ポイント)   Date: 2010/08/05(木) 16:26   No:58128     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
御津凪さん。ありがとうございます!

プロパティは何もいじっていません。

一応念のため聞きますが、SDKを最新にしても、
今まで通りのコードでプログラムは組めますでしょうか?
一応これ以外にもD3DやDirectinputなどのコードもたくさん書いているので、
更新したら、いきなりコンパイルできなくなった〜なんてことないですよね?


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

Name: シエル  ..熟練のプログラマー(42,003ポイント)   Date: 2010/08/05(木) 16:28   No:58129     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
あ、ちなみにランタイムだけは一週間前ぐらいには更新しました。

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

Name: 御津凪 [URL]  ..ハッカー(146,875ポイント)   Date: 2010/08/05(木) 16:43   No:58130     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
推薦されなくなった機能(DirectMusicや、DirectX9の一部の関数など)が新しい SDK でなくなっていることはありますが、
必要だと思っていた機能が使えなくなるようなことは一部を除いてほとんどありません。
(一部というのは MIDI が再生できていた DirectMusic のこととか)

最新の SDK をインストールしても、前の SDK をアンインストールしなければ、
インクルードパス・ライブラリパスを切り替えるだけで問題ないので、何かしらコンパイルできないなどの問題が
あってもすぐに使用する SDK を戻すことができます。

なお、使用している SDK に対応したランタイムを使用するので、ランタイムの更新だけではランタイムにバグがあった場合を除き改善することはありません。


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

Name: シエル  ..熟練のプログラマー(42,097ポイント)   Date: 2010/08/05(木) 16:50   No:58131     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
SDKを最新にしてみることにします。

ところで、SDKは、JUNE 2010が最新なのでしょうか。
下記ページでは、February 2010が最新と出ているのですが、
ページが間違っているのでしょうか?

http://msdn.microsoft.com/ja-jp/directx/aa937788.aspx


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

Name: toyo  ..熟練のプログラマー(56,607ポイント)   Date: 2010/08/05(木) 16:51   No:58132     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
複数のDXSDKをインストールするのは問題ないです
設定で優先順位が変えられるので一番上に持っていくだけでいいですよ
私はこれだけ入れてます

関係ないですがVC++2010だとこの設定をプロジェクト毎にしないといけなくなったのが面倒です


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

Name: シエル  ..熟練のプログラマー(42,199ポイント)   Date: 2010/08/05(木) 16:58   No:58133     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
toyoさん。ありがとうございます。

SDKの件、教えていただいてありがとうございます。
安心しました。

VC++2010は入れようか悩んでいましたが、面倒臭そうなので、
当分入れないようにします。


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

Name: 御津凪 [URL]  ..ハッカー(147,146ポイント)   Date: 2010/08/05(木) 17:01   No:58134     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
Feb 2010 は 2010年2月、
June 2010 は 2010年7月ですので、
June 2010 の方が新しいということになります。

下記が June 2010 の SDK ダウンロードページです。

http://www.microsoft.com/downloads/details.aspx?FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba&displaylang=en

(日本語サイトでは提示がよく遅れるので、一番最新の SDK が載らないことはよくあります)

あ、書き忘れましたが、
こちらで試した環境でも例外は確認されませんでしたよ。
[Windows XP Professional SP3 (32bit), Visual Studio 2010, DirectX SDK (June 2010)]


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

Name: シエル  ..熟練のプログラマー(42,178ポイント)   Date: 2010/08/05(木) 17:08   No:58135     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
忙しい中ありがとうございます。

ダウンロードが完了したので、早速インストールして試してみます!


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

Name: ISLe  ..中級者(10,531ポイント)   Date: 2010/08/05(木) 17:28   No:58136     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
toyoさん
> 関係ないですがVC++2010だとこの設定をプロジェクト毎にしないといけなくなったのが面倒です

プロパティマネージャーでMicrosoft.Cpp.Win32.userに対してVC++ディレクトリを設定するとユーザー単位で設定が保存されますよ。


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

Name: シエル  ..熟練のプログラマー(42,413ポイント)   Date: 2010/08/05(木) 18:01   No:58137     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
最新のSDKをインストールして、インクルードパスの設定も
チェックして、実行してみました。

が、、、、

駄目でした><

もう完全にお手上げです。。。
何か分かる方いらっしゃいましたら、ご教授願います。。。

それと、関係ないかもしれませんが、エラーが出る直前に下記のDLLを読み込むログが
出力されているようです。
まったく関連性がないかもしれませんが、一応書いておきます。

【エラー直前に出るログ】
エラー調査.exe': 'C:\Windows\System32\RpcRtRemote.dll' を読み込みました


解決しないかもしれないので、先にお礼言っておきます。
ぬるぽんさん、へろりさん、toyoさん、御津凪さん、ISLeさん、ありがとうございました!


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

Name: toyo  ..熟練のプログラマー(57,013ポイント)   Date: 2010/08/05(木) 18:43   No:58138     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
家のWindows7 32bitで

'wintest.exe': 'C:\Windows\System32\RpcRtRemote.dll' を読み込みました
wintest.exe の 0x75029617 で初回の例外が発生しました: 0x000006F4: NULL 参照ポインターがスタブに渡されました。
'wintest.exe': 'C:\Windows\System32\IME\shared\IMEAPIS.DLL' を読み込みました
wintest.exe の 0x75029617 で初回の例外が発生しました: 0x000006F4: NULL 参照ポインターがスタブに渡されました。
wintest.exe の 0x75029617 で初回の例外が発生しました: 0x000006F4: NULL 参照ポインターがスタブに渡されました。
'wintest.exe': 'C:\Windows\System32\IME\shared\imecfm.dll' をアンロード
'wintest.exe': 'C:\Windows\System32\IMJP10K.DLL' をアンロード

とでました
RPC_X_NULL_REF_POINTER
なのでRpcRtRemote.dllが怪しいですね
Vistaでは読み込まれてないdllですが何者でしょう?

 ISLeさんありがとうございます
お詳しいですね。いつも感心しています。


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

Name: シエル  ..熟練のプログラマー(42,542ポイント)   Date: 2010/08/05(木) 19:11   No:58139     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
toyoさんの環境でも出ましたか!

windows7の32bitだと出るんですかねぇ。
このdllをググっても英語ばかりのページしか引っかからなくて、
何者かさっぱりわかりません。

まあ、このエラーはゲームの処理が止まって動かなくなるようなエラーではないので、
最悪無視しようと思ってます。

皆さんもお忙しいと思うので、ほどほどの対応でかまいませんので。。。


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

Name: うしお   Date: 2010/09/06(月) 04:16   No:581041283714184     
Title: Re:NULL 参照ポインターがスタブに渡されました。    
はじめまして

環境 windows7 32bit VisualStudio2010EE DirectxSDK June2010

私も同じエラーで困っていましたが、
XAudio2を使うためのCoInitializeExが原因でした。

いろいろ試行錯誤した結果、CoInitializeExの位置によって
NULL 参照ポインターがスタブに渡されました。
のエラーの有無に違いが出ているということがわかりました

どうやら、
ShowWindowを呼び出した後にCoInitializeExが呼ばれた場合
エラーのようで、
それ以前、にCoInitializeExを持ってきた場合、
エラーを消すことができました

細かいことはわかりませんが、参考になれば幸いです
DirectSoundを利用しているとのことでしたが、初期化位置になにか糸口があるかもしれません。
また、MicrosoftはDirectSoundはXAudio2に移行を推奨しているようですので、もしかすると、
そういうのも裏で関係しているのかもしれません
これを機にXAudio2に乗り換えるのも良い手段かも知れません
ああ・・・デバッグしんどかった・・・




Name: dic  ..比類無きプログラマー(89,138ポイント)   Date: 2010/08/05(木) 10:47   No:58107       
Title: 優先順位を設定する    
お世話になります dicです

タイトルの通り、プロセスの優先順位を設定する方法(関数)を探してます
親プロセスだけの優先順位の設定でいいのです
googleに検索をかけてもタスクマネージャからの優先順位の変更の方法しか紹介されてなくて
C/C++言語で親プロセスの優先順位を設定したいのです

スレッド関係で扱ったことはあるのですが、かなり昔でして忘れてしまっています
どなたかプロセスの優先順位を変更する方法を教えていただけないでしょうか?


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


Name: へろり  ..プログラマー(27,146ポイント)   Date: 2010/08/05(木) 10:53   No:58108     
Title: Re:優先順位を設定する    
Windowsでしたら、SetPriorityClass() APIで出来ますよ。

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

Name: dic  ..比類無きプログラマー(89,139ポイント)   Date: 2010/08/05(木) 11:10   No:58110 解決!     
Title: Re:優先順位を設定する    
>へろりさん
解決しました
ありがとうございます


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



Name: Via  ..ぴよぴよ(142ポイント)   Date: 2010/08/04(水) 08:11   No:58077       
Title: CSVファイルから2バイト文字を読み込む方法    
DXライブラリを使って、ゲームを作ろうと思っています。
こちらのサイトの11章で、csvファイルを作って敵の出現や動作の制御方法が解説されています。それと同様のことは出来るようになりました。
ただ、読み込むデータに2バイト文字が含まれている場合、FileRead_getc関数は使えないと思います。
csvファイルの1行が、文字列,数値,文字列,数値 のようになっている場合、どのように読み込ませたらよいでしょうか。


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


Name: バグ  ..ハッカー(202,822ポイント)   Date: 2010/08/04(水) 08:20   No:58078     
Title: Re:CSVファイルから2バイト文字を読み込む方法    
CSVの読み込みならば、fscanf関数やstrtok関数などが便利だと思いますよ。

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,245,619ポイント)   Date: 2010/08/04(水) 19:54   No:58099     
Title: Re:CSVファイルから2バイト文字を読み込む方法    
FileRead_getcは使えますよ。何度もループして改行コードか終端が見つかるまで読み込めばいいです。
しかしそれならFileRead_getsの方が良いですけどね。
最後がsの関数は一行読み込んでくれます。
fgetcとfgetsみたいなものですね。

全角文字だろうと1バイト文字だろうとデータとしては変わらないので、1バイトずつ読み込んでも大丈夫です。
読み込み終わった後トークンで分割すればOKです。

バグさんのおっしゃるfscanfのDXライブラリ関数版はFileRead_scanfとして用意されています。
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R19N10

DXライブラリのアーカイブを使わないならfscanfでよいですし、使うなら上記関数を使ってください。
fscanfはフォーマットが決まっているときにしか使えませんが、
決まっていないなら1行読み込んだ後、トークンで分割することになります。
strtokという関数を使うとトークン・・ここでいうカンマで分割出来ます。
使い方はこの辺に詳しく載っています。
http://www9.plala.or.jp/sgwr-t/lib/strtok.html


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

Name: Via  ..ぴよぴよ(178ポイント)   Date: 2010/08/04(水) 22:37   No:58103 解決!     
Title: Re:CSVファイルから2バイト文字を読み込む方法    
お二方ともありがとうございます。
いろいろ試行錯誤した結果、strtok関数を使って目的を達することが出来ました。
出来てしまえばとても単純な仕組みでしたが、いろいろ試している最中はあれもこれもうまくいかなくて大変でした。
また詰まるところがあると思いますので、よろしくお願いします。


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



Name: シエル  ..熟練のプログラマー(40,101ポイント)   Date: 2010/08/04(水) 12:39   No:58082       
Title: 龍神録の18章の当たり判定について、    
龍神録の18章(http://dixq.net/rp/18.html)の当たり判定について、
自機の弾のスピードしか考慮してませんが、
もし敵の動きが縦や横に結構速く移動した場合はその敵の移動量も考慮して
当たり判定をする必要があると思うのですが、正しいでしょうか?
逆に龍神録は、敵の動きがそんなに早くないから敵の移動量は考慮しない方法で、
当たり判定をしているのでしょうか?


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


Name: ISLe  ..中級者(10,485ポイント)   Date: 2010/08/04(水) 16:49   No:58094     
Title: Re:龍神録の18章の当たり判定について、    
龍神録方式ではないのですが…

矩形判定方式だと1フレームあたりの移動量も考慮して水増ししたり当たり判定付きの残像を作ったりします。

アーケードや家庭用のシューティングゲームで自機の撃った弾の消滅パターンが表示される場所をよく見るとけっこう飛び飛びだったりしますよ。
ボスキャラとか耐久力のある大型の敵キャラのパーツに撃ち込んでいるときが分かりやすいです。
少し前後にずれると手前に当たっていた弾がパーツの奥のほうで当たっているように変化する現象がしばしば見られます。
--(追記)↑の現象は龍神録でも発生しますね^^;
 編集済み


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,245,192ポイント)   Date: 2010/08/04(水) 19:31   No:58097     
Title: Re:龍神録の18章の当たり判定について、    
自機の弾は当たり判定が大きく、敵の当たり判定もまた大きいです。
敵の当たり判定が80ピクセル、自機弾の当たり判定が20ピクセルあるとすると、100ピクセルも当たる範囲があります。
1フレームの間にこれを通り抜けるには100[ピクセル/フレーム]以上の速さが必要であり、
現実的にそれはありえないので、考慮していません。
ただし、逆は考える必要があります。

敵の弾は当たり判定が小さく、自機の当たり判定もまた小さいです。
龍神録では当たり判定が1ピクセルの弾も出てきます。

そうなるとしょっちゅう通り抜けるということが起きます。
ですから、敵の弾と自機の当たり判定にのみ軌跡に当たり判定範囲が存在しないかを計算する処理を入れてあります。

しかし、龍神録プログラミングの館はなるべく難しい処理は書きたくなかったので省略してあります。
龍神録と龍神録プログラミングの館のプログラムはかなり違うので、あちこち簡略化してあります。

なので、
龍神録では高速に飛んでくるたまに向かって突進しても被弾しますが、
館のプログラムでは高速に飛んでくるたまに突進するとすり抜けてしまうかもしれません。
(ただし龍神録でもレーザーは軌跡計算をしていないので、レーザーをすり抜ける場面はたまに見られます・・;)


>> ISLeさん

えぇ、敵の当たり判定はかなりいい加減です^^;


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

Name: シエル  ..熟練のプログラマー(40,203ポイント)   Date: 2010/08/04(水) 20:30   No:58102 解決!     
Title: Re:龍神録の18章の当たり判定について、    
なるほど。自分の思っていたことが間違っていなかったので安心しました。
本当に必要な部分だけ軌跡を計算して当たり判定すればよいですね。

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


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



Name: Wグリント  ..ぴよぴよ(310ポイント)   Date: 2010/08/04(水) 00:30   No:58068       
Title: 動画のボタンキャンセルについて    
ゲームのオープニングが作りたくて以下のコードを作ったのですが上手く行きません。
#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
         LPSTR lpCmdLine, int nCmdShow )
{
    if( DxLib_Init() == -1 )    // DXライブラリ初期化処理
    {
         return -1;    // エラーが起きたら直ちに終了
    }

    PlayMovie( "video.avi" , 1 , DX_MOVIEPLAYTYPE_BCANCEL ) ;

    DxLib_End() ;        // DXライブラリ使用の終了処理

    return 0 ;        // ソフトの終了
}
これを実行した場合ボタンを押したら再生を中断してソフトを中断すると思うのですが...無理です。
どうしたら良いのですか?
一応OSは7で環境はVC++です。
まだ中3で始めてから1ヶ月もたっていませんので不手際があるかもしれませんがよろしくお願いします。



 編集済み


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


Name: naohiro19  ..ぴよぴよ(309ポイント)   Date: 2010/08/04(水) 07:26   No:58074     
Title: Re:動画のボタンキャンセルについて    
その動画ファイルのコーデックソフトウェアが入っていなければ
Combined Community Codec Pack(コンバインド・コミュニティ・コーデック・パック)をインストールする必要があります。

公式サイトでダウンロードできます。


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

Name: 通りすがりさん  ..ぴよぴよ(137ポイント)   Date: 2010/08/04(水) 10:05   No:58080     
Title: Re:動画のボタンキャンセルについて    
>>ゲームのオープニングが作りたくて以下のコードを作ったのですが上手く行きません。 
上手くいかないだけでは何がうまくいかないのか何も伝わりません、もっと具体的に説明してください。

>>これを実行した場合ボタンを押したら再生を中断してソフトを中断すると思う
中断しません。

>>まだ中3で始めてから1ヶ月もたっていません
なにが1ヶ月なのですか?
C/C++が1ヶ月ならもう少し基礎を勉強したほうがいいです。


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

Name: Wグリント  ..ぴよぴよ(395ポイント)   Date: 2010/08/04(水) 13:42   No:58085     
Title: Re:動画のボタンキャンセルについて    
 通りすがりさんの、
>>これを実行した場合ボタンを押したら再生を中断してソフトを中断すると思う 
中断しません。 
というのはどうゆうことなのですか?
できれば教えてください。


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

Name: 通りすがりさん  ..ぴよぴよ(325ポイント)   Date: 2010/08/04(水) 14:14   No:58086     
Title: Re:動画のボタンキャンセルについて    
このプログラムだと、DxLibの初期化→動画再生→DxLibの終了処理、の順番に動きます。
キーの処理がありません。
なのでボタンを押しても中断はしません。
それにこのプログラムはループ処理がないので、動画を再生したらプログラムは終了してしまいます。

とりあえず、http://dixq.net/g/を一通り読んでください。
ループ処理やキー処理などが分かりやすく解説しています。
解説をしっかり読んで十分に理解してください。




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

Name: toyo  ..熟練のプログラマー(56,277ポイント)   Date: 2010/08/04(水) 14:53   No:58089     
Title: Re:動画のボタンキャンセルについて    
ボタンによる動画の中断機能はPlayMovie関数にあるので問題はないです
私の環境ではXPでは動画再生してキーを押すとちゃんと中断されプログラム終了しました
Vistaでは動画も再生されずに終了しましたけど
PlayMovieは環境によってうまく動かないのかもしれませんね


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

Name: Wグリント  ..ぴよぴよ(456ポイント)   Date: 2010/08/04(水) 15:20   No:58090 解決!     
Title: Re:動画のボタンキャンセルについて    
通りすがりさんの言うとうり1通学ぶ事にしました。
あとnaohiro19さんの紹介していたCCCPをインストールしましたが無理でした。
toyoさん、とても参考になりました。
通りすがりさん、naohiro19さん、toyoさん、ありがとうございました。 編集済み


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,245,330ポイント)   Date: 2010/08/04(水) 19:48   No:58098     
Title: Re:動画のボタンキャンセルについて    
> Wグリントさん

こんにちは。Wグリントさんの解釈であっていると思いますよ。
BCANCELを指定しているので、キー入力があると終了するはずです。

しかしおかしいですね、toyoさんの仰る通り私もXPで試したら正常に動作しましたが、
Windows7で動作すると、再生はされるもののどのキーを押しても終了しませんでした。

DXライブラリの管理人さんに聞いてみた方が良いように思います。


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

Name: naohiro19   Date: 2010/08/12(木) 07:16   No:580681281564993     
Title: Re:動画のボタンキャンセルについて    
キーを押してもVista以降でキャンセルされない現象はDXライブラリの作者によって解決されました
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1897




Name: Tororo [URL]  ..初心者(8,504ポイント)   Date: 2010/07/28(水) 18:03   No:57670       
Title: 「雑談」 自分で作ってみたリストについて    
お久しぶりです。 Tororoです。

自分で管理が楽になるようにと、このようなリスト(マップ)を作ってみました。
ただ、まだ使いにくいところや、
「ここは、このほうがいい」
という場所があるのではないかと思いまして、質問させてもらいました。
↓がそのソースです。(Keyのことなどは省いてあります。)

class CGameBase
{
public:
    virtual void Run()=0;
};

class CGameApp
{

private:

    map<string,CGameBase*> m_MainList;
    list<string> m_MapNameList;
public:
    
    void RunMain()
    {
        map<string,CGameBase*>::iterator it = m_MainList.begin();
        list<string>::iterator it2 = m_MapNameList.begin();
        while(ProcessMessage()==0 && ClearDrawScreen()==0 
            && GetHitKeyStateAll_2()==0 && m_Key[KEY_INPUT_ESCAPE]==0)
        {
            it = m_MainList.begin();
            it2 = m_MapNameList.begin();
            while(it != m_MainList.end() && it2 != m_MapNameList.end()){
                m_MainList[*it2]->Run();
                it++;
                it2++;
            }
            ScreenFlip();
        }
    }

    void AddObject(string key_name, CGameBase *obj) 
    {
        m_MainList.insert(map<string,CGameBase*>::value_type(key_name,obj));
        if(m_MainList.size()==0){
            m_MapNameList.push_front(key_name);
        }else{
            m_MapNameList.push_back(key_name);
        }
    }

    void BreakObject(string key_name)
    {
        map<string,CGameBase*>::iterator it = m_MainList.begin();
        list<string>::iterator it2 = m_MapNameList.begin();
        while(it != m_MainList.end() && it2 != m_MapNameList.end()){
            if(*it2 == key_name){
                m_MainList.erase(it++);
                m_MapNameList.erase(it2++);
                return;
            }
            it++;
            it2++;
        }
        return;
    }


    CGameApp(void)
    {
        ChangeWindowMode(TRUE);
        if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0)return;
    }

    ~CGameApp(void)
    {
        DxLib_End();
    }
};


使い方としては、メイン関数内で、
    CGameApp *App = new CGameApp();
        App->AddObject("TEST1", new CTEST1());   (CTEST1クラスはCGameObjectから継承している。)
      App->AddObject("TEST2", new CTEST2());   (CTEST2クラスはCGameObjectから継承している。)
      App->AddObject("TEST3", new CTEST3());   (CTEST3クラスはCGameObjectから継承している。)
        App->BreakObject("TEST2");      Key_nameが”TEST2”の物を削除
        App->RunMain();
とこのような感じです。


改善したほうが良いところや、意見をもらえると幸いです^^;
よろしくお願いしますm(_ _)m 編集済み


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


Name: ぽこ  ..プログラマー(26,396ポイント)   Date: 2010/07/28(水) 18:37   No:57676     
Title: Re:「雑談」 自分で作ってみたリストについて    
使用方法のサンプルプログラムもあった方が
アドバイス貰い易いですよ。


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

Name: dic  ..比類無きプログラマー(88,375ポイント)   Date: 2010/07/28(水) 21:32   No:57681     
Title: Re:「雑談」 自分で作ってみたリストについて    
プレイヤーの位置や、背景の位置
システム関連の変数はどうやって管理するのでしょうか?

//--------------------------------------------------
小規模なら大丈夫でしょうが
中・大規模になるとデバックが大変なので
呼び出し履歴があるといいですね
 編集済み


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

Name: めるぽん  ..初心者(8,205ポイント)   Date: 2010/07/28(水) 22:02   No:57683     
Title: Re:「雑談」 自分で作ってみたリストについて    
ソースを見る限り、new した CTEST1 や CTEST2 が delete されていないようです。
あと BreakObject 関数ですが、map のキーはソートされていて、list<string> はソートされずに挿入されているため、両方のイテレータを同じように回して erase すると、恐らく
App->AddObject("TEST2", new CTEST2());
App->AddObject("TEST1", new CTEST1());
App->AddObject("TEST3", new CTEST3());
App->BreakObject("TEST2");
としたときに list からは "TEST2" のデータが消され、map からは {"TEST1", CTEST1} のデータが消されてしまって整合性が取れなくなってしまうような気がします。 そもそも list を使う意味が分からないですね。 名前の一覧が欲しいのであれば map のキー部分を回せば手に入るので必要無いと思います。 ということで、
void RunMain()
{
    while(ProcessMessage()==0 && ClearDrawScreen()==0 
        && GetHitKeyStateAll_2()==0 && m_Key[KEY_INPUT_ESCAPE]==0)
    {
        for (map<string, CGameBase*>::iterator it = m_MainList.begin();
            it != m_MainList.end(); ++it)
        {
            (*it)->Run();
        }
        ScreenFlip();
    }
}

void AddObject(string key_name, CGameBase *obj) 
{
    m_MainList.insert(map<string, CGameBase*>::value_type(key_name, obj));
}

void BreakObject(string key_name)
{
    m_MainList.erase(key_name);
} 

こんな感じでいいんじゃないかと(まだ delete していない問題は残ってますが)。


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

Name: Tororo [URL]  ..初心者(8,746ポイント)   Date: 2010/07/29(木) 07:30   No:57708     
Title: Re:「雑談」 自分で作ってみたリストについて    
dicさん
    たしかに違う object1 から object2 を見たい場合は、
    Key_nameでマップ内部のobjectをreturnさせる必要がありそうですね。
    ただ、CGameObject内に X,Yを追加するのも微妙ですね^^;
    難しいです。。

めるぽんさん
    ソートがされていない為同じようにイテレーターを
    回すと、おかしくなるんですね。気づきませんでした^^;


    deleteも使っていないですね。
    デストラクタで全部消去する必要がありそうです。


ちょっと今日は続きが作れないかもしれませんが、
色々考えておきます。。


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

Name: Tororo  ..初心者(8,815ポイント)   Date: 2010/07/29(木) 16:56   No:57747     
Title: Re:「雑談」 自分で作ってみたリストについて    
内部から指定された KeyのObject をreturnして、
使いたいクラスにキャストするのは、どうかなと考えてみたりしています。。

ただそのためにincludeする.hが増えてしまいそうです。。


う〜ん  うまく作れたかなと思ったら、穴だらけです。


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

Name: Tororo [URL]  ..中級者(9,256ポイント)   Date: 2010/07/31(土) 20:56   No:57895     
Title: Re:「雑談」 自分で作ってみたリストについて    
>>めるぽんさん
>>    for (map<string, CGameBase*>::iterator it = m_MainList.begin();
>>        it != m_MainList.end(); ++it)
>>    {
>>        (*it)->Run();
>>    }


この文だと、Runを使用する事が出来ないんですが・・
なぜでしょう?

エラーはこの二つです。

C2819: クラス 'std::pair<_Ty1,_Ty2>' にはオーバーロードされたメンバ 'operator ->' がありません。
C2039: 'Run' : 'std::pair<_Ty1,_Ty2>' のメンバではありません。 

>>dicさん
    CGameBase* GetObject(string key_name)
    {
        return *m_MainList[key_name];
    }
このような関数で、
        CPlayer *player=GetObject("PLAYER1");
         *player->m_X;
のような事を考えています。


けれど、何だか使いにくいかもしれませんが・・

       
     


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

Name: スキマ妖怪  ..入門者(3,745ポイント)   Date: 2010/07/31(土) 21:48   No:57896     
Title: Re:「雑談」 自分で作ってみたリストについて    
とりあえず、エラーは

(*it)->Run(); 

it->second->Run();

でなくなると思いますよ。


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

Name: Tororo [URL]  ..中級者(9,270ポイント)   Date: 2010/08/01(日) 09:04   No:57917     
Title: Re:「雑談」 自分で作ってみたリストについて    
>>スキマ妖怪さん

なるほど、secondの使い方はこう言う事だったんですか・・
「要素の値」と言うので使い方が良く分からなかったんで、勉強になりました。。


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

Name: dic  ..比類無きプログラマー(88,534ポイント)   Date: 2010/08/01(日) 17:31   No:57933     
Title: Re:「雑談」 自分で作ってみたリストについて    
>Tororoさん
>    CGameBase* GetObject(string key_name) 
>    { 
>        return *m_MainList[key_name]; 
>    } 
>このような関数で、 
>        CPlayer *player=GetObject("PLAYER1"); 
>         *player->m_X; 
>のような事を考えています。 
>
>
>けれど、何だか使いにくいかもしれませんが・・ 
>
なるほど、そうやって扱うのですね
ただ、確かに敵を管理するときは使いにくいかもしれないですね
敵の生成や弾の生成、当たり判定など


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

Name: Tororo [URL]  ..中級者(9,360ポイント)   Date: 2010/08/01(日) 18:20   No:57937     
Title: Re:「雑談」 自分で作ってみたリストについて    
>>dicさん

この方法ぐらいしか、自分には思いつきませんでした・・
ほかに、もっと良い方法があるなら、
教えて欲しいです。。

このリストはゲームよりは、小さなアプリ向きかもしれません。


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

Name: Tororo [URL]  ..中級者(9,516ポイント)   Date: 2010/08/03(火) 13:36   No:58027     
Title: Re:「雑談」 自分で作ってみたリストについて    
とりあえず、リスト自体はちゃんと動いているので、
一旦、解決とさせてもらいます。

ありがとうございましたm(_ _)m

また、ゲームが完成したら報告させてもらいます。


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

Name: Tororo  ..中級者(9,535ポイント)   Date: 2010/08/03(火) 13:37   No:58028 解決!     
Title: Re:「雑談」 自分で作ってみたリストについて    
解決踏み忘れました OTL

すいません^^;


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

Name: dic  ..比類無きプログラマー(88,918ポイント)   Date: 2010/08/03(火) 19:02   No:58050     
Title: Re:「雑談」 自分で作ってみたリストについて    
map は結構使わなかったので自信ないですが
下のように CGameBase クラスに仮想関数を作って これを継承させて呼び出すというのはどうでしょうか?

#include <stdio.h>

//======================================================
class CGameBase
{
public:
    virtual    void    Hit();
    virtual    void    EnemyMove();
};

//======================================================
class    CData    :    public    CGameBase
{
private:
    int    m_iPlayerX;
    int    m_iPlayerY;
    int    m_iEnemyX[100];
    int    m_iEnemyY[100];
public:
    void    Hit();    //    ヒット処理
    void    EnemyMove();    //    敵の動作
}:
//======================================================
class    CGameApp    :    public    CGameBase
{
    map<string,CGameBase*>    m_list[10];
public:
    void    AddObject( string name, CGameBase* );
    void    Run();
};
void    CGameApp::AddObject( string name, CGameBase* ) { } 
void    CGameApp::Run()
{
    //    "Data" を取り出す
    //    CGameBase    *data = list[data];

    //    取り出したポインタを元に関数を呼び出す
    //    data->Hit();
}

//======================================================
int main()
{
    CGameApp    *App = new CGameApp();
    app->AddObject( "Data", new CData() );

    app->Run();

    return 0;
}

 編集済み


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

Name: Tororo  ..中級者(9,666ポイント)   Date: 2010/08/04(水) 07:04   No:58073     
Title: Re:「雑談」 自分で作ってみたリストについて    
>>dicさん

この方法も少しは考えたのですが、
これでは CGameBase の依存性が高くなって、
再利用(クラス)しにくいように見えたので、

でも、これを見て思ったのですが、
CGameBase から派生させて、
CChara,CItem などとしていくと楽かもしれません。。


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

Name: dic  ..比類無きプログラマー(88,987ポイント)   Date: 2010/08/04(水) 16:30   No:58092     
Title: Re:「雑談」 自分で作ってみたリストについて    
CChara, CItem としても
CChara から CItem へのアクセス方法が・・・

グローバルなインスタンスを使うしか他には思いつかないですね


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

Name: Tororo [URL]  ..中級者(9,723ポイント)   Date: 2010/08/04(水) 17:45   No:58096     
Title: Re:「雑談」 自分で作ってみたリストについて    
>>dicさん

再利用とか、うんぬんの前に
自分の設計が悪かったのかもしれません。

もう少し考えてみて、リストを書き直すか、
このまま続けるかを決めようと思います。


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



Name: t@  ..ぴよぴよ(653ポイント)   Date: 2010/08/03(火) 19:22   No:58051       
Title: 構造体に格納した画像をランダムに表示したい    
こんにちはt@です。
また質問させてください。

1. 構造体に格納したカードの画像を、ランダムに13枚4列に並べて表示させようとしています。
カードは重複しないようにしたいのですが、まだそこには至ってません(;_;)

2.
typedef struct{
    char name[5][22][25];
    int graph[5][22];
    int score[5][22];
}card;
card c;
void start(){
int k=0,j=0,x=0,y=0;
    while(k<4){
        while(j<14){
            DrawGraph(x,y,c.graph[GetRand(3)][GetRand(13)],TRUE);
            j++,x=x+50;
        }
        k++,x=0,j=0,y=y+100;    
    }
}


ここではgraph[0][0]からgraph[3][13]まで表示させます。
カードを一枚表示したら少しずらし、カードが見えるようにしています。
13枚表示したら下にずらして別の種類のカードを表しします。

3.このプログラムだと、13x4枚のカードは表示されるのですが、表示されているカードすべてが常に高速でランダムに切り替わってしまいます。
変数の宣言を関数の外に出すと、カードは一瞬だけ表示され画面には残りません。
画像は止まってますが、実際にはかなり動いてます。

4.プログラム自体、「繰り返している間表示」になってるからだと思うんですが、どうすれば思うようにできるのかがわかりません。構造体に格納したカードの画像を13枚x4列ランダムに表示し、並べたいです。

5.学校で習って、成績は真ん中くらいです。

windows Vista 
Visual C++ Express Edition
Dxライブラリ
 編集済み


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


Name: バグ  ..ハッカー(202,737ポイント)   Date: 2010/08/03(火) 20:33   No:58052     
Title: Re:構造体に格納した画像をランダムに表示したい    
ちょっと手を加えてしまいましたが、下記のような感じでいかがでしょうか?
init関数は実装していませんので、画像ハンドルの取得やその他の値の初期化を実装してください。


// カードデッキではなく、カード1枚分のデータを構造体にした方が
// 管理が楽なので変更しました。
typedef struct
{
    char name[25];
    int graph;
    int score;
}card;

// カード5×22=110枚分という事で、構造体の配列としています。
card c[5 * 22];

// start関数を呼ぶ前にここで構造体配列へでーたセットしておいてください。
void init(void)
{
    for (int i = 0; i < 5 * 22; ++i)
    {
        // ここでcard構造体のデータを初期化しておく
    }
}

void start(void)
{
    // 描画されるカードのインデックス
    int i = 0;

    // とりあえず、配列の先頭から順番に13×4=52枚分を描画します。
    for (int y = 0; y < 4; ++y, ++i)
    {
        for (int x = 0; x < 13; ++x)
        {
            DrawGraph(x * 50, y * 100, c[i].graph, TRUE);
        }
    }
}


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

Name: バグ  ..ハッカー(202,852ポイント)   Date: 2010/08/03(火) 20:35   No:58053     
Title: Re:構造体に格納した画像をランダムに表示したい    
すみません、start関数のループが間違ってますね(^_^;)

void start(void)
{
    // 描画されるカードのインデックス
    int i = 0;

    // とりあえず、配列の先頭から順番に13×4=52枚分を描画します。
    for (int y = 0; y < 4; ++y)
    {
        for (int x = 0; x < 13; ++x, ++i)
        {
            DrawGraph(x * 50, y * 100, c[i].graph, TRUE);
        }
    }
}


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

Name: t@  ..ぴよぴよ(692ポイント)   Date: 2010/08/04(水) 12:50   No:58083     
Title: Re:構造体に格納した画像をランダムに表示したい    
回答ありがとうございます。
ですが、まだ画像の件が解決できません。

協力お願いします!


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

Name: t@  ..かけだし(1,069ポイント)   Date: 2010/08/04(水) 14:31   No:58088     
Title: Re:構造体に格納した画像をランダムに表示したい    
すみません。質問を変えてみます。

私が今やりたいことは、乱数を呼び出し78種類のカードをランダムに表示させることです。

ですが、実行するとカードの画像は常に高速でランダムに切り替わってしまいます。
これを動かないようにし、毎回違う乱数を呼び出して画像をランダムに表示させたいです。


typedef struct{
    char name[5][22][25];
    int graph[78];
    int score[5][22];
}card;
card c;
void start(){
   int i = 0;
    for (int y = 0; y < 4; ++y){
        for (int x = 0; x < 13; ++x, ++i){
            DrawGraph(x * 50, y * 100, c.graph[i], TRUE);
        }
    }
}


ちなみにこれを実行すると毎回画像のようになります。
DrawGraph(x * 50, y * 100, c.graph[i], TRUE);を
DrawGraph(x * 50, y * 100, c.graph[GetRand(78)], TRUE);にすると高速で動き続けます。

どうか力を貸してください。


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

Name: Mist  ..比類無きプログラマー(84,351ポイント)   Date: 2010/08/04(水) 15:29   No:58091     
Title: Re:構造体に格納した画像をランダムに表示したい    
typedef struct{
    char name[5][22][25];
    int graph[78];
    int score[5][22];
  int draw_num[4*13];     // 乱数を入れる
}card;
card c;
void start(){
   int i = 0;
    for (int y = 0; y < 4; ++y){
        for (int x = 0; x < 13; ++x, ++i){
            DrawGraph(x * 50, y * 100, c.graph[(c.draw_num[i])], TRUE);
        }
    }
}

ソースは上記のように変更する。
draw_num[0] ~ [51]にはループの外側で乱数をセットしておく。
とすれば希望する動作になるのではないでしょうか。


> バグさん

指摘ありがとうございます。
修正しました。 編集済み


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

Name: バグ  ..ハッカー(203,373ポイント)   Date: 2010/08/04(水) 16:44   No:58093     
Title: Re:構造体に格納した画像をランダムに表示したい    
>>Mistさん
>>DrawGraph(x * 50, y * 100, c.graph[(c.draw_num[x*y])], TRUE);
ここのdraw_num[x*y]はdraw_num[i]でないとマズくないですか?


>>t@さん
カードの総数も分かったので、ついでにカードシャッフル用の関数も追加してみました。
78枚のカードをシャッフルし、その中から52枚分の数値をdraw_numへ代入します。
乱数発生用の関数はrandを使用していますが、DxLibにはGetRandという関数が用意されていますので、気に入らなければ置き換えてください。

#include <stdlib.h>

#define CARD_NUMBER        78    // カードの総枚数

typedef struct
{
    char name[5][22][25];
    int graph[CARD_NUMBER];
    int score[5][22];
    int draw_num[4 * 13];
}card;

card c;

void shuffle(void)
{
    int i, j, k, id[CARD_NUMBER];

    // シャッフル用の数値配列の初期化
    for (i = 0; i < CARD_NUMBER; ++i)
    {
        id[i] = i;
    }

    // シャッフル処理
    for (i = CARD_NUMBER - 1; i > 0; --i)
    {
        j = rand() % i;
        k = id[i];
        id[i] = id[j];
        id[j] = k;
    }

    // シャッフルした値を代入する
    for (i = 0; i < 4 * 13; ++i)
    {
        c.draw_num[i] = id[i];
    }
}

void start(void)
{
    int i = 0;

    for (int y = 0; y < 4; ++y)
    {
        for (int x = 0; x < 13; ++x, ++i)
        {
            DrawGraph(x * 50, y * 100, c.graph[(c.draw_num[i])], TRUE);
        }
    }
}



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

Name: toyo  ..熟練のプログラマー(56,421ポイント)   Date: 2010/08/04(水) 17:03   No:58095     
Title: Re:構造体に格納した画像をランダムに表示したい    
ですが、実行するとカードの画像は常に高速でランダムに切り替わってしまいます。
これを動かないようにし、毎回違う乱数を呼び出して画像をランダムに表示させたいです。 


ループ中でstart( )をずっと呼び続けているのでしょう
何かキーを押したときだけstart( )関数を呼ぶようにしたらどうでしょう


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



Name: 紅葉  ..上級者(16,275ポイント)   Date: 2010/08/02(月) 07:27   No:57960       
Title: ライツアウトの問題    
ライツアウト(3×3版)と呼ばれているパズルゲームを作りました。
全てのマスの電気をつけるとクリアできるゲームです。
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%84%E3%82%A2%E3%82%A6%E3%83%88

ライツアウトの問題を紹介しているサイトはないでしょうか?
初期状態の問題が欲しいです。
これ専用のプログラムを作った方が早いのでしょうか?


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


Name: mats  ..入門者(3,268ポイント)   Date: 2010/08/02(月) 07:47   No:57961     
Title: Re:ライツアウトの問題    
きっと紅葉さんが欲しいのはこういう問題ではないんだろうなぁ…と思いながらもURLを貼ってみます.
一応ライツアウトの問題ですが,6×5ですし,答えを送るには(簡単ではありますが)登録が必要です.

http://acm.pku.edu.cn/JudgeOnline/problem?id=1222


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

Name: 紅葉  ..上級者(16,304ポイント)   Date: 2010/08/02(月) 11:25   No:57973     
Title: Re:ライツアウトの問題    
matsさん
URLを教えて下さってありがとうございます。
参考にさせて頂きます!!


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

Name: asd  ..上級者(21,504ポイント)   Date: 2010/08/02(月) 17:25   No:57983     
Title: Re:ライツアウトの問題    
#紹介されているURLにあるとおり、全部消すとクリアですよね?

個人的に思ったことですが、既にライツアウトのルールに則ったプログラムが出来ているのであれば、
全て消えた状態でランダムにライトをつけたり消したりするだけで、
解のある問題ができるのではないかなぁと思ったりします。

まぁ押した順番を覚えておいてそれを逆順すると解答になってしまいますが^^;
全てのライトをランダムに点灯、消灯させてしまうと解のないものが出来てしまうことがあるので
上記のような提案をしてみます。


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

Name: 紅葉  ..上級者(16,396ポイント)   Date: 2010/08/02(月) 23:39   No:57996     
Title: Re:ライツアウトの問題    
asdさん
回答ありがとうございます。
確かにそうなのですが数百問近く用意したいので被らせたくないんです。
同じ場所を何回押しても意味が無いので
この問題は解ける問題なら最高で8手で解けるんですね?

9マスだったら2の9乗で512パターンあり
全てがついてる状態とついてない状態を抜かすと510パターンもあるんです・・・。


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

Name: フリオ  ..プログラマー(35,198ポイント)   Date: 2010/08/03(火) 01:58   No:58005     
Title: Re:ライツアウトの問題    
 
 回転、対称による問題の重複や、解ける解けないに関係なく、510パターンを用意するなら、
000000001 ~ 111111110 のビット列を配列に入れるだけです。


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

Name: asd  ..上級者(21,698ポイント)   Date: 2010/08/03(火) 15:25   No:58037     
Title: Re:ライツアウトの問題    
>確かにそうなのですが数百問近く用意したいので被らせたくないんです。 

ごめんなさい。そんなにたくさん作るとは思っていなかったので先の回答をした次第です。
問題を作る=解けないものは除きたいと考えていますので、
それであれば、9つのライトそれぞれを押すか押さないかをビット列で組み合わせをつくり、
実際に全てのライトが消えている状態でビット列に従い実際にライトを操作するプログラムを作ってしまったほうがよいと思います。
(3*3マスで数百問近くも掲載しているサイトがあるとは考えにくいので)

余り参考にならなくて申し訳ないです。


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

Name: mats  ..入門者(3,495ポイント)   Date: 2010/08/04(水) 02:18   No:58072     
Title: Re:ライツアウトの問題    
まだ解決していないようだったので,全問題を作ってみました
全部点灯しているパターンと全部消灯しているパターンを含む512通りです

3×3だと512通り全てに解があるようです
(もちろん,私のプログラムが間違っている可能性もあります)

紅葉さんがどのような形式で問題を欲しいのかわからなかったので,期待と違うかもしれません
添付したファイルは512行全てが以下の形式になっています


盤面を表す9桁2進数 その盤面を消灯させるのに必要な最小手数


盤面を表す9桁2進数は,3×3に直して使って下さい
1が点灯、0が消灯を表しています

例)
000000101

000
000
101

上記の説明もかなり不親切になってしまったので,もしわからないことがあればまた聞いて下さい


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

Name: 紅葉  ..上級者(16,471ポイント)   Date: 2010/08/04(水) 11:56   No:58081     
Title: Re:ライツアウトの問題    
皆様ご回答ありがとうございます。
色々と勉強になりました。

問題を全て作って頂けるとは・・・Σ
お手間を取らせてしまい申し訳御座いません。
家宝にさせて頂きます!!

これは反転させる回数ではなく解ける問題の数でいいのでしょうか?


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

Name: mats  ..入門者(3,213ポイント)   Date: 2010/08/04(水) 13:07   No:58084     
Title: Re:ライツアウトの問題    
う,すいません,「解ける問題の数」が何を表してるのかわかりません…


補足すると,添付したファイルの

000100110 1

という行なら,

000
100
110

という盤面が最小1手で消灯できることを表しています
(左下を押す)


000100111 4

という行ならば,

000
100
111

という盤面が最小4手で解けることを表しています
(上,右上,左,右下を押す)


最小手数は,最短解法にこだわらないなら無視しても構いません

解けるか解けないかだけならば,3×3版ライツアウトは512パターン全て解けるようです
(上でも言ったように自分のプログラムが間違っている可能性もあります)


的外れなことを言っていたらごめんなさい…


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



Name: shuto  ..かけだし(1,489ポイント)   Date: 2010/08/01(日) 05:35   No:57915       
Title: 無題    

DXライブラリを使って3Dのゲームを作っているのですが
参考にしようとしてDXライブラリ置き場のサンプルプログラムの3Dアクション基本のプログラムに
添付した画像のようなポリゴンモデルを入れて動作させたところ、

画像の赤い矢印のような移動はできたのですが
オレンジの矢印のような 壁判定されるポリゴンの上の斜めの床判定ポリゴンからの落下
ができませんでした。

三角形になっているポリゴンが引っかかっていることはわかるのですが
引っかからないように修正する方法が思い浮かびませんでした。

どのようにプログラムやポリゴンモデルをつくればよいのかアドバイスをお願いします。


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


Name: shuto  ..かけだし(1,523ポイント)   Date: 2010/08/01(日) 05:40   No:57916     
Title: Re:無題    

あれー?
ごめんなさい タイトル書き忘れた上に編集キー?を間違って編集できないです。


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

Name: ookami  ..プログラマー(37,721ポイント)   Date: 2010/08/02(月) 08:43   No:57965     
Title: Re:無題    
過去ログからこんなのを見つけました。参考になりますでしょうか?
http://www.play21.jp/board/formz.cgi?action=res&resno=52351&page=&lognum=160&id=dixq&rln=523511274645701


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

Name: shuto  ..かけだし(1,631ポイント)   Date: 2010/08/04(水) 07:39   No:58075 解決!     
Title: Re:無題    
うーん

読んでみましたが自分の思う処理とあわないかもです。
今週はテスト期間で時間が取れないのでそのうち
自分で考え直してプログラムを作ってみようと思います。

ookamiさん ありがとうございました。


-------------------------
編集:解決マーク付けました 編集済み


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



Name: C言語です  ..ぴよぴよ(881ポイント)   Date: 2010/08/03(火) 12:36   No:58025       
Title: マルチスレッドのファイル書き込み    
WinXP(SP3)でVC2008Expressを使っています。
マルチスレッドのアプリケーションで、動作ログをファイルに記録するために
下記のテストプログラムを作ってみたのですが、うまく動作せず困っています。

スレッド関数の中から、ファイルを排他制御して書き込みして、終了するだけ
のプログラムのつもりですが、実行しても終了せず止まってしまいます。
たまにちゃんと終了してくれる時もありますが・・。

デバッグ実行して、停止したプログラムを中断すると、

「プロセスはデッドロックされているか、ユーザーモードコードがどれも実行
 されていません。すべてのスレッドが中止されました。」

というメッセージが出ます。ソースコードのカーソルを見ると、LockFileExの
ところで止まっているように見えるのですが、なぜここで止まるのか、原因が
まったくわかりません。

なにか間違えているのでしょうか・・。お助けください。m(_ _)m

─────────────< main.c >────────────────
#include <windows.h>
#include <process.h>
#include <stdio.h>

#define THREAD_NUM  16

HANDLE  thread[THREAD_NUM];
HANDLE  hFile;

unsigned __stdcall ThreadProc( void *p )
{
    UINT        id = (UINT)p;
    char        buf[128];
    DWORD       dwWrite;
    OVERLAPPED  ov;

    _snprintf( buf,128,"スレッド%dです。\r\n",id );

    ZeroMemory( &ov, sizeof(OVERLAPPED) );

    // ロックして追記書き込み
    if( LockFileEx( hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, &ov ) )
    {
        SetFilePointer( hFile, 0, NULL, FILE_END );
        WriteFile( hFile, buf, strlen(buf), &dwWrite, NULL );
        UnlockFileEx( hFile, 0, 1, 0, &ov );
    }

    _endthreadex(0);
    return 0;
}

void main( void )
{
    int i;

    hFile = CreateFile( "out.txt", GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,
                        NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
    if( hFile==INVALID_HANDLE_VALUE )
    {
        puts("CreateFileエラー");
        return;
    }

    for( i=0; i<THREAD_NUM; i++ )
    {
        thread[i] = (HANDLE)_beginthreadex( NULL, 0, ThreadProc, (void*)i, 0, NULL );
        if( !thread[i] )
            puts("_beginthreadexエラー");
    }

    WaitForMultipleObjects( THREAD_NUM, thread, TRUE, INFINITE );

    CloseHandle( hFile );
}


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


Name: シエル  ..プログラマー(39,943ポイント)   Date: 2010/08/03(火) 15:12   No:58033     
Title: Re:マルチスレッドのファイル書き込み    
beginthreadexのことを知らないので何ともいえませんが、
↓って、16個も同じスレッドを作成しているってことでしょうか?
もしそうであれば、作成したスレッドが終了していることを確認してから、
作成した方がいいのではないでしょうか?
まったく検討違いのことを言っていたらすみません。

for( i=0; i<THREAD_NUM; i++ ) 
    { 
        thread[i] = (HANDLE)_beginthreadex( NULL, 0, ThreadProc, (void*)i, 0, NULL ); 
        if( !thread[i] ) 
            puts("_beginthreadexエラー"); 
    } 


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

Name: Mist  ..比類無きプログラマー(84,144ポイント)   Date: 2010/08/03(火) 15:35   No:58040     
Title: Re:マルチスレッドのファイル書き込み    
> シエルさん

排他制御のテストをしたいのですから、終わるの待ってから起動していたのでは意味が無いですよ。


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

Name: toyo  ..熟練のプログラマー(56,180ポイント)   Date: 2010/08/03(火) 15:39   No:58041     
Title: Re:マルチスレッドのファイル書き込み    
LockFileExをブロッキングしないようにしたらどうでしょう
    while ( LockFileEx( hFile, LOCKFILE_EXCLUSIVE_LOCK | LOCKFILE_FAIL_IMMEDIATELY, 0, 1, 0, &ov ) == 0) ;
これでも無限ループの可能性はありますがループ回数を制限するとか拡張エラー情報を取得して処理するとかでできないでしょうか


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

Name: 御津凪 [URL]  ..ハッカー(146,902ポイント)   Date: 2010/08/03(火) 15:51   No:58042     
Title: Re:マルチスレッドのファイル書き込み    
一見正しく動作しているようですが、LockFileExで止まっているということは
そこでマルチスレッド特有のバグが発生しています。

マルチスレッドでは、ある変数に同時に書き込む処理があるのはタブーです。
つまり、 LockFileEx はスレッドセーフではない(複数のスレッドで同時に呼び出してはいけない)ということです。

なので、このような排他制御を行うのであれば、クリティカルセクションを使って制御した方がいいでしょう。

ファイルの指定領域をロックするLockFileExは、あくまでその領域をロックする機能で、スレッドの実行タイミングを制御するものではありません。


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

Name: シエル  ..プログラマー(39,979ポイント)   Date: 2010/08/03(火) 15:53   No:58043     
Title: Re:マルチスレッドのファイル書き込み    
Mistさん。すみません。その通りですね。

ファイルの排他制御のテストをしたいのは分かりますが、ThreadProcのスレッドを連続で呼び出して良いんでしょうか?
違う名前の関数を呼び出して、一つのファイルにアクセスして排他制御のテストをするのは分かりますが、
ThreadProcという一つの関数を終了するのを確認せずに、連続で呼び出すのはどうかと思いまして。
勉強不足なんであまり分かってないんですけどね;
変なこと言ってたら完全スルーして下さい。


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

Name: 御津凪 [URL]  ..ハッカー(147,031ポイント)   Date: 2010/08/03(火) 16:18   No:58044     
Title: Re:マルチスレッドのファイル書き込み    
> ThreadProcという一つの関数を終了するのを確認せずに、連続で呼び出すのはどうかと思いまして。

ThreadProc は一つの関数ですが、複数のスレッドから呼び出されること自体は問題ありませんよ。
各スレッドはそれぞれがスタック領域をが持っている(グローバル領域は共有)ので、
同じ関数を複数のスレッドに起動時に実行する関数として指定しても全く問題ありません。

マルチスレッドで一番問題となるのは、一つの変数(データ)領域に同時に書き込む状況がある場合がほとんどです。
それを防ぐために排他制御が必要になります。


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

Name: シエル  ..熟練のプログラマー(40,005ポイント)   Date: 2010/08/03(火) 16:24   No:58045     
Title: Re:マルチスレッドのファイル書き込み    
そうなんですね!非常に勉強になりました!
スレ汚し失礼致しました!


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

Name: お豆  ..ぴよぴよ(531ポイント)   Date: 2010/08/03(火) 18:11   No:58048     
Title: Re:マルチスレッドのファイル書き込み    
 OVERLAPPED  ov;
//初期化
ZeroMemory( &ov, sizeof(ov) ); 
ov.Offset = 0;  
ov.OffsetHigh = 0;
ov.hEvent = NULL;

//オーバラップ構造体を使う指定 6番目の引数にFILE_FLAG_OVERLAPPED
  hFile = CreateFile( "out.txt", GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 
                        NULL, OPEN_ALWAYS, FILE_FLAG_OVERLAPPED | FILE_ATTRIBUTE_NORMAL, NULL ); 
(追記)よくよく考えると、WriteFileを非同期にするわけでもないので、初期化だけでいいですね
あと本件には関係ないですが、_beginthreadexで作ったスレッドのハンドルは自動でとじられないので自分でやってあげてください
 繰り返し〜 CloseHandle(thread[i])

見た感じこれで駄目なら私にはわかりません。 編集済み


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

Name: C言語です  ..入門者(2,723ポイント)   Date: 2010/08/04(水) 01:24   No:58070 解決!     
Title: Re:マルチスレッドのファイル書き込み    
みなさま、コメントありがとうございます!
いろいろ試してみまして、期待通り動きました!ありがとうございました。
まとめて返信で失礼致します。

>シエルさん、Mistさん
コメントありがとうございました!同じスレッド関数を使ってスレッド作ってもいい
のかな?という点は少し不安だったので、問題ないとのことで、助かりました〜。


>toyoさん
LockFileEx()にLOCKFILE_FAIL_IMEDIATELYフラグ追加したところ、ロックできない
場合すぐ返ってきて、止まらず最後まで走るようにはなりました。ただ、ほとんど
のスレッドでロックできず、ファイルに書き込めるのは2スレッド前後でした。

そこで、ロック失敗後にまたロックするよう無限リトライしたところ、全スレッド
でファイル書き込みができました!ありがとうございました〜。

 retry:
   if( LockFileEx( hFile, LOCKFILE_EXCLUSIVE_LOCK |LOCKFILE_FAIL_IMMEDIATELY, ...
   {
      :
   }
   else
      goto retry;

ただ、無限ループになってしまっている点が、少々無駄にCPUを使っているんじゃない
だろうか・・?と気になってしまいます・・。


>御津凪さん
ご指摘のとおり、MSDNのLockFileExのページを見ると「領域をロックすると、他の
プロセスがその領域にアクセスすることを防止できます。」と書いてあるだけで、
「スレッドでも大丈夫」とは書いてありませんでした。これは「プロセス間排他は
いいけどスレッド間排他はダメ」ということでしょうか。

LockFileEx をやめて、クリティカルセクションを使ってみたところ、期待通り動作
しました!

   EnterCriticalSection(&cs);
   SetFilePointer( hFile, 0, NULL, FILE_END );
   WriteFile( hFile, buf, len, &dwWrite, NULL );
   LeaveCriticalSection(&cs);

なるほど、こういう時に使うんですね。このやり方がいいのかな・・。
勉強になりました。ありがとうございました!


>お豆さん
スレッドのハンドルをCloseHandleする処理はすっかり抜け落ちていました。ご指摘
ありがとうございました!
OVERLAPPED 構造体の初期化を、ZeroMemory だけでなくちゃんとやってみました。が、
特に挙動に変化は見られないようでした。
また、CreateFile() で FILE_FLAG_OVERLAPPED フラグを使ってみたところ、なんと
LockFileEx でブロックせずに、ロックできないとすぐに戻ってくるようになりました。
これは LOCKFILE_FAIL_IMMEDIATELY を指定した時の挙動と似ています。意外でした。
こんな動作になるんですね・・勉強になりました。ありがとうございました〜。



趣味で画像処理アプリを作っていたのですが、巨大画像の処理を速くしたくて、マルチ
スレッドにしてみようと、手を加え始めた矢先につまづいていましたが、これで前に
進めそうです!みなさま本当にありがとうございました!

最終的なソースは以下のようになりました。クリティカルセクションを使っています。
─────────────< main.c >──────────────── 
#include <windows.h>
#include <process.h>
#include <stdio.h>

#define THREAD_NUM  16

HANDLE              hThread[THREAD_NUM];
HANDLE              hFile;
CRITICAL_SECTION    cs;

unsigned __stdcall ThreadProc( void *p )
{
    UINT        id = (UINT)p;
    char        buf[128];
    DWORD       dwWrite;
    OVERLAPPED  ov;

    _snprintf( buf,128,"スレッド%dです。\r\n",id );

    ZeroMemory( &ov, sizeof(OVERLAPPED) );
    ov.Offset = 0;
    ov.OffsetHigh = 0;
    ov.hEvent = NULL;

    // クリティカルセクションでスレッド間排他制御して追記書き込み
    EnterCriticalSection( &cs );

    SetFilePointer( hFile, 0, NULL, FILE_END );
    WriteFile( hFile, buf, strlen(buf), &dwWrite, NULL );

    LeaveCriticalSection( &cs );

    _endthreadex(0);
    return 0;
}

void main( void )
{
    int i;

    InitializeCriticalSection( &cs );

    hFile = CreateFile( "out.txt", GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,
                        NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
    if( hFile==INVALID_HANDLE_VALUE )
    {
        puts("CreateFileエラー");
        return;
    }

    for( i=0; i<THREAD_NUM; i++ )
    {
        hThread[i] = (HANDLE)_beginthreadex( NULL, 0, ThreadProc, (void*)i, 0, NULL );
        if( !hThread[i] )
            puts("_beginthreadexエラー");
    }

    WaitForMultipleObjects( THREAD_NUM, hThread, TRUE, INFINITE );

    for( i=0; i<THREAD_NUM; i++ ) if( hThread[i] ) CloseHandle( hThread[i] );
    CloseHandle( hFile );
編集済み


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



Name: ジキル  ..ぴよぴよ(83ポイント)   Date: 2010/08/03(火) 22:28   No:58058       
Title: C言語でOS作成    
今使っているOSはWin XP SP3です。
開発環境は無料のVC++ 2010です。

C言語でOSを作成したいです。
そこでいくつか質問があります。

@言語はC言語だけで作れますか?
A開発環境はLinuxなどのほうがいいのでしょうか?
BC言語をコンパイルするとWinだとexe形式の実行ファイルが作成されますが、
 OSはどのように実行されるのでしょうか?
 パソコンの電源を入れるとOSのexeが実行されるのでしょうか?
 OSの実行がいまいち理解できません。
C入門書を三冊それぞれ五回ほど読んだ程度のまだまだ初心者です。
 そんな私でも作成することはできるのでしょうか?
DフリーのLinuxを改造するなどせずに、一から作成した場合はどのくらい時間がかかりますか?
Eその他、これは勉強したほうがいいというものをお願いします。

OSを作りたいといっても最初は起動とシャットダウンができる程度の簡単なものでいいです。
その程度のOSを作成するという仮定で上記の質問に回答お願いします。


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


Name: たかぎ [URL]  ..ハッカー(217,505ポイント)   Date: 2010/08/03(火) 22:39   No:58059     
Title: Re:C言語でOS作成    
ハードウェアはどんなものを想定していますか?
ブートローダが存在することを前提で作るのか、リセット処理から作るのかによっても話が変わります。

> @言語はC言語だけで作れますか? 

どんな処理系を使うかにもよりますが、普通は無理だと考えたほうがよいでしょう。
Visual C++とかは論外です。

> A開発環境はLinuxなどのほうがいいのでしょうか? 

何でもよいと思います。

> BC言語をコンパイルするとWinだとexe形式の実行ファイルが作成されますが、 
>  OSはどのように実行されるのでしょうか? 
>  パソコンの電源を入れるとOSのexeが実行されるのでしょうか? 
>  OSの実行がいまいち理解できません。 

パソコン上で動くOSを作ることが前提なのでしょうか?
そこのところをはっきりさせてください。

> C入門書を三冊それぞれ五回ほど読んだ程度のまだまだ初心者です。 
>  そんな私でも作成することはできるのでしょうか? 

できるかどうかでいえばできますが、まだまだ勉強と試行錯誤が必要になると思います。

> DフリーのLinuxを改造するなどせずに、一から作成した場合はどのくらい時間がかかりますか? 

どんなハードウェアで、どんなOSを、どんな開発ツールを使って作るのかによります。

> Eその他、これは勉強したほうがいいというものをお願いします。 

アセンブリ言語とハードウェアの基本的な知識は必須です。
割り込み処理とか、I/Oポートの制御とかが分からないようでは話になりませんので。


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

Name: ぽこ  ..プログラマー(26,765ポイント)   Date: 2010/08/03(火) 22:40   No:58060     
Title: Re:C言語でOS作成    
1.No。
 アセンブリ言語でしか記述できない部分があります。

2.あったほうがいいかも知れません。
 VMWare PlayerやVirtualBox等、仮想マシン環境は必須かな、と思います。

3.ハードディスクやフロッピーディスク、いわゆるブートデバイスの先頭512バイトを
 BIOSが読み込み、実行します。OSは一番最初にこの512バイトに起動プログラムを
 各必要があります。

4.5.6.誰だってできます。
 OSは起動とシャットダウンが出来れば、後はアプリケーションプログラムと 
 余り変わりません(といいつつ結構違いますが。)。

 ↓の本を買ってみてはどうですか?
 http://www.amazon.co.jp/dp/4839919844

 聞いたところによると、この本を元に中学生がOS作成したらしいです。
 #かかった期間は忘れましたが。


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

Name: softya [URL]  ..ハッカー(188,538ポイント)   Date: 2010/08/04(水) 00:26   No:58067     
Title: Re:C言語でOS作成    
>@言語はC言語だけで作れますか?
作るOSによっては、アセンブラは必須です。
マイコン向けのOSならアセンブラを使わずに書けるものもあります。

>A開発環境はLinuxなどのほうがいいのでしょうか?
WinでLinuxでも構いません。

>BC言語をコンパイルするとWinだとexe形式の実行ファイルが作成されますが、
exeはOS向けの形式ですので、リアルアドレスに変換された機械語ファイルを作る必要があります。
大雑把に説明します。パソコンを起動するとパソコンのBIOSが、HDDやFDDに記録されたブートローダを起動します。ブートローダは、OSのカーネル部分の機械語ファイルをメモリに展開してOSにジャンプします。

>C入門書を三冊それぞれ五回ほど読んだ程度のまだまだ初心者です。
並行して勉強する気さえあれば、出来ると思います。

>DフリーのLinuxを改造するなどせずに、一から作成した場合はどのくらい時間がかかりますか?
分かりません。
人それぞれです。

>Eその他、これは勉強したほうがいいというものをお願いします。 
すでに紹介されてますが、パソコン用なら「30日でできる! OS自作入門」をお勧めします。
http://book.mycom.co.jp/book/4-8399-1984-4/4-8399-1984-4.shtml
「30日でできる! OS自作入門」のWiki
http://hrb.osask.jp/wiki/?index
出来るOSの画面は、こんな感じです。
http://hrb.osask.jp/figures.html

もし、もっと素朴なものから始めたいと思うのならマイコン用のOS(モニタ程度のものから)を書くのも一つの方法です。



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



Name: 佐久間  ..ぴよぴよ(75ポイント)   Date: 2010/08/03(火) 21:04   No:58054       
Title: visual studio 2005と2008    
やさしいCという本を購入したのですが、visual studio 2005をダウンロードしてくださいみたいなことが
書かれていたのですが、2005ではなく、2008でも大丈夫でしょうか?
visual studio 2005とvisual studio 2008の違いはなんでしょうか。


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


Name: ookami  ..プログラマー(38,221ポイント)   Date: 2010/08/03(火) 21:15   No:58055     
Title: Re:visual studio 2005と2008    
いろいろと機能が追加されているようです。
http://www.atmarkit.co.jp/fdotnet/special/visualstudio2008_01/visualstudio2008_01_01.html

入力補助の強化だとか...
標準対応のフレームワークとか...
まぁ、C言語の基本を学習する、ということなら、気にするほどの違いはないと思いますよ^^

気をつけるとしたら、

どんなことをしたいのか(ゲーム作るとか)

使いやすそうなライブラリを探す

ライブラリが指定している環境があればそれに合わせる

くらいでしょうか。


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

Name: 佐久間  ..ぴよぴよ(169ポイント)   Date: 2010/08/04(水) 00:02   No:58065     
Title: Re:visual studio 2005と2008    
ookami様 ご返信ありがとうございます。
気にすることじゃないとのことで、安心しました。
2008を使って、学習したいと思います!


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

Name: 佐久間  ..ぴよぴよ(180ポイント)   Date: 2010/08/04(水) 00:02   No:58066 解決!     
Title: Re:visual studio 2005と2008    
解決忘れました。

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



Name: ぐれーと  ..ぴよぴよ(37ポイント)   Date: 2010/08/03(火) 23:08   No:58063       
Title: 背景の画像について    
こんにちわ。今日も適当にいろいろやってみようかなと思っていたらわからないことがありました。
下のようにただ単に左右にキャラが移動するようなプログラムを書いてみたんですが、
背景の画像を入れたいんですけど、
whileの中に LoadGraphScreen(0,0,"haikei5.png",FALSE);
を入れると、なんだか動作が重くなります。
かといってwhileの上に LoadGraphScreen(0,0,"haikei5.png",FALSE);
を書くと、一瞬で消えてしまいます。
ちゃんと表示するにはどうしたらいいでしょうか?



#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
        
        typedef struct{
        int x,y,gazou;
    }xh_t;
    
    char Key[256];
    int gazou[16];
    xh_t xh;
    
    xh.x = 0;
    xh.y = 350;
        
        SetDrawScreen( DX_SCREEN_BACK );        //裏画面に設定
    LoadDivGraph("char.png",16,4,4,32,32,gazou);
    
        while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
              //↑メッセージ処理         ↑画面をクリア          ↑キーボード入力状態取得       ↑ESCが押されていない
        
                if(Key[KEY_INPUT_LEFT]==1)
            xh.x -= 3;
        if(Key[KEY_INPUT_RIGHT]==1)
            xh.x += 3;
        
        xh.gazou = gazou[8];
        
        LoadGraphScreen(0,0,"haikei5.png",FALSE); //背景(どこに入れたらよいのやら・・・)
        DrawGraph(xh.x , xh.y , xh.gazou , TRUE);

        ScreenFlip();//裏画面を表画面に反映
        }
    
        DxLib_End();
        return 0;
}


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


Name: motuna  ..ぴよぴよ(453ポイント)   Date: 2010/08/03(火) 23:18   No:58064     
Title: Re:背景の画像について    
LoadGraphScreenは毎回読み込みをしてしまうので処理は遅くなるようです。

ゲームプログラミングの館の
14. メモリに画像を読み込んで表示する。 に詳しく書いてあります


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



Name: エイジュン  ..ぴよぴよ(191ポイント)   Date: 2010/07/21(水) 20:54   No:57082       
Title: VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
はじめまして、エイジュンと申します。
二箇所分からないところがあります。
一つ目は、
4.DXライブラリを使用するためのプロジェクトの設定を行う
E『追加のインクルードディレクトリ』の項目にDXライブラリのパッケージ内に入っている
        『プロジェクトに追加すべきファイル_VC用』フォルダのパスを入力してから、
         再度ダイアログ右下にある『適応』ボタンを押します。
    ( パスの例→  c:\DxLib_VC\プロジェクトに追加すべきファイル_VC用
      なお、DXライブラリをマイドキュメントフォルダに入れるとこれらのパス指定が面倒になりますので
      DXライブラリはなるべく浅いフォルダに入れておくことをお勧めします )

Dまでは進めたのですが、Eの部分がどこにも表示されません・・・

二つ目はビルドしたら、

プログラム'C\users\*******\documents\visual stdio
2010\Projects\test\Debug\test.exe'を開始できません。

指定されたファイルが見つかりません。
と表示されます。

解決法が分かりません。宜しく、お願い致します。





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


Name: シエル  ..プログラマー(31,546ポイント)   Date: 2010/07/21(水) 20:58   No:57084     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
表示されないという画面を張ってください

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

Name: toyo  ..熟練のプログラマー(54,271ポイント)   Date: 2010/07/22(木) 06:55   No:57121     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
普通は画像のように表示されます
この設定が出来ないとビルド失敗すると思うので実行も出来ませんよ


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

Name: エイジュン  ..ぴよぴよ(0ポイント)   Date: 2010/07/22(木) 22:20   No:57191     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
シエルさん、toyoさん返信有難うございます。
画像は、toyoさんが貼られてるのがそうです。
toyoさんが、貼られている画像のA番の編集のところに、
c:\DxLib_VC\プロジェクトに追加すべきファイル_VC用を入力しました。
あとも、書かれているように進めましたが、やはりファイルが見つからないと出ます・・・

因みに、
〜入門編〜(基本的な関数の使い方)
0. (導入)DXライブラリを手に入れる。(全てはココから)
の下の方に表示されている緑の服の少女は表示出来ますが、他のプログラムに打ち変えても、緑の服の少女が表示されます・・・

何が、原因なのでしょうか・・・

宜しくお願い致します。






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

Name: シエル  ..プログラマー(32,110ポイント)   Date: 2010/07/22(木) 22:22   No:57192     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
ん?インクルードディレクトリの設定が無くても、
緑の服の少女は表示できるの?


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

Name: エイジュン  ..ぴよぴよ(36ポイント)   Date: 2010/07/22(木) 22:47   No:57196     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
表示できます。
サンプルプログラム実行用フォルダの中のDxLib_VC2010用を使うと表示できます。
が・・・プログラムを消して、全く違うのを入力しても表示されます・・・


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,234,144ポイント)   Date: 2010/07/22(木) 23:53   No:57206     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
きっと入力しているファイルがプロジェクトのファイルじゃないんだと思いますよ。

まず、エディタ部に表示されているソースのタブを全て消して下さい。

ソリューションエクスプローラーに表示されているファイル名をダブルクリックして出てきたエディタで変更し、再コンパイルしてみて下さい。

違う場所の同じ名前のファイルを同じプロジェクトで開いていたりすると訳が解らなくなりますよね。


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

Name: エイジュン  ..ぴよぴよ(110ポイント)   Date: 2010/07/23(金) 19:00   No:57295     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
管理人さん返信有難うございます。
試しましたが、
プログラム'C\users\*******\documents\visual stdio 
2010\Projects\test\Debug\test.exe'を開始できません。 

指定されたファイルが見つかりません。 
と表示されます。 


・VisualC++ 2010 Express Edition
・VisualC++用 DXライブラリ
を別々に開いていました。

二つを持っている状態で、VisualC++ 2010 Express Editionの新しいプロジェクトを作成すれば出来るってことですか?







 


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,560ポイント)   Date: 2010/07/24(土) 00:11   No:57324     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
とりあえず新しいプロジェクトを作る前に、「サンプルプログラム実行用フォルダ」のプロジェクトファイルを使うところからやってみませんか?

今現在まだ自分がコンパイルしたソースをコンパイル出来た事は無いのですか?

私の上の回答は

>サンプルプログラム実行用フォルダの中のDxLib_VC2010用を使うと表示できます。 
>が・・・プログラムを消して、全く違うのを入力しても表示されます・・・

に対する物です。
プログラムを変更してもそれが実行結果に反映されないと言う事は、
書いているファイルが違うとしか思えないのです。
ソリューションエクスプローラーに表示されているファイル名をダブルクリックして出てきた所にソースを書いてコンパイルしてみて下さい。
変更が反映されるはずだと思います。


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

Name: エイジュン  ..ぴよぴよ(271ポイント)   Date: 2010/07/24(土) 01:40   No:57347     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
自分がコンパイルしたソースをコンパイル出来た事は無いです。
「サンプルプログラム実行用フォルダ」のプロジェクトファイルとはDxLib_VC2010用のことで宜しいのでしょうか?

緑の服の少女が表示出来るのを削除して、点を表示するプログラムを書きましたが、やはり、上で書いている
ファイルが見つかりませんてのが表示されます。
他に違うのを何度も書いてみましたが同じように表示されます。

それから、VisualC++ 2010 Expressで入力したときは、所々に、文字の下線に赤い波線が表示されます。
 DxLib_VC2010用では下線は表示されませんが、同じ結果になります。


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

Name: ookami  ..プログラマー(37,304ポイント)   Date: 2010/07/26(月) 09:18   No:57483     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
横からすみません。

ファイルを差し替えた後、「リビルド」してみたら意外といけたりして...

あとは うーん...何となくですが、消してはいけないファイルを消したり、
プロジェクトの設定とかビルドパスを変えてしまったりしていませんかね。

緑の少女が出来ていると言うことは、
ライブラリのパスとインクルードのパスは合っていると思いますが...

DXライブラリを再度 ダウンロード・解凍して、
「サンプルプログラム実行用フォルダ」を上書きして、
もう一度試してみてはどうでしょうか。


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

Name: nanashi  ..ぴよぴよ(432ポイント)   Date: 2010/07/28(水) 06:13   No:57600     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
一度、C\users\*******\documents\visual stdio2010\Projects\test\Debugの中をみてください。
もし、それでtest.exeがない場合、test.exeを検索してください。
それとtest.exeの出力先はどうなっていますか?
ビルドしたときに、出力にはどんなメッセージが出ていますか?


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

Name: エイジュン  ..ぴよぴよ(547ポイント)   Date: 2010/07/28(水) 21:53   No:57682     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
ookamiさん、nanashiさん返信有難うございます。
再ダウンロードしましたが、結果は同じでした。

test.exeを検索しました。一致する結果はありませんと出ました。

出力には、
1>------ ビルド開始: プロジェクト: DxLib_VC2010用, 構成: Debug Win32 ------
1>LINK : error LNK2001: 外部シンボル "_WinMainCRTStartup" は未解決です。
1>C:\Users\**********\Downloads\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\DxLib_VC2010用.exe : fatal error LNK1120: 外部参照 1 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

と、表示されます。


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

Name: naanashi  ..ぴよぴよ(53ポイント)   Date: 2010/07/29(木) 01:42   No:57700     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
ビルドできていませんよ?
まずは
LINK : error LNK2001: 外部シンボル "_WinMainCRTStartup" は未解決です。 
このエラーをなくしてください。


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

Name: シエル  ..プログラマー(37,936ポイント)   Date: 2010/07/29(木) 16:46   No:57743     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
どうしても解決しないようであれば、一度DXライブラリ本家の掲示板で聞いてみるといいですよ。

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

Name: エイジュン  ..ぴよぴよ(766ポイント)   Date: 2010/07/30(金) 23:57   No:57837     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
WinMainCRTStartupを検索したのですが、一致する結果はありませんと出ました。

LINK : error LNK2001: 外部シンボル "_WinMainCRTStartup" は未解決です。 
で、他の過去レスでC++2006で同じのがあったのですが・・・

_WinMainCRTStartup関数は、WinMainを呼び出す関数です。_WinMainCRTStartup関数は誰が呼び出すかというと、.EXEファイルの開始アドレス(エントリポイント)が_WinMainCRTStartup関数に設定されているため自動的に呼び出されます。そして、_WinMainCRTStartupはランタイムライブラリに含まれているのです。ということで、ランタイムライブラリをリンクしようとしたが、libc.lib はリンクしないようリンカオプションで設定されていたため、エラーが起きたんですね。 

どうしたらよいかというと、開始アドレス(エントリポイント)をWinMain関数に設定してやればいいのです。
とありました。

C++2010でも同じように出来るのでしょうか? 


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

Name: naohiro19  ..ぴよぴよ(184ポイント)   Date: 2010/07/31(土) 08:45   No:57855     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
プログラムの上に
#pragma comment(linker, "/entry:\"WinMain\"")

と記述することでWinMain関数に設定することができます。


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

Name: ISLe  ..中級者(9,762ポイント)   Date: 2010/07/31(土) 23:21   No:57902     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
WinMainCRTStartupは、C言語ランタイム(CRT)ライブラリの初期化モジュールですから、WinMainCRTStartupを呼ばないでWinMainから直接起動すると初期化の必要なC言語の標準関数は正常に動作しなくなります。

WindowsAPIしか使っていなければ実行ファイルのサイズを削るのに有効な手段ですが、DXライブラリでCRTライブラリを呼び出していないという保証がなければ危険です。


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

Name: エイジュン  ..ぴよぴよ(840ポイント)   Date: 2010/08/01(日) 00:17   No:57907     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
// ここにサンプルプログラムをペーストしてください
// 初期状態では LoadGraphScreen のサンプルプログラムが入力されています。
#include "DxLib.h"
#pragma comment(linker, "/entry:\"WinMain\"")
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                 LPSTR lpCmdLine, int nCmdShow )
{
    if( DxLib_Init() == -1 )    // DXライブラリ初期化処理
    {
         return -1;                // エラーが起きたら直ちに終了
    }
    // BMP画像の表示
    LoadGraphScreen( 0 , 0 , "test1.bmp" , TRUE ) ;

    WaitKey() ;                    // キーの入力待ち((7-3)『WaitKey』を使用)

    DxLib_End() ;                // DXライブラリ使用の終了処理

    return 0 ;                    // ソフトの終了
}

指定されたファイルは見つかりませんとなります・・・


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

Name: ISLe  ..中級者(9,969ポイント)   Date: 2010/08/01(日) 00:52   No:57908     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
#もう何が何だか良く分かりませんが

No:57682で、

> 1>C:\Users\**********\Downloads\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\DxLib_VC2010用.exe : fatal error LNK1120: 外部参照 1 が未解決です。 

とあるので、DXライブラリをC:\Users\**********\Downloadsに展開していると思うんですが、『追加のインクルードディレクトリ』にはずっと『c:\DxLib_VC\プロジェクトに追加すべきファイル_VC用』と入力しているのでしょうか?


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

Name: エイジュン  ..ぴよぴよ(878ポイント)   Date: 2010/08/01(日) 10:03   No:57918     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
追加のインクルードディレクトリ
追加のライブラリディレクトリに
c:\DxLib_VC\プロジェクトに追加すべきファイル_VC用を入力しています。


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

Name: ナムアニクラウド [URL]  ..ぴよぴよ(519ポイント)   Date: 2010/08/01(日) 13:53   No:57928     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
 「DXライブラリ置き場」の「DXライブラリの使い方」や
「ゲームプログラミングの館」で、既にVisualC++ 2010 Express Edition向けの説明があるようです。
よく読んでおきましょう。

DXライブラリ置き場
http://homepage2.nifty.com/natupaji/DxLib/

プロジェクトを作成するたびに設定しないといけないので大変ですが、頑張りましょう。 編集済み


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

Name: ISLe  ..中級者(10,081ポイント)   Date: 2010/08/01(日) 18:06   No:57936     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
> 追加のインクルードディレクトリ
> 追加のライブラリディレクトリに
> c:\DxLib_VC\プロジェクトに追加すべきファイル_VC用を入力しています。

実際の『プロジェクトに追加すべきファイル_VC用』フォルダが
C:\DxLib_VC\プロジェクトに追加すべきファイル_VC用
にありますか?

C:\Users\**********\Downloads\DxLib_VC\プロジェクトに追加すべきファイル_VC用
にあるのでは?

ダウンロードしたDXライブラリをC:\に展開してください。


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

Name: エイジュン  ..かけだし(1,002ポイント)   Date: 2010/08/03(火) 22:56   No:58062 解決!     
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方    
返信遅くなりました。

解決出来ました。

ちゃんと、画面中心に白い点が表示出来ました。

パスのことを理解していなかったのが原因でした。

パスは、プロパティの場所のことだったんですね。

返信して戴いた方々、有難う御座いました。


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



Name: yamataka  ..ぴよぴよ(705ポイント)   Date: 2010/07/25(日) 07:12   No:57438       
Title: ウィンドウの枠の太さ    
タイトルの通りで、DXライブラリとC言語を使ってウィンドウの枠の太さを変えることは出来ないでしょうか?
もし出来たら、やり方を教えていただけると有り難いです。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,237,609ポイント)   Date: 2010/07/25(日) 09:38   No:57442     
Title: Re:ウィンドウの枠の太さ    
DXライブラリで作ったウィンドウの枠のサイズを変更するのではなく、
DXライブラリとC言語で他のアプリのウィンドウのサイズを変更したいと言う事でしょうか?

前者であればこちら参考にして下さい。
http://www.play21.jp/board/formz.cgi?action=quote&resno=17115&id=dixq&quo=17127&lognum=54


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

Name: yamataka  ..ぴよぴよ(772ポイント)   Date: 2010/07/25(日) 11:51   No:57443     
Title: Re:ウィンドウの枠の太さ    
> DXライブラリで作ったウィンドウの枠のサイズを変更するのではなく、
> DXライブラリとC言語で他のアプリのウィンドウのサイズを変更したいと言う事でしょうか?

いえ、DXライブラリで作ったウィンドウの枠の太さを変更したいのです。

DXライブラリで作ったウィンドウの枠は、なぜか他のソフトより少し枠が太いと思ったので。


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

Name: ぬるぽ  ..入門者(3,683ポイント)   Date: 2010/07/25(日) 12:48   No:57444     
Title: Re:ウィンドウの枠の太さ    
過去に同じような質問をした方がいます。参考までにどうぞ。

http://www.play21.jp/board/formz.cgi?action=res&id=dixq&resno=17115&lognum=54&from=all
http://www.play21.jp/board/formz.cgi?action=quote&resno=54654&id=dixq&lognum=168
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1287


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

Name: yamataka  ..ぴよぴよ(820ポイント)   Date: 2010/07/25(日) 13:08   No:57445     
Title: Re:ウィンドウの枠の太さ    
画像を張れれば質問の意味が伝えやすいのですが…
すみません、画像の張り方がわかりません。

あと、SetWindowStyleMode()は違う気がするので、CreateWindow()?


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

Name: シエル  ..プログラマー(34,296ポイント)   Date: 2010/07/25(日) 13:26   No:57447     
Title: Re:ウィンドウの枠の太さ    
ファイルを選択から、該当の画像を選択するだけで貼れますよ

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

Name: yamataka  ..ぴよぴよ(840ポイント)   Date: 2010/07/25(日) 13:31   No:57449     
Title: Re:ウィンドウの枠の太さ    
おお、気付かなかった!
シエルさんありがとうございます。

上の画像のように、DXライブラリを使用して作ったソフトの枠が他のソフトより太いのです。
DXライブラリを使用したソフトの枠の太さを、他のソフトの枠の太さに変更することはできますか?

(まあ、そんな気になる程の違いではないのですが…) 編集済み


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

Name: ISLe  ..中級者(9,152ポイント)   Date: 2010/07/27(火) 00:42   No:57528     
Title: Re:ウィンドウの枠の太さ    
> 上の画像のように、DXライブラリを使用して作ったソフトの枠が他のソフトより太いのです。
> DXライブラリを使用したソフトの枠の太さを、他のソフトの枠の太さに変更することはできますか?

ウインドウスタイルを調べてみたところ、枠付きのウインドウ(WS_BORDERあり)でもWS_POPUPスタイルが設定されているのが原因のような気がします。


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

Name: シエル  ..プログラマー(34,812ポイント)   Date: 2010/07/27(火) 11:08   No:57542     
Title: Re:ウィンドウの枠の太さ    
DXライブラリは使わないのでできるか分かりませんが、
APIでSetWindowLongあたりを使えば、好きなスタイルに変更できるのでは?


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

Name: yamataka  ..ぴよぴよ(909ポイント)   Date: 2010/07/28(水) 09:58   No:57608     
Title: Re:ウィンドウの枠の太さ    
SetWindowLong(GetMainWindowHandle,GWL_STYLE,WS_VISIBLE | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX);

と、上記のようにだけ付け加えて実行してみましたが、変化はありませんでした。
(もしかしたら WS_〜 の選択を間違っている?) 編集済み


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

Name: Mist  ..比類無きプログラマー(84,156ポイント)   Date: 2010/07/28(水) 10:30   No:57612     
Title: Re:ウィンドウの枠の太さ    
GetMainWindowHandleの後ろに()が抜けてると思いますけど。
あと、SetWindowLongで変更しても、SetWindowPosを実行しないと反映されない場合があります。

http://msdn.microsoft.com/ja-jp/library/cc411203.aspx
の解説のところ。 編集済み


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

Name: Mist  ..比類無きプログラマー(84,135ポイント)   Date: 2010/07/28(水) 10:32   No:57613     
Title: Re:ウィンドウの枠の太さ    
DXライブラリならSetWindowStyleModeを使うべきかと思いますが。

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

Name: yamataka  ..かけだし(1,296ポイント)   Date: 2010/08/03(火) 10:43   No:58018 解決!     
Title: Re:ウィンドウの枠の太さ    
お久しぶりに失礼します。

色々と試してみて、
SetWindowStyleMode(2);
を設定してDxLib_Init()した後に、
SetWindowLong(GetMainWindowHandle(),GWL_STYLE,WS_VISIBLE | WS_OVERLAPPEDWINDOW^WS_THICKFRAME);
SetWindowPos(GetMainWindowHandle(),HWND_TOP,0,0,640,480,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
をしてみたら出来たのですが理由がわかりません。
SetWindowStyleMode();に0や1を指定した後では出来ないのです。

誰か理由がわかる方すみませんが教えて下さい。

一応本題は解決したので解決にしておきます 編集済み


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

Name: nayo  ..上級者(17,938ポイント)   Date: 2010/08/03(火) 12:06   No:58022     
Title: Re:ウィンドウの枠の太さ    
DXライブラリなら

SetWindowStyleMode(9);

でたぶんお望みのウィンドウになると思いますが…
違ってたらすみません


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

Name: シエル  ..プログラマー(39,635ポイント)   Date: 2010/08/03(火) 12:12   No:58023     
Title: Re:ウィンドウの枠の太さ    
SetWindowStyleModeを0や1にした場合のどういうスタイルになるのか、
DXライブラリはさっぱりわからないので、分かりませんが、
そのスタイルに対応するsetwindowlogとsetwindowposの引数を指定する必要があると思います。


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

Name: toyo  ..熟練のプログラマー(55,569ポイント)   Date: 2010/08/03(火) 12:31   No:58024     
Title: Re:ウィンドウの枠の太さ    
DxWin.cppより
------------------------
// ウインドウスタイルの定義

#define WSTYLE_NUM                    (7)            // ウインドウスタイルの数

// 0 :デフォルト
// 1 :タスクバーなし
// 2 :タスクバーなし枠なし
// 3 :枠なし
// 4 :何もなし
// 5 :最小化無し
// 6 :ツールバーに適したウインドウ
const DWORD WStyle_WindowModeTable[WSTYLE_NUM] = 
{
    WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
    WS_POPUP | WS_SYSMENU,
    WS_POPUP | WS_SYSMENU,
    WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
    WS_POPUP | WS_SYSMENU,
    WS_POPUP | WS_SYSMENU | WS_CAPTION,
    WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
} ;

const DWORD WExStyle_WindowModeTable[WSTYLE_NUM] = 
{
    WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
    WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
    0,
    WS_EX_TOOLWINDOW,
    WS_EX_TOOLWINDOW,
    WS_EX_WINDOWEDGE,
} ;

0,1と2の違いは拡張スタイルの有無のようです


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

Name: toyo  ..熟練のプログラマー(56,011ポイント)   Date: 2010/08/03(火) 12:41   No:58026     
Title: Re:ウィンドウの枠の太さ    
ソースのバージョンが古かったので当たらし3.03のものでは

//  0 :デフォルト
//  1 :タスクバーなし
//  2 :タスクバーなし枠なし
//  3 :枠なし
//  4 :何もなし
//  5 :最小化無し
//  6 :ツールバーに適したウインドウ
//  7 :最大化ボタンつきウインドウ、初期状態が通常サイズ
//  8 :最大化ボタンつきウインドウ、初期状態が最大化状態
//  9 :デフォルトに縁の立体化無し
const DWORD WStyle_WindowModeTable[WSTYLE_NUM] = 
{
    WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
    WS_POPUP | WS_SYSMENU,
    WS_POPUP | WS_SYSMENU,
    WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
    WS_POPUP | WS_SYSMENU,
    WS_POPUP | WS_SYSMENU | WS_CAPTION,
    WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
    WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
    WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION | WS_MAXIMIZE,
    WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
} ;

const DWORD WExStyle_WindowModeTable[WSTYLE_NUM] = 
{
    WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
    WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
    0,
    WS_EX_TOOLWINDOW,
    WS_EX_TOOLWINDOW,
    WS_EX_WINDOWEDGE,
    WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
    WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
    WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
    WS_EX_WINDOWEDGE,
} ;
でした


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

Name: yamataka  ..かけだし(1,354ポイント)   Date: 2010/08/03(火) 22:46   No:58061     
Title: Re:ウィンドウの枠の太さ    
あ、最新のバージョンにしたらSetWindowStyleMode(9)でできました。

こんな質問につき合わせてしまってみなさんすみませんでした。


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



Name: 真等 [URL]  ..ぴよぴよ(567ポイント)   Date: 2010/07/31(土) 11:23   No:57861       
Title: 【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】    
きゅーさんいつもお世話になっております。
スペースをお借りします。


皆様、こんにちは。
この度、私は新たにSTG-シューティングゲームの制作企画を立ち上げました。(東方……龍神録そっくりのシステムを考えております。)
しかし、そのプログラミング部分で悩んでおります。

と言いますのも、今回の企画を通じて、他のプログラマーさんと共同で開発してみたいと思いまして。(満足できるほどの規模を持ったゲームのプログラムを自分一人でやりきるのに時間的な限界を感じました。)
しかし、個人でSTGを完成させたことはあるのですが、他の方との共同プログラミングをしたことはなく、どうしたらいいものかと迷っております。

現状、まだ私の他にプログラマーさんが居ない状況です。(企画の詳細を詰めていって、募集サイト様にて募集させていただこうと考えてます。もし、条件次第では一緒にやっても構わないという方がいらっしゃいましたらメール下さい。)
プログラマーは私一人というこの期間の内に、できるだけの下準備と言いますか心構えのようなものをしっかりさせておきたいと思いました。


そこで、皆様のゲームプログラマーとして活躍された経験を基に、もしくは、予想できる範囲でお教え下さい。
もし共同制作するとしたら、どんなことに気を付けるべきなのか、どういう能力があったらいいのかなどなど。
逆に、こんな人となら一緒にやってみたいなど、何でも大歓迎です!

超真面目も雑談感覚でも、レスお待ちしております!


以上です。
よろしくお願いいたします。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,243,984ポイント)   Date: 2010/07/31(土) 12:00   No:57863     
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】    
&resnoまとーさん、お久しぶりです〜^^

制作企画の立ち上げお疲れ様です。頑張って下さいね☆

ところで、最近共同制作の話題は結構こちらの掲示板でも見かけます。
ジジ猫さんが募集をかけられてからでしょうかね?

最初のジジ猫さんの投稿
http://www.play21.jp/board/formz.cgi?action=res=50055&page=&lognum=154&id=dixq&rln=50168

募集をかけた投稿
http://www.play21.jp/board/formz.cgi?action=res&resno=50310&page=&lognum=154&id=dixq&rln=50399

引き続き募集をかけた投稿
http://www.play21.jp/board/formz.cgi?action=res&resno=50517&page=&lognum=156&id=dixq&rln=50912

その後ジジ猫さんうまく運営出来ていることを願います。
なかなか募集をかける投稿はあってもその後どうなったか解らないんですよね〜;
また、ookamiさんもよくトピを立てていらっしゃいます。
サイトも立ち上げて支援されているようです。
以下参考になればどうぞ。

【雑談】知らない人同士でのゲーム作りで気をつけること
http://www.play21.jp/board/formz.cgi?action=res&resno=52130&page=&lognum=160&id=dixq&rln=52271

【雑談】開発メンバー募集掲示板で、投稿フォームは本文だけでいいのか
http://www.play21.jp/board/formz.cgi?action=res&resno=53564&page=&lognum=165&id=dixq&rln=535641276645457

【雑談】ゲーム開発の流れを紹介しているサイトって...
http://www.play21.jp/board/formz.cgi?action=res&resno=55769&page=&lognum=172&id=dixq&rln=557691278992107

リンク多過ぎて読みにくかったですかね^^;


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

Name: softya [URL]  ..ハッカー(187,803ポイント)   Date: 2010/07/31(土) 13:32   No:57868     
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】    
共同作業で気をつけることは、
1)一番プログラミングに理解が深くて、作業時間に自由度が高い人がライブラリ等の足回りを担当すること。
ようするにすぐ対処できて、バグ周りの面倒を見れる人がやるべき。

2)進捗管理は別の人でも良いが、気配りの出来る人、ちゃんと言うべき時に言うことが出来る人を。
人にモノを頼んだり、作業の状況を把握は大変なことなんです。普通は企画者がやることになりますが。
ビジネス用語ですが、報告・連絡・相談がキモですね。相手に求める前に自分が先に実践してください。そうしないと相手に同じことを求めることが出来ません。

3)バージョン管理ツール(CVSやサブバージョン)等を使ってバージョンの管理や同じソースコードを同時に変更した場合のコンフリクト等にも留意すること。ここら辺はよく話し合った方が良いです。大きな修正を行う場合は、相手に必ず一言断ること。
サブバージョンとは、
http://ja.wikipedia.org/wiki/Subversion
サブバージョンの無料サーバ
http://www.red-mount.com/blogs/show/beanstalk

4)コーディング規約を決めること。ゆるやかで構いません。
名前の付け方やグローバル変数にするのかどうかとか、大雑把な取り決めです。
やりながら、相手に合わせて変えていく事も大事です。ガチガチなのは嫌がられます。



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

Name: ookami  ..プログラマー(37,686ポイント)   Date: 2010/07/31(土) 20:16   No:57893     
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】    
# Dixq (管理人)さん

> ookamiさんもよくトピを立てていらっしゃいます。 
> サイトも立ち上げて支援されているようです。 

なんと。
ご紹介ありがとうございます^^


# 真等さん

ということで、支援サイトを作成しています。
実は「方向性を考えている段階」なのでアレなのですけど。
今は「ただの掲示板に繊毛が生えたくらい」なのですけど。
よかったらご利用くださいませ。
http://oookami.sakura.ne.jp/integ/


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

Name: 真等 [URL]  ..かけだし(1,291ポイント)   Date: 2010/08/01(日) 03:47   No:57914     
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】    
レスありがとうございます。
簡単ではございますが、返答させていただきます。
遅くて申し訳ありません。(ゲームを公開したばっかでバグ続出ーの、対応あばばばでした 笑)


>きゅーさん
お久しぶりですー。
「STGはもう作らない!」とか言いつつ、結局STGですいません 笑

リンクありがとうございます。
リンク先のモノにのめり込んでしまい、おかげでレスが凄い遅れましたぜ、ごめんなさい(ノ´▽`)ノ〜
色々参考になりました。
これからも何度か見直したいと思います。

ジジ猫さんは高校生なのに、すごい挑戦的で良いですね。
皆様の暖かい声援が羨ましいです。
私も影ながら応援しております〜!



>softyaさん
ありがとうございます。
きゅーさんの貼ったリンク先で有り難いお言葉を拝見させていただきました。
自分にはない考えを目にし、反省するばかりでした。

また、プログラミングに関してもお答え下さり、ありがとうございます。
返答させていただきます。

1)
ライブラリを作るほどの規模になると、大変そうですね。
今回はDXライブラリ(か、頑張ってseleneでしょうかね)を使わせていただこうかと思いまして、それでカバーできない他の部分はライブラリと言えるまで昇華させるほどのことはしないのではと予想しておりますが……。
(結局は、「果たしてどうなるやら」状態なんですけどね。)

2)
進捗管理は難しいですね。
大事ですが、企画者が制作過程で完璧にやり切ることはまず無理でしょうから、上手い仕組みづくりが必要かなぁと思ってます。
プログラミング担当の切り分け方などにも大きいですかね。

3)
Subversionは使ったことないんですよね。
その勉強も含めて、一緒にやっていけたらなぁと思ってます。
リンクまで貼って下さり、ありがとうございます。

4)
コーディング規約――はまったく考えてませんでした。
確かに必要ですね。
一度プロのものを見たことはあるのですが、あれはガチガチでしたね 笑
どうしていいか分からない範囲ですので、勉強したいと思います。



>ookamiさん
凄いことされてますね!
同じような体験が私にもありますので、応援したいです!

支援サイトの方も良いですね。
期待させていただきます。
色々な方のご意見を吸収され、ますます良いツールになっていくものと思います。
使っていいとのことで、本当にありがとうございます。






レスありがとうございます。
改めて、返事が遅くなってしまい申し訳ありません。
お詫び申し上げます。

まだまだレスお待ちしています!
よろしくお願いいたします。


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

Name: ぜらーちん  ..初心者(5,317ポイント)   Date: 2010/08/02(月) 12:37   No:57975     
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】    
リーダーを最初に決める。
まず、どんなゲームを作るのかを打ち合わせする。ゲームが決まったら、
そのゲームに必要なものは何かを話し合う(classや、関数、変数など)
ある程度出たら、それを表にまとめる。

共有データが多いのであれば、
共有データ.hを作っておいて、共有するデータはまとめてそこに置いておくなどもいいかも

フローチャートを作る(UMLでもok)
どういった流れで一連の作業が続いていくかを簡単に作る。
これによって、一連の流れや、どんな処理が必要か〜が分かる

ここまでの作業が終わったら、誰がどの部分を作るかを話し合い
役割分担を行う

進捗表に沿って作成していく。
その際に必要な関数や、変数が増減した場合にはチームに報告する。(ケースバイケース)
また変更が必要になる場合も、勝手に変更しないで相談する
例えば引数などなど、勝手に変更してしまうのはまずい

で、一次テストでまとめてみて
バグとかがあった時は、また話し合って、また修正していく感じ


一番まずいのが、勝手にプログラムを変更したり
何も決めずにこんなのあればいいなとか、後のことを考えずに増設していくことかな?
まとめ役も欲しい処


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

Name: softya [URL]  ..ハッカー(188,159ポイント)   Date: 2010/08/02(月) 13:16   No:57977     
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】    
あっ大事なことを書き忘れてました。
バグが出たときに、まず自分のコードを疑うこと。
自分のコード内でのメモリ破壊の結果、プログラム全体の動きが悪くなって相手のコードの部分でバグが出ている可能性が結構あります。これを怠ると当然チーム内はギクシャクします。
お前のバグだからお前が調べろって態度が一番良くないです。一緒に調べるか、まず自分で先に調べて問題を絞り込んでから相手に報告するかすると良いでしょう。


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

Name: 真等 [URL]  ..かけだし(1,573ポイント)   Date: 2010/08/02(月) 21:33   No:57993     
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】    
レスありがとうございます。

>ぜらーちんさん
「リーダーを決める」だけはまだ行けそうに思えるのですが、そこからはもう理想郷にしか見えません……。
自分は作り始めてからアレがないコレがないとやってしまうタイプなので、まずそこから直さなくてはですね……;;
しかし、そこまで計画性を持ってやるとなりますと、やはり一度はどなたか凄い人が上に付いてもらってやってみるっていう経験が欲しいですね。
そういう機会を探していこうと思います。

まとめ役は欲しいですね。
プログラミングに限らず、この役が居ないとゲーム作りは厳しいです。


>softyaさん
確かに、バグを下手に扱うと酷いことになりそうですね……。
他人と上手くやっていく方法ってのは難しいですよね。
銘じて取り組んでいきたいと思います。


本当にレスありがとうございます!


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

Name: ookami  ..プログラマー(38,053ポイント)   Date: 2010/08/03(火) 08:36   No:58009     
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】    
> そういう機会を探していこうと思います。
もし真等さんが学生さんならば ↓ こんなのがあります。
http://www.nintendo.co.jp/n10/seminar/what/index.html
以前 友人が通っていて、非常にいい経験になったとのことでしたよ^^
ご参考まで。


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

Name: 真等 [URL]  ..かけだし(1,665ポイント)   Date: 2010/08/03(火) 21:35   No:58056     
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】    
>ookamiさん
情報ありがとうございます。
任天堂ゲームセミナーは良いって聞きますねー。
あと10年前ぐらいに知りたかったです 笑

もし学生の方がいらっしゃいましたら、私からもオススメしておきます!


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



Name: sood  ..入門者(3,607ポイント)   Date: 2010/07/31(土) 16:52   No:57877       
Title: 部分的に透明のpngファイルの作り方    
例えば、龍神録のキャラクター素材を、pngで書き換えると
白や黒で四角く画像そのまま出てしまうのですが、どうしたらいいのでしょうか?
9章で試しています。


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


Name: DVDM [URL]  ..熟練のプログラマー(55,474ポイント)   Date: 2010/07/31(土) 17:11   No:57878     
Title: Re:部分的に透明のpngファイルの作り方    
>>soodさん
龍神録と言うことは DxLib でしょうか。
画像に透過しているかどうかの情報が入っていないや、
描画系関数の引数にあります TransFlag に TRUE が設定されていないためだと思います。


白や黒で描画される部分を画像ソフトなどを使って透明にするか、
DxLib の中にある関数 SetTransColor を使用して抜き色を指定してみるといいかもしれません。
URL:http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R15N7


描画関数に関しては一例としてこちらを上げておきます。
最後の引数に TRUE を設定します。
URL:http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R3N7


Name: シエル  ..プログラマー(38,321ポイント)   Date: 2010/07/31(土) 17:21   No:57879     
Title: Re:部分的に透明のpngファイルの作り方    
アルファ情報が無くなってしまったのではないでしょうか。
関数を使って透明色を指定するか、グラフィックソフトなどで透明色を設定してさい。


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

Name: sood  ..入門者(3,632ポイント)   Date: 2010/07/31(土) 18:19   No:57883     
Title: Re:部分的に透明のpngファイルの作り方    
↑すいません、NAME書いてませんでした;
保存されないんですね;


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

Name: sood  ..入門者(3,757ポイント)   Date: 2010/07/31(土) 18:19   No:57884     
Title: Re:部分的に透明のpngファイルの作り方    
> アルファ情報が無くなってしまったのではないでしょうか。
> 関数を使って透明色を指定するか、グラフィックソフトなどで透明色を設定してさい。

ええと、つまり、ペイントでは無理ということですよね。
専用ソフトでしか編集できない領域があるということですか

 
>龍神録と言うことは DxLib でしょうか。 
>画像に透過しているかどうかの情報が入っていないや、 
>描画系関数の引数にあります TransFlag に TRUE が設定されていないためだと思います。
すいません、言葉足らずでした。
ソースをコピペして「よし、動くな」ってわかったあと
素材だけ交換するカタチでしたので、おそらくそれは無いと思います。。


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

Name: シエル  ..プログラマー(38,368ポイント)   Date: 2010/07/31(土) 18:32   No:57886     
Title: Re:部分的に透明のpngファイルの作り方    
ペイントでは無理ですね。
透明色を指定できるソフトなら、フリーでもたくさんあるので、探してみて下さい。


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

Name: みけCAT  ..ぴよぴよ(508ポイント)   Date: 2010/08/03(火) 15:28   No:58038     
Title: Re:部分的に透明のpngファイルの作り方    
ソフトの例をあげてみます。
簡単png作成
GIMP


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



Name: 1617  ..ぴよぴよ(16ポイント)   Date: 2010/08/03(火) 09:39   No:58011       
Title: 三角比    
VC++2010を使っているのですが、角度を入力するとその角度のsin とcosの値が表示されるプログラムを作ろうと思っています
どうしたらよいでしょうか・・・・



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


Name: ぜらーちん  ..初心者(5,884ポイント)   Date: 2010/08/03(火) 09:52   No:58012     
Title: Re:三角比    
計算式が分からないのですか?

普通に表示させるなら

int main()
{
  変数宣言
 
  printf("角度を入力してください>");
  scanf("%lf", &変数);
  gets(配列);

  計算式

  printf("sin = %0.1f , cos = %0.1f", 変数, 変数);
  return(0);
}

見たいな感じでいいのでは?
sinとかの出し方は、数学のサイト見れば分かると思います


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

Name: たかぎ [URL]  ..ハッカー(217,108ポイント)   Date: 2010/08/03(火) 09:52   No:58013     
Title: Re:三角比    
どうしたらって...

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

int main(void)
{
    double angle;
    char s[256];
    char *endptr;

    fgets(s, sizeof s, stdin);
    errno = 0;
    angle = strtod(s, &endptr);
    if (errno != 0 || *endptr != '\n')
    {
        fputs("入力値が不正\n", stderr);
        return EXIT_FAILURE;
    }
    printf("sin(%g) = %g cos(%g) = %g\n", angle, sin(angle), angle, cos(angle));
    return EXIT_SUCCESS;
}

これでよいのでは?(テストしていませんが...)


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

Name: fatens  ..上級者(17,309ポイント)   Date: 2010/08/03(火) 09:52   No:58014     
Title: Re:三角比    
math.hのsin関数, cos関数で角度に応じたそれぞれの値を求めることができます。
角度の単位はラジアンなので注意してください。


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

Name: ぜらーちん  ..初心者(5,887ポイント)   Date: 2010/08/03(火) 09:53   No:58015     
Title: Re:三角比    
(゜д゜)ァ…
三角形何で、入力するなら三回必要でしたね


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

Name: ぜらーちん  ..初心者(5,934ポイント)   Date: 2010/08/03(火) 09:56   No:58016     
Title: Re:三角比    
そういえばmath.h何てありましたね(*'д'*)
自分で求めるよりは、関数使った方が楽でした。すみません


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

Name: 1617  ..ぴよぴよ(40ポイント)   Date: 2010/08/03(火) 10:54   No:58019 解決!     
Title: Re:三角比    
みなさんありがとうございました。

解決しました。


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

Name: たかぎ [URL]  ..ハッカー(217,101ポイント)   Date: 2010/08/03(火) 11:11   No:58020     
Title: Re:三角比    
> 解決しました。

本当ですか?


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



Name: フェノン  ..ぴよぴよ(98ポイント)   Date: 2010/07/30(金) 23:28   No:57832       
Title: バウンド処理がわかりません    
頻繁にお世話になっています。
今回、弾をバウンドさせようとと思うのですが、
うまくいきません。
ソースか、アルゴだけでもと思い、探したりしましたが、なかなか見当たりません。
もしよければ、教えていただけませんか?
お願いします。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,243,361ポイント)   Date: 2010/07/30(金) 23:33   No:57834     
Title: Re:バウンド処理がわかりません    
> フェノンさん

こんにちは。
何で作っていますか?DXライブラリでしょうか?
バウンドといってもどのようにバウンドするのかが解らないので、明確には答えられませんが、
館にサンプルがあるのでよければ参考にして下さい。

http://dixq.net/g/32.html


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

Name: フェノン  ..ぴよぴよ(609ポイント)   Date: 2010/07/31(土) 18:49   No:57887     
Title: Re:バウンド処理がわかりません    
ありがとうございます。
C言語で制作しているのですが、うまくいかなくて・・
あと、DXライブラリとはなんですか?
冒頭で出てきていましたが、学校ではまだ出てきていませんので、
よく、わからないのですが・・・
よければ、詳しく知りたいのですが・・・
とりあえずは、バウンス処理をお願いします。
えっと、ブロック崩しのように思ったのですが、
うまくいきません。念のため、ソースを置いておきます。

また、学校のオリジナルの関数などがありますので、わからないところがあれば、
お答えします。

以下ソース

#include <conio.h>
#include "dglib.h"

char_far gvram;

main()
{

int x=160,y=150;
int vx=1,vy=1;

do{
    dg_gcls(gvram,0);

    if(getch3('E')==1){break;}   /*終了*/

    if(x<0){
        vx=1;
    }else if(y<0){
        vy=1;
    }else if(x>=320){
        vx=-1;
    }else if(y>=200){
        vy=-1;
}

x=x+vx;
y=y+vy;

/*四角を描画*/

dg_box(gvram,x,y,4,4,1,2);

/*座標表示*/
dg_printf(160,0,15,"x:%3d,y:%3d",x,y);

Sleep(30);
ML();  /*ウェイト*/
    

}while(1);
}

よろしくお願いします。


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

Name: DecentLove  ..中級者(10,586ポイント)   Date: 2010/07/31(土) 23:03   No:57899     
Title: Re:バウンド処理がわかりません    
 DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。(使用する際はC言語の知識だけで大丈夫です)
↑まんま公式サイトに書いてあったことです。
たぶん、学校で習うことはないと思いますし、関数の使い方なども親切にサイトの方に書かれていますので機会があれば使ってみてもいいと思います。
http://homepage2.nifty.com/natupaji/DxLib/index.html

すみません、僕も勉強中の身なのでバランス処理などはわかりません。ごめんなさい。


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

Name: フェノン  ..ぴよぴよ(673ポイント)   Date: 2010/08/01(日) 00:52   No:57909     
Title: Re:バウンド処理がわかりません    
ありがとうございます。
とりあえず、DXライブラリの説明は呼んだのですが、
C言語じゃあ、使えないし、どうすればいいのかな?と、
悩んでいたところです。
う〜ん、cで何とかなればと思いましたが・・・
またの機会に、ありがとうございます。


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

Name: EX  ..ぴよぴよ(658ポイント)   Date: 2010/08/02(月) 14:20   No:57979     
Title: Re:バウンド処理がわかりません    
簡単なバウンス処理なら、意外と簡単にできます。
ただ、ブロック崩しのような、ちょっと複雑な場合は工夫が要ります。
アルゴリズムでいえば、

int speed=5;
まず何でもいいから変数を用意し、数字を入れる。
弾の座標X-=speed; 弾の座標Y-=speed;
↑で弾を斜めに動かす。speed=5なので、各々5ピクセルずつ動く。  
if( 弾の座標X<=0 ) speed*=-1;

↑で、弾の座標Xが0以下に(つまり画面端)になったら、speedに-1をかけることで、speedが-5となり、
結果的に 弾の座標X-(-5) = 弾の座標X+5 になる。
絵で言えば、 

|   ↗   
|/
|\
|   ↖

こんな感じかな?


説明するのは得意じゃないんです・・・
ともかく、数字ではなく変数を使用し、バウンドさせる時に、変数に-1をかけることがミソとなります。


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

Name: ISLe  ..中級者(10,226ポイント)   Date: 2010/08/02(月) 17:13   No:57982     
Title: Re:バウンド処理がわかりません    
「うまくいかない」ではなくてどういう動作を期待していて実際にはどういう動作になっているかを具体的に書きましょう。

ボールの大きさが4x4ピクセルあるようですが画面の左と下ではボールがはみ出しますね。

画面の四隅ではXY座標同時にはみ出す可能性があるので、if文をX座標の分とY座標の分は分ける(elseで繋げない)ほうが良いと思います。

とは言えプログラムソースを見た限りでは「うまくいってる」と思います。


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

Name: フェノ  ..ぴよぴよ(309ポイント)   Date: 2010/08/03(火) 01:28   No:58002     
Title: Re:バウンド処理がわかりません    
色々お答えありがとうございます。
とりあえず、アドバイスを含めてまとめます。

希望する実行結果

4×4の四角が画面内でバウンスさせるプログラム

イメージ図

 --------------------
|                ┏ |
|                  ┏|
|                  ┓|
|     ■         ┓  |
|       ┛     ┓    |
|         ┛ ┓      |
  --------------------

実際の結果(現在)

 --------------------
|                  |
|┏                 |
|  ┏   ウロウロ   |
|     ■            |
|       ┛          |
|         ┛        |
  --------------------

EXさんや、ISLeさんからアドバイスを頂いた通りにするとかなり形になってきました。
もう少し頑張ってみます。
また、アドバイスや至らぬ点、等ございましたら、よろしくお願いします。


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

Name: フェノン  ..ぴよぴよ(795ポイント)   Date: 2010/08/03(火) 02:08   No:58007 解決!     
Title: Re:バウンド処理がわかりません    
ありがとうございます。
なんとかできました。
お世話になりました。また、機会があればお世話になると思いますが、
お願いします。


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



Name: ねんどじん  ..初心者(7,955ポイント)   Date: 2010/08/02(月) 20:49   No:57992       
Title: 【雑談程度の相談】雪の降ってくる弾幕    
雪がどんどん降ってきて、だんだんつもっていく(だんだん地平線が下から迫ってくる)
弾幕を作ってみたんですが、弾を画面に残すので当然だんだんと処理が重くなるんですよね・・
降ってからしばらくした弾は確率で消すようにしてみたんですが、なんか画面上の雪が
突然ぱっと消えるってのも変な感じだなとおもいまして。
なにか処理速度を維持しやすい方法ってありますか?
龍神録と同じ形式で作っています


void boss_shot_bulletI007(){  //雪の積もる弾幕
#define TM007 6 //6カウントに一回、「地平線」を1上に
    int i,k,t=boss_shot.cnt,t2=boss_shot.cnt%TM007;
    static double landline=520;//「地平線」の初期高さ

    if(bom.flag!=0)
        landline=520;//ボムが撃たれたら「地平線」を元に戻す

    if(t%180==0) //3秒に一回ボスの移動
        move_boss_pos(50,50,FMX-50,150,100,60);

    if(t>=0&&t%1==0){//常に雪を降らせる
        int j=t%2==0?7:8;//弾の形
        int l=t%2==0?9:8;//弾の色
        if((k=search_boss_shot())!=-1){
            boss_shot.bullet[k].flag=1;
            boss_shot.bullet[k].knd=j;//弾の形
            boss_shot.bullet[k].cnt=0;
            boss_shot.bullet[k].col=l;//弾の色
            boss_shot.bullet[k].x=GetRand(384)+rang(0.5);//x座標は画面全体にわたって
            boss_shot.bullet[k].y=-30;         //画面端の少し↑から降ってくる
            boss_shot.bullet[k].angle=PI/2+rang(PI/9);//だいたいまっすぐ降ってくる
            boss_shot.bullet[k].spd=2-rang(1);//ゆっくり降ってくる
        }
    }
    
    for(i=0;i<BOSS_BULLET_MAX;i++){//雪が「地平線」よりちょっと下なら
        if(boss_shot.bullet[i].y>landline)
            boss_shot.bullet[i].spd=0;//雪の降下を止める
                //降ってある程度たった弾は確率で消す
        if(boss_shot.bullet[i].spd==0&&boss_shot.bullet[i].cnt>=300&&GetRand(2000)==0)
            boss_shot.bullet[i].flag=0;
    }
    if(t2==0)
        landline--;//「地平線」をあげていく
}

同じような弾幕を知っていたら参考にしたいので教えてくださると助かります


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,244,543ポイント)   Date: 2010/08/02(月) 22:40   No:57994     
Title: Re:【雑談程度の相談】雪の降ってくる弾幕    
面白い発想の弾幕ですね。
ただ、次第に降り積もった雪が穴あき状態になるのはいいのでしょうか?
被弾した後、出現した時八方ふさがりになることもあるようです。

何か大きな弾を発射して、大きな弾が通った所は降り積もった雪が消えるような演出にしてみてはどうでしょう。
逃げ道も確保でき、描画すべき弾も減るように思います。

また、突然消えるとちょっとやすっぽいのでフワっと消えるようにしてみてはどうでしょう?
弾に

int Alpha;

なるものを持たせておき、Alphaには通常255を入れておきます。
255ではない値がセットしてある時だけ、描画するときに

SetDrawBlendModeでアルファブレンドするようにしてみてはどうでしょう?
消えるとき、Alphaを255→0にしてやればフワッと消えるように見えると思います。

後降り積もるときはもうちょっとぎっしりつめたほうがよくないですかね?


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

Name: ねんどじん  ..初心者(8,230ポイント)   Date: 2010/08/02(月) 23:26   No:57995     
Title: Re:【雑談程度の相談】雪の降ってくる弾幕    
>>Dixqさん

こんばんは。助言ありがとうございます。

なるほど、降り積もった雪を別の弾で消すっていう発想はなかったです。
おもしろくなりそうなので実装させていただきます。

ぎっしり降り積もらせるとますます弾が多くなっちゃうんですよね・・もう少し大きめの弾を使うなどして
調整して、弾消しの量も考えていきたいと思います。

ブレンドモードについては詳しく知りませんでした。結構種類があるんですね。色々試してみたいと思います。
雪が積もってる感だすにはまだまだ調整が必要みたいです。がんばってみます。


解決にするまで一応、もうちょっとだけ時間をあけます。コメントをおまちしています!


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,244,746ポイント)   Date: 2010/08/02(月) 23:43   No:57997     
Title: Re:【雑談程度の相談】雪の降ってくる弾幕    
画面いっぱいになるほど降らせても仕方がないので、ある程度でストップすればいいのではないでしょうか?

また、一番大きい弾を加算ブレンドしてみるのもよいかもしれません。
加算はするほど白になります。

大玉が重なった瞬間は反魂蝶でも見られます。
http://www.nicovideo.jp/watch/sm4010061

後、私もいつか作ってみたいと思っている弾幕のアイディアなのですが、
物理演算もどきで計算してみてはどうでしょう。
弾をけしたら上にある弾は落ちないとおかしいですよね。

物理演算っぽく降り積もれば結構良い見栄えになりそうです。
計算は難しいかもしれませんが・・。


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

Name: ねんどじん  ..初心者(8,283ポイント)   Date: 2010/08/03(火) 01:42   No:58003     
Title: Re:【雑談程度の相談】雪の降ってくる弾幕    
>>Dixqさん

物理・・演算・・・
苦手ですがいつか本格的にやってみたいと思います。
いろいろとアイディアをありがとうございました。
これでこの質問は解決にします。


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

Name: ねんどじん  ..初心者(8,293ポイント)   Date: 2010/08/03(火) 01:43   No:58004 解決!     
Title: Re:【雑談程度の相談】雪の降ってくる弾幕    
おっと、解決マークを忘れていました


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



Name: COUTION  ..ぴよぴよ(547ポイント)   Date: 2010/08/02(月) 17:06   No:57981       
Title: ファイルの読み込み    
はじめまして
ライブラリはDXライブラリで
VC++2010を使ってます
txtファイルを読みこんでint型の配列に入れてゲームのマップを作ろうとしてるんですか
intの変数にtxtの数字をうまく入れられません。
int map[5][5]={
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,1,1,1,1},
};
このような事をファイルから読み込みたいんですがうまくできません

int FileHandle, y ,map ;

// test.txt を開く
FileHandle = FileRead_open( "test.txt" ) ;

// 表示Y座標の初期化
y = 0 ;

// ファイルの終端が来るまで表示する
while( FileRead_eof( FileHandle ) == 0 )
{
    // 一文字読む
    map = FileRead_getc( FileHandle ) ;

    // 画面に描画
    DrawFormatString( 0, y , GetColor( 255,255,255 ) , "%d" , map) ;

    // 表示Y座標を下にずらす
    y += 16 ;
}

// ファイルを閉じる
FileRead_close( FileHandle ) ;


---test.txtの中身----
10001
10001
10001
10001
11111
---------------------

これでためしに表示してみたんですが
49
48
48
48
49
・・・
(以下略)
みたいになります
1
0
0
0
1
みたいになれば配列に入れてやろうと思ったんですが・・・
どうすればいいでしょうか?
説明下手ですいません 編集済み


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


Name: お豆  ..ぴよぴよ(329ポイント)   Date: 2010/08/02(月) 18:02   No:57986     
Title: Re:ファイルの読み込み    
確認できる環境にいないので、質問になってしまいますが
31じゃなくて49になるんですか?
---2010_8_2 19:49--------------------
(追記)そういえば10進数は49でしたね、解決方法は出てたみたいなので、追記編集としました

プログラムの雰囲気からして、文字'1'(31)をmap変数に入れて、それを整数値として
出力しているように見えますけど 編集済み


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

Name: COUTION  ..ぴよぴよ(633ポイント)   Date: 2010/08/02(月) 18:11   No:57987     
Title: Re:ファイルの読み込み    
0は48、1は49、2は50って感じです

>プログラムの雰囲気からして、文字'1'(31)をmap変数に入れて、それを整数値として 
>出力しているように見えますけど

多分そうです
文字'1'を整数値の1にするやり方が分からなくて
どうしたらいいでしょうか?


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

Name: toyo  ..熟練のプログラマー(55,025ポイント)   Date: 2010/08/02(月) 18:18   No:57988     
Title: Re:ファイルの読み込み    
48を0にしたいのですから48を引けばいいのではないでしょうか
map = FileRead_getc( FileHandle ) - 48;
または
map = FileRead_getc( FileHandle ) - '0';
のような書き方もよく見ます


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

Name: COUTION  ..ぴよぴよ(634ポイント)   Date: 2010/08/02(月) 18:52   No:57991 解決!     
Title: Re:ファイルの読み込み    
なるほど!
そういう考えは思いつきませんでしたw
これで出来そうです!
お豆さんtoyoさんありがとうございました!
解決しておきますが何か他にも良いやり方などありましたら教えてくれるとありがたいです


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

Name: nanashi  ..ぴよぴよ(598ポイント)   Date: 2010/08/03(火) 00:02   No:57998     
Title: Re:ファイルの読み込み    
FILE    *pFile = NULL;
int    data;
int    array[5][5];
if( ( pFile = fopen( test.txt, "r" ) ) != NULL ){
    for( int y = 0; y < MAP_Y; y ++ ){
        for( int x = 0; x < MAP_X * MAP_MAX; x ++ ){
            fscanf( pFile, "%d", &data );
            array[5][5][ y ][ x ] = data;
        }
    }
}else{
    printf("読み込めない\n");
}

fclose( pFile );

---test.txtの中身----
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 1 1 1 1
---------------------
これはどうでしょうか?



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

Name: COUTION  ..ぴよぴよ(654ポイント)   Date: 2010/08/03(火) 00:31   No:57999     
Title: Re:ファイルの読み込み    
出来ました!w
nanashiさん
ありがとうございました!


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



Name: jay  ..上級者(20,046ポイント)   Date: 2010/08/01(日) 12:23   No:57923       
Title: 修正版できました    
ちょうど一週間前に公開したSTGの修正版をアップしました。
以下のURL先よりDLして下さい
容量はおよそ55MBです

http://www1.axfc.net/uploader/O/so/131464

キーワード
night


ただ単に弾幕STGで遊ぶだけの内容なので「弾幕遊戯」と安直に名づけました
(いいのか、そんなんで)

修正点は以下の通りです
(ほぼみなさんに指摘して頂いた所を直しただけです)

・コンパイルするDXライブラリのバージョンを”3.03”にしました

・デバッグビルドではなくリリースビルドにしました

・アイコンを付けて、ファイル名も変えました
 ついでにフレームも作りました

・Log.txtが出て来ないようにしました

・ゲームバランスを修正しました(全部説明すると長いので詳細は省略)

・ファイル構成を手直ししました


以上です



練習用チュートリアルステージ+メインゲーム5ステージ+やたら難しいEXステージ
という構成になっています。

素材はほとんどフリーのものを使用しています。


今後の参考にしたので、感想や意見など頂けたら嬉しいです。 編集済み


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


Name: ぬるぽ  ..入門者(4,321ポイント)   Date: 2010/08/01(日) 13:26   No:57925     
Title: Re:修正版できました    
制作お疲れさまでした。

タイトルの「弾幕遊戯」に関する余談ですが、
ちょうど1年前くらい前に御津凪さんが
制作したゲーム「弾幕避遊戯」を思い出してしまいました。


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

Name: 白い時空  ..入門者(4,187ポイント)   Date: 2010/08/01(日) 15:15   No:57930     
Title: Re:修正版できました    
STG制作お疲れ様です。
さっそくやらせていただきました。良く出来ていて楽しかったですよ。

修正前のEXはパワーが増えず、難しかったですが、修正後のEXはパワーが減りづらくなったので、少し簡単になっていてクリアすることができました。EXのボスを、ボムを打っている間無敵にしてみるのもいいかもしれません。

えっと、修正してほしい箇所が少しあったので、挙げていくと
・「CLEAR BONUS」が「CREAL BONUS」になっている。
・自機のオプション4つの内、2つから弾が何も出ていない気がする。
・起動直後、EXステージを選ぶと自機のオプション2つが描画されていない。
こんなところでしょうか。 編集済み


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

Name: jay  ..上級者(19,788ポイント)   Date: 2010/08/01(日) 18:23   No:57938     
Title: Re:修正版できました    
>ぬるぽさん
まぁ、こんな安直なタイトルですしw
なにも不思議はないですねww

ちょっと興味がありますが、流石にアップローダーにも残っていないでしょうね・・・。


>白い時空さん
ご指摘ありがとうございます。
時間的にも気力的にもこれ以上の修正は無理そうなので、しっかり参考にさせていただきますね。
でも英単語のスペルミスとか情けないにも程がある・・・。

ゲームプログラミングについてもっと勉強したら、またいつか弾幕STGを作ろうと思っているので
その時にはもっとクオリティ上げられるように頑張りますね。


楽しんでくださってありがとうございました。 編集済み


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

Name: 御津凪 [URL]  ..ハッカー(146,742ポイント)   Date: 2010/08/01(日) 18:46   No:57941     
Title: Re:修正版できました    
> jay さん
> ちょっと興味がありますが、流石にアップローダーにっも残っていないでしょうね・・・。

うちのサイトに置いてますよ。よかったらどうぞ。
http://mitsunagistudio.aki.gs/software/bgstg

一応当時の記事へのリンクも載せておきますね。
http://www.play21.jp/board/formz.cgi?action=res&resno=38641&page=&lognum=118&id=dixq&rln=38736

(ちょっと懐かしいなと思ったり)


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

Name: シエル  ..プログラマー(39,247ポイント)   Date: 2010/08/01(日) 18:50   No:57943     
Title: Re:修正版できました    
さっきやってみたんですが、画面が戻るたびにメモリ使用量増大していきませんか?
いつかパンクしますよ。
前回アップされたときも同じ現象を指摘されていたと思いますが。


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

Name: jay  ..上級者(19,862ポイント)   Date: 2010/08/01(日) 20:39   No:57948     
Title: Re:修正版できました    
>御津凪さん

おお!
ありがとうございます。

時間がある時にじっくり遊ばせてもらいます。
とりあえずは今すぐDL


>シエルさん
指摘を受けましたので、これが原因かな?
と思った部分をいくつか手直ししたのですが、改善されていなかったようですね。
申し訳ないです。

その辺りももっと勉強してきます。


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

Name: Tatu  ..熟練のプログラマー(43,249ポイント)   Date: 2010/08/01(日) 23:57   No:57956     
Title: Re:修正版できました    
制作お疲れ様でした。

EXステージクリアしました。トラウマはやっぱりあのキャラですか。
自機が四聖龍神録のアイシャなのに龍神録のスペルがないとは。
あと、「月のいはかさの呪い」(下までいったナイフが赤くなって戻ってくるスペル)
の体力が低い気がしました。

チュートリアルに操作説明があるかと思っていたのですがありませんでした。
難易度を見てもこのステージはチュートリアルというよりは体験版ステージといった方がよいようなきがします。


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

Name: jay  ..上級者(20,266ポイント)   Date: 2010/08/02(月) 11:35   No:57974     
Title: Re:修正版できました    
>Tatuさん
楽しんで下さってありがとうございます。
”トラウマ”と言えばあのキャラ・・・、と言うよりほとんどただの悪乗りですけどねww

チュートリアルはテストプレイの段階でなぜかステージ1より難しくなってしまったので、あれでもかなり難易度を落としたんのですけれどね。
やはりバランス調整は難しいものですね。
これも経験として、次以降に活かしていきますね。

ご意見ありがとうございます。


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

Name: Tororo  ..中級者(9,431ポイント)   Date: 2010/08/02(月) 12:53   No:57976     
Title: Re:修正版できました    
これをフルスクリーンでプレイする方法ってありますかね^^;
少し今の画面だと避けづらいような・・


でも、面白かったですよ!
続編(勝手に)期待していますww


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

Name: jay  ..上級者(20,406ポイント)   Date: 2010/08/02(月) 17:52   No:57985     
Title: フルスクリーン版もあります    
>Tororoさん
プレイヤーが好みに合わせてフルスクリーンかウインドウか選べればいいのですけれどね
今の僕には無理ですww

と言う訳で下記URLよりフルスクリーン版がDLできます
キーワードは上と同じです
よろしければどうぞ

http://www1.axfc.net/uploader/O/so/131600


続編はいつか作ってみたいですね・・・。
そのためにもゲームプログラミングと言うものをもっと勉強してきます。


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



Name: ねんどじん  ..初心者(7,257ポイント)   Date: 2010/08/01(日) 23:29   No:57952       
Title: 無題    
もう3度目になりますがよければ指摘をください。

東方の二時創作STGをつくり途中(まだ骨組みすらできてない)なのですが、
ほかの部分は支障なく動くのに、低速時の自機あたり判定だけが表示できないので
困っています。

作業工程が「龍神録プログラミングの館」で学んだのとほぼ同じですので
それで説明しますと、
img_chetc[10]を宣言し、そこに
img_chetc[0]=LoadGraph("../dat/img/char/atari.png");(パスは確認しました)
として画像の場所をいれ、DrawRotaGraphFで描画しています。

画像の場所を入れる変数を作り、そこにLoadGraphで場所を入れ、
毎ループに一回、低速ボタンが押されているかチェックして描画する・・・
これでいけると思ったのですが、どうにも描画されている気がしません。

あと、なぜだかさっぱりなのですが、img_chetc配列の[10]を[1]に変えてみたところ、
自機ショットまでもがなぜか描画されなくなってしまいました。配列の数を[10]に
直すと、また描画されるのですが・・
ちなみに、自機ショットの場所はimg_chetcではなく、別の変数に入っています。

説明下手ですがよろしくお願いします。


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


Name: シエル  ..プログラマー(39,414ポイント)   Date: 2010/08/01(日) 23:33   No:57954     
Title: Re:無題    
これだけじゃ厳しいかと。コードを提示した方がいいのでは?

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

Name: ねんどじん  ..初心者(7,397ポイント)   Date: 2010/08/01(日) 23:53   No:57955     
Title: Re:無題    
ご指摘ごもっともでしたので、今できてるところまでをアップしました。

 http://www.dotup.org/uploda/www.dotup.org1067363.zip.html

パスワードは stg です。

*作成が間に合っていない素材は現在、龍神録プログラミングの館で配布されているものを
そのままだったりちょっといじくったりして代用しています。
*ボムはうたないで!(自分の画力的な意味で)。。別に何もないですが。


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

Name: DVDM [URL]  ..熟練のプログラマー(55,831ポイント)   Date: 2010/08/02(月) 13:46   No:57978     
Title: Re:無題    
>>ねんどじんさん
ソース拝見させて頂きました。
img_chetc[0] に atari.png を読み込めてはいたのですが
どこかのタイミングで img_chetc[0] の中身が 0 になっていました。

ブレークポイントを設定して調べてみると ini() 関数内での memset に原因があるようでした。

ねんどじんさんのお書きになったソースでは
memset(del_effect, 0, sizeof(del_effect)*DEL_EFFECT_MAX);

のようになっていたのですが、
memset(del_effect, 0, sizeof(del_effect_t)*DEL_EFFECT_MAX);

もしくは、
memset(del_effect, 0, sizeof(del_effect));

とすれば、こちらでは低速移動中に当たり判定用の画像が表示されました。


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

Name: ねんどじん  ..初心者(7,236ポイント)   Date: 2010/08/02(月) 17:50   No:57984 解決!     
Title: Re:無題    
>>DVDMさん

一式見てくれなんて無茶な頼みにもかかわらずありがとうございました!
初期化時に本来、dell_effectのサイズ分初期化するところを、
そのDEL_EFFECT_MAX倍のメモリに0を入れてしまって、img_chetc[0]にも0が
入ってしまったんですね。
自分の確認が甘かったです。ご指摘の通りにやってみると、確かに
あたり判定が表示されました。
メモリがどうなってるかまだ詳しく知らないので、大変勉強になりました。
今後ともよろしくお願いします。


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



Name: かぶと  ..ぴよぴよ(989ポイント)   Date: 2010/08/02(月) 06:26   No:57959       
Title: C++の変数のスコープについて    
C++の構造体やクラスなどの変数のスコープは
どれがどこからどこまで何でしょうか。
結局あれから探しましたが
詳しく載っているサイトが見つからなかったので
解説された講座サイトなどはありますか?


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


Name: 山崎  ..熟練のプログラマー(46,194ポイント)   Date: 2010/08/02(月) 08:01   No:57962     
Title: Re:C++の変数のスコープについて    
おはようございます。

私がひいきにさせて頂いているこちらのサイトなどはいかがでしょうか。
変数のスコープ
http://www.geocities.jp/ky_webid/c/022.html
上のアドレスのホームはいかになります(正確には違いますけど)。
http://www.geocities.jp/ky_webid/index_old.html

変数のスコープに関する説明は、いろんなサイトでなされているような気が私にはします。
もし巷の解説サイトに載っていないような、本当に詳しい説明を求めていらっしゃるのであれば、
具体的に質問したほうがいいかもしれません。

あと、「結局あれから」とありますが、
申し訳ないですがそれがいつなのか存じ上げないで回答させていただいております ^^;


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

Name: かぶと  ..かけだし(1,038ポイント)   Date: 2010/08/02(月) 08:30   No:57963     
Title: Re:C++の変数のスコープについて    
>山崎さん

回答どうもありがとうございます。
説明足らずで申し訳ありませんでした。
僕が知りたい事を詳しく書きます。

1つのファイルにまとめて書く方法なら
クラスも構造体も全てが上手く書けるのですが
分割コンパイルをすると、エラーが
たくさん出てしまいます。

それで、分割コンパイルをした場合は
変数や構造体、クラスの扱いは
どう言う風にしたら良いのかと言う事でした。

C言語でのローカル変数、グローバル変数の扱いは
良く分かるのですが、C++では良く分かりません。


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

Name: たかぎ [URL]  ..ハッカー(216,731ポイント)   Date: 2010/08/02(月) 08:53   No:57966     
Title: Re:C++の変数のスコープについて    
> C言語でのローカル変数、グローバル変数の扱いは 
> 良く分かるのですが、C++では良く分かりません。

では、Cでの有効範囲について説明してみてください。
その上で、違いを説明するほうがわかりやすいでしょうから。


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

Name: かぶと  ..かけだし(1,115ポイント)   Date: 2010/08/02(月) 09:13   No:57967     
Title: Re:C++の変数のスコープについて    
■グローバル変数

関数外で定義されて
プログラムが始まって終わるまで有効


■ローカル変数

関数内で定義されて関数内で消滅


ですかね。


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

Name: シエル  ..プログラマー(39,445ポイント)   Date: 2010/08/02(月) 09:17   No:57968     
Title: Re:C++の変数のスコープについて    
それってスコープの有効範囲じゃないんじゃ・・・

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

Name: たかぎ [URL]  ..ハッカー(216,788ポイント)   Date: 2010/08/02(月) 09:38   No:57969     
Title: Re:C++の変数のスコープについて    
有効範囲と生存期間の区別がついていないようですね。
そもそも、本当に知りたいのはどちらだったのでしょうか?


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

Name: お豆  ..ぴよぴよ(269ポイント)   Date: 2010/08/02(月) 14:34   No:57980     
Title: Re:C++の変数のスコープについて    
ひょっとして、共通ヘッダの書き方が知りたいのかな?
Cは分かっているということなので、クラスだけ
ttp://www.asahi-net.or.jp/~wv7y-kmr/memo/old/cpp_cls.html


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



Name: AMU  ..ぴよぴよ(276ポイント)   Date: 2010/08/02(月) 00:24   No:57957       
Title: 12章    
龍神録プログラミングの館12章についてなんですけど、
//ゲームの初期化
void ini(){
        stage_count=1;
        memset(&ch,0,sizeof(ch_t));//自機データの初期化
        ch.x=FIELD_MAX_X/2;
        ch.y=FIELD_MAX_Y*3/4;
        memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);//敵データの初期化
}

この部分がよくわかりません。
memsetを調べてみたんですがstring.hが必要なのにGV.hにもどこにも書かれていません。
DXライブラリにmemsetは用意されているのですか?

sizeof は調べてみましたが理解しづらかったです。

短い期間になんどもすみません。


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


Name: ookami  ..プログラマー(37,887ポイント)   Date: 2010/08/02(月) 09:44   No:57970     
Title: Re:12章    
疑問点は、「memsetはどこで宣言されているか?」でいいのでしょうか??

私の環境では、
string.h に
        void *  __cdecl memset(__out_bcount_full_opt(_Size) void * _Dst, __in int _Val, __in size_t _Size);
のように宣言されています。

dxlib.hの中に、
#include <windows.h>
とありますから、
たしか windows.h の中で #include <string.h> していたと思います。

sizeof は、型のサイズを返す演算子です。


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

Name: AMU  ..ぴよぴよ(354ポイント)   Date: 2010/08/02(月) 10:27   No:57971     
Title: Re:12章    
DxLib.hを見てみたらwindows.hが見つかりました。ありがとうございます。
もう一つ質問ですが
memset(&ch,0,sizeof(ch_t));//自機データの初期化 
の&chとはなんなのでしょうか


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

Name: toyo  ..熟練のプログラマー(54,950ポイント)   Date: 2010/08/02(月) 10:39   No:57972     
Title: Re:12章    
memsetの第1引数の型は void* でポインタ型です
chが何型かは不明ですが & を付けることでポインタ型となります


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



Name: シエル  ..プログラマー(38,728ポイント)   Date: 2010/08/01(日) 17:14   No:57932       
Title: 外部データ(画像、音楽等)の読み込みについて    
いつもお世話になっております。

今回は画像や音楽データなどの外部データの読み込みについてお聞きしたいことがあります。

ゲームなどを配布する際、画像データなどの外部データも一緒に配布する必要があると
思いますが、そのままフォルダごと配布してしまったら、盗まれたり利用されてしまう可能性が
あると思います。
なので別の形で配布して読み込めるようにしたいと思っています。

DXライブラリは圧縮したデータを読み込める専用の関数があると思いますが、
私はWindowsAPIとDirectXで開発を行っています。

実行ファイルのリソースに直接取り込ませようとも思いましたが、
実行ファイルのサイズが大きくなりすぎてしまいます。
また、リソースのみのDLLを作成することも考えましたが、BMPやWAVEファイルはリソースとして
登録できても、その他のPNG形式の画像などは、私が調べる限り登録できないようでした。

一般的には外部データはどのような状態で配布し、読み込み等を行っているのでしょうか?
まずは簡単な回答でかまいません。
その回答からまた質問を広げさせていただきます。

よろしくお願い致します!


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


Name: TowaK  ..ぴよぴよ(422ポイント)   Date: 2010/08/01(日) 17:32   No:57934     
Title: Re:外部データ(画像、音楽等)の読み込みについて    
拡張子の変更とかではダメなのですか?
PNGはgrpにしてみるとか……。


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

Name: Justy  ..伝説なるハッカー(560,822ポイント)   Date: 2010/08/01(日) 18:23   No:57939     
Title: Re:外部データ(画像、音楽等)の読み込みについて    
>DLL
>その他のPNG形式の画像などは、私が調べる限り登録できないようでした
 そんなことはないはずです。
 普通に PNGだろうが JPGだろうがカスタムリソース扱いで登録できます。

 もし仮に環境とかツールの都合でリソース扱い出来なかったとしたら
DLL側のソースコードにCの配列にして埋め込むことはできるのでなんとでもなるかと。



>一般的には外部データはどのような状態で配布し、読み込み等を行っているのでしょうか? 
 素のままで配布するものもありますし、リソースに登録して exeなり dll内に
埋め込んでいるものもありますけど、ゲームだとその会社や製品独自の或いはミドルウェア等が
提供しているツールを使って複数のファイルをパック(アーカイブ)していることが多いですね。

 必要ならその段階で圧縮・暗号化もしています。
 細かいところは違いますけど、やっていることはDXライブラリのアーカイバとほとんど同じです。

 ただどういう単位でパックしているかはそれぞれです。
 カテゴリ毎にまとめたり、全てを1つにまとめていたり。


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

Name: シエル  ..プログラマー(39,194ポイント)   Date: 2010/08/01(日) 18:49   No:57942     
Title: Re:外部データ(画像、音楽等)の読み込みについて    
>そんなことはないはずです。 
>普通に PNGだろうが JPGだろうがカスタムリソース扱いで登録できます。 
>もし仮に環境とかツールの都合でリソース扱い出来なかったとしたら 
>DLL側のソースコードにCの配列にして埋め込むことはできるのでなんとでもなるかと。

カスタムリソースの存在を知りませんでした。すいません。勉強します。
が、あまりリソースで埋め込むことは考えていません。

>素のままで配布するものもありますし、リソースに登録して exeなり dll内に 
>埋め込んでいるものもありますけど、ゲームだとその会社や製品独自の或いはミドルウェア等が 
>提供しているツールを使って複数のファイルをパック(アーカイブ)していることが多いですね。 
>必要ならその段階で圧縮・暗号化もしています。 
>細かいところは違いますけど、やっていることはDXライブラリのアーカイバとほとんど同じです。 
>ただどういう単位でパックしているかはそれぞれです。 
>カテゴリ毎にまとめたり、全てを1つにまとめていたり。

できれば、勉強のため、アーカイブで対応してみたいです。
DXライブラリはどのようにアーカイブしているのか、簡単に説明していただけますでしょうか?


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

Name: ぬるぽ  ..入門者(4,333ポイント)   Date: 2010/08/01(日) 19:04   No:57944     
Title: Re:外部データ(画像、音楽等)の読み込みについて    
>DXライブラリはどのようにアーカイブしているのか、簡単に説明していただけますでしょうか?

下記のURLより、DXライブラリをダウンロードし、
http://homepage2.nifty.com/natupaji/DxLib/dxdload.html

Tool/DXArchive/Sourceの中にDXアーカイブの
DxaEncode.exe や DxaDecode.exe のプログラムソースが入っています。
参考にしてみてはいかがでしょうか。


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

Name: シエル  ..プログラマー(39,265ポイント)   Date: 2010/08/01(日) 19:09   No:57945     
Title: Re:外部データ(画像、音楽等)の読み込みについて    
ぬるぽさん!ありがとうございます。見てみます!

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

Name: シエル  ..プログラマー(39,385ポイント)   Date: 2010/08/01(日) 23:31   No:57953     
Title: Re:外部データ(画像、音楽等)の読み込みについて    
すいません。色々調べてたんですが、
アーカイブの作り方って、fopen等で読み込んだデータを
他の一つのファイルにfwriteで書きだすっていうイメージでいいでしょうか?
後から読み出しやすくするために、書き込むときに目印等を付けておく必要がありそうですけど。


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

Name: Justy  ..伝説なるハッカー(561,046ポイント)   Date: 2010/08/02(月) 00:30   No:57958     
Title: Re:外部データ(画像、音楽等)の読み込みについて    
>アーカイブの作り方って、fopen等で読み込んだデータを 
>他の一つのファイルにfwriteで書きだすっていうイメージでいいでしょうか? 
 そんな感じです。


>後から読み出しやすくするために、書き込むときに目印等を付けておく必要がありそうですけど
 そうですね。
 DXArchive.hでいうと DARC_FILEHEAD構造体がそれを担当しており、このヘッダを読み取って
実データが存在する場所を探しにいきます。



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

Name: シエル  ..プログラマー(39,461ポイント)   Date: 2010/08/02(月) 08:41   No:57964 解決!     
Title: Re:外部データ(画像、音楽等)の読み込みについて    
Justyさん!ありがとうございます!

イメージ掴めたので、後は何とか一人でやってみます!

これにて解決いたします!


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



Name: BRACK PENIKX  ..かけだし(1,011ポイント)   Date: 2010/08/01(日) 22:17   No:57949       
Title: 龍神録60章    
たびたびすみません・・・・

stage_countが2900になったらBGMを止めたいのですがどうすればよいでしょう・・・


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


Name: ねんどじん  ..初心者(6,961ポイント)   Date: 2010/08/01(日) 23:09   No:57951     
Title: Re:龍神録60章    
こんばんは。
たしかmusic.cppのどこかに
StopSoundMemやらDeleteSoundMemという関数が書いてあったはずですので、

stage_countが2900になったらそれらをよんでみてはどうでしょう?

適当なこといってたらすみません・・


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



Name: 16R  ..ぴよぴよ(50ポイント)   Date: 2010/07/30(金) 23:24   No:57831       
Title: アプリケーション    
プログラムとは直接関係ないのですが・・

自分で製作したプログラムをアプリケーション(ダブルクリックで起動できるやつです。拡張子は.exeかな・・)にしたいのですが、どなたか方法教えてはいただけないでしょうか・・





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


Name: Dixq (管理人) [URL]  ..ウィザード(1,243,325ポイント)   Date: 2010/07/30(金) 23:31   No:57833     
Title: Re:アプリケーション    
C言語でしょうか?
また、コンパイル環境は何でしょうか?
OSはwindowsですか?
使っているライブラリがあればそれも教えて下さい。

もしC言語で、VC++でコンパイル実行しているのであれば既に.exeは生成されています。
プロジェクトがあるフォルダに「Debug」フォルダが出来ているはずです。
その中にプロジェクト名と同じ名前の実行ファイルがあります。


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

Name: 16R  ..ぴよぴよ(15ポイント)   Date: 2010/07/30(金) 23:37   No:57835     
Title: Re:アプリケーション    
説明不足ですみません・・

あ、「Debug」フォルダのなかにありました!


どうもありがとうございます(^^)


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

Name: 16R  ..ぴよぴよ(6ポイント)   Date: 2010/07/30(金) 23:38   No:57836 解決!     
Title: Re:アプリケーション    
解決マークをわすれてました・・

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

Name: ISLe  ..中級者(9,472ポイント)   Date: 2010/07/30(金) 23:57   No:57838     
Title: Re:アプリケーション    
> あ、「Debug」フォルダのなかにありました!

他人にコピーしてあげる場合は、Releaseビルドしたものを渡しましょう。

デバッグ版は配布の仕方(同梱物等)によってはライセンス違反になります。


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

Name: 16R  ..ぴよぴよ(27ポイント)   Date: 2010/07/31(土) 00:13   No:57839     
Title: Re:アプリケーション    
申し訳ありません・・・Releaseビルドとは何でしょうか?

初心者なもので・・


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,243,425ポイント)   Date: 2010/07/31(土) 00:36   No:57840     
Title: Re:アプリケーション    
コンパイル環境は何なのでしょうか・・・?
VisualC++ 2010でしょうか?

もしそうであれば添付ファイルを参考にReleaseにしてビルドしたものを渡してあげて下さい。


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

Name: ISLe  ..中級者(9,581ポイント)   Date: 2010/07/31(土) 00:47   No:57842     
Title: Re:アプリケーション    
ツールバーに『Debug』と表示されているプルダウンメニューを『Release』に切り替えてビルドしてください。
実行ファイルはReleaseフォルダに出力されます。

Releaseビルドは配布用の実行ファイルを作るためのモードです。
Debug版に比べて実行ファイルのサイズが小さくなり処理速度も概ね速くなります。


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

Name: 16R  ..ぴよぴよ(79ポイント)   Date: 2010/08/01(日) 20:33   No:57947 解決!     
Title: Re:アプリケーション    
みなさまありがとうございます。

勉強になりました


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



Name: imakado  ..ぴよぴよ(55ポイント)   Date: 2010/08/01(日) 11:55   No:57921       
Title: DebugからReleaseへ    
龍神録プログラミングについて質問です。

projectの第何章でもいいので開いて、Debugモードで実行するとうまくいくのですが、Releaseモードにして実行しようとすると、

"Link : fatal error LNK1104: ファイル 'DxLib_d.lib'を開くことができません。"

とエラーが出て実行できません。
いろいろな章で試してみましたが、どれもこのエラーが出て実行できませんでした。
どなたか解決方法を教えてください。お願いします。


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


Name: array [URL]  ..熟練のプログラマー(65,130ポイント)   Date: 2010/08/01(日) 12:04   No:57922     
Title: Re:DebugからReleaseへ    
http://homepage2.nifty.com/natupaji/DxLib/dxuse.html

プロジェクタの設定が不足しているのが原因だと思います。
お使いのコンパイラに合わせてDxLibの設定を行って下さい。


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

Name: Justy  ..伝説なるハッカー(560,875ポイント)   Date: 2010/08/01(日) 18:29   No:57940     
Title: Re:DebugからReleaseへ    
 Releaseビルドのプロジェクトの構成プロパティにあるリンカの設定の「追加のライブラリディレクトリ」の項目に
../include/
を入れてみて下さい。


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

Name: imakado  ..ぴよぴよ(61ポイント)   Date: 2010/08/01(日) 19:35   No:57946 解決!     
Title: Re:DebugからReleaseへ    
arrayさん、Justyさん、早速回答くださってありがとうございました。
無事解決しました。


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



Name: SR  ..ぴよぴよ(71ポイント)   Date: 2010/08/01(日) 13:14   No:57924       
Title: DXライブラリによるウィンドウのサイズ変更    
はじめまして、SRと申します
このたび物理の研究としてDXライブラリを用いて
シミュレーターを作ることになりDXライブラリで
プログラムを組んでいるのですが
ウィンドウ表示モードにおいてそのウィンドウのサイズを変更するやり方が分からないのです
(マウスでドラッグしてウィンドウサイズを変更することではありません)
どのようなプログラムを組めばよいのでしょうかお教えください。


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


Name: ぬるぽ  ..入門者(4,427ポイント)   Date: 2010/08/01(日) 13:31   No:57926     
Title: Re:DXライブラリによるウィンドウのサイズ変更    
まずはググりましょう。
「DXライブラリ ウィンドウのサイズ変更」と検索してみてください。
一番上に、DXライブラリ置き場 リファレンスページが表示されてますね?
そのページを開き、Ctrl+Fで「ウインドウのサイズ」を検索してみましょう。
SetWindowSizeChangeEnableFlagという関数が見つかると思います。
その関数を使えば可能です。参考までにどうぞ。


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

Name: ナムアニクラウド [URL]  ..ぴよぴよ(434ポイント)   Date: 2010/08/01(日) 13:39   No:57927     
Title: Re:DXライブラリによるウィンドウのサイズ変更    
 「起動時のウィンドウのクライアント領域のサイズの変更」であれば、SetWindowSize関数やSetGraphMode関数を用いればいいです。
SetGraphModeは呼びだすと全てのグラフィックハンドルが破棄されるので、特に理由がなければDxLib_Initより前に呼び出すとよいでしょう。(SetWindowSizeは問題ないようです)

SetWindowSize( int Width, int Height );
    [Width] :横幅
    [Height]:縦幅

SetGraphMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth );
    [ScreenSizeX]  :横幅
    [ScreenSizeY]  :縦幅
    [ColorBitDepth]:使用する色のビット数

 SetGraphModeについては、DXライブラリのリファレンスの「その他画面操作系関数」のところに載っているので、よく見てみて下さい。ぬるぽさんの言った通りです。
また、リファレンスに載ってない関数で有用なものもあるので、必要なときはDxLib.hから検索してみるといいでしょう。


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

Name: SR  ..ぴよぴよ(91ポイント)   Date: 2010/08/01(日) 14:09   No:57929     
Title: Re:DXライブラリによるウィンドウのサイズ変更    
ぬるぽさん、ナムアニクラウドさん
解決しました
誠にありがとうございました


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

Name: SR  ..ぴよぴよ(3ポイント)   Date: 2010/08/01(日) 18:02   No:57935 解決!     
Title: Re:DXライブラリによるウィンドウのサイズ変更    
解決しました!

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



Name: DecentLove  ..中級者(10,062ポイント)   Date: 2010/07/31(土) 22:48   No:57897       
Title: デスクトップの枠    
またまたすみません。

いま時計をつくっていて、大体骨組みは完成しました。
時計なので、デスクトップの隅などに自由に置けて、かつ、目障りにならないようにしたいです。
SetWindowStyleMode(4);
で、邪魔なウィンドウの枠を消しました。すると、今度はウィンドウを全く動かせなくなってしまいました。
邪魔なウィンドウの枠を消してウィンドウを自由に動かせるようにするにはどのようにしたらいいですか?
どなたか分かる人、お願いします。

VC++2010
DxLibを使用です。


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


Name: シエル  ..プログラマー(38,248ポイント)   Date: 2010/07/31(土) 23:07   No:57900     
Title: Re:デスクトップの枠    
DXライブラリか。。.
ウィンドウプロシージャでメッセージを処理できれば余裕なんだけどなぁ。

DXライブラリはさっぱり分かりませんので、
DXライブラリにどんなマウス関連の関数があるのかわかりませんが、
ウィンドウ内にマウスがあり、クリックしていたら、
マウスの移動量だけ移動した方向に動かせばいいと思います。

DXライブラリにマウスのクリック判定、マウスの移動量等を求める関数があればの話ですけど。 編集済み


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

Name: シエル  ..プログラマー(38,270ポイント)   Date: 2010/07/31(土) 23:10   No:57901     
Title: Re:デスクトップの枠    
あ、座標さえ求められれば、移動量は求められますね。

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

Name: ISLe  ..中級者(9,861ポイント)   Date: 2010/07/31(土) 23:59   No:57904     
Title: Re:デスクトップの枠    
メインループの中に

if (GetMouseInput() & 1) { /* 左クリックで */
    /* ウインドウ枠をクリックしたと思わせる */
    SendMessage(GetMainWindowHandle(), WM_NCLBUTTONDOWN, HTCAPTION, 0);
}


というコードを入れてみてください。


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

Name: DecentLove  ..中級者(10,731ポイント)   Date: 2010/08/01(日) 00:10   No:57905     
Title: Re:デスクトップの枠    
みなさん回答ありがとうございます!
おかげで出来ました。ありがとうございます!
動かすことはできたのですが、移動中に、時刻の描画の処理が止まってしまいます。

ウィンドウの移動中にも処理を続けさせることのできる関数はありませんか?
調べてはみたんですが…。いまいち見つからなくて。


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

Name: シエル  ..プログラマー(38,299ポイント)   Date: 2010/08/01(日) 00:14   No:57906     
Title: Re:デスクトップの枠    
ウィンドウプロシージャ側が処理中だから仕方がないかと。
スレッドで対応するしかないでしょうね。


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

Name: DecentLove  ..中級者(10,691ポイント)   Date: 2010/08/01(日) 16:11   No:57931 解決!     
Title: Re:デスクトップの枠    
そうですか…。
スレッドについてはまた今度学習してみます。

一応、本題については解決しましたので。有難うございました!


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



Name: 画像  ..ぴよぴよ(96ポイント)   Date: 2010/07/31(土) 19:30   No:57889       
Title: 敵のアイコンが重なってる    
龍神録プログラミングの館の12章まで進みましたのでエクセルの敵の種類を0と1をつけて何体かずつ別々の絵で敵が出てくる、とやろうとしました。ですが敵のアイコンが重なって表示されるか、或いはどちらかしか表示されない、という状況になってしまい…


GV.h
GLOBAL int img_enemy[2][1];//画像1枚分を2キャラ分

load.cpp
LoadDivGraph( "../dat/img/enemy/0.png" , 1 , 1 , 1 , 32 , 32 , img_enemy[0] ) ;
LoadDivGraph( "../dat/img/enemy/1.png" , 1 , 1 , 1 , 32 , 32 , img_enemy[1] ) ;

graph.cpp
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[0][enemy[i].img],TRUE);

この状態では0.pngの絵しか出ず、graph.cppに
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[1][enemy[i].img],TRUE);
を加えると0.pngと1.pngの絵が重なってしまいます。

他にいじれそうなところもなく、見本60章のソースも覗きましたがこの部分に関しては12章のままのようでどうすればいいかわかりません。
どこをいじれば別々の絵として認識されるのでしょうか?


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


Name: jay  ..上級者(19,316ポイント)   Date: 2010/07/31(土) 20:03   No:57892     
Title: Re:敵のアイコンが重なってる    
ではこんな感じでどうでしょうか?

DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[i][enemy[i].img],TRUE);


これでちゃんと動作してくれると思いますが、今の僕には確認する術がないので確証は全くないです。


DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[0][enemy[i].img],TRUE);
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[1][enemy[i].img],TRUE); 

この二つは消して下さいね。 


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

Name: 画像  ..ぴよぴよ(172ポイント)   Date: 2010/07/31(土) 20:32   No:57894     
Title: Re:敵のアイコンが重なってる    
jayさんのプログラムを試したところ、別々の絵で表示はされましたがその2体分しか敵が出ないようになってしまいました。
一度動かした後キャラデータで敵数を増やしても2体のままで…


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

Name: Tatu  ..熟練のプログラマー(43,106ポイント)   Date: 2010/07/31(土) 23:28   No:57903     
Title: Re:敵のアイコンが重なってる    
>>エクセルの敵の種類を0と1をつけて何体かずつ別々の絵で敵が出てくる、とやろうとしました。

敵の種類を扱う変数はenemy[i].kndだから
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[enemy[i].knd][enemy[i].img],TRUE); 
とすればうまく表示されるはずです。



jayさんのプログラムではいくら敵を増やしても二体までしか表示されません。
img_enemy[2][enemy[i].img]などの画像は読み込んでいないからです。



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

Name: jay  ..上級者(19,356ポイント)   Date: 2010/08/01(日) 11:20   No:57919     
Title: Re:敵のアイコンが重なってる    
あー、やはり何かで確認しないと駄目ですね。
今後は気をつけます。

失礼しましたー。


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



Name: Void  ..ぴよぴよ(74ポイント)   Date: 2010/08/01(日) 01:53   No:57911       
Title: 右詰め    
RPGのメニュー画面、戦闘などで
HP   150 / 2500
MP   10  / 120
ではなく
HP   150 / 2500
MP    10 /  120
のようにステータスの値を右詰めに描きたいのですが
何かいい方法はありませんか


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


Name: 夏天  ..初心者(7,995ポイント)   Date: 2010/08/01(日) 02:00   No:57912     
Title: Re:右詰め    
DXライブラリでは試したことありませんが
コンソールプログラムでは
3文字分確保の場合
printf("%3d",10);
とかくと右詰
printf("%-3d",10);
とかくと左詰になりますよね
もしかしたらDXライブラリでも通用するかもですよ


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

Name: Void  ..ぴよぴよ(102ポイント)   Date: 2010/08/01(日) 03:02   No:57913 解決!     
Title: Re:右詰め    
%〜dでできました!!
本当にありがとうございます


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



Name: 夏天  ..初心者(7,693ポイント)   Date: 2010/07/31(土) 15:06   No:57875       
Title: URLからIPアドレスを取得    
URLを入力しそのサーバーのIPアドレスを取得するというプログラムを作りたいのですが
まったくやり方がわかりません
検索をかけてもnslookupしか出てきません
DXライブラリにもそういった関数はついていないので
どうすればいいのか教えていただけないでしょうか

開発環境
OS:WindowsXP
エディタ:VisualStudio2010
ライブラリ:DXライブラリ


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


Name: お豆  ..ぴよぴよ(225ポイント)   Date: 2010/07/31(土) 15:30   No:57876     
Title: Re:URLからIPアドレスを取得    
socketプログラミングですね。
こういった回答が適切かはわかりませんが、該当するのは下記の関数です。

この関数をキーワードに検索して見るとすぐに、サンプルコードが見つかると思いますよ。
gethostbyname
getaddrinfo


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

Name: shiro4ao  ..初心者(8,596ポイント)   Date: 2010/07/31(土) 18:17   No:57882     
Title: Re:URLからIPアドレスを取得    
DXライブラリから離れてしまいますが、以下のようにしてホスト名から
IPアドレスを求めることができます。

===============GetIPaddr.cpp=============================================
#include <stdio.h>
#include <winsock2.h>

int main() {
    LPHOSTENT host;
    WSADATA wsaData;
        char hostname[]="www.google.co.jp";  //試しにgoogleのアドレス
        IN_ADDR inaddr;
    int i,addr1,addr2,addr3,addr4;
    
    WSAStartup(2 , &wsaData);
    host = gethostbyname(hostname);
        
    printf("IPアドレス = %d.%d.%d.%d\n" ,(BYTE)*((host->h_addr_list[0])) ,(BYTE)*((host->h_addr_list[0]) + 1) ,(BYTE)*((host->h_addr_list[0]) + 2) ,(BYTE)*((host->h_addr_list[0) + 3));
    WSACleanup();
    return 0;
}
===================================================================

====実行結果======================================================
C:\GetIPaddr>GetIPaddr.exe 
IPアドレス = 66.249.89.104
================================================================

大変申し訳ないのですが、
エラー処理はしていませんので、実行する際は確実にgoogleにアクセス出来る状態で実行してください。
配列へのポインタになっているべき理由があるはずなのですが自分にはわかりませんでした。
あと、URLからではなくてすみません。


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

Name: 夏天  ..初心者(7,887ポイント)   Date: 2010/07/31(土) 22:49   No:57898 解決!     
Title: Re:URLからIPアドレスを取得    
皆さんの協力で無事満足のいく結果が得られましたありがとうございます

>>お豆さんへ
なるほど、ソケットプログラムというのですね。
初めて聞きました^^;
まだまだ自分には覚えるべきことがたくさんあることがわかったので
ありがとうございます

>>shiro4aoさんへ
DXライブラリから離れていても大丈夫です
自分がU・R・L!U・R・L!っていっていたものはどうやらホスト名のことっぽいです
まさにこういうのを求めていました
最初エラーが出ましたがws2_32.libをリンクするのをしていなかったっぽいので
無事コンパイルが通ったのでよかったです
ありがとうございます
 編集済み


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



Name: 博士  ..ぴよぴよ(173ポイント)   Date: 2010/07/31(土) 02:42   No:57849       
Title: 確認    
主様
初めまして。博士と申します。

一つ質問があります。

主様の質問で出てくるDXライブラリではなく、
自前のライブラリでゲーム制作を進めています。
(ゲーム業界に転職するべく、開発した物です。)
現在、コーディングが終了し、デバック作業を行っているのですが、
 Zキー(決定キー)押すと次画面に遷移するはずが、遷移せずに画面がフリーズしてしまう。
(自機及びパーツセレクトで呼び出されるGameSelectDisplayとGameSelectInput関数及び
上記内で呼び出しされる関数を確認したが、問題と思われる箇所は発見できず。)
また、タイトル画面,セレクト画面のカーソルが正常に機能しない状態です。

つきましては、動作確認を依頼したいのですが、引き受けて頂けますでしょうか。
(もちろん、引き続きこちらでもデバック作業は行っていきます。)

ご返答宜しくお願い致します。


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


Name: 御津凪 [URL]  ..ハッカー(146,831ポイント)   Date: 2010/07/31(土) 03:38   No:57851     
Title: Re:確認    
確認というか、依頼ですね。

もし引き受けた場合、実行ファイルのみでデバッグ作業をすることになるのでしょうか?
ソースコード一式が与えられないと明確なバグは把握しにくいです。

それと、受諾した場合の対象データは何を使って渡すのですか?


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

Name: softya [URL]  ..ハッカー(187,430ポイント)   Date: 2010/07/31(土) 12:07   No:57864     
Title: Re:確認    
確認したとありますが、デバッガ等でトレースされたんでしょうか?
追いかければ、ちゃんと何が原因でループしているかはすぐに分かると思うのですが。
(それほど、質の悪いバグとは思えません)


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,244,144ポイント)   Date: 2010/07/31(土) 12:15   No:57866     
Title: Re:確認    
主様というのは・・?私の事でしょうか?^^;
キューか管理人でいいですよ。

> 動作確認を依頼したいのですが

依頼というのは動作確認ですか?
本文を拝見するとデバッグ作業のように思われますがいかがでしょう。
デバッグ作業まで出来るかはわかりませんが、動作確認するだけでよければ協力します。

また、softyaさんも仰っているようにそこまで発見が困難なバグには思えません。
何がトリガーになっているか解らず、長時間遊んでいるとたまにフリーズするというようなバグであればなかなか困難な場合もあるでしょうけど、
今回の場合、トリガーがはっきりしているので、そこにブレイクポイントを置いていけば比較的容易に発見出来そうです。

今のデバッグ作業は具体的に何をされているのでしょう?


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

Name: 博士  ..ぴよぴよ(601ポイント)   Date: 2010/07/31(土) 18:52   No:57888     
Title: Re:確認    
返信有難う御座います。

本文を拝見するとデバッグ作業のように思われますがいかがでしょう。
→デバック作業です。

また、softyaさんも仰っているようにそこまで発見が困難なバグには思えません。
何がトリガーになっているか解らず、長時間遊んでいるとたまにフリーズするというようなバグであればなかなか困難な場合もあるでしょうけど、今回の場合、トリガーがはっきりしているので、
そこにブレイクポイントを置いていけば比較的容易に発見出来そうです。 
今のデバッグ作業は具体的に何をされているのでしょう?

→対応完了致しました。
→管理人様が質問に書かれている通りのことを、現在作業している最中です。

確認したとありますが、デバッガ等でトレースされたんでしょうか?
→デバッガ等でのトレースは、行っていますよ。

もし引き受けた場合、実行ファイルのみでデバッグ作業をすることになるのでしょうか?
ソースコード一式が与えられないと明確なバグは把握しにくいです。
それと、受諾した場合の対象データは何を使って渡すのですか?
→受諾した場合は、依頼した方のURLにファイル送信サービスを使用して受諾された方に
渡そうと思っていました。
(しかし、上記のサービスを使用して渡す場合、受諾した方のメールアドレスを知らないと
 渡せないことを考慮していませんでした。申し訳ない。)

最後に、お騒がせして申し訳ないです。


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



Name: shiro4ao  ..初心者(8,079ポイント)   Date: 2010/07/31(土) 13:45   No:57869       
Title: インラインアセンブラによるスタックポインタの値の取得    
VC++2010でインラインアセンブラをつかって、現在のスタックポインタの値を
取得したいです。

============ここから=============================
unsigned long GetStackPointer(void)
{  
    __asm movl %esp,%eax
}

int main(void)
{
long esp;
esp=GetStackPointer();
printf("スタックポインタの値->0x%x\n",esp);
return 0;
}
============ここまで===========================
ところが、
「オペコード' の 'MOD' はインライン アセンブラーの構文エラーになります。」
とエラーになりました。
(オペコードは"movl"のはずなのになぜか"mod"となってエラーが報告されます・・・・・)

何がまずかったのでしょうか?


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


Name: toyo  ..熟練のプログラマー(54,921ポイント)   Date: 2010/07/31(土) 14:01   No:57870     
Title: Re:インラインアセンブラによるスタックポインタの値の取得    
それはgccのアセンブラ用の書き方ですね
VisualC++では使えません
%が剰余(MOD)として処理されたのでしょう
自信ないですが
 __asm mov eax, esp
のように書くのだと思います


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

Name: shiro4ao  ..初心者(8,116ポイント)   Date: 2010/07/31(土) 14:36   No:57872 解決!     
Title: Re:インラインアセンブラによるスタックポインタの値の取得    
ありがとうございます。
無事にスタックポインタの値がわかりました。
自分が書いていたのはgccの文法だったのですね!
ありがとうございました。


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

Name: たかぎ [URL]  ..ハッカー(216,690ポイント)   Date: 2010/07/31(土) 15:06   No:57874     
Title: Re:インラインアセンブラによるスタックポインタの値の取得    
関数を呼び出した時点でスタックポインタの値を破壊してしまうので、その方法では正確な値を取得することは困難かと思います。
関数全体をアセンブリ言語で記述し、呼出し時に戻り先番地をスタックに積んだ分を調整する必要があります。


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

Name: shiro4ao  ..初心者(8,641ポイント)   Date: 2010/07/31(土) 18:19   No:57885 解決!     
Title: Re:インラインアセンブラによるスタックポインタの値の取得    
ありがとうございます。
たしかに考えていた挙動と違っていました・・・・
別の方法を考えたいと思います。
ありがとうございました。


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



Name: 名無し  ..初心者(7,074ポイント)   Date: 2010/07/30(金) 17:38   No:57811       
Title: FPS設定    
FPSを制御しようとして、龍神録プログラミングの館の43を参考に(というかほぼぶち込み)して
自分のプログラムに組み込んだら、エラーは出ないんですけど、画面に何も出力されなくなって
しまいました。
FPS関数を組み込む前には描画されてたものも描画されなくなってしまったので、
どこかで無限ループが起きてると思うのですが、自分で見てみてもよく分かりません。
変なコメントしてるのは、こうでもしないと見にくいためです。
環境はBCC Developerです。 返答お願いします。

#include "DxLib.h"

#define FLAME 60

//宣言////////////////////////////////////////////////////////////////////////////////////////
char Key[256];
int Graph=LoadGraph("Ziki.png");
int X=320,Y=400;
int color=GetColor(255,255,255);

int fps_count,count0t;   //fpsのカウンタ、60フレームに1回基準となる時刻を記録する変数
int f[FLAME];            //平均を計算するため60回の1周時間を記録
double ave;              //平均fps

//宣言終//////////////////////////////////////////////////////////////////////////////////////

//FLAME fps になるようにfpsを計算・制御
void fps_wait(){
    int term,i,gnt;
    static int t=0;
    if(fps_count==0){//60フレームの1回目なら
        if(t==0)//完全に最初ならまたない
            term=0;
        else//前回記録した時間を元に計算
            term=count0t+1000-GetNowCount();
    }
    else    //待つべき時間=現在あるべき時刻-現在の時刻
        term = (int)(count0t+fps_count*(1000.0/FLAME))-GetNowCount();

    if(term>0)//待つべき時間だけ待つ
        Sleep(term);

    gnt=GetNowCount();

    if(fps_count==0)//60フレームに1度基準を作る
        count0t=gnt;
    f[fps_count]=gnt-t;//1周した時間を記録
    t=gnt;
    //平均計算
    if(fps_count==FLAME-1){
        ave=0;
        for(i=0;i<FLAME;i++)
            ave+=f[i];
        ave/=FLAME;
    }
    fps_count = (++fps_count)%FLAME ;
}

//x,yの位置にfpsを表示
void draw_fps(int x, int y){
    if(ave!=0){
        DrawFormatString(x, y,color,"[%.1f]",1000/ave);
    }
    return;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

SetDrawScreen(DX_SCREEN_BACK);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
fps_wait();
draw_fps(0,465);


DrawGraph(X,Y,Graph,TRUE);


ScreenFlip();

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



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


Name: Dixq (管理人) [URL]  ..ウィザード(1,243,116ポイント)   Date: 2010/07/30(金) 20:52   No:57822     
Title: Re:FPS設定    
グローバル変数にこのように入れる事は出来ないです。

int Graph=LoadGraph("Ziki.png");
int color=GetColor(255,255,255);

LoadGraphもGetColorもDXライブラリの関数ですから、DXライブラリを初期化する関数を呼んだ後に呼ぶ必要があります。

後、上記のようなコメントを入れてコードを見やすくするのではなく、関数分けするとか、
字下げを明確にするとか、括弧で挟むなどして可読性を向上させるようにする方が良いのではないかと思います。

また、私が書いておいて申し訳ないのですが、グローバル変数にするなら特徴的な名前にし、他のファイルから参照出来ないようにstatic変数にした方が良いですね。

それとメインループ以外にwhileもforもgotoもありませんから、無限ループする可能性は無いので、
この時点で仮に処理が返ってこないのであれば疑うのはSleep位でしょうか。
もしどこかで処理が止まっていると思うのであればブレイクポイントを置いて確認してみて下さい。

最後に、名無しというお名前は使用されないようにお願いしているお名前ですので
よろしければ何か自分だけの名前を付けて頂けたら幸いです。
詳しくは利用規約をご覧ください >http://dixq.net/board/board.html


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

Name: EX  ..ぴよぴよ(272ポイント)   Date: 2010/07/31(土) 14:50   No:57873 解決!     
Title: Re:FPS設定    
すみません。名無しは今後使わないようにします。


>LoadGraphもGetColorもDXライブラリ

なるほど・・・ 忘れてたわけではないけど盲点でした
直しても直接は解決しなかったけど、いろいろいじったら表示されるようになりました。
それと、グローバル変数はちょっとした間に合わせなので、このままでも大丈夫です。
指摘ありがとうございました。



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



Name: ガラ  ..ぴよぴよ(431ポイント)   Date: 2010/07/31(土) 08:06   No:57853       
Title: ソートのオーダーに関する問題。    
質問させていただくのは2回目になるかと思います。
大学生のガラと申します。情報工学科に在籍しています。
C言語は大学2年生までに習う初級程度は大体理解できていると思いますが、あやふやな点もあります。
提出期限が本日の課題に含まれているものであるため、困っています。

質問は大学の課題のアルゴリズムとデータ構造(ソート等)に関する問題についてです。
計算量を示すオーダーについて理解が乏しく、どのようなことを求められているのかもわかりません。
以下のような問題です。

大きさnの相異なる整数要素からなるソート済みの配列a,a[1] < a[2] < ... <a[n]が与えられている。
入力として与えられている整数lに対し、a[i] = lとなるiが存在すればそのようなiを返し、どのi(1<=i<=n)に対してもa[i]≠lなら0を返すようなO(logn)ステップで動作するアルゴリズムを構成せよ。C言語などに基づく擬似コードでよい。

この問題に対して、以下のようなアルゴリズムでは題意を満たさないように思えるのですが、どうすればよいのでしょうか。

for (i = 1, i <= n, i++) {
     if (a[i] == l)
          return i;
}
return 0;

ご教授願います。 編集済み


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


Name: ドラ  ..中級者(10,173ポイント)   Date: 2010/07/31(土) 08:28   No:57854     
Title: Re:ソートのオーダーに関する問題。    
二分探索(Binary Search)しろって事だと思います。

>以下のようなアルゴリズムでは題意を満たさないように思えるのですが
はい。線形探索ではO(n)になってしまいます。


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

Name: ガラ  ..ぴよぴよ(514ポイント)   Date: 2010/07/31(土) 09:18   No:57856     
Title: Re:ソートのオーダーに関する問題。    
int low = 1;
int high = n;
int i;
while (low <= high) {
      i = (low + high) / 2;
      if (a[i] == l) {
           return i;
      }else if (a[i] < l) {
           low = i + 1;
      }else if (a[i] > l) {
           high = mid -1;
      }
}
return 0;


二分探索だとこのような感じでしょうか。


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

Name: sizuma [URL]  ..熟練のプログラマー(42,660ポイント)   Date: 2010/07/31(土) 14:04   No:57871     
Title: Re:ソートのオーダーに関する問題。    
>提出期限が本日の課題に含まれているものであるため、困っています。
すっごい分かりづらいです。

>二分探索だとこのような感じでしょうか
擬似コードでいいって書いてますけど、普通にコンパイルできて動作するように作ったほうがいいですよ。


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



Name: kabuto  ..ぴよぴよ(101ポイント)   Date: 2010/07/31(土) 09:48   No:57857       
Title: マウスでタッチしたマスを反転させる    
2次元配列でマスの情報を管理してます。(1マス64*64)
タッチしたマスを1なら2に2なら1にしたいのですが上手くいきません。
タッチした瞬間に全てのマスが反転してしまいます。

x,y・・・マウスの座標
panel[*][*].num・・・1か2の情報
マスのサイズ・・・中心原点で64*64

for( int i=0; i<HEIGHT_MAX; i++ ){
    for( int j=0; j<WIDTH_MAX; j++ ){
        if((int)x-32 < panel[i][j].x+32 && (int)x+32 > panel[i][j].x-32 &&
            (int)y-32 < panel[i][j].y+32 && (int)y+32 > panel[i][j].y-32){
                if( panel[i][j].num == 1 ) panel[i][j].num = 2;
                else if( panel[i][j].num == 2 ) panel[i][j].num = 1;
        }
    }
}
 

わかりにくい質問で申し訳ないのですが
みては頂けないでしょうか?


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


Name: シエル  ..プログラマー(38,278ポイント)   Date: 2010/07/31(土) 09:50   No:57858     
Title: Re:マウスでタッチしたマスを反転させる    
一瞬しか見ていないですが、全部のマスを処理しちゃまずいんじゃないですか?
該当のマスだけ処理したらbreakしないと。


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

Name: 紅葉  ..上級者(16,112ポイント)   Date: 2010/07/31(土) 10:31   No:57859     
Title: Re:マウスでタッチしたマスを反転させる    
>>シエルさん
breakしなくても問題ないのでは?
全部のマスを見に行ってますが処理は一部分しか行っておりません。
質問者を混乱させている気がします。

ソース的には問題ないと思うのですが
panel[i][j].x等にきちんと値が入ってますか?
値が0だったりするとこのソースは動かないかと思います。
描画で使っている部分のソースをあげて頂けないでしょうか?
又、座標をキャストしているのですが意味があるのでしょうか?


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

Name: 真等  ..ぴよぴよ(288ポイント)   Date: 2010/07/31(土) 10:49   No:57860     
Title: Re:マウスでタッチしたマスを反転させる    
初めまして、こんにちは。
回答させていただきます。


breakはしなくても問題なさそうですね。
もしパネルに重なり部分がないのでしたら、breakした方が処理的には軽くて良いかとは思いますが。

ソースをお借りしまして試してみたのですが、私の環境では、多少違和感がありました(後述)が、基本的に問題なく意図した動作をしました。
ですので、紅葉さんの仰る通り、何かしらの値が正確にinputされてないのだと思います。
x, y, panelの値をご確認いただければと思います。

以下、ソースとなります。
コメントアウトしました箇所は、お借りしたソースの原本です。
コメントアウトされてないものは、元の
panel[i][j].x+32,panel[i][j].x-32,panel[i][j].y+32,panel[i][j].y-32
の部分の[+|-]32が気になりまして、削除いたしましたものです。


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

static const int HEIGHT_MAX = 10;
static const int WIDTH_MAX = 10;

class CPanel{
public:
    int x;
    int y;

    int num;
};

int main(){

    int x = 100;
    int y = 100;
    CPanel panel[HEIGHT_MAX][WIDTH_MAX];

    for( int i=0; i<HEIGHT_MAX; i++ ){
        for( int j=0; j<WIDTH_MAX; j++ ){
            panel[i][j].x = j*64;
            panel[i][j].y = i*64;
            panel[i][j].num = ((int)rand())%2 + 1;
        }
    }
/*
    for( int i=0; i<HEIGHT_MAX; i++ ){
        for( int j=0; j<WIDTH_MAX; j++ ){
            if((int)x-32 < panel[i][j].x+32 && (int)x+32 > panel[i][j].x-32 &&
                (int)y-32 < panel[i][j].y+32 && (int)y+32 > panel[i][j].y-32){
                    if( panel[i][j].num == 1 ) panel[i][j].num = 2;
                    else if( panel[i][j].num == 2 ) panel[i][j].num = 1;
            }
        }
    }
*/
    for( int i=0; i<HEIGHT_MAX; i++ ){
        for( int j=0; j<WIDTH_MAX; j++ ){
            if((int)x-32 < panel[i][j].x && (int)x+32 > panel[i][j].x &&
                (int)y-32 < panel[i][j].y && (int)y+32 > panel[i][j].y){
                    if( panel[i][j].num == 1 ) panel[i][j].num = 2;
                    else if( panel[i][j].num == 2 ) panel[i][j].num = 1;
            }
        }
    }

}


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

Name: mats  ..入門者(3,190ポイント)   Date: 2010/07/31(土) 11:52   No:57862     
Title: Re:マウスでタッチしたマスを反転させる    
これも混乱を招いてしまうのかもしれないのですが…

panel[((int)y-32)%64][((int)x-32)%64]

のように,マウス座標から直接マスを求めることはできないのでしょうか?
(マスが移動したりしないという前提ですが)

マスがどのように並んでいるのか理解していないので,計算式は微妙に違っているかもしれません


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

Name: シエル  ..プログラマー(38,279ポイント)   Date: 2010/07/31(土) 12:14   No:57865     
Title: Re:マウスでタッチしたマスを反転させる    
すいません。一瞬しか見てなかったので、質問の意味を勘違いしてました。
私の投稿は完全無視してください。


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

Name: kabuto  ..ぴよぴよ(248ポイント)   Date: 2010/07/31(土) 12:38   No:57867     
Title: Re:マウスでタッチしたマスを反転させる    
>>紅葉s
それでした!!
テスト用に描画してたものを使っており
変数には値が入っておりませんでした・・・。

>>真等s
テストソースありがとうございます。
お手数お掛け致しました。

>>mats さん
ご回答ありがとうございます。
そのようなやり方もあるのですねw
配列を壊さないように気をつけます。

>>シエルs
回答ありがとうございました。
breakをした方が処理が軽くなりそうなので入れさせて頂きます。
ありがとうございました。


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



Name:  ..入門者(3,211ポイント)   Date: 2010/07/29(木) 06:25   No:57707       
Title: OpenGL ESでの範囲指定でのテクスチャの読み込み    
何度も質問してすいません(汗)
やはり解決できないので再度質問させて頂きました。
http://www.play21.jp/board/formz.cgi?action=res&resno=57689&page=&id=dixq&rln=57703

作ったテクスチャ用のクラスは下記の様な感じです。

/*--------------------------------------------------
  テクスチャ用クラス
--------------------------------------------------*/
class Texture{
public:
    GLuint texture;
    CGSize imageSize, textureSize;
    NSString *imagePath;
    int startX, startY, sizeX, sizeY;
};
@、Aは自分で作ろうとしている関数です。 @は作ったクラスを入れれば元の関数にセットしてくれる関数です。 エラーは起こっていないのですが何も読み込めていないです。 Aはサイズを指定して読み込む用に作っている関数です。 現在は初期のX座標しか変更しないようにしています。 直接、値を弄らなければいけないので ポインタを使っているのですがAはエラーが起こってしまいます。 原因はなんとなくはわかるのですが改善案がわかりません。 ポインタをもう少し勉強しないといけませんよね・・・。
// 元の関数
SZGLLoadTexture(NSString *imagePath, CGSize *imageSize, CGSize *textureSize){
    if ([[imagePath pathExtension] compare:@"pvr" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
        return SZGLLoadTextureImpl_PVR(imagePath, imageSize, textureSize);
    }
    
    return SZGLLoadTextureImpl_Apple(imagePath, imageSize, textureSize);
}

// @
GLuint SZGLLoadTexture(Texture texture){
    return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);
}

// A
GLuint SZGLLoadTexture(Texture *texture, int startX){
    *texture.startX = startX;
    return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);
}



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


Name: シエル  ..プログラマー(37,529ポイント)   Date: 2010/07/29(木) 07:59   No:57709     
Title: Re:OpenGL ESでの範囲指定でのテクスチャの読み込み    
どんなエラーが出るんですか?

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

Name:  ..入門者(3,107ポイント)   Date: 2010/07/30(金) 01:06   No:57803     
Title: Re:OpenGL ESでの範囲指定でのテクスチャの読み込み    
return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);

ここの部分でポインタを使って関数を呼ぶと型が違うって言われてしまいます。
1つ目の引数はポインタを使っていないので・・・。


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

Name: めるぽん  ..初心者(8,791ポイント)   Date: 2010/07/30(金) 01:58   No:57804     
Title: Re:OpenGL ESでの範囲指定でのテクスチャの読み込み    
Texture tex;
tex.texture = SZGLLoadTexture(tex);
と書くと、@の引数が
GLuint SZGLLoadTexture(Texture texture){
と定義されているため、tex はコピーされて渡されます。つまり呼び出し元の tex と SZGLLoadTexture の texture は別物です。なので、この texture を変更しても tex は変更されません。なので、
GLuint SZGLLoadTexture(Texture& texture){
として参照を渡すようにすればいいと思います。 あとAの問題ですけど、ポインタ経由で呼び出す場合は
GLuint SZGLLoadTexture(Texture* texture, int startX){
    (*texture).startX = startX;
    return SZGLLoadTexture((*texture).imagePath, &(*texture).imageSize, &(*texture).textureSize);
}
のように texture を *texture とすればさっきと同じように . で中のデータを使えるようになります。または
GLuint SZGLLoadTexture(Texture* texture, int startX){
    texture->startX = startX;
    return SZGLLoadTexture(texture->imagePath, &texture->imageSize, &texture->textureSize);
}
のように . の代わりに -> を使う方法もあります。こちらの方が一般的な気がしますね。 ただまあ、ここではポインタを使うのは無駄なので、さっきと同じように
GLuint SZGLLoadTexture(Texture& texture, int startX){
    texture.startX = startX;
    return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);
}

でいいと思います。


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

Name:  ..入門者(3,157ポイント)   Date: 2010/07/31(土) 05:30   No:57852 解決!     
Title: Re:OpenGL ESでの範囲指定でのテクスチャの読み込み    
遅くなってすみません。
お陰さまで解決できました!!
アドバイスありがとうございました。
本当に助かりました><


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



Name: ねんどじん  ..初心者(5,304ポイント)   Date: 2010/07/31(土) 00:46   No:57841       
Title: 初歩的な質問ですみません    
前回はお世話になりました。また質問したいことがあるのできました。

自分でDXライブラリをつかってゲームを作ってみようと思い、新しくプロジェクトを作ってから
DXライブラリ置き場に書いてあった「使い方説明」どおりにプロジェクトの
プロパティを設定して、以下のプログラムを組み、デバッグを開始したところ、以下のエラーが出ました。
解読しようとしましたがよくわからなかったので、解決方法を教えてください。

#define GLOBAL_INSTANCE     //他のファイルとの差別化に必要
#include"../include/GV.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK||SetDrawScreen(DX_SCREEN_BACK)!=0
        ||DxLib_Init()==-1)return -1;

    WaitKey();
    DxLib_End();
    return 0;
}

1>------ ビルド開始: プロジェクト: Escape, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(5) : error C2146: 構文エラー : ';' が、識別子 'WinMain' の前に必要です。
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(5) : error C2065: 'HINSTANCE' : 定義されていない識別子です。
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(5) : error C2146: 構文エラー : ')' が、識別子 'hInstance' の前に必要です。
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(5) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(6) : error C2059: 構文エラー : ')'
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(7) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(7) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
1>ビルドログは "file://c:\Users\hiroyuki\Desktop\Escape\Escape\Debug\BuildLog.htm" に保存されました。
1>Escape - エラー 7、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


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


Name: ねんどじん  ..初心者(5,321ポイント)   Date: 2010/07/31(土) 00:50   No:57843     
Title: Re:初歩的な質問ですみません    
書き忘れていました、VC++2008 ExpressEditionをつかっています。

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

Name: ドラ  ..中級者(10,114ポイント)   Date: 2010/07/31(土) 01:31   No:57844     
Title: Re:初歩的な質問ですみません    
DXライブラリを使うには "DxLib.h" をインクルードする事が必要です。

また基本的に、DxLib_Init()を実行するよりも前にDXライブラリの関数を呼び出してはいけません。
ChangeWindowMode() のように DxLib_Init() よりも前に呼び出すことができる関数も存在しますが、
このタイプの関数の方が例外であり、限られています。


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

Name: ねんどじん  ..初心者(6,260ポイント)   Date: 2010/07/31(土) 01:52   No:57845     
Title: Re:初歩的な質問ですみません    
上のプログラムを書き変えてみたところ、他のエラーが出てしまったのですが・・・
何の事だかさっぱりです。よければご教示ください。

#define GLOBAL_INSTANCE    //他との差別化のために必要
#include"../../../include/DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
 if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK||DxLib_Init()==-1||
   SetDrawScreen(DX_SCREEN_BACK)!=0)return -1;
     //ウィンドウモード、裏画面描画、DXライブラリ初期化処理

    WaitKey();
    DxLib_End();//DXライブラリ終了処理
    return 0;
}



1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_execute_transformation が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_execute が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_adjust_parameters が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_request_workspace が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_setup が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _write_stdout が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_stdin が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_scan_script が関数 _parse_switches で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _keymatch が関数 _parse_switches で参照されました。
1>C:\Users\hiroyuki\Desktop\Escape\Escape\Debug\Escape.exe : fatal error LNK1120: 外部参照 9 が未解決です。
1>ビルドログは "file://c:\Users\hiroyuki\Desktop\Escape\Escape\Debug\BuildLog.htm" に保存されました。
1>Escape - エラー 10、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,243,457ポイント)   Date: 2010/07/31(土) 01:57   No:57846     
Title: Re:初歩的な質問ですみません    
WinMainでエラーが起きているので、
GV.hの中に問題があるんじゃないでしょうか。
GV.hの中にDxLib.hのincludeはありますか?


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

Name: ねんどじん  ..初心者(6,622ポイント)   Date: 2010/07/31(土) 02:15   No:57847     
Title: Re:初歩的な質問ですみません    
回答遅くなってしまいすみません

>>Dixqさん
龍神録遊ばせていただきました!とても面白かったです。
そこで龍神録プログラミングの館で配布されているprojectの、「〜章」を一つだけ
用意したもの(datとincludeはprojectから抜きました)を自分で用意しようと思ったのですが、
projectのryujin.slnだとmain.cppに書いたプログラムが正常に動くのに、
自分で新たに作成したプロジェクトだと動かないのです。
なにか特別な設定をしなければならないのでしょうか?


えっとすみません、プログラムを組みなおしたときに、
GV.h自体消してしまいました。

なので今はWinMainの前でDxLib.hをincludeしています。
ちなみに前、GV.hがあった時にはそこに以下のように書いていました。

#include<math.h>
#include"../../../include/DxLib.h"


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

Name: ISLe  ..中級者(9,648ポイント)   Date: 2010/07/31(土) 02:41   No:57848     
Title: Re:初歩的な質問ですみません    
> 1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_execute_transformation が関数 _main で参照されました。
(略)
> 1>Escape - エラー 10、警告 0
> ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


プロジェクトのプロパティで、『構成プロパティ→リンカ→システム』の『サブシステム』の項目が『Windows』になっているか確認してください。
#『コンソール』になっていませんか?


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

Name: ねんどじん  ..初心者(6,860ポイント)   Date: 2010/07/31(土) 02:53   No:57850 解決!     
Title: Re:初歩的な質問ですみません    

>>ISLeさん
遅い時間にご返答いただきすみません。
もろ#『コンソール』でした
『Windows』に変更すると問題なく動きました!的確な指摘ありがとうございました。
ゲーム作る前にVC++の使い方覚えなきゃと痛感しました。
これでこの質問は解決にしたいと思います。返答していただいた方々ありがとうございます。


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



Name: 初心者  ..熟練のプログラマー(50,509ポイント)   Date: 2010/07/30(金) 21:49   No:57824       
Title: 初歩的な質問ですが    
メニューに「プロジェクト」が無いんですが・・・
どうしてでしょうか?


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


Name: 初級者  ..初心者(8,587ポイント)   Date: 2010/07/30(金) 22:07   No:57825     
Title: Re:初歩的な質問ですが    
使っている「ソフトウェア名」を書いてほしいんですが・・・
どうして書かないんでしょうか?


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

Name: 初心者  ..熟練のプログラマー(50,517ポイント)   Date: 2010/07/30(金) 22:13   No:57826     
Title: Re:初歩的な質問ですが    
すみません
C++2010です


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

Name: もぐりん  ..かけだし(1,036ポイント)   Date: 2010/07/30(金) 22:31   No:57827     
Title: Re:初歩的な質問ですが    
Visual C++.net 2010なのか、C++Builder 2010なのか、どちらでしょうか?

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

Name: 初心者  ..熟練のプログラマー(50,537ポイント)   Date: 2010/07/30(金) 22:34   No:57828     
Title: Re:初歩的な質問ですが    
またまたすみません
Visual C++です


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,243,150ポイント)   Date: 2010/07/30(金) 23:20   No:57830     
Title: Re:初歩的な質問ですが    
プロジェクトを作って無いからじゃないですか?
プロジェクトを作ればメニューバーに「プロジェクト」が出てきますよ。


「初心者」というお名前は使わないようお願いさせて頂いているお名前ですので、
何か固有のお名前を決めて頂けると幸いです。詳しくは利用規約をご覧ください。
http://dixq.net/board/board.html


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



Name: jay  ..上級者(18,829ポイント)   Date: 2010/07/29(木) 00:46   No:57696       
Title: DXライブラリのアーカイブ機能    
先日僕がゲームを公開した時はアーカイブファイルの”dat.dxa”がzip内にあり
プログラムを起動してもちゃんと読み込むことができていました。

しかし修正版を作ったいま、何故か読み込むことが出来ないのです。
ただのフォルダの状態だとちゃんと読み込んでくれるので、ファイルの参照場所の指定は間違っていないハズなのですが・・・。

色々試しているのですが、何が原因で突然読み込んでくれなくなったのか皆目見当がつきません。

何か解決策になりそうな方法
またはDXライブラリのアーカイブ機能以外で、同じような形にファイルを纏める方法は無いでしょうか。


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


Name: ookami  ..プログラマー(37,471ポイント)   Date: 2010/07/29(木) 12:26   No:57718     
Title: Re:DXライブラリのアーカイブ機能    
それはさすがに どんな修正をしたか書かないと
分からないのでは...^^;

とりあえず、
「画像を表示するだけのプログラム」でも作って、
DXアーカイブの問題なのか、そうでないのかを切り分けては
いかがでしょうか。


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

Name: シエル  ..プログラマー(37,900ポイント)   Date: 2010/07/29(木) 16:42   No:57740     
Title: Re:DXライブラリのアーカイブ機能    
コードを提示するか、色々実験してみて、問題を切り分けましょう。

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

Name: DVDM [URL]  ..熟練のプログラマー(55,615ポイント)   Date: 2010/07/29(木) 18:26   No:57763     
Title: Re:DXライブラリのアーカイブ機能    
>>jayさん
・アーカイブするためのソフトをもう一度インストールし直す
・本当にパスが合っているのかもう一度確認する
・以前公開時に作った .dxa のデータを一度削除してからもう一度アーカイブする
・アーカイブしてからファイル名を変更してしまった

と思いついた感じではこんな所なのですが
色々試したと仰っているので既にこれもお試しになりましたよね…。


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

Name: jay  ..上級者(19,156ポイント)   Date: 2010/07/29(木) 21:30   No:57774     
Title: Re:DXライブラリのアーカイブ機能    
「画像を表示するだけのプログラム」は既に試してみました。
テストプログラムは問題なく動作したのでDXアーカイブ事態に問題はないと思います。

修正した箇所は、先日みなさんに指摘して頂いたことをそのまま実行したことと
ゲームバランスに関する部分を修正したことくらいなのです。

・アーカイブするためのソフトをもう一度インストールし直す 
・本当にパスが合っているのかもう一度確認する 
・以前公開時に作った .dxa のデータを一度削除してからもう一度アーカイブする

以上は既に一通り試していますが効果はありあせんでした。
また
・アーカイブしてからファイル名を変更してしまった

ということもありません。


現状はアーカイブする前のただのフォルダの状態だと、正常に読み込んでくれます。
そのフォルダをアーカイブして元のフォルダと入れ替えるとなぜか読み込んでくれないのです。
試しにそのアーカイブフォルダを解凍して元通りにしてみるとまた読み込んでくれたり。

もう少し色々試してみて、上手くいかないようなら他の方法を試すべきなのかもしれませんね・・・。
とにかく、自分でもさらに色々試してみます。


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

Name: jay  ..上級者(19,232ポイント)   Date: 2010/07/30(金) 16:23   No:57806 解決!     
Title: Re:DXライブラリのアーカイブ機能    
う〜ん、やはりどうにも解決しないですね・・・。

やはり他の手を使うことにします、失礼しました。
ご協力して下さったみなさま、ありがとうございました。


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

Name: ru-pu  ..かけだし(1,251ポイント)   Date: 2010/07/30(金) 23:06   No:57829     
Title: Re:DXライブラリのアーカイブ機能    
使っているDXライブラリのバージョンは最新ですか?

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



Name: じぇれみあ  ..ぴよぴよ(35ポイント)   Date: 2010/07/30(金) 18:30   No:57813       
Title: タイトルから次の画面へ    
タイトルで、スペースキーを押されたら次の画面に進むようにしたいので、とりあえず画面を黒くしたいのですが、
if (Key[KEY_INPUT_SPACE]==1){
            
DrawBox(0,0,640,480,black,TRUE);


これではスペースを押しても一瞬しか黒くなりません。
どうしても他のやり方が思いつかないのですが・・・
初歩的な質問ですが教えていただければ幸いです。


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


Name: シエル  ..プログラマー(38,282ポイント)   Date: 2010/07/30(金) 18:54   No:57815     
Title: Re:タイトルから次の画面へ    
スペースを押したらフラグを立てる。

フラグが立ってるときに描画する。

以上。


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

Name: じぇれみあ  ..ぴよぴよ(64ポイント)   Date: 2010/07/30(金) 19:41   No:57816     
Title: Re:タイトルから次の画面へ    
それは具体的にどうすればいいんでしょうか・・・?
int next;
if (y==280&&Key[KEY_INPUT_SPACE]==1){
next=1;
if (next==1){
DrawBox(0,0,640,480,black,TRUE);
}            
}
こういうことでしょうか・・・(-_-;)


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

Name: dic  ..比類無きプログラマー(88,451ポイント)   Date: 2010/07/30(金) 20:12   No:57818     
Title: Re:タイトルから次の画面へ    
プログラムの基本構造
「選択」を考えればいけるでしょうね


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

Name: シエル  ..プログラマー(38,249ポイント)   Date: 2010/07/30(金) 20:32   No:57820     
Title: Re:タイトルから次の画面へ    
ループさせているのであれば、常にループしていることを意識して。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,242,990ポイント)   Date: 2010/07/30(金) 20:44   No:57821     
Title: Re:タイトルから次の画面へ    
状態を示す変数が必要ですね。
Statesという状態を表す変数を使って描画する関数を分けるプログラムを書いてみました。

#include "DxLib/DxLib.h"

void menu0(){
    DrawBox(0,0,640,480,GetColor(100,0,0),TRUE);
    DrawString(100,100,"メニュー0です",GetColor(0,0,0));
}

void menu1(){
    DrawBox(0,0,640,480,GetColor(100,100,0),TRUE);
    DrawString(100,100,"メニュー1です",GetColor(0,0,0));
}

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){

    int States = 0;

    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
 
    while(!ScreenFlip()&&!ProcessMessage()&&!ClearDrawScreen()&&!CheckHitKey(KEY_INPUT_ESCAPE)){

        switch(States){
            case 0:
                menu0();
                if(CheckHitKey(KEY_INPUT_1)==1){
                    States=1;
                }
                break;
            case 1:
                menu1();
                if(CheckHitKey(KEY_INPUT_0)==1){
                    States=0;
                }
                break;
        }
    }
    DxLib_End();
    return 0;
}


0キーや1キーを押してみて下さい。
キーを離しても状態が維持され続けるはずです。

キー入力により状態を変えたらその状態を維持し、処理を分ける必要がありますね。


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

Name: じぇれみあ  ..ぴよぴよ(5ポイント)   Date: 2010/07/30(金) 21:04   No:57823 解決!     
Title: Re:タイトルから次の画面へ    
できました!!

教えてくれた皆さん、ありがとうございました!!


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +