C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   実行ファイル(.exe) ....   
     ・[51430] たかぎ 
   Win32 API について。   
     ・[51417] たかぎ 
   VC2008 deleteの挙動に ....   
     ・[51404] たかぎ 
     ・[51405] ねこ 
     ・[51406] たかぎ 
     ・[51408] ねこ 
   アーカイブファイルを ....   
     ・[51384] たかぎ 
     ・[51385] たろう 
     ・[51386] たかぎ 
     ・[51387] たろう 
     ・[51388] softya 
     ・[51389] たろう 
     ・[51390] softya 
     ・[51392] たろう 
     ・[51393] やんち 
     ・[51394] softya 
     ・[51395] たろう 
     ・[51396] たろう 
     ・[51397] softya 
     ・[51398] softya 
     ・[51402] たろう 
   g++ Makefileについて   
     ・[51372] やんち 
     ・[51373] ubu 
     ・[51374] Justy 
     ・[51375] ubu 
     ・[51376] Justy 
     ・[51377] Justy 
     ・[51378] ubu 
     ・[51379] Justy 
     ・[51401] ubu 
   キャラクター画像の分 ....   
     ・[51324] ookami 
     ・[51325] wing 
     ・[51326] ライス 
     ・[51327] wing 
     ・[51380] ライス 
   変数、配列の課題   
     ・[51254] softya 
     ・[51255] たかぎ 
     ・[51256] にん 
     ・[51257] ひよこ 
     ・[51259] たいちう 
     ・[51262] たかぎ 
     ・[51368] にん 
   VC++2008がダウンロー ....   
     ・[51357] ぽこ 
     ・[51365] lbfuvab 
     ・[51367] ゆうき 
   NULL について   
     ・[51352] たかぎ 
     ・[51354] ムンバ 
     ・[51356] ムンバ 
     ・[51358] ムンバ 
     ・[51359] やんち 
     ・[51360] ムンバ 
     ・[51361] たかぎ 
     ・[51362] やんち 
     ・[51363] ムンバ 
     ・[51364] ムンバ 
   正規表現   
     ・[51205] box 
     ・[51206] るい 
     ・[51207] Ma 
     ・[51213] なっきー 
     ・[51246] dic 
     ・[51347] hoge 
   Winsock2 生ソケット? ....   
     ・[51334] たいちう 
   .libと.LIBについて   
     ・[51305] ookami 
     ・[51319] ペイント 
     ・[51320] bear 
   AA動画作成について質 ....   
     ・[51292] Dixq (管理人) 
     ・[51297] ふじ 
     ・[51302] Dixq (管理人) 
     ・[51306] ふじ 
   管理人さんへ   
     ・[51281] Dixq (管理人) 
     ・[51303] 楓実 
   文字の上の部分がきれ ....   
     ・[51285] Ma 
     ・[51301] ボビー 
   VC++2008EEで、1バイト ....   
     ・[51295] たいちう 
     ・[51296] たいちう 
     ・[51298] non 
     ・[51299] non 
     ・[51300] non 
   C言語におけるファイル ....   
     ・[51275] なっきー 
     ・[51276] やっくん 
     ・[51278] たかぎ 
     ・[51282] やっくん 
     ・[51288] やっくん 
     ・[51289] やっくん 
     ・[51290] たいちう 
     ・[51293] やっくん 
   画像分割方法について ....   
     ・[51253] softya 
     ・[51271] 初心者 
   デスクトップで実行す ....   
     ・[51263] Justy 
     ・[51264] ぽこ 
     ・[51270] ookami 
   ソースの評価と今後へ ....   
     ・[51211] やんち 
     ・[51212] ぽこ 
     ・[51214] たかぎ 
     ・[51218] dic 
     ・[51219] softya 
     ・[51220] たかぎ 
     ・[51233] たいちう 
     ・[51269] 白 
   gcc インラインアセン ....   
     ・[51117] たかぎ 
     ・[51137] カレポテ 
     ・[51155] たかぎ 
     ・[51189] カレポテ 
     ・[51265] もぐりん 
   LB_SELECTSTRINGについ ....   
   C言語勉強法について   
     ・[51194] サウス 
     ・[51195] なっきー 
     ・[51196] やっくん 
     ・[51258] ぽん 
   Box2DのDebugDrawの使 ....   
     ・[51247] Justy 
     ・[51249] ハルキ 
     ・[51250] Justy 
   VC++でパスワード入力 ....   
     ・[51131] たいちう 
     ・[51157] ムンバ 
     ・[51177] 真由美 
     ・[51187] バグ 
     ・[51191] 真由美 
     ・[51235] 真由美 
     ・[51239] たいちう 
     ・[51248] 真由美 
   batファイルでのメモリ ....   
     ・[51224] dic 
     ・[51245] dic 
   srandとSRandについて   
     ・[51242] Justy 
     ・[51243] あ〜る 
   関数が順番通りに呼ば ....   
     ・[51171] ぽこ 
     ・[51173] たいちう 
     ・[51179] box 
     ・[51185] dic 
     ・[51241] dic 
   VC++での文字列の二次 ....   
     ・[51232] たいちう 
     ・[51234] 真由美 
     ・[51240] Justy 
   VC.netで動的にtextbo ....   
     ・[50968] たいちう 
     ・[51069] 真由美  
     ・[51238] 真由美 
   VC++ デスクトップの背 ....   
     ・[51079] Justy 
     ・[51129] 真由美 
     ・[51237] 真由美 
   VC++で配列を使ったプ ....   
     ・[51184] Justy 
     ・[51186] 真由美 
     ・[51236] 真由美 
   Windows 7でJava   
     ・[51167] ぽこ 
     ・[51221] J 
     ・[51222] Ma 
     ・[51226] J 
     ・[51227] dic 
     ・[51228] J 
     ・[51229] J 
     ・[51230] dic 
   Box2Dのマウスジョイン ....   
     ・[51017] Justy 
     ・[51027] るー 
     ・[51086] るー 
     ・[51100] Justy 
     ・[51113] るー 
     ・[51149] Justy 
     ・[51154] Justy 
     ・[51216] るー 
     ・[510141274077574] るー 
   printfにおける%dと引 ....   
     ・[51066] YuO 
     ・[51068] たかぎ 
     ・[51081] softya 
     ・[51083] たかぎ 
     ・[51084] pie 
     ・[51085] たかぎ 
     ・[51088] アス 
     ・[51097] たかぎ 
     ・[51209] アス 
     ・[51210] アス 
   40a. について、2つ質 ....   
     ・[51144] ookami 
     ・[51164] てとら 
     ・[51174] ひよこ 
     ・[51175] ookami 
     ・[51180] Dixq (管理人) 
     ・[51204] てとら 
   第5章の消す部分がわ ....   
     ・[51140] ookami 
     ・[51182] Dixq (管理人) 
     ・[51197] アクア 
     ・[51198] ROM 
     ・[51199] box 
     ・[51203] アクア 
   scanfについて   
     ・[51156] たかぎ 
     ・[51158] asdf 
     ・[51159] たかぎ 
     ・[51160] asdf 
     ・[51161] たかぎ 
     ・[51162] asdf 
     ・[51163] たかぎ 
     ・[51200] asdf 
     ・[51202] TKOZ 
   3D当たり判定   
     ・[51109] Ma 
     ・[51115] softya 
     ・[51118] たいちう 
     ・[51121] tokage 
     ・[51133] tokage 
     ・[51136] ookami 
     ・[51170] tokage 
     ・[51193] tokage 
   C++ クラスの保存の仕 ....   
     ・[51063] YuO 
     ・[51065] Justy 
     ・[51074] たいちう 
     ・[51077] やっくん 
     ・[51190] やっくん 
   C言語の課題について   
     ・[50995] フリオ 
     ・[51057] バーナー ブルース 
     ・[51151] ウルスラ 
     ・[51153] box 
     ・[51188] ウルスラ 
   得点設定   
     ・[51123] たいちう 
     ・[51183] Dixq (管理人) 
   龍神録ベースの自分の ....   
     ・[51082] softya 
     ・[51125] パンヤ 
     ・[51145] ookami 
     ・[51146] パンヤ  
     ・[51148] ookami 
     ・[51181] Dixq (管理人) 
   OpenCVで画素に直接ア ....   
     ・[51176] ookami 
   ファイル書き込みで・ ....   
     ・[51090] ひよこ 
     ・[51119] ookami 
     ・[51124] ひよこ 
     ・[51134] ookami 
     ・[51138] Justy 
     ・[51143] ookami 
     ・[51165] ひよこ 
   デバッグ開始時にエラ ....   
     ・[51104] ぽこ 
     ・[51147] ookami 
     ・[51152] Justy 
   文字列の数字を整数に ....   
     ・[51139] sizuma 
     ・[51141] わんわん 
     ・[51142] わんわん 
   #include につきまして ....   
     ・[51106] ぽこ 
     ・[51107] たかぎ 
     ・[51108] ムンバ 
     ・[51126] ムンバ 
   char型変数の先頭4byt ....   
     ・[51093] 組木紙織 
     ・[51098] たかぎ 
     ・[51103] lbfuvab 
     ・[51114] ookami 
     ・[51122] たかぎ 
   フォントサイズを連続 ....   
     ・[51043] Ma 
     ・[51050] Justy 
     ・[51061] HK 
     ・[51067] Justy 
     ・[51102] HK 
   ゲーム作成で質問です ....   
     ・[51095] マッキー 
   再び学校の宿題に困っ ....   
     ・[51021] たいちう 
     ・[51022] c++初心者 
     ・[51023] たいちう 
     ・[51024] c++初心者 
     ・[51025] たいちう 
     ・[51054] c++初心者 
     ・[51055] ぽこ 
     ・[51087] c++初心者 
   for文の()内の i ++   
     ・[51039] softya 
     ・[51040] たかぎ 
     ・[51042] 初級者 
     ・[51047] Dixq (管理人) 
     ・[51064] ごぼうどん 
     ・[51080] softya 
   ウインドウモードの処 ....   
     ・[51016] Ma 
     ・[51072] Blue 
     ・[51075] Ma 
   5目並べを作っておりま ....   
     ・[51008] たいちう 
     ・[51071] アルル 
     ・[51073] たいちう 
   無題   
     ・[51052] Justy 
     ・[51056] マッキー 
     ・[51058] Justy 
     ・[51060] マッキー 
   教えてください!   
     ・[51051] softya 
     ・[51053] ペイント 
   入門書の次は?   
     ・[51046] Dixq (管理人) 
     ・[51049] なっきー 
   スパイウェアについて ....   
     ・[50954] たかぎ 
     ・[50957] ぽこ 
     ・[50966] ムンバ 
     ・[51033] dic 
     ・[51037] ムンバ 

Name: たろう  ..かけだし(1,883ポイント)   Date: 2010/05/01(土) 22:46   No:51424       
Title: 実行ファイル(.exe)のコマンドライン引数を設定    
実行ファイル(.exe)のコマンドライン引数を設定するにはどうすればよいのでしょうか?

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


Name: たかぎ [URL]  ..ハッカー(178,912ポイント)   Date: 2010/05/01(土) 23:10   No:51430     
Title: Re:実行ファイル(.exe)のコマンドライン引数を設定    
コマンドプロンプトで、実行ファイル名に続けて、空白文字で区切って並べるだけです。


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



Name: RYOUDE  ..ぴよぴよ(78ポイント)   Date: 2010/05/01(土) 21:04   No:51415       
Title: Win32 API について。    
WindowsアプリケーションをWin32 APIとC++で作っているのですが、
自分の力では解決できないエラーが起きて困っています。
よろしくおねがいします。

以下ソースコード。

[game_window.h]

#ifndef GAME_WINDOW
#define GAME_WINDOW

#include <windows.h>
#include <tchar.h>

class Edit_window
{
protected:
    WNDCLASSEX wc;
    HWND hWnd;
    MSG msg;
    virtual LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp )=0;
};

class Map_Edit:public Edit_window
{
  public:
    void initialize_wc(HINSTANCE hInst);
    int start(HINSTANCE hInst);
    int update();
    LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
};
#endif
 
[game_window.cpp]

#include "game_window.h"

int Map_Edit::start(HINSTANCE hInst)
{
    initialize_wc(hInst);    
// ウィンドウクラスを登録する
    if( RegisterClassEx( &wc ) == 0 )
    {
        return NULL;
    }

    hWnd = CreateWindow(
        wc.lpszClassName,      // ウィンドウクラス名
        _T("Sample Program"),  // タイトルバーに表示する文字列
        WS_OVERLAPPEDWINDOW,   // ウィンドウの種類
        CW_USEDEFAULT,         // ウィンドウを表示する位置(X座標)
        CW_USEDEFAULT,         // ウィンドウを表示する位置(Y座標)
        CW_USEDEFAULT,         // ウィンドウの幅
        CW_USEDEFAULT,         // ウィンドウの高さ
        NULL,                  // 親ウィンドウのウィンドウハンドル
        NULL,                  // メニューハンドル
        hInst,                 // インスタンスハンドル
        NULL                   // その他の作成データ
    );
    if( hWnd == NULL )
    {
        MessageBox( NULL, _T("ウィンドウの作成に失敗しました"), _T("エラー"), MB_OK );
        return 1;
    }

    // ウィンドウを表示する
    ShowWindow( hWnd, SW_SHOW );
    UpdateWindow( hWnd );
}

void Map_Edit::initialize_wc(HINSTANCE hInst)
{    
    // ウィンドウクラスの情報を設定
    wc.cbSize = sizeof(wc);               // 構造体サイズ
    wc.style = CS_HREDRAW | CS_VREDRAW;   // スタイル
    wc.lpfnWndProc = &Map_Edit::WndProc;             // ウィンドウプロシージャ
    wc.cbClsExtra = 0;                    // 拡張情報1
    wc.cbWndExtra = 0;                    // 拡張情報2
    wc.hInstance = hInst;                 // インスタンスハンドル
    wc.hIcon = (HICON)LoadImage(          // アイコン
        NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON,
        0, 0, LR_DEFAULTSIZE | LR_SHARED
    );
    wc.hIconSm = wc.hIcon;                // 子アイコン
    wc.hCursor = (HCURSOR)LoadImage(      // マウスカーソル
        NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR,
        0, 0, LR_DEFAULTSIZE | LR_SHARED
    );
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // ウィンドウ背景
    wc.lpszMenuName = NULL;                     // メニュー名
    wc.lpszClassName = _T("Default Class Name");// ウィンドウクラス名
}

int Map_Edit::update()
{
    while(1){
        BOOL ret = GetMessage( &msg, NULL, 0, 0 );  // メッセージを取得する
        if( ret == 0 || ret == -1 )
        {
            break;
        }
        else
        {
            // メッセージを処理する
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
    }
}
LRESULT CALLBACK Map_Edit::WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
    switch( msg )
    {
    case WM_DESTROY:  // ウィンドウを破棄するとき
        PostQuitMessage( 0 );
        return 0;
    }

    // 他のメッセージは、デフォルトの処理を行う
    return DefWindowProc( hWnd, msg, wp, lp );
}

[起きるエラー]

コンパイルしています...
game_windows.cpp
.\game_windows.cpp(41) : error C2440: '=' : 'LRESULT (__stdcall Map_Edit::* )(HWND,UINT,WPARAM,LPARAM)' から 'WNDPROC' に変換できません。
        この変換が可能なコンテキストはありません。


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


Name: たかぎ [URL]  ..ハッカー(178,814ポイント)   Date: 2010/05/01(土) 21:56   No:51417     
Title: Re:Win32 API について。    
非静的メンバ関数へのポインタは、通常の関数へのポインタと互換性がありません。
設計を見直してください。


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



Name: ねこ  ..熟練のプログラマー(52,437ポイント)   Date: 2010/05/01(土) 12:59   No:51403       
Title: VC2008 deleteの挙動について    
お久しぶりです。
少々調べても分からない、というよりどう調べると良いのか分からない事が発生したので質問します。
動的にメモリを確保する際以下のように記述したとします。

int* pi = new int[ 100 ];
delete pi;

こうするとpiに代入されるポインタから「sizeof(int)*100」分のメモリが確保され、
deleteで解放されると思います。

この挙動を特に調べたわけでもなく自作するメモリ管理構造のように、ポインタアドレス等をキーに
確保したサイズとかの情報をどこかに確保しているのだと思っていました。

ところが先日とあるソース内に違和感を感じる処理がありました。上述したソースを流用して同じことを書くと

(処理1)
int* aryP[ 10 ];
for( int i = 0; i < 10; i++ )
    aryP[ i ] = pi + i * 10;

(処理2)
for( int i = 0; i < 10; i++ )
    delete aryP[ i ];

この処理を通るようにしても落ちたりはしなかったんですが、
たまたまなのか最適化によって上手く変換されてるのか分かりません。

処理2では確かに確保した領域のアドレスを渡してると思うのですが、
そもそもループ最初の「delete aryP[ 0 ]」でどれだけのメモリが解放されているのか・・・
そのあたりがよく分からないので質問します。

1.newで確保した情報はどのように管理されているのか
2.delete時は内部的にどのような処理が走るのか
3.1、2の管理はもしかしてコンパイラやOS依存になるのか

実行環境は
VC2008 OS WinXP Home SP3になります。







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


Name: たかぎ [URL]  ..ハッカー(178,657ポイント)   Date: 2010/05/01(土) 13:20   No:51404     
Title: Re:VC2008 deleteの挙動について    
> int* pi = new int[ 100 ]; 
> delete pi; 

これは間違いです。
正しくは、次のようにしなければなりません。

int* pi = new int[ 100 ]; 
delete [ ] pi; 

> 1.newで確保した情報はどのように管理されているのか 

Visual C++の場合、定義し直していなければ、大域的なoperator newのメモリ管理方法はmallocと同じです。

> 2.delete時は内部的にどのような処理が走るのか 

配列形式のdelete式では、配列の各要素に対してデストラクタを呼び出します。
そして、メモリを解放します。
Visual C++の場合、定義し直していなければ、大域的なoperator deleteのメモリの解放はfreeと同じです。

> 3.1、2の管理はもしかしてコンパイラやOS依存になるのか 

メモリの管理方法ということであれば、処理系に依存します。


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

Name: ねこ  ..熟練のプログラマー(52,885ポイント)   Date: 2010/05/01(土) 13:50   No:51405 解決!     
Title: Re:VC2008 deleteの挙動について    
>たかぎさん
回答ありがとうございます。

< これは間違いです。 
< 正しくは、次のようにしなければなりません。 
< int* pi = new int[ 100 ];  
< delete [ ] pi;

忘れてました・・・そういえば配列は[]でした、気をつけます。


<1.newで確保した情報はどのように管理されているのか  
<<Visual C++の場合、定義し直していなければ、大域的なoperator newのメモリ管理方法はmallocと同じです。 
なるほど、書き方が変わるだけでmallocと変化が無いのですね

<2.delete時は内部的にどのような処理が走るのか  
<<配列形式のdelete式では、配列の各要素に対してデストラクタを呼び出します。 
<<そして、メモリを解放します。 
<<Visual C++の場合、定義し直していなければ、大域的なoperator deleteのメモリの解放はfreeと同じです。 
ということはどんどんアドレスを進めて行ってどこかで未使用領域と判定出来る何かがあるか、またはアドレスに対するサイズがあるという認識で良いのでしょうか。

<3.1、2の管理はもしかしてコンパイラやOS依存になるのか  
<<メモリの管理方法ということであれば、処理系に依存します。 
なるほど。ちょっと機会があれば触ってみようと思います。


自分で疑問に思ってたことは単純に「[]」忘れによるものな気がしてきました。
現物ソースでちゃん見れてたか不安になってきたので、再度見直してこようと思います。
見直してなお何かしら疑問に思ったら再度質問させて頂こうと思います。

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


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

Name: たかぎ [URL]  ..ハッカー(178,762ポイント)   Date: 2010/05/01(土) 13:56   No:51406     
Title: Re:VC2008 deleteの挙動について    
> なるほど、書き方が変わるだけでmallocと変化が無いのですね 

mallocと同じなのは、メモリ管理方法だけです。
new式の動作は、大雑把にいうと次のようになります。

1. mallocでメモリを割付ける。
2. メモリの割付けに失敗した場合、set_new_handlerで登録した関数があればそれを呼び出す。そうでなければ、std::bad_alloc例外を送出する。
3. メモリの割付けに成功するまで1.と2.を繰り返す。
4. コンストラクタを呼び出す。
5. コンストラクタから例外が送出された場合、operator deleteを呼び出してメモリを解放する。


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

Name: ねこ  ..熟練のプログラマー(52,924ポイント)   Date: 2010/05/01(土) 14:59   No:51408     
Title: Re:VC2008 deleteの挙動について    
詳しい解説ありがとうございます。

生成時はそのような処理になっているのですね。
大変参考になりました。ありがとうございます。


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



Name: たろう  ..ぴよぴよ(987ポイント)   Date: 2010/04/30(金) 21:31   No:51381       
Title: アーカイブファイルを作成(解凍)    
アーカイブファイルを作成(解凍)するプログラムが組みたいのですが、やり方がわかりません。
どういう風に作ればよいのでしょうか?本やサイトなどありましたら、教えてください。よろしくお願いします。


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


Name: たかぎ [URL]  ..ハッカー(178,515ポイント)   Date: 2010/04/30(金) 22:26   No:51384     
Title: Re:アーカイブファイルを作成(解凍)    
環境不明ですが、一番簡単なのは、外部コマンドを呼び出す方法です。


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

Name: たろう  ..かけだし(1,045ポイント)   Date: 2010/04/30(金) 22:33   No:51385     
Title: Re:アーカイブファイルを作成(解凍)    
返信ありがとうございます。すみません。環境はVC++2005です。外部コマンドを呼び出すとはどういったことをするのでしょうか。それとアーカイブファイル作成は圧縮(解凍も)です。

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

Name: たかぎ [URL]  ..ハッカー(178,431ポイント)   Date: 2010/04/30(金) 22:41   No:51386     
Title: Re:アーカイブファイルを作成(解凍)    
> 外部コマンドを呼び出すとはどういったことをするのでしょうか。

tar、zip(unzip)、lhaといったコマンドを、systemやfork + execlpで呼び出すやりかたを想定していました。
Visual C++ 2005なら、Windows流のやりかたを使ってください(CUIかGUIかもわかりませんので)。


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

Name: たろう  ..かけだし(1,074ポイント)   Date: 2010/04/30(金) 22:46   No:51387     
Title: Re:アーカイブファイルを作成(解凍)    
返信ありがとうございます。GUIです。winodow流のやり方とはどういう風に作ればよいのでしょうか?参考になるサイトがありましたら教えてください。よろしくお願いします。

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

Name: softya [URL]  ..ハッカー(153,075ポイント)   Date: 2010/04/30(金) 22:59   No:51388     
Title: Re:アーカイブファイルを作成(解凍)    
世の中には沢山の圧縮・解凍DLLを提供してくれている方がいますので、そのDLL毎のAPIに沿って呼び出すだけで圧縮・解凍ソフトを作ることが出来ます。
http://www.madobe.net/archiver/index.html
こちらの開発室で、いくつかソースコードが公開されていますので参考にしてください(少し古いですが)。


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

Name: たろう  ..かけだし(1,007ポイント)   Date: 2010/04/30(金) 23:13   No:51389     
Title: Re:アーカイブファイルを作成(解凍)    
回答ありがとうございます。探したのですがそれらしきファイルが見つからないんですがソースコードはどこにあるのでしょうか。お手数おかけします。

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

Name: softya [URL]  ..ハッカー(153,123ポイント)   Date: 2010/04/30(金) 23:17   No:51390     
Title: Re:アーカイブファイルを作成(解凍)    
こちらに紹介されています。
http://www.madobe.net/archiver/dev/main.html
     ------C/C++関係------
のリンクをたどってください。


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

Name: たろう  ..かけだし(1,047ポイント)   Date: 2010/04/30(金) 23:31   No:51392     
Title: Re:アーカイブファイルを作成(解凍)    
すみません。どこにもないのですが。。。どこにあるのでしょうか?あと環境はVC++2005なのですが大丈夫なのでしょうか?

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

Name: やんち [URL]  ..かけだし(1,025ポイント)   Date: 2010/04/30(金) 23:39   No:51393     
Title: Re:アーカイブファイルを作成(解凍)    
> こちらに紹介されています。
http://www.madobe.net/archiver/dev/main.html
>      ------C/C++関係------
> のリンクをたどってください。
リンク切れになってるみたいですね。

・Common Archivers Library
  http://www.csdinc.co.jp/archiver/
から、たどってみて下さい。

Windows 用の解説もたぶん、圧縮・展開に関しては、最大手なので、大丈夫でしょう。


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

Name: softya [URL]  ..ハッカー(153,315ポイント)   Date: 2010/04/30(金) 23:51   No:51394     
Title: Re:アーカイブファイルを作成(解凍)    
>すみません。どこにもないのですが。。。どこにあるのでしょうか?

間違ってミラー版のサイトのリンクを貼ってしまいましたね。
ただ、私のところからはリンク出来てますけど・・・。

最初の方のコードなら
http://www.geocities.co.jp/SiliconValley-SanJose/9190/archive/toc.html
にあります。

>あと環境はVC++2005なのですが大丈夫なのでしょうか?

そのまま使うわけじゃないですよね?
あくまで参考用としてください。
VC++6とかならコンバートで動くとは思うんですが。


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

Name: たろう  ..かけだし(1,091ポイント)   Date: 2010/04/30(金) 23:55   No:51395     
Title: Re:アーカイブファイルを作成(解凍)    
たどってみましたが、Common Archivers Library ファイル自体がありません。どこなのでしょうか?何度もすみません。


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

Name: たろう  ..かけだし(1,204ポイント)   Date: 2010/05/01(土) 00:00   No:51396     
Title: Re:アーカイブファイルを作成(解凍)    
スース見ることができました。
>そのまま使うわけじゃないですよね? 
>あくまで参考用としてください。 
>VC++6とかならコンバートで動くとは思うんですが。
はい、そのまま使おうとしていました。参考用ですか。
VC2005はサンプルはないのでしょうか?


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

Name: softya [URL]  ..ハッカー(153,532ポイント)   Date: 2010/05/01(土) 00:04   No:51397     
Title: Re:アーカイブファイルを作成(解凍)    
>たどってみましたが、Common Archivers Library ファイル自体がありません。どこなのでしょうか?何度もすみません。 

「Common Archivers Library ファイル自体」と言うのが何の事かイマイチ分かりませんが、
http://www.geocities.co.jp/SiliconValley-SanJose/9190/archive/arcdll.html
の一番下にソースコードとテストプロジェクトがあります。

もしかして、「Common Archivers Library」自体を探してますか?
UNLHA32.DLLとか、UNZIP32.DLLかはこちらから探して必要なのをダウンロードして下さい。
http://www.csdinc.co.jp/archiver/lib/main.html


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

Name: softya [URL]  ..ハッカー(153,689ポイント)   Date: 2010/05/01(土) 00:14   No:51398     
Title: Re:アーカイブファイルを作成(解凍)    
>はい、そのまま使おうとしていました。参考用ですか。
>VC2005はサンプルはないのでしょうか?

自分でプログラムを作りたいんですよね?
であれば、ソースコードを動くように移植するだけでも良い勉強なりますよ。
やってみて分からないことがあれば、また聞いてください。

だだ、VC2005で読み込ませればVC2005がコンバートしてくれるので、そのままコンパイル出来ると思うんですけどね。


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

Name: たろう  ..かけだし(1,252ポイント)   Date: 2010/05/01(土) 11:19   No:51402 解決!     
Title: Re:アーカイブファイルを作成(解凍)    
わかりました!またわからなくなったら質問させていただきます!回答ありがとうございました。

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



Name: ubu  ..ぴよぴよ(264ポイント)   Date: 2010/04/30(金) 16:27   No:51371       
Title: g++ Makefileについて    
はじめまして。

現在、gcc version 4.3.3の環境でC++のプログラミングをしようとしています。
ソースコードは添付しました。

ターミナルから

make dep
make

と実行すると
A.cpp:6: error: ‘A’ has not been declared
.
.
.
と、ヘッダーの参照ができていないようです。
恐らくMakefileの書き方がおかしいのだと思いますが、
どこをどのように変更すべきなのでしょうか?
ちなみに、Makefileは以下のページのものをそのまま引用させていただきました。

Makefile覚書
ttp://apollon.cc.u-tokyo.ac.jp/~watanabe/tips/makefile.html

不備がありましたら、追記させていただきます。


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


Name: やんち  ..ぴよぴよ(242ポイント)   Date: 2010/04/30(金) 16:58   No:51372     
Title: Re:g++ Makefileについて    
> ソースコードは添付しました。 
ソースコード見れませんね。


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

Name: ubu  ..ぴよぴよ(281ポイント)   Date: 2010/04/30(金) 17:19   No:51373     
Title: Re:g++ Makefileについて    
申し訳ありませんでした。
再度添付し直します。


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

Name: Justy  ..伝説なるハッカー(524,702ポイント)   Date: 2010/04/30(金) 18:12   No:51374     
Title: Re:g++ Makefileについて    
 A.hのインクルードガードが変です。
 よく見直しましょう。


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

Name: ubu  ..ぴよぴよ(346ポイント)   Date: 2010/04/30(金) 18:24   No:51375 解決!     
Title: Re:g++ Makefileについて    
明らかにおかしかったですね。
#if !HEADER_NAME_Hで無事通りました。
初歩的な質問で申し訳ありませんでした。
ご回答有難うございました。


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

Name: Justy  ..伝説なるハッカー(524,789ポイント)   Date: 2010/04/30(金) 18:39   No:51376     
Title: Re:g++ Makefileについて    
>#if !HEADER_NAME_Hで無事通りました
 一見通ったかのように見えますが、それではダメだと思います。
 試しに main.cppで A.hを2回インクルードしてみてください。


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

Name: Justy  ..伝説なるハッカー(524,832ポイント)   Date: 2010/04/30(金) 19:03   No:51377     
Title: Re:g++ Makefileについて    
 参考までに。

インクルードガード
http://www.02.246.ne.jp/~torutk/cxx/file/includeguard.html


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

Name: ubu  ..ぴよぴよ(388ポイント)   Date: 2010/04/30(金) 19:40   No:51378     
Title: Re:g++ Makefileについて    
> 試しに main.cppで A.hを2回インクルードしてみてください。 

operator '!' has no right operand
とエラーが出ます。

次に
#ifndef HEADER_NAME_H

では無事にコンパイルが通りました。

なぜこうなるのかがイマイチ理解できないのですが・・・?


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

Name: Justy  ..伝説なるハッカー(526,468ポイント)   Date: 2010/04/30(金) 20:26   No:51379     
Title: Re:g++ Makefileについて    
 最初に投稿されたものは

#ifdef INCLUDE_A_H
#define INCLUDE_A_H
#endif

でした。
 これは #ifdefが使われているので INCLUDE_A_Hが定義されているときのみ
#endifまでが有効になります。

 従って定義されていれば2行目の #defineによって INCLUDE_A_Hが定義されるということになり、
定義されていなければ #defineによる INCLUDE_A_H定義が行われない、という大きな矛盾を
抱えたものでした。

 次に

#if !HEADER_NAME_H
#define INCLUDE_A_H
#endif

とすると、最初の段階で HEADER_NAME_Hが未定義であれば、INCLUDE_A_Hは 0に置き換えられます。
 その為 #if !0となり、結果は真なので2行目の #defineによって HEADER_NAME_Hが「空」として
定義されます。
 
 ここまではいいのですが、これを2回目以降評価する時には #ifの行で INCLUDE_A_Hが
先の #defineによって既に定義されているので「空」に置き換えられます
 するとこの行は #if ! となり、 !を単独でつけても評価できずエラーになります。

 で、最後に

#ifndef INCLUDE_A_H
#define INCLUDE_A_H
#endif

もしくは

#if !defined(INCLUDE_A_H)
#define INCLUDE_A_H
#endif

とすれば INCLUDE_A_Hが未定義の時のみ #endifまでが有効となるので、INCLUDE_A_Hの定義が
なければ #defineで INCLUDE_A_Hを定義するとなります。
 2回目以降の評価の時は当然 INCLUDE_A_Hが定義済みであり #ifの条件を満たさないので
以降は無視されます。
 これで正しくインクルードガードとして機能する、というわけです。


2倍のポイントを手に入れた! 1,636ポイント を手に入れた。

Name: ubu  ..ぴよぴよ(420ポイント)   Date: 2010/05/01(土) 09:06   No:51401     
Title: Re:g++ Makefileについて    
よく理解できました。
詳しく解説していただき、本当に有難うございました。


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



Name: ライス  ..ぴよぴよ(404ポイント)   Date: 2010/04/28(水) 21:40   No:51322       
Title: キャラクター画像の分割と4方向への歩かせ方    
ゲームプログラミングの館で学習している、C言語初心者です。
キャラクター画像の分割と、4方向への歩かせ方でつまづいてしまいました。
もともとサンプルにある画像ではできたのですが、http://www.tekepon.net/fsm/のDOWNLOADSの「VX版キャラクター」にある画像ではできませんでした。
それから、背景も一緒に写ってしまいます。
画像は、横に3・縦に4・合計12枚に分割して、画像1枚のサイズは32×48になると思います。
画像のキャラクターの向きは、1番上が前向き・2番目が左向き・3番目が右向き・4番目が後ろ向きです。
(すみません…画像は公開していいのか分からなかったので…)
どなたかその画像の分割方法、そしてそれを4方向に歩かせる方法を教えてください。
それと、背景を写らなくする方法を教えてください。
よろしくお願いします。

(補足)
・開発環境は、「Microsoft Visual C++ 2008 Express Edition」を利用しています。
・ライブラリは、DXライブラリを利用しています。 編集済み


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


Name: ookami  ..初心者(6,617ポイント)   Date: 2010/04/28(水) 21:59   No:51324     
Title: Re:キャラクター画像の分割と4方向への歩かせ方    
こんばんは。

「もともとサンプルにある画像ではできた」ということは、単に分割のしかたと参照のしかたでしょうね。具体的には、ソースと元画像が分からないとなんとも言えませんが...。

素材サイトの画像なら、でどころ(URLなど)をちゃんと明記すれば問題ないと思います。
ただ、このサイトの素材投稿板の場合は、アップした人が独自に規約を書いている場合がありますから、ご注意ください。

背景色については、
SetTransColor で背景色の指定を変更するか、
元の画像の背景色を黒(0,0,0)にするのがいいと思います。


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

Name: wing  ..初心者(8,333ポイント)   Date: 2010/04/28(水) 22:15   No:51325     
Title: Re:キャラクター画像の分割と4方向への歩かせ方    
背景色というのはキャラの画像のバックの色でしょうか。
それなら一番簡単な方法は、画像ソフトでバックの色を
色域指定で選択して消してしまい透明にしてしまえばいいと思います。


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

Name: ライス  ..かけだし(2,204ポイント)   Date: 2010/04/28(水) 22:23   No:51326     
Title: Re:キャラクター画像の分割と4方向への歩かせ方    
投稿者です。
やはり画像がないと答えづらいと思うので、画像を添付します。
添付画像は、http://www.tekepon.net/fsm/のREFMAPが配布しているフリー画像素材です。
よって、著作権はREFMAPに帰属します。
ソースについては、

#include "DxLib.h"

typedef struct{
    int x , y , img , muki , walking_flag ;
} ch_t ;

int hantei [ 15 ] [ 20 ] = {
    { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 } ,
    { 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 } ,
    { 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 } ,
    { 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 } ,
    { 1 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 0 , 1 } ,
    { 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 1 } ,
    { 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 } ,
    { 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 } ,
    { 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 } ,
    { 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 1 } ,
    { 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 0 , 1 } ,
    { 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 } ,
    { 1 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 } ,
    { 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 } ,
    { 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 } ,
} ;

int can_or_cannot ( int x , int y , int muki ) {
    if ( muki == 0 )
        if ( hantei [ y / 32 - 1 ] [ x / 32 ] == 1 )
            return 1 ;
    
    if ( muki == 1 )
        if ( hantei [ y / 32 ] [ x / 32 - 1 ] == 1 )
            return 1 ;
    
    if ( muki == 2 )
        if ( hantei [ y / 32 + 1 ] [ x / 32 ] == 1 )
            return 1 ;
    
    if ( muki == 3 )
        if ( hantei [ y / 32 ] [ x / 32 + 1 ] == 1 )
            return 1 ;
    
    return 0 ;
}

int WINAPI WinMain ( HINSTANCE hinstance, HINSTANCE hprevInstance, LPSTR loCmaLine, int CmaShow ) {
    int image [ 12 ] , i , j ;
    char Key [ 256 ] ;
    ch_t ch ;

    if ( ChangeWindowMode ( TRUE ) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1 ;

    ch.x    = 32 ;
    ch.y    = 448 ;
    ch.walking_flag    = 0 ;
    ch.muki    = 0 ;
    int Color_Yellow = GetColor ( 255 , 255 , 0 ) ;
    int Color_White = GetColor ( 255 , 255 , 255 ) ;
    
    SetDrawScreen ( DX_SCREEN_BACK ) ;
    LoadDivGraph ( "$vx_chara09_d.png" , 12 , 3 , 4 , 32 , 48 , image ) ;

    while ( ! ProcessMessage() && ! ClearDrawScreen() && ! GetHitKeyStateAll ( Key ) && ! Key [ KEY_INPUT_ESCAPE ] ) {
        
        for ( i = 0 ; i < 15 ; i++ )
            for ( j = 0 ; j < 20 ; j++ )
                if ( hantei [ i ] [ j ] == 1 )
                    DrawBox ( j * 32 , i * 32 , ( j + 1 ) * 32 , ( i + 1 ) * 32 , Color_White , TRUE ) ;
        
        if ( ch.x % 32 == 0 && ch.y % 32 == 0 ) {
            ch.walking_flag = 1 ;
            
            if    ( Key [ KEY_INPUT_UP ] == 1 )
                ch.muki = 0 ;
            else if ( Key [ KEY_INPUT_LEFT ] == 1 )
                ch.muki = 1 ;
            else if ( Key [  KEY_INPUT_DOWN ] == 1 )
                ch.muki = 2 ;
            else if ( Key [ KEY_INPUT_RIGHT ] == 1 )
                ch.muki = 3 ;
            else
                ch.walking_flag = 0 ;
            
            if ( ch.walking_flag == 1 )
                if ( can_or_cannot ( ch.x , ch.y , ch.muki ) == 1 )
                    ch.walking_flag = 0 ;
        }

        if ( ch.walking_flag == 1 ) {
            if    ( ch.muki == 0 )
                ch.y-- ;
            else if ( ch.muki == 1 )
                ch.x-- ;
            else if ( ch.muki == 2 )
                ch.y++ ;
            else if ( ch.muki == 3 )
                ch.x++ ;
        }

        ch.img = image [ ( ch.x % 32 + ch.y % 32 ) / 8 + ch.muki * 4 ] ;

        DrawCircle ( 400 , 240 , 16 , Color_Yellow ) ;
        
        DrawGraph ( ch.x , ch.y , ch.img , TRUE ) ;

        ScreenFlip() ;
    }
    WaitKey() ;
    DxLib_End() ;
    return 0 ;
}

すみません…。
どこまで必要になるか分からなかったので、とりあえず全部書きました。
では、改めてよろしくお願いします。 編集済み


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

Name: wing  ..初心者(8,435ポイント)   Date: 2010/04/28(水) 23:02   No:51327     
Title: Re:キャラクター画像の分割と4方向への歩かせ方    
このサンプルは、縦4、横4の画像でうまく動くようにできているので、
私だったら、プログラムの変更を考えるより、画像をプログラムにあわせます。
具体的には、縦の2列目の止まっている画像をコピーして
一番左側に貼り付けて、縦4、横4にしちゃいます。

参考にならないと思いますので、他の方の意見を聞いてください。


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

Name: ライス  ..かけだし(2,231ポイント)   Date: 2010/04/30(金) 20:32   No:51380 解決!     
Title: Re:キャラクター画像の分割と4方向への歩かせ方    
投稿者です。
ありがとうございます。
ちゃんと出来ました。


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



Name: にん  ..ぴよぴよ(222ポイント)   Date: 2010/04/25(日) 21:27   No:51252       
Title: 変数、配列の課題    
初めまして、プログラミング初心者です。
C言語で変数、配列の課題がどうしてもわからないので質問させていただきます。


5人の生徒がテストを受けた。点数の集計をするプログラムを作成せよ。

条件
・番号(1〜5)と点数(0〜10)を入力すると番号と点数を表として表示する
・番号に0を入力すると点数の入力は終了する


OSはwindows、コンパイラはBorand C++です。
まだ本当に始めたばかりでC言語の知識は皆無に等しいです…。よろしくお願いします。


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


Name: softya [URL]  ..ハッカー(152,493ポイント)   Date: 2010/04/25(日) 22:23   No:51254     
Title: Re:変数、配列の課題    
質問に答えるために幾つかお願いがあります。スムーズに回答するために必要な事柄ですのでぜひお願いします。
・自分が習っている言語の規格(CにもC89やC99など幾つか規格があります)を分かりましたら教えて下さい。
・自分はどこまで理解しているのか、学校ではどこまで習ったのか明確にして下さい。特に使って良い関数の制限などが分かると答えやすいです。無制限なら無制限と書いて下さいね。
・自分で書いたソースプログラムがあるなら提示をお願いします。
・ソースが有る場合は、自分が書いたソースプログラムはどこからどこまでなのか教えて下さい。
詳しくはこの掲示板の使い方をご覧ください→ http://dixq.net/board/board.html

基本的にお手伝いをするスタンスですので、直接的な答えはなるべく書かないと思います。


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

Name: たかぎ [URL]  ..ハッカー(177,963ポイント)   Date: 2010/04/25(日) 22:41   No:51255     
Title: Re:変数、配列の課題    
> まだ本当に始めたばかりでC言語の知識は皆無に等しいです…。

だったら、まずは一通りのことができるようになるまで勉強しましょう。
話はそれからです。


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

Name: にん  ..ぴよぴよ(360ポイント)   Date: 2010/04/25(日) 23:10   No:51256     
Title: Re:変数、配列の課題    
>softyaさん
ご指摘ありがとうございます。

・言語の規格についてはわかりません。
・授業で基礎の基礎的なことを受けましたが、内容を完全には理解していません。
・関数はmain関数を使っていますが、制約は特に無いと思います。
・途中まで書いたプログラムがこちらです。

#include<stdio.h>
int main(void)
{
    int a;
    int i[3];
    i[0] = 10;
    i[1] = 20;
    i[2] = 30;



>たかぎさん
期限が迫っていますのでやむを得なく質問させていただきました。
少しでもC言語を理解できるよう、努力いたします。


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

Name: ひよこ  ..比類無きプログラマー(82,422ポイント)   Date: 2010/04/25(日) 23:18   No:51257     
Title: Re:変数、配列の課題    
そのソースは内部で数値を決めて代入しています。
5人なのに配列が3つまでしかないのはおかしいですね。

まず、一人分だけの処理を作ってみましょう。
キーボードから入力してその値を変数に代入すればできます。
scanfについて調べてみてください。


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

Name: たいちう  ..比類無きプログラマー(76,642ポイント)   Date: 2010/04/25(日) 23:26   No:51259     
Title: Re:変数、配列の課題    
> 期限が迫っていますのでやむを得なく質問させていただきました。
> 少しでもC言語を理解できるよう、努力いたします。

義務教育が終了しているならば、真面目にやれば半日〜2日くらいで
課題が解ける程度のC言語が身に付くと思いますよ。
努力してください。


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

Name: たかぎ [URL]  ..ハッカー(178,238ポイント)   Date: 2010/04/26(月) 00:12   No:51262     
Title: Re:変数、配列の課題    
一応書いておきますが、このまま写して提出しても確実にバレます。

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

int main(void) 
{
    int table[5] = { 0 };
    size_t i;

    for (;;)
    {
        char s_number[1+1], s_score[2+1];
        int number, score;

        puts("番号(1〜5)と点数(0〜10)を入力してください。");

        if (scanf(" %1[0-5]", s_number) < 1)
            continue;
        number = s_number[0] - '0';
        if (number == 0)
            break;

        if (scanf(" %2[0-9]", s_score) < 1)
            continue;
        score = atoi(s_score);
        if (score > 10)
            continue;

        table[number - 1] = score;
    }
    puts("番号 点数");
    for (i = 0; i < sizeof table / sizeof table[0]; i++)
        printf("%4d %4d\n", (int)(i + 1), table[i]);
    return 0; 



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

Name: にん  ..ぴよぴよ(475ポイント)   Date: 2010/04/30(金) 03:42   No:51368 解決!     
Title: Re:変数、配列の課題    
しばらく返信ができずすみませんでした。
課題の方は無事完成して提出することができました。

たかぎさん>
プログラムまで書いてくださって、わざわざありがとうございます。
まだ解らない関数がいくつかありますが、このような例もあるということで、今後の参考にさせていただきますね。


レスしてくださった皆さん、本当にありがとうございました!
これから頑張っていろいろ覚えていきたいと思います。
失礼いたしました。


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



Name: ゆうき  ..かけだし(1,372ポイント)   Date: 2010/04/30(金) 01:02   No:51355       
Title: VC++2008がダウンロードできなくなってしまい    
VC++2008がVC++2010になってしまいました。
以下はマイクロソフトのVC++2008を提供していたサイトのURLです。
http://www.microsoft.com/japan/msdn/vstudio/express/

ここのサイトに沿って勉強したいのでどうにか2008をインストールしたいのですが、どうすればいいのかわかりません。
どなたかご教授お願いします。



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


Name: ぽこ  ..中級者(10,560ポイント)   Date: 2010/04/30(金) 01:16   No:51357     
Title: Re:VC++2008がダウンロードできなくなってしまい    
英語サイトなら、ダウンロード出来るみたいですよ。
多分日本語版も落とせます。
http://www.microsoft.com/express/Downloads/#2008-Visual-CPP


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

Name: lbfuvab  ..プログラマー(25,664ポイント)   Date: 2010/04/30(金) 02:24   No:51365     
Title: Re:VC++2008がダウンロードできなくなってしまい    
isoファイルなら残っているはずですよ。
後はググって下さい。


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

Name: ゆうき  ..かけだし(1,404ポイント)   Date: 2010/04/30(金) 03:34   No:51367 解決!     
Title: Re:VC++2008がダウンロードできなくなってしまい    
みなさん御親切にありがとうございます!!

できました!


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



Name: ムンバ  ..プログラマー(35,572ポイント)   Date: 2010/04/30(金) 00:17   No:51351       
Title: NULL について    
こんばんは。お世話になります。<(_ _)>

先日は、#include について、ご意見ありがとうございました。
#include についての種別(種類・呼び名)は
ご指摘頂いた「前処理指令」という名称で(自分)落ち着きました。
ありがとうございました。

今回は、C言語での NULL の扱い方と言いますか(種類・呼び名・属性)?なのですが
自分自身への説明ができません。

例えば、C言語での

time は、関数という呼び方が慣用で
rand は、関数という呼び方が慣用で
const は、修飾子という呼び方が慣用で
main は、関数という呼び方が慣用で
(↑呼び方、間違ってるかもしれませんが、色々と参照した上ですので。)

以上の様な例での
私が自分自身で理解していると思われる範囲内での、分類と言いますか呼び方なのですが

NULL は、どういった種類や呼び名に属するのでしょうか?

以下は、検索をかけたサイトや、教本に記載されていた NULL についての
ご解説の一部を、箇条書きに羅列(られつ)させて頂きました。
     
・無い事を意味する。
・コード 0x00 の文字(C言語が、文字列の終わりを 0x00 で識別しているため)
・C言語で扱う文字列の終端には0が保存される。これをNULL文字と呼び
 繰り返し文などで文字列の終端を認識するために用いられる。

どうもうまくお伝えできなければ大変申し訳無いのですが
つまりC言語での NULL の扱いなのですが、関数とか修飾子とか、その他の名称?に区別するとすると
NULL は、どういう分類になるのでしょうか?

素朴(そぼく)な疑問で、すみません。

NULL は、0
NULL は、文字列の終端

などと呼ぶのでしたら、それはそれで・・・。^^;

Windows7(Pro 32bit)
Visual C++ 2008

誤字・脱字等御座いましたら、お手数ながらご指摘下さい。
なお、文中に悪意等は御座いませんので
お気に召さない語句や文章など御座いましたら、重ねてご指摘頂けます様、お願い申し上げます。

PS:NULLは、メモリの0番地なのですか? 編集済み


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


Name: たかぎ [URL]  ..ハッカー(178,373ポイント)   Date: 2010/04/30(金) 00:34   No:51352     
Title: Re:NULL について    
> ・コード 0x00 の文字(C言語が、文字列の終わりを 0x00 で識別しているため) 
> ・C言語で扱う文字列の終端には0が保存される。これをNULL文字と呼び 
>  繰り返し文などで文字列の終端を認識するために用いられる。 

上の2つは明らかな間違いです。
文字列の終端は「ナル文字」で、英語で書けばnull characterですが、マクロのNULLとはまったく別のものです。

NULLというのは、空ポインタ定数式に展開される「マクロ」です。

> PS:NULLは、メモリの0番地なのですか?

多くの実装ではそうなっていますが、規格上は決まっていません。


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

Name: ムンバ  ..プログラマー(35,669ポイント)   Date: 2010/04/30(金) 01:01   No:51354     
Title: Re:NULL について    
早速のご返答、どうもありがとうございます。

>上の2つは明らかな間違いです。

 http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_p07.htm
 http://www.skpme.com/c/

 などのページにて、そう記述されていました。

つまり、NULL の定義とは

>空ポインタ定数式に展開される「マクロ」

と、私の環境では認識させて頂いて宜しいのでしょうか?







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

Name: ムンバ  ..プログラマー(35,683ポイント)   Date: 2010/04/30(金) 01:06   No:51356     
Title: Re:NULL について    
つまり 0 との認識で宜しいのですよね?

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

Name: ムンバ  ..プログラマー(35,774ポイント)   Date: 2010/04/30(金) 01:17   No:51358     
Title: Re:NULL について    
何度も、申し訳御座いません。

>多くの実装ではそうなっていますが、規格上は決まっていません。

大変申し訳御座いませんが、多くの実装でどうなっているかは私には解りませんが
少ない実装では、どうなってるのでしょうか?


---追記---

たかぎさん、申し訳御座いません。
本日は寝てしまいますので、もしもご返答頂ければ
後日のレスとなってしまいます事、ご勘弁下さい。
すみません。おやすみなさい。(謝 編集済み


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

Name: やんち [URL]  ..ぴよぴよ(97ポイント)   Date: 2010/04/30(金) 01:20   No:51359     
Title: Re:NULL について    
少し、混同しているみたいですが、

「NULL」 と 「NULL文字」は違う物ですよ。

「NULL文字」について、説明しているサイトの内容を「NULL」について説明していると、
勘違いしそうなので、気をつけてください。


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

Name: ムンバ  ..プログラマー(35,851ポイント)   Date: 2010/04/30(金) 01:29   No:51360     
Title: Re:NULL について    
NULL の定義を、お聞きしたかっただけです。

やんちさん、ありがとうございます。
私が NULL について説明しているのでは御座いません。
説明ではなくて NULL の定義をお尋ねしてるのです。
ご意見ありがとうございます。

本当にすみません。今日は寝てしまいます。<(_ _)>
おやすみなさい。

---追記---
質問は、NULL文字ではなく、NULLの定義です。
ご了承下さい。
生意気言って、ごめんなさい。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(178,505ポイント)   Date: 2010/04/30(金) 01:44   No:51361     
Title: Re:NULL について    
> などのページにて、そう記述されていました。 

偽情報に惑わされてはいけません。
一次情報にあたりましょう。
http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010

> >空ポインタ定数式に展開される「マクロ」 
> と、私の環境では認識させて頂いて宜しいのでしょうか? 

処理系に不具合がなければ、あるいは非標準処理系でなければ、常にそうです。

> 大変申し訳御座いませんが、多くの実装でどうなっているかは私には解りませんが 
> 少ない実装では、どうなってるのでしょうか?

こちらを参考にしてください。
http://www.kouno.jp/home/c_faq/c5.html#5


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

Name: やんち  ..ぴよぴよ(227ポイント)   Date: 2010/04/30(金) 01:59   No:51362     
Title: Re:NULL について    
> http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_p07.htm
> http://www.skpme.com/c/
>
> などのページにて、そう記述されていました。 

上2つのページを見ると、どちらも「NULL文字」についての解説である事が確認できます。

「NULL」の説明ではないですよ。

> (この文字をナル文字、またはヌル文字と言います。)

> C 言語関数から返ってくる文字列には、最後に NULL 文字 chr(0) が付いて
> いる


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

Name: ムンバ  ..プログラマー(36,050ポイント)   Date: 2010/04/30(金) 02:05   No:51363 解決!     
Title: Re:NULL について    
深夜までご解説頂きまして、本当にありがとうございます!
(歯磨きしてました。ごめんなさい。<(_ _)>)

>偽情報に惑わされてはいけません。 
>一次情報にあたりましょう。

了解です。
おっしゃる通りだと思います。(感謝

ご紹介サイト、ありがとうございます。
見るまでに、しばしお時間下さい。
連休中の休みの日に、ご紹介頂いたサイトを参照させて頂きます。

・・・もう駄目です。くたばります。
ありがとうございました。<(_ _)>


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

Name: ムンバ  ..プログラマー(36,198ポイント)   Date: 2010/04/30(金) 02:18   No:51364 解決!     
Title: Re:NULL について    
あう!?

やんちさん、おっしゃる通り
そのサイトは、NULL文字についての解説なのですが
どうも、うまくお伝えできなくて申し訳御座いません。<(_ _)>

たかぎさんのご解説 No:51361 
が、私の聞きたかった事です。

私が記入したリンク先の参考サイトは、あくまでも参考サイトとしてでして・・・
本当に、うまくお伝えできなくて申し訳御座いませんでした。<謝
今後も、ご意見御座いましたら宜しくお願い致します。

またまたお騒がせして、すみませんでした。
ありがとうございました。
おやすみなさい。


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



Name: るい  ..ぴよぴよ(128ポイント)   Date: 2010/04/24(土) 17:43   No:51201       
Title: 正規表現    
C言語の標準関数に正規表現はないですよね?
たとえば
char moji[1024];
scanf("%s",&moji);
このようなソースがあったとして
「変更前:p」このように入力したとします。
そこでこのpという文字(または文字列にも対応)を
適当な文字列に置き換えたいのです。
(例1)「変更後:54862057」
(例2)「変更後:aegaokdai」

このような正規表現はどのように作成すればよろしいのでしょうか?


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


Name: box  ..ハッカー(152,355ポイント)   Date: 2010/04/24(土) 22:47   No:51205     
Title: Re:正規表現    
念のためにお聞きします。

> (例1)「変更後:54862057」

これは、

変更前:p
変更後:54862057

という結果を想定されているのですか?
また、

> (例2)「変更後:aegaokdai」

これは、

変更前:p
変更後:aegaokdai

という結果を想定されているのですか?

だとすると、いずれの例も正規表現とは関係ないように見えるのですけれど…。


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

Name: るい  ..ぴよぴよ(296ポイント)   Date: 2010/04/24(土) 22:59   No:51206     
Title: Re:正規表現    
すみません。
ちょっと言い方が悪かったかもしれません。

入力された文字列が
「abc!def」だったとします。
こうすると
moji[0] => a
moji[1] => b
moji[2] => c
moji[3] => !
moji[4] => d
moji[5] => e
moji[6] => f
となりますよね?
それで入力された文字列の中の「!」だけを
指定した文字列に変更したいのです。

変更前:abc!def
変更後:abc54862057def

こういうのって正規表現の置き換えって言うんですよね?


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

Name: Ma  ..比類無きプログラマー(91,718ポイント)   Date: 2010/04/25(日) 01:35   No:51207     
Title: Re:正規表現    
C++ なら std::string に replace 関数があります。
C言語ならループ等使って自力で計算するしかないんじゃないかな。


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

Name: なっきー  ..かけだし(1,210ポイント)   Date: 2010/04/25(日) 07:08   No:51213     
Title: Re:正規表現    
>変更前:abc!def
>変更後:abc54862057def
こういう処理だけなら

int i,x,y;
char array[256],view[256];
char array2[3][256];
scanf("%s",&array);
x = 0;
y = 0;
for(i=0; i<strlen(array); i++) {
if(array[i] != '!') {
array2[x][y] = array[i];
y++;
} else {
x++;
y = 0;
}
}
sprintf(view,"%s54862057%s",array2[0],array2[1]);
printf("変更前:%s\n",array);
printf("変更後:%s\n",view);

こんな感じで出来ると思います。
いま出先でPCがなく携帯から書き込みしてるのでテストはしてません…

もし私にミスがあったら申し訳ありません。
教えてください。


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

Name: dic  ..熟練のプログラマー(64,293ポイント)   Date: 2010/04/25(日) 18:23   No:51246     
Title: Re:正規表現    
「正規表現」
http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE

>それで入力された文字列の中の「!」だけを 
>指定した文字列に変更したいのです。 
それだけだと置換ですね


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

Name: hoge  ..入門者(4,353ポイント)   Date: 2010/04/29(木) 22:15   No:51347     
Title: Re:正規表現    
標準関数に正規表現はありません。
本当に正規表現が必要なら、非標準のライブラリを使うか
自分で正規表現処理プログラムを作る必要があります。

ただ、他の人が書いているように一文字を置換するだけなら正規表現は必要ありません。
Cの場合、元の文字列より変換後文字列が長くなるような変換はバッファの取り回しに気をつけなければならないでしょう。


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



Name: なっきー  ..かけだし(1,398ポイント)   Date: 2010/04/29(木) 01:24   No:51330       
Title: Winsock2 生ソケット? IPヘッダ作成?    
IPアドレスを偽装することができるような記事を読みました。
そんなこと可能なのでしょうか?

もし可能だとしたら、Web系で結構な被害があると思います。
防ぐことは可能なのでしょうか?



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


Name: たいちう  ..比類無きプログラマー(77,859ポイント)   Date: 2010/04/29(木) 11:10   No:51334     
Title: Re:Winsock2 生ソケット? IPヘッダ作成?    
> IPアドレスを偽装することができるような記事を読みました。
> そんなこと可能なのでしょうか?

可能です。


> もし可能だとしたら、Web系で結構な被害があると思います。
> 防ぐことは可能なのでしょうか? 

システム開発者やユーザーが「IPアドレスは偽装されているかもしれない」
ということを前提として設計・開発・使用すれば問題ないでしょう。


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



Name: ペイント  ..ぴよぴよ(189ポイント)   Date: 2010/04/27(火) 21:58   No:51304       
Title: .libと.LIBについて    
今現在一から竜神録を作ってみてはいるんですが、どうしても拡張子が.libや.LIBとなっているファイルをプロジェクトに追加することができません。
どうしたらいいでしょうか?
お願いします。


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


Name: ookami  ..初心者(6,209ポイント)   Date: 2010/04/27(火) 22:12   No:51305     
Title: Re:.libと.LIBについて    
開発環境によって違うので、開発環境を教えてください。

ついでに、windowsではファイル名に大文字小文字の区別はないので、.libと.LIBはわざわざ分けて書く必要はないかと。


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

Name: ペイント  ..ぴよぴよ(265ポイント)   Date: 2010/04/28(水) 19:50   No:51319     
Title: Re:.libと.LIBについて    
情報不足ですいません。
開発環境は「Microsoft Visual C++ 2008 Express Edition」です。
よろしくお願いします。

あと、なぜ大文字と小文字を区別して書いているのかも教えていただけたらありがたいです。


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

Name: bear  ..ぴよぴよ(85ポイント)   Date: 2010/04/28(水) 21:09   No:51320     
Title: Re:.libと.LIBについて    
大文字と小文字の区別はわからないですが、自分は

メニューバーの「プロジェクト」



「(プロジェクト名)のプロパティ」



構成プロパティ



リンカ



コマンドライン

にある追加オプションに書き込んでます。



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



Name: ふじ  ..ぴよぴよ(685ポイント)   Date: 2010/04/27(火) 17:09   No:51291       
Title: AA動画作成について質問    
こちらのAA動画作成について質問があります。
http://dixq.net/rakisuta.html


[1] 質問文
 [1.1] 自分が今行いたい事は何か
 AA動画作成の実際に映し出す側のプログラムのデバック
 AA動画作成のconvAA内に作成するプログラムは正常に実行されました。
 今度はdispAA内に作成するプログラムですが、コードをコピーしてMAXの値もconvAA内に作ったプログラムの値に書き換えてデバックしたのですが、エラーが出ます。

 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
 過去ログを検索して、それらしきところも修正したのですが、違うエラーメッセージが出て結局振り出しに戻ってしまいました…。

 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
 デバックしようとすると、下記のエラーメッセージが出て正常に実行できません。

 1>------ ビルド開始: プロジェクト: dispAA, 構成: Debug Win32 ------
1>コンパイルしています...
1>aa.cpp
1>c:\users\spinel\desktop\aamuvie\dispaa\dispaa\aa.cpp(128) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(237) : 'fopen' の宣言を確認してください。
1>マニフェストをリソースにコンパイルしています...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>リンクしています...
1>aa.obj : error LNK2019: 未解決の外部シンボル "void __cdecl draw_setumei(int,int,int,int)" (?draw_setumei@@YAXHHHH@Z) が関数 _WinMain@16 で参照されました。
1>aa.obj : error LNK2019: 未解決の外部シンボル "void __cdecl draw_fps(int,int,int,int)" (?draw_fps@@YAXHHHH@Z) が関数 _WinMain@16 で参照されました。
1>aa.obj : error LNK2019: 未解決の外部シンボル "void __cdecl fps_wait(void)" (?fps_wait@@YAXXZ) が関数 _WinMain@16 で参照されました。
1>aa.obj : error LNK2019: 未解決の外部シンボル "void __cdecl check_key(char * const)" (?check_key@@YAXQAD@Z) が関数 _WinMain@16 で参照されました。
1>C:\Users\spinel\Desktop\aamuvie\dispAA\Debug\dispAA.exe : fatal error LNK1120: 外部参照 4 が未解決です。
1>ビルドログは "file://c:\Users\spinel\Desktop\aamuvie\dispAA\dispAA\Debug\BuildLog.htm" に保存されました。
1>dispAA - エラー 5、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


 [1.4] 今何がわからないのか、知りたいのか
 上記のエラーメッセージの解決法を教えていただきたいです。
 よろしくお願いします。

      
[2] 環境  
 [2.1] OS :Windows7  64bit
 [2.2] コンパイラ名 :VC++ 2008EE

[3] その他 
 ・どの程度C言語を理解しているか
   →最近(2週間前くらい)からC言語の勉強を始めた超初心者です。


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


Name: Dixq (管理人)  ..ウィザード(1,181,479ポイント)   Date: 2010/04/27(火) 17:18   No:51292     
Title: Re:AA動画作成について質問    
これは確か必要な関数を全て記載していなかったのでは無いかと思います。
今現在このプログラムは手元にないので、アップ出来ませんが、
簡単な事しかしていませんから理屈がわかればすぐに作れると思います。
ちと時間がないので、必ず見れるかわからないのですが、帰宅したら一度良くみてみます。


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

Name: ふじ  ..ぴよぴよ(696ポイント)   Date: 2010/04/27(火) 17:47   No:51297     
Title: Re:AA動画作成について質問    
Dixq (管理人)様>
迅速なレスありがとうございます。
いろいろ検索かけてみたのですが、どうしてもわからなくて…。
これを機会にもっと勉強してみようと思います。
特に急ぎではありませんので、いつでも大丈夫です。
大変お手数おかけします…。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,182,455ポイント)   Date: 2010/04/27(火) 20:32   No:51302     
Title: Re:AA動画作成について質問    
DXライブラリの設定はあっていますか?

http://homepage2.nifty.com/natupaji/DxLib/dxuse.html

ここを見て設定を見直してみてください。
プログラム内で呼んでいる関数の実態があって、その宣言や定義が正しい事も確認してみてください。

しかし、このプログラムはこんな苦労してわざわざコピーしてもらうような代物ではありませんので・・。
自分で作ってもらった方が勉強にもなって早いと思います。

要するにピクセルの色を調べてその色に対応する文字に置き換えているだけです。
まず白黒AAの場合、
例えば3x4位のピクセルの色の平均を計算してみます。
色が濃ければ「@」のような表示面積の多い文字へ、色が薄ければ「.」などの表示面積の少ない文字に対応させます。
ひたすら画像全体をそうやって文字に置き換えたら良いだけの話です。

最後に、ここでネタばれというか、タネあかししますと・・
(よくある黒隠しにしてあります)

私はネタを提供する為に「カラーのAAを作ってみた」なんてことを言っていますが、
よく考えたら解ることで、色を付けるとAAの意味がなくなるのです。
白黒であれば、色の濃淡を文字で表現することに意味が出てきますが、
色を付けるならブロックでよいのです。画像全部「■」でよいわけです。
そうなればピクセルと一緒なんですから、ドット絵と一緒ですよね。
動画の中でもそれに気付いている方が何人かいらっしゃるようです。

AAを色つきにしてる人がいないのは、それに意味がないからです。
なので、苦労してわざわざやってもらうようなものではないですよ・・。

もし勉強の為にされるのでしたら、コピーではなく自分で実装してみてはどうでしょう?
DXライブラリでは文字の表示しかしてませんから、いたって簡単な事しかしてません。

1、ビットマップファイルから色情報を取ってくる。
2、特定の区間で色情報を文字に変換する。
3、変換したものを表示する

この3ステップあれば出来ます。


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

Name: ふじ  ..ぴよぴよ(827ポイント)   Date: 2010/04/27(火) 23:12   No:51306 解決!     
Title: Re:AA動画作成について質問    
Dixq (管理人)様>
DXライブラリですが、設定しなおしてみましたが同じ結果でした。
あと構造(タネあかし)を教えていただいてありがとうございます。
AA動画のコードを参考にさせていただきながら自分で作ってみようと思います!
レスありがとうございました!


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



Name: 楓実  ..ぴよぴよ(55ポイント)   Date: 2010/04/27(火) 00:52   No:51279       
Title: 管理人さんへ    
お忙しい中失礼いたします。
管理人さんのメールアドレスdixqhp@gmail.com宛てに
4月18日に、質問のメールを送信いたしました。

私のメールアドレスはドメインが@bma.biglobe.ne.jpです。
申し訳ないのですが、ご確認頂けないでしょうか。

どうかよろしくお願いいたします。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,181,346ポイント)   Date: 2010/04/27(火) 08:06   No:51281     
Title: Re:管理人さんへ    
> 楓実さん

先ほど確認し、メールお返ししました。
お返事遅くなってすみません。


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

Name: 楓実  ..ぴよぴよ(85ポイント)   Date: 2010/04/27(火) 21:55   No:51303 解決!     
Title: Re:管理人さんへ    
Dixqさん、メール確認致しました。
お忙しい中、返信して頂いてありがとうございます。


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



Name: ボビー  ..ぴよぴよ(440ポイント)   Date: 2010/04/26(月) 21:36   No:51272       
Title: 文字の上の部分がきれて表示されてしまいます。    
はじめまして
 プログラミングはまったくの初心者ですがゲームを作りたいと思ってる者です。
 ゲームプログラミングの館を見させていただいて、入門編からやっているのですがうまくい
 かないことがありまして、自分では原因が分からなかったので投稿させていただきました。
 
〜入門編〜の「0.(導入)DXライブラリを手に入れる。(全てはココから)」から
 1.→2.→3.と順番にやっていっていました。
 ですが、「6.文字を表示する。」でうまくいかないことがありました。
 コピー&コンパイル用サンプルプログラムをコピーペーストして実行したらDxLibという画面が出る
 のはいいのですが・・・
 ↓が表示される文字ですが。
 
 hello! DX Library!

             こんにちは! DXライブラリ!

 という表示の全ての文字の上のほうの部分がきれてしまうのです。
 例えば→Library!の『a』はまるで『α』のように、
     DXライブラリ!の『D』はまるで『U』のように、
                『ラ』はまるで『フ』のように、
     というふうに文字の上のほうがきれて表示されてしまいます。(※見た目の
     例えを言っただけで文字自体が別の文字に変わってしまうわけではありません)
◎何をどうすればちゃんと全部表示されるでしょうか?
 御回答よろしくお願いします。(ちなみに7節の表示でも同様のことがおきました、5
 節までは絵でしたのでこんなことは無かったと思いますが)

OSはWindowsXPを使っています、VisualC++2008ExplessEditionを使っています。
DXライブラリVisualC++用をダウンロードしています。
プログラミングやC言語についてまったくの初心者です。
同じような質問が過去にもしあったとしたらすいません。
初歩的な質問かもしれないですが、分かりやすい説明よろしくお願い致します。 編集済み


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


Name: Ma  ..比類無きプログラマー(92,057ポイント)   Date: 2010/04/27(火) 09:32   No:51285     
Title: Re:文字の上の部分がきれて表示されてしまいます。    
DirectX のバージョン、ライブラリのバージョン、それに、できればグラフィックカードや実行ファイル があると、
詳しく検証できるかと思います。

また、DrawFormatString とか、他の文字列描画関数も同様な症状がでますか?

文字が半分切れるのはライブラリ使用者側のミスでは普通おきない症状ですので、ライブラリとPCの相性(つまりライブラリの不具合)の可能性があります。

それから、リビルド、PCの再起動 などもお試しになりましたでしょうか?


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

Name: ボビー  ..ぴよぴよ(638ポイント)   Date: 2010/04/27(火) 19:35   No:51301 解決!     
Title: Re:文字の上の部分がきれて表示されてしまいます。    
回答していただきありがとうございます! 質問した者です。

おかげで解決することが出来ました!
 ご指摘の通りでした、再起動してからもう一度、前と同じ「コピー&コンパイ
 ル用サンプルプログラム」をコピーペーストして実行したら
 全然きれずに全部ちゃんと表示されました!!(びっくりしました)

恥ずかしい話ですが再起動するなんて思いつかなかったです。(以後気をつけます)
分かりやすく丁寧な回答で本当に本当にどうもありがとうございました。
おかげで気持ちよく次の節に進んでいけます。

↓バージョンなど
DirectXのバージョン       9.0c(4.09.0000.0904)
DXライブラリのバージョン  Ver3.02
グラフィックカード          ATI Radeon HD 2400 XT 編集済み


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



Name: non  ..比類無きプログラマー(96,518ポイント)   Date: 2010/04/27(火) 17:25   No:51294       
Title: VC++2008EEで、1バイト文字コード限定プログラム作成方法は?    
お久しぶりです。nonです。
Windows7の64ビットにしたら、なぜかBCCが動かなくなりました。どうせならと思い、
VC++2008EEに乗り換えることにしました。

さて、C言語プログラムで1バイト文字コードの下のプログラムを動かせるように設定するには
どうすればよろしいのでしょうか?
下のプログラムは小文字を大文字に変換しています。エラー処理なし。
#include <stdio.h>

void strupper(char *s)
{
    while(*s!='\0'){
        *s-=('a'-'A');
        s++;
    }
}

int main()
{
    char *str="abcdefg";
    strupper(str);
    printf("%s\n",str);
    return 0;
}

今の設定は、Win32コンソールアプリケーションで
コンソールアプリケーション、空のプロジェクト
ファイル名の拡張子を.cで、
コンパイル言語の選択を「Cコードとしてコンパイル(・TC)」
文字セット「マルチバイト文字セットを使用する」
char型を規定でunsignedを「はい」

にしてます。
コンパイルエラーはありませんが、実行すると暴走します。



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


Name: たいちう  ..比類無きプログラマー(76,799ポイント)   Date: 2010/04/27(火) 17:44   No:51295     
Title: Re:VC++2008EEで、1バイト文字コード限定プログラム作成方法は?    
char *str="abcdefg";

char str[]="abcdefg";


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

Name: たいちう  ..比類無きプログラマー(76,863ポイント)   Date: 2010/04/27(火) 17:46   No:51296     
Title: Re:VC++2008EEで、1バイト文字コード限定プログラム作成方法は?    
一応理由も。
http://www.google.co.jp/search?hl=ja&q=%E6%96%87%E5%AD%97%E5%88%97%E3%83%AA%E3%83%86%E3%83%A9%E3%83%AB+%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88&lr=&aq=f&aqi=&aql=&oq=&gs_rfai=


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

Name: non  ..比類無きプログラマー(96,582ポイント)   Date: 2010/04/27(火) 17:53   No:51298     
Title: Re:VC++2008EEで、1バイト文字コード限定プログラム作成方法は?    
たいちうさん、お久しぶりです。
確かに、それで動きますね。ということは、設定は良いということですね。

さて、そこで困った。
char *str="abcdefg"; 

どうして?あれ?どうしてだめなんですか?



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

Name: non  ..比類無きプログラマー(96,611ポイント)   Date: 2010/04/27(火) 17:55   No:51299     
Title: Re:VC++2008EEで、1バイト文字コード限定プログラム作成方法は?    
ああ、そうですね。うっかりしてました。お恥ずかしい。


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

Name: non  ..比類無きプログラマー(96,619ポイント)   Date: 2010/04/27(火) 17:58   No:51300 解決!     
Title: Re:VC++2008EEで、1バイト文字コード限定プログラム作成方法は?    
解決をつけるのを忘れてました。

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



Name: やっくん  ..上級者(18,157ポイント)   Date: 2010/04/26(月) 23:12   No:51274       
Title: C言語におけるファイル操作    
コンパイラ:VC2008

以下のC言語ソースコードでファイル(下記参照)から値を読み込む場合、int型で読み込む場合はエラーを吐かないんですが、unsigned char型にしたらファイルクローズする際にエラーが起こります。
どうしてでしょうか?

#include <stdio.h>

int main(void)
{
          int i;               // roop用
    char buff[256];      // buffer
    int a[10];           // ファイルの値格納先
    unsigned char b[10]; // ファイルの値格納先
    FILE *fp;

    fp = fopen("t.txt", "r");
    for(i = 0; i < 10; i++){
        fgets(buff, 256, fp);
        sscanf(buff, "%d", &b[i]);
        printf("%d\n", b[i]); //
    }
    fclose(fp);// 値格納先がunsigned char型の場合、ここでエラー
    return 0;
} 


<t.txt>
0
1
2
3
4
5
6
7
8
9
 編集済み


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


Name: なっきー  ..かけだし(1,280ポイント)   Date: 2010/04/26(月) 23:43   No:51275     
Title: Re:C言語におけるファイル操作    
sscanf(buff, "%d", &b[i]);
printf("%d\n", b[i]);
  
int型なら%dでもいいですが、
unsigned char型は%cを使わなければならないのでは・・・


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

Name: やっくん  ..上級者(18,457ポイント)   Date: 2010/04/27(火) 00:17   No:51276     
Title: Re:C言語におけるファイル操作    
返信ありがとうございます。
>unsigned char型は%cを使わなければならないのでは・・・
仰るとおりです(^^;
今まで%dは整数値を指定するものだからchar型で整数値を扱う場合にも使えるんじゃないかと思っておりました。
上のソースコードでも
sscanf(buff, "%d", &b[i]);
printf("%d\n", b[i]);
この部分は予期通りに普通に動いてしまいます。
エラーが出ているのがファイルクローズ時なのですが、どのような動作でエラーになっているかわかりますでしょうか?

また、unsigned char型にファイルから整数値を読み込みたいのですがどのようにすれば良いでしょうか?
0〜255の画素値を持つ画像を処理する場合などはint型では無駄にメモリを取ってしまうことになるので。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(178,327ポイント)   Date: 2010/04/27(火) 00:26   No:51278     
Title: Re:C言語におけるファイル操作    
> int型なら%dでもいいですが、 
> unsigned char型は%cを使わなければならないのでは・・・

%dと%cでは、型の大きさだけではなく、まったく意味が異なります。
本来であれば%hhdとすべきなのですが、VC++はサポートしていませんので、いったん%dを指定してintの変数で受けるか、文字列として取得して、変換するしかありません。


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

Name: やっくん  ..上級者(18,730ポイント)   Date: 2010/04/27(火) 08:23   No:51282     
Title: Re:C言語におけるファイル操作    
>たかぎさん
返信ありがとうございます。
途中、一度int型で受けてunsigned char型に変換すると後がスムーズに行きました。
出力する場合は整数型なので%dとして出力しましたが、%cにしてみるとビープ音やら不明な文字が出ました。
char型,unsigned char型はコンパイラで文字、または整数値の適切なものに勝手に識別してくれるようですね。

しかし、char型は1バイトのメモリを確保するのでsigned型なら-128〜127、unsigned型なら0〜255の数値を扱える訳ですがコンパイラではどのように文字か整数値かを識別してるのでしょうか?0〜255までフルにビットを使ったらその判定をする場所ができないようにも思えます。


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

Name: やっくん  ..上級者(18,701ポイント)   Date: 2010/04/27(火) 13:02   No:51288     
Title: Re:C言語におけるファイル操作    
自分で調べてみて自己解決しました。
scanfなどのようなものは%dだとint型のバイト数分を読み込み、printfなどの%dは整数型で表示する。
だから、unsigned char型をscanfでは%d指定できないが、printfなどでは%dが使える。
と判断しました。
文字と数字の識別も理解できました。

なっきーさん、たかぎさんありがとうございました。 編集済み


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

Name: やっくん  ..上級者(18,711ポイント)   Date: 2010/04/27(火) 13:08   No:51289 解決!     
Title: Re:C言語におけるファイル操作    
解決とさせていただきます。

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

Name: たいちう  ..比類無きプログラマー(76,785ポイント)   Date: 2010/04/27(火) 13:41   No:51290     
Title: Re:C言語におけるファイル操作    
> char 型,unsigned char型はコンパイラで文字、
> または整数値の適切なものに勝手に識別してくれるようですね。
> ...(略)
> コンパイラではどのように文字か整数値かを識別してるのでしょうか?
> 0〜255までフルにビットを使ったらその判定をする場所ができないようにも思えます。

そのような識別はされていませんよ。
もしかすると、数字が出力されたから適切な整数値に変換される、と考えたのでしょうか?

文字コード0x41(10進数で65)を指定すると文字'A'が出力されるのと同様に、
文字コード0x31(10進数で49)を指定すると文字'1'が出力されます。

↑このような事を言っているんじゃないやい、という場合は、
具体的に説明してください。


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

Name: やっくん  ..上級者(18,531ポイント)   Date: 2010/04/27(火) 17:25   No:51293     
Title: Re:C言語におけるファイル操作    
たいちうさん、返信ありがとうございます。

自分の勘違いなんですが、
char型は整数値と文字両方を扱えるってことなので、char型に整数値か文字どちらが入っているかわかる情報が無ければおかしい!!と思っていたんです。

よくよく考えれば、

>文字コード0x41(10進数で65)を指定すると文字'A'が出力される
このように文字'A'は文字コード0x41(10進数65)に対応しています。
これをCのソースにするとにすると、
char moji = 'A';
printf("%c", moji); // 出力は A
printf("%d", moji); // 出力は 65
こうなりますよね。
これがどうしてこうなるのかが良く理解できてませんでした。
今はようやく整理できました(^^;


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



Name: 初心者  ..熟練のプログラマー(47,358ポイント)   Date: 2010/04/25(日) 21:14   No:51251       
Title: 画像分割方法について質問させてください    
今、画像分割しようとしているのですが
分割してもしっかりとキャラ一人分に分割できません。
サンプルはできました。
分割したい画像は
http://f19.aaa.livedoor.jp/~koou/field/fighter/
これなのですが、
上記サイトの上から5番目の画像を右クリックして「名前をつけて保存」をして「サンプルプログラム実行用フォルダ」
に保存しました。
そして、
LoadDivGraph( "画像の保存名.png" , 96 , 12 , 8 , 24 , 24 , image );
このソースコードで分割しようとしました。
しかし、表示させても
 DrawGraph( 320 , 240 , image[0] , TRUE ) ;
サンプルの画像を分割したときみたいにキャラ一個分に分割できません。
どこに間違いがあるのでしょうか?
 編集済み


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


Name: softya [URL]  ..ハッカー(152,307ポイント)   Date: 2010/04/25(日) 22:21   No:51253     
Title: Re:画像分割方法について質問させてください    
>サンプルの画像を分割したときみたいにキャラ一個分に分割できません。 
この画像を貼ってもらうと分かりやすかったのですが、計算で確認できましたので回答します。

まず画像のドット数を確認してください。
288x256ドットみたいですから、
288/12=24
256/8=32
で縦のドット数が違います。
LoadDivGraph( "画像の保存名.png" , 96 , 12 , 8 , 24 , 32 , image );
じゃないですかね。


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

Name: 初心者  ..熟練のプログラマー(47,386ポイント)   Date: 2010/04/26(月) 20:57   No:51271 解決!     
Title: Re:画像分割方法について質問させてください    
ありがとうございました。
無事に表示できました。


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



Name: ookami  ..初心者(5,984ポイント)   Date: 2010/04/25(日) 23:54   No:51261       
Title: デスクトップで実行すると落ちる    
いつも勉強させてもらっています。建築会社でSEしてます。趣味でゲームプログラムしてます。ookamiと申します。

DXライブラリとLua を使って、ゲーム作成支援ツールを作っております。「ゲーム作りをもっと身近に」「小学生にもできる」を目指しているのですが、まだまだほど遠いです。

ぶしつけながら、当面、以下のようなことで困っております。どなたか分かる方、ご教示願えませんでしょうか...


■デスクトップで実行すると落ちる

以下のページから、拙作のツールをダウンロードすることができます。
http://oookami.sakura.ne.jp/htm/index.php?pageID=10

こちらの環境ですと、なぜかデスクトップで実行させるとウィンドウを生成した直後くらいに強制終了してしまいました。
【 環境 】
PC    acer 1.60GHz, 0.98GB RAM
OS    Windows XP Home Edition sp2
IDE等    Microsoft Visual C++ 2005 Express Edition
DirectX 9.0c
DXLib   2.25

フォルダにスペースや全角が入るといけないのかと思い、「C:\te stほげ」に移動してみたのですが、こっちでは問題なく動いてしまいました。初期化周りのソースをあたってみたのですがさっぱり分からず... どなたか同じような状況に陥った事ありませんか??

「src.lzh」にソース一式が入っており、aen.cpp の iniDxlib関数 でDxLibの初期化を実行しています。


--- 余談

ゲーム開発支援ツールといっても、既存のツールやライブラリ(Edge, Platinum, Lua, DXLib)をより使いやすく結合した(つもりの)ものでありまして、いわゆる「ツクール」シリーズのような統合開発環境ではないです。

ゲームを配布したことはあってもツールを配布したことはないので、同じような経験のある方いらっしゃいましたら、注意点などありましたらご教示ください。

著作権などに関する注意とか(ヘルプに一応のことは書いたつもりですが)、

利用者に対する配慮...など。

--- さらに余談

ツールとしての使い方は、サンプルを含めて index.htm に一通り記載しました。

もし使ってみてくださった方がいらっしゃいましたら、ぜひ忌憚のないご意見をお願いいたします。「イミフ」の一言でも参考にさせていただきます(極端か;)。


それでは、長文失礼しました。
 編集済み


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


Name: Justy  ..伝説なるハッカー(524,679ポイント)   Date: 2010/04/26(月) 00:46   No:51263     
Title: Re:デスクトップで実行すると落ちる    
>デスクトップで実行すると落ちる 
 うちの環境(WinXP pro Sp3 RAM2G)ではデスクトップにおいても普通に実行できました。
 ちょっと長めのフォルダ名や Unicode文字を含んだフォルダ名でも実行できました。

 VisualStudioをお使いのようですので、

・ デバッガの設定で作業ディレクトリをデスクトップにしてデバッグで実行してみる
・ 強制終了でダイアログがでるようなら、普通に exeを起動して、落ちたところで
(ダイアログが出ているところで)デバッガからアタッチして調べる

というのは既に試されていますでしょうか?


>ゲーム開発支援ツール
 面白い試みですね。
 時間のあるときにでも遊んでみます。


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

Name: ぽこ  ..中級者(10,496ポイント)   Date: 2010/04/26(月) 00:48   No:51264     
Title: Re:デスクトップで実行すると落ちる    
PDBファイルも欲しいです。
私レベルではそれがないと、デバッグできません。


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

Name: ookami  ..初心者(6,140ポイント)   Date: 2010/04/26(月) 20:43   No:51270 解決!     
Title: Re:デスクトップで実行すると落ちる    
Justy様、ぽこ様、お返事ありがとうございます。

すみません、原因はまったく分からないのですが、PCを再起動したら直りました...(大汗) いったい何だったのか;;;; お返事いただいておいて本当に恐縮です。ごめんなさい。

次に現象が再現したときに、Justyさんのアドバイス、参考にさせていただきます。また相談させてください。

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


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



Name:  ..入門者(4,469ポイント)   Date: 2010/04/25(日) 01:47   No:51208       
Title: ソースの評価と今後へのアドバイスをお願いします    
 C言語の入門書等読んで少しずつ学んできたのですが、
今後どういったことをしていけば上達できるのかわからず
困っています。
 
 今回はポーカーゲームを作ってみました。ので、
そのソースから僕のレベルを判断してください。
一応、入門書片手に作りました。ただ、アルゴリズムに
ついてはすべて自分で考えたつもりです。

 プログラミングにおいて目指す方向は、
・プログラミングは趣味であり仕事等では使わない
・win32API?やネットワークプログラミングに興味あり
・ゲーム等よりメモ帳等の実用的?なアプリを作りたい
これらの点も考慮して
 「○○という本をやったほうがいい」とか
「△△という課題に挑戦してみては?」等の
アドバイスいただけるとありがたいです。

環境 winXP VC++2008


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


Name: やんち [URL]  ..ぴよぴよ(0ポイント)   Date: 2010/04/25(日) 03:02   No:51211     
Title: Re:ソースの評価と今後へのアドバイスをお願いします    
■この else if のスタイルは気持ち悪いので、やめた方が良いかと思います。
>    if(sf == 2 && ff == 1){
>        puts("ロイヤルストレートフラッシュ");
>        return 10;
>    }else{if(sf == 1 && ff == 1){
>        puts("ストレートフラッシュ");
>        return 9;
>    }else{if(four == 1){
>        puts("4カード");
>        return 8;
>    }else{if(three == 1 && two ==1){
>        puts("フルハウス");
>        return 7;
>    }else{if(ff == 1){
>        puts("フラッシュ");
>        return 6;
>    }else{if(sf == 1 || sf == 2){
>        puts("ストレート");
>        return 5;
>    }else{if(three == 1 && two == 0){    //上で先にフルハウスの判定をしているから別に必要ないtwo == 2は
>        puts("3カード");
>        return 4;
>    }else{if(two == 2){
>        puts("2ペア");
>        return 3;
>    }else{if(two == 1){
>        puts("1ペア");
>        return 2;
>    }else{
>        puts("ノーペア");
>    }}}}}}}}}

直すなら、こんな感じです。
    if(sf == 2 && ff == 1){
        puts("ロイヤルストレートフラッシュ");
        return 10;
    }else if(sf == 1 && ff == 1){
        puts("ストレートフラッシュ");
        return 9;
    }else if(four == 1){
        puts("4カード");
        return 8;
    }else if(three == 1 && two ==1){
        puts("フルハウス");
        return 7;
    }else if(ff == 1){
        puts("フラッシュ");
        return 6;
    }else if(sf == 1 || sf == 2){
        puts("ストレート");
        return 5;
    }else if(three == 1 && two == 0){    //上で先にフルハウスの判定をしているから別に必要ないtwo == 2は
        puts("3カード");
        return 4;
    }else if(two == 2){
        puts("2ペア");
        return 3;
    }else if(two == 1){
        puts("1ペア");
        return 2;
    }else{
        puts("ノーペア");
    }


■構造体のswapは、
>        buf.mark = yamafuda[saki].mark;
>        buf.suu = yamafuda[saki].suu;
>
>        yamafuda[saki].mark = yamafuda[moto].mark;
>        yamafuda[saki].suu = yamafuda[moto].suu;
>
>        yamafuda[moto].mark = buf.mark;
>        yamafuda[moto].suu = buf.suu;

直すと、
        buf = yamafuda[saki];
        yamafuda[saki] = yamafuda[moto];
        yamafuda[moto] = buf;
と言う感じに、簡潔に書けますよ。

■山札が無くなった時の処理が見当たりません。

■謎のコメント
>  int tmp1 = test1.suu;   /* b を基準とする */
b が何なのか不明です。

■疑問
C言語か、C++言語のどちらで書いているつもりなのか、不明ですが、
C言語では通らない構文を使われているみたいなので、C++言語なのでしょう。
C++を使うなら、またC++をさらに勉強すると、もっとC++らしい記述のしかた
があるかと思います。

■全体的に、よく書けていると思います。

■今後の課題
WIN32APIや、ライブラリのチュートリアルを進めてみるなり、
C++ や OOP(オブジェクト指向プログラミング)の勉強をしてみるなり、
ソースコードをたくさん読んで、たくさん書くと良いかと思います。


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

Name: ぽこ  ..中級者(10,462ポイント)   Date: 2010/04/25(日) 03:13   No:51212     
Title: Re:ソースの評価と今後へのアドバイスをお願いします    
私見ですが、初心者というレベルは脱していると思います。
これから先は、白さんの作りたいものを作ればいいと思います。
その過程で自分の知らない知識に関する本を購入していけば良いのでは
ないでしょうか。

プログラムを作るという行為の中で、覚えた方が良いことがあります。
それは、
 ・プログラムの書き方
 ・デバッグの仕方(デバッガの使い方)
です。
この辺りはプログラムを仕上げる速度に直結します。
プログラムの書き方に関しては、私は「プログラミング作法」をお勧めします。
デバッグの仕方に関しては、、、よくわかりません^^;

「C言語 入門書の次に読む本」とかも入門書では書かれていないが、
ちょっと大きなプログラムを書く時のお作法が載っています。
#Amazonの評価あんまり良くないですね、これ。脱初心者にはお薦めなんですが。。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(177,836ポイント)   Date: 2010/04/25(日) 08:36   No:51214     
Title: Re:ソースの評価と今後へのアドバイスをお願いします    
エラーチェックがまったくできていないようですので、今後はもう少し信頼性の強化に努めた方がよいかと思います。


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

Name: dic  ..熟練のプログラマー(63,622ポイント)   Date: 2010/04/25(日) 12:01   No:51218     
Title: Re:ソースの評価と今後へのアドバイスをお願いします    
なんの根拠もないのですが、
対戦相手(CPU)を組み込んでみてはどうでしょう?


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

Name: softya [URL]  ..ハッカー(152,015ポイント)   Date: 2010/04/25(日) 12:18   No:51219     
Title: Re:ソースの評価と今後へのアドバイスをお願いします    
ざっと見させていただきました。
気になったのは、CflushとかCstraightのj変数ですね。今後のことを考えてcountとかちゃんとした名前にした方が良いと思います。
あと指摘されていますが、struct cardのstructを省略するとC言語の文法では問題があります。VC++をお使いでしたら、拡張子を.cにするかコンパイルオプションを/Tcとしてください。
それとqsortを使ってらっしゃいますが、勉強のためには自前ソートした方が良いと思います。

それよりも気になるのは、ユーザーインターフェイスですね。
どのカードを捨てたとか、ちゃんと表示した方が良いと思います。今のままだと非常に分かりにくいんですよね。ユーザーインターフェイスの設計は、一般アプリを作る場合に最も重要な事項の一つです。少しコードを直してみましたので見てください。
あとは、たかぎさんも指摘さている誤操作に対するガードですね。同じカード番号を入れることが出来るとか色々問題があります。

最後に、今後の勉強になりそうなサイトや本をご紹介しますね。

●デバッグ
「C言語 デバッグ完全解説」
http://www.amazon.co.jp/dp/4774133620

●アルゴリズムなど
「アルゴリズムとデータ構造編」
http://www.geocities.jp/ky_webid/algorithm/index.html
「アルゴリズム研究室」
http://www1.cts.ne.jp/~clab/algorithm/algorithm.html
「地球にやさしいアルゴリズム」
http://itpro.nikkeibp.co.jp/article/COLUMN/20070109/258278/?ST=develop
「コーディングに役立つ! アルゴリズムの基本」
http://www.atmarkit.co.jp/fcoding/index/algorithm.html

●Win32API
「APIで学ぶWindows徹底理解」
http://software.nikkeibp.co.jp/software/backno/04apimook2.html

「猫でもわかるプログラミング」WindowsSDK編を御覧下さい。
http://www.kumei.ne.jp/c_lang/
「Win32API(C言語)編」
http://www.geocities.jp/ky_webid/win32c/index.html
「Win32 API入門」
http://wisdom.sakura.ne.jp/system/winapi/index.html
「超初心者のプログラム入門(C言語 Windows)」
http://www13.plala.or.jp/kmaeda/winc/winc.htm


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

Name: たかぎ [URL]  ..ハッカー(177,938ポイント)   Date: 2010/04/25(日) 12:30   No:51220     
Title: Re:ソースの評価と今後へのアドバイスをお願いします    
> それとqsortを使ってらっしゃいますが、勉強のためには自前ソートした方が良いと思います。 

これについては必ずしも賛成できません。
確かに勉強のためには自作した方がよいのですが、それは別の機会で行うべきものです。
単にソートをしたいだけなら、既存のライブラリを使う方が得策です。
そして、C++を使うのであれば、qsortより優れたstd::sortやstd::stable_sortを使うべきです。


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

Name: たいちう  ..比類無きプログラマー(76,557ポイント)   Date: 2010/04/25(日) 14:19   No:51233     
Title: Re:ソースの評価と今後へのアドバイスをお願いします    
実行していませんけど、Cstraightは誤判定しませんか?
例えば(3, 4, 5, 6, 10)をストレートと判定してしまうと思います。

Cpareは非常に良く書かれています。
自分でこれを思いつけるならば、センスは十分です。
(センスのないプロがどんなに多いことか)

その他、細かい指摘も色々ありますが、
大部分は今後の経験で改善されるでしょう。


今後についてですが、このプログラムを改善したいならば、
dicさんの書いているCPUとの対戦に賛成。

このプログラムに拘らないならば、softyaさんのお勧めにもある、
下記サイトを試してみてはいかがでしょうか。

「猫でもわかるプログラミング」
http://www.kumei.ne.jp/c_lang/
http://www.kumei.ne.jp/c_lang/index_sdk.html


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

Name:  ..初心者(5,888ポイント)   Date: 2010/04/26(月) 20:42   No:51269     
Title: Re:ソースの評価と今後へのアドバイスをお願いします    
>>やんちさん
なるほど、else ifって括弧でいちいちまとめていかなくても大丈夫なんですね。
構造体のswapについても全く知りませんでした。これだけでも3行も短くなるとは、しかも読みやすくなっている。
山札は当初は5回しか繰り返さないつもりだったので、なくなったときの処理をいれていませんでした。対処としては、山札自体を2個3個として増やすこととして対処してみます。
謎のコメント…今見返してみると、自分でも謎です。一体なんなのでしょうかね…
 c言語で書いているつもりだったのですが、vc++でc++としてコンパイルしていたようで、エラーが出なかったので、気にしたことがありませんでした。ご指摘ありがとうございます。

>>ぽこさん
>私見ですが、初心者というレベルは脱していると思います。
ありがとうございます。初心者を脱したかどうかは自分で判断がつかなかったので、うれしいかぎりです。
 「プログラミング作法」と「C言語 入門書の次に読む本」ですか、amazon等を見てみるとずいぶんと興味をそそられる紹介文だったので、今週末にでも書店で見てきます。ただ、近くの図書館に置いてないのは、懐が痛いです…プログラミング関係の本ってどうしてこう高いのでしょうか…

>>たかぎさん
 エラーチェックは全く気にしたことがありませんでした。そうですね、確かに自分が使うだけならエラーが出るような数値は入力しないですが、他人が使うこともあるわけで、そうなると、やはりエラーチェックも必要事項になってくるんですね。
 ソートについては下に一応自分の考えたコードも載せてみましたので、見ていただけると嬉しいです。ただ、こういう頭の中だけで考えて、メモ帳がちょっとあれば考えたアルゴリズムをメモっておけるのは授業中の暇つぶしとしては結構いいので、自前でできるところはなるべく自前でしようかなと思います。

>>dicさん
 対戦相手はこれから組み込んでみようと思います。ただ、ポーカーの場合はかなり運の要素が強いので、とりあえず、自分が普段やっている戦術?をそのまま実行させるような形になる気がします。はたしてこれはcpuと言えるのか…

>>softyaさん
 変数名ですか、たしかにこのままj,k,l,m,n…と増えていったら区別がつかなくなりそうです。これからはちゃんと名前をつけるように気をつけます。
 ソートも最初は自前でいろいろと考えてみたのですが、どうもうまくいかなくて、で、参考書見てみるとソート用の関数が合ったのでそれを使ってしまいました。

一応自分で考えてたのは
struct card mycbuf[5];
int j,s; int buf = 20;int buf2 = 0;

for(s = 0;s < 5;s++){
for(j = 0;j < 5;j++){
if(mycards[i].suu < buf && mycards[i].suu != buf2)
buf = mycards[i]
}
mycbuf[i] = buf;
buf2 = buf;
}

//インデントがおかしいかと思いますが、お許しください
 
 ユーザーインターフェイスはそもそもcuiでゲーム作るのは実用性無視であくまでcの練習として組んでいたので、今回は全く考えていませんでした。今回指摘していただいた不備を直したらこれを今度はwin32APIを使って作ってみようと考えているので、そちらではしっかりとインターフェイスにもこだわりたいと思います。
 9個もの参考サイトの紹介ありがとうございます。猫でもわかる以外はすべて初見のため大変ありがたいです。

>>たいちうさん
 今確認してみましたが、Cstraightは誤判定していました。これから問題点と修正案考えてみます。
>Cpareは非常に良く書かれています。
ありがとうございます。なんか、ソースを他人に見せたことなんか一度もなくて当然ほめられた機会もなかったんで大変うれしいです。
ただ、個人的には変数は配列で13個も用意しなくても4個でいけるように感じたので、まだまだ無駄があるのかなと思ってます。


 みなさん本当に丁寧な回答ありがとうございます。こんなにも多くの助言がいただけてうれしい限りです。

 今後は、
1指摘された問題点の修正
2エラーチェックの導入
3CPUの導入
4win32APIを利用したGUI化
という風に進めていきたいと思います。これらの間に何か入れたほうがいいことがあれがまた、助言いただけるとありがたいです。

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


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



Name: カレポテ  ..ぴよぴよ(14ポイント)   Date: 2010/04/23(金) 13:06   No:51116       
Title: gcc インラインアセンブリについて    
#include <stdio.h>

int foo_global; 

int main() {    
     asm ("movl foo_global,%eax");
    return 0;
}
 
上記を、gcc -o test test.c
でコンパイルすると下記のエラーになってしまいます。
gcc でグローバル変数をインラインアセンブラで直接
つかうことは出来るのでしょうか?

undefined reference to 'foo_global'

OS:winXP


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


Name: たかぎ [URL]  ..ハッカー(177,511ポイント)   Date: 2010/04/23(金) 13:29   No:51117     
Title: Re:gcc インラインアセンブリについて    
インラインアセンブラに引数を与えるのではなく、直接文字列として埋め込む場合の話でしょうか?
同じGCCでも、ターゲットやバージョンによって微妙に異なるのですが、アセンブリ言語にした場合には先頭に _ が付く場合があります。
あらかじめ、コンパイル結果を調べた上で記述する方が手っ取り早いと思います。


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

Name: カレポテ  ..ぴよぴよ(212ポイント)   Date: 2010/04/23(金) 22:51   No:51137     
Title: Re:gcc インラインアセンブリについて    
foo_global を変数として使いたいのですが
そのようなことができるのでしょうか?

C言語内の変数をインラインアセンブラで直接
扱うことができるのか?できるのであれば
その方法を教えていただければ幸いです。

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


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

Name: たかぎ [URL]  ..ハッカー(177,681ポイント)   Date: 2010/04/24(土) 00:49   No:51155     
Title: Re:gcc インラインアセンブリについて    
正確なターゲット(MinGWなのか、Cygwinなのか、あるいはクロスコンパイラなのか)やGCCのバージョンがわかりませんので正確な回答もできません。
ただ、下記のURLが参考になるのではないでしょうか?
http://www.sra.co.jp/wingnut/gcc/gcc-j.html#Extended%20Asm


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

Name: カレポテ  ..ぴよぴよ(197ポイント)   Date: 2010/04/24(土) 12:39   No:51189     
Title: Re:gcc インラインアセンブリについて    
ちなみに、バージョンはMinGW-5.1.6です。




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

Name: もぐりん  ..ぴよぴよ(996ポイント)   Date: 2010/04/26(月) 07:17   No:51265     
Title: Re:gcc インラインアセンブリについて    
同じ内容の質問が、以下の掲示板で出ています。
たぶん、マルチポストでしょうか?

http://www3.realint.com/cgi-bin/tarticles.cgi?pointc2+9815


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



Name: たろう  ..ぴよぴよ(938ポイント)   Date: 2010/04/25(日) 23:52   No:51260       
Title: LB_SELECTSTRINGについて    
単語帳を作ろうとしているのですが、エディトに文字列を入力するとそれと同じ文字列のリストの項目にカーソールが移るというプログラムを作っているのですが、下記で実行したのですが、文字列を入力してもカーソルが移りません。どうしたら入力した文字列と同じリストの文字列にカーソルを移すことができるのでしょうか?
    
            hRtLib = LoadLibrary(_T("RICHED32.DLL"));
              _tsetlocale(LC_ALL,_T("japanese"));            hlistbox1 = CreateWindow(_T("LISTBOX"),NULL,WS_CHILD|WS_VISIBLE|LBS_STANDARD|WS_HSCROLL,
                            0,75,200,420,hWnd,(HMENU)LISTBOX_1,
                            ((LPCREATESTRUCT)(lp))->hInstance,NULL);
            SetWindowLong(hWnd,0,HandleToLong(hlistbox1));
            editbox1=CreateWindow(_T("RICHEDIT"),NULL,WS_CHILD|WS_VISIBLE| WS_BORDER | WS_HSCROLL,
                            0,0,200,45,hWnd,(HMENU)EDIT_1,
                            ((LPCREATESTRUCT)(lp))->hInstance,NULL);
                          .
                          .
                          .
                       case WM_COMMAND:
            switch(LOWORD(wp))
                           {
            case EDIT_1:
                    //文字列を検索する
                    TCHAR edittext1[MAX_STR];
                    GetWindowText(editbox1,edittext1,MAX_STR);
                    SendMessage(hlistbox1,LB_SELECTSTRING,-1,(LPARAM)edittext1);
                          .
                          .
                          .

です。よろしくお願いします。


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




Name: ぽん  ..初心者(8,700ポイント)   Date: 2010/04/24(土) 13:27   No:51192       
Title: C言語勉強法について    
今年の4月から社会人になった者です。
5月中旬から会社でC言語を用いた研修が始まるのですが、C言語を詳しくやったことがないので少し予習してから臨みたいと考えています。

C言語のレベルとしては制御構造(if, while, for)あたりまでは一応できます。関数を作ったり、ポインタあたりから理解できていません。

こんな私に丁度いい参考書または問題集(プログラムは座学ではなく作ることが大事だと友人が言っていたので)を心優しいどなたか紹介して頂けないでしょうか?

また、自分くらいのレベルだとどのような勉強法が一番効果的でしょうか?

宜しくお願い致します。


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


Name: サウス  ..ぴよぴよ(110ポイント)   Date: 2010/04/24(土) 14:01   No:51194     
Title: Re:C言語勉強法について    
はじめまして

> また、自分くらいのレベルだとどのような勉強法が一番効果的でしょうか? 

とりあえず、持っている参考書に書いてあるサンプルプログラムを自分で書いて、コンパイルして、
実行してみるのが効果的だと思います。

実行するまでに、エラーが起こればそれを解決する事で理解につながります。
または、重要だと思う部分を再利用してみたりする事で応用力も付くのではないでしょうか。

頑張ってください。


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

Name: なっきー  ..ぴよぴよ(959ポイント)   Date: 2010/04/24(土) 14:56   No:51195     
Title: Re:C言語勉強法について    
>ぽんさん
こんにちは。
私もまだまだ初心者でわからないことが多いので
偉そうに回答できる身分ではないので
適当に流してもらって構わないのです。

私の場合は参考書を三ヶ月掛けて四回読み、
本に書いてある内容を実際に作成してきました。
そのあとはネット上で落ちてるサンプルを
ダウンロードして読んで行きました。
他人の書いたソース(ダウンロードしてきた)を
読めるようになってきたら
今度は改造(関数化など)してみたりします。

これだけで結構知識は付いてきますよ。
私はいまここまでの段階です。

その次は自分のやってみたいことを勉強していけば
いいのではないでしょうか?
私はいまWinAPIとWinsockを勉強しています。

これから先長いかもしれませんが
お互い頑張りましょう^^


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

Name: やっくん  ..上級者(17,899ポイント)   Date: 2010/04/24(土) 15:55   No:51196     
Title: Re:C言語勉強法について    
>参考書または問題集を心優しいどなたか紹介して頂けないでしょうか?

私はまずこちらの本で学習しました。『入門ANSI-C』石田晴久著
http://www.amazon.co.jp/%E5%85%A5%E9%96%80ANSI%E2%80%90C-%E7%9F%B3%E7%94%B0-%E6%99%B4%E4%B9%85/dp/4407308281/ref=sr_1_1?ie=UTF8&s=books&qid=1272090506&sr=1-1

入出力から制御構造、配列、関数、ポインタ、構造体(共用体)、ファイル操作、簡単なアルゴリズムまで扱っております。
この本は全てのサンプルソースが正しく入力さえすれば動く形で記載されているのが特徴です。
(打ち間違えしない限り実行ができる)
解説も入門者向けでわかりやすいです。
その分、細かい説明が省かれていたりしますがCプログラムを形式的に書けるようになる程度の内容は記載されています。
この本は練習問題がほとんどありません。
そのためサンプルソースをきちんと理解して打ち込まなければ知識が身につきません。


私は上記の本のサンプルソースを見ずに書けるレベルになったら次に紹介する本を使いました。
『明快C言語 実践編』柴田望洋著
http://www.amazon.co.jp/%E6%96%B0%E7%89%88-%E6%98%8E%E8%A7%A3C%E8%A8%80%E8%AA%9E-%E5%AE%9F%E8%B7%B5%E7%B7%A8-%E6%9F%B4%E7%94%B0-%E6%9C%9B%E6%B4%8B/dp/4797329955/ref=sr_1_3?ie=UTF8&s=books&qid=1272090320&sr=8-3

こちらの本は入門書を一通り理解した人向けの内容になっております。
説明も細かいところまで書かれており、理解することによって私はC言語のスキルが上がりました。
主に、見えないバグ(わかりづらいバグ)への対処、文字列とポインタ、ファイル処理、スタックとオーバーフロー、リスト構造、二分探索木などが記載されています。
ただ、こちらも練習問題が付いておりません。


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

Name: ぽん  ..初心者(8,903ポイント)   Date: 2010/04/25(日) 23:21   No:51258 解決!     
Title: Re:C言語勉強法について    
皆さん返事が遅れてしまい申し訳ありません。。。
そして丁寧なご返事ありがとうございます。

>>サウスさん
参考書は持ってないんです・・・
でも参考書を買ってみてとりあえずサンプルプログラムを打ってみます!

>>なっきーさん
参考書を結構読んでらっしゃるんですね・・・ネットからのDLいいですね!問題も落ちてますもんね。やってみます^^

>>やっくんさん
参考書の紹介ありがとうございます!しかも丁寧に説明までしていただいて感無量です・・・
とりあえず上の参考書から始めてみようと思います。とりあえず手も動かさないといけないので読んだらすぐに類題プログラムを作ってみようと思います。


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



Name: ハルキ [URL]  ..ぴよぴよ(348ポイント)   Date: 2010/04/25(日) 18:16   No:51244       
Title: Box2DのDebugDrawの使い方を教えてください    
はじめまして、ハルキと言います。
今、C++でBox2Dを勉強しているのですが、DebugDrawの使い方がわかりません。

一応自分でググってやってみました。

b2DebugDraw* debugDraw;
debugDraw->SetFlags(e_polygonShape);
world.SetDebugDraw(&debugDraw);

すると、
error C2664: 'b2World::SetDebugDraw'
: 1 番目の引数を 'b2DebugDraw **__w64 ' から 'b2DebugDraw *' に変換できません。
と言われます。


どうすればいいでしょうか?
Box2D_v2.0.1を使っています。

それと、「->」は知人に指摘されて「.」から置き換えてやってみただけなので、
「->」の意味を分かっていません。
検索の仕方もわからないので、
どういう場面で使うものなのか、教えてください。


お暇であれば、よろしくお願いします。m(_ _)m


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


Name: Justy  ..伝説なるハッカー(524,405ポイント)   Date: 2010/04/25(日) 18:53   No:51247     
Title: Re:Box2DのDebugDrawの使い方を教えてください    
> DebugDrawの使い方がわかりません
 まず b2DebugDrawクラスを継承したクラスを作ります。
 このクラスのメンバ関数として基底である b2DebugDrawクラスの純粋仮想関数の
DrawPolygonや DrawCircleなどの関数を環境(DirectXとか OpenGLとかで)に合わせて適切に実装します。

 で、このクラスをインスタンス化し、b2DebugDraw::SetFlags関数を使ってデバッグ表示したい
種類を指定します(e_shapeBitとか e_jointBitとか)。
 
 最後にそのインスタンスへのポインタを b2World::SetDebugDraw関数に設定してください。
 これで、たしか b2World::Step関数を呼び出した時に描画が行われるようになるはずdす。

 Box2Dのサンプル Examples/TestBed/Framework/Test.cppにそのあたりの記述がありますので、
参考にしてみて下さい。



>「->」の意味を分かっていません
 それは ->演算子というもので、->の左側がクラスのポインタである場合に
クラスのメンバにアクセスする時に使用します。

アロー演算子でアクセス
http://wmcw.jp/cstruct_arr.html

第十三回-03 ドット演算子とアロー演算子
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/prog1/13-03.html

構造体ポインタ
http://wisdom.sakura.ne.jp/programming/c/c36.html

 しかし、さすがに ->演算子がわからないというその状態で Box2Dを使うのはちょっと無謀です。
 もう少し C++の足固めをした方がいいのでは?


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

Name: ハルキ [URL]  ..ぴよぴよ(424ポイント)   Date: 2010/04/25(日) 19:56   No:51249 解決!     
Title: Re:Box2DのDebugDrawの使い方を教えてください    
早速の回答ありがとうございます!

b2DebugDrawの説明、とてもわかりやすかったです。

C→C# とやっていたので、
だいたい行けるかなぁと思いあがっていました;;

おっしゃる通り、C++の基礎からやり直したいと思います。
ありがとうございました!!


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

Name: Justy  ..伝説なるハッカー(524,479ポイント)   Date: 2010/04/25(日) 20:28   No:51250     
Title: Re:Box2DのDebugDrawの使い方を教えてください    
 安定性はわかりませんが C#版もあります。
 C#の方が慣れているのであれば、こちらの方も試してみるといいかもしれません。

box2dx - Project Hosting on Google Code
http://code.google.com/p/box2dx/


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



Name: 真由美  ..入門者(4,127ポイント)   Date: 2010/04/23(金) 20:33   No:51130       
Title: VC++でパスワード入力欄について    
よくパスワード入力欄等の文字列で打った文字が「****」みたくなるサイトがあると思います。
そこまでは実装で来たのですが一番最後に打った文字は確認の為にも表示しておきたいです。
例えば「あいうえお」と打ったとします。

1〜5回目

*い
**う
***え
****お みたくしたいです。

こういったことは出来ないのでしょうか?


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


Name: たいちう  ..比類無きプログラマー(75,848ポイント)   Date: 2010/04/23(金) 21:16   No:51131     
Title: Re:VC++でパスワード入力欄について    
> こういったことは出来ないのでしょうか?

TextChangedのイベントでやれば簡単です。
いくらでも好きな文字列を表示できます。

しかし良い仕様とは思えませんが。
例えば、"****お"と入力されているときに、
バックスペースを押されたらどのような表示になるのですか?


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

Name: ムンバ  ..プログラマー(35,036ポイント)   Date: 2010/04/24(土) 01:01   No:51157     
Title: Re:VC++でパスワード入力欄について    
こんばんは。

私は、CGI(Perl)スクリプトで作成した入力フォーム(ファイル拡張子 .cgi )から
「IDナンバー:ID:パスワード」の3つの項目を入力し送信して
この3つの文字が全て一致したら、HTMLファイルにログインできるソースを、最近作りました。
先人方々の、サイトや教本を参考にさせて頂きながらですが。^^;

パスワードの入力フォーム?操作では、HTMLタグに用意されているタグを使うと
真由美さんが書かれている、パスワードの入力フォームに

あいうえお

と、入力すると(こちらのは、半角英数字しか入力できませんが。^^)

*****

と、フォームに勝手に表示されます。

ネットバンキングやネットでの買い物などなど、
パスワードは、秘密厳守で可能な限り、他人には知られたくない(知られてはいけない)ものですよね。
パスワードの入力画面って、入力ミスとかあっても ***** と表示されて
長い場合は、************** など、誤字や脱字があっても確認できません。
まして、入力フォームの表示も、表示文字制限を超えるパスワードの入力となると
何文字を入力したか、確認しにくい事もあります。

つまり、入力する(キー)時のみ
今入力しようと思ってる一文字が、自分だけが見れてもいいんじゃないか?
と言う事だと思うのですが。(思い違いでしたら、お許し下さい。)

最初の入力画面: 空(入力画面初期状態)

一文字目を入力した画面: あ

二文字目を入力した画面: *い

三文字目を入力した画面: **う

四文字目を入力した画面: ***え

五文字目を入力した画面: ****お


>>よくパスワード入力欄等の文字列で打った文字が「****」みたくなるサイトがあると思います。

  ↑これは、VC++(C言語など)でパスワード入力欄を作った、パスワード入力欄の文字列で打った文字が・・・(略)
  それとも、HTMLファイルやCGIやPHPなどで作られた、パスワード入力欄の事をおっしゃられてるのでしょうか?


私はC言語は、まだまだ初級ですので
C言語で、できるかどうかは解らないので
見当違いやら勘違いがありましたら、どうかご勘弁下さい。

もし、CGIスクリプトでできるなら!という構想で
試行錯誤してみたので、お役に立てなければ申し訳ございません。。

----------------------------------------------------------------------------------------------------------
パスワード: あいうえお <仮

最初の入力画面: 空(入力画面初期状態)



一文字目に入力した文字: あ

 を、例えば「配列aiueo」の1番目に代入して、これを読み込み表示画面の先頭に あ を表示する。
 ダミーの「配列dum」を予め用意しておき、表示された一文字目の値 あ を「配列dum」の一番目に代入して待機。 



二文字目の い が入力されたら



「配列aiueo」の2番目に い を代入して、「配列dum」の一番目にある あ を、* に変換し
 表示画面に、先頭から「配列dum」の一番目が変換された値 * を表示し
「配列aiueo」の2番目に代入された値 い を、「配列dum」の一番目にある あ を、*に変換した値の後に表示する。

(以下、繰り返しなので略させて頂きます。)


配列に入れるか一旦、ログファイルなどに記録して呼び戻して操作するかは、お好みだと思いますが
現時点では、(CGIでは)以上の様な発想しか思い付きませんでした。

お役に立てなければ長文、どうかご勘弁下さい。
真由美さんと同じ様な構想?を、CGI(Perl)で考えていたので
自分の考えのみで、ご返信してしまいました。
私の文章や内容、差し障りあればどうかご勘弁下さい。

あんど〜っ!
誤字・脱字・勘違いその他などあれば、ご指摘下さい!
って言いますか、いつも勘違い野郎で申し訳無いんです。
おやすみなさい。(∪。∪)。。。zzzZZ

---編集箇所---
誤字を修正しました。
---        --- 編集済み


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

Name: 真由美  ..入門者(4,137ポイント)   Date: 2010/04/24(土) 10:02   No:51177     
Title: Re:VC++でパスワード入力欄について    
回答ありがとうございます。

ムンバ様

そうです。打った文字を間違えがないかを確認出来るような仕様にしたいんです。
VCにはPasswordCharという便利なメンバがあるのですが
どうやらこれを使ってしまうと出来なそうですね。
自分なりに実装してみます。
ありがとうございました。



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

Name: バグ  ..ハッカー(195,983ポイント)   Date: 2010/04/24(土) 12:26   No:51187     
Title: Re:VC++でパスワード入力欄について    
>>そうです。打った文字を間違えがないかを確認出来るような仕様にしたいんです。 

こういうことならば、そもそも隠す必要がないような気がするのですが…?(^_^;)


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

Name: 真由美  ..入門者(4,347ポイント)   Date: 2010/04/24(土) 13:07   No:51191     
Title: Re:VC++でパスワード入力欄について    
すみません。前文字を表示したいんではなくて
最後に打った一文字だけを表示したいんです。

パスワードを入力した際に
*****i
みたいにでたらユーザーにもわかりやすいと思ったので・・・。


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

Name: 真由美  ..入門者(4,692ポイント)   Date: 2010/04/25(日) 14:41   No:51235 解決!     
Title: Re:VC++でパスワード入力欄について    
解決マークをつけさせて頂きます

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

Name: たいちう  ..比類無きプログラマー(76,584ポイント)   Date: 2010/04/25(日) 15:03   No:51239     
Title: Re:VC++でパスワード入力欄について    
このスレも解決にしてしまって良いのですか?
必要なくなったとか?


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

Name: 真由美  ..入門者(4,957ポイント)   Date: 2010/04/25(日) 19:34   No:51248     
Title: Re:VC++でパスワード入力欄について    
たいちう様
レスありがとうございます。
いえ・・・解決はしていないのですが2個同時に聞くのは申し訳ないと思ったので・・・。

余談ですがオープン系のプログラムは慣れていなくとっつきにくいです。
元々、cobol等を使っていたのですが転職をきっかけに勉強している最中で御座います。

・楽しく覚えるVC++2005
・ひと目でわかるVisualC++2005 アプリケーション開発入門
この2冊を愛読しているのですが乗っていることが少なくて・・・。
これからも度々、聞いてしまうかもしれませんが助言を頂けますと助かります。
甘えてばかりで申し訳御座いません。



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



Name: dic  ..熟練のプログラマー(63,919ポイント)   Date: 2010/04/25(日) 12:48   No:51223       
Title: batファイルでのメモリの使用方法    
自作したアプリケーションが40個ほどあります
これらは全部、一括して順次処理するだけのもので
一定時間になったら起動するようにWindowsのタスクに追加してます

そこで、10個くらいだと気づかなかったのですが
40個アプリケーションがあるので4つのbatファイルから同時に、並列して呼び出すようにしてます

各ファイル内容は
01-10.bat
 hoge.exe
 hoge2.exe

11-20.bat
 hoge11.exe
 hoge12.exe

...

のように4つのbatファイル処理です
4つ同時に起動すると、400〜500MBもメモリを消費します
アプリケーション一個自体ほとんどメモリを必要としないのですが
batファイルで組むと、最初の一個アプリケーションが呼ばれ、終了し、
次のアプリケーションが呼び出されてもコンソールは同じものを利用してるので
メモリ解放がされずこのように大量にメモリが消費されるのでしょうか?


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


Name: dic  ..熟練のプログラマー(64,077ポイント)   Date: 2010/04/25(日) 12:55   No:51224     
Title: Re:batファイルでのメモリの使用方法    
タスクマネージャーで調べてみたところ
一時的に20〜40MBメモリを
使用する期間があり、
その後、数メガ(2〜8MB)
メモリをしています

これが原因では・・・ないでしょうか?


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

Name: dic  ..熟練のプログラマー(64,206ポイント)   Date: 2010/04/25(日) 18:16   No:51245 解決!     
Title: Re:batファイルでのメモリの使用方法    
すいません、一個一個使用するメモリの量を検証してみたら
ほとんど一致してました
150MBメモリ使ってるアプリケーションもありました
某3Dゲームで100MB切ってるのってやっぱりすごいんですね

失礼しました


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



Name: あ〜る  ..上級者(19,237ポイント)   Date: 2010/04/25(日) 11:48   No:51217       
Title: srandとSRandについて    
お久しぶりです、あ〜るです。
今龍神録ベースのシューティングでリプレイの作成をしていて、乱数の初期値の設定の処理を書く中で疑問が出てきました。
乱数の初期値の設定で使うsrand関数でrand関数の初期値を、SRand関数でGetRand関数の初期値を設定しているんですが、これはあってるのでしょうか?
今はちゃんと動いているのですが、例えば両方する必要は無かったり、若しくは両方すると少し変わっちゃう、みたいな事はあるのでしょうか?
ネットで調べても特にrand関数とGetRand関数の関係が書いてなかったので質問させていただきました。

環境はwindowsXP,BorlandC++で、DXライブラリを使っています。
ご教授よろしくお願いします。 編集済み


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


Name: Justy  ..伝説なるハッカー(523,877ポイント)   Date: 2010/04/25(日) 17:20   No:51242     
Title: Re:srandとSRandについて    
>これはあってるのでしょうか
 合っています。
 ただ、設定しているのは“乱数の初期値”ではなく、乱数を生成するための初期値(種)です。

 
>rand関数とGetRand関数
 基本的には関係ないと考えていいので、両方使うのであれば両方とも個別に設定が必要です。
 
 ただ、DXライブラリが DX_NON_MERSENNE_TWISTER定義を伴ってビルドされていた場合、
SRand/GetRand系は内部で標準ライブラリの srand/rand系が使用されることになり、
SRand関数を使うとsrand関数を使ったのと同じことになりますので注意が必要です。
 まぁ、配布されているビルド済みライブラリには DX_NON_MERSENNE_TWISTERはないので
気にする必要はありませんが。 編集済み


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

Name: あ〜る  ..上級者(19,385ポイント)   Date: 2010/04/25(日) 17:42   No:51243 解決!     
Title: Re:srandとSRandについて    
ありがとうございます!
段々ゲームが大きくなるにつれてこうゆう小さい事が重大なミスに繋がるのがかなり不安だったんで安心しました
ありがとうございました! 編集済み


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



Name: dic  ..熟練のプログラマー(63,366ポイント)   Date: 2010/04/24(土) 06:59   No:51166       
Title: 関数が順番通りに呼ばれているかプログラム内で確認する    
最近はオブジェクト指向が流行ってますが、私は構造体設計でいこうかとしてます
そこで、構造体設計で重要な、順番通りに関数(モジュール)を呼び出しているか確認する機能を
作りたいと考えました
下は実装してみて、いまのところうまくいってるのですが、どこか漏れなどないでしょうか?
もしくは、なんらかこういったライブラリがあるなどあったら教えてもらえるとうれしいです

#include <stdio.h>

static    int    stack[10];
static    int    p;

//    Step1 -> 1
//    Step2 -> 2
//    Step3 -> 3

//-----------------------------------------------------
//    check
//        前回呼ばれた関数のIDがいっこまえのものか確認する
bool    check( int back )
{
    if( p == 0 )
    {
        printf( "スタックが空です\n" );
        return false;
    }

    if( p == 1 )
    {
        if( stack[p-1] == 1 )
            return true;
        else
            return false;
    }

    if( stack[p-2] == back )
        return true;

    return false;
}
//--------------------------------------------------------
//    スタックに保存する
void    add( int NEW )
{
    stack[p++] = NEW;
}

void    Step3()
{
    add( 3 );    //    この関数のIDを登録する
    if( !check( 2 ) )    //    前回のIDを確認する
        printf( "call error.\n" );
    else
        printf( "Step3\n" );
}
void    Step2()
{
    add( 2 );    //    この関数のIDを登録する
    if( !check( 1 ) )    //    前回のIDを確認する
        printf( "call error.\n" );
    else
        printf( "Step2\n" );
}
void    Step1()
{
    add( 1 );    //    この関数のIDを登録する
    if( !check( 0 ) )    //    前回のIDを確認する
        printf( "call error.\n" );
    else
        printf( "Step1\n" );
}

//-----------------------------------------------------
int    main()
{
    Step1();
    Step2();
    Step3();

    Step2();
    Step1();
    Step3();

    return 0;
}



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


Name: ぽこ  ..中級者(10,107ポイント)   Date: 2010/04/24(土) 08:25   No:51171     
Title: Re:関数が順番通りに呼ばれているかプログラム内で確認する    
この手の話は環境依存になりますが、VC++なら/Ghオプションと
下のリンクにあるものを流用すれば、もっと華麗な実装に
なると思います。
#C言語で実現しようとしているんですよね?

http://www.codeproject.com/kb/threads/StackWalker.aspx



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

Name: たいちう  ..比類無きプログラマー(76,034ポイント)   Date: 2010/04/24(土) 09:02   No:51173     
Title: Re:関数が順番通りに呼ばれているかプログラム内で確認する    
> そこで、構造体設計で重要な、順番通りに関数(モジュール)を呼び出しているか確認する機能を
> 作りたいと考えました
> 下は実装してみて、いまのところうまくいってるのですが、どこか漏れなどないでしょうか?

何をやりたいのか全くわかりませんが、努力の方向性が間違ってませんか?
何をもってうまくいっていると判断できるのでしょうか。
stack[100]程度まで増やして、main関数からの呼び出しのバリエーションを
充実させてみてはどうかと。漏れがあるかどうか判断しやすくなります。

また前回呼び出した関数を調べるだけならば、スタックは不要です。
Step1などで、addする前にcheckすれば良いので、変数が1つだけあれば良いです。


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

Name: box  ..ハッカー(152,186ポイント)   Date: 2010/04/24(土) 10:11   No:51179     
Title: Re:関数が順番通りに呼ばれているかプログラム内で確認する    
> 私は構造体設計でいこうかとしてます

構造体設計とは、何のことでしょうか?
構造化プログラミングなら、聞いたことがあるような気がします。


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

Name: dic  ..熟練のプログラマー(63,601ポイント)   Date: 2010/04/24(土) 11:22   No:51185     
Title: Re:関数が順番通りに呼ばれているかプログラム内で確認する    
>ぽこさん
参考URLありがとうございます
英語なので、読めないですが参考になります
正確に言うとCだけではなくC/C++ですね

>たいちうさん
たしかに前回呼び出した関数だけに絞ればスタックはいらないですね

>boxさん
構造化プログラミングですね
色々用語があり混乱してます(汗


何をやりたいかというと、関数を間違った順番で呼ばれたらエラーもしくは警告の
メッセージを表示する機能を追加し、コンパイラでは拾えないバグを見つけようと
してます


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

Name: dic  ..熟練のプログラマー(64,118ポイント)   Date: 2010/04/25(日) 17:16   No:51241 解決!     
Title: Re:関数が順番通りに呼ばれているかプログラム内で確認する    
解決ってことで
ご意見ありがとうございました


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



Name: 真由美  ..入門者(4,659ポイント)   Date: 2010/04/25(日) 13:05   No:51225       
Title: VC++での文字列の二次元配列について    
VC++では文字列をString型で扱うみたいなのですがこれの二次元配列は可能なのでしょうか?
カンマ区切りのCSVファイルを読み込んで
二次元配列に格納すると言った処理をしたいのですがやり方がわかりません。

他の言語だったらexplode等で分割すればできるのですが
VCだとイマイチです・・・。

System::IO::StreamReader^ sr = 
                gcnew System::IO::StreamReader("test.csv",System::Text::Encoding::GetEncoding(932));
                sr->ReadLine();
                String^ Item;
                while((Item = sr->ReadLine()) != nullptr){
                    this->richTextBox1->Text += Item + "\r\n";
                }
                sr->Close();


読み込みは出来ます。


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


Name: たいちう  ..比類無きプログラマー(76,273ポイント)   Date: 2010/04/25(日) 13:48   No:51232     
Title: Re:VC++での文字列の二次元配列について    
回答ではないのですが、古い質問について、解決しているならば
「解決!」マークにチェックしてもらえませんか?
解決していないならば、新しい質問をする前に、
古い質問に取り組んでください。

「解決!」マークに気付いてないだけなのだと思いますが、
質問を乱発しているような印象も受けます。


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

Name: 真由美  ..入門者(4,682ポイント)   Date: 2010/04/25(日) 14:41   No:51234     
Title: Re:VC++での文字列の二次元配列について    
すみません・・・汗
直ちに全てつけます。

ご指摘ありがとうございます。


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

Name: Justy  ..伝説なるハッカー(524,142ポイント)   Date: 2010/04/25(日) 15:56   No:51240     
Title: Re:VC++での文字列の二次元配列について    
>二次元配列は可能なのでしょうか
  array<String^, 2>  でどうでしょうか?


>カンマ区切りのCSVファイル読み込み
 csvの中に ""で囲まれたものがないという条件を満たすなら、Stringクラスの Split関数を使えば
簡単に分割できます。

 その条件を満たすことができない場合は、""内にカンマが入っている可能性もあるので
自分で文字列を解析して区切りがどこにあるか調べる必要があります。

 一応サンプルを載せておきます。


    // 行毎に分割して読み込む
    array<String^>^ lines_str = System::IO::File::ReadAllLines("test.csv", System::Text::Encoding::GetEncoding(932));
    
    // 1つめの方法 : ','で区切る
    array<array<String^>^>^ strArr1 = gcnew array<array<String^>^>(lines_str->Length);
    for (int i = 0; i < lines_str->Length; i++)
        strArr1[i] = lines_str[i]->Split(',');
    
    // 2つめの方法 : 正規表現で分割する
    Regex ^re = gcnew Regex("((?<=,(?=(([^\"]*\"){2})*[^\"]*$))|^)([^\",]+|\"([^\"]|\"\")+\")");
    array<Generic::List<String^>^> ^strArr2 = gcnew array<Generic::List<String^>^>(lines_str->Length);
    for(int n=0; n<lines_str->Length; ++n)
    {
        MatchCollection ^matches = re->Matches(lines_str[n]);
        List<String^>^ list = gcnew List<String^>;
        for each(Match ^m in matches)
            list->Add(m->Value);
        strArr2[n] = list;
    }
    
 尚、このサンプルでは File::ReadAllLines()で一気に読み込んでいますが、大容量の csvを読み込むと
メモリを圧迫するので当初のコードの通り ReadLine()で1行ずつ読み込む方が無難ですね。


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



Name: 真由美  ..入門者(3,938ポイント)   Date: 2010/04/20(火) 11:36   No:50967       
Title: VC.netで動的にtextbox等を生成する    
外部テキストファイルから読み込んでその値ごとにtextbox等を出力したいです。
添付させて頂いたソースではconfig.iniを探しに行き1行ずつ読み込んでおります。
その際にtextboxという文字列があったらlabel1の文字を変えるという処理まではできました。

これをlabel1を変えるのではなくtextboxを動的に作り出す?といったことをやりたいのですが
この様な事は出来るのでしょうか?


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


Name: たいちう  ..比類無きプログラマー(74,073ポイント)   Date: 2010/04/20(火) 11:55   No:50968     
Title: Re:VC.netで動的にtextbox等を生成する    
VBとC#のサンプルですが、同じようなことをすればよいのではないかと。

http://dobon.net/vb/dotnet/control/addcontrol.html


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

Name: 真由美  ..ぴよぴよ(32ポイント)   Date: 2010/04/22(木) 06:45   No:51069     
Title: Re:VC.netで動的にtextbox等を生成する    
連絡が遅くなってしまい申し訳ありませんでした。
ありがとうございます。出来ました〜助かりました。


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

Name: 真由美  ..入門者(4,746ポイント)   Date: 2010/04/25(日) 14:42   No:51238 解決!     
Title: Re:VC.netで動的にtextbox等を生成する    
解決マークをつけさせて頂きます

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



Name: 真由美  ..入門者(3,978ポイント)   Date: 2010/04/22(木) 06:47   No:51070       
Title: VC++ デスクトップの背景の画像を変える方法    
VC++ デスクトップの背景の画像を変える方法ってないでしょうか?
調べてみたのですがないみたいなので出来ないのでしょうか?


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


Name: Justy  ..伝説なるハッカー(521,981ポイント)   Date: 2010/04/22(木) 11:05   No:51079     
Title: Re:VC++ デスクトップの背景の画像を変える方法    
 SystemParametersInfoを SPI_SETDESKWALLPAPERで呼べば壁紙が変わります。

SystemParametersInfo 関数
http://msdn.microsoft.com/ja-jp/library/cc429946.aspx

Win Tips 8:壁紙を設定変更する 
http://www5a.biglobe.ne.jp/~dinah/tips/wintipsp.htm#a8
SystemParametersInfo 壁紙を変更する
http://www.paw.hi-ho.ne.jp/takadayouhei/technic/20.html


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

Name: 真由美  ..入門者(4,019ポイント)   Date: 2010/04/23(金) 20:30   No:51129     
Title: Re:VC++ デスクトップの背景の画像を変える方法    
遅くなってしまいすみません。

回答ありがとうございます。
引数がわからないものがあったので調べながら試してみます。
ありがとうございました。


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

Name: 真由美  ..入門者(4,720ポイント)   Date: 2010/04/25(日) 14:41   No:51237 解決!     
Title: Re:VC++ デスクトップの背景の画像を変える方法    
解決マークをつけさせて頂きます

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



Name: 真由美  ..入門者(4,221ポイント)   Date: 2010/04/24(土) 10:04   No:51178       
Title: VC++で配列を使ったプログラム    
VCでの配列がよく理解できていないのでサンプルPGを作っております。
初期化する所で必ず問題が発生したため〜とエラーが出てしまいます。

this->labelArray[0]->AutoSize = true;

こういうやり方は出来ないのでしょうか?


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


Name: Justy  ..伝説なるハッカー(523,043ポイント)   Date: 2010/04/24(土) 11:13   No:51184     
Title: Re:VC++で配列を使ったプログラム    
>こういうやり方は出来ないのでしょうか?
 labelArrayの中の要素は Label型ではなく Labelのハンドル型です。
 従って labelArray配列の個々の要素に対し、gcnewをする必要があります。


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

Name: 真由美  ..入門者(4,258ポイント)   Date: 2010/04/24(土) 12:24   No:51186     
Title: Re:VC++で配列を使ったプログラム    
そうなんですかΣ
ありがとうございます。出来ました。助かりました〜


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

Name: 真由美  ..入門者(4,703ポイント)   Date: 2010/04/25(日) 14:41   No:51236 解決!     
Title: Re:VC++で配列を使ったプログラム    
解決マークをつけさせて頂きます

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



Name: J  ..上級者(18,192ポイント)   Date: 2010/04/23(金) 20:18   No:51128       
Title: Windows 7でJava    
Windows 7でJavaプログラミングをするには何がいいですか?
知ってるサイトも本もXPまでの情報しか無いので・・・


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


Name: ぽこ  ..中級者(10,032ポイント)   Date: 2010/04/24(土) 07:43   No:51167     
Title: Re:Windows 7でJava    
開発環境のことですよね?
Windows7に対応していれば何でも良いと思います。
EclipseやNetbeansとかは対応していると思いますよ。


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

Name: J  ..上級者(18,260ポイント)   Date: 2010/04/25(日) 12:36   No:51221     
Title: Re:Windows 7でJava    
さっそくEclipse Pleiades All in One 3.5.1というのを入れてみましたが起動しません。起動ロゴでフリーズします。
Windows 7 32bitなんですが・・・


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

Name: Ma  ..比類無きプログラマー(91,765ポイント)   Date: 2010/04/25(日) 12:47   No:51222     
Title: Re:Windows 7でJava    
DLサイトで、対応していると書いてありましたか?
ここで、他人に確認してもらうのを待ってもいいですが、それより自分で確認したほうがはやいですよ。 編集済み


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

Name: J  ..上級者(18,285ポイント)   Date: 2010/04/25(日) 13:15   No:51226     
Title: Re:Windows 7でJava    
http://mergedoc.sourceforge.jp/
これなんですが、
Windowsとしか書かれていません。。


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

Name: dic  ..熟練のプログラマー(64,082ポイント)   Date: 2010/04/25(日) 13:17   No:51227     
Title: Re:Windows 7でJava    
JRE入れてます?

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

Name: J  ..上級者(18,348ポイント)   Date: 2010/04/25(日) 13:22   No:51228     
Title: Re:Windows 7でJava    
http://mergedoc.sourceforge.jp/index.html#/pleiades_distros3.5.html
このJRE入りのものをダウンロードしました。
Cドライブ直下にJREのフォルダが確認できます。


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

Name: J  ..上級者(18,392ポイント)   Date: 2010/04/25(日) 13:28   No:51229 解決!     
Title: Re:Windows 7でJava    
あ、起動しました
2度ぐらいWindowsに応答無しを食らいましたが、3度目で無事起動しました・・・
お騒がせしました。それにしてもやたら起動に時間掛かりますね。。 編集済み


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

Name: dic  ..熟練のプログラマー(64,114ポイント)   Date: 2010/04/25(日) 13:42   No:51230     
Title: Re:Windows 7でJava    
私も利用しようとしたんですが起動に1分以上かかったのでやめておいたんですよね
メモリは1.2G積んでますが 利用できるのは600MBぐらいです


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



Name: るー  ..ぴよぴよ(230ポイント)   Date: 2010/04/21(水) 10:00   No:51014       
Title: Box2Dのマウスジョイントについて    
Box2Dを導入してプログラミングしているのですが、
マウスカーソルの座標を取得して、画面に出してあるボックスをマウス座標に合わせ、
マウスを動かせば、そのボックスがついてくるようにしたいのです。
用は↓の方のような処理を施したいのです(ただしこれはフラッシュのプログラミング)。
ttp://arthur87.sakura.ne.jp/item/16/catid/6

そうするために、Box2Dのマウスジョイントというのものがあるので、
それを利用して作ってみることにしました。

しかし、マウスジョイントに関して色々調べていたんですが、
Box2Dに関するサイトのほとんどがフラッシュに関するプログラミングで、
C言語に対応したサイトが見つかりません。
もし、皆様方の中でBox2Dに詳しい方がいらっしゃいましたら教えて頂けませんでしょうか。




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


Name: Justy  ..伝説なるハッカー(520,695ポイント)   Date: 2010/04/21(水) 11:09   No:51017     
Title: Re:Box2Dのマウスジョイントについて    
 Box2Dはちょっと前に インターフェースの修正があったので今でも通用するかどうかわかりませんが、

 マウスが押されたら

1) b2MouseJointDefに必要な情報を設定する
 メンバ body1 / body2 (b2World::GetGroundBodyと引っ張りたいオブジェクト)
 targetマウスの位置
 maxForce 質量

2) b2World::CreateJointを呼んで b2MouseJointオブジェクトを生成する


 ドラッグ中は
 
3) マウスの位置を b2MouseJoint::SetTarget()で(毎フレーム)設定する


 マウスが離されたら

4) マウスの位置を b2World::DestroyJoint()でb2MouseJointオブジェクトを破棄する

 これでいけると思います。


 あと、b2DestructionListenerを継承したクラスで SayGoodbye(b2Joint*)を実装して
b2MouseJointオブジェクトが来ていたときの処理を入れておく必要があります。
 このあたりはライブラリのサンプル Examples\TestBed\Framework\Test.cppにありますので、
見てみて下さい。


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

Name: るー  ..ぴよぴよ(301ポイント)   Date: 2010/04/21(水) 14:59   No:51027     
Title: Re:Box2Dのマウスジョイントについて    
>Justyさん
返信ありがとうございます。
アドバイス通りやってみます。
が、必ずつまずくと思うので、
また質問すると思います(笑)
そのときはまたアドバイスして下さると嬉しいです。


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

Name: るー  ..かけだし(1,610ポイント)   Date: 2010/04/22(木) 14:13   No:51086     
Title: Re:Box2Dのマウスジョイントについて    
昨日質問したるーです。
返信を参考にして悪戦苦闘しながら打っていたらこんな感じになりました。
エラーはないもののうまく動作せず、脱力しています(笑)。

>あと、b2DestructionListenerを継承したクラスで SayGoodbye(b2Joint*)を実装して 
>b2MouseJointオブジェクトが来ていたときの処理を入れておく必要があります。 
>このあたりはライブラリのサンプル Examples\TestBed\Framework\Test.cppにありますので、 
>見てみて下さい。

単純にプログラミングがミスってるのと、
Justyさんの返信に書いてあった上記のことができていない(というか書いていない)ので、
どういう風にしたらいいか指摘のほどをお願いします。
というか「ライブラリのサンプル Examples\TestBed\Framework\Test.cpp」というのは、
どこのことを仰ったのでしょう。

ちなみに↓のプログラミングはヘッダに書いたもので、それをメインで読みこんでいます。
また、全部書くと長くなるので必要個所だけ抜粋しています。

b2World *world;        // 世界
b2Body* ground;        // 地面
b2Body* Squear;        // ボックス

b2MouseJoint * Joint6;    // ジョイント

b2Body* CreateSquear( int x, int y );
b2MouseJoint * CreateDistanceJoint6( b2Body* body1, b2Body* body2, float length );

// 物理世界の初期化
void InitWorld()
{
    //////////////////////////////////////////////////////////////////////////////////////////
    //
    //    仮想の物理世界の作成  ここは最初の境界の設定以外はほぼこのまま
    //

    // 物理世界の境界を設定、想定よりも大きめに
    b2AABB worldAABB;
    worldAABB.lowerBound.Set( -1000.0f, -1000.0f );
    worldAABB.upperBound.Set( 7400.0f, 5800.0f );
    
    // 重力設定用変数
    b2Vec2 gravity( 0.0f, -50.0f );

    // 物理計算を行うかどうかのフラグ
    bool doSleep = false;

    // 物理世界の作成
    world = new b2World( worldAABB, gravity, doSleep );
    world->SetContactListener( &myContactListener );

    //////////////////////////////////////////////////////////////////////////////////////////
    //
    //    地面の作成  地面は動かない静的オブジェクト    

    // 地面の位置セット
    b2BodyDef groundBodyDef;
    groundBodyDef.position.Set( 320.0f, 10.0f );
    groundBodyDef.userData = ( void* )USERDATA_GROUND;    // ユーザ定義データ 地面 をセット

    // 位置情報から地面オブジェクトの作成
    ground = world->CreateBody( &groundBodyDef );

    // 地面がもつ形状の設定    中心を基準に設定される
    b2PolygonDef groundShapeDef;
    groundShapeDef.SetAsBox( 500.0f, 10.0f );        // 横100*2 縦 10*2 の大きさ
    ground->CreateShape( &groundShapeDef );        // 形状作成

    // 地面に置いてあるボックス
    Squear = CreateSquear( 100, 50 );

         // ジョイントの作成  アンカーポイントを変更する
         Joint6 = CreateDistanceJoint6( world->GetGroundBody(), Squear, 100 );
}

// マウス座標とのジョイント処理
b2MouseJoint * CreateDistanceJoint6( b2Body* body1, b2Body* body2, float length )
{
    b2MouseJointDef mouse;

    mouse.body1 = body1;
    mouse.body2 = body2;
    mouse.target = body2->GetWorldCenter();
    mouse.maxForce = 25.0f;
    mouse.timeStep = 1.0f / 60.f;

         return ( b2MouseJoint* )world->CreateJoint( &mouse );    // ジョイント作成
}

// ボックス作成
b2Body* CreateSquear( int x, int y )
{
    // 作業用変数    
    b2BodyDef bodyDef;        // ボディ定義情報
    b2PolygonDef shapeDef;    // 形状定義情報    
    b2Body *b;        // ボディ 形状追加するために使うだけなので、ここで定義

    // ボックスの位置セット
    bodyDef.position.Set( x, y );    //    座標セット
    bodyDef.linearDamping = 0.0f;    //    ボディ単体の移動量減衰効果
    bodyDef.angularDamping = 0.0f;   //    ボディ単体の角速度減衰効果
    bodyDef.userData = ( void* )USERDATA_SQUEAR;    // ユーザ定義データ BOX をセット

    // 位置情報からボックスオブジェクトの作成
    b =  world->CreateBody( &bodyDef );

    // ボックスがもつ形状の設定    中心を基準に設定される
    shapeDef.SetAsBox( 30.0f, 30.0f );        // 横30*2 縦30*2 の大きさ
    shapeDef.density = 1.0f;            // 密度
    shapeDef.friction = 0.1f;            // 摩擦
    shapeDef.restitution = 0.0f;        // 弾性
    b->CreateShape( &shapeDef);            // 形状作成
    b->SetMassFromShapes();            // 形状から当たり判定情報の作成
    
    return b;      // 今回作成したボディのポインタを返す
}


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

Name: Justy  ..伝説なるハッカー(522,155ポイント)   Date: 2010/04/22(木) 23:06   No:51100     
Title: Re:Box2Dのマウスジョイントについて    
>Examples\TestBed\Framework\Test.cpp」というのはどこのことを仰ったのでしょう。
 Box2Dに入っているサンプルです。
 バージョンによっては多少パスが異なる可能性がありますが、それでも多分 Test.cppという
ファイル名は同じだと思います。

 最新版の Test.cppは

https://box2dflash.svn.sourceforge.net/svnroot/box2d/trunk/Examples/TestBed/Framework/Test.h
https://box2dflash.svn.sourceforge.net/svnroot/box2d/trunk/Examples/TestBed/Framework/Test.cpp

 ですね。


>どういう風にしたらいいか指摘のほどをお願いします
 これだけではちょっとどうにもなりません。
 zipに固めてアップできますか?


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

Name: るー  ..かけだし(1,665ポイント)   Date: 2010/04/23(金) 10:09   No:51113     
Title: Re:Box2Dのマウスジョイントについて    
アップしました。
ちなみにFPS以外はソースを一括にしてあります。
内容は至ってシンプルで、ワールド内に地面とボックスがあるだけです。
このボックスをマウスで動かせるようにしたいのです。 編集済み


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

Name: Justy  ..伝説なるハッカー(522,620ポイント)   Date: 2010/04/23(金) 23:57   No:51149     
Title: Re:Box2Dのマウスジョイントについて    
 インターフェースからみて使用しているライブラリのバージョンは 2.0xでしょうか。
 とりあえず動くように直してみました。
 大枠の構造は元のままなのですぐに判るとおもいますが、マウスの制御は Mouseクラスに
集約してあります。
 細かいところがどう変更したかは diffツールなどで調べて下さい。
 
 
 main.cppは2通り(main1/main2)あります。
 これらは同時にコンパイルせず排他で使用して下さい。

 
・ main1.cpp
 箱を2つ表示して、マウスで動かせるようにしたもの。

・ main2.cpp
 さらに多くの箱を出し、全体的に大きな値になってた位置などの値を 1/10にしたもの。


 一応実行ファイルの方もアップしておきます。
 10/04/25 03:10 リンクミスがあったので、リンク修正。ついでに昔作った昔のサンプルをいれておきました。

かりんとあぷろだ 2号.jp 372MB
http://karinto2.jp/uploader/

No3832 1272132517.zip 
DL pass : oGTQlJ6w8Apq
 編集済み


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

Name: Justy  ..伝説なるハッカー(522,949ポイント)   Date: 2010/04/24(土) 00:32   No:51154     
Title: Re:Box2Dのマウスジョイントについて    
 ちなみに「全体的に大きな値になってた位置などの値を 1/10にした」としたのは
http://www.box2d.org/manual.html
の 1.7 Unitsの項目に書いてあることが理由です。


 Box2Dは MKS単位……メートル・キログラム・秒で扱われるとあります。
 つまり大きさ 10といったらそれは 10メートルということになります。
 又、動く物体の大きさに関しても 0.1mから 10m程度のものをという記述があります。
 なので、それに合わせてワールドを設計する必要があります。

 当然スクリーン座標系と Box2Dの扱う座標系は異なるので、何らかの変換システムが必要になるわけですが、
今回の main2では単純に Box2D座標系を 10倍したものをスクリーン座標系としている、というわけです。


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

Name: るー  ..かけだし(1,816ポイント)   Date: 2010/04/25(日) 10:56   No:51216     
Title: Re:Box2Dのマウスジョイントについて    
返信遅れてしまって申し訳ありません

今確認しながらやっています。
既に質問したい箇所がありますが、とりあえず全部確認してからしてみたいと思います。
それから、ライブラリにバージョンがあったこと知りませんでした(笑)

わざわざ丁寧に教えて下さって感謝しています。
ただ、完全に理解しようとするにはまだまだ時間がかかりそうです。


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

Name: るー   Date: 2010/05/17(月) 15:26   No:510141274077574 解決!     
Title: Re:Box2Dのマウスジョイントについて    
返信遅れて申し訳ありませんでした。
おかげでマウスで動かせるようになりました。
ありがとうございました。




Name: アス  ..ぴよぴよ(372ポイント)   Date: 2010/04/22(木) 01:54   No:51062       
Title: printfにおける%dと引数    
質問させていただきます。
以下のコード

printf("りんご%d個,オレンジ%d個" ,3);

としたとき、表示される文字列は

-りんご3個,オレンジ44121754個-

と表示されます。
printf関数の第三引数に二つ目の%d,に入る整数が指定されていないことがこのバグの原因なのは分かっています。
しかし、今回は44121754という数値の正体を知りたいので投稿させていただきました。

この値はintの値の範囲内ですから、%dにはint型の値が入ったものと思います。
また、変数を初期化せずに表示した場合も同じように意味不明な数字が出てくることから、どこかで変数が暗に宣言されたのか。
もしくは、暗に4バイト(intのもつメモリの長さ)のメモリを確保して、二番目の%dに入っているのか。
自分の考えは以上です。

しかし、どちらが正しいか分からず、ひょっとするとどちらも間違えなのかも。
ご回答よろしくお願いします。


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


Name: YuO  ..熟練のプログラマー(44,315ポイント)   Date: 2010/04/22(木) 02:05   No:51066     
Title: Re:printfにおける%dと引数    
たまたま,引数の位置に相当する情報をメモリから読み込んだら,その値だっただけです。
# 未定義動作なので,記憶域にメモリを使うなどの暗黙の仮定を置いています。

一般的に使われる,引数をスタックに載せる実装の場合,スタックは固定で確保されていることが普通です。
引数や関数の戻り先などは,固定されたスタックに順番に書き込まれていきます。
しかし,関数から戻った場合に,スタックの値を元に戻したり,何らかの値で上書きするなどの処理はおこなわれません。
結果,今回のような場合は,その引数の位置に相当するスタックメモリに書き込まれていた値が読まれることになります。


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

Name: たかぎ [URL]  ..ハッカー(176,643ポイント)   Date: 2010/04/22(木) 02:14   No:51068     
Title: Re:printfにおける%dと引数    
処理系不明では正確な回答は不可能です。
それを踏まえた上で...

コンピュータの動作原理をちゃんと理解することをお勧めします。
それともうひとつ、コンパイラが生成したコードを調べてみてください。
アセンブリ言語のソースを出力させるか、機械語を逆アセンブルするなどすれば確認できるはずです。


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

Name: softya [URL]  ..ハッカー(151,640ポイント)   Date: 2010/04/22(木) 11:22   No:51081     
Title: Re:printfにおける%dと引数    
たかぎさんの言われる通り処理系不明ですが、Windowsだと仮定するとスタックから2つ目のint型引数があるものとして値を参照しています。スタックの値なので何が入っているかは不明ですね。
コールスタック/スタックフレームについて調べてみてください。
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%AB%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF


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

Name: たかぎ [URL]  ..ハッカー(176,699ポイント)   Date: 2010/04/22(木) 11:39   No:51083     
Title: Re:printfにおける%dと引数    
せめて確認に用いたソースがあれば、処理系不明の状況であっても、その値が何なのか、おおよその検討はつくんですけどね。


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

Name: pie  ..ぴよぴよ(283ポイント)   Date: 2010/04/22(木) 12:24   No:51084     
Title: Re:printfにおける%dと引数    
おっと。
たかぎさんが誤字とはめずらしい。
弘法も筆の誤りというやつですね。
×検討はつく
○見当はつく
スレの主旨と関係なくてすいません。


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

Name: たかぎ [URL]  ..ハッカー(176,717ポイント)   Date: 2010/04/22(木) 12:33   No:51085     
Title: Re:printfにおける%dと引数    
> たかぎさんが誤字とはめずらしい。 

すみません。変換ミスですね。


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

Name: アス  ..ぴよぴよ(756ポイント)   Date: 2010/04/22(木) 18:59   No:51088     
Title: Re:printfにおける%dと引数    
YuOさん、たかぎさん、softyaさん、pieさん、ご回答ありがとうございます。

実行環境はwindowsで、VC++2008express editionを使っています。

softyaさんのお勧めしてくれたwiki
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%AB%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF
で調べて、それを基に考えるとprintfの引数領域は引数二つ分確保されたにも関わらず、引数が一つ足らなかった。
という解釈で間違っていないでしょうか。

コンピュータの動作原理、根本的なところが理解できていないことを痛感しました。
スタックやらヒープやらは一度、基本情報処理技術者試験の対策として学んだことはあったんですが、言語とのつながりは意識できていなかったようです。
これからもっとレベルアップしていくには避けては通れない道でしょうから、PCとC言語の密接なつながりの内容をより深く詰めていこうと決めました。
もし、何か補足をいただけるならばと欲張りながら思い、解決は1,2日延ばさせていただきます。
勝手ながらご容赦ください。
コメント・補足をお願いします。


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

Name: たかぎ [URL]  ..ハッカー(176,784ポイント)   Date: 2010/04/22(木) 20:58   No:51097     
Title: Re:printfにおける%dと引数    
> コンピュータの動作原理、根本的なところが理解できていないことを痛感しました。 
> スタックやらヒープやらは一度、基本情報処理技術者試験の対策として学んだことはあったんですが、言語とのつながりは意識できていなかったようです。 
> これからもっとレベルアップしていくには避けては通れない道でしょうから、PCとC言語の密接なつながりの内容をより深く詰めていこうと決めました。 

完全には網羅できませんが、下記のような記事を書いていますので、参考にしてみてください。
http://www.kijineko.co.jp/tech/creintro/stack.html
http://www.kijineko.co.jp/tech/pseudoprocessor


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

Name: アス  ..ぴよぴよ(897ポイント)   Date: 2010/04/25(日) 01:52   No:51209     
Title: Re:printfにおける%dと引数    
たかぎさん、ご親切にありがとうございます。
リンク先の内容も、現在半分ほど読ませて頂いてます。
分かりやすく説明されているのに、分からない用語が多くて自分の無知さに呆れるばかりです(;><)
しかし、一つ一つ丁寧に知識を回収しようと思います。

これにて解決とさせていただきます。
ありがとうございました。


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

Name: アス  ..ぴよぴよ(903ポイント)   Date: 2010/04/25(日) 01:53   No:51210 解決!     
Title: Re:printfにおける%dと引数    
ended...

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



Name: てとら  ..ぴよぴよ(66ポイント)   Date: 2010/04/23(金) 20:14   No:51127       
Title: 40a. について、2つ質問です    
はじめまして、最近プログラミングに手を出し始めました、てとらと申します。
初歩的な質問なのですが、40a. キーがどれ位押されたかを監視する関数で

 int GetHitKeyStateAll_2( int *KeyStateBuf ) ;

という関数が作成されていますが、この関数はどこで呼び出されているのでしょうか?

また、

 int Key[256];
 を用意して、エンターを押し続けた状態で
 GetHitKeyStateAll_2(Key);
 を100回呼べばその時
 Key[KEY_INPUT_RETURN]は100が入っています。

とありますが、この100が格納される

 Key[KEY_INPUT_RETURN]

というのは、一体どんな変数なのですか?(変数かどうかも分からないのですが…)

よろしければ、どなたか教えて下さい!


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


Name: ookami  ..入門者(4,643ポイント)   Date: 2010/04/23(金) 23:21   No:51144     
Title: Re:40a. について、2つ質問です    
ここですよね?
http://dixq.net/g/41.html

てとらさんのレベルが分からないので直球で回答いたします。

> この関数はどこで呼び出されているのでしょうか? 
一番下のサンプルの while の条件文の中に見えますね。

> Key[KEY_INPUT_RETURN] というのは、一体どんな変数なのですか?
int Key[256]; の KEY_INPUT_RETURN 番目の要素ですね。int型の変数です。

僭越ながら、40a.までは理解されていますか?


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

Name: てとら  ..ぴよぴよ(503ポイント)   Date: 2010/04/24(土) 03:39   No:51164     
Title: Re:40a. について、2つ質問です    
>ookamiさん
すみません、自分のレベルを書き忘れました。
一応40a.までは何とか理解しており、それと平行してC++の教本を読み解いています
(現在ポインタで苦戦していますが…)。

>while の条件文の中

 ↑入力状態を保存

のところですね。頭から抜けていました、ありがとうございます。


> Key[KEY_INPUT_RETURN] 
質問で返してしまい申し訳ないのですが、なぜ

 GetHitKeyStateAll_2(Key);
 を100回呼べばその時
 Key[KEY_INPUT_RETURN]は100が入っています。

ということになるのでしょうか?
個人の考えとしては、

@char GetHitKeyStateAll_Key[256];
 char型のGetHitKeyStateAll_Ketという変数配列を作成。

AGetHitKeyStateAll( GetHitKeyStateAll_Key );
 @で作ったGetHitKeyStateAll_Keyに、キーボードが押されているか?の判定を取得。

Bfor(int i=0;i<256;i++){
 変数iが256より小さい時、

Cif(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
 もし、GetHitKeyStateAll_Key[i]が押されていたら、KeyStateBuf配列[i]の中身をインクリメント。
 (以下押されている間繰り返し)

Delse                            KeyStateBuf[i]=0;
 それ以外(キーが放されるなど)で、KeyStateBuf配列[i]の中身を0に。

EGetHitKeyStateAll_2(Key)==0
 While文の条件式にある関数呼び出しで、int KeyStateBuf[]に、int Key[256]を実引数として渡す。

F関数呼び出し

Gif(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
 これにより、int Key[i](この場合、iはエンターキー)に格納されている値をインクリメント
 (以下押されている間繰り返し)

長くなってしまいましたが、こういうことで良いのでしょうか?
結局関数内部についての質問になってしまいましたが、どうにも頭がこんがらがってしまいまして…

よろしければ、どなたか教えて下さい。お願いします!


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

Name: ひよこ  ..比類無きプログラマー(82,335ポイント)   Date: 2010/04/24(土) 09:04   No:51174     
Title: Re:40a. について、2つ質問です    
GetHitKeyStateAll_2(Key);はKey配列にキーの押されているカウンタを+1します。
押されてなかったら0にします。
押された状態で100回呼ばれると100になります。


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

Name: ookami  ..初心者(5,098ポイント)   Date: 2010/04/24(土) 09:05   No:51175     
Title: Re:40a. について、2つ質問です    
@〜G、それぞれ「C++言語 → 日本語」の直訳と言う意味では合っています。

補足になるかわかりませんが...

dxlib.h とdxdirectx.h を見ると、
#define KEY_INPUT_RETURN                D_DIK_RETURN      // エンターキー
#define D_DIK_RETURN                  (0x1C)

となっています。つまり、


Key[KEY_INPUT_RETURN]

は、

Key[28]

と展開されます。(1Cを10進数にすると28)

> Bfor(int i=0;i<256;i++){ 

の i が 28 の時、Enterキーが押されていれば(GetHitKeyStateAll_Key[28]==1なら) KeyStateBuf[28] が +1(Key[28]が+1) されます。従って、100回繰り返せば Key[28] は 100 になっています。

---

はずかしながら「実引数」って知りませんでした^^; 勉強になりました;


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,180,329ポイント)   Date: 2010/04/24(土) 10:40   No:51180     
Title: Re:40a. について、2つ質問です    
GetHitKeyStateAllっていう関数は既にDXライブラリにあります。
しかしこの関数では特定のキーが「押されているか」「押されていないか」しか解らないので、「どれ位押されているか」が解らず、困る場合が多いのです。

例えば「タメ撃ち」であったり、メニュー項目の遷移時の入力であったり。
メニュー項目の遷移はキーが押された瞬間のみ行いたいですよね。

詳しく言えば
「下キーが押されている間、選択状態を下に移動」ってプログラムを書いてしまうと
1秒間下キーを押しっぱなしだと選択項目が60個下に動いてしまいます。
しかし一度下キーを押したら一つだけ下に動かしたいはずです。

こんな風に「どれ位押したか」を判定できるように拡張したのが GetHitKeyStateAll_2関数です。
キーボードの入力状態は256種類にわけて GetHitKeyStateAll関数によって配列に0か1で格納されます。

その引数はchar型ですから、そのままの状態で入力した長さを加算出来ません。
char型はunsignedでも255ですから、4秒しかカウント出来ません。
そこで、int型で入力状態を表します。

まずは今の瞬間キーが押されてるかどうかを01であらわされるchar型変数に格納し、
256種類あるキーの入力状態を、256個の配列要素を持つint型に対応させて計算します。

キーが押されているなら要素の値を加算、押されていないなら0を格納します。

この計算をする関数を1秒間に60回呼べば、1秒間押しっぱなしならそのキーの入力状態は60になります。
こうすることで、どれ位キーが入力したかがわかり便利なのです。


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

Name: てとら  ..ぴよぴよ(537ポイント)   Date: 2010/04/24(土) 22:22   No:51204 解決!     
Title: Re:40a. について、2つ質問です    
>ひよこさん、ookamiさん、管理人様
ありがとうございます、おかげで理解する事ができました!
引き続き勉強させていただこうと思います。


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



Name: アクア  ..ぴよぴよ(304ポイント)   Date: 2010/04/23(金) 22:02   No:51132       
Title: 第5章の消す部分がわからない    
第5章宣言の仕方について質問です。

GV.h変更などをした後、後は「main.cpp」「graph.cpp」「load.cpp」にある変数の宣言部と、extern宣言を全て消してください。

とありますが、上記がどの部分なのかがわかりません。

詳しい方いらっしゃいましたら、教えてください;;





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


Name: ookami  ..入門者(4,490ポイント)   Date: 2010/04/23(金) 23:06   No:51140     
Title: Re:第5章の消す部分がわからない    
http://dixq.net/rp/5.html
ここですよね。

例えば、以下のような場合、iの実体が複数あるのでリンクエラーになります。

--main.cpp
int i;
:

--sub.cpp
int i;      // すでにiの実体があるのでリンクエラー
:


次のような場合は、iの実体は1個なので、エラーになりません。

--main.cpp
int i;
:

--sub.cpp
extern int i;    // 問題ない。main.cppのiと共有。
:


で、次のような場合は、iの実体がひとつもないので、エラーになります。

--main.cpp
extern int i;
:

--sub.cpp
extern int i;
:


この辺の、externを付けたり付けなかったりするのが面倒なので GV.h にまとめているのが問題のページのようですね。GV.h に「GLOBAL xxxx」として追加した変数は、「main.cpp」「graph.cpp」「load.cpp」で宣言する必要がなくなるから消す、ということです。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,181,225ポイント)   Date: 2010/04/24(土) 10:56   No:51182     
Title: Re:第5章の消す部分がわからない    
既にookamiさんがお答えくださっていますが、
「main.cpp」「graph.cpp」「load.cpp」のファイルの冒頭にある変数の宣言とexternから始まる行を消すということです。

例えば

--load.cpp変更--

#include "../include/GV.h"

extern int img_ch[2][12];

void load(){
        LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}


この部分や


--main.cpp変更--

#define GLOBAL_INSTANCE 
#include "../include/GV.h"

//現在のキー入力処理を行う
extern int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
extern int CheckStateKey(unsigned char Handle);

//データのロード
extern void load();

//描画メイン
extern void graph_main();

int img_ch[2][12];      //キャラクタ画像9枚分 X2(変身用)
ch_t ch;                        //キャラクタデータ宣言


//ループで必ず行う3大処理
int ProcessLoop(){
        if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
        if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す


この部分などですね。


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

Name: アクア  ..ぴよぴよ(380ポイント)   Date: 2010/04/24(土) 16:29   No:51197     
Title: Re:第5章の消す部分がわからない    
なるほどです、試してみますね〜。

因みに模範解答などは無いのでしょうか。
たまにしかネットに繋げれないものでして・・・


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

Name: ROM  ..かけだし(1,715ポイント)   Date: 2010/04/24(土) 16:31   No:51198     
Title: Re:第5章の消す部分がわからない    
模範解答って何の?
見る限り問題のようなものはないようですが。


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

Name: box  ..ハッカー(152,259ポイント)   Date: 2010/04/24(土) 16:36   No:51199     
Title: Re:第5章の消す部分がわからない    
考え方は、
1)実体を定義するのは、どこか1箇所だけ
2)他のファイルから当該の変数にアクセスする必要があれば、
  「実体は別のファイルにあるよ」という意味でexternを付ける


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

Name: アクア  ..ぴよぴよ(326ポイント)   Date: 2010/04/24(土) 19:22   No:51203 解決!     
Title: Re:第5章の消す部分がわからない    
お蔭様で解決できました。みなさん有難うございます。


13章でまたしてもつまづいてますが、別スレにしておきます。


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



Name: asdf  ..ぴよぴよ(234ポイント)   Date: 2010/04/24(土) 00:09   No:51150       
Title: scanfについて    
scanf("%d",a);

とやってもコンパイルは通ります。しかし,実行するとエラーが発生します。

このように、&を付け忘れたとき、どのようなことが起こっているのでしょうか。

最初、aをアドレスと認識し、そこに値を入れようとしたが、そのアドレスは有効なものではないためエラーが発生する・・・みたいな感じなのでしょうか。

よく分からないので、教えてください。


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


Name: たかぎ [URL]  ..ハッカー(177,728ポイント)   Date: 2010/04/24(土) 00:51   No:51156     
Title: Re:scanfについて    
処理系も分からなければ、aの型も値も分かりません。これでは正確な回答は不可能です。

> 実行するとエラーが発生します。 

どんなエラーが発生するのでしょうか?


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

Name: asdf  ..ぴよぴよ(397ポイント)   Date: 2010/04/24(土) 01:08   No:51158     
Title: Re:scanfについて    
すみません。いろいろと書き忘れていました。
例えば、このようなプログラムだと,強制終了されてしまいます。

int main(void) {
    int a = 0;
    scanf("%d",a);
    return 0;
}


処理系は・・・具体的には何をかけばよいのでしょうか?
環境は、Windows7(32ビット)Borland C++ Compiler です。


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

Name: たかぎ [URL]  ..ハッカー(177,747ポイント)   Date: 2010/04/24(土) 01:30   No:51159     
Title: Re:scanfについて    
これだと、

scanf("%d", NULL);

としたのと同じになります。
結果として、*(int*)NULLに代入しようとして異常終了してしまいます。


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

Name: asdf  ..ぴよぴよ(425ポイント)   Date: 2010/04/24(土) 01:43   No:51160     
Title: Re:scanfについて    
すみません。
*(int*)NULL
というのは何を表しているのでしょうか


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

Name: たかぎ [URL]  ..ハッカー(177,785ポイント)   Date: 2010/04/24(土) 01:45   No:51161     
Title: Re:scanfについて    
早い話が、

int *p = NULL;
*p

と同じだと考えてよいでしょう。


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

Name: asdf  ..ぴよぴよ(590ポイント)   Date: 2010/04/24(土) 03:09   No:51162     
Title: Re:scanfについて    
なぜ、scanf("%d", NULL);としたのと同じになるのでしょうか。
また、
#include <stdio.h>

int main(void) {
    int b;
    scanf("%d",b);
    printf("%d", b);    
    return 0;
}
 

としたら、実行結果は、
76
19014100
となりました。
この19014100とは何なのでしょうか。


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

Name: たかぎ [URL]  ..ハッカー(177,792ポイント)   Date: 2010/04/24(土) 03:16   No:51163     
Title: Re:scanfについて    
> この19014100とは何なのでしょうか。

ゴミです。


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

Name: asdf  ..ぴよぴよ(620ポイント)   Date: 2010/04/24(土) 17:22   No:51200     
Title: Re:scanfについて    
???

ゴミですか・・・
具体的にはどういうものなのでしょうか?


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

Name: TKOZ  ..熟練のプログラマー(54,796ポイント)   Date: 2010/04/24(土) 18:28   No:51202     
Title: Re:scanfについて    
asdfさんへ
ゴミとは、多分、その実行したメモリのアドレスが使われる前の値だと思います。


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



Name: tokage  ..入門者(2,982ポイント)   Date: 2010/04/22(木) 19:30   No:51092       
Title: 3D当たり判定    
3Dの壁や床のあたり判定を作ろうとしています。
自分で作ろうとすると壁を突き抜けるか、
DXライブラリのサンプル「3Dアクション基本」のパクリにしかなりません。
皆さんはどうやっていますか。 どなたか詳しい方、お願いします。

環境 Visual C++ 2008 Express Edition


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


Name: Ma  ..比類無きプログラマー(91,664ポイント)   Date: 2010/04/23(金) 05:22   No:51109     
Title: Re:3D当たり判定    
あたり判定、というよりは接地しながら移動するなら、いかのとおりです。(私なら、、、)
ただ、ステージの仕様次第で計算がかわってきます。
ダンジョンのような完全にマスになっているような場合は、床は単純に計算できます。
壁は単純に移動後、どこにあるか計算して、移動可能範囲に出たら適当な処置を加えて移動可能範囲に戻すなどが有効かと。

リアルな地形の場合、そうはいきません。
この場合、自分の位置から地形データのある三角形の各頂点へベクトル3つをつくり、
それらを内積して足した角度で三角形上に現在いるか判定できます。
三角形上にないなら、179.99...度以下になる。

判定したら、現在のx,y座標と3つの頂点座標を用いてz座標を計算できます。

もちろん、他にもいろんな方法があるとおもうので、他の方の意見もきいてみてください。
*私はアマチュアで、他人が書いたアルゴリズムの一部を知っているだけなので。


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

Name: softya [URL]  ..ハッカー(151,753ポイント)   Date: 2010/04/23(金) 12:50   No:51115     
Title: Re:3D当たり判定    
DirectXでの処理方法(主に理論面)ですが、こちらが参考になりませんでしょうか?
http://marupeke296.com/COL_main.html


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

Name: たいちう  ..比類無きプログラマー(75,713ポイント)   Date: 2010/04/23(金) 13:47   No:51118     
Title: Re:3D当たり判定    
> DXライブラリのサンプル「3Dアクション基本」のパクリにしかなりません。

サンプルのパクリだと、何がまずいのですか?

オリジナリティが欲しい? → 掲示板で聞くのはOKなの?
○○という問題がある? → 問題を具体的に書くべき。


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

Name: tokage  ..入門者(3,028ポイント)   Date: 2010/04/23(金) 16:22   No:51121     
Title: Re:3D当たり判定    
Maさん softyaさん たいちうさん  回答ありがとうございます。

現在、私はリアルなステージで作っています。
衝突判定の理論はなんとなくわかりました。これから試すつもりです。

パクリになるのを避けた理由はいずれ配布する予定で、パクリだと著作権などで
問題があるかもしれないと思ったためです。


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

Name: tokage  ..入門者(3,122ポイント)   Date: 2010/04/23(金) 22:11   No:51133     
Title: Re:3D当たり判定    
いろいろ試そうとしてみましたが、どうやったらいいのかわかりませんでした
が、当たり判定自体は出来ました。壁や床の押し出す処理ができません。

ところでDXライブラリのDXライブラリのサンプルの一部を自分のプログラムに
組み込んだ場合著作権はどうなるのか、わかる方いませんか。


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

Name: ookami  ..入門者(4,093ポイント)   Date: 2010/04/23(金) 22:47   No:51136     
Title: Re:3D当たり判定    
押し出す処理というのは分かりませんが、とりあえず著作権について。

まず、DXライブラリ本家の著作権に関するページは読まれましたか?
http://homepage2.nifty.com/natupaji/DxLib/dxlicense.html


> ・DXライブラリの著作権は山田 巧が保持します。
> ・DXライブラリを使用して作成されたソフトウエアにDXライブラリを使用した旨を記載する
  必要はありません。(記載されれば嬉しいですが)

↑厳密にはサンプルについては言及されていないので、万全を期すなら著作者さんに問い合わせるのが良いと思います。が、readme.txt的なものにDXライブラリの使用を明記しておけば問題ないんじゃないでしょうか。


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

Name: tokage  ..入門者(3,162ポイント)   Date: 2010/04/24(土) 08:19   No:51170     
Title: Re:3D当たり判定    
わかりました。
とりあえずDXライブラリの掲示板できいてみます。


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

Name: tokage  ..入門者(3,114ポイント)   Date: 2010/04/24(土) 13:58   No:51193 解決!     
Title: Re:3D当たり判定    
きいてみたところ、どうやら
アプリケーションに組み込むなら問題ないようでしたので
解決にします。

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


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



Name: やっくん  ..上級者(17,445ポイント)   Date: 2010/04/22(木) 00:45   No:51059       
Title: C++ クラスの保存の仕方    
C++においてクラスデータの保存機能を作りたいのですが、どのように実装しようか悩んでおります。
<仕様>
@初めてプログラム実行する場合はクラスのメンバに初期ファイルからデータを読み込む。
A”保存”を実行するとクラスを新規ファイルに保存する。
B2回目以降のプログラム起動時は1回目起動時に新規で保存したファイルからデータを読み込み、保存する際は読み込んだファイルと同じファイルを用いる。

現在、考えている方針が2つあります。
<方針1>
クラスメンバをテキストモードでクラス内部から読み書きする。

<方針2>
クラスをバイナリモードで外部から読み書きする。


このどちらが良いでしょうか。またこれ以外に良い方法があればアドバイスをもらえないでしょうか。

方針2に関しては実装自体可能かどうかがわかりません。
(C言語の構造体では可能でしたのでこちらもできるかなと思いました)

特にクラスが別のクラスを継承をしている場合、親クラスのメンバも方針2で扱えるのでしょうか。


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


Name: YuO  ..熟練のプログラマー(44,031ポイント)   Date: 2010/04/22(木) 02:00   No:51063     
Title: Re:C++ クラスの保存の仕方    
シリアライズ機能ですか……。
方法は色々あるのですが,基本的にはメンバを自分で読んだり書いたりすることで実装します。
# C++にはリフレクションが存在しませんので……。

既存実装である,boost::serializationを使ってみるのがよいかもしれません。
SITE: Serialization
http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/index.html
SITE: boost::serialize - Google 検索
http://www.google.co.jp/search?hl=ja&q=boost%3A%3Aserialize


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

Name: Justy  ..伝説なるハッカー(521,956ポイント)   Date: 2010/04/22(木) 02:03   No:51065     
Title: Re:C++ クラスの保存の仕方    
 シリアライズ、シリアル化、永続化とかで探すと情報が出てくるかと思います。

C言語関係掲示板 - オブジェクトをファイルに出力
http://f4.aaa.livedoor.jp/~pointc/No.3680.html

boost::serializationの使い方
http://hw001.gate01.com/eggplant/tcf/cpp/boost_serialization.html
boost Serialization
http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/index.html


VC++テクニック : CArchiveクラスを使ってバイナリデータを読み書きする
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_FILECArchive.html
CArchive クラス
http://msdn.microsoft.com/ja-jp/library/caz3zy5s.aspx

赤紫蘇2 XML/C++
http://akaxiso.sourceforge.jp/what_is_it.html


>方針1
 (運用環境的に問題ないのであれば)メンバをバイナリーモードで1つ1つ読み書きしてもいいと思います。
 ただテキストだろうがバイナリだろうが、クラスのメンバがポインタだった場合や
そのメンバが別のクラスだった場合等の処理も必要になります。
 
 又、メンバの追加・削除・修正があったときに過去に保存したデータが読み込めなくなることを
避ける仕組みも必要になるかもしれません。


>方針2
 これはクラス丸ごと std::fwriteとか std::ofstream::writeとかで書き出そうとしているということでしょうか?
 
 クラスはクラスでもC互換構造体であればうまくいくかもしれません。
 しかしそれ以外であれば書き出すことは出来ても読み出したときに元に戻る保証がないので、
事実上できません。


>このどちらが良いでしょうか。またこれ以外に良い方法
 基本方針1で、継承している場合は基底・派生クラスそれぞれが持っているメンバのみ取り扱う。
 仕組みを作るのが面倒であれば既存のライブラリを使う、といったところでしょうか。

 或いは手っ取り早く済ませるならC互換構造体をクラスにメンバとして持たせて、
C互換構造体の部分だけを方針2で保存とか。


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

Name: たいちう  ..比類無きプログラマー(75,214ポイント)   Date: 2010/04/22(木) 09:31   No:51074     
Title: Re:C++ クラスの保存の仕方    
私の場合ですが、まず、読み書きする主体はクラスです。
自分のことは自分でするのがOOの基本でしょう。
クラスの種類が多く、継承をうまく使えない(多重継承は避けたいとか)場合には
別の方法を検討しますが、その方法はケースバイケースです。

次にテキストで書くかバイナリで書くかは、データの種類と量によります。
データが数値や文字列ならば、テキストデータにすることが殆どです。
テキストエディタで編集・確認できる強みは大きいですので。
とはいえ大量のデータだったり、あまり読まれたくない場合は、
何らかのフォーマットのバイナリデータとします。

# 読み書きの主体が自分自身と書きましたが、
# Hoge::ToString()やHoge::InitializeFromString(const string &data)
# とかを実装しておいて、他のクラスがファイルの読み書きをします。


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

Name: やっくん  ..上級者(17,605ポイント)   Date: 2010/04/22(木) 10:07   No:51077 解決!     
Title: Re:C++ クラスの保存の仕方    
皆さん返信とアドバイスありがとうございます。

とりあえず皆さんから頂いたアドバイスを元に、
@boostを使う。
Aメンバをそれぞれのクラスで保存する。
この2つをそれぞれ試してみようかと思います。

justyさんの仰った、
>C互換構造体をクラスにメンバとして持たせる
というのも良さそうでしたが、クラスをできるだけ分かりやすくしたいので今回はこちらの方針を取らないことにします。

バイナリ形式かテキスト形式の保存についてですが、データが数値や文字列なためとりあえずテキスト形式で書いてみることにします。(変更点などが最初は見れた方が楽なので)



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

Name: やっくん  ..上級者(17,718ポイント)   Date: 2010/04/24(土) 12:53   No:51190     
Title: Re:C++ クラスの保存の仕方    
どうにかセーブ機能を実装できたので報告を。

最終的にコンストラクタでファイルからのデータの読み込み、メンバ関数で書き込みを作りました。
基底クラスと派生クラス別々に関数を作ったらうまく行きました。

皆さん、アドバイスありがとうございました。(^^


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



Name: バーナー ブルース  ..ぴよぴよ(180ポイント)   Date: 2010/04/21(水) 00:29   No:50991       
Title: C言語の課題について    
生徒の番号、名前と点数を入力した後、それを昇順に並べ直したいのですが
実行はできるのですが、うまく並び替えられません


#include<stdio.h>
struct data{
 int bango;
 char name[10];
 int ten;
};
struct data seiseki[6];
main(){
 int i,j;
 for(i=0;i<5;i++){
  printf("%d人目 番号 名前 点数\n",i+1);
  scanf("%d %s %d",&seiseki[i].bango,&seiseki[i].name,&seiseki[i].ten);
 }
 for(j=0;j<4;j++){
  for(i=1;i<5;i++){
   if(seiseki[j].ten>seiseki[i].ten){
    seiseki[6]=seiseki[i];
    seiseki[i]=seiseki[j];
    seiseki[j]=seiseki[6];
   }
  }
 }
 printf("番号 名前 点数\n");
 for(i=0;i<5;i++){
  printf("%d %4s %4d\n",seiseki[i].bango,seiseki[i].name,seiseki[i].ten);
 }
}


自分ではif文の辺りが間違っているような気がします


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


Name: フリオ  ..プログラマー(32,704ポイント)   Date: 2010/04/21(水) 00:52   No:50995     
Title: Re:C言語の課題について    
 
 どううまくいかないのか、具体的に書いたほうがいいです。
 
>scanf("%d %s %d",&seiseki[i].bango,&seiseki[i].name,&seiseki[i].ten); 
 &seiseki[i].name の & はいりません。

 また、seiseki[6] は、配列の範囲外です。
 


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

Name: バーナー ブルース  ..ぴよぴよ(296ポイント)   Date: 2010/04/21(水) 23:40   No:51057     
Title: Re:C言語の課題について    


1人目 番号 名前 点数
2
2
2
2人目 番号 名前 点数
3
3
3
3人目 番号 名前 点数
4
4
4
4人目 番号 名前 点数
5
5
5
5人目 番号 名前 点数
1
1
1


上のように5人分のデータを入力するところまではいいのですが、下の実行結果のように順序がバラバラになってしまうんです


番号 名前 点数
1    1    1
5    5    5
4    4    4
2    2    2
3    3    3



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

Name: ウルスラ  ..ぴよぴよ(72ポイント)   Date: 2010/04/24(土) 00:13   No:51151     
Title: Re:C言語の課題について    
seiseki[6]は配列範囲外です。
配列は、"宣言した数値 - 1"までの配列しか使うことが出来ません。
なので、上記のように指定すると、seiseki[0]からseiseki[5]までの配列を使用することが出来ます。

よって、このプログラムの場合、seiseki[6]を"a"などの仮変数にして、順序を入れ替えたほうが分かりやすいです。

<例>
int a; /* 最初に宣言 */

a = seiseki[i]; 
seiseki[i] = seiseki[j]; 
seiseki[j] = a;

あと、
for(j=0;j<4;j++){ 
 for(i=1;i<5;i++){ 
   if(seiseki[j].ten>seiseki[i].ten){ 
    <中略>
   } 
 } 

上記の部分の、for文を次のように直してください
これで出来ると思います。
for( j = 0 ; j < 5 ; j++ ){
 for( i = j + 1 ; i < 6 ; i++ ){
   if( seiseki[j].ten > seiseki[i].ten ){  
         <中略>
   } 
 } 


これでどうでしょう?
意味が分からなければ、またお答えします。


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

Name: box  ..ハッカー(152,134ポイント)   Date: 2010/04/24(土) 00:26   No:51153     
Title: Re:C言語の課題について    
> int a; /* 最初に宣言 */

> a = seiseki[i]; 

aとseiseki[]の型が違うので、アウト。


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

Name: ウルスラ  ..ぴよぴよ(110ポイント)   Date: 2010/04/24(土) 12:32   No:51188     
Title: Re:C言語の課題について    
おっと。型を見逃していました。

int a;ではなく、

struct data a;

で、ビルドできますね。


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



Name: つつ  ..かけだし(1,940ポイント)   Date: 2010/04/23(金) 16:11   No:51120       
Title: 得点設定    
落ちてくるものを取って点数を稼ぐゲームを製作中なんですが、なぜか得点のところで詰まっています。

int Score[] = { 1, 5, 10, 50, 100, 500};の配列を使用して取った点数を合計していきたいんですが。
これをforで回してもうまくいきません。どうすればいいですか。


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


Name: たいちう  ..比類無きプログラマー(75,785ポイント)   Date: 2010/04/23(金) 16:56   No:51123     
Title: Re:得点設定    
> これをforで回してもうまくいきません。

きっと回し方が悪いのでしょう。
うまくいかなかったというプログラムを載せてくれれば、
アドバイスできると思いますが。

(載せるプログラムは必要最小限のものが望ましいです)


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,181,315ポイント)   Date: 2010/04/24(土) 10:59   No:51183     
Title: Re:得点設定    
これだけでは何とも言えませんが・・
配列要素の上限はちゃんと確認していますか?
例えばforで要素10までまわしてしまっているとか。

これだけの情報ではそれくらいしか推測できません;


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



Name: パンヤ  ..ぴよぴよ(108ポイント)   Date: 2010/04/22(木) 10:14   No:51078       
Title: 龍神録ベースの自分のゲームが他のPCで重いです    
友達にやってもらったら、ものすごく重かったと言われました。
自分はメモリが3GBのWinXP(3Dのネットゲームをするために買ったPC)ですので
友達のパソコンのスペックが低いのかもしれないのですが、やはり他のPCでもプレイできるように
したいと思っております。
ボトルネックを探そうと思ったのですが
その際
http://dixq.net/rp/44.htmlにあるデバッグ支援関数を使うことにより
どこが重いなどがわかるでしょうか?

環境はVC++2008EEでDXライブラリを使っています。

どうかよろしくお願いいたします。


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


Name: softya [URL]  ..ハッカー(151,706ポイント)   Date: 2010/04/22(木) 11:31   No:51082     
Title: Re:龍神録ベースの自分のゲームが他のPCで重いです    
そちらの説明通りであっています。
たぶん、描画関連が重いんじゃないかと思うんですけどね。
お友達のスペックも教えてもらえるとわかるかも知れません。
必要な情報は、CPUとクロック、メインメモリのサイズ、ビデオカードの名前です。
比較のため、パンヤさんのスペックもお願いします。 編集済み


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

Name: パンヤ  ..ぴよぴよ(381ポイント)   Date: 2010/04/23(金) 18:53   No:51125     
Title: Re:龍神録ベースの自分のゲームが他のPCで重いです    
私のスペックはこれです。
某ゲームの推奨PCです。

WinXPです。

CPU:インテル® Core2Duo
クロック:2997.1 MHz
メインメモリのサイズ:4GB メモリ (DDR3 SDRAM PC3-10600 / デュアルチャネル) 
ビデオカード:NVIDIA® GeForce® GT220 搭載ビデオカード (1GB / PCI Express2.0) 

友人のはちょっとわかりませんでした。
友人がそういうのに詳しくないみたいで…。

とりあえず家族のメモリが2GBのVistaでしっかり動くか試してみます。
友人もたぶんそれくらいだと思うので試してみます。


ではちょっとデバック支援関数試してみます。



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

Name: ookami  ..入門者(4,704ポイント)   Date: 2010/04/23(金) 23:25   No:51145     
Title: Re:龍神録ベースの自分のゲームが他のPCで重いです    
私も自分のXPだと大丈夫で、友人の Vista だと遅くて気になったことがありました。

↓DXライブラリさん本家で

http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1298
> Vista から WindowsOS の基本的な描画仕様に大きな変更が加わりましたので、
> XP までの描画仕様に則っている DirectDraw7 との相性が悪いのかもしれません
> というわけで・・・どうしましょう、もし実行速度の低下が開発に支障をきたすのでしたら
> バグ付きではありますが DirectX9版DXライブラリをお渡しすることもできますが・・・

こんなやり取りがあったようですので、参考になるかもしれません。


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

Name: パンヤ  ..ぴよぴよ(15ポイント)   Date: 2010/04/23(金) 23:38   No:51146     
Title: Re:龍神録ベースの自分のゲームが他のPCで重いです    
>ookami さん

ありがとうございます。
家族のPCでやってみました。
Vista 2GBのノートPCなんですが、やはりかなり動きが遅くなりました。
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1298 
の方と同じ現象なので、DirectX9版を試してみたいと思ったのですが
ダウンロードができませんでした。
http://homepage2.nifty.com/natupaji/DxLib/dxdload.html
こちらの方にも無かったので、DXライブラリ本家の方に
DirectX9版DXライブラリをねだるのは失礼ですかね?


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

Name: ookami  ..入門者(4,921ポイント)   Date: 2010/04/23(金) 23:49   No:51148     
Title: Re:龍神録ベースの自分のゲームが他のPCで重いです    
参考になったようでよかったです。(ダウンロードできなくなっているのまでは確認してませんでした...すみません。)

DXライブラリ本家の方に問い合わせるのは全く問題ないと思いますよ^^


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,180,785ポイント)   Date: 2010/04/24(土) 10:51   No:51181     
Title: Re:龍神録ベースの自分のゲームが他のPCで重いです    
知らないうちにロードを繰り返している部分があり、ちびちび使用メモリが多くなっているってことはありませんか?
フリーゲームで使用メモリが次第にふえ、1G位占有しているものを見たことがありますが、
そうなると、メモリの少ないPCでは極端に遅くなると思います。

例えば512M積んでいるPCで、OSやウィルスソフト、駐在ソフトなどが使っているメモリが350だったとしましょう。
この時200M食うゲームを起動するとあふれてしまい、遅くなります。

質問者さんのPCのスペックは良いので、気付かないが、メモリは思いのほか食っているってことがあるかもしれません。
タスクマネージャーで段々メモリが増えたりしていないか確認してみてください。

もしよければここに公開されれば、確認出来ますよ。
他の方もチェックして下さるかも知れませんし、色んな環境で動作確認出来ます。

後、DXライブラリの掲示板では管理人さんからすごく丁寧なアドバイスが頂けるので私もたまに使わせてもらっています。
管理人さんはお忙しい方なので、回答には少し時間がかかる為、時間に余裕を持って聞くと良いと思います。


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



Name: yuu  ..ぴよぴよ(181ポイント)   Date: 2010/04/24(土) 08:39   No:51172       
Title: OpenCVで画素に直接アクセスして色を取得する方法    
白黒のRGB24bit(8*3)のPNGファイルを読み込んで、そのすべてのピクセル(座標x,y)をチェックして、もしそのピクセルの色が白だったら、point[x][y] = 1、それ以外なら0を代入したいのですが、

Mat img = imread(filename, 0);
for(int y = 0; y < img.rows; y++){
     for(int x = 0; x < img.cols; x++){
          ここをどのように書けばいいのか分かりません。
          img.data + img.step*x +  y*img.elemSize() で、要素の一つ一つにアクセスできると思うのですが、ここから、いったいどのようにしたらいいのでしょうか?            
     }
}

よろしくお願いします。


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


Name: ookami  ..初心者(5,217ポイント)   Date: 2010/04/24(土) 09:45   No:51176     
Title: Re:OpenCVで画素に直接アクセスして色を取得する方法    
こんなんありました↓
http://opencv.jp/

  for(int y=0; y<height; ++y) {
    for(int x=0; x<width; ++x) {
      int a = hsv_img.step*y+(x*3);
      hsv_img.data[a+0] = (x*180/width);
      hsv_img.data[a+1] = 255;
      hsv_img.data[a+2] = ((height-y)*255/height);
    }
  }

(OpenCV使ったことないので的外れかもしれません) 編集済み


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



Name: ひよこ  ..比類無きプログラマー(82,070ポイント)   Date: 2010/04/22(木) 19:05   No:51089       
Title: ファイル書き込みで・・    
ファイルを取得し書きこもうと思って次の文を実行させているのですが、
書きこめません(ファイルが出てこないです。)
どうしたらよいのでしょうか?
head_fileはNULLではありません。
例えば
head_file = 0x016422b8 {fileName=0x016422b8 "D:\マイドキュメント\mp3\test.mp3" next=0x00000000 }
こんな感じです。
環境VC2005EE 言語Cです。よろしくお願いします。
//ファイルに書き出す    
    if(head_file!=NULL){
        FILE *fp;
        fp=fopen("data.mdt","w");    

        if(fp==NULL)
            return false;
                
        file_t *p=head_file;    
        while(p!=NULL){
            fprintf(fp,"%s\n",p->fileName);
            p=p->next;
        }
        fclose(fp);
    }


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


Name: ひよこ  ..比類無きプログラマー(82,108ポイント)   Date: 2010/04/22(木) 19:06   No:51090     
Title: Re:ファイル書き込みで・・    
fpはNULLでなくて
fp = 0x66ce1d68 {_ptr=0x00000000 <不適切な Ptr> _cnt=0 _base=0x00000000 <不適切な Ptr> ...}
となっております。


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

Name: ookami  ..入門者(4,028ポイント)   Date: 2010/04/23(金) 16:10   No:51119     
Title: Re:ファイル書き込みで・・    
時間が経っているのでもう解決しているかもしれませんが...どこか別のフォルダに出力されているなんて単純なことではないですよね...?HDD全体で、data.mdtでファイル検索してみるとか。

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

Name: ひよこ  ..比類無きプログラマー(82,233ポイント)   Date: 2010/04/23(金) 17:23   No:51124     
Title: Re:ファイル書き込みで・・    
ookamiさんありがとうございます。
別のフォルダにありました。すみませんでした。
GetOpenFileNameで開いた場所に保存されてました。
GetOpenFileNameを使うと、プロジェクトのファイルのディレクトリが変更されてしまうのでしょうか?
変更しない方法があったら教えて欲しいです。


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

Name: ookami  ..入門者(3,833ポイント)   Date: 2010/04/23(金) 22:34   No:51134     
Title: Re:ファイル書き込みで・・    
GetOpenFileName...確か変更された気がします。あいまいですが。

あらかじめ、
GetCurrentDirectory(_MAX_PATH, dir);
http://www11.plala.or.jp/studyhall/cpp/cpp.html

でカレントディレクトリを取得して、

SetCurrentDirectory(
  LPCTSTR lpPathName   // 新しいカレントディレクトリ
);
http://msdn.microsoft.com/ja-jp/library/cc429764.aspx

で戻すって感じでしょうか。あまりスマートでない気もしますが...^^;


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

Name: Justy  ..伝説なるハッカー(522,234ポイント)   Date: 2010/04/23(金) 22:54   No:51138     
Title: Re:ファイル書き込みで・・    
>GetOpenFileNameを使うと、プロジェクトのファイルのディレクトリが変更されてしまうのでしょうか
 OPENFILENAME構造体のメンバ Flagsに OFN_NOCHANGEDIRを追加すれば変更されません。

OPENFILENAME構造体
http://hp.vector.co.jp/authors/VA023539/tips/dialog/004.htm


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

Name: ookami  ..入門者(4,519ポイント)   Date: 2010/04/23(金) 23:10   No:51143     
Title: Re:ファイル書き込みで・・    
勉強になりました^^;;;; Justyさん、ありがとうございます。ひよこさん、51134 はスルーしてください。

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

Name: ひよこ  ..比類無きプログラマー(82,259ポイント)   Date: 2010/04/24(土) 06:20   No:51165 解決!     
Title: Re:ファイル書き込みで・・    
できました。
Justyさんookamiさんありがとうございました。


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



Name: あばどん  ..ぴよぴよ(62ポイント)   Date: 2010/04/22(木) 23:07   No:51101       
Title: デバッグ開始時にエラー    
初めまして。こちらのサイトを見てDXLibプログラムを始めました。
とても参考にさせてもらっています。

デバッグ時にエラー?が出てしまい困っています。どなたか助けてほしいです

ビルドは普通にできますし、デバッグなしで開始だと実行できるんですが
デバッグ開始だとwindowが一瞬生成した後にすぐ落ちてしまいます。

呼び出し履歴の欄で

[下のフレームは間違っているか、または見つかりません。kernel32.dll に対して読み込まれたシンボルはありません。]
ntdll.dll!77aab3f5()     
ntdll.dll!77aab3c8()     
    
このようなエラーが出てしまいます。あと、ローカルの欄で

hInstance,lpCmdLine,自作の配列
の値が赤色になっていました。

デバッグなしで開始だと普通に動くので開発は続けられますが・・・
このような場合どのようにすればエラーを回避できますでしょうか?お願いいたします。
コンピュータはWindows7でVS2008です。


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


Name: ぽこ  ..中級者(9,712ポイント)   Date: 2010/04/23(金) 00:14   No:51104     
Title: Re:デバッグ開始時にエラー    
現象を再現させるコードの提示がないと、当てずっぽうな
回答しか得られませんよ。


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

Name: ookami  ..入門者(4,851ポイント)   Date: 2010/04/23(金) 23:44   No:51147     
Title: Re:デバッグ開始時にエラー    
> 下のフレームは...
このエラーメッセージそのものは、呼び出し履歴を取得できないときに表示されるようです。
http://msdn.microsoft.com/ja-jp/library/a3694ts5(VS.80).aspx

↓は、2007年当時のスレですが、似たようなメッセージが。
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=384

ドンピシャではないようですが。なんとなく、ライブラリレベルで解決してもらうのがいい気がいたします。DXライブラリ本家にご相談されてはいかがでしょうか。マルチポスト規約にはご注意ください念のため。


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

Name: Justy  ..伝説なるハッカー(522,739ポイント)   Date: 2010/04/24(土) 00:16   No:51152     
Title: Re:デバッグ開始時にエラー    
>デバッグ時にエラー
 そのエラーの内容を記述して下さい。


>呼び出し履歴の欄で〜このようなエラーが出てしまいます
 その呼び出し履歴欄には ntdll.dll関連の2つしかなかったのでしょうか?
 3つ以上あるようでしたらもっと行を下に辿れば落ちたところがわかるかもしれません。


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



Name: わんわん  ..ぴよぴよ(248ポイント)   Date: 2010/04/23(金) 22:40   No:51135       
Title: 文字列の数字を整数に。。。    
char型の配列にscanfI()で文字列を入力します。

char array[256];
scanf("%s",&array);

このようにして文字列を「1523」などと入力した場合、
array[0] => 1
array[1] => 5
array[2] => 2
array[3] => 3
となると思うのですが、この配列arrayをintの整数にしたいのです。

printf("%s",array);
この出力と
printf("%d",i);
この出力を同じにするにはどうすればいいですか?

最初から
scanf("%d",&i);
にすればいいだけの話かもしれませんが、
あくまで型のキャストということでお願いします。

i = (int)array;
とかは試しましたがダメでした。。。


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


Name: sizuma [URL]  ..プログラマー(39,463ポイント)   Date: 2010/04/23(金) 23:00   No:51139     
Title: Re:文字列の数字を整数に。。。    
標準ライブラリにatoiという関数がありますよ。
http://www.cppll.jp/cppreference/stdstring.html

こういう誰でも必要としそうな処理はとりあえずライブラリから探すといいです。
勉強なら自分でアルゴリズムを考えてもいいですけどね。

>i = (int)array;
ポインタを十分理解されていないようです。
・・・僕も初心者なので偉そうなことはいえませんけどね。

arrayはあくまでポインタです。
intやchar型のように値を表すのではないのでint型には変えられません。
C++では強引に変える方法があるようですが、Cではあったかな?
とにかくポインタと値をごっちゃにしてはだめです。
 編集済み


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

Name: わんわん  ..ぴよぴよ(268ポイント)   Date: 2010/04/23(金) 23:07   No:51141     
Title: Re:文字列の数字を整数に。。。    
そういえばこんな関数もありましたね。

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


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

Name: わんわん  ..ぴよぴよ(275ポイント)   Date: 2010/04/23(金) 23:07   No:51142 解決!     
Title: Re:文字列の数字を整数に。。。    
解決チェックわすれました

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



Name: ムンバ  ..プログラマー(33,304ポイント)   Date: 2010/04/23(金) 00:20   No:51105       
Title: #include につきまして<C言語    
こんばんは。

#include について、ご意見をお伺いしたいので宜しくお願いします!

1.種類(種別名?)
 ・プロトタイプ宣言

2.役割
 ・ヘッダファイルを呼び出す。
 ・ファイルをインクルードする。
 ・呼び出したいサブルーチンに関する情報があるファイルを呼び出す。
 

3.呼び出し(インクルード)
 ・ヘッダファイルのインクルード(呼び出し)は、ソースファイルの先頭に記述する。
 ・システムに用意されているヘッダファイルは < > で囲む。
 ・自作のヘッダファイルは " " で囲む。

中途半端で重複する文章・単語等あると思うのですが
ネット検索や教本などを参照に、自分なりにまとめてみました。
賛否両論あると思うのですが、初心者の理解度としては
こんな感じで良いのでしょうか?

お時間ある方、ご指導の程、宜しくお願い致します。
(有用とか商用とかの予定は、一切ありません。)


---↓追加・言い訳---

文中の

<<初心者の理解度としては
  ↑私の事です。

---↑追加・言い訳--- 編集済み


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


Name: ぽこ  ..中級者(9,986ポイント)   Date: 2010/04/23(金) 00:41   No:51106     
Title: Re:#include につきまして<C言語    
> 1.種類(種別名?)
>  ・プロトタイプ宣言

違います。
正式名称は知りませんが、前処理指令と呼ばれるシロモノの中の一つです。
#詳しい人はフォロー願います。

> 2.役割
>  ・ヘッダファイルを呼び出す。
微妙に違います。#inlcudeはファイルを取り込むだけです。
それがヘッダファイルかどうかは関係ありません。

>  ・ファイルをインクルードする。
これが一番正確な表現です。別にヘッダファイルじゃなくても取り込めます。
↓のように書いても問題ありません(仕事でこういうコード書いていたら殴りますが。。)。
----
#include "hoge.c"
----

>  ・呼び出したいサブルーチンに関する情報があるファイルを呼び出す。

これも微妙に違います。
取り込んだファイルに「たまたま」サブルーチンに関する情報(プロトタイプ宣言)があるだけです。

> 3.呼び出し(インクルード)
>  ・ヘッダファイルのインクルード(呼び出し)は、ソースファイルの先頭に記述する。

慣例というか常識的にはソースの先頭に記述するものですが、
↓のようなコードでもエラーとはなりません。(意味は無いですが。)
---
int main() {
    return 0;
}

#include <stdio.h>
----

>  ・システムに用意されているヘッダファイルは < > で囲む。
>  ・自作のヘッダファイルは " " で囲む。

個人的には、このようにしていますが、そうしなければならないルールはありません。
""で囲まれた場合は、処理系の検索順序に従ってファイルを探し、見つからない場合は、
<>で囲んだ場合の検索順序で探す、というようになっています。

---追記
ここまで書いていてなんですが、初心者の理解としては1以外は
そういう理解で構わないと思います。

#プロトタイプ宣言や、変数の宣言がひとまとまりになったものをヘッダファイルと言います。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(177,381ポイント)   Date: 2010/04/23(金) 00:49   No:51107     
Title: Re:#include につきまして<C言語    
#include指令の仕様に関する理解と、用法に関する理解をわけて考えるべきかと思います。

はじめに仕様に関してですが、#includeは別のところにあるソースを取り込むための前処理指令です。
ヘッダ名を<>で囲んだ場合は「ヘッダ」を取り込みます。「ヘッダ」はファイルとは限りません。また、「ヘッダ」の検索方法は処理系定義です。
""で囲んだ場合は、ソースファイルを取り込みます。検索方法はやはり処理系定義です。""で囲むやり方がサポートされていない場合、または指定したソースファイルが見つからない場合は、<>で囲んだものとして検索を行います。

次に用法ですが、原則論は誰か他の方が回答してくれると思いますので、変則的な使い方を説明します。
#include指令を記述した場所にソースが取り込まれるわけですから、これを利用して、そのときどきの状態を変化させることができます。具体的には<assert.h>を調べてみてください。
また、実装の一部を別のソースファイルに分離することもできます。
例えばこんなふうにです。

/* tcscpy.c */
tchar_t *tcscpy(tchar_t *s1, const tchar_t *s2)
{
  tchar_t *result = s1;
  while ((*s1 = *s2) != 0)
  {
    ++s1;
    ++s2;
  }
  return result;
}

/* strcpy.c */
#define tcscpy  strcpy
#define tchar_t char
#include "tcscpy.c"

/* wcscpy.c */
#include <stddef.h>
#define tcscpy wcscpy
#define tchar_t wchar_t
#include "tcscpy.c"



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

Name: ムンバ  ..プログラマー(33,496ポイント)   Date: 2010/04/23(金) 01:50   No:51108     
Title: Re:#include につきまして<C言語    
自分の頭の、CPUとメモリ?の整理ができてませんです〜っ!
あるいは自分のマザーボードが、イカレテルのかもしれません。ガ━━(= ̄□ ̄=)━━ン!!

>ぽこさん、たかぎさん
 ご意見・ご指導また具体的な例文等、ありがとうございます。

少し考える時間(数週間かかるかもしれませんが)を下さい。
宣言とか定義とかの意味が、自分の頭の中でごちゃごちゃになってまして。<自爆

ん〜?揚げ足を取ってるとか、変な意味とか、悪意とかは本当に無いんです。
慣例とか習慣とか表現などの仕方、それぞれの方々がお持ちだと思いますので
今後も参考にさせて頂きたいと思います。

整理できたら、再度レスさせて頂きます。
その時は、また宜しければ、ご意見お願い致します。
またまた勝手ながら、おやすみなさい。<(_ _)>


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

Name: ムンバ  ..プログラマー(33,867ポイント)   Date: 2010/04/23(金) 20:14   No:51126 解決!     
Title: Re:#include につきまして<C言語    
こんばんは!

昨日は(↑のレス)、すみませんでした。
寝ぼけてまして、ごめんなさい。(謝
数週間も悩む事じゃないですよね。^^;

>>ぽこさん
 ご丁重なご解説ありがとうございました。理解できました。
 前処理指令、了解致しました!

 >ここまで書いていてなんですが、初心者の理解としては1以外は 
 >そういう理解で構わないと思います。

 まだ、ネットでも教本でも初級の勉強しかしていないので
 上述したような理解度になってしまっていました。
 ご解説、メモさせて頂きました。
 ありがとうございます!


>>たかぎさん
 例文まで入れて頂いてのご解説、どうもありがとうございました。
 仕様と用法とに分けて理解すれば良いのですね。

 >「ヘッダ」はファイルとは限りません。

 1年位前にも、こちらの掲示板で、たかぎさんにご指摘頂きました。
 あの頃は超初心者だったので「何を言ってるんだろ〜?」
 くらいにしか思えてなかったと思います。すみません。
 あの頃でしたら、このソースも読めなかったと思いますが
 今は、ばっちり読めます。^^
 <assert.h>、調べてみます!
 こちらもメモさせて頂きました。
 ありがとうございます!

まだまだ聞くだけのプログラマーですが
また何か御座いましたら、ご指摘ご指導の程宜しくお願い致します。
どうもありがとうございました。


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



Name: KEI  ..ぴよぴよ(262ポイント)   Date: 2010/04/22(木) 19:30   No:51091       
Title: char型変数の先頭4byteにint型を入れたい    
こちらの質問・解答はいつも勉強させられています。
この度は一つ、質問をさせてください。

char型の変数の先頭4byteにint型のデータをいれたいのですが、
どうにも上手くいきません。

#define HEADER_SIZE 4

struct tPARA_DATA
{
int x;
int y;
};

char SendData[ sizeof( tPARA_DATA ) + HEADER_SIZE];
ZeroMemory(SendData, sizeof(SendData));
SendData[0] = 180;
memcpy( &SendData[HEADER_SIZE], (BYTE *)&pSend, sizeof( tPARA_DATA) );

このようにすると、先頭1byteにはデータがはいるのですが
のこり3byteがあまってしまいます。
また、1byteへint型4byteを入れようとすると、ERROR(C4305: '=' : '' から 'char' へ切り詰めます。)
とでて、数字がおかしなものになってしまいます。

どうにかうまく解決する方法はないでしょうか?


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


Name: 組木紙織  ..比類無きプログラマー(79,622ポイント)   Date: 2010/04/22(木) 20:21   No:51093     
Title: Re:char型変数の先頭4byteにint型を入れたい    
やりたいことがよくわかってないのですが、
共用体をつかったらどうですか


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

Name: たかぎ [URL]  ..ハッカー(176,843ポイント)   Date: 2010/04/22(木) 21:05   No:51098     
Title: Re:char型変数の先頭4byteにint型を入れたい    
(想像はつきますが)処理系が不明ですので、まともな回答はできません(あるいは非常に面倒です)。
望んでいる結果を得るには、境界調整やバイトオーダーに留意する必要があるからです。


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

Name: lbfuvab  ..プログラマー(25,622ポイント)   Date: 2010/04/22(木) 23:46   No:51103     
Title: Re:char型変数の先頭4byteにint型を入れたい    
やりたいことが余りにも分かりません。
charが符号無しで、intのサイズを4で、リトルエンディアンで、構造体のパディングを0であり
pSend.x=1
pSend.y=2だったとします(順番もx,y)

するとSendDataはバイト的に考えて

| 180 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 2 | 0 | 0 | 0 |


のようになるのは分かりますか?


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

Name: ookami  ..入門者(3,959ポイント)   Date: 2010/04/23(金) 12:49   No:51114     
Title: Re:char型変数の先頭4byteにint型を入れたい    
以下のようなことかと思いますが、みなさん仰っているように環境依存が心配です。
void main(void) {
    char buf[4];
    *((int*)&buf[0])=300;
    printf("%d\n",*((int*)&buf[0]));
}

私ならですが、以下のような構造体にすると思います。的外れかもしれませんが。
struct hoge {
    struct tPARA_DATA { 
        int x; 
        int y; 
    };
    int header;
    tPARA_DATA data; 
};


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

Name: たかぎ [URL]  ..ハッカー(177,576ポイント)   Date: 2010/04/23(金) 16:26   No:51122     
Title: Re:char型変数の先頭4byteにint型を入れたい    
int型が4バイトだとわかっているのであれば、境界調整やバイトオーダーに関係なく、次のようにすれば何とかなります。

int t = 180;
memcpy(&SendData[0], &t, 4);

もちろんint型が4バイトとは限りませんし、下位ビットだけを転送するというのであればバイトオーダーが重要になってきます。


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



Name: HK  ..かけだし(1,145ポイント)   Date: 2010/04/21(水) 16:31   No:51035       
Title: フォントサイズを連続的に変えるA    
DXライブラリ、VC++2008で
フォントサイズを連続的に変える一般的な方法を知りたい といことで、以下のスレで同様の質問をし、一度解決済みにしました。
http://www.play21.jp/board/formz.cgi?action=res&resno=50994&page=&id=dixq&rln=51030

あるグラフハンドルに大きめのフォントを描画し、それを拡大率を変えて描画 というご回答をいただいたのですが、より具体的な手順を知りたいです。

以下のような方法で問題ないでしょうか。

FontHandle = CreateFontToHandle(〜) ;//大きめのフォントデータを作り変数に入れる
a = MakeGraph(〜);//グラフィックハンドルを作り変数に入れる

//ここからループ
DrawStringToHandle(〜)//文字を普通に書く
GetDrawScreenGraph(〜)//今書いたものを読み込み a に代入
DrawExtendGraph(〜)//拡大率を変えて a を描画






このような方法で問題があったらご指摘ください

一度解決済のものを再び掻き回してすいません


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


Name: Ma  ..比類無きプログラマー(91,005ポイント)   Date: 2010/04/21(水) 19:30   No:51043     
Title: Re:フォントサイズを連続的に変えるA    
MakeGraph
の前に、描画可能なハンドルを作るという宣言が必要です。(関数で宣言したはず)

関数名は、ちょっと今時間なくて調べられません。
公式掲示板の過去スレにあるとおもいます。
「描画可能」とかで検索するとでるかと。


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

Name: Justy  ..伝説なるハッカー(521,118ポイント)   Date: 2010/04/21(水) 21:53   No:51050     
Title: Re:フォントサイズを連続的に変えるA    
>このような方法で問題があったらご指摘ください 
 その方法だと、最初に普通に書いた文字がフレームバッファに残ったまま、
テクスチャ化された文字を書くことになりますので、テクスチャを表示する前に
画面を消しておく必要があるように思います。

 あと、GetDrawScreenGraphは処理負荷が高いので、フレームレートが思うように
出ないかもしれません。


 代替案としては MakeGraphではなく、MakeScreenでハンドルを生成し、ループ内で

1) SetDrawScreenで描画先を生成したグラフィックスハンドルを指定してする
2) そのハンドルに書かれている絵をClearDrawScreenで消す
3) フォントを描画、
4) SetDrawScreenで元の描画先(大抵の場合 DX_SCREEN_BACK)に戻す
5) DrawExtendGraphで描画

 という処理にします。
 最後にループを抜けるとき、生成したグラフィックスハンドルを破棄します。


 基本はこの方法でいいはずですが、GPUの性能が低い場合失敗することがありますので
その場合は最初の GetDrawScreenGraphでなんとかしてみて下さい。


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

Name: HK  ..かけだし(1,744ポイント)   Date: 2010/04/22(木) 01:31   No:51061     
Title: Re:フォントサイズを連続的に変えるA    
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=399
このログをよく読んだところ、だいたいの流れを把握できました。

1.SetDrawValidGraphCreateFlag
     で描画可能グラフハンドル作成可能にする
2.SetDrawValidAlphaChannelGraphCreateFlag
         でαch描画可能グラフハンドル作成可能にする
3.MakeGraph で描画可能グラフハンドル作成
4.SetDrawValidAlphaChannelGraphCreateFlag 
         でαch描画可能グラフハンドル作成を閉じる
5.SetDrawValidGraphCreateFlag 
         で描画可能グラフハンドル作成を閉じる

の手順で描画可能な画像を1枚作り、描画手順は以下のようにしました。

SetDrawScreen で描画先を、先ほど作ったグラフハンドルに指定
フォントを描画
SetDrawScreen で描画先を元に戻す

ループ部分で
DrawExtendGraph で先ほど描画したものを描画
ループ抜けたら破棄


という以上のような感じで、頭の中で想像していたような演出が再現できました。
アドバイスを与えてくださった皆様ありがとうございました。

これでどのようなことができるようになったかというと、
フォントを画像として扱えるようになったので、
輝度や透明度や大きさ、傾き、変形などが自由にできるようになりました。

フォントが ズームアウトしながらフェードイン したりできるので、

たとえば龍神録や本家東方でスペルカードが出てきたときに、透明度 大→小,文字サイズを大→小
という感じでかっこよくスペル名を表示することができました。 (←これが今回の目的でした)

ところでMakeGraphとMakeScreenはどう使い分けるのでしょうか。

↑で書いたとおり、MakeGraphでも一応できました。


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

Name: Justy  ..伝説なるハッカー(521,878ポイント)   Date: 2010/04/22(木) 02:07   No:51067     
Title: Re:フォントサイズを連続的に変えるA    
>MakeGraphとMakeScreenはどう使い分けるのでしょうか
 MakeScreenは MakeGraphの前後にあるSetDrawValidGraphCreateFlagを内部で呼んでくれます。
 従って、上記過程の 1と 5を省略できます。


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

Name: HK  ..かけだし(1,780ポイント)   Date: 2010/04/22(木) 23:40   No:51102 解決!     
Title: Re:フォントサイズを連続的に変えるA    
なるほど、MakeScreen を使ったほうが煩雑を避けられますね

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


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



Name: マッキー  ..かけだし(1,218ポイント)   Date: 2010/04/22(木) 20:35   No:51094       
Title: ゲーム作成で質問です。    
お疲れ様です。

本日は、本(『ゲームプログラマになる前に』)を見て勉強しているのですが、
調べても意味が分からないところがあったので、
解決したく、質問をさせていただきたいと思います。

ただ今、
『' ', '#', '.', 'o', 'O', 'p', 'P'』
という文字を扱い、コンソール上に描画するという関数を上記の本を見ながら、
作成し、処理も走ったのですが、
以下の(???のコメント部分)意味が分からず、教えていただきたいと考え記述しました。


// 描画する関数
void draw(const Object* state, int width, int height){
    // Object列挙型の順の通り、配列に格納
    const char font[] = {' ', '#', '.', 'o', 'O', 'p', 'P'};
    // 2次元配列でfontの配列を出力している
    for (int y = 0; y < height; ++y){
        for (int x = 0; x < width; ++x){
            // state(列挙型で定義済み)の配列から出力する位置を取得???←ココです。
            Object o = state[ y*width + x ];
            // fontの値を出力
            cout << font[ o ];
        }
        cout << endl;
    }
}

上記の関数は、main関数からdrawを呼び出し、コンソール上に描画する関数です。

質問の内容は、???のコメントの後の、
Object型の『o』にマスのstateの配列を代入した後に、
ナゼ、fontの要素に『o』を指定したら、各文字が選べるのか分からないということです。

分かりません。。
どうかよろしくお願いいたします。



また、下記が描画するデフォルトと列挙型のObject定義となっています。

// #壁 _空間 .ゴール oブロック p人
const char gStageData[] = "\
########\n\
# .. p #\n\
# oo   #\n\
#      #\n\
########";
const int gStageWidth = 8;    // ステージの横幅
const int gStageHeight = 5; // ステージの高さ

// 列挙型の定義(列挙された値はint型と同じ)
enum Object{
    OBJ_SPACE,
    OBJ_WALL,
    OBJ_GOAL,
    OBJ_BLOCK,
    OBJ_BLOCK_ON_GOAL,
    OBJ_MAN,
    OBJ_MAN_ON_GOAL,

    OBJ_UNKNOWN,
};

// 状態配列確保(列挙型のObjectを1次元配列として扱うためnewで動的なメモリを確保する)
Object* state = new Object[ gStageWidth * gStageHeight ];




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


Name: マッキー  ..かけだし(1,240ポイント)   Date: 2010/04/22(木) 20:42   No:51095 解決!     
Title: Re:ゲーム作成で質問です。    
すいません。分かりました。

また、困った時に伺います。


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



Name: c++初心者  ..入門者(2,863ポイント)   Date: 2010/04/21(水) 11:56   No:51019       
Title: 再び学校の宿題に困ってます。助けてください。    
こんにちは。
学校の宿題がわからなくて困っています。助けてください。

課題についての説明なのですが。

eng-stud-.txtというファイルの中に
Jon Doe  // 名前
111111111 //IDナンバー
93 85      //(左)英語のスコア (右)歴史のスコア
Jane Smith
999999999
87 91
Mary Jones
123456789
83 71
Bo Jack
987654321
65 97
Adam French
765678655
100 8
Amy Lee
984754340
78 64
Chris Wilson
345839487
95 98
Jon Wood
472398740
77 75
Mike Jones
472675608
88 88

というようなデータが入っています。

僕のプログラムはそれを読み取り、

90点以上ならA
80点以上ならB
70点以上ならC
60以下ならFというようなグレードをつけ、

最後に結果を表示させます。

プログラムはほぼ完成しています(完成してると思われます)。
しかし、最後に結果をアルファベット順、スコアの高い(低い)順、IDナンバー順のように並べかえなければいけないのですが、いろいろ試したのですが、しっかりとした順番になりません。
それから/* in */ /* out */ /* inout */ のコメントを入れなければいけないのですが、正しくできているのかわかりません。

教えてください。よろしくお願いします。



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


Name: たいちう  ..比類無きプログラマー(74,680ポイント)   Date: 2010/04/21(水) 13:24   No:51021     
Title: Re:再び学校の宿題に困ってます。助けてください。    
sort_low_histだけ直してみました。
我慢できる範囲で原型通りに。
// sorting order for history from lowest
void sort_low_hist(/* inout */StudentGrade st[]
                  ,/* in */int num)
{
    int passCount;
    int sIndx;
    int minIndx;
    for (passCount = 0; passCount < num - 1; passCount++)
    {
        minIndx = passCount;
        for (sIndx = passCount + 1; sIndx < num; sIndx++)
        {
            if (st[sIndx].hist201 == st[minIndx].hist201)
            {
                if (st[sIndx].lname == st[minIndx].lname)
                {
                    if (st[sIndx].fname < st[minIndx].fname)
                        minIndx = sIndx;
                }
                else if (st[sIndx].lname < st[minIndx].lname)
                    minIndx = sIndx;
            }
            else if (st[sIndx].hist201 < st[minIndx].hist201)
                minIndx = sIndx;
        }
        StudentGrade temp = st[minIndx];
        st[minIndx] = st[passCount];
        st[passCount] = temp;
    }
}

他のソート以外には、stud_num・etotal・htotalの初期化がされていない事に気付きました。
細かい点は他にも色々指摘がありそうです。


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

Name: c++初心者  ..入門者(3,321ポイント)   Date: 2010/04/21(水) 13:51   No:51022     
Title: Re:再び学校の宿題に困ってます。助けてください。    
たいちうさん、返信ありがとうございます。

試してみましたが、このような結果になりました。

Which order would you like?
Enter:
0 for Lastname
1 for English scores starting from lowest
2 for English scores starting from highest
3 for History scores starting from lowest
4 for History scores starting from highest
5 for ID number
:3
Student Name          Student ID              Eng101             Hist201
------------          ----------              ------             -------
 Adam French           765678655              100(A)                8(F)
  Mary Jones           123456789               83(B)               71(C)
     Jon Doe           111111111               93(A)               85(B)
  Mike Jones           472675608               88(B)               88(B)
     Amy Lee           984754340               78(C)               64(D)
    Jon Wood           472398740               77(C)               75(C)
  Jane Smith           999999999               87(B)               91(A)
     Bo Jack           987654321               65(D)               97(A)
Chris Wilson           345839487               95(A)               98(A)
                  Class Average:               85.11               75.22


結果はまだバラバラのままです…。

細かくどこに問題があるのか教えていただけませんか?たくさんあるのはわかっていますが……教えていただいたほうが勉強になるので。

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


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

Name: たいちう  ..比類無きプログラマー(74,730ポイント)   Date: 2010/04/21(水) 14:00   No:51023     
Title: Re:再び学校の宿題に困ってます。助けてください。    
> 細かくどこに問題があるのか教えていただけませんか?

まずはどう直したのか教えてもらわないと。
それとソートができていないということは、私の言う細かい点以前の問題ですよ。


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

Name: c++初心者  ..入門者(3,346ポイント)   Date: 2010/04/21(水) 14:19   No:51024     
Title: Re:再び学校の宿題に困ってます。助けてください。    
僕のプログラムのソートの中の問題をうかがったのですが、言葉足らずですみませんでした。

見たところtempの長い列を直されたようですが、そこに問題があるのでしょうか?



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

Name: たいちう  ..比類無きプログラマー(74,829ポイント)   Date: 2010/04/21(水) 14:39   No:51025     
Title: Re:再び学校の宿題に困ってます。助けてください。    
> 見たところtempの長い列を直されたようですが、
> そこに問題があるのでしょうか?

そこに問題は2つあります。

1つは無駄に長い処理を書いていること。
私が書いたように1行の代入で済むところを、
わざわざ7行で書いています。
何か特殊な意図があるのですか?

2つ目はソートが間違っていること。
最初の問題点は無駄にソースコードを長くするだけですが、
それによってプログラムが判りにくくなったため、
2つ目の問題を引き起こしています。

自分で書いたソースコードの代入部分を、
/* st[minIndx]とst[passCount]を入れ替える */
という風にコメントに置き換えて、
私の書いたソースコードと慎重に比較してください。


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

Name: c++初心者  ..入門者(3,458ポイント)   Date: 2010/04/21(水) 22:28   No:51054     
Title: Re:再び学校の宿題に困ってます。助けてください。    
たいちうさん、できました!

並び替えをする部分が二つ目のループに入っていたのが原因だったようですね。

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

よろしければ、in, out, inout のコメントについても知りたいのですが、教えていただけないでしょうか?

よろしくお願いします。


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

Name: ぽこ  ..中級者(9,687ポイント)   Date: 2010/04/21(水) 22:54   No:51055     
Title: Re:再び学校の宿題に困ってます。助けてください。    
> よろしければ、in, out, inout のコメントについても知りたいのですが、教えていただけないでしょうか?

ある関数内で、渡された引数を参照する場合はin。
ある関数から抜けたときに引数として渡した変数の値が変わっているものはout。
その両方を満たすものはinoutとなります。

outとなる引数は、C言語の場合だと、配列型かポインタ型になります。

#配列型やポインタ型だからといって必ずしもoutになるわけではありません。


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

Name: c++初心者  ..入門者(3,500ポイント)   Date: 2010/04/22(木) 15:08   No:51087     
Title: Re:再び学校の宿題に困ってます。助けてください。    
ぽこさん、ありがとうございました。

間違って、コメントしていたようなので修正しました。


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



Name: ごぼうどん  ..ぴよぴよ(386ポイント)   Date: 2010/04/21(水) 17:12   No:51038       
Title: for文の()内の i ++    
初めまして、ごぼうどんと申します、C++を一週間ほど前に始めました
ゲームプログラミングの館さんを参考にして、DXライブラリを使った
C++でのゲームの作り方を学んでいるのですが
13章の

#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ;                  // ウィンドウモードに変更
        if( DxLib_Init() == -1 ) return -1 ;        // DXライブラリ初期化処理
 
 
        SetDrawScreen( DX_SCREEN_BACK ) ;           // 描画先を裏画面に設定
 
        int i ;
        for( i = 0 ; i < 300 ; i ++ )
        {
                ClearDrawScreen();                            // 裏画面のデータを全て削除
                LoadGraphScreen( i, 0, "char.png" , TRUE ) ; //裏画面へ画像を描写
                ScreenFlip() ;                                // 裏画面データを表画面へ反映
        }
 
 
        WaitKey();              // 何かキー入力があるまで待つ
        DxLib_End() ;           // DXライブラリ使用の終了処理
        return 0 ;              // ソフトの終了
}


の for( i = 0 ; i < 300 ; i ++ ) の i ++ は何を意味しているのでしょうか? 編集済み


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


Name: softya [URL]  ..ハッカー(151,185ポイント)   Date: 2010/04/21(水) 17:19   No:51039     
Title: Re:for文の()内の i ++    
C++または、C言語の勉強のために参考にしている書籍やサイトを教えてください。
それに基づいて説明をした方が良いと思いますから。


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

Name: たかぎ [URL]  ..ハッカー(176,517ポイント)   Date: 2010/04/21(水) 17:32   No:51040     
Title: Re:for文の()内の i ++    
>  i ++ は何を意味しているのでしょうか?

iをオペランドとした後置増分演算子の式です。
確かにi++だけでは検索のしようもありませんね。


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

Name: 初級者  ..初心者(7,989ポイント)   Date: 2010/04/21(水) 19:24   No:51042     
Title: Re:for文の()内の i ++    
Windowsベースのゲームプログラミングに
手を出す前に、言語の文法を
しっかり頭に入れることを
強くおすすめします。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,179,726ポイント)   Date: 2010/04/21(水) 20:06   No:51047     
Title: Re:for文の()内の i ++    
softyaさんの問いに対する答えを待った方がよいのかもしれませんが、一応
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
この辺の5.2節あたりに書いてあります。

ゲームプログラミングの館は、C言語を勉強して1カ月の人でも大丈夫とは書いていますが、
完全に初めてだと後々辛いと思いますので、この辺で
http://www.google.co.jp/search?hl=ja&q=C%E8%A8%80%E8%AA%9E%E3%80%80%E5%85%A5%E9%96%80&lr=lang_ja
一通り勉強すると良いと思います。


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

Name: ごぼうどん  ..ぴよぴよ(591ポイント)   Date: 2010/04/22(木) 02:01   No:51064 解決!     
Title: Re:for文の()内の i ++    
つまり、++というのは+1ということですね

参考にしている書籍などはなく、自分の知識と困ったときに調べるだけです
とあるツールで変数やループなどを知り、HSPで少しだけプログラムについて学びました
ゲームプログラミングの館を見て、これなら自分にもできるかな、と思ってしまったのですが
そんな自分が甘かったです、Dixqさんに紹介していただいたサイトを見て、出直してきます

レスを下さった皆様、ありがとうございました
基本をしっかりとするべきでした、申し訳ありません


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

Name: softya [URL]  ..ハッカー(151,480ポイント)   Date: 2010/04/22(木) 11:15   No:51080     
Title: Re:for文の()内の i ++    
もう見てないかも知れませんが…。
まず、C言語とC++は違う言語です。VC++と言う開発環境の名前のせいで混乱しますよね。
とりあえずC言語を理解すれば、ここのサイト内容は理解できるようになりますのでやってみてください。
どこまでやる必要があるかと言うと、龍神録やゲームプログラミングの館をちゃんと理解するには構造体やポインタを勉強する必要があります。

サイトも紹介しておきます。

「猫でもわかるプログラミングのサイトC言語編」
http://homepage2.nifty.com/c_lang/
「苦しんで覚えるC言語(苦C)」
http://homepage3.nifty.com/mmgames/c_guide/
「C言語入門」
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
「C言語編」
http://www.geocities.jp/ky_webid/c/index.html
「C言語で始めるプログラミングの基礎」
http://itpro.nikkeibp.co.jp/article/COLUMN/20090420/328713/
「アルゴリズム入門」
http://www5c.biglobe.ne.jp/~ecb/algorithm/algorithm00.html



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



Name: Blue  ..中級者(12,184ポイント)   Date: 2010/04/21(水) 05:42   No:51006       
Title: ウインドウモードの処理落ちについて    
DXライブラリでゲームを制作をしてると
フルスクリーンモードだと処理落ちしないのに
ウインドウモードだと処理落ちする箇所があるのですが
これはどういった原因で処理落ちするのでしょうか?
DXライブラリの仕様なのでしょうか?
また、ウインドウモードで処理落ちする箇所は
よくαブレンドや加算ブレンドを多用してます。
多分これが原因なのかなと考えているのですが、
ブレンドを沢山使っても処理落ちしないテクニックとか
あれば是非教えてほしいです。よろしくお願いします。


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


Name: Ma  ..比類無きプログラマー(90,908ポイント)   Date: 2010/04/21(水) 10:24   No:51016     
Title: Re:ウインドウモードの処理落ちについて    
基本的にDirectXのプログラムにおいては、フルスクリーンのほうが高速です。
処理が優先されるためでしょうね。

で、それが仕様か、ソースのミスか、ライブラリのミスか、というのを判断するには、どのぐらい処理落ちするかどうか、というのが重要ではないでしょうか。

fps でいうと、どのぐらい落ちますか?
60fps から 45fps ぐらいな処理落ちだったら、仕様と考えてもいいような気がします。


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

Name: Blue  ..中級者(12,254ポイント)   Date: 2010/04/22(木) 08:09   No:51072     
Title: Re:ウインドウモードの処理落ちについて    
処理落ちする部分では30〜40fpsくらいで処理落ちします。
ただ、会社のPCで実験してみたところ、処理落ちはしませんでした。
もしかしてPCのスペックにも処理落ちに関係はあるのでしょうか?


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

Name: Ma  ..比類無きプログラマー(91,295ポイント)   Date: 2010/04/22(木) 09:51   No:51075     
Title: Re:ウインドウモードの処理落ちについて    
上限が 60 fps なのでしょうから、単純に何fps落ちたかで判断するのは間違っているとおもいませんか?
だから、簡単にマシンのスペックによって処理落ちの具合が変わることがあるとはいえません。

普段60fpsが限界なPCが、40fpsに落ちるのと、余裕で60fpsいけるPCが40fpsに落ちるのとは
処理落ちの度合いが大きく違いことと同じことです。
ただし、会社のPCのほうがスペックが悪いのなら、話はかわってきますね。

結局、実際のコードを部分的に公開するのが一番早いと思いますよ。
ただ、αブレンドや加算ブレンドが、マシンによってどのような影響を与えるかどうかは、知らないので
私はコードに問題があるかどうかぐらいしか考えることができません。

(あと、Blueさんのスペックがわかると詳しい方が答えやすいと思います。)


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



Name: アルル  ..かけだし(1,047ポイント)   Date: 2010/04/21(水) 08:20   No:51007       
Title: 5目並べを作っております    
DXライブラリで5目並べを作っており判定以外の実装は出来ました。
しかし判定について検討がつかなく質問させて頂きました。

Mapという二次元配列に白なら1、黒なら2というように入っております。
この値を見てどっちが勝ったかのWinF(int型)判定をしたいです。
動作は特に問題ないようなのですがソースはこんな感じで大丈夫なのでしょうか?
汚いソースで申し訳ないのですがアドバイスを頂けないでしょうか?

一部抜粋

#define        CEL_W    18
#define        CEL_H    18
int Map[CEL_H][CEL_W];

    bool Check = false;
    for(int i=0; i<CEL_H; i++){
        for(int j=0; j<CEL_W; j++){
            for(int Num=1; Num<PlayCount+1; Num++){

                // 横
                if(j < CEL_W-3){
                    if(Map[i][j] == Num && Map[i][j+1] == Num && Map[i][j+2] == Num && Map[i][j+3] == Num ) Check = true;
                }
                
                // 縦
                if(i < CEL_H-3){
                    if(Map[i][j] == Num && Map[i+1][j] == Num && Map[i+2][j] == Num && Map[i+3][j] == Num ) Check = true;
                }
                
                // 斜め右下
                if(i < CEL_H-3 && j < CEL_W-3){
                    if(Map[i][j] == Num && Map[i+1][j+1] == Num && Map[i+2][j+2] == Num && Map[i+3][j+3] == Num ) Check = true;
                }

                // 斜め右上
                if(i > 3 && j < CEL_W-3){
                    if(Map[i][j] == Num && Map[i-1][j+1] == Num && Map[i-2][j+2] == Num && Map[i-3][j+3] == Num ) Check = true;
                }

                if(Check){
                    WinF = Num;
                }
                Check = false;
            }
        }
    }


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


Name: たいちう  ..比類無きプログラマー(74,188ポイント)   Date: 2010/04/21(水) 09:07   No:51008     
Title: Re:5目並べを作っております    
判定部分は関数の形にして貼り付けた方が、読む人に判りやすいです。
プログラムの構造上もその方が良いと思いますが、そうなってませんか?

ぱっと見て気付くのは、この判定が4目の連続しか見ていないことです。
4目並べなのですか?それともリーチの判定?

その他、細かい点で気付いたこともありますが、
手始めに判定関数のテスト用のデータを用意して試してみるべきでしょう。


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

Name: アルル  ..かけだし(1,541ポイント)   Date: 2010/04/22(木) 07:55   No:51071     
Title: Re:5目並べを作っております    
すみません(汗)
添付したのはリーチの判定でした><
良くわかりましたね・・・。

又、PG上では関数になっております。
テストデータを用意して試してみたのですが問題はないのですが
配列なので領域を壊していたら怖いので質問させて頂きました。

又、ソースを作っていて気になったのですがオセロ等は置いてあるところと
隣接していないとおけないですよね?
あの判定ってどうやって行っているのでしょうか?

    bool checkF = false;
    for(int i=0; i<CEL_H; i++){
        for(int j=0; j<CEL_W; j++){
            if(Map[i][j] != 0) checkF = true;
        }
    }
    // 置いてあるかどうか
    if(checkF == false){
        if(Cy == CEL_H-1 && Map[Cy][Cx] == 0){
            Map[Cy][Cx] = PlayNum;
        }
    }else{
        if(Cy > 0 && Cy < CEL_H-1 && Cx > 0 && Cx < CEL_W-1){
            if(Map[Cy+1][Cx] != 0 || Map[Cy-1][Cx] != 0 || Map[Cy][Cx-1] != 0 || Map[Cy][Cx+1] != 0){
                if(Map[Cy][Cx] == 0) Map[Cy][Cx] = PlayNum;
            }
        }else if(Cx == 0){
            
        }        
    }


自分なりに実装しようと思ったのですがよく理解できませんでした。
宜しければサンプルとなるソースを書いては頂けないでしょうか?
丸投げとなってしまい申し訳ないと思っているのですが
一度、配列を使ったPGで人が作った綺麗な判定のソースをみてみたいんです・・・。

今後の為にもお力添えを願えないでしょうか?


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

Name: たいちう  ..比類無きプログラマー(75,017ポイント)   Date: 2010/04/22(木) 09:11   No:51073     
Title: Re:5目並べを作っております    
> 添付したのはリーチの判定でした><

リーチの判定だとしても不完全だと思います。
(4, 1)に相手の石が置いてなければ、
{ (1, 1), (2, 1), (3, 1), (5, 1) } の並びはリーチとすべきでしょう。

逆に、(1, 1)と(6, 1)に相手の石が置いてあるならば、
{ (2, 1), (3, 1), (4, 1), (5, 1) } の並びはリーチではありません。


> 又、ソースを作っていて気になったのですがオセロ等は置いてあるところと
> 隣接していないとおけないですよね?

> 自分なりに実装しようと思ったのですがよく理解できませんでした。
> 宜しければサンプルとなるソースを書いては頂けないでしょうか?

意図が判りません。5目並べに隣接の判定は必須ではないですよね?
単にお手本として似たようなゲームのソースコードが欲しい、
というだけでしたら、書籍と(半分ネタとして)動画を紹介します。

『リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装』
http://www.amazon.co.jp/dp/4875934289

【プログラミング】オセロを1 時間で作ってみた【実況解説】
http://www.nicovideo.jp/watch/sm8391299


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



Name: マッキー  ..ぴよぴよ(210ポイント)   Date: 2010/04/21(水) 19:40   No:51045       
Title: 無題    
お疲れ様です。
            
私は、今独学で、visual studio2008C++で本を読みながら、勉強しているのですが、
ウィンドウズフォームの中の処理で意味が分からないところがあったので、教えてい
ただきたいと思い投稿致しました。

処理の内容としては、日付・体重を型付データセットを使ってフォームに入力すると
いう処理になります。


分からないところは、???とコメントを記述してあるところです。
そこの部分の処理を教えていただきたいです。

処理は走っているのですが、
どうした内容かということが本に書いてなく
ネットで調べてもよく分かりません。


            
            // WeightDataTableのレコードの分だけループ
            for each (WeightDataSet::WeightDataTableRow^ drWeight
                in WeightDataSet->WeightDataTable)
            {
                // 文字列にした日付を代入する
                expression = "日付= '"
                    + drWeight->日付.ToShortDateString()
                    + "'";
                // 配列の変数に、???
                array<SummaryDataSet::SumDataTableRow^>^ curDR
                    = (array<SummaryDataSet::SumDataTableRow^>^)
                SummaryDataSet->SumDataTable->Select(expression);
                // 変数の値が0の時
                if (curDR->Length == 0)
                {
                    // AddSumDataTableを呼び出し、
                    SummaryDataSet->SumDataTable->AddSumDataTableRow(
                    drWeight->日付, 0, 0, drWeight->体重);
                }
                else
                {
                    // 体重を加算する
                    curDR[0]->体重+= drWeight->体重;
                }
            }

どうかよろしくお願いいたします。


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


Name: Justy  ..伝説なるハッカー(521,236ポイント)   Date: 2010/04/21(水) 22:18   No:51052     
Title: Re:無題    
 多分その処理で呼ばれている関数はこれです。

DataTable.Select メソッド (String) (System.Data)
ttp://msdn.microsoft.com/ja-jp/library/det4aw50(v=VS.80).aspx

 SumDataTableから expressionにマッチする……察するに日付毎に管理される体重データの合計を
更新する為の DataRowオブジェクトを取得しているかと。


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

Name: マッキー  ..ぴよぴよ(354ポイント)   Date: 2010/04/21(水) 22:54   No:51056     
Title: Re:お返事ありがとうございます    
Justyさん、お返事ありがとうございます。

サイトの方見させていただきました。

初心者なもので、msdnのサイトは難しく感じます。
慣れるよう努力したいです。

先ほどの答えは、
指定した日付の行の値を配列に格納して、
値が入っていれば
体重を加算する。ということですか?


間違っていたら申し訳ありません。


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

Name: Justy  ..伝説なるハッカー(521,367ポイント)   Date: 2010/04/22(木) 00:09   No:51058     
Title: Re:お返事ありがとうございます    
>指定した日付の行の値を配列に格納して、
 ちょっと違います。“値”を格納しているわけではなく、正しくは“値の入ったオブジェクト”を
curDR配列に格納している、ということになります。

 で、指定した日付のものがあればその日付の“体重”に加算し、なければ  AddSumDataTableを呼び出して
何かしています。


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

Name: マッキー  ..ぴよぴよ(516ポイント)   Date: 2010/04/22(木) 01:30   No:51060 解決!     
Title: Re:お返事ありがとうございます    
Justyさん、よく分かりました。どうもありがとうございました。

入門書も終わったので、今度は簡単なゲーム作りか、

自分で考えてアプリケーション作りをしてみようかと思います。

まだまだ、visualstudioの仕組み等が分かっていませんが、努力してみたいと考えています。

暫く、このサイトに頼ることがあるかもしれませんので、その際はよろしくお願いいたします。

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


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



Name: ペイント  ..ぴよぴよ(62ポイント)   Date: 2010/04/21(水) 20:32   No:51048       
Title: 教えてください!    
はじめまして。
最近このサイトを拝見しています。
では、早速ですが質問のほうをお願いします。

僕はまだ7章のあたりまでしか進んでいないのですが、ここで問題が起こりました。
画像が表示されないのです。どうしたらいいでしょうか?
一応、黒いウィンドウは表示されます。escにもちゃんと反応します。
どうすれば解決するんでしょうか?
どなたか詳しい方、教えてください。お願いします。


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


Name: softya [URL]  ..ハッカー(151,256ポイント)   Date: 2010/04/21(水) 22:12   No:51051     
Title: Re:教えてください!    
ゲームプログラミングの館でしょうか?それとも龍神録ですか?
7章なら龍神録っぽいのですが。
もしかしたら、グラフィックを所定の場所に置いていないとか?


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

Name: ペイント  ..ぴよぴよ(126ポイント)   Date: 2010/04/21(水) 22:27   No:51053 解決!     
Title: Re:教えてください!    
質問したのにもかかわらず、ただの勘違いでした。
;を忘れていたという初歩的な間違いで、お恥ずかしいです。
お騒がせしました。ごめんなさい。


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



Name: なっきー  ..ぴよぴよ(522ポイント)   Date: 2010/04/21(水) 19:31   No:51044       
Title: 入門書の次は?    
始めまして、なっきーと申します。
C言語の入門書を買って三ヶ月くらいです。
四回ほど最初から最後まで目を通し、
本に書いてあるものを作成しながら
勉強してきました。

開発環境はVC++ 2008の無料版で、
本にはコマンドプロントを使うコンパイル方法が
載っていたのでそれでコンパイルしています。

現在は標準関数とWinsockを使うことができます。

そこで次の段階としてはどのような勉強をすればいいでしょうか?

私が作りたいものは
ネットワーク通信系です。
自分と友達の両方に私の作ったソフトがあり、
それを使いながら通信するということがやりたいです。
Skypeのようにチャットをしたり、ファイルを送信しあったり、
そんなものを作成したいです。
ネットワーク通信ならWinsockをもっと勉強すればいいかな?
と思うのですが、実際にはどんなことを勉強すればいいでしょうか?

それから今は作ったものはプロントで動いていますが
WindowsプログラミングでGUIにしたいです。
しかし、参考サイトなどを見ると今まで勉強してきたC言語とは
まったく違って(ホントはそんなことないのでしょうが・・・)理解できません。
どこから勉強すればいいでしょうか?


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,179,686ポイント)   Date: 2010/04/21(水) 19:59   No:51046     
Title: Re:入門書の次は?    
> なっきーさん

こんばんは。
四回も同じ本に目を通されるとは勉強熱心ですねっ。
さぞ今後ご活躍されることでしょう☆

お聞きする限り、「勉強」という段階は卒業していいように思います。
完全に趣味なのであれば、後は自分の好きな物を作っていく過程で必要な知識を身につけていけばいいと思います。

まずは簡単な所から
http://www.google.co.jp/search?hl=ja&q=socket+bind&lr=lang_ja&aq=f&aqi=&aql=&oq=&gs_rfai=

この辺でネットワーク通信の基礎について学んでみて、LAN内で実際にチャットしてみるといいと思います。
(5個目か6個目あたりにチャットのプログラムがあります)
もっと知りたければウェブより本が良いと思います。
大きな書店に行って自分の読みやすそうな本を探してみてください。

また、windowsプログラミングなら定番ですが、この辺紹介しておきます。
http://homepage2.nifty.com/c_lang/

ご存知かもしれませんが、C言語を学ぶ人にとって定番のサイトです。
ここのwindowsSDK編を読んで行ってみてください。

ウェブにある情報だけでかなり勉強できます。
これが全部もし終われば勉強の仕方を聞くような段階ではなくなっていると思います。

> しかし、参考サイトなどを見ると今まで勉強してきたC言語とは 
> まったく違って(ホントはそんなことないのでしょうが・・・)理解できません。 

みんなそうだと思いますよ。
私も初めて見た時は一瞬で閉じるボタン押す位の勢いだったと思います(笑
今までのプログラムと種類が違うからだと思います。
後、windowsは独自の定義のオンパレードなので、見知らぬ定義だらけでわけがわからなくなりがちです。
だから少しずつ少しずつ学んでいくと抵抗がないと思いますよ。
猫でもわかるプログラミングでもいいですし、本でもよいと思います。
これもやはり大きな書店にいって端から読んでみて自分がこれだと思うものを見つけてみるのがいいと思います。
読みやすいと感じる本は人それぞれだし、自分が読みやすいと思った方が暗示なのか何なのか人に言われて読む本より読み進めやすい気がします。

ではよいソフトが出来るといいですね☆


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

Name: なっきー  ..ぴよぴよ(613ポイント)   Date: 2010/04/21(水) 20:39   No:51049 解決!     
Title: Re:入門書の次は?    
>管理人様
はじめまして。

とても参考になるようなご回答ありがとうございます。
まだまだ未熟者ですのでこれから度々質問させていただくことも
あると思います。
そのときはよろしくおねがいします。


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



Name: ムンバ  ..プログラマー(32,255ポイント)   Date: 2010/04/19(月) 23:26   No:50940       
Title: スパイウェアについて(雑談・相談)    
こんばんは。

スパイウェア(COOKIE)について、疑問があるので質問させて頂きます。
スパイウェアについての「Q&A」など
無償で優しく教えて頂けるページなど御座いましたら
ご紹介の程、宜しくお願い致します。<(_ _)>

疑問に思ったきっかけは
某ネットゲームに参加しているのですが、そのゲームにログインすると

COOKIE_ADVERTISING

が、必ずウィルスバスターの
「ウィルス/スパイウェア対策」の検索
で、スパイウェアとして引っかかります。

このネットゲームの管理者さん?に、メールで質問したところ

>>【回答】
>>お問い合わせの件でございますが、
>>ご連絡いただいた「COOKIE_ADVERTISING」はCookieファイルですので、
>>このファイル自体が危険な活動を行うことはありません。

>>※CookieとはWebブラウザとWebサイト間で情報を
>> やりとりするためのファイルです。
>> Webサイトは前回のアクセス内容を呼び出すことができ、
>> ユーザーごとに異なるサービスや画面を提供することが可能となります。 

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

との、ご返答を頂きました。

私としては、この「COOKIE_ADVERTISING」
全くメリットが無いので、入らない様にしたいと思い
ウィルスバスターの、トレンドマイクロ・ウイルスバスタークラブセンター
に、問い合わせてみました。

ご返答は、以下の文章でした。

>>トレンドマイクロ・ウイルスバスタークラブセンターです。
>>弊社製品をご愛用いただき、誠にありがとうございます。

>>お問い合わせの件につきまして、下記のとおりご案内いたします。

>>恐れ入りますが、ウイルス/スパイウェアの監視機能が有効になる
>>場合、スパイウェアとの関連が疑われる不審な変更が見つかり
>>自動的に変更を拒否したことが可能でございます。

↓「この文章」

>>恐れ入りますが、ウイルス/スパイウェアの監視機能が有効になる
>>場合、スパイウェアとの関連が疑われる不審な変更が見つかり
>>自動的に変更を拒否したことが可能でございます。

↑「この文章」

の意味が理解できないのです。(汗

Q1:どなたか「この文章」について、ご解説お願い頂けますか?
Q2:皆さんはスパイウェアを、どの様に対処されてますか?



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


Name: たかぎ [URL]  ..ハッカー(176,483ポイント)   Date: 2010/04/20(火) 00:16   No:50954     
Title: Re:スパイウェアについて(雑談・相談)    
> Q1:どなたか「この文章」について、ご解説お願い頂けますか? 

タイプミスや編集ミスがあるか、そうでなければ書いた人が外国人なのでは?

> Q2:皆さんはスパイウェアを、どの様に対処されてますか? 

Windowsを使わないことで対処しています。


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

Name: ぽこ  ..初心者(8,809ポイント)   Date: 2010/04/20(火) 00:42   No:50957     
Title: Re:スパイウェアについて(雑談・相談)    
> Q1:どなたか「この文章」について、ご解説お願い頂けますか?

「恐れ入りますが、いま一度トレンドマイクロ・ウイルスバスタークラブセンターに
お問い合わせいただきますよう、お願い申し上げます。」
をオブラート(?)に包んだ奥ゆかしい日本語です。
#機械翻訳?

> Q2:皆さんはスパイウェアを、どの様に対処されてますか?

モノによりますが、トラッキングCookieなら気にしません。


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

Name: ムンバ  ..プログラマー(32,596ポイント)   Date: 2010/04/20(火) 10:02   No:50966 解決!     
Title: Re:スパイウェアについて(雑談・相談)    
おはようございます。
ご意見ありがとうございます!

>たかぎさん
>タイプミスや編集ミスがあるか、そうでなければ書いた人が外国人なのでは?

 そうですよね。自分だけが理解できないのではなくて安心しました。^^;
 ずっとWindows使ってるんで、なかなか変更するのは難しいですね〜。
 検討してみます!ありがとうございました。

>ぽこさん
>#機械翻訳?

 あはは。異星人語かもしれませんね!
 高木さんもおっしゃられてる様に日本人じゃないんですね。
 安心しました。(爆

なんか気になって書き込みさせて頂きましたが
トラッキングクッキーだから、当面は放置でいきます。
ご意見ありがとうございました。
もう少しだけ、ご意見募集させて頂きます。<_ _>

---追記・解決---

こちらで、ご意見をお聞きするとやっぱり安心できます。^^
どうもありがとうございましたっ!

今から「14歳からはじめる C言語オンラインゲームプログラミング教室」
(俺の場合は、44歳からはじめる・・・ヾ(・・;)オィオィ)
勉強したいと思います!
進めていく上で、また質問等させて頂く事と思いますが
その節は、またご指導の程、宜しくお願い致します。

 編集済み


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

Name: dic  ..熟練のプログラマー(62,863ポイント)   Date: 2010/04/21(水) 16:27   No:51033     
Title: Re:スパイウェアについて(雑談・相談)    
http://ja.wikipedia.org/wiki/HTTP_cookie
cookieについて返答としては正しい返答をされてます
ただ、悪用される可能性もあるので、信頼できるサイトだけ有効にした方がいいでしょう

と、これまた、機械的な(事務的な)返答です

無料のネットゲームでしょうか?
表示するweb情報を元に広告を表示して、商品を購入してもらい
運営費をまかなうってとこでしょうかね

ニコニコ動画なども広告いっぱいありますよね
広告で運営成り立ってるって聞いたことないでしょうか
 編集済み


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

Name: ムンバ  ..プログラマー(32,981ポイント)   Date: 2010/04/21(水) 16:52   No:51037 解決!     
Title: Re:スパイウェアについて(雑談・相談)    
dicさん、ご意見ありがとうございます。
ご紹介頂いたページ内の

>これをプライバシーの侵害と考える人も、そう考えない人もいる。
>このようなcookieを設定したくないユーザのために
>クライアント向けセキュリティ対策ソフトの多くは
>トラッキング・クッキーを検出・除去する機能を備えている

とありました。

トラッキング・クッキーを検出・除去する機能があるなら
入る時に「トラッキング・クッキー入れますか?」
みたいな事を聞いてくれる機能もあった方が親切だと思うんですよね。
ですので、ウィルスバスターに直接、問い合わせたら
へんてこりんな返信がきた訳です。
毎回、PC終了時に検索して、検出したら除去してるのですが面倒で。^^;

>と、これまた、機械的な(事務的な)返答です
 ありがとうございます。
 ウィルスバスターのご返答と違って、ばっちり通じました。(笑

皆さん、お騒がせしました。
ご意見ありがとうございました。<_ _>

---追記---
そのネットゲームとは、リヴリーアイランドです。
できた当初からやっていますが、途中でソネットが買い取りまして
現在は、月150円?払ってます。^^;
(無料でもできますし、止めたいんですけど
 なかなかこれが、魔術?に、はまってまして・・・。)

広告で運営がなりたってるサイトもある事は存じてます。
そうですよね〜。私が言ってる愚痴みたいなのは
あるサイトにとっては営業妨害になるのかもしれませんね。
今後は大人しく、検出・除去作戦でいきます!
ありがとうございました! 編集済み


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +