C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   ビット演算子に関して   
     ・[53043] たいちう 
     ・[53046] ムンバ 
     ・[53048] ムンバ 
     ・[53051] jay 
     ・[53052] ムンバ 
     ・[53065] たかぎ 
   配列を小さい順に並び ....   
     ・[53002] box 
     ・[53060] かな 
     ・[53061] ru 
     ・[53063] box 
   龍神録4章のエラーに関 ....   
     ・[53030] softya 
     ・[53049] NEKO-T 
     ・[53054] softya 
     ・[53056] NEKO-T 
   Dxライブラリの初期操 ....   
     ・[53036] ru-pu 
     ・[53039] ムンバ 
     ・[53044] メタ 
     ・[53045] メタ 
   [龍神録]10章で・・ ....   
     ・[53007] box 
     ・[53014] 高畑いさお 
     ・[53017] box 
     ・[53018] 高畑いさお 
     ・[53025] box 
   文字列取得   
     ・[52968] すーん 
     ・[52977] nishi 
     ・[52981] すーん 
     ・[52982] ideyan 
     ・[52983] すーん 
     ・[52984] ぽこ 
     ・[52985] toyo 
     ・[52987] ideyan 
     ・[52988] box 
     ・[52998] ぽこ 
   存在するはずのインス ....   
     ・[52971] ぽこ 
     ・[52978] 迷彩吹雪 
     ・[52979] ぽこ 
     ・[52980] ぽこ 
     ・[52997] 迷彩吹雪 
   C++のオーバーロードに ....   
     ・[52938] たいちう 
     ・[52946] たかぎ 
     ・[52975] skuld 
   携帯電話/モバイルWif ....   
     ・[52931] softya 
     ・[52954] Ma 
     ・[52955] softya 
     ・[52965] Ma 
   連結リストについての ....   
     ・[52961] ぽこ 
     ・[52963] box 
     ・[52964] 夏ミカン 
   2D格闘ゲームが作り ....   
     ・[52893] ookami 
     ・[52894] softya 
     ・[52912] ジジ猫 
     ・[52916] softya 
     ・[52959] ジジ猫 
   再帰   
     ・[52943] たかぎ 
     ・[52945] XYZ  
     ・[52947] ぽこ 
     ・[52948] YuO 
     ・[52951] Dixq (管理人) 
     ・[52953] たかぎ 
   SID取得   
     ・[52723] toyo 
     ・[52753] しん 
     ・[52754] YuO 
     ・[52758] toyo 
     ・[52759] しん 
     ・[52760] YuO 
     ・[52763] しん 
     ・[52803] YuO 
     ・[52844] しん 
     ・[52909] しん 
     ・[52949] YuO 
   valに代入した値は使わ ....   
     ・[52888] softya 
     ・[52892] ookami 
     ・[52924] かず 
     ・[52928] たいちう 
     ・[52929] softya 
     ・[52930] たいちう 
     ・[52932] たいちう 
     ・[52936] たいちう 
     ・[52939] Dixq (管理人) 
   #include <math.h& ....   
     ・[52902] ひよこ 
     ・[52907] ムンバ 
     ・[52911] ムンバ 
     ・[52914] たかぎ 
     ・[52923] ムンバ 
     ・[52935] ハナブトオオトカゲ 
   Box2dの天秤の傾き調整 ....   
     ・[52067] たかぎ 
     ・[52079] Justy 
     ・[52107] みなか 
     ・[52113] みなか 
     ・[52131] Justy 
     ・[52235] るー 
     ・[52261] Justy 
     ・[52266] 組木紙織 
     ・[52278] みなか 
     ・[52325] Justy 
     ・[52396] るー 
     ・[52410] Justy 
     ・[52663] みなか 
     ・[52715] Justy 
     ・[52756] みなか 
     ・[52802] Justy 
     ・[52855] みなか 
     ・[52857] Justy 
     ・[52933] みなか 
   判定が上手く取れない   
     ・[52870] 伊藤 
     ・[52922] ookami 
     ・[528691275479997] 伊藤 
   初級編が終わったので ....   
     ・[52827] Ma 
     ・[52828] softya 
     ・[52859] パコネコ 
     ・[52920] ハナブトオオトカゲ 
   アクションゲームで床 ....   
     ・[52843] のどか 
     ・[52880] softya 
     ・[52904] のどか 
     ・[52919] softya 
   2進数から16進数への変 ....   
     ・[52862] 組木紙織 
     ・[52864] ru 
     ・[52865] h.k 
     ・[52915] h.k 
   無題   
     ・[52903] Ma 
     ・[52906] ちょんぼ 
   [龍神録]9章で右上に動 ....   
     ・[52898] T.J 
     ・[52900] ひよこ 
     ・[52901] T.J 
     ・[52905] kai 
   Log.txtを生成しない方 ....   
     ・[52882] ru 
     ・[52883] kai 
   二次元配列の初期化   
     ・[52875] toyo 
     ・[52876] たいちう 
     ・[52877] toyo 
     ・[52878] くりく 
   文字の間を詰めて表示 ....   
     ・[52872] Ma 
     ・[52873] 山崎 
   音楽ロード時間の短縮   
     ・[52838] ru 
     ・[52847] AS 
     ・[52849] ru 
     ・[52871] AS 
   騎士巡回   
     ・[52788] box 
     ・[52795] wow 
     ・[52856] box 
     ・[52867] たいちう 
   輝度を変えて描画する ....   
     ・[52816] たいちう 
     ・[52818] 紙飛行機 
     ・[52820] たいちう 
     ・[52821] たいちう 
     ・[52822] toyo 
     ・[52824] たいちう 
     ・[52839] 紙飛行機 
     ・[52866] たいちう 
   仲介DLLによるlisten関 ....   
     ・[52704] ベリ工 
     ・[52720] nishi 
     ・[52722] ベリ工 
     ・[52738] shiro4ao 
     ・[52740] softya 
     ・[52742] shiro4ao 
     ・[52744] softya 
     ・[52746] shiro4ao 
     ・[52749] softya 
     ・[52779] shiro4ao 
     ・[52783] softya 
     ・[52861] shiro4ao 
   2Dエフェクトツール作 ....   
     ・[52809] Ma 
     ・[52810] Ma 
     ・[52832] やっくん 
     ・[52858] Ma 
   画面背景のループ   
     ・[52829] softya 
     ・[52840] 月 
     ・[52841] softya 
     ・[52842] 月 
     ・[52846] softya 
     ・[52852] 月 
     ・[52853] softya 
     ・[52854] 月 
   シューティングで複数 ....   
     ・[52830] ru 
     ・[52851] しろ 
   弾幕と敵の動きについ ....   
     ・[52848] Tatu 
     ・[526461277836315] gdu 
     ・[526461277836328] gdu 
   C言語(ソート)の課題 ....   
     ・[52833] たいちう 
     ・[52834] やっくん 
   SubversionとVisual S ....   
     ・[52721] toyo 
     ・[52769] 組木紙織 
     ・[52770] ぽこ 
     ・[52773] 組木紙織 
     ・[52775] ぽこ 
     ・[52776] toyo 
     ・[52777] 組木紙織 
     ・[52798] ムンバ 
     ・[52801] ムンバ 
     ・[52804] Justy 
     ・[52807] toyo 
     ・[52813] 組木紙織 
     ・[52819] ムンバ 
   PHPなどによるサイト作 ....   
     ・[52708] たかぎ 
     ・[52709] テラ 
     ・[52717] しん 
     ・[52719] toyo 
     ・[52725] テラ 
     ・[52728] たいちう 
     ・[52732] たかぎ 
     ・[52733] nayo 
     ・[52735] たかぎ 
     ・[52736] たかぎ 
     ・[52737] たいちう 
     ・[52739] softya 
     ・[52797] nayo 
   マップチップ   
     ・[52692] ru 
     ・[52748] sophya 
     ・[52750] Dixq (管理人) 
     ・[52794] ゴリ 
   変数の宣言で質問です ....   
     ・[52726] Ma 
     ・[52727] たいちう 
     ・[52781] しろ 
     ・[52784] ru 
     ・[52789] しろ 
     ・[52790] ru 
     ・[52791] しろ 
   ウィンドウを表示させ ....   
     ・[52695] ru 
     ・[52786] ultima 
   18章の構造体   
     ・[52767] Dixq (管理人) 
     ・[52778] kiri 
   文字列描写の消去   
     ・[52774] ru 
   DXライブラリ 文字列 ....   
     ・[52656] Ma 
     ・[52659] Justy 
     ・[52718] kazuoni 
     ・[52743] HK 
     ・[52762] Justy 
   3dsMAX9について   
     ・[52651] softya 
     ・[52653] 紅葉 
     ・[52655] softya 
     ・[52671] 紅葉 
     ・[52672] softya 
     ・[52674] 紅葉 
     ・[52677] softya 
     ・[52713] 紅葉 
     ・[52729] softya 
     ・[52761] ムンバ 
   DXライブラリを手に入 ....   
     ・[52694] ru 
     ・[52696] パコネコ 
     ・[52697] ru 
     ・[52698] パコネコ 
     ・[52699] パコネコ 
     ・[52700] ru 
     ・[52741] パコネコ 
     ・[52747] パコネコ 
   ゲームの素材   
   構造体について分かり ....   
     ・[52676] 紅葉 
     ・[52678] Ten 
     ・[52679] たいちう 
     ・[52680] 紅葉 
     ・[52681] toyo 
     ・[52683] Ten 
     ・[52687] ideyan 
     ・[52702] 紅葉 
     ・[52731] asd 
     ・[52734] 紅葉 
     ・[526611275460017] asd 

Name: jay  ..上級者(17,135ポイント)   Date: 2010/05/30(日) 00:28   No:53041       
Title: ビット演算子に関して    
久々に質問させてもらいます。
現在C言語検定の勉強中なのですが、ビット演算で困っています。

ビット演算子と言えば
&  :AND
|  :OR
^  :XOR
~  :補数(反転)
>>  :右シフト
<<  :左シフト

とそれぞれの意味までは理解できたのですが、優先順位が分かりません。

例えば
x^y<<4
という演算は”XORを求めてから左シフトする”のか”左シフトしてからXORを求める”のか
というあたりがサッパリです。

AND・OR・XORの各演算、補数、各シフトの優先順位を教えていただけないでしょうか。


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


Name: たいちう  ..比類無きプログラマー(89,160ポイント)   Date: 2010/05/30(日) 00:43   No:53043     
Title: Re:ビット演算子に関して    
キーワード:c言語 演算子 優先順位

http://www.bohyoh.com/CandCPP/C/operator.html


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

Name: ムンバ  ..熟練のプログラマー(53,378ポイント)   Date: 2010/05/30(日) 00:46   No:53046     
Title: Re:ビット演算子に関して    
こんばんは。

ttp://www.bohyoh.com/CandCPP/C/operator.html

↑こちらのサイト参照で、如何でしょうか?


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

Name: ムンバ  ..熟練のプログラマー(53,393ポイント)   Date: 2010/05/30(日) 00:48   No:53048     
Title: Re:ビット演算子に関して    
あっ?!
たいちうさんと、かぶってしまいました。
失礼しました。おやすみなさい。


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

Name: jay  ..上級者(16,637ポイント)   Date: 2010/05/30(日) 00:56   No:53051 解決!     
Title: Re:ビット演算子に関して    
おお、分かりやすい一覧ですね。
ありがとうございます。

つまり優先順位は
1、補数
2、各シフト
3、各演算子

という訳ですね。
演算子は
AND
XOR
OR
の順ですね。

無事に理解できました。
お二方ともありがとうございます。


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

Name: ムンバ  ..熟練のプログラマー(53,623ポイント)   Date: 2010/05/30(日) 01:12   No:53052 解決!     
Title: Re:ビット演算子に関して    
Microsoft Visual Studio 2010 Express
に付きまして、質問しようと思ってこちらにお邪魔したのですが
良く解らないので、止めました。(笑

>>演算子は 
>>AND 
>>XOR 
>>OR 
>>の順ですね。

という見方?でしたら、

ttp://www9.plala.or.jp/sgwr-t/c/sec14.html

の方が見易いかもしれません。

---↑このサイト、リンクは大丈夫だと思うのですが
  「※ このホームページの内容を無断で転載する事を禁じます。」とあります。
  引用するには許可が必要ですので、差し障り有れば削除しますので、ご一報の程お願いします。
  削除の際は、事後処理となってしまいます事、お許し下さい。---

---------------------------------------------------------
たかぎさん、おはようございます!
上から、すみません。(謝
了解しました。いつもありがとうございます。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(193,361ポイント)   Date: 2010/05/30(日) 08:22   No:53065     
Title: Re:ビット演算子に関して    
> このサイト、リンクは大丈夫だと思うのですが 

少なくとも法的には、先方が勝手にリンクするなと書いてあったとしても、リンクだけなら問題ありません。
http://www.cric.or.jp/qa/multimedia/multi14_qa.html

> 引用するには許可が必要ですので、

著作権法第三十二条により、(正しく行われた)引用は著作権の侵害にはあたりません。
以下、著作権法第三十二条より抜粋

第三十二条 公表された著作物は、引用して利用することができる。この場合において、その引用は、公正な慣行に合致するものであり、かつ、報道、批評、研究その他の引用の目的上正当な範囲内で行なわれるものでなければならない。


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



Name: かな  ..ぴよぴよ(486ポイント)   Date: 2010/05/29(土) 16:57   No:53000       
Title: 配列を小さい順に並び変える関数    
次の問題がわかりません。

NUM個のint型の配列を考える。このとき、この配列を小さい順に並び変える関数を作成し、その動作を確認しなさい。小さい順に並び替えるアルゴリズムは、以下のアルゴリズムを実装すること。 

↓↓↓
配列の名前をa、配列の要素を6個として説明する。

Step1.1: a[5]とa[4]を比べて、順番が間違っていたら、a[5]とa[4]の値を入れ替える。
Step1.2: a[5]とa[3]を比べて、順番が間違っていたら、a[5]とa[3]の値を入れ替える。
………
Step1.n: a[5]とa[0]を比べて、順番が間違っていたら、a[5]とa[0]の値を入れ替える(必ずa[5]に一番大きい値が入っている)。
Step2.1: a[4]とa[3]を比べて、順番が間違っていたら、a[4]とa[3]の値を入れ替える。
Step2.2: a[4]とa[2]を比べて、順番が間違っていたら、a[4]とa[2]の値を入れ替える。
………
↑↑↑

○環境 
 ・OS:Linux 
 ・コンパイラ名とバージョン:gcc 
 ・言語:C 

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


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


Name: box  ..ハッカー(154,023ポイント)   Date: 2010/05/29(土) 17:47   No:53002     
Title: Re:配列を小さい順に並び変える関数    
> 配列の名前をa、配列の要素を6個として説明する。

配列の要素数が4個、5個、6個あたりの場合について、
手で入れ替えるとしたらどうするかを紙に書き出します。

そこには、必ず何らかの法則があります。
後は、その法則に従い、要素数をNUM個の場合に一般化してください。


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

Name: かな  ..ぴよぴよ(503ポイント)   Date: 2010/05/30(日) 05:09   No:53060     
Title: Re:配列を小さい順に並び変える関数    
ソースコード全体の作成をお願いしたいです。

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

Name: ru  ..入門者(3,728ポイント)   Date: 2010/05/30(日) 06:01   No:53061     
Title: Re:配列を小さい順に並び変える関数    
#include <stdio.h>
#include <stdlib.h>

#define NUM (6)

int a[NUM], w, i, j;

void init()
{
    srand((unsigned int)time(NULL));
    for(i=0;i<NUM;i++)
    {
        a[i]=rand();
    }
}

void sort()
{
    for(i=NUM-1;i>0;i--)
    {
        for(j=i-1;j>=0;j--)
        {
            if(a[i]<a[j])
            {
                w = a[i];
                a[i] = a[j];
                a[j] = w;
            }
        }
    }
}

void disp()
{
    for(i=0;i<NUM;i++)
    {
        printf("a[%d]=%d\n", i, a[i]);
    }
    printf("\n");
}

int main()
{
    init();
    disp();
    sort();
    disp();
    return 0;
}




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

Name: box  ..ハッカー(154,295ポイント)   Date: 2010/05/30(日) 08:02   No:53063     
Title: Re:配列を小さい順に並び変える関数    
> ソースコード全体の作成をお願いしたいです。

人間、考えることをやめたら退化していくだけです。
ご自分の脳をフル回転させてください。

人から与えられたソースコードを鵜呑みにするのでなく、
アルゴリズムを自分で考えてソースコードに落としていく作業こそが
プログラミングの醍醐味です。それを放棄してはいけません。


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



Name: NEKO-T  ..ぴよぴよ(164ポイント)   Date: 2010/05/29(土) 22:22   No:53022       
Title: 龍神録4章のエラーに関して    
初めまして、NEKO-Tと申します。
素人なもので基礎を覚えてから自分なりに弄ろうと思いプログラムを勉強させて頂いてます。
現在龍神録のPSP化を試みていますが4章でのエラーがどうしても理解できなくて相談しに来ました。
(いきなりPSP化は無謀なのかもしれません)
OS:vista Visual C++ 2008 Express Edition


1>graph.c: In function 'graph_ch':
1>graph.c:7: error: too few arguments to function 'DrawRotaGraphF'
1>make: *** [graph.o] Error 1
1>Project : error PRJ0019: ツールはエラー コードを返しました : "メイクファイル プロジェクト動作を実行しています。"  

と、上記のエラーが表示されたので
graph.cが怪しいと思い4章と比較してみたのですが一見どこも間違いが分かりません。

----graph.c----
#include "GV.h"

extern ch_t ch;
extern int img_ch[2][12];

void graph_ch(){
        DrawRotaGraphF(ch.x,ch.y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}

void graph_main(){
        graph_ch();
}


過去に似たようなのが無いか探してみたんですが見つからなかったもので書き込ませて頂きました。
宜しくお願い致します。


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


Name: softya [URL]  ..ハッカー(172,275ポイント)   Date: 2010/05/29(土) 23:12   No:53030     
Title: Re:龍神録4章のエラーに関して    
C言語の文法を何処までご存知かわかりませんが、DrawRotaGraphFのパラメータが足らないよってエラーです。
DrawRotaGraphFのプロトタイプ宣言がWin版とポータブル版で違うのかもしれません。DrawRotaGraphFが定義してあるヘッダを確認してみてください。
あとDXライブラリ・ポータブルでdouble/floatを多用するのはスピード的にはお薦め出来ません(つまり、そのぐらいは改造出来るようにならないと処理落ちで遅くなりますよって話です)。


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

Name: NEKO-T  ..ぴよぴよ(351ポイント)   Date: 2010/05/30(日) 00:54   No:53049 解決!     
Title: Re:龍神録4章のエラーに関して    
C言語知識は始めたてレベルです。
DrawRotaGraphFのパラメータが足りないのはdxlibpのヘッダを確認して理解しました。
そうするとどうして本家も足りないのにエラーが起きないのかが疑問になりましたが
知識不足過ぎるので自分で調べてみます。
graph.cに関しては疑問が解決しました。質問して良かったです。
内容弄ってまた違うエラー出てきましたが1つずつ処理していこうと思いますが
煮詰まったらまたお聞きしに来るかもしれません。その時も宜しくお願いします。
返答ありがとうございました<(_ _)>


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

Name: softya [URL]  ..ハッカー(172,692ポイント)   Date: 2010/05/30(日) 01:23   No:53054     
Title: Re:龍神録4章のエラーに関して    
>そうするとどうして本家も足りないのにエラーが起きないのかが疑問になりましたが知識不足過ぎるので自分で調べてみます。 

どちらかと言うとそれはC++の機能ですので、調べるとややこしくなるかも知れません。
DXライブラリ自体はC++で記述されてますので、C++の機能を使っているところがあります。
今回のも、その一つでパラメータ省略時の値を予め決めておくことが出来ます。
extern    int            DrawRotaGraphF( float xf, float yf, double ExRate, double Angle, int GrHandle, int TransFlag, int TurnFlag = FALSE  ) ;    
このTurnFlag = FALSEってやつですね。
純粋なC言語では出来ませんので、覚えておいてください。
つまり、C言語の参考書やサイトには書いてありません。


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

Name: NEKO-T  ..ぴよぴよ(390ポイント)   Date: 2010/05/30(日) 02:01   No:53056 解決!     
Title: Re:龍神録4章のエラーに関して    
あや、解決ですのに補足までありがとございます。
丁度そういうのがどうなっているのか巡ってたので助かりました。


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



Name: メタ  ..ぴよぴよ(809ポイント)   Date: 2010/05/29(土) 23:04   No:53027       
Title: Dxライブラリの初期操作について・・    
この画像の見てのとおり   
--------------------------------------------------------------------------------------------
   @ VisualStudio2008 のメニューの
      『プロジェクト』→『(プロジェクト名) プロパティ』を選びます。
    ((プロジェクト名)の部分は、今回は『test』になっている筈です)

   A プロパティダイアログが開いたら、ダイアログの左上にある『構成(C)』と
      書かれている項目を『アクティブ(Debug)』から『すべての構成』に変更します。

   B 次にダイアログの左側のリストから『構成プロパティ』→『全般』を選びます。

   C ダイアログ右側に表示されている『文字セット』の項目を
      『マルチ バイト文字セットを使用する』に変更したあと、
      ダイアログ右下にある『適応』ボタンを押します。

   D ダイアログの左上にある『構成(C)』と書かれている項目を『すべての構成』から
      『Release』に変更します。

   E 左側のリストから今度は『構成プロパティ』→『C/C++』→『コード生成』を
      選びます。

   F ダイアログ右側に表示されている『ランタイム ライブラリ』の項目を
      『マルチスレッド(/MT)』に変更したあと、
      ダイアログ右下にある『適応』ボタンを押します。

   G ダイアログの左上にある『構成(C)』と書かれている項目を『Release』から
      『Debug』に変更します。

   H ダイアログ右側に表示されている『ランタイム ライブラリ』の項目を
      今度は『マルチスレッド デバッグ(/MTd)』に変更します。

   I 最後にダイアログの下の方にある『OK』を押してダイアログを閉じます。
---------------------------------------------------------------------------------------------
Eから先に行けません。
構成プロパディにC/C++→コード作成のコマンドが見られないので、解決策を教えてもらえませんか?


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


Name: ru-pu  ..かけだし(1,224ポイント)   Date: 2010/05/30(日) 00:08   No:53036     
Title: Re:Dxライブラリの初期操作について・・    
4.プロジェクトへ新規プログラムファイルを作成・追加

は、しましたか?
多分C++のソースがプロジェクトに一つも無いのが原因です


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

Name: ムンバ  ..熟練のプログラマー(53,361ポイント)   Date: 2010/05/30(日) 00:27   No:53039     
Title: Re:Dxライブラリの初期操作について・・    
こんばんは!

環境:VC++2008(SP1)
OS:Windows XP(Home・Pro) Windows Vista(Ult) Windows 7(Pro)

添付ファイルは、「DXライブラリの本家のサンプルプログラムを実行できるまでの解説」
を引用させて頂いてます。
(コピー∩ペースト(_ _))

私のOSと環境では今まで、うまく動作しなかった事は有りませんでした。
今一度、添付ファイルの解説に従って設定出来ない様でしたら
再度、ご質問頂ければと思います。

---ru-puさんと、かぶってしまいました。ごめんなさい。---<編集・追加部位 編集済み


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

Name: メタ  ..かけだし(1,042ポイント)   Date: 2010/05/30(日) 00:45   No:53044     
Title: Re:Dxライブラリの初期操作について・・    
> 4.プロジェクトへ新規プログラムファイルを作成・追加

> は、しましたか?
> 多分C++のソースがプロジェクトに一つも無いのが原因です

できました!ありがとうございます。
いやはや恥ずかしい;


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

Name: メタ  ..かけだし(1,047ポイント)   Date: 2010/05/30(日) 00:45   No:53045 解決!     
Title: Re:Dxライブラリの初期操作について・・    
解決と

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



Name: 高畑いさお  ..ぴよぴよ(27ポイント)   Date: 2010/05/29(土) 16:03   No:52999       
Title: [龍神録]10章で・・・・    
敵を表示させるところでエラーがでました
 mydat\source\load.cpp(10): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません。
mydat\source\load.cpp(10): error C2078: 初期化子の数が多すぎます。
mydat\source\load.cpp(10): error C2440: '初期化中' : 'int [9]' から 'int' に変換できません。
とのことです。

ちなみにVC++2010でXPをつかってます。
どうしたら治るでしょうか?
教えてください。お願いします。


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


Name: box  ..ハッカー(154,081ポイント)   Date: 2010/05/29(土) 19:14   No:53007     
Title: Re:[龍神録]10章で・・・・    
「どこそこに載っている」というソースではなく、
質問者さんが「実際に」コンパイルしたソースを貼ってください。


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

Name: 高畑いさお  ..ぴよぴよ(41ポイント)   Date: 2010/05/29(土) 21:46   No:53014     
Title: Re:[龍神録]10章で・・・・    
> 「どこそこに載っている」というソースではなく、
> 質問者さんが「実際に」コンパイルしたソースを貼ってください。

load.cppのソースプログラムを貼ればいいですか?


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

Name: box  ..ハッカー(154,106ポイント)   Date: 2010/05/29(土) 21:53   No:53017     
Title: Re:[龍神録]10章で・・・・    
> load.cppのソースプログラムを貼ればいいですか?

そうです。
お手元にあるものを貼ってください。


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

Name: 高畑いさお  ..ぴよぴよ(107ポイント)   Date: 2010/05/29(土) 21:58   No:53018     
Title: Re:[龍神録]10章で・・・・    
> > load.cppのソースプログラムを貼ればいいですか?

> そうです。
> お手元にあるものを貼ってください。

#include "../include/GV.h"

void load(){
        img_board[10] = LoadGraph("../dat/img/board/10.png");
        img_board[11] = LoadGraph("../dat/img/board/11.png");
        img_board[12] = LoadGraph("../dat/img/board/12.png");
        img_board[20] = LoadGraph("../dat/img/board/20.png");
        LoadDivGraph( "../dat/img/char/ziki.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;

これなんですが・・・・


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

Name: box  ..ハッカー(154,128ポイント)   Date: 2010/05/29(土) 22:42   No:53025     
Title: Re:[龍神録]10章で・・・・    
> LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;

この行が関数の外側にある理由を教えてください。


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



Name: すーん  ..ぴよぴよ(221ポイント)   Date: 2010/05/28(金) 22:31   No:52967       
Title: 文字列取得    
#define MARK '\"'
//中略//
for(i=0; html[18][i]!='\0'; i++)
{
if(html[18][i] == MARK)
{
i++;
while(html[18][i] != MARK)
{
tag[0][x] = html[18][i];
i++;
x++;
}
break;
}
}
printf("%s",tag[0]);


HTMLファイルを読み込み
配列htmlに一行ずつ格納してあります。
html[18]はHTMLファイルから読み込んだ18行目の文字列です。
そこで18行目のHTML文を一文字ずつ比較し、
ダブルクォーテンション(")で挟まれている
文字列を取得します。
上記のように記述し実行したところ
tag[0]は空(NULLではない)でした。

おかしいと思い
while(html[18][i] != MARK)
{
tag[0][x] = html[18][i];
printf("%c",tag[0][x]);
i++;
x++;
}
このようにwhile文の中に一文字ずつ表示させてみたのですが、
こっちでは正常に表示されました。

これはどういうことでしょうか?
対策方法、なぜこうなるか解説お願いします。


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


Name: すーん  ..ぴよぴよ(283ポイント)   Date: 2010/05/28(金) 22:34   No:52968     
Title: Re:文字列取得    
【HTMLの例】
<meta http-equiv="content-type" content="text/html;charset=shift_jis">

期待する実行結果は
tag[0]=>content-type
となってればいいのですが・・・


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

Name: nishi  ..ぴよぴよ(273ポイント)   Date: 2010/05/29(土) 00:55   No:52977     
Title: Re:文字列取得    
変数xを初期化していますか?

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

Name: すーん  ..ぴよぴよ(306ポイント)   Date: 2010/05/29(土) 03:03   No:52981     
Title: Re:文字列取得    
はい。
もちろんしています。

int x = 0;


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

Name: ideyan  ..初心者(5,608ポイント)   Date: 2010/05/29(土) 03:18   No:52982     
Title: Re:文字列取得    
むむむ……関係あるかわからないけど、
tagに格納された文字列の最後に'\0'を入れてますか?


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

Name: すーん  ..ぴよぴよ(329ポイント)   Date: 2010/05/29(土) 03:22   No:52983     
Title: Re:文字列取得    
いや敢えて
tag[0][x] = '\0'
とはしていません。


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

Name: ぽこ  ..中級者(12,052ポイント)   Date: 2010/05/29(土) 03:59   No:52984     
Title: Re:文字列取得    
> これはどういうことでしょうか?
> 対策方法、なぜこうなるか解説お願いします。

現状、対策の提示も解説もできません。
現象を再現できるソースコードを提示してください。


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

Name: toyo  ..熟練のプログラマー(47,326ポイント)   Date: 2010/05/29(土) 06:17   No:52985     
Title: Re:文字列取得    
tag[0][x] = '\0' 
がないため表示が変になっているのではないでしょうか


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

Name: ideyan  ..初心者(5,678ポイント)   Date: 2010/05/29(土) 08:06   No:52987     
Title: Re:文字列取得    
最後の
printf("%s",tag[0]); 


for(i=0;tag[0][i]!='\0';++i){
    printf("%c",tag[0][i]);
}

として実行するとどうなりますか?


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

Name: box  ..ハッカー(153,972ポイント)   Date: 2010/05/29(土) 08:32   No:52988     
Title: Re:文字列取得    
質問者さんが

>いや敢えて
>tag[0][x] = '\0'
>とはしていません。

と書かれている以上、

>printf("%s",tag[0]); 

>for(i=0;tag[0][i]!='\0';++i){
>    printf("%c",tag[0][i]);
>}
も、

tag[][]の定義範囲を超えてしまったとしても
'\0'が見つかるまで表示し続ける、という意味においては
同じだと思います。


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

Name: ぽこ  ..中級者(12,407ポイント)   Date: 2010/05/29(土) 15:44   No:52998     
Title: Re:文字列取得    
少なくとも、下記ソースコードではtagの値は"content-type"になっています。
これは、すーんさんが提示したソースコードと入力データを使用しています。

つまり、すーんさんが提示した範囲には何の問題も無い、というのが私の見解です。
もう一度言いますが、現象を再現できるソースコードを提示してください。

----hoge.cpp
#include <stdio.h>

#define MARK '\"' 

char html[] = "<meta http-equiv=\"content-type\" content=\"text/html;charset=shift_jis\">";
char tag[sizeof( html )];

int main()
{
    for ( int i = 0, x = 0; html[i] != '\0'; i++ ) { 
        if ( html[i] == MARK ) { 
            i++; 
            while ( html[i] != MARK ) { 
                tag[x++] = html[i++];
            } 
            break; 
        } 
    } 
    printf("%s",tag); 
}


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



Name: 迷彩吹雪  ..かけだし(1,858ポイント)   Date: 2010/05/28(金) 22:44   No:52969       
Title: 存在するはずのインスタンスを見失う    
初めて質問させて頂きます。
C++とDXライブラリでゲームを作っているのですが、プログラム実行中にエラーが発生し、
強制終了する現象に悩まされています。

エラーの発生個所を追跡したところ、あるクラスがそのメンバ変数に保持した別のインスタンスのアドレスを、
プログラムの開始直後に見失っている事がわかりました。
問題のクラス類を簡単に示すと以下のようになります。

//----------------------------------------------------------------------------//
//ヘッダファイル////////////////////////////////////////////////////////////////

const int TEISU_A = 16;    //作るクラスAインスタンスの数
const int TEISU_B = 4;    //作るクラスBインスタンスの数

class A{
private:
    //データ類
}

class B{
private:
    A* mB_A;    //クラスAインスタンスのアドレスを保持するポインタ
    //その他のデータ類
public:
    void SetA(A*);    //mB_Aにアドレスの値を代入する関数
}

class I{    //シングルトンクラス
private:
    static I* mInstance;    //自身を指すポインタ
    I();
    ~I();
    
    A* mI_A[TEISU_A];    //クラスAのアドレスを保持するポインタ
    B* mI_B[TEISU_A];    //クラスBのアドレスを保持するポインタ
public:
    static void Create();    //シングルトン生成関数
    static void Destroy();    //シングルトン破棄関数
    static I* Instance();    //クラスIを利用するにはまずこれを呼ぶ必要がある

    //その他の処理関数
}

//ソースファイル////////////////////////////////////////////////////////////////
//クラスAについての定義
A::A(){}
A::~A(){}

//クラスBについての定義
B::B(){
    mB_A = 0;    //設定しないままだとアクセスした瞬間落ちる
}
B::~B(){};
void B::SetA(A* a){
    mB_A = a;
}

//クラスIについての定義
I::mInstance = 0;    //これをしないとコンパイルが通らない

I::I(){
    for(int i=0; i<TEISU_B; i++){    //クラスBインスタンスを指定の数だけ生成
        mI_B[i] = new B();
    }
    for(int i=0; i<TEISU_A; i++){    //クラスAインスタンスを指定の数だけ生成
        mI_A[i] = new A();
    }
    //クラスAとクラスBの関連付け
    //クラスBのメンバ変数mB_AにクラスAインスタンスのアドレスを代入
    mI_B[0]->SetA(mI_A[0]);
    mI_B[1]->SetA(mI_A[1]);
    mI_B[2]->SetA(mI_A[2]);
    mI_B[3]->SetA(mI_A[3]);
}

I::~I(){
    for(int i=0; i<TEISU_B; i++){{    //クラスBインスタンスを破棄
        delete mI_B[i];
        mI_B = 0;
    }
    for(int i=0; i<TEISU_A; i++){    //クラスAインスタンスを破棄
        delete mI_A[i];
        mI_A = 0;
    }
}

void I::Create(){
    mInstance = new I();
}

void I::Destroy(){
    mInstance->~I();
}

I* I::Instance(){
    if(mInstance==0){//初回アクセス時に始めてインスタンス生成
        I::Create();
    }
    return mInstance;/*****ここで問題発生*****/
}

//以下その他の処理関数についての定義...
//----------------------------------------------------------------------------//


クラスIはシングルトンです。
クラスIのコンストラクタが終了するときには全てのメンバ変数に何らかの値が入っています。
しかしメインループ内で最初にI::Instance()を呼び出した時,
I::mInstanceが返される瞬間にそのメンバ変数mI_A[0]だけがインスタンスを見失います。
(デバッグ時に変数を見ると,データ値が「???」になります。)
それ以外の,例えばI::mI_A[1]などには同様の現象は起こっていません。
また,I::mI_B[0]のクラスBインスタンスはそのメンバ変数B::mB_AにI::mI_A[0]と同じアドレスを格納しますが,こちらは見失っていません。よってI::mI_B[0]を通してのアクセスは可能です。
直接I::mI_A[0]にアクセスする処理を実行するとその瞬間に停止します。

そもそもなぜこのような設計になっているのかというと,プログラム中で自由にクラスBとクラスAの関連付けを変更できるようにしたかったからです。
またクラスIはプログラムの各所で呼び出される処理を担っているので,シングルトンとなっています。

なぜmI_A[0]だけがインスタンスを見失ってしまうのでしょうか。
また、どのようにすれば良いのでしょうか。
御指南のほどよろしくお願いします。

OS:WindowsXP SP3
開発環境:VC++EE2008,DXライブラリ
プログラミング歴:半年程度。趣味の範囲。


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


Name: ぽこ  ..中級者(11,268ポイント)   Date: 2010/05/28(金) 23:08   No:52971     
Title: Re:存在するはずのインスタンスを見失う    
状況が再現できるmain関数を提供してください。

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

Name: 迷彩吹雪  ..かけだし(2,071ポイント)   Date: 2010/05/29(土) 02:11   No:52978     
Title: Re:存在するはずのインスタンスを見失う    
>ぽこ様

情報不足で申し訳ありませんでした。
プロジェクトから必要なデータだけを抽出したものを下記の場所に用意しました。
よろしくお願いします。

ttp//www1.axfc.net/uploader/Li/so/68011
pass:meisai

実は別プロジェクトとして質問文のコードを元に再現可能なコードを書こうとしたら、簡略化したせいかバグが取れてしまいました。
もしかすると質問文のコードは、見当違いの場所を表した無意味なものだったかも知れません。


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

Name: ぽこ  ..中級者(11,597ポイント)   Date: 2010/05/29(土) 02:29   No:52979     
Title: Re:存在するはずのインスタンスを見失う    

★印の処で変更されています。
パッと見、変数mOldInputは要素が1個しか無い(つまりmOldInput[0]までが有効範囲)のに、
mOldInput[1]にアクセスしています。
このmOldInput[1]に該当する部分がmBotton[0]なのでここだけ値が変わったように見えるんです。

----
    //毎回呼ぶ関数 入力状態を更新
    void Input::getInput(){
        for(int i = 1; i <= PadNum; i++){//0番は無視(使ってないので)
            mOldInput[i] = mInput[i];    //前回の入力を保存★★★★★
            if(i != 1){                
                mInput[i] = GetJoypadInputState(i+1);//新しい入力を取得
            }
            else{    //1番はPAD1とキーの二種類の情報なので別処理
                mInput[i] = GetJoypadInputState(DX_INPUT_KEY_PAD1);
            }
        }
    }


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

Name: ぽこ  ..中級者(12,035ポイント)   Date: 2010/05/29(土) 02:44   No:52980     
Title: Re:存在するはずのインスタンスを見失う    
ついでにデバッグの仕方をば。
VC++のデバッガには、迷彩吹雪さんもご存知の通りブレイクポイントという機能があります。
このブレイクポイントの機能は、
「このファイルのどの行を実行したとき、プログラムを一時停止させる」
機能だけでなく、
「このアドレスに格納されている値が変わったとき、プログラムを一時停止させる」
といった機能もあります。

今回はこれを使用しました。

具体的には、
 ・mBotton[0]が配置されているアドレスに対して、ブレイクポイントを張る。
  メニューからブレークポイントを新規作成したときに「データブレイクポイント」を選択します。
 ・プログラムを実行、上記★印の次のif文で止まった。
 ・変数iが1であることを確認。
 ・変数mOldInputのアドレスを確認
 ・変数mOldInput[1]のアドレスがmBotton[0]と同じであることを確認。
 ・配列の範囲外アクセスと断定。
という感じでデバッグしました。

所要時間は問題の再現確認含めて5分程度でした。
予期しないデータ破壊を見つけるのに便利です。

ご参考までに。 編集済み


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

Name: 迷彩吹雪  ..かけだし(2,183ポイント)   Date: 2010/05/29(土) 15:08   No:52997 解決!     
Title: Re:存在するはずのインスタンスを見失う    
>ぽこ様

素早いご指摘と心を読んだかのような情報提供ありがとうございます。
問題の箇所はまだ配列が0番から始まることに慣れていない時期に書いたものでした。
早速修正し、期待通りの動作を確認しました。
デバッガの使い方ももっと勉強します。
ありがとうございました。


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



Name: skuld  ..ぴよぴよ(35ポイント)   Date: 2010/05/28(金) 13:35   No:52937       
Title: C++のオーバーロードに関して    
はじめまして、skuldと申します
はじめての書きこみなので読みづらかったら申し訳ないです
先日「Cの絵本」を読み終えて、現在「C++の絵本」を読んでいるのですが、
「C++の絵本」のオーバーロードに関するサンプルプログラムを以下のように試してみたのですが、
エラーが発生してしまいました。
エラー内容から、原因はarea =GetCircleArea(fRad);のdouble型引数の関数が
GetCircleArea(double,double)なのか、GetCircleArea(double)なのか区別できないということ
のようですが、本書にはエラーになるという記述はありませんでした。
これは区別できないと判断して良いのでしょうか?
ちなみに、本書では引数の数と型が合わないときエラーが発生するとは書いてありました

それから、もうひとつ関連した質問ですが、
下のサンプルで、引数省略したarea=GetCircleArea();も試してみたら、エラーになりました。
これもやはり区別できないからということでしょうか?
つまり、オーバーロードしたら引数省略は不可と考えてよいのでしょうか?

よろしくお願いします

Windows Vista
Visual C++ 2008EE
を使用しています
------------------------------------------
incude <stdio.h>

double GetCircleArea(int radius = 1,double pi = 3.14);
double GetCircleArea(double radius = 1.00,double pi = 3.14);
double GetCircleArea(double radius = 1.00);

int main(){
    int nRad=10;
    double fRad=10.1;
    double area =1.1;
    printf("%f\n",area);
    area =GetCircleArea(10);
    printf("%f\n",area);
         area =GetCircleArea(15,3.14159);
    printf("%f\n",area);
         area =GetCircleArea(nRad,3.14159);
    printf("%f\n",area);
         area =GetCircleArea(fRad,3.14159);
    printf("%f\n",area);
         area =GetCircleArea(fRad);
    printf("%f\n",area);
         return 0;
}

double GetCircleArea(int radius,double pi){
    return radius * radius * pi;
}
double GetCircleArea(double radius,double pi){
    return radius * radius * pi;
}
double GetCircleArea(double radius){
    return radius * radius * 3.14;
}


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


Name: たいちう  ..比類無きプログラマー(88,048ポイント)   Date: 2010/05/28(金) 13:42   No:52938     
Title: Re:C++のオーバーロードに関して    
> double GetCircleArea(double radius = 1.00,double pi = 3.14);
> double GetCircleArea(double radius = 1.00);

> area =GetCircleArea(fRad);

> これは区別できないと判断して良いのでしょうか?

Yes。
プログラムを書いた人の意図は、前者の呼出か後者の呼出か、
コンパイラには判断できません。
もちろん、書いた人以外の人間にも。


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

Name: たかぎ [URL]  ..ハッカー(193,026ポイント)   Date: 2010/05/28(金) 16:20   No:52946     
Title: Re:C++のオーバーロードに関して    
実際にどんな記述になっていたのかわかりませんが...

今回のような関数を多重定義することも可能といえば可能ですが、決して使い勝手がよいとはいえませんし、いろいろな制約が課せられます。


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

Name: skuld  ..ぴよぴよ(72ポイント)   Date: 2010/05/29(土) 00:11   No:52975 解決!     
Title: Re:C++のオーバーロードに関して    
たいちうさん、たかぎさん
ありがとうございます

ずっと気になっていたんですが、
おかげですっきりしました


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



Name: Ma  ..ハッカー(102,697ポイント)   Date: 2010/05/28(金) 08:26   No:52921       
Title: 携帯電話/モバイルWifiで相談    
プログラミングまったく関係ありません(汗 すいません。

近日、新規規約で携帯電話とノートPCがネットに繋がる環境が必要になりました。
(今は日本の携帯電話やネット接続環境は持っていません。)

そこで、両方可能な端末があれば一石二鳥と考えました。
つまり、携帯電話でありながら、モバイルWiFiルーターであるデバイスを探しています。

(お門違いでしたら、どこに質問するべきかアドバイスいただけると助かります。)

iPhone 3G/3GS
は無線ルーター化できるようですが、
ちょっとかかる金額(購入時)が高そうなので他の可能性も聞いてみようと思いました。

自分で簡単に調べたところ
b-mobile WiFi
Pocket WiFi
があるようですが、これらはルーターのみであって、携帯電話ではないのですよね?
でも電話番号が付与されているSIMカードが欲しいとはどういうことなのでしょうか?
携帯電話としても使えるということでしょうか?


以下が端末を選ぶときの私の優先順位です。

1.端末から国内に電話をかけることができる。
2.端末は、モバイルWiFi(無線ルーター化)機能を持つ。(ノートパソコンが近くにあれば、無線でネットにつなげられる)
3.WiFi機能の通信速度(下り)が、そこそこ早い。早いときで300kB/s以上であれば嬉しいです。
4.海外(アメリカ等)へ比較的安価で電話をかけられる。(一分100円以下が理想)

(ちなみにノートパソコンは、Windows 7 無線LAN内臓)

ネット接続と携帯は別で契約すればいいじゃん、というアドバイスもあると思います。
ただ、寮に住む予定なので、ネット接続するために契約後にアンテナなど設置するのが面倒です。
それとは別で携帯も契約しないといけないので、ちょっと手間が増えて、料金もばらばらにはらって
合計が高額になってしまう。という事を考えて、一石二鳥のモバイルWifi携帯 のようなものを探しています。

どうぞアドバイスよろしくお願いいたします。 編集済み


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


Name: softya [URL]  ..ハッカー(170,462ポイント)   Date: 2010/05/28(金) 11:54   No:52931     
Title: Re:携帯電話/モバイルWifiで相談    
Android 2.2だと無線LANルーター機能に正式対応しているみたいです。
http://gigazine.net/index.php?/news/comments/20100521_android_22/
そちらを中心にしらべみたらどうでしょう。


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

Name: Ma  ..ハッカー(103,184ポイント)   Date: 2010/05/28(金) 19:38   No:52954     
Title: Re:携帯電話/モバイルWifiで相談    
おぉ、まさかあのGoogleOSのAndroid が、無線ルータ化できるとは!
調べてみると2.1のものでも、2.2にアップグレード対象になるものが多いようでよかったです。


(Androidを)wikiで調べてみると

日本での発売端末 [編集]
2009年 
 HT-03A - 7月10日発売
2010年 
 SO-01B (Xperia X10) - 4月1日発売
 X06HT (HTC Desire) - 4月27日発売
 SHI01 (IS01) - 6月発売(スマートブック)
 LYNX SH-10B - 7月発売

こんなラインナップでした。(2.2以外も含む)

携帯が欲しくなるのは、6月の第二週からなので、AndroidにするならX06HTにしようとおもいます。



http://japanese.engadget.com/2010/05/21/htc-android-2-2/
こちらのサイトによると、
HTC Desire や Droid Incredible を始めとする人気機種はアップグレード対象になるとのこと。
とのことでした。


気になるのは、Android2.1での無線ルーター化の仕方が(ネット上で)見つからないのと、パケットし放題にしたとして、
PCからいろいろダウンロードしても(データ量的に)大丈夫かっていう点です。

逆にパケット代をうかせるために、無線LANルーターを買うという記事はたくさんあったんですけどね・・・。
携帯と無線LANルーターを別々に買うなら、iPhone のほうが安くなりそうですが、どうなんでしょう? 編集済み


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

Name: softya [URL]  ..ハッカー(170,831ポイント)   Date: 2010/05/28(金) 20:03   No:52955     
Title: Re:携帯電話/モバイルWifiで相談    
USB接続と同じ契約が適用されると、ソフトバンクだと無制限のパケット代になりそうな気が・・・。
auだと13,650円/月 (税込)の上限。docomoも上限があったはず。
WILLCOMは将来性が不安だし。パソコン接続時の契約が分かりづらい。
ごめんなさいiPhoneの契約はよく知らないので。 



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

Name: Ma  ..ハッカー(103,310ポイント)   Date: 2010/05/28(金) 21:49   No:52965 解決!     
Title: Re:携帯電話/モバイルWifiで相談    
なるほど。
いろいろ調べてみましたが、このことをどうやらデザリングというらしく、現状では公式的には認められていないようでした。
つまり、グレーゾーンなのでしょうね。。。
失敗して高額なお金を請求されたらどうしようもないですしね・・・


結論としては、やはり別契約にしたほうがいいということになりました。
ただ、Android はやっぱり期待しているので、携帯はAndroidで、自宅は普通にネット契約を別でしようとおもいます。

softyaさん、相談につきあっていただいてありがとうございました。


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



Name: 夏ミカン  ..ぴよぴよ(233ポイント)   Date: 2010/05/28(金) 20:41   No:52958       
Title: 連結リストについての質問です    
はじめて投票します

C言語の連結リストについてなのですが、

連結リストの要素を挿入するプログラムで

書いたプログラムが


typedef struct CELL{  //リストの構造体
    struct CELL *next;
    int value;
};
CELL *header;  //先頭要素

int main (void){
                           int val,Num;
                           header=(CELL*)malloc(sizeof(CELL));  //メモリの確保
                      if(header==NULL) exit(1);
                      header->next=NULL;
                      header->value=0;
    
                           printf("追加するリストの値を入力してください ");
            scanf("%d",&val); //追加要素の値

            printf("リストの挿入する場所は何番目ですか? ");
            scanf("%d",&Num); //追加する場所
            

            insert(header,val,Num); //追加関数
            
            
            putchar('\n');
            showlist(header);  //リストの表示

return 0;
}

//表示関数
void showlist(CELL *header){
    CELL *x;

    for(x=header;x!=NULL;x=x->next)
        printf("%d\n",x->value);
    free(x);
    

}

//リストへの追加関数
void insert(CELL *header, int val,int Num){ 
    CELL *New; //挿入するリスト
    int i;
    New=(CELL*)malloc(sizeof(CELL));
    if(New==NULL) exit(1);
    
    if(Num==1){  //先頭に挿入するとき
        New->value=val;
        New->next=header;
        header=New;

        
        
        
    }else{  //先頭以外に挿入するとき
        for(i=1;header->next!=NULL && i<Num;i++){ //挿入場所へのリストの移動
        header=header->next;
    }
        New->value=val;
             New->next=header->next;
             header->next=New;
           
    }

}

という感じに書いたのですが
先頭以外の挿入はうまくいくのですが、先頭への挿入がうまくいかないです
よければ、おしえてください
よろしくお願いします



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


Name: ぽこ  ..中級者(11,257ポイント)   Date: 2010/05/28(金) 21:20   No:52961     
Title: Re:連結リストについての質問です    
main関数内の

showlist(header);

という呼び出しは、「グローバル変数headerからのCell構造体を表示する」という意味です。
要素を挿入する前はリストの様子は以下のような感じです。

「header」→「NULL」

insert関数を呼び出して、要素を「先頭に挿入した」直後のリストの様子は以下のとおりです。

「NEW」→「header」→「NULL」

この状態でshowlist(header)を呼び出すと、当然NEWの要素は表示されません。
さっきも述べた通り、「グローバル変数headerからのCell構造体を表示する」だからです。

さて、何がダメなのか?
ですが、insert関数でheaderの値をNEWで書き換えていますが、この変数hearderが
「グローバル変数header」ではなく、「insert関数の局所変数header」だからです。
先頭に挿入する際は、「グローバル変数header」を書き換える必要があります。


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

Name: box  ..ハッカー(153,624ポイント)   Date: 2010/05/28(金) 21:26   No:52963     
Title: Re:連結リストについての質問です    
投稿されたソースをそのままコンパイルしようとしたところ、
多数(詳細は省略)のエラーが出てコンパイルできません。
一例を挙げると、// の直前に全角空白があるのは、いかにもまずいですね。

>先頭以外の挿入はうまくいくのですが、先頭への挿入がうまくいかないです 

こう書かれているということは、質問者さんのところでは
コンパイルできているわけですね。
そのソースを、そっくりそのまま載せてください。
話はそれからです。


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

Name: 夏ミカン  ..ぴよぴよ(290ポイント)   Date: 2010/05/28(金) 21:31   No:52964 解決!     
Title: Re:連結リストについての質問です    
局所変数ですね^^;

グローバル変数で宣言する

グローバル変数で表現するとできました
局所変数などの気配りが足りなかったです
回答いただきありがとうございました


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



Name: ジジ猫  ..入門者(4,711ポイント)   Date: 2010/05/27(木) 19:23   No:52890       
Title: 2D格闘ゲームが作りたい!    
こんにちは、お久しぶりです。SLG製作中のジジ猫です。

皆で作ってますが、学校の部活の方ではNスクリプターでスクリプトしてます。
内容は先輩、後輩が共同で作ったものだそうで、ただ命令を書き込んでるだけで、簡単なんですが・・・。

そして、今回質問したいのは、先輩が、
「このシナリオのキャラで2D格闘ゲーム作ろうぜ!!」
ということを発言して、来年は先輩、後輩総力尽くして製作することに決まりました。

感じ的には東方萃夢想のようにしたいとのことですが、
作り方が分かりません・・・。

1から・・・いや、0から教えてくれたらありがたいです。
お願いします。 編集済み


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


Name: ookami  ..上級者(17,151ポイント)   Date: 2010/05/27(木) 19:45   No:52893     
Title: Re:2D格闘ゲームが作りたい!    
ゲーム制作全般についてでしょうか?それとも企画の練り方?素材の作り方?プログラミングについてでしょうか?

大枠の話ではなくピンポイントに絞った方が、回答が集まりやすいですよ。


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

Name: softya [URL]  ..ハッカー(169,907ポイント)   Date: 2010/05/27(木) 19:47   No:52894     
Title: Re:2D格闘ゲームが作りたい!    
C言語とDXライブラリで作るんでしょうか?
プログラム出来る人がいないなら無謀なので止めた方が・・・。
ジジ猫さんは、プログラミングしませんよね?

格闘ゲーム作成ツール「M.U.G.E.N」
http://www.mugenjp.org/
とか
2D格闘ツクール2nd.
http://tkool.jp/products/2dk2nd/index.html
とか

もう少しプログラミングしたいならこちらとか。
「ZGE」
http://awplus.jp/soft/page1/abp/zge.html
http://www2u.biglobe.ne.jp/~nemojun/
「Tonyu System」
http://hoge1e3.sakura.ne.jp/tonyu/
「Tonyu Systemの講座」

この場合対戦格闘のサンプルはないので自力が必要。


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

Name: ジジ猫  ..入門者(4,852ポイント)   Date: 2010/05/27(木) 23:27   No:52912     
Title: Re:2D格闘ゲームが作りたい!    
なるほど。
お金をかけたくない場合はM.U.G.E.N、
使ってもいいならツクールということですね。

無限(打つの面倒)は部活への金銭的、時間的負担をかかさずにすむので、こちらの方で作ろうと思います。

前回とは違い、人数は足りているので、何とかなりそうです。


ところで、キャラクターを自作で作る際、どういったツールが必要となるのでしょうか?

この質問にも答えてくれたらありがたいです。


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

Name: softya [URL]  ..ハッカー(170,404ポイント)   Date: 2010/05/28(金) 00:01   No:52916     
Title: Re:2D格闘ゲームが作りたい!    
>ところで、キャラクターを自作で作る際、どういったツールが必要となるのでしょうか? 

キャラクタですか?
GIMP2あたりで作れば問題なはずですよ。
私も詳しくないので自分で調べましょう。
キーワードは明確なので自分で調べられますよね?


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

Name: ジジ猫  ..入門者(4,867ポイント)   Date: 2010/05/28(金) 20:55   No:52959 解決!     
Title: Re:2D格闘ゲームが作りたい!    
些細な質問に答えていただき、ありがとうございました。

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



Name: XYZ  ..ぴよぴよ(12ポイント)   Date: 2010/05/28(金) 14:56   No:52941       
Title: 再帰    
次の式が成り立つ時 任意の整数nに対するfunc(n)を出力するプログラムを作成しましょう

n > 0
func(n) = n - func(n-1)

実行結果
func(1) = 5

誰かお願いします。


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


Name: たかぎ [URL]  ..ハッカー(192,939ポイント)   Date: 2010/05/28(金) 16:18   No:52943     
Title: Re:再帰    
> 任意の整数nに対する

ということは、無限精度が必要ということですね。

> func(n)を出力するプログラムを作成しましょう 

ソースコードジェネレータを作るということでしょうか?


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

Name: XYZ  ..ぴよぴよ(11ポイント)   Date: 2010/05/28(金) 16:20   No:52945     
Title: Re:再帰    
たぶん そうだと思います・・・

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

Name: ぽこ  ..中級者(10,964ポイント)   Date: 2010/05/28(金) 17:46   No:52947     
Title: Re:再帰    
1.丸投げは止めましょう
2.任意の整数に対して関数funcが計算出来ない(誰も解けない)ことに気づいてますか?
func(1)=5をどうやって導出したのか、というか導出出来たのかが不思議です。


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

Name: YuO  ..熟練のプログラマー(45,849ポイント)   Date: 2010/05/28(金) 17:48   No:52948     
Title: Re:再帰    
定義に func(0) が無いのですが。
実行結果から導きだされる,func(0) = -4 は定義ですか。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,194,258ポイント)   Date: 2010/05/28(金) 18:42   No:52951     
Title: Re:再帰    
>> ソースコードジェネレータを作るということでしょうか? 

> たぶん そうだと思います・・・

本当にそうなんですか?
意味を理解して言っていますか?
その課題はジェネレータを作る物ではないと思いますが、、。
まず課題の仕様をはっきりさせましょう。


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

Name: たかぎ [URL]  ..ハッカー(193,047ポイント)   Date: 2010/05/28(金) 19:22   No:52953     
Title: Re:再帰    
> たぶん そうだと思います・・・ 

ボケたつもりが、そんな風に言われてしまうと困りますね。


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



Name: しん  ..ぴよぴよ(661ポイント)   Date: 2010/05/25(火) 01:39   No:52712       
Title: SID取得    
http://keicode.com/windows/win21.php
http://codezine.jp/article/detail/434

SID(S-1-5-21-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)を取得しようと調べて上記のサイトを見ました。
C++で書かれているみたいなのですがCで取得することはできないのでしょうか?

C言語で簡単に取得する方法があったら教えてください。


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


Name: toyo  ..熟練のプログラマー(46,761ポイント)   Date: 2010/05/25(火) 07:32   No:52723     
Title: Re:SID取得    
下のURLは普通にCで書かれているように思います
サンプルをダウンロードして拡張子を.cppから.cに変えてビルドしましたがエラーなくビルドできました。
上のURLも変数の宣言場所をブロックの先頭に移動して関数呼び出しの前にあるスコープ解決演算子(::)を消したらCとしてコンパイルできますよ
 編集済み


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

Name: しん  ..かけだし(1,339ポイント)   Date: 2010/05/25(火) 15:39   No:52753     
Title: Re:SID取得    
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

static BOOL ConvertNameToSid(LPTSTR lpszComputer,LPTSTR lpszName,PSID *ppsid)
{
    TCHAR szDomain[256];
    DWORD dwSidLen = 0;
    DWORD dwDomainLen = sizeof(szDomain);
    SID_NAME_USE snu;

    LookupAccountName(lpszComputer,lpszName,NULL,&dwSidLen,szDomain,&dwDomainLen,&snu);

    *ppsid = (PSID)HeapAlloc(GetProcessHeap(),0,dwSidLen);

    return LookupAccountName(lpszComputer,lpszName,*ppsid,&dwSidLen,szDomain,&dwDomainLen,&snu);
}


int main(void)
{
    DWORD dwBufferSize;
    TCHAR szComputer[256];
    PSID pSidComputer = NULL;
    PSID pSidComputerNew = NULL;

    dwBufferSize = sizeof(szComputer);
    GetComputerName(szComputer, &dwBufferSize);

    ConvertNameToSid(szComputer,szComputer,&pSidComputer);

    pSidComputerNew = pSidComputer;

    HeapFree(GetProcessHeap(),0,pSidComputer);
    pSidComputer = pSidComputerNew;

    printf("%s\n",szComputer);
    printf("%d",pSidComputer);

    getch();
    return 0;
}

こんな感じにしたのですが
実行結果が私の期待してた
S-1-5-21-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx
このようになりませんでした・・・
最初は
printf("%d",pSidComputer);
これを
printf("%s",pSidComputer);
と文字列表示していたのですが
なんかおかしかったので整数にしました。


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

Name: YuO  ..熟練のプログラマー(45,683ポイント)   Date: 2010/05/25(火) 16:12   No:52754     
Title: Re:SID取得    
pSidComputerはPSID型です。
APIで扱いやすい型であって,表示用のものではありません。

S-1-5-形式にするには,ConvertSidToStringSid APIを使います。
MSDN: ConvertSidToStringSid Function (Windows)
http://msdn.microsoft.com/en-us/library/aa376399.aspx


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

Name: toyo  ..熟練のプログラマー(46,800ポイント)   Date: 2010/05/25(火) 17:07   No:52758     
Title: Re:SID取得    
#include <Sddl.h>
を追加して
LPTSTR string;
ConvertSidToStringSid(pSidComputer, &string);
ですね
それと
    pSidComputerNew = pSidComputer;
    HeapFree(GetProcessHeap(),0,pSidComputer);
    pSidComputer = pSidComputerNew;

これはだめですよ
pSidComputerを開放したらpSidComputerNewの内容も保障されません
内容は変化してないでしょうがやってはだめです
pSidComputer が不要になった時点で開放しましょう


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

Name: しん  ..かけだし(1,390ポイント)   Date: 2010/05/25(火) 17:33   No:52759     
Title: Re:SID取得    
ありがとうございました。
無事に取得することができました。

SIDは取得できたのですが
RIDはどのように取得するのでしょうか?・・・


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

Name: YuO  ..熟練のプログラマー(45,783ポイント)   Date: 2010/05/25(火) 17:48   No:52760     
Title: Re:SID取得    
RIDはSIDのSubAuthorityの末尾ですから,
GetSidSubAuthorityCount APIとGetSidSubAuthority APIを使えば取得できます。

MSDN: GetSidSubAuthorityCount Function (Windows)
http://msdn.microsoft.com/en-us/library/aa446658.aspx
MSDN: GetSidSubAuthority Function (Windows)
http://msdn.microsoft.com/en-us/library/aa446657.aspx


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

Name: しん  ..かけだし(1,927ポイント)   Date: 2010/05/25(火) 18:36   No:52763     
Title: Re:SID取得    
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <sddl.h>

static BOOL ConvertNameToSid(LPTSTR lpszComputer,LPTSTR lpszName,PSID *ppsid)
{
    TCHAR szDomain[256];
    DWORD dwSidLen = 0;
    DWORD dwDomainLen = sizeof(szDomain);
    SID_NAME_USE snu;

    LookupAccountName(lpszComputer,lpszName,NULL,&dwSidLen,szDomain,&dwDomainLen,&snu);

    *ppsid = (PSID)HeapAlloc(GetProcessHeap(),0,dwSidLen);

    return LookupAccountName(lpszComputer,lpszName,*ppsid,&dwSidLen,szDomain,&dwDomainLen,&snu);
}

int main(void)
{
    //各種宣言//
    DWORD dwBufferSize;
    TCHAR szComputer[256];
    PSID pSidComputer = NULL;
    PSID pSidComputerNew = NULL;
    LPTSTR lpszSid;
    DWORD nSubAuthority;

    //メイン処理//
    dwBufferSize = sizeof(szComputer);
    GetComputerName(szComputer, &dwBufferSize);
    ConvertNameToSid(szComputer,szComputer,&pSidComputer);
    ConvertSidToStringSid(pSidComputer, &lpszSid);
    GetSidSubAuthorityCount(pSidComputer);
    GetSidSubAuthority(pSidComputer,nSubAuthority);

    //出力//
    printf("Domain of Owner : %s\n",szComputer);
    printf("SID Adr        : %d\n",pSidComputer);
    printf("SID Value       : %s\n",lpszSid);
    printf("RID Value       : %d\n",nSubAuthority);

    getch();
    return 0;
}


こんな感じにしてみました。
やはりおかしな整数が入ってしまいます。
というか、コンパイル時に
warning C4700: 初期化されていないローカル変数 'nSubAuthority' が使用されます
とエラーが出てしまいます。


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

Name: YuO  ..熟練のプログラマー(45,814ポイント)   Date: 2010/05/26(水) 01:14   No:52803     
Title: Re:SID取得    
GetSidSubAuthorityCount APIおよびGetSidSubAuthority APIの入出力をちゃんと把握してください。

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

Name: しん  ..かけだし(2,012ポイント)   Date: 2010/05/26(水) 18:56   No:52844     
Title: Re:SID取得    
nSubAuthority = GetSidSubAuthorityCount(pSidComputer);
GetSidSubAuthority(pSidComputer,nSubAuthority - 1);

これぢゃダメですか?
いまだにRIDが取得できないのですが・・・


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

Name: しん  ..かけだし(2,032ポイント)   Date: 2010/05/27(木) 22:46   No:52909     
Title: Re:SID取得    
どなたか教えてください。。。

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

Name: YuO  ..熟練のプログラマー(45,931ポイント)   Date: 2010/05/28(金) 17:55   No:52949     
Title: Re:SID取得    
なぜ,
> GetSidSubAuthorityCount(pSidComputer); 
> GetSidSubAuthority(pSidComputer,nSubAuthority);

> nSubAuthority = GetSidSubAuthorityCount(pSidComputer); 
> GetSidSubAuthority(pSidComputer,nSubAuthority - 1);
でRIDが取得できると考えたのですか。
また,取得したRIDはどこにあると思ったのですか。

Windows APIやSidといった環境依存の話の前に,Cの知識が根本的に不足しているように思えますが。


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



Name: かず  ..ぴよぴよ(257ポイント)   Date: 2010/05/27(木) 18:56   No:52885       
Title: valに代入した値は使われていない とは・・・    
こんばんは、質問させていただきます。

下記のソースをコンパイルしたところ、
valに代入した値は使われていない とメッセージが出ます。
どのようにしたら動作するでしょうか。

#include <stdio.h>
#include <time.h>

#define   LOOP_LIMIT   10000
#ifdef USE_MACRO
#define  MAX( a, b )   ((a) > (b) ? (a) : (b))
#else
double maxfunc( double a, double b);
#endif

int main( void )
{
    int i, j;
    double val, x, y;
    clock_t stime, etime;

    stime = clock();
    for ( i = 0; i < LOOP_LIMIT; i++ )
    {
        for ( j = 0; j < LOOP_LIMIT; j++ )
        {
            x = i * 1.0;
            y = j * 2.0;
#ifdef USE_MACRO
        val = MAX( x, y );
#else
        val = maxfunc( x, y );
#endif
        }
    }
    etime = clock();

#ifdef USE_MACRO
    printf( "MACRO version : time = %g\n", (double) (etime - stime) / CLOCKS_PER_SEC );

#else
    printf( "FUNCTION version : time = %g\n", (double ) (etime - stime) / CLOCKS_PER_SEC );
#endif

    return 0;
}

#ifndef USE_MACRO

double maxfunc( double a, double b )
{
    return a < b ? a : b;
}
#endif


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


Name: softya [URL]  ..ハッカー(169,884ポイント)   Date: 2010/05/27(木) 19:03   No:52888     
Title: Re:valに代入した値は使われていない とは・・・    
いや、実際にval 使ってませんよ。
valに値を代入してどうしたいのですか?やりたい事の意味が良くわかりません。


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

Name: ookami  ..上級者(17,101ポイント)   Date: 2010/05/27(木) 19:30   No:52892     
Title: Re:valに代入した値は使われていない とは・・・    
ベンチマークテストをしたいのでしょうか。

メッセージとは、エラーではなくワーニングではないでしょうか?もし実行できないなら、原因は他のところにあると思います。


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

Name: かず  ..ぴよぴよ(272ポイント)   Date: 2010/05/28(金) 10:34   No:52924     
Title: Re:valに代入した値は使われていない とは・・・    
ありがとうございました。

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

Name: たいちう  ..比類無きプログラマー(87,000ポイント)   Date: 2010/05/28(金) 11:26   No:52928     
Title: Re:valに代入した値は使われていない とは・・・    
ループが終わってから、下記を追加してください。

printf("val = %f\n", val);


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

Name: softya [URL]  ..ハッカー(170,400ポイント)   Date: 2010/05/28(金) 11:31   No:52929     
Title: Re:valに代入した値は使われていない とは・・・    
>マクロの実行速度計測をしたいのですが、下のソ−スをコンパイルすると「valに代入した値は使われていない」とメッセ−ジ出るのですがどこをどのように直せばいいのか良く分りません。どなたかご指導ください。                                                         

使っていな代入式は最適化時にプログラムから消される可能性が高いので、valを何らかの形で使ってください。printfだと計測誤差が大きくなると思うので、ダミーで良いので関数を呼び出すとかvalをグローバル変数にするとかコンパイラにこの変数を使っている関数が他にいるかも知れないと思わせることが必要です。


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

Name: たいちう  ..比類無きプログラマー(87,231ポイント)   Date: 2010/05/28(金) 11:38   No:52930     
Title: Re:valに代入した値は使われていない とは・・・    
【補足 エラーと警告の違い】

コンパイルエラーは、文法的な間違いなどによってコンパイルに失敗したことを
意味しますので、実行ファイルはできません。
プログラムを実行するためには、エラーメッセージなどを頼りに、
エラーを直す必要があります。

警告は、「ちょっと変な書き方に気付いたけど、これでいいの?」という、
コンパイラからのアドバイスです。一応コンパイルできているので、
一応実行はできますが、正常に実行できるとは限りません。
警告がなかった場合も、正常に実行できることが保証されているわけではないですけど。

コンパイラのお節介が鬱陶しい場合も有りますが、
一般的には警告は無視しないほうが良いでしょう。


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

Name: たいちう  ..比類無きプログラマー(88,031ポイント)   Date: 2010/05/28(金) 12:46   No:52932     
Title: Re:valに代入した値は使われていない とは・・・    
【補足 エラーと警告の違い】

コンパイルエラーは、文法的な間違いなどによってコンパイルに失敗したことを
意味しますので、実行ファイルはできません。
プログラムを実行するためには、エラーメッセージなどを頼りに、
エラーを直す必要があります。

警告は、「ちょっと変な書き方に気付いたけど、これでいいの?」という、
コンパイラからのアドバイスです。一応コンパイルできているので、
一応実行はできますが、正常に実行できるとは限りません。
警告がなかった場合も、正常に実行できることが保証されているわけではないですけど。

コンパイラのお節介が鬱陶しい場合も有りますが、
一般的には警告は無視しないほうが良いでしょう。


【補足2 処理時間の比較】

最大値を求めるのに、マクロを使うのと関数を使うのと、どっちが速いのか?
という検証だと思いますが、有意な差を計測するのはかなり難しいと思います。

理由の1つめは、コンパイラによる最適化です。
softyaさんが説明しているように、valが使われていない場合などは、
valへの代入がされなかったりしますし、
このプログラムの場合は、ループ自体もなくなりかねません。

デバッグモードなどでコンパイラの最適化を行わないようにすれば、
この問題はなくなりますが、計測の意味もなくなってしまいます。


理由の2つめは、差が小さいことです。
差が小さくても何度も繰り返すことで違いが分かるはず、
という理屈もありますが、何を繰り返しているのか考えて見ましょう。

一番内側のループの中には、double型の掛け算が2回と、
double型の大小比較が1回です。
大小比較や関数の呼出と比べ、掛け算の方がよほど思い処理ですので、
大小比較の方法の測定の影響が見えにくくなります。
これに最適可も絡み、計測をより複雑にしてしまいます。


他にもいくつか理由がありますが、これらの事から私の結論としては、
「何億回も繰り返さなければ計測できないような違いは、気にする必要がない」
ということでした。実行速度についてはもっと大局的に考えることが多いです。
(もっとシビアな環境で動くプログラムを作成されている方等は、当然違った結論になるでしょう)


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

Name: たいちう  ..比類無きプログラマー(88,083ポイント)   Date: 2010/05/28(金) 13:17   No:52936     
Title: Re:valに代入した値は使われていない とは・・・    
別スレになってしまった、かずさんの質問を転記します。
ソースコード部分は、このスレのものと全く同じでしたので割愛しました。


> Name: かず  ..ぴよぴよ(649ポイント)   Date: 2010/05/28(金) 11:07   No:52926 

> 昨日も質問させてもらいましたがまだ良く分りませんのでもう一度お願いします。
> マクロの実行速度計測をしたいのですが、下のソ−スをコンパイルすると
> 「valに代入した値は使われていない」とメッセ−ジ出るのですが
> どこをどのように直せばいいのか良く分りません。どなたかご指導ください。


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

Name: Dixq (管理人)  ..ウィザード(1,194,188ポイント)   Date: 2010/05/28(金) 14:44   No:52939     
Title: Re:valに代入した値は使われていない とは・・・    
たいちうさん、
ありがとうございます。
向こう削除しますね。


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



Name: ハナブトオオトカゲ [URL]  ..かけだし(1,126ポイント)   Date: 2010/05/27(木) 20:39   No:52899       
Title: #include <math.h>とは?    
僕は現在、

27     ジャンプの考え方1(物理)

の前の

26.     シューティング基本。

をやっている途中です。

そこで、今やっている章の次の章のジャンプの考え方1を見たら#include <math.h>というものがありました。

僕は、<stdio.h>と<DxLib.h>しかやったことがなく、<math.h>は初めてです。

<math.h>とはどのようなものでしょうか?(数学っぽい名前ですが)

また、それはどのように勉強すべきでしょうか?

持っている本には、<stdio.h>しか載っていません。

それと、<math.h>の上が<DxLib.h>ではなく、"DxLib.h"になっているのも理由を教えてください。

回答お願いします。


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


Name: ひよこ  ..比類無きプログラマー(82,995ポイント)   Date: 2010/05/27(木) 20:53   No:52902     
Title: Re:#include <math.h>とは?    
<math.h>はサイン、コサインや平方根など、数学的な関数です。

"DxLib.h"はプロジェクトのディレクトリから書くので、(サンプルのフォルダを想定しているから?
<DxLib.h>はVC++のディレクトリのファイルを#includeするときなどに使うと思います。


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

Name: ムンバ  ..熟練のプログラマー(53,045ポイント)   Date: 2010/05/27(木) 22:21   No:52907     
Title: Re:#include <math.h>とは?    
こんばんは。

#include <math.h>(数学関数?)につきましては
「苦しんで覚えるC言語」サイト内の
 ttp://9cguide.appspot.com/r_lib.html#S5
を参照されると良いかと思います。

以下、「猫でもわかるC言語プログラミング 第2版」参考にしました。

#include < >

 は、標準ライブラリ(ヘッダファイルなど)を呼び出す(取り込む)場合で

#include " "

 は、自作のライブラリや他のファイルなど(の標準ライブラリ以外)
を、呼び出す(取り込む)場合に使います。

< > を使うと、コンパイラが指定した場所にファイルを探しに行きますが
" " を使うと(コンパイラによって異なりますが)
ソースファイルのあるディレクトリを探して取り込みますが
無ければ、コンパイラの指定した場所を探します。

PS:間違ってたら、すみません。
    たかぎさんに突っ込まれそうなので、逃げてしまいます。w

---脱字追加--- 編集済み


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

Name: ムンバ  ..熟練のプログラマー(53,157ポイント)   Date: 2010/05/27(木) 22:58   No:52911     
Title: Re:#include <math.h>とは?    
ああっ?!

ハヤブトオオトカゲさん?

あなたの、こちらの掲示板のスレッドNo:52825に

皆さんのお答え頂いていますので

まずは、そちらを解決された方が

良いかも、知れません。

余計な事で、すみません。


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

Name: たかぎ [URL]  ..ハッカー(192,912ポイント)   Date: 2010/05/27(木) 23:48   No:52914     
Title: Re:#include <math.h>とは?    
呼ばれたみたいなので...

#include <...> の形式は、標準ヘッダを取り込むための前処理指令です。
ヘッダはファイルであるとは限りません。

それに対して、#include "..." の形式は、ソースファイルを取り込むための前処理指令です。
指定したソースファイルが見つからない場合は、#include <...> と同じようにヘッダを取り込みます。


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

Name: ムンバ  ..熟練のプログラマー(53,170ポイント)   Date: 2010/05/28(金) 10:29   No:52923     
Title: Re:#include <math.h>とは?    
おはようございます!
ありがとうございます。(笑


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

Name: ハナブトオオトカゲ [URL]  ..かけだし(1,104ポイント)   Date: 2010/05/28(金) 13:13   No:52935 解決!     
Title: Re:#include <math.h>とは?    
ありがとうございました。

苦しんで覚えるC言語を見ながらやってみます。


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



Name: みなか  ..ぴよぴよ(235ポイント)   Date: 2010/05/13(木) 16:16   No:52059       
Title: Box2dの天秤の傾き調整がうまくいかない    
今Box2dのC++で天秤の皿に物質が乗った時に皿にかかる質量によって傾き方を調整したいのですが、
皿にどのくらいの質量がかかったか、求め方がわかりません。
主軸の画像と天秤皿を支えている横棒でジョイントをつないで、
そこのジョイント処理で傾き制限をしようと思っています。

目標としては下のサイトのような感じです
http://www.game-box.jp/~flashtown/link2/flashgame/massattck.php
フラッシュゲームにするつもりではないので、それでもわかるというかたがいたらぜひ教えてください。
よろしくお願いします。
雑な作りの天秤画像になっておりますがそこら辺は勘弁してください。


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


Name: たかぎ [URL]  ..ハッカー(186,031ポイント)   Date: 2010/05/13(木) 18:46   No:52067     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
> 皿にどのくらいの質量がかかったか、求め方がわかりません。 

質量がかかったかではなく、重量がかかったかでは?
まあ、それはよいとして、どのような分銅? を載せるか、その方法を決めないことには先に進まないのではないでしょうか?


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

Name: Justy  ..伝説なるハッカー(529,715ポイント)   Date: 2010/05/13(木) 21:03   No:52079     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
>皿にどのくらいの質量がかかったか、求め方がわかりません
 Box2dを使うなら b2Body::GetMass関数で取得できますので、
皿の上の全てのオブジェクトの値を足せば求まりますが。

 リンク先の Flashが目標だとすると、このゲーム内での Box2Dは使いどころが難しいですね。
 このゲームの肝であるバランス部分を真面目に物理演算してしまうと、
調整がかなり大変になりそうな気がします。


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

Name: みなか  ..ぴよぴよ(289ポイント)   Date: 2010/05/14(金) 14:38   No:52107     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
GetMassですね。
わかりました。試してみます。
またわからないことがあったら質問をしますので
後ほどよろしくお願いします。


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

Name: みなか  ..ぴよぴよ(441ポイント)   Date: 2010/05/14(金) 16:22   No:52113     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
傾きとは別の質問ですが、
左の皿に触れた、右の皿にのった触れたの判定でGetMassを利用して足そうとしているのですが、
皿に触れたときに判定をすると、皿に触れないで物の上に乗ったときに
皿に触れていないものをどうやって判定するかが
わからなくて詰まっています。
別のやり方があるのだと思うのですが、どういう風にプログラムしていいかわからないのです。
わかるかた教えてください。


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

Name: Justy  ..伝説なるハッカー(530,277ポイント)   Date: 2010/05/15(土) 02:19   No:52131     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
>皿に触れたときに判定をすると、皿に触れないで物の上に乗ったときに 
>皿に触れていないものをどうやって判定するかがわからなくて

 b2Body::GetContactList()でその b2Bodyと接触しているオブジェクトの情報が取得できますので、
皿の b2Bodyから接触しているものを辿って、さらにそのオブジェクトの接触リストを、と
全てを調べていけばなんとかなるかな、と思います。


 でも、動作的に Flashと同じものを作るのであれば、そんなことしなくても
事前にそれぞれの皿にあるオブジェクトリストを作っておいて、全てのオブジェクトが
静止状態に入ってから、2つのリストをそれぞれ辿って調べればいいのでは?


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

Name: るー  ..かけだし(1,591ポイント)   Date: 2010/05/17(月) 15:08   No:52235     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
以前Box2Dのプログラムに関して質問したるーといいます。
ブロックをマウスを使って動かすプログラムをJustyさんに作ってもらいました。
あれから返事を出せず本当に申し訳ありません。

で、実はこのスレの質問者のみなかさんと僕は共同でプログラムを作っています。
僕もやり方が分からずに困っています。
プログラムを上げてみますので、見てやって下さい。
そして、ご指導の程お願いします。

理想として、同じ密度のブロックを両かごに入れたら、
すぐに天秤が釣り合うようなプログラムにしたいのですが、
よろしくお願いします。 編集済み


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

Name: Justy  ..伝説なるハッカー(533,158ポイント)   Date: 2010/05/18(火) 01:37   No:52261     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
>みなかさんと僕は共同でプログラムを作っています
 あー、なるほど。ということは Box2Dは 2.0xということですね。
 だとすると b2Body::GetContactList関数は存在しませんね。

 基本的に天秤を物理計算している環境下で、モノをバスケットに載せても、
安定するまで時間がかかるのは実際の天秤でも同じです。

 それを出来るだけ早く、且つある程度自然な形で安定させるには、無理矢理ジョイントで
押さえつけていいのですが、No:52079でも書きましたが調整が大変だと思います。


 代替案としてはバーを固定(他のオブジェクトの影響を受けない)にして、
それぞれのバスケットに載っている重量を求め、比較、結果をバーの角度に反映、という方法です。

 バスケットにかかる重量を簡単に求める為のメソッドは Box2Dにはありません。
(勿論、ライブラリの中から手を入れれば別ですが)
 なのでバスケットに触れているオブジェクトをリストアップし全ての重量を計算します。
 
 ではどうやってバスケットに触れているものをリストアップするか、ですが少し試してみました。

 バスケットの b2Bodyが持っている接触リストから辿ってみましたが、このリストは
接触している可能性があるリストっぽく、オブジェクトとオブジェクトが近距離になると
リストに追加されるようで、確実に接触しているとは言い難いものでした。
(だから メソッドが存在しなかったのでしょうか……?)

 そこで b2ContactListenerから拾ってみようとしましたが、こちらはこちらで跳ね返りなどで
細かく接触したり外れたりを繰り返していて安定しないことがあるようです。


 とりあえず両方を併用する形で力技でなんとかしてみましたが、こんな感じを目指している、
ということでしょうか。

ttp://karinto2.jp/uploader/download/1274110200.zip
Pass : cx2CwuH3

注) 赤は緑の2倍の重さをもっています。

 どう力技なのかというと……。


 b2ContactListenerに過去 15フレーム分の接触した b2Bodyのペアリストを記憶するようにする(Persist)。

 b2Bodyクラスにメンバ m_contactListを返す関数 GetContactListを追加。
 
 バスケットにかかる重量を求める時に、GetContactList()を使ってバスケットから接触している b2Bodyを洗い出し、
接触しているものが見つかったら更にその接触リストを辿り芋づる式に接触しているだろう
オブジェクトを見つける。

 見つけたオブジェクトは以下の条件を満たしていたら、重量を計算する。

・ 同一フレームでまだ調べていないオブジェクトである
・ 見つけたオブジェクトが USERDATA_BOX1か USERDATA_BOX2である。
・ b2ContactListenerのペアリストと照合し過去 15フレーム以内に接触している
・ バスケットより上にある(下からバスケットに接触されると困るので)

 求めた重量を加算し、双方のバスケットで比較し、その差に応じて角度に変換する。
 その際急激に変化しないよう加速度をつける。

 とこんな感じです。


 んー、なんかしっくりこないですけど、今はこれしか思いつかないですね。
 もうちょっと考えてみます。


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

Name: 組木紙織  ..比類無きプログラマー(81,745ポイント)   Date: 2010/05/18(火) 07:45   No:52266     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
Box2dは良く知らない(使い始めて一週間程度)のですが
物理シミュレーションなら、ばねも再現できると思います(確認は出来てません)。
ばねじゃなくても物体の変位と比例した力はかけれるはずです。

両側の天秤に見えないばねをつければ、複雑な機構を組み込まないでも
重さの違いよって角度が変わるはずです。
制止するまでの時間が長ければジョイント部分の抵抗を大きくすればなんとかなると思います。



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

Name: みなか  ..ぴよぴよ(600ポイント)   Date: 2010/05/18(火) 14:38   No:52278     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
Justyさん、組木紙織さん、ご指導ありがとうございます。
Justyさんのてんびん.exeのように作ってみたいと思います。
このexeファイルすごいですね。
こんな感じで作りたかったので、
Justyさん尊敬しまくりです。
私の頭はあまり良い方ではないので、申し訳なく思いますが、
Justyさんの説明で理解できないところもありますので、
分からないことがあったら聞くと思いますので、
その時は、またよろしくお願いしますね。


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

Name: Justy  ..伝説なるハッカー(534,418ポイント)   Date: 2010/05/19(水) 00:59   No:52325     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
@組木紙織さん
>両側の天秤に見えないばねをつければ
 この天秤の2つのバスケットが重さで上下に動くだけならバーの重さを重くするとか
仰るようにバネを入れてもいいかな、と思ったんですが。

 このバスケット、遊園地のバイキングみたいな感じで結構揺れるんですよ。
 2つのバスケットがばらばらに揺れると、それぞれの遠心力によってバーを引っ張る向きが
変わりなかなか静止しない、というのが今の状態です。
 なので、天秤にバネを入れてもちょっと厳しいかな、と判断したわけです。
 
 ただ、バスケットの揺れができるだけ早く収束するようにさせた上でなら
効果はありそうな気がしてきました。



@みなかさん&るーさん
 いくつか補足をしておきます。

 一応 15フレームとって多少オブジェクトがバスケット等から離れても載っていることに
していますが、これでもダメなときはだめなようです(画面上は離れているようには見えないのに)。
 必須ではないにしても、一度載ったオブジェクトはバスケット周辺から見た目で判るほど(1,2pixel以上)
離れたときのみ載っていない判定をした方がいいかもしれません。


>バスケットにかかる重量を簡単に求める為のメソッドは Box2Dにはありません。
 と書きましたが、すみません、近いのがありました。
 b2ContactListenerクラスの Resultメソッドに最終的に接触している Shapeの情報と
位置・力の方向と強さが来ています。
 上に載ったオブジェクトの分も加味して計算してくれているようです。
 
 これを上手く使ってバスケットとボックスの接触だけ拾い出せば、
接触リストを辿らなくても済むかもしれません。


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

Name: るー  ..かけだし(1,632ポイント)   Date: 2010/05/20(木) 16:14   No:52396     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
色々試行錯誤しているのですが、
main.cppに
// 接触のリストに対する処理
for( b2ContactResultList::const_iterator it=ContactList.begin(), endit=ContactList.end(); it!=endit; ++it )
{
    // この中で接触リストに対する処理を行う
    //const b2ContactResult &contactResult = *it;:
}
とありますが、この中にGetMass()を使ってバスケットの重量、ブロックの重量を求め、
その重量を使ってバスケットの総重量を求めるような計算をしていけばいいのでしょうか?

火曜にJustyさんが答えて下さったレスに、
>>バスケットにかかる重量を求める時に、GetContactList()を使ってバスケットから接触している b2Bodyを洗い出し、 
>>接触しているものが見つかったら更にその接触リストを辿り芋づる式に接触しているだろう 
オブジェクトを見つける。
とあるんですけど、ここの部分をどうプログラミングしていけばいいのか分からないです。


2人ともかなり疲弊しており、頭がついていかない状態ですw
馬鹿共ですいませんが、以上のことについて詳しく教えて頂きたいです。


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

Name: Justy  ..伝説なるハッカー(537,285ポイント)   Date: 2010/05/21(金) 01:58   No:52410     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
 どうしても解決できなければ、ソースを出してもいいですが、もう少し頑張って見ましょうか。


>その重量を使ってバスケットの総重量を求めるような計算をしていけばいいのでしょうか?
 そこは全く使っていないです。

 私が書いたコードでは事前に b2ContactListener::Persistの中で、どの b2Bodyと b2Bodyが接触しているのかを
全てリストアップしました(これをペアリストとします)。

 これは Persistメソッドの引数から接触しているオブジェクトそれぞれの b2Shapeを取得し、
そこから b2Shape::GetBody()を呼べば b2Bodyが手に入ります。

 この2つの b2Bodyをペアにしてリストに保存するわけです。
 これを 15〜30フレーム分保存しますのでリストは配列など複数用意して、毎フレーム別のリストに
格納します。

 尚、後から検索するので各リストの中で重複するペアは入れる前に弾いておいた方がいいですね。


 でペアリストが完成したら(b2Word::Stepが終ったら)重量を計算するときに、

・ std::vector<const b2Body*>のチェック済みリストを用意しておく。
・ バスケットの b2Body::GetContactList()の b2ContactEdge型のリストを辿ってバスケットに
 接触している可能性があるボックスの b2Bodyを取り出す(b2ContactEdge::otherメンバ)。
(GetContactListメソッドは 2.0xにはないので、ヘッダを書き換えて作って下さい)
 
・ 取り出した b2Bodyが以下の条件を全て満たしているか
  USERDATA_BOX1や USERDATA_BOX2である
  ペアリストを調べて過去Xフレーム以内にバスケットの b2Bodyと接触している・いたかどうか
  位置がバスケットよりも上にある
  チェック済みリストに入っていない

・ 条件を全て満たしていたら、チェック済みリストに b2Bodyを追加し、重量を加算する
・ 続けて、その b2Bodyと接触している別の b2Bodyを b2Body::GetContactList()から洗い出し
 同様に調べる。


>ここの部分をどうプログラミングしていけばいいのか分からないです
 構造的には接触していた b2Bodyに接触していた別の b2Bodyを見つけ、それに接触していた
b2Bodyに接触していた……と次から次へと全ての連なりを全て調べますのでここは再帰構造となります。


 イメージ的にはこんな感じです。

float GetTotalMassContactedBox(const b2Body *body, const b2Vec2 &basePos, std::vector<const b2Body*> &checkedList)
{
    float totalMass = 0;
    for (const b2ContactEdge *ce = body->GetContactList(); ce; ce = ce->next)
    {
        b2Body *ceOtherBody = ce->other;
        ...
        条件に合った ceOtherBody(b2Body)を見つけたら、totalMassに加算し、
        ceOtherBodyを第一引数にして GetTotalMassContactedBox()を呼び出し、totalMassに加算する
    }
    return totalMass;
}
float GetMassOnBasket(const b2Body *body)
{
    const b2ContactEdge *contactList = body->GetContactList();
    if(!contactList)    return 0;
    
    std::vector<const b2Body*> checkedList;
    return GetTotalMassContactedBox(body,  body->GetPosition()+b2Vec2(0, 15), checkedList);
}
 編集済み


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

Name: みなか  ..かけだし(1,072ポイント)   Date: 2010/05/24(月) 15:00   No:52663     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
>イメージ的にはこんな感じです。
プログラムを記述していただいたのにまったくもって申し訳ないのですが、
どこに記述していこうか迷ったり、
void Persist(const b2ContactPoint* point)
の場所や
for(b2ContactResultList::const_iterator it=ContactList.begin(), endit=ContactList.end(); it!=endit; ++it)
の場所に記述してもローカル関数の定義がただしくないとか
識別子がないなどのエラーが出ます。

>私が書いたコードでは事前に b2ContactListener::Persistの中で
>どの b2Bodyと b2Bodyが接触しているのか
この場所でいざやろうとしてもどう記述していけば良いのか、
わからなくるー共々わからず切羽詰まっております。

No:52261の
>バーを固定(他のオブジェクトの影響を受けない)
これは
b->SetMassFromShapes();        //    形状から当たり判定情報の作成
を消してみたのですがこれであっているのでしょうか?

Justyさん頼りでやっていって記述してもらったものを書いて、
進めている向上心があるのかないのかわからない馬鹿な奴等ですが、
申し訳ないのです。
今週中には仕上げたいので、
また救い手差し伸べてくれないでしょうか。
お願いします。


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

Name: Justy  ..伝説なるハッカー(535,246ポイント)   Date: 2010/05/25(火) 01:50   No:52715     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
>識別子がないなどのエラーが出ます
 根本的におかしな状態になっていますね。
 関数の中に関数を記述することは出来ませんよ。普通の関数として、適当なところに書いてください。


 プログラムの流れをまとめましょうか。大きなところで書くと

1) マウスによる移動
2) b2World::Step実行 → MyContactListener::Presents(Result?)での接触情報収集
3) 接触情報を元にした重量計算 → バランス決定
4) 表示

となります。


 前に「イメージ」と書いたコード GetMassOnBasket関数は指定した b2Bodyに連なるオブジェクトの
重量の合計を求めるものなので、3)に相当します。

 従って、b2World::Step内で実行される Persistの中で処理するものではなく、b2World::Stepの後で実行するものです。
 又、「そこは全く使っていないです」と書いたとおり、for(b2ContactResultList……も使って居ません。
 
 単純に2つの重量を求めて比較する為の(例えば UpdateBarBalanceという名前の)関数を1つ用意して、
その中で LeftBasketと RightBasketの重量を GetMassOnBasket()でそれぞれ調べて比較し、
バランス(角度)を調整しています。
 この UpdateBarBalance関数を b2World::Step()の後で呼んで、その後結果に基づいて Barの姿勢を設定・表示をしています。


>この場所でいざやろうとしてもどう記述していけば良いのか
 具体的にどこで詰まっていますか?
 No:52410で結構具体的に書いているのですが……。

 Persistの引数 pointは接触情報 そのものなので 

    point->shape1->GetBody();
    point->shape2->GetBody();

で接触している2つの b2Bodyが手に入ります。
 この2つの b2Bodyをペアにしてリストに保存しています。

 参考までにこのペアリストを保存しているMyContactListenerメンバ変数の型はこんな感じです。

    typedef std::tr1::tuple<const b2Body *, const b2Body *> b2BodyPair;     // ペア情報
    typedef std::vector<b2BodyPair>                         b2BodyPairList; // ペアリスト
    static const int MaxFramePairBodyList = 30;                             // 30フレーム分記憶
    b2BodyPairList  m_PairBodyList[MaxFramePairBodyList];                   // ペアリスト 30フレーム分

※ std::tr1::tupleが使えなければ std::pairでも代用できるはずです。

 で、このペアリストを先の重量比較関数である UpdateBarBalanceの中で辿り、バスケットがもっている
接触しているかもしれないリストと照合して、本当に接触しているかどうかをペアリストを使って
確認しています。

 あぁ、一応 b2World::Step直前で、最も古いフレームのペアリストはクリアしておく必要があります。
 そうしないといつまでも残ってしまいますので。


 実際のところ、UpdateBarBalanceの中で本当に接触しているかどうかさえ確認できればいいので
このケースでは ContactListを使わずに独自のペアリストを構築しましたが、ContactListを使っても
接触している b2Body2つを持っているので確認はできるはずです。


>バーを固定
>を消してみたのですがこれであっているのでしょうか
 一応それでもいいとは思います。b2PolygonDef::densityを 0にしても同様になるはずです。


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

Name: みなか  ..かけだし(1,737ポイント)   Date: 2010/05/25(火) 16:28   No:52756     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
>具体的にどこで詰まっていますか?
b2ContactListener::Persistがなかったので、
たぶんvoid Persist(const b2ContactPoint* point)の中に記述するのかなと思い
b2Shape::GetBody()を呼び出したのは良いのですが、
( 'b2Shape::GetBody' : 静的でないメンバ関数の呼び出しが正しくありません)
と出てきました。これって記述場所があってないのでしょうか?
それとも根本的にどこかに何か宣言などしなければいけないのでしょうか?

 >typedef std::tr1::tuple<const b2Body *, const b2Body *> b2BodyPair;    //ペア情報 
 >typedef std::vector<b2BodyPair>                         b2BodyPairList;//ペアリスト 
 >static const int MaxFramePairBodyList = 30;                            //30フレーム分記憶 
 >b2BodyPairList  m_PairBodyList[MaxFramePairBodyList];                  //ペアリスト 30フレーム分
はMyContactListener.cppに記述すればあっているのでしょうか?
すみませんがそこらへんを詳しく書いていただくと助かります。

今さらなのですがNo:52261で言っていたGetContactListの追加なのですが
b2ContactEdge* GetContactList();
inline b2ContactEdge* b2Body::GetContactList()
{
    return m_contactList;
}
とBox2D\Source\Dynamics\\b2Body.hに追加したのですがあっているのか自信がありません。
これで良いのでしょうか?

>普通の関数として、適当なところに書いてください。
記述してみましたが、
 'b2Body::GetContactList' : 'const b2Body' から 'b2Body &' へ 'this' ポインタを変換できません。
が2つ出ました。
これはまだ値を入れてないからでしょうか?

馬鹿でめちゃくちゃ質問してすみません。
またご助言をお願いします。


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

Name: Justy  ..伝説なるハッカー(535,747ポイント)   Date: 2010/05/26(水) 01:04   No:52802     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
>これって記述場所があってないのでしょうか? 
 いや、それ静的メンバじゃないですよ。インスタンスから呼び出す関数です。
 あんまり C++に明るくない、といった感じでしょうか。
 というか、No:52715で Persistの引数 pointを使って  point->shape1->GetBody();  と書いてますよね?


>Box2D\Source\Dynamics\\b2Body.hに追加したのですがあっているのか自信がありません。 
>これで良いのでしょうか? 
 クラスの publicメンバになっていれば問題ありません。


>'b2Body::GetContactList' : 'const b2Body' から 'b2Body &' へ 'this' ポインタを変換できません。 
>が2つ出ました。 
>これはまだ値を入れてないからでしょうか?
 その記述はイメージと書いた通り、実情に合わせて適当に修正が必要だと思うんですが。
 うちの b2Body::GetContactListは

    const b2ContactEdge* GetContactList() const;

 としています。
 これに合わせてみてください。


 とりえあず、こちらにソースを貼っておきます。VS2008Sp1で動きます。


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

Name: みなか  ..かけだし(1,918ポイント)   Date: 2010/05/26(水) 22:21   No:52855     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
>ソースを貼っておきます
ありがとうございます。感謝です。

>VS2008Sp1
とはVS2008のバージョンアップされたものなのでしょうか?
だとすると自分は持っていないので動かせません。
ためしに
VS2005でやってみましたが
include ファイルを開けません。'tuple': No such file or directory
となり
VS2008でやってみると
include ファイルを開けません。'Box2D.h': No such file or directory
になりました。
何か対策はないのでしょうか?
よろしくお願いします。


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

Name: Justy  ..伝説なるハッカー(536,349ポイント)   Date: 2010/05/26(水) 23:26   No:52857     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
>VS2008のバージョンアップされたものなのでしょうか? 
 バフフィックス + αされたものです。
 2008無印を使っているならアップデートしておいた方がいいですね。


>include ファイルを開けません。'tuple': No such file or directory 
 調べればわかると思いますが、2つしか要素はないので std::tr1::tupleは std::pairで代用できるかと。
 それに合わせて、std::tr1::make_tupleを std::make_pairにする等、適宜修正してください。


>include ファイルを開けません。'Box2D.h': No such file or directory 
 そのあたりは環境に合わせて適宜修正してください。
 こちらではわかりません。
 
 というか No:52235で、るーさんが貼ったソースでは普通にインクルードしているようですが。
 同じ設定すれば問題ないのでは?


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

Name: みなか  ..かけだし(2,100ポイント)   Date: 2010/05/28(金) 12:48   No:52933 解決!     
Title: Re:Box2dの天秤の傾き調整がうまくいかない    
>2008無印を使っているならアップデートしておいた方がいいですね。
すみません。
学校からVS2008をもらってあまりいじりたくないのでアップデートはしたくありません。
威圧してくる先生がたまにいるので。
でもソースありがとうございます。
そのうちVS2008のバックアップが取れたらアップデートしてみます。

天秤の傾き調整なのですが
るーさんが天秤ゲームができないので
全く違うものに代案してきたので
この質問は一時的に解決扱いさせてもらいます。
ご協力していただいた皆様方に感謝です。

個人的には、作ったのにもったいないと感じるので
その時にまた質問を再開させていただきます。
その時はまたよろしくお願いします。


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



Name: 伊藤  ..かけだし(1,082ポイント)   Date: 2010/05/27(木) 10:15   No:52869       
Title: 判定が上手く取れない    
DXライブラリを使ってゲームを作っております。
移動の判定が上手くいかず
どうしてもわからなかったので質問させて頂きました。

仕様
・プレイヤーは常に左右のどちらかに移動し続けている
・壁に当たったら移動方向を反転する
・床がなかったら落ちる
といったよくありそうなゲームです。

壁に当たった際の左右反転は出来たのですが
落ちる際に左右の移動の判定が入ってしまったり
落ちた際に壁にめり込んで急に左右反転してしまうことがあります。

必要そうな一部分だけを切り出したのでミスがあったらすみません。
どうか改善案を頂けないでしょうか?


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

#define        CEL_SW    32
#define        CEL_SH    32
#define        CEL_W    20
#define        CEL_H    15

enum{ RIGHT, LEFT };

// キャラクター情報
typedef struct{
    bool Flg;
    bool Dir;                // false : RIGHT / true : LEFT
    int Px,Py,Mx,My;
    int Ox,Oy,Cx,Cy;
    int Speed;

}CHR;

CHR Play;

// マップデータ
int MapData[CEL_H][CEL_W] = {
    { 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,1,0, 0,0,0,0,0, 0,0,0,0,1 },
    { 1,1,1,1,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,1 },
    { 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1 },
    { 1,0,0,0,1, 1,1,1,1,0, 0,0,0,0,0, 0,0,0,0,1 },

    { 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1 },
    { 1,0,0,0,0, 0,0,0,0,0, 1,1,1,1,0, 0,0,0,0,1 },
    { 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1 },
    { 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1 },
    { 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1 },

    { 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1 },
    { 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1 },
    { 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1 },
    { 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1 },
    { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
};

// 初期化
void Init(){

    InitHandle();        // 画像の読み込み

    // プレイヤー
    Play.Flg = true;
    Play.Cx = 1;
    Play.Cy = 1;
    Play.Px = Play.Cx * CEL_SW + CEL_SW/2;
    Play.Py = Play.Cy * CEL_SH + CEL_SH/2;
    Play.Speed = 2;

} 

// 処理
void Loop(){

    PlayMove();
    
    // 向きの変更の移動
    if(Key[KEY_INPUT_RIGHT].Key)    Play.Dir = RIGHT;
    if(Key[KEY_INPUT_LEFT].Key)    Play.Dir = LEFT;
    if(Mouse.clFlg){
        if(Mouse.x > Play.Px)    Play.Dir = RIGHT;
        else if(Mouse.x <= Play.Px) Play.Dir = LEFT; 
    }
}

// 描画
void Draw(){
    // プレイヤー
    if(Play.Flg) DrawCenter( Play.Px, Play.Py, Handle.Play, 0xff, Play.Dir ) ;
    
    // マップ
    for(int i=0; i<CEL_H; i++){
        for(int j=0; j<CEL_W; j++){
            int x = j*CEL_SW + CEL_SW/2;
            int y = i*CEL_SH + CEL_SH/2;
            int h = NULL;
            switch(MapData[i][j]){
                case 1:
                    h = Handle.Obj[0];
                    break;
            }
            DrawCenter( x, y, h, 0xff, Play.Dir ) ;
    }
}



void PlayMove(void){

    // 移動量の初期化
    Play.Mx = 0;
    Play.My = 0;

    // 移動量のセット
    for(int speed=0; speed<Play.Speed; speed++){
        
        Play.Cx = int((Play.Px - CEL_SW/2)/CEL_SW);
        Play.Cy = int((Play.Py - CEL_SH/2)/CEL_SH);

        if((Play.Px - CEL_SW/2)%32 == 0){
            if(MapData[Play.Cy][Play.Cx+1] == 1){
                Play.Dir = LEFT;
            }
            if(MapData[Play.Cy][Play.Cx-1] == 1){
                Play.Dir = RIGHT;
            }
        }

        if(Play.Dir == RIGHT)        Play.Mx = 1;
        else if(Play.Dir == LEFT)    Play.Mx = -1;
        
        if(MapData[Play.Cy+1][Play.Cx] != 1){
            Play.My = +3;
        }


        Play.Px += Play.Mx;
        Play.Py += Play.My;
        
    }


}





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


Name: 伊藤  ..かけだし(1,101ポイント)   Date: 2010/05/27(木) 10:17   No:52870     
Title: Re:判定が上手く取れない    
ゲーム画像です。
青が壁で赤がプレイヤーです。


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

Name: ookami  ..上級者(17,255ポイント)   Date: 2010/05/28(金) 08:43   No:52922     
Title: Re:判定が上手く取れない    
ここだけか分かりませんが、
if(MapData[Play.Cy+1][Play.Cx] != 1){
    Play.My = +3;
}

↑これだと、プレイヤーがマスとマスの間にいる時、左下のマスしかチェックしていないことになりますね。


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

Name: 伊藤   Date: 2010/06/02(水) 20:59   No:528691275479997     
Title: Re:判定が上手く取れない    
回答ありがとうございます。

すみません・・・モデムが壊れてしまっためネットが使えず
折角、回答頂いたのに返事ができませんでした・・・。

一度、締めさせて頂きます。






Name: ハナブトオオトカゲ [URL]  ..ぴよぴよ(925ポイント)   Date: 2010/05/26(水) 12:27   No:52825       
Title: 初級編が終わったのですが・・    
ついに初級編が終わったのですが、ここで簡単なゲームを作ってみたいです。

ブロック崩しやウィンベーダーの単純なものなどがいいのですが、初級編までの知識でできますか?

また、弾の当たり判定はどんな感じに行うのでしょうか?


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


Name: Ma  ..ハッカー(100,671ポイント)   Date: 2010/05/26(水) 13:24   No:52827     
Title: Re:初級編が終わったのですが・・    
どうせなら、ゲームプログラミングの館を網羅してから始めることをおすすめします。
ブロック崩しやインベーダー(ウィンベーダーは何か知りませんがw)は簡単に見えて、プログラミング入門者にはやさしくありません。
無論、もうお気づきのようですが。

欲を言えば、龍神録プログラミングの館もできるといいです。
それができればインベーダーはもう作れるでしょう。


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

Name: softya [URL]  ..ハッカー(168,986ポイント)   Date: 2010/05/26(水) 13:31   No:52828     
Title: Re:初級編が終わったのですが・・    
作り始めてみて悩んだら、ゲームプログラミングの館や龍神録を参考にしてみると良いと思います。
ブロック崩しやインベーターの要素を分解して「ゲームプログラミングの館」や「龍神録」の章のように分けれますか?そこから始めて見ましょう。
ブロック崩しなら
(1)ブロック崩しの枠を表示してみよう!
のあとを書いてみてください。


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

Name: パコネコ  ..ぴよぴよ(764ポイント)   Date: 2010/05/26(水) 23:34   No:52859     
Title: Re:初級編が終わったのですが・・    
あたり判定は
px、py  ←自機の座標
pz      ←自機の大きさ

t_x、t_y←球の座標
t_z     ←球の大きさ
とした場合(大きさは正方形のとき)

if(px < t_x+t_z && t_x < px+pz && py < t_y+t_z && t_y < px+pz)
        ↑      ↑      ↑
  (xの座標で球があたっているか?&&yの座標で球があたっているか?)
このif文でワイはやってます。


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

Name: ハナブトオオトカゲ [URL]  ..かけだし(1,117ポイント)   Date: 2010/05/28(金) 05:52   No:52920 解決!     
Title: Re:初級編が終わったのですが・・    
ありがとうございました。

やっぱり全部やってからにします。

当たり判定もありがとうございました。


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



Name: のどか  ..ぴよぴよ(32ポイント)   Date: 2010/05/26(水) 06:30   No:52806       
Title: アクションゲームで床との当たり判定    
アクションゲームを作っております。
十字キーでキャラクターが動くのではなく
カメラが動き動いているように見せるように組んでおります。
なんとかセルデータから表示させて移動しているように見せるところまでは出来ました。

何とかジャンプの処理も実装出来ました。
ただ空中足場の乗るようなプログラムがどうしてもわかりません。
MapDataが1、2、3の所が足場です。

通常のアクションゲームの様にキャラクターが真下からジャンプして当たったら
ジャンプの移動量が無くなったり着地できるようにしたいです。

そのように書けばよいのかアドバイスを頂けないでしょうか?

特殊なソースですみません。
DXライブラリを使っており毎フレーム呼ばれているのはLOOP関数とDraw関数のみです。
Initなどは開始時に一度だけ呼ばれます。


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


Name: のどか  ..ぴよぴよ(62ポイント)   Date: 2010/05/26(水) 18:48   No:52843     
Title: Re:アクションゲームで床との当たり判定    
色々と考えてみたのですがやはり判定の仕方がわかりません・・・。


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

Name: softya [URL]  ..ハッカー(170,018ポイント)   Date: 2010/05/27(木) 17:08   No:52880     
Title: Re:アクションゲームで床との当たり判定    
ざっと見ただけですが、障害物との当たり判定が見当たりません。
どの様にして、床を判定してるんでしょうか?


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

Name: のどか  ..ぴよぴよ(129ポイント)   Date: 2010/05/27(木) 22:00   No:52904     
Title: Re:アクションゲームで床との当たり判定    
回答ありがとうございます。
障害物との判定の仕方がわからないので無理やり一定の床より上にするように書いております。
どうか教えては頂けないでしょうか?


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

Name: softya [URL]  ..ハッカー(170,205ポイント)   Date: 2010/05/28(金) 01:58   No:52919     
Title: Re:アクションゲームで床との当たり判定    
ここのゲームプログラミングの館は読まれましたか?
基本的にはキーで歩くのに重力の落下を加えるだけです。


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



Name: h.k  ..ぴよぴよ(683ポイント)   Date: 2010/05/27(木) 00:07   No:52860       
Title: 2進数から16進数への変換の問題    

こんばんは。
いつもお世話になっております。
学校の課題プログラムでわからないところがあったので質問させて頂きます。

課題のプログラムで

65535以下の10進自然数を2進数および16進数に変換するプログラムを作成し、実行しなさい.ただし、プログラムは以下の仕様を満たすものとする.
<仕様>
1. 変換すべき数は、キーボードから打ち込む.なお、その数は文字配列(例えば、 input[10])に関数gets()で読み込ませること.
2. 文字配列に格納された数は、関数atoi()によって文字列から整数に変換し、さらに2進数化を行い、その結果を別の文字配列(例えば、binary[20])に格納すること.
3. 変換された2進数およびその逆順を表示すること.
4. 逆順にされた2進数の数値について、4ビット毎に16進数に変換して表示すること(16進数の数値表示にはprintfを用いても良い.)

といったものが課題として出されました。
10進自然数から2進数、その逆順を表示するところまではできたのですが、”逆順にされた2進数の数値について、4ビット毎に16進数に変換して表示すること”という部分を表示したいのですが全くわかりません。
どのような考え方でプログラムすればいいでしょうか?

プログラムは、

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

int main(void)
{
int i,a,b,k,n;
char input[10],binary[20];

printf("Please input the number to be transformed: ");
gets(input);
a=atoi(input);
i=0;

printf("(1) Binary expression : ");

while(a){
b=a%2;
binary[i++]=b;
a=a/2;}

for(n=i-1;n>=0;n--){
 printf("%d",binary[n]);
}
printf("\n");

printf("(2) Binary expression (reversed order): ");

for(k=0;k<=i-1;k++){
printf("%d",binary[k]);}

printf("\n");

printf("(3) Hexadecimal expression for (2) : ");

return 0;
}

というところまで書けました。

OSはWindows XPで、コンパイラはVC++ 2008EEを使っています。
c言語は始めて半年ほどです。
あと課題は明日提出となっています。

お手数掛けますが、ご指導ご鞭撻のほどよろしくお願いいたします。



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


Name: 組木紙織  ..比類無きプログラマー(82,868ポイント)   Date: 2010/05/27(木) 00:44   No:52862     
Title: Re:2進数から16進数への変換の問題    
宣言は以下のような感じの文字列の二進数4桁を入力し16進数を文字として返す関数をつくることができますか?
char biToHex(char in[4]);


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

Name: ru  ..入門者(3,478ポイント)   Date: 2010/05/27(木) 01:05   No:52864     
Title: Re:2進数から16進数への変換の問題    
char input[10],binary[20]={0}; // 初期化

    printf("(3) Hexadecimal expression for (2) : "); 
    for(k=5-1; k>=0; k--)
    {
        printf("%X", binary[k*4+0]<<0 | binary[k*4+1]<<1 | binary[k*4+2]<<2 | binary[k*4+3]<<3);
    }
    printf("\n");

    return 0; 



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

Name: h.k  ..ぴよぴよ(719ポイント)   Date: 2010/05/27(木) 01:45   No:52865     
Title: Re:2進数から16進数への変換の問題    
組木紙織様

ご返信ありがとうございます。
アドバイスを基ににもう少し頑張ってみようと思います!

ru様

ありがとうございます。
参考にさせていただきます^^


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

Name: h.k  ..ぴよぴよ(741ポイント)   Date: 2010/05/27(木) 23:49   No:52915 解決!     
Title: Re:2進数から16進数への変換の問題    
ありがとうございました。
うまくプログラムを作ることができました。



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



Name: ちょんぼ  ..ぴよぴよ(126ポイント)   Date: 2010/05/27(木) 20:25   No:52897       
Title: 無題    
初めまして。
OS  :WinXp
言語:C
環境:Boland BCC になります。

質問なのですが、APIを使わずに与えられたファイルパスの絶対、相対判定を行いたいと思います。
どのようなロジックにすればよいでしょうか?

アドバイスの方お願いします。


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


Name: Ma  ..ハッカー(102,030ポイント)   Date: 2010/05/27(木) 21:52   No:52903     
Title: Re:無題    
:
が入っているかどうか。

じゃ駄目?


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

Name: ちょんぼ  ..ぴよぴよ(189ポイント)   Date: 2010/05/27(木) 22:12   No:52906     
Title: Re:無題    
Maさんはじめまして。

私もそのように考えていました。取りあえずその方向で進めてみます。
ありがとうございます。


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



Name: T.J  ..ぴよぴよ(48ポイント)   Date: 2010/05/27(木) 20:23   No:52896       
Title: [龍神録]9章で右上に動かない…    
龍神録の9章のキーコンフィグで低速移動中に右上に移動しようとしても画像が移動してくれません。
プログラムはページをそのまま写したのでミスの点では無いと思います。
どうしてでしょうか?また、どうすれば治るでしょうか?
教えてください、お願いします.


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


Name: T.J  ..ぴよぴよ(110ポイント)   Date: 2010/05/27(木) 20:31   No:52898     
Title: Re:[龍神録]9章で右上に動かない…    
投稿者からひとつ忘れていたので追記します。
ジョイパッドでは右上は動きますが、キーボードでは動きません。
引き続き回答をよろしくお願いします


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

Name: ひよこ  ..比類無きプログラマー(82,851ポイント)   Date: 2010/05/27(木) 20:43   No:52900     
Title: Re:[龍神録]9章で右上に動かない…    
ジョイパッドでは右上は動きますが、キーボードでは動きません。 
>>これはキーボードが対応していないからではないでしょうか。
>>違うキーボードで試してみるといいかもしれません。


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

Name: T.J  ..ぴよぴよ(150ポイント)   Date: 2010/05/27(木) 20:49   No:52901 解決!     
Title: Re:[龍神録]9章で右上に動かない…    
> >>違うキーボードで試してみるといいかもしれません。
違うUSBキーボードを使ったらできました!!有難うございます!
現在使ってるキーボードが対応してなくて残念ですが妥協します。



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

Name: kai  ..上級者(16,231ポイント)   Date: 2010/05/27(木) 22:11   No:52905     
Title: Re:[龍神録]9章で右上に動かない…    
あ〜、私も昔それに困って質問したことがあります。
確かJustyさんに教えてもらったのですが
パソコンによって、複数のキーが同時に押したときに
読みとれるキー数が決まってるそうですよ。

http://ja.wikipedia.org/wiki/N%E3%82%AD%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC

シフトキー+上キー+右キー、そこにショットキー等が加わると
3キーロールオーバーしてしまい、何かしらのキーが効かなくなってしまってるんだと思います。


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



Name: kai  ..上級者(16,032ポイント)   Date: 2010/05/27(木) 17:44   No:52881       
Title: Log.txtを生成しない方法    
DXライブラリを使ったゲームを作ると
Log.txtが勝手に生成されてしまうのですが、
これを作らない方法があるのならば
やり方を是非教えてください。
よろしくお願いします。


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


Name: ru  ..入門者(3,479ポイント)   Date: 2010/05/27(木) 17:59   No:52882     
Title: Re:Log.txtを生成しない方法    
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R15N14

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

Name: kai  ..上級者(16,041ポイント)   Date: 2010/05/27(木) 18:38   No:52883 解決!     
Title: Re:Log.txtを生成しない方法    
助かりました。ありがとうございます。

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



Name: たち  ..ぴよぴよ(162ポイント)   Date: 2010/05/27(木) 14:35   No:52874       
Title: 二次元配列の初期化    
グローバル変数等で二次元配列を初期化する時に
int MapData[3][3] = {
 {1,1,1},
 {1,1,1},
 {1,1,1}
}
の様にいつも書いております。
最近気がついたのですがこれをメイン関数内で初期化しようとすると
MapData[0][0] = 0のように一個ずつ書かないとエラーになってしまいます。
まとめて書く方法はないのでしょうか?

これでは出来ませんでした。
MapData[][] = {
〜略
}



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


Name: toyo  ..熟練のプログラマー(47,261ポイント)   Date: 2010/05/27(木) 15:04   No:52875     
Title: Re:二次元配列の初期化    
関数内でも宣言時なら出来ますよ
int main(void)
{
    int MapData[3][3] = {
        {1,1,1},
        {1,1,1},
        {1,1,1}
    };
    return 0;
}



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

Name: たいちう  ..比類無きプログラマー(86,659ポイント)   Date: 2010/05/27(木) 15:07   No:52876     
Title: Re:二次元配列の初期化    
#include <iostream>
using namespace std;

int MapData[3][3];

int main() {
    const int data[3][3] = {
        { 1, 2, 3},
        { 4, 5, 6},
        { 7, 8, 9},
    };
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            MapData[i][j] = data[j][i];

    for (int y = 0; y < 3; y++) {
        for (int x = 0; x < 3; x++)
            cout << MapData[x][y] << " ";
        cout << endl;
    }

    return 0;
}

main関数で初期化したい理由が分かりませんが、
私が書くならこんな感じです。
マップデータということなので、代入時に添え字を入れ替えています。


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

Name: toyo  ..熟練のプログラマー(47,302ポイント)   Date: 2010/05/27(木) 15:09   No:52877     
Title: Re:二次元配列の初期化    
よく読んだら宣言時以外でという意味ですかね
それなら無理です
初期化用のデータを準備しておいてコピーするのがいいのでは


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

Name: くりく  ..ぴよぴよ(421ポイント)   Date: 2010/05/27(木) 15:54   No:52878     
Title: Re:二次元配列の初期化    
static int MapData[3][3];
ではだめでしょうか?


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



Name: 山崎  ..熟練のプログラマー(41,451ポイント)   Date: 2010/05/27(木) 09:28   No:52868       
Title: 文字の間を詰めて表示したい    
おはようございます、いつもお世話になっております、山崎です。
今回は、タイトルの通り文字と文字の間の間隔を狭めて表示する方法についてお伺いに参りました。

XPでVisualStudio2010にDXライブラリを使っております。

DrawStringToHandleやDrawStringを使用したときに表示される文字列の文字間隔がちょっと広すぎるので
これをを狭めたいと思い、一文字ずつ表示し文字ごとに表示する座標を指定してみようという方針で
以下のコードを書きました。

しかし実行してみると、指定した文字以降の全ての文字列まで表示されてしまい、
ぐっちゃぐちゃな文字列が表示されてしまいます。
(下のコードは実行結果を見やすくするため、一文字描画しようとするごとにY座標を変えています)

文字と文字の間隔を狭めて表示するには、どのような方法があるでしょうか。

#include "DxLib.h"
#include <string>
using namespace std;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
    ChangeWindowMode( TRUE ) ;
    
    if( DxLib_Init() == -1 )
        return -1 ;

    SetDrawScreen( DX_SCREEN_BACK ) ;
    SetTransColor( 255 , 0 , 255 ) ;

    string ExplanationText="全角で日本語の文字列。";    //文字間を詰めて表示したい文字列
    int FontSize=15;                                    //フォントサイズ
    int FontHandle=CreateFontToHandle(NULL,FontSize,1,DX_FONTTYPE_ANTIALIASING_EDGE);//フォントハンドル

    while( ProcessMessage() == 0)
    {
        clsDx();
        ClsDrawScreen() ;

        for(int i=0;i<ExplanationText.length();i++)    //文字数の分だけ繰り返したい
            //一文字ずつ、場所を指定して描画したい。しかし指定した文字以降の全ての文字列がその都度描画されてしまう
            DrawStringToHandle(50+i*FontSize,100+i*FontSize,&ExplanationText[i],GetColor(255,255,255),FontHandle);
        ScreenFlip();
    }

    DxLib_End() ;
    return 0 ; 
}


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


Name: Ma  ..ハッカー(102,026ポイント)   Date: 2010/05/27(木) 10:48   No:52872     
Title: Re:文字の間を詰めて表示したい    
必ず全角で日本語でいいなら


#include "DxLib.h"
#include <string>
using namespace std;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
    ChangeWindowMode( TRUE ) ;
    
    if( DxLib_Init() == -1 )
        return -1 ;

    SetDrawScreen( DX_SCREEN_BACK ) ;
    SetTransColor( 255 , 0 , 255 ) ;

    string ExplanationText="全角で日本語の文字列。";    //文字間を詰めて表示したい文字列
    int FontSize=15;                                    //フォントサイズ
    int FontHandle=CreateFontToHandle(NULL,FontSize,1,DX_FONTTYPE_ANTIALIASING_EDGE);//フォントハンドル

    while( ProcessMessage() == 0)
    {
        clsDx();
        ClsDrawScreen() ;

        for(int i=0;i<ExplanationText.length();i+=2){    //文字数の分だけ繰り返したい
            //一文字ずつ、場所を指定して描画したい。しかし指定した文字以降の全ての文字列がその都度描画されてしまう
            char output[3] = {ExplanationText[i],ExplanationText[i+1],'\0'};
            DrawStringToHandle(50+i*FontSize,100+i*FontSize,output,GetColor(255,255,255),FontHandle);
       }
        ScreenFlip();
    }

    DxLib_End() ;
    return 0 ; 
}



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

Name: 山崎  ..熟練のプログラマー(41,512ポイント)   Date: 2010/05/27(木) 10:55   No:52873 解決!     
Title: Re:文字の間を詰めて表示したい    
Maさん
ご返信誠にありがとうございます。
なるほど、終端コードを一文字ごとにいれるのですね。いや勉強になりました。
おかげさまで解決できました、このたびは本当にありがとうございました。


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



Name: AS  ..中級者(9,730ポイント)   Date: 2010/05/26(水) 16:24   No:52837       
Title: 音楽ロード時間の短縮    
音楽のロード時間が長くて困っています。
普通のmp3ファイルで時間も特に長くなく、長いものでも3分程度です。

しかし、LoadSoundMemでロードすると1,2秒ですが処理が止まってしまいます。
処理が止まるのはごく当然のことかと思いますが、この時間がやはりストレスになります。

LoadSoundMemで起動時にでも全曲ロードしておけば、その後ロードすることも無くなり、処理が止まることもなくなりますが、
現時点で画像もろもろと一曲ロードしただけで、windowsタスクマネージャ(delete,alt,ctrl同時押しで出るやつ)でゲームのメモリ使用量を見ると、
その時点で既に77MBほど使用しています。

一曲ロードしただけでそれなりにメモリを食うこともタスクマネージャでわかりましたし、
全曲あわせると2,30曲にはなると思いますので、起動時に全てロードするというのは、ちょっと無いかと思います。

以前ここの掲示板でメモリについての質問をさせていただいたのですが、
その際管理人様が「自分のゲームはメモリをかなり食ってしまう」というような書き込みをされていました。
そこで龍神録のメモリ使用量を見てみると、それでも7,80MB程度でした。

私は一曲ロードしただけで77MBですし、今後まだ起動時にロードする画像は増える予定です。
なので曲を複数ロードしておくのは、避けたいと思っています。
が…ロード時間が…というように悩んでいるわけです。

ロードしながら再生というストリームという言葉も聴きますし、なんとかロード時間を短くする方法はないか、お聞きしたいです。
そんな方法はなく、やはり自分でロードのタイミングなどを工夫するしかないのでしょうか?


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


Name: ru  ..入門者(3,210ポイント)   Date: 2010/05/26(水) 16:39   No:52838     
Title: Re:音楽ロード時間の短縮    
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R15N25

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

Name: AS  ..中級者(9,968ポイント)   Date: 2010/05/26(水) 19:28   No:52847     
Title: Re:音楽ロード時間の短縮    
こ、こんなのがあったんですか…!
気付かずに申し訳ないです…

ところで、何も書かずにLoadSoundMemを使用した場合は(今までの自分)
デフォルトであるDX_SOUNDDATATYPE_MEMNOPRESSが適用されているということでしょうか?

もし、あるmp3ファイルを読み込んだ後、通常通りのLoadSoundMemの動作に戻って欲しい場合は

int handle;
SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);
handle = LoadSoundMem("kyoku.mp3");
SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS);

と書けばよいということですか?


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

Name: ru  ..入門者(3,313ポイント)   Date: 2010/05/26(水) 19:32   No:52849     
Title: Re:音楽ロード時間の短縮    
>ところで、何も書かずにLoadSoundMemを使用した場合は(今までの自分) 
>デフォルトであるDX_SOUNDDATATYPE_MEMNOPRESSが適用されているということでしょうか? 
>もし、あるmp3ファイルを読み込んだ後、通常通りのLoadSoundMemの動作に戻って欲しい場合は 
>と書けばよいということですか?
そうです




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

Name: AS  ..中級者(10,010ポイント)   Date: 2010/05/27(木) 10:35   No:52871 解決!     
Title: Re:音楽ロード時間の短縮    
ruさん、ありがとうございます。
実装してみたところ、かなり改善が見られました。確かに早かったです。
とても助かりましたm(__)m
ありがとうございました。


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



Name: wow  ..ぴよぴよ(619ポイント)   Date: 2010/05/25(火) 18:58   No:52766       
Title: 騎士巡回    
騎士巡回のプログラムを学んでいる物です。
下のプログラムによって経路数と一番内側のif文の評価回数を表示したいのですが,うまくできません><
a,b,cを使って考えたのですが、どのようにしたらよろしいでしょうか??
教えてください><

#include<stdio.h>
#define M 8  //板の大きさ
#define N 8  
int array[N][N];  //到達を判別
int move[M][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{1,-2},{2,-1}};
int n_a=0;

void try(int x,int y,int a_move){  //x,yからスタートする
   int n,nx,ny,i;
   long  int a,b,c;  //カウント変数
   a=0;
   b=0;
   for(i=0;i<M;i++){
     nx=x+move[i][0];
     ny=y+move[i][1];
     if(nx<0 || nx>=N) continue;  //板内にあるか判断
     if(ny<0 || ny>=N) continue;  //板内にあるか判断
     if(array[nx][ny]==0){
       array[nx][ny]=a_move;
       if(a_move==n*n){
         if(c<100000000000000) c++; 
         if(b<100000){
           c=0;
           b++;
         }
         else{
           c=0;
           b=0;
           a++;
         }
         printf(" %d    %d    %d\n",a,b,c);  //
       }
       else{
         try(nx,ny,a_move+1);  //バックトラック
       }
       array[nx][ny]=0;
     }
   }
}

int main(){
   int i,j;
   for(i=0;i<N;i++){
     for(i=0;i<N;i++){
        array[i][j]=0;
        array[0][0]=1;
        try(0,0,2);  //0,0からスタート
        return 0;
     } 
   }
}


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


Name: box  ..ハッカー(153,435ポイント)   Date: 2010/05/25(火) 22:14   No:52788     
Title: Re:騎士巡回    
さしあたり、「うまくできない」と判断した根拠を示してください。

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

Name: wow  ..ぴよぴよ(747ポイント)   Date: 2010/05/25(火) 22:41   No:52795     
Title: Re:騎士巡回    
int型を超える桁数に対して、プログラム上どのように工夫して桁あふれがないように、表示できるでしょうか??
全解探索だと8の63乗ほど数値が大きくなってしまうため、それをa,b,cを使ってあらわそうと思ったのですが、どのようにしたらよろしいでしょうか??
お願いします。


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

Name: box  ..ハッカー(153,499ポイント)   Date: 2010/05/26(水) 22:27   No:52856     
Title: Re:騎士巡回    
a, b, cの意味合いは何ですか?
ご自分で定義された変数ですから、何のために使っているか
日本語で説明できるはずですね。


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

Name: たいちう  ..比類無きプログラマー(86,477ポイント)   Date: 2010/05/27(木) 09:11   No:52867     
Title: Re:騎士巡回    
> 騎士巡回のプログラムを学んでいる物です。

質問はif文の評価回数ですが、騎士巡回プログラムの完成が最終目標ですよね?
これはどんなルールですか?
チェス盤をナイトが巡回するというのは分かるけど、
巡回ルートを1つ見つければ良い?全巡回ルートを見つけたい?

上記の目的に対して、wowさんはどのような方針(アルゴリズム)の
プログラムを作ろうとしているのですか?
if文の評価回数を知りたいのは何故?


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



Name: 紙飛行機  ..ぴよぴよ(129ポイント)   Date: 2010/05/26(水) 09:16   No:52815       
Title: 輝度を変えて描画する関数    
輝度を変えて描画する関数を作ろうと思ってます。
ユーザーが指定したBrightから最初にセットする
輝度の値を拾いたいのですがどの様にすれば拾ってこれるのでしょうか?

Brightは0xffffffのようにセットし2桁でRGBを管理するようにしたいです。

void DrawCenterBright(int x,int y,int GrHandle,int Bright, int Alpha,bool Turn){
    SetDrawBright(128,255,255);
     // 描画処理
    SetDrawBright(255,255,255);
}


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


Name: たいちう  ..比類無きプログラマー(86,104ポイント)   Date: 2010/05/26(水) 09:27   No:52816     
Title: Re:輝度を変えて描画する関数    
これのことですか?

http://homepage2.nifty.com/natupaji/temp/DxLib.h
extern int GetDrawBright( int *Red, int *Green, int *Blue ) ; // 描画輝度を取得する


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

Name: 紙飛行機  ..ぴよぴよ(170ポイント)   Date: 2010/05/26(水) 10:37   No:52818     
Title: Re:輝度を変えて描画する関数    
すいません。
現在の輝度を拾ってくるのではなく
Brightに0xffffffと値を渡すと
ff,ff,ffのパラメータを見るような仕様にしたいです。


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

Name: たいちう  ..比類無きプログラマー(86,145ポイント)   Date: 2010/05/26(水) 10:51   No:52820     
Title: Re:輝度を変えて描画する関数    
それでは、こういうことですか?
int bright = 0x123456;
int br = bright >> 16;
int bg = (bright >> 8) & 0xff;
int bb = bright & 0xff;
printf("%02x, %02x, %02x\n", br, bg, bb);


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

Name: たいちう  ..比類無きプログラマー(86,176ポイント)   Date: 2010/05/26(水) 10:57   No:52821     
Title: Re:輝度を変えて描画する関数    
一応逆も。
int bright2 = br << 16 | bg << 8 | bb;
printf("0x%06x\n", bright2);

既に用意されているマクロを使う方法もあります。
(私の書いた例とはRGBの順番が逆になることに注意)
#define RGB(r,g,b)          ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
#define GetRValue(rgb)      ((BYTE)(rgb))
#define GetGValue(rgb)      ((BYTE)(((WORD)(rgb)) >> 8))
#define GetBValue(rgb)      ((BYTE)((rgb)>>16))


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

Name: toyo  ..熟練のプログラマー(47,158ポイント)   Date: 2010/05/26(水) 11:03   No:52822     
Title: Re:輝度を変えて描画する関数    
luminance = ( 0.298912 * r + 0.586611 * g + 0.114478 * b );
を輝度とするとRGBから輝度へは変換できますが輝度からRGBへは一通りには求められません
(未知数が3個で式が1つしかないので)


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

Name: たいちう  ..比類無きプログラマー(86,222ポイント)   Date: 2010/05/26(水) 11:13   No:52824     
Title: Re:輝度を変えて描画する関数    
> luminance = ( 0.298912 * r + 0.586611 * g + 0.114478 * b );
> を輝度とするとRGBから輝度へは変換できますが輝度からRGBへは一通りには求められません

その輝度とSetDrawBrightで設定する輝度は違うものと思いますが、
紙飛行機さんが(もしかしたら私も?)混同している可能性はありますね。


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

Name: 紙飛行機  ..ぴよぴよ(348ポイント)   Date: 2010/05/26(水) 18:05   No:52839     
Title: Re:輝度を変えて描画する関数    
みなさま、色々な回答ありがとうございます。

やりたかったことはたいちう様の

int bright = 0x123456; 
int br = bright >> 16; 
int bg = (bright >> 8) & 0xff; 
int bb = bright & 0xff; 
printf("%02x, %02x, %02x\n", br, bg, bb);

です。
改修したところ問題なく動きました。
ありがとうございます。

この>>や&の意味が良くわからないのですが
どういうことなのでしょうか?
調べてみたらシフト演算?とand?という単語を見つけたのですが
理解できませんでした。


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

Name: たいちう  ..比類無きプログラマー(86,357ポイント)   Date: 2010/05/27(木) 08:51   No:52866     
Title: Re:輝度を変えて描画する関数    
http://www9.plala.or.jp/sgwr-t/c/sec14.html

これで分からなければ、再度具体的に質問してください。


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



Name: shiro4ao  ..かけだし(2,200ポイント)   Date: 2010/05/24(月) 23:27   No:52690       
Title: 仲介DLLによるlisten関数の書き換え    
仲介DLLを作って、wsock32.dllのlistenが呼ばれたら、
特定のサーバーに接続するようにしたいです。
listexp2.exeにより、仲介DLLを作って、VC++2008で
listenを書き換えようとしましたが、

1>_dwsock32.dll_dummy.obj : error LNK2019: 未解決の外部シンボル _WSAGetLastError@0 が関数 "void __stdcall d_listen(int,int)" (?d_listen@@YGXHH@Z) で参照されました。
1>_dwsock32.dll_dummy.obj : error LNK2019: 未解決の外部シンボル _connect@12 が関数 "void __stdcall d_listen(int,int)" (?d_listen@@YGXHH@Z) で参照されました。
1>_dwsock32.dll_dummy.obj : error LNK2019: 未解決の外部シンボル _closesocket@4 が関数 "void __stdcall d_listen(int,int)" (?d_listen@@YGXHH@Z) で参照されました。
1>_dwsock32.dll_dummy.obj : error LNK2019: 未解決の外部シンボル _WSAAsyncSelect@16 が関数 "void __stdcall d_listen(int,int)" (?d_listen@@YGXHH@Z) で参照されました。
1>_dwsock32.dll_dummy.obj : error LNK2019: 未解決の外部シンボル _gethostbyname@4 が関数 "void __stdcall d_listen(int,int)" (?d_listen@@YGXHH@Z) で参照されました。
1>_dwsock32.dll_dummy.obj : error LNK2019: 未解決の外部シンボル _htons@4 が関数 "void __stdcall d_listen(int,int)" (?d_listen@@YGXHH@Z) で参照されました。
1>_dwsock32.dll_dummy.obj : error LNK2019: 未解決の外部シンボル _socket@12 が関数 "void __stdcall d_listen(int,int)" (?d_listen@@YGXHH@Z) で参照されました。

とのエラーがでました、

以下がVC++2008のプロジェクトのうち改変した部分ですです。

==========_dwsock32_dummy.cpp==============================================
// _dwsock32.dll_dummy.cpp : デフォルトの処理を行うエクスポート関数
//

#include <windows.h>

#include "_dwsock32.dll.h"

__declspec( naked ) void WINAPI d_accept() { _asm{ jmp p_accept } }
__declspec( naked ) void WINAPI d_bind() { _asm{ jmp p_bind } }
__declspec( naked ) void WINAPI d_closesocket() { _asm{ jmp p_closesocket } }
__declspec( naked ) void WINAPI d_connect() { _asm{ jmp p_connect } }
__declspec( naked ) void WINAPI d_getpeername() { _asm{ jmp p_getpeername } }
__declspec( naked ) void WINAPI d_getsockname() { _asm{ jmp p_getsockname } }
__declspec( naked ) void WINAPI d_getsockopt() { _asm{ jmp p_getsockopt } }
__declspec( naked ) void WINAPI d_htonl() { _asm{ jmp p_htonl } }
__declspec( naked ) void WINAPI d_htons() { _asm{ jmp p_htons } }
__declspec( naked ) void WINAPI d_inet_addr() { _asm{ jmp p_inet_addr } }
__declspec( naked ) void WINAPI d_inet_ntoa() { _asm{ jmp p_inet_ntoa } }
__declspec( naked ) void WINAPI d_ioctlsocket() { _asm{ jmp p_ioctlsocket } }
__declspec( dllexport ) void WINAPI d_listen(int sockfd, int backlog);
//↑ここを書き換えた
__declspec( naked ) void WINAPI d_listen() { _asm{ jmp p_listen } }
__declspec( naked ) void WINAPI d_ntohl() { _asm{ jmp p_ntohl } }
__declspec( naked ) void WINAPI d_ntohs() { _asm{ jmp p_ntohs } }
〜〜〜中略〜〜〜〜〜
__declspec( naked ) void WINAPI d_NONAME1138() { _asm{ jmp p_NONAME1138 } }
__declspec( naked ) void WINAPI d_TransmitFile() { _asm{ jmp p_TransmitFile } }
__declspec( naked ) void WINAPI d_AcceptEx() { _asm{ jmp p_AcceptEx } }
__declspec( naked ) void WINAPI d_GetAcceptExSockaddrs() { _asm{ jmp p_GetAcceptExSockaddrs } }


__declspec( dllexport ) void WINAPI d_listen(int sockfd, int backlog){



//    SendMessage(hWnd,IDB_CONNECT,0,0);
#define WM_SOCKET     (WM_USER+1)                       //ソケット用メッセージ
unsigned short PORT=12345;
HWND hWnd;
HOSTENT *phe;                                           //HOSTENT構造体
SOCKET sock    = INVALID_SOCKET;                        //ソケット
SOCKET sv_sock = INVALID_SOCKET;                        //サーバ用ソケット
    SOCKADDR_IN sv_sin;                                 //SOCKADDR_IN構造体

    SOCKADDR_IN cl_sin;                                     //SOCKADDR_IN構造体

    //ソケットを開く
    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);       //ソケット作成失敗

    memset(&cl_sin, 0x00, sizeof(cl_sin));                  //構造体初期化
    cl_sin.sin_family = AF_INET;                            //インターネット
    cl_sin.sin_port   = htons(PORT);                        //ポート番号指定

     phe=gethostbyname("localhost");
    memcpy(&cl_sin.sin_addr, phe->h_addr, phe->h_length);   //アドレス値格納

    //非同期モード (接続)
    if(WSAAsyncSelect(sock, hWnd, WM_SOCKET, FD_CONNECT)==SOCKET_ERROR){
        closesocket(sock);
        sock=INVALID_SOCKET;
        MessageBox(hWnd, "WSAAsyncSelect() failed", "Error",
            MB_OK|MB_ICONEXCLAMATION);
    }

    //接続処理
    if(connect(sock, (LPSOCKADDR)&cl_sin, sizeof(cl_sin))==SOCKET_ERROR){
        if(WSAGetLastError()!=WSAEWOULDBLOCK){
            closesocket(sock);
            sock=INVALID_SOCKET;
            MessageBox(hWnd, "connect() failed", "Error",
                MB_OK|MB_ICONEXCLAMATION);
        }
    }



}
==========ここまで==============================================================

コレで大丈夫だと思ったのですが・・・・

どこがまずいのでしょう。


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


Name: ベリ工  ..入門者(3,911ポイント)   Date: 2010/05/25(火) 01:08   No:52704     
Title: Re:仲介DLLによるlisten関数の書き換え    
以下を試してどうなりますか?

1:*.defファイルを定義してみる。
2:呼び出し規約がexeとdll側で一致しているか?(両者共に__stdcallか?)
3:dll側のコード生成のランタイムライブラリは適切か?


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

Name: nishi  ..ぴよぴよ(262ポイント)   Date: 2010/05/25(火) 07:06   No:52720     
Title: Re:仲介DLLによるlisten関数の書き換え    
単なるリンクエラーのように見受けられます。
#pragma comment(lib, "ws2_32.lib")
を追加してみてください。


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

Name: ベリ工  ..入門者(4,345ポイント)   Date: 2010/05/25(火) 07:23   No:52722     
Title: Re:仲介DLLによるlisten関数の書き換え    
おおっ!ほんとだ!!
リンクエラーをよく見るとwinsockの関数が引っかかっていますね!!
てっきり自作関数と思いこんでしまった・・・orz

nishiさんの回答で正解でしょうね。
適切なwinsockのライブラリをリンクすると解決するでしょう。


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

Name: shiro4ao  ..入門者(2,547ポイント)   Date: 2010/05/25(火) 10:49   No:52738     
Title: Re:仲介DLLによるlisten関数の書き換え    
!!
ベリエ様、nishi様ありがとうございます!リンクできました!
・・・が、実行してみると、
---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Error!
Program: C:\dlltest\chat.exe
Module: C:\dlltest\XSOCK32.DLL
File: 
Run-Time Check Failure #3 - The variable 'hWnd' is being used without being initialized.
(Press Retry to debug the application)
---------------------------
中止(A)   再試行(R)   無視(I)   
---------------------------

というダイアログボックスが出てきました、どうやら、
意味のない「hWnd」なるものがあったようです・・・

listen()を書き換え、connect()にするにはDLLを呼び出したプログラム内のソケット(sock)と
親ウィンドウハンドル(hWnd)をDLL内の処理に渡さないといけないのですが、
DLLへどうやって教えてあげればいいのでしょう…

よくわかっていなくて申し訳ないです…


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

Name: softya [URL]  ..ハッカー(167,229ポイント)   Date: 2010/05/25(火) 11:19   No:52740     
Title: Re:仲介DLLによるlisten関数の書き換え    
WSAAsyncSelect自体がウィンドウを必要とする関数です。
現状、hWndに何も値が入っていない様にお見受けましす。

Win32APIを使ったウィンドウは作成出来ますか?
それが出来ていないなら、まずウィンドウアプリの作り方から勉強すべきだと思います。
http://wisdom.sakura.ne.jp/system/winapi/index.html


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

Name: shiro4ao  ..入門者(2,823ポイント)   Date: 2010/05/25(火) 12:21   No:52742     
Title: Re:仲介DLLによるlisten関数の書き換え    
状況の説明がまずかったと思います…すみません
GUIで非同期チャットソフト(以下chat1.exe)を作りました。
ところが、chat1.exeにはサーバー機能しかつけていなかったため
クライアント機能が欲しくなりました、ソースを書き換えてもいい
のですが、DLLインジェクションの勉強も兼ねて、
chat1.exeが呼び出すlisten()関数を書き換えて
無理やり、クライアントにして、サーバー機能のみのchat2.exeに接続
してしまおう、と考えました。
この方法がそもそもDLLインジェクションでは無理なのでしょうか?

DLL内の偽の(=書き換えた)listen()にDLLを呼び出したプログラムの
・ウィンドウハンドル
・接続用ソケット
・ポート番号
・接続先ホスト名
をわたし、ソケットを返すような方法ができるのでしょうか…?

それとも根本からおかしいのでしょうか?


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

Name: softya [URL]  ..ハッカー(167,480ポイント)   Date: 2010/05/25(火) 12:37   No:52744     
Title: Re:仲介DLLによるlisten関数の書き換え    
>DLL内の偽の(=書き換えた)listen()にDLLを呼び出したプログラムの
>・ウィンドウハンドル
>・接続用ソケット
>・ポート番号
>・接続先ホスト名
>をわたし、ソケットを返すような方法ができるのでしょうか…? 


DLL側には情報を受け取る専用関数を用意して呼び出し元のコードを修正してDLL側に情報を渡してください。DLLインジェクションとしては、中途半端になる気がしますが。

それと心配なのは、ウィンドウメッセージがちゃんと処理されるかです。そこら辺は確認をお願いします。




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

Name: shiro4ao  ..入門者(2,888ポイント)   Date: 2010/05/25(火) 13:50   No:52746     
Title: Re:仲介DLLによるlisten関数の書き換え    
ウィンドウハンドルは名前で探せばなんとかなるし、
ポート番号やホスト名はDLLのほうで決めてしまってもいいですが
ソケットだけは、呼び出し元に返してあげないといけないので、
やっぱり、呼び出し元のコードを書き換えるしかないでしょうか・・・・


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

Name: softya [URL]  ..ハッカー(167,612ポイント)   Date: 2010/05/25(火) 14:28   No:52749     
Title: Re:仲介DLLによるlisten関数の書き換え    
>ウィンドウハンドルは名前で探せばなんとかなるし、 
そこまでするとそのDLLインジェクションは汎用性が皆無になります。
そうすることに意味があるんでしょうか?

>ソケットだけは、呼び出し元に返してあげないといけないので、 
listen()のパラメータにある元のソケットを使ってはいけなんでしょうか?
bind()やらaccept()もインジェクションしてしまえば、ごまかせる気がしますけどね。
そうすれば、WSAAsyncSelectも不要になりません?

サーバー側のコードを見てないので勘ですけどね。



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

Name: shiro4ao  ..入門者(3,611ポイント)   Date: 2010/05/25(火) 20:51   No:52779     
Title: Re:仲介DLLによるlisten関数の書き換え    
>listen()のパラメータにある元のソケットを使ってはいけなんでしょうか? 
そうですね、このパラメータを使えばよかったのですね。

以下が変更した偽DLL
==================偽wsock32.dll==========================
__declspec( dllexport ) void WINAPI d_listen(int sock, int backlog)
    unsigned short PORT=5555;
    HOSTENT *phe;                                           //HOSTENT構造体
    SOCKADDR_IN cl_sin;                                     //SOCKADDR_IN構造体

    //ソケットを開く
    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);       //ソケット作成失敗

    memset(&cl_sin, 0x00, sizeof(cl_sin));                  //構造体初期化
    cl_sin.sin_family = AF_INET;                            //インターネット
    cl_sin.sin_port   = htons(PORT);                        //ポート番号指定
    phe=gethostbyname("localhost");                        //アドレス取得
    memcpy(&cl_sin.sin_addr, phe->h_addr, phe->h_length);   //アドレス値格納
/*
    //非同期モード (接続)
    if(WSAAsyncSelect(sock, hWnd, WM_SOCKET, FD_CONNECT)==SOCKET_ERROR){
        closesocket(sock);
        sock=INVALID_SOCKET;
        MessageBox(hWnd, "WSAAsyncSelect() failed", "Error",
            MB_OK|MB_ICONEXCLAMATION);
    }
*/
    //接続処理
    connect(sock, (LPSOCKADDR)&cl_sin, sizeof(cl_sin));
}

=====================ここまで=======================================

ここからがプログラム本体の接続待ちの関数です。
====================chat1.cpp====================================
int SockAccept(HWND hWnd,unsigned short PORT)
{
    SOCKADDR_IN sv_sin;                   
    sv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    memset(&sv_sin, 0x00, sizeof(sv_sin));          
    sv_sin.sin_family      = AF_INET;                
    sv_sin.sin_port        = htons(PORT);           
    sv_sin.sin_addr.s_addr = htonl(INADDR_ANY);     
    bind(sv_sock, (LPSOCKADDR)&sv_sin, sizeof(sv_sin));
    listen(sv_sock, 1);                                    //これが偽のlisten()になる
    WSAAsyncSelect(sv_sock, hWnd, WM_SOCKET, FD_ACCEPT);
    return 0;
}
====================ここまで============================================

としたのですが、なぜか、WSAAsyncSelect()がうまく行っていないのか、
接続完了のメッセージなどが飛んでこないようです。
どこがまずいのでしょう・・・


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

Name: softya [URL]  ..ハッカー(168,047ポイント)   Date: 2010/05/25(火) 21:53   No:52783     
Title: Re:仲介DLLによるlisten関数の書き換え    
>としたのですが、なぜか、 WSAAsyncSelect()がうまく行っていないのか、
>接続完了のメッセージなどが飛んでこないようです。
>どこがまずいのでしょう・・・

順番的にlisten前にWSAAsyncSelecでは?
あとDLL側でsocketを開いちゃまずいですよ。


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

Name: shiro4ao  ..入門者(3,863ポイント)   Date: 2010/05/27(木) 00:19   No:52861     
Title: Re:仲介DLLによるlisten関数の書き換え    
>順番的にlisten前に WSAAsyncSelecでは?
chat1.exeのソースを書き換えておきました。

>あとDLL側でsocketを開いちゃまずいですよ。
listen()でもらったソケットを使ってconnect()で接続してみました。


listen()を偽DLL内で書き換えconect()を使って接続
listen()に渡されるのは接続待ち用のサーバーソケットなので
accept()を書き換え、受け取ったサーバーソケットを何もせずreturnするようにする
これにより、クライアントソケットに接続に使ったソケットで通信できるはず、

としたのですが、WSAAsyncSelect()が、FD_ACCEPTを発行してくれないのです
(接続しているのだから)当然と言えば当然ですが・・・・
解決法としては
「DLLないでWSAAsyncSelect()を書き換え、FD_CONNECTのときには
 FD_ACCEPTにして発行してもらうようにする」
という強引な方法を思いつきました、
ところが、どう書き換えていいのかわかりません。

それとも、こんなバカな方法でなくてもいいのでしょうか?


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



Name: やっくん  ..プログラマー(27,740ポイント)   Date: 2010/05/26(水) 06:47   No:52808       
Title: 2Dエフェクトツール作成(その2)    
http://www.play21.jp/board/formz.cgi?action=res&resno=51960&page=&lognum=161&id=dixq&rln=519601274823274
こちらの続きです。

形がおおまかに完成しました。
あとは細かいものを追加していこうかと思っております。

2Dエフェクトツール(その5)ニコニコ動画
http://www.nicovideo.jp/watch/sm10844751?mypage_nicorepo

今度はこれを用い、実際にエフェクトを作っていってみて、不便な点を改善していきたいと思います。 

↓↓現在での最終的な形↓↓
使用言語:CとC++
開発環境:VC++2008express edition(DXライブラリ使用)

・メニューモード、描画モードの2つのモードに切り替え可

<メニューモード>
・描画モード切り替え
・すでに完成したエフェクトの確認

<描画モード>
・マウスによるフリーハンド描画
・画像の追加、削除(透過設定可。同時に複数の画像を使えるがタイミングよく切り替わることしかできない)
・目印設定、削除(任意の座標に目印を付ける)
・描画途中確認(現在までの描画を画像を用い確認、ただし保存はされない)
・ファイルへ保存
・ファイルへ保存した所へ戻る(描画の削除機能)

・出力ファイルの形式はテキスト形式で、1行目に使う画像枚数、2行目〜N行目までは画像への相対パスと透過設定を1行に1画像分記述。N行目以降は使用する画像Noと描画座標を1行に一描画分記述。

指摘があったので追記。
どのような機能を追加すれば編集がしやすいか、変更したら良い点などのアドバイスをお願いします。 編集済み


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


Name: Ma  ..ハッカー(101,211ポイント)   Date: 2010/05/26(水) 07:19   No:52809     
Title: Re:2Dエフェクトツール作成(その2)    
で、質問内容は何でしょう?
雑談ならば、タイトルに雑談とつけるといいとおもいますよ。


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

Name: Ma  ..ハッカー(100,572ポイント)   Date: 2010/05/26(水) 07:33   No:52810     
Title: Re:2Dエフェクトツール作成(その2)    
動画を見て改善するといいと思った点。
・画像の複数ファイル同時選択を可能にすること。→毎回選択はかなり面倒です。
・タイムラインを使う操作。(表示、キー編集、キー作成 等)→細かな編集。FLASHのような感覚。
・↓に表示されるアイコン(さむね)はサイズを可変にする。→大量の画像に対応しやすくなります。


複数ファイル選択はすぐできるかな。
タイムラインは、あれですよ。要はフラッシュです。
これは大きな仕様変更やらいろいろ大変な作業が必要なので、自分だけ(あるいは友達数人)が使用するなら作る必要はありません。
直線な動き、かくかくした動きなどはマウスでのリアルタイム記録では再現が困難ですが、
キーフレームのようなことができれば可能になります。


私が作るなら、と言うアドバイス

画像のさむねを小さくしたって現状のスペースでは画像の表示数には限度があります。
ですので、私ならタブ方式にするか、あるいはフォルダ方式(ツリー)にします。
あるいは、プログラムフォルダ内に画像フォルダを作って、そのフォルダ内のツリーを
エクスプローラーのようにプログラム内で表示、フォルダを選択すると画像一覧がスクロールバーと一緒に
表示される。等。
毎フレーム画像が変わるようなアニメを作るなら欠かせません。
って、これ作るんだったらウィンドウズプログラミング(?) の方が楽かも(笑

この時、同時に複数選択とドラッグ&ドロップで、アニメができるようになっているといいでしょう。
(現状では1フレーム1フレームドラッグ&ドロップしていたようですが。)



たくさん言ってしまいましたが、全部やろうと思わずに、少しづつ頑張ってくださいね。
私も、こういうの作るの好きですよ^^ 編集済み


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

Name: やっくん  ..プログラマー(27,775ポイント)   Date: 2010/05/26(水) 13:58   No:52832     
Title: Re:2Dエフェクトツール作成(その2)    
Maさん、アドバイスありがとうございます(^^

スレの目的としては皆さんからアドバイスを頂くことです。
書き忘れてたので追記しました。

>画像の複数ファイル同時選択を可能にすること。→毎回選択はかなり面倒です。
こちらの処理は一度、友達に操作をしてもらったときにも指摘されました。
ファイルは1度に1つしか開けないものと思い諦めてました・・・(^^;
これはファイルを開くウィンドウを開いたときに、「1枚ファイルを"開く"と、連続して"開く"ことができる」ということでしょうか?
それとも「複数のファイルを選択して、"開く"などのボタンを押せば開くことができる」ということでしょうか。
ファイルを開く処理部分については、私がWindowsプログラミングをできないため人のソースを使わせてもらっております。


>タイムラインを使う操作。(表示、キー編集、キー作成 等)→細かな編集。FLASHのような感覚。
キーフレームの考え方はキーとなる静止画像からの差分で次を表していくというものですよね?
ここで置き換えるとキーとなる座標を設定し、そこからの差分で画像を描画していくということでしょうか。
これをどのように利用すればタイムラインでの編集が可能となるのでしょうか。


>↓に表示されるアイコン(さむね)はサイズを可変にする。→大量の画像に対応しやすくなります。
現状は「画像は同時選択は10枚まで」と割り切って製作しました。
しかし、これ以上同時使用する場合もあるかもしれません。
現在、ツールの下枠に表示されてるアイコンは私が考えた末のギリギリの描画方法ですが改良の余地が十分ありそうですね。


>この時、同時に複数選択とドラッグ&ドロップで、アニメができるようになっているといいでしょう。
>(現状では1フレーム1フレームドラッグ&ドロップしていたようですが。) 
現状は複数の画像を選択し、マウスで描画(マウスを押下状態)をすると、1フレーム毎に画像が切り替わるような仕様を取っております。(アニメのように)
動画の最後の部分で1フレーム毎に1枚1枚画像を描画していたのはこの仕様のためです。
最後の部分では画像をループさせたくないため1枚1枚使用しました。


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

Name: Ma  ..ハッカー(100,944ポイント)   Date: 2010/05/26(水) 23:28   No:52858     
Title: Re:2Dエフェクトツール作成(その2)    
>「複数のファイルを選択して、"開く"などのボタンを押せば開くことができる」
こちらです。
引数をいじればできたような。。。できれば調べてみてください。

*追記
1ファイル選択時に連続オプション(デフォルトON)をつけて、ONならファイル名による連続ファイルの検索をするといいかも。
見つかったら全部順番に取り込む。


>これをどのように利用すればタイムラインでの編集が可能となるのでしょうか。 
差分って何をさすのかよくわかりませんが、FLASHを使ったことはありますか?
あれのように、キーフレーム間の間の画像の動きはプログラム側が自動補完します。
単純にベクトルで時間がどれだけたったから何パーセントの位置だなって計算すればOKです。
ベクトルでなくても、単純に点と点との間で何パーセントの位置って計算すればOKです。


>最後の部分では画像をループさせたくないため1枚1枚使用しました。
では現在の仕様では無限ループですか?
ともかく、複数選択でクリックするとかならずループするのはおかしいですからラジオボタンなどをつけてオプションをつけてみては? 編集済み


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



Name:  ..ぴよぴよ(126ポイント)   Date: 2010/05/26(水) 08:31   No:52812       
Title: 画面背景のループ    
画面背景のループ素材をループさせて見えるようにしたいです。
画像自体ではループできるようになっております。
画像のサイズは1024*512です。 読み込みも同じサイズ

int Sx = int(Cam.Px/2);
if(Cam.Px/2 >= 1024 - 640) Sx = Cam.Px/2 - 1024;
DrawRectGraph( 0, 0, Sx, 0, 640, 480, Bg, TRUE, FALSE ) ;
Cam.Pxは左右キーで増えたり減ったりします。

このように書いているのですがループが急に切れてしまいます。
マイナスを使うような値は駄目なのでしょうか?


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


Name: softya [URL]  ..ハッカー(168,998ポイント)   Date: 2010/05/26(水) 13:36   No:52829     
Title: Re:画面背景のループ    
Sx座標を表示してみたら分かりますよ。

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

Name:  ..ぴよぴよ(211ポイント)   Date: 2010/05/26(水) 18:16   No:52840     
Title: Re:画面背景のループ    
softya様
ありがとうございます。
if(Cam.Px/2 >= 1024 - 640) Sx = Cam.Px/2 - 384;//384; 
のようにしたのですが切れるのは直ったのですが切り替わる瞬間に気になってしまいます。
画像は1024*512ですが512×512の画像が2枚連続して繋がっているものです。
画像が悪いのでしょうか?


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

Name: softya [URL]  ..ハッカー(169,205ポイント)   Date: 2010/05/26(水) 18:22   No:52841     
Title: Re:画面背景のループ    
画面サイズと背景サイズが有っていないためだと思われます。
画面サイズを512にするか、背景を640にするかどちらかの対策が必要になるでしょう。


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

Name:  ..ぴよぴよ(259ポイント)   Date: 2010/05/26(水) 18:47   No:52842     
Title: Re:画面背景のループ    
画像サイズを640*480にしたのですがこれをどの様にすればループさせることが出来るのでしょうか?
今回の様な処理をしたことがないのでできるか不安になってきました・・・。


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

Name: softya [URL]  ..ハッカー(169,325ポイント)   Date: 2010/05/26(水) 19:04   No:52846     
Title: Re:画面背景のループ    
>画像サイズを640*480にしたのですがこれをどの様にすればループさせることが出来るのでしょうか?

つながって見えるようになっている前提ですが、2枚を横に並べて表示します。
2枚一組を1つの画像だと思って同じ処理をすれば良いので、プログラム的には大差ないですよ。


int Sx = int(Cam.Px/2);
if(Cam.Px/2 >= (640*2) - 640) Sx = Cam.Px/2 - 640;
DrawGraph( Sx-640, 0, Bg, TRUE ) ;
DrawGraph( Sx, 0, Bg, TRUE ) ;


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

Name:  ..ぴよぴよ(346ポイント)   Date: 2010/05/26(水) 20:49   No:52852     
Title: Re:画面背景のループ    
背景のループが出来ました。
ただ問題が御座いまして背景のループ方向が逆?になってしまいました。
Cam.pxの値は右に行くほど+になっております。
*-1等してみたのですがどれも画面が途切れてしまったりと期待の行く結果を得ることが出来ません・・・。


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

Name: softya [URL]  ..ハッカー(169,667ポイント)   Date: 2010/05/26(水) 21:08   No:52853     
Title: Re:画面背景のループ    
では、
DrawGraph( -Sx, 0, Bg, TRUE ) ;
DrawGraph( 640-Sx, 0, Bg, TRUE ) ;
これでは、どうでしょう。


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

Name:  ..ぴよぴよ(376ポイント)   Date: 2010/05/26(水) 21:29   No:52854 解決!     
Title: Re:画面背景のループ    
ありがとうございます!!!!!
出来ました〜。
凄く助かりました!!!!


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



Name: しろ  ..初心者(5,249ポイント)   Date: 2010/05/26(水) 07:37   No:52811       
Title: シューティングで複数の弾の発射について    
C言語初心者のしろです。

昨日投稿した
http://www.play21.jp/board/formz.cgi?action=res&resno=52724&page=&id=dixq&rln=52791
の続きの質問になります。

前の投稿は弾を一つ出すためのプログラムでしたが
次は複数の弾を同時に発射するためのプログラムです。

下記のように(書籍に書いてあるデータ同様)プログラムを組んでみました。

まずJitamaMove関数の中のbreakの意味がわかりません。
書籍には「一発の発射処理の中で複数の弾が出ないようにするため、for文から脱出」とあるのですが、そもそもif文の中にあるので、for文の脱出ならfor{if{}break}のように書くのが正しい?

それとプログラム自体強制終了してしまうのも、なぜでしょう? 前回の投稿のプログラムに有限回の繰り返しfor文を組み込んだのですが、どこかに根本的な誤りがありますでしょうか?

お手数をおかけいたしますが、ご教授いただけますよう何とぞよろしくお願いいたします。
(これから仕事なので、返信できるのはおそらく帰宅後になります。申し訳ございません)

#include "DxLib.h"

typedef struct CharaData{
    int x;
    int y;
    int ghandle;
    int life;
}CharaData;

CharaData jikidata;//自機データ
CharaData jitama[3];//自機弾データ

//JitamaMove関数の宣言
void JitamaMove();



 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
    
    int i;
    jikidata.x=50;
    jikidata.y=50;
    jikidata.ghandle=LoadGraph("media\\test_jiki.bmp");
    int g=LoadGraph("media\\test_tama.bmp");
    char Key[256];
    
    for(i=0;i<3;i++){
    jitama[i].ghandle=g;
    }

    SetDrawScreen( DX_SCREEN_BACK ) ;           

    while(!ProcessMessage()&&!GetHitKeyStateAll(Key)){
       
        
        ClearDrawScreen();
        if(Key[KEY_INPUT_RIGHT]){
            jikidata.x++;
        }
        if(Key[KEY_INPUT_LEFT]){
            jikidata.x--;
        }
        if(Key[KEY_INPUT_UP]){
            jikidata.y--;
        }
        if(Key[KEY_INPUT_DOWN]){
            jikidata.y++;
        }

        if(Key[KEY_INPUT_RIGHT]&&Key[KEY_INPUT_X]){
            jikidata.x=jikidata.x+2;
        }
        if(Key[KEY_INPUT_LEFT]&&Key[KEY_INPUT_X]){
            jikidata.x=jikidata.x-2;
        }
        if(Key[KEY_INPUT_UP]&&Key[KEY_INPUT_X]){
            jikidata.y=jikidata.y-2;
        }
        if(Key[KEY_INPUT_DOWN]&&Key[KEY_INPUT_X]){
            jikidata.y=jikidata.y+2;
        }

        DrawGraph(jikidata.x,jikidata.y,jikidata.ghandle,TRUE);
        JitamaMove();
        ScreenFlip();

        

        if(Key[KEY_INPUT_SPACE])
            break;

        


    }


    
    DxLib_End();
    return 0;
}




//JitamaMove関数の定義
void JitamaMove(){
    char Key[256];
    GetHitKeyStateAll(Key);
    int i;
    
    if(Key[KEY_INPUT_A]){

        for(i=0;i<3;i++){
            if(jitama[i].life==0){
            jitama[i].life=1;
            jitama[i].x=jikidata.x+10;
            jitama[i].y=jikidata.y+8;
            break;    //ココ    
        
    }
    }
        
    
    }
    
    
    if(jitama[i].life>0){
        for(i=0;i<3;i++){
        jitama[i].x=jitama[i].x+10;
        DrawGraph(jitama[i].x,jitama[i].y,jitama[i].ghandle,TRUE);
        //画面外に出たときの処理
        if(jitama[i].x>640)
            jitama[i].life=0;
        }
    }

    }


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


Name: ru  ..入門者(3,177ポイント)   Date: 2010/05/26(水) 13:55   No:52830     
Title: Re:シューティングで複数の弾の発射について    
>まずJitamaMove関数の中のbreakの意味がわかりません。 
>書籍には「一発の発射処理の中で複数の弾が出ないようにするため、for文から脱出」とあるのですが、そもそ
>もif文の中にあるので、for文の脱出ならfor{if{}break}のように書くのが正しい? 
if(Key[KEY_INPUT_SPACE]) 
            break; 
これと同じ

>それとプログラム自体強制終了してしまうのも、なぜでしょう? 前回の投稿のプログラムに有限回の繰り返
>しfor文を組み込んだのですが、どこかに根本的な誤りがありますでしょうか? 
if(jitama[i].life>0){ // [i]
の外側にfor文書かないから

//JitamaMove関数の定義 
void JitamaMove()
{ 
    char Key[256]; 
    GetHitKeyStateAll(Key); 
    int i; 
     
    if(Key[KEY_INPUT_A])
    {
        for(i=0;i<3;i++)
        { 
            if(jitama[i].life==0)
            { 
                jitama[i].life=1; 
                jitama[i].x=jikidata.x+10; 
                jitama[i].y=jikidata.y+8; 
                break;    //ココ
            }
        }
    }

    for(i=0;i<3;i++)
    {
        if(jitama[i].life>0)
        {
            jitama[i].x=jitama[i].x+10; 
            DrawGraph(jitama[i].x,jitama[i].y,jitama[i].ghandle,TRUE); 
            //画面外に出たときの処理 
            if(jitama[i].x>640) 
                jitama[i].life=0; 
        }
    }
}





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

Name: しろ  ..初心者(5,346ポイント)   Date: 2010/05/26(水) 20:43   No:52851 解決!     
Title: Re:シューティングで複数の弾の発射について    
なるほど、ようやく理解できました。

ただ、理解はできるのですが、これをいきなり書けるか、といわれると・・・・・・
大学の数学とかもそうでしたが、なんかの定理を(誰かに質問をして)理解はできても、自分で証明できるかっていわれるとそうでもなかったですからね・・・・・・

まぁ繰り返し、「考える、理解、書く」をするしかないんでしょうが。


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



Name: gdu  ..ぴよぴよ(219ポイント)   Date: 2010/05/24(月) 00:13   No:52646       
Title: 弾幕と敵の動きについて    
弾幕で
上から横一列に弾を並べ
そのまま下に下りていき
途中で一部の場所の弾だけをランダムで消し、
その消えた弾のところを通ってよける弾幕の構成と、

敵が上から出てきて八の字を描きながら動き回るパターンの構成が
わからず困っています。

助言、アドバイス等よろしくお願いします。



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


Name: Tatu  ..プログラマー(35,516ポイント)   Date: 2010/05/26(水) 19:31   No:52848     
Title: Re:弾幕と敵の動きについて    
敵の移動関数、弾幕関数を作ってみました。

void enemy_patternT0(int i){
    int t=enemy[i].cnt;
    if(t==0){
        enemy[i].vy=200.0/60;
    }
    if(t<120){
        //減速
        enemy[i].vy-=(200.0/60)/120;
    }
    if(t==180){
        enemy[i].sp=3;
        enemy[i].ang=PI/2;
    }
    if(t>=180){
        //8を横にした形に動かす
        if(t%120<60){
            enemy[i].ang+=PI2/60;
        }
        else {
            enemy[i].ang-=PI2/60;
        }
    }
}

void shot_bullet_T000(int n){
    int i,t=shot[n].cnt;
    double x;
    double dx,dy;
    if(t%100==0){
        //横一列に弾を並べる
        for(x=0;x<FMX;x+=10){
            if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
                shot[n].bullet[k].flag=1;
                shot[n].bullet[k].knd=6;
                shot[n].bullet[k].col=1;
                shot[n].bullet[k].cnt=0;
                shot[n].bullet[k].x=x;
                shot[n].bullet[k].y=-10;
                shot[n].bullet[k].spd=10;
                shot[n].bullet[k].angle=PI/2;
                se_flag[0]=1;
            }
        }
        //弾をランダムに消去する
        x=FMX/2+rang(200);
        for(i=0;i<SHOT_BULLET_MAX;i++){
            dx=shot[n].bullet[i].x-x;
            dy=shot[n].bullet[i].y-240;
            if(dx*dx+dy*dy<64*64){
                shot[n].bullet[i].flag=0;
            }
        }
    }
    for(i=0;i<SHOT_BULLET_MAX;i++){
        //弾の減速
        if(shot[n].bullet[i].spd>2){
            shot[n].bullet[i].spd-=0.5;
        }
    }
}


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

Name: gdu   Date: 2010/06/30(水) 03:31   No:526461277836315     
Title: Re:弾幕と敵の動きについて    
返答遅れました。

一応なんとか自分の思った動きを
するコードになったのですが。
ちょっとわからないことがあったので
お聞きいたします。

>>x=FMX/2+rang(200);
ここの()内に入ってる数字は何の役目をしているんでしょうか?

試しにここの値を100,400にしてみると、400では途中で弾幕が消えないことがあり。
100でも400ほどではないですが、稀に消えないことがあります。

返答お願いします。


Name: gdu   Date: 2010/06/30(水) 03:32   No:526461277836328     
Title: Re:弾幕と敵の動きについて    
返答遅れました。

一応なんとか自分の思った動きを
するコードになったのですが。
ちょっとわからないことがあったので
お聞きいたします。

>>x=FMX/2+rang(200);
ここの()内に入ってる数字は何の役目をしているんでしょうか?

試しにここの値を100,400にしてみると、400では途中で弾幕が消えないことがあり。
100でも400ほどではないですが、稀に消えないことがあります。

返答お願いします。




Name: Kei  ..ぴよぴよ(445ポイント)   Date: 2010/05/26(水) 13:57   No:52831       
Title: C言語(ソート)の課題で分からないことがありましt    
C言語(ソート)で分からないことがありました。

『バブル,選択,挿入の整列関数に必要な関数を付加し,任意個(<100)の正数(0以上100以下)を対象とするバブル,選択,挿入の3種の整列プログラムを完成せよ.
1)ソートの途中経過がわかるように表示を工夫せよ.
2)整列処理中に交換、並べ替えが起きた場合,交換や並べ替えがおきた要素を文字"*"で,そうでない要素を文字"."で表した文字列を出力せよ.整列対象のデータ(配列)内で,データで移動しているものが*となる.』という課題が出て、


#include <stdio.h>

int BubSort(int x[ ], int n);
void ShowData(int x[ ], int n);
int main(void);

#define NUM_DATA 10 
int x[ ] = {9,8,7,6,5,4,3,2,1,0}; 



int BubSort(int x[ ], int n)
{
int i, j, temp;

for (i = 0; i < n - 1; i++) {
for (j = n - 1; j > i; j--) {
if (x[j - 1] > x[j]) {
temp = x[j]; 
x[j] = x[j - 1];
x[j - 1]= temp;
}

}
}


void ShowData(int x[ ], int n)
{
int i;

for (i = 0; i < n ; i++)
printf("%d", x[i]);
}

int main(void)


printf("ソート前:\n");
ShowData(x, NUM_DATA);
printf("\n\n");

BubSort(x, NUM_DATA);


printf("\n\nソート後:\n");
ShowData(x, NUM_DATA);
return 0;
}


とすることはできたのですが、要素の並び替えがおきた回で*や.が出力する方法がわからないので教えてください。



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


Name: たいちう  ..比類無きプログラマー(86,311ポイント)   Date: 2010/05/26(水) 14:05   No:52833     
Title: Re:C言語(ソート)の課題で分からないことがありましt    
if (x[j - 1] > x[j]) {
    temp = x[j]; 
    x[j] = x[j - 1];
    x[j - 1]= temp;
    printf("%d <-> %d\n", j - 1, j);
}

まず↑のように書き換えたプログラムを実行してみてください。
次にprintfの部分を*と.で表現できたら完成です。


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

Name: やっくん  ..プログラマー(27,903ポイント)   Date: 2010/05/26(水) 14:10   No:52834     
Title: Re:C言語(ソート)の課題で分からないことがありましt    
>要素の並び替えがおきた回で*や.が出力する方法がわからないので教えてください。
例えば、要素0と要素4が入れ替わったら
*...*.....
となれば良いのでしょうか。

要素の並び替えが起きたところに0〜9までのforループを新たに作り、if分などで入れ替わりが起きた要素の場合を[*]を、そうでない場合[.]を標準出力してあげるのはどうでしょう。


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



Name: 組木紙織  ..比類無きプログラマー(82,753ポイント)   Date: 2010/05/25(火) 02:43   No:52716       
Title: SubversionとVisual Studioの連携    
現在少し大きめのプログラムを作ろうと考えているので、作るついでにソース管理の練習もしようと思い
ソース管理にSubversionを使おうと考えました。
開発環境はVisual Studio(VS)を使うことは確定しているので、VS上で使えるという触れ込みの
AnkhSVNを使おうと考えたが、なぜかダウンロードサイトへつながりませんでした。
仕方がないからオリジナル?のコマンドプロンプト上で動作するSubversionをダウンロード&インストールし
Suvbersionが最低限使えるようになりました。
どうせなら全部VS上でやりたいと思います。

ここで質問です。
AnkhSVNに代わるVS上で使えるフリーのソース管理システムはないでしょうか?
もし、なければVSのマクロやショートカット機能のようなものを用いて、VS上からsubversionを扱う方法はないでしょうか?


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


Name: toyo  ..熟練のプログラマー(46,714ポイント)   Date: 2010/05/25(火) 07:13   No:52721     
Title: Re:SubversionとVisual Studioの連携    
AnkhSVNダウンロードできましたよ
http://ankhsvn.open.collab.net/downloads
インストールもしてみましたがちゃんとVisualC++2008に組み込まれました


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

Name: 組木紙織  ..比類無きプログラマー(82,706ポイント)   Date: 2010/05/25(火) 19:14   No:52769     
Title: Re:SubversionとVisual Studioの連携    
私のとこからではやはり出来ません。

Ankhsvn2.1.8420をクリックすると404エラーが出ます。
何が原因何でしょうね。
 編集済み


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

Name: ぽこ  ..中級者(10,923ポイント)   Date: 2010/05/25(火) 19:24   No:52770     
Title: Re:SubversionとVisual Studioの連携    
ブラウザ変えてみてどうでしょ?

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

Name: 組木紙織  ..比類無きプログラマー(82,584ポイント)   Date: 2010/05/25(火) 19:37   No:52773     
Title: Re:SubversionとVisual Studioの連携    
ブラウザを色々使う趣味はないので、IEしか入っていなかったのですが、
Google Chromeをインストールしてやってみても同様に404エラーが出ました。
ほかのブラウザでも試してみてもいいのですが、
toyoさんが試した詳細を聞いてからにしたいと思います。




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

Name: ぽこ  ..中級者(10,898ポイント)   Date: 2010/05/25(火) 19:45   No:52775     
Title: Re:SubversionとVisual Studioの連携    
今試しましたが、

Google Chrome→404
FireFox3.6→404
IE8→OK
Sleipnir2.9.3→OK

でした。
IEの設定の差ですかね?(当方、Win7、IE8、設定デフォルトのままです)
.NETフレームワークかSilverlight辺りがインストールされていないと
ダメとか? 編集済み


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

Name: toyo  ..熟練のプログラマー(46,905ポイント)   Date: 2010/05/25(火) 20:02   No:52776     
Title: Re:SubversionとVisual Studioの連携    
職場のパソコンではできたんですが自宅からだと
http://www.open.collab.net/jphttp://ankhsvn.net/downloads/2.1/?ocn=true&_=d
こんなURLになって404ですね
アドレス欄を直接編集して
http://www.open.collab.net/jp
を消して
http://ankhsvn.net/downloads/2.1/?ocn=true&_=d
にしたら
http://www.ohloh.net/p/ankhsvn/download?filename=AnkhSvn-2.1.8420.8.msi
に飛ばされて結果ダウンロードできました


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

Name: 組木紙織  ..比類無きプログラマー(82,768ポイント)   Date: 2010/05/25(火) 20:18   No:52777 解決!     
Title: Re:SubversionとVisual Studioの連携    
IEで
http://www.ohloh.net/p/ankhsvn/download?filename=AnkhSvn-2.1.8420.8.msi
から直接ダウンロードして解決しました。

私の環境はIE8なんですが、OSがVistaです。

本題は解決したので、解決マーク押しときます。

ここから先は雑談で。
原因がきになるので、詳しい方いたら解説をお願いします。


#あの頑張った時間いったいなんだったんだろう。という終わり方でちょっとへこみます。


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

Name: ムンバ  ..熟練のプログラマー(52,536ポイント)   Date: 2010/05/25(火) 23:06   No:52798     
Title: Re:SubversionとVisual Studioの連携    
こんばんは。

先日、ラジオのFM放送(J-WAVE)で
「インターネットしてる人で、ブラウザに
 Windows Internet Explorerを使っている人は、全体の2割らしいよ〜っ!」
ってな事を、言ってました。
実際は、どうなんでしょうね〜?
(何のブラウザを使ってる人が多いかは、運転中だったので覚えてません。^^;)

OS:Win7(Pro 32bit)
ブラウザ:IE8

http://ankhsvn.open.collab.net/downloads

↑先程、直接ダウンロードできました。(22:30頃)

>>ここから先は雑談で。 
>>原因がきになるので、詳しい方いたら解説をお願いします。
 
 解説は私には無理ですが明日、職場のPCからも試してみますね。(Win XP)

>>あの頑張った時間いったいなんだったんだろう。という終わり方でちょっとへこみます。
(---↑編集にて追加させて頂きました。---)

この辺り、私的に気になる事もありますので宜しくお願い致します。
おやすみなさい。(_ _) 編集済み


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

Name: ムンバ  ..熟練のプログラマー(52,642ポイント)   Date: 2010/05/26(水) 00:03   No:52801     
Title: Re:SubversionとVisual Studioの連携    
隣の嫁のパソコンでは・・・

OS:Win XP(Pro)
ブラウザ:IE8

http://ankhsvn.open.collab.net/downloads
にて、ダウンロードしてみようとしたところ
toyoさんのNo:52776 のご解説と、同じ結果になりました。

No:52775で、ぽこさんがおっしゃられてる
>>.NETフレームワークかSilverlight辺りがインストールされていないと 
>>ダメとか?
 嫁のPCには、↑は(VC++なども)インストールされていませんので
 もしかしたら、これが原因かもしれません。

明日、職場のPCでも試してみたいと思います。


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

Name: Justy  ..伝説なるハッカー(536,073ポイント)   Date: 2010/05/26(水) 01:21   No:52804     
Title: Re:SubversionとVisual Studioの連携    
 うちは WinXP SP3ですが、IE8/FF3共に失敗していますね。

http://ankhsvn.open.collab.net/downloads 
にアクセスすると 302レスポンスで
http://www.open.collab.net/servlets/OCNDirector?id=ANKHSVN1.0.x
に飛ばされて、更に 302レスポンスで
http://www.open.collab.net/http://ankhsvn.net/downloads/1.0/?ocn=true&_=d
に飛ばされているようです。

 この2つめのところの Locationフィールドが httpが2つあるおかしな URIを指定してきているのが
問題っぽいです。

 ぽこさん・ムンバさんのところで何故うまくいったのかは謎ですが、OSの違いで
おかしな Loacation値を補正するような機能が入っているのかもしれません。


 これと似たよな現象が少し前にレポートされていました(IEだと見られないかも)。
http://ankhsvn.open.collab.net/ds/viewMessage.do?dsForumId=582&viewType=browseAll&dsMessageId=362948#messagefocus

 jpサイト特有の問題かもしれませんね。


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

Name: toyo  ..熟練のプログラマー(47,101ポイント)   Date: 2010/05/26(水) 06:44   No:52807     
Title: Re:SubversionとVisual Studioの連携    
状況の再現方法がわかりました
うまくダウンロードできたブラウザでは
Accept-Language: en,en-us;q=0.7,ja;q=0.3
で失敗したほうは
Accept-Language: ja,en;q=0.7,en-us;q=0.3
になってました
Firefoxの「ツール」「オプション」で「コンテンツ」の「言語設定」を日本語を優先にすると失敗し英語を優先にすると成功するようです。
Accept-LanguageでLocation先が変わるようになっているようですがこれにバグがありそうですね


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

Name: 組木紙織  ..比類無きプログラマー(82,826ポイント)   Date: 2010/05/26(水) 08:57   No:52813     
Title: Re:SubversionとVisual Studioの連携    
Accept-Languageの問題ですか。

これはバグ報告する必要がありそうですね。
現象を調べてくれた方々ありがとうございます。


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

Name: ムンバ  ..熟練のプログラマー(52,756ポイント)   Date: 2010/05/26(水) 10:46   No:52819     
Title: Re:SubversionとVisual Studioの連携    
おはようございます。

職場のPCからです。
OS:Win XP(Home)
ブラウザ:IE8
(環境:VC++2008(SP1)入ってます。)

直接はDLできず
toyoさん(No:52776)Justyさんの様に 、同じ経過をたどってしまいました。
一応、ご報告まで。^^
---誤字・脱字修正--- 編集済み


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



Name: nayo [URL]  ..上級者(15,777ポイント)   Date: 2010/05/25(火) 01:12   No:52705       
Title: PHPなどによるサイト作りについて    
こんばんは、お久しぶりです
この度はC言語ではなくて申し訳ないのですがPHPによるサイト作りについて質問させて頂きます

とあるまとめサイトをやっているのですがAAの検索が不便なので
各AAにタグを付けて検索できるシステムがあると便利かと思ったのですがPHPでそういうものは作れるのでしょうか
また、画像掲示板やファイルアップローダなども作れたら、と考えています
その他上記の希望が満足できそうなオススメのレンタルサーバーや参考となるサイトや書籍ありましたらご紹介お願いします

レンタルサーバーで無理そうなら自宅サーバーについても考えていますが知識が無いため少々不安です
もし自宅サーバーでしか無理なようでしたら自宅サーバーについてのオススメの書籍やサイトのご紹介お願いします

質問ばかりで申し訳ないですがよろしくお願いします


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


Name: たかぎ [URL]  ..ハッカー(192,347ポイント)   Date: 2010/05/25(火) 01:31   No:52708     
Title: Re:PHPなどによるサイト作りについて    
> PHPでそういうものは作れるのでしょうか 

作れます。

どの程度のアクセスを見込んでいるのか、あるいはどの程度の信頼性が要求されるのかにもよりますが、普通の共用レンタルサーバーでも作れると思います。
画像掲示板やファイルアップローダーを考えるのであれば、ディスク容量と転送量だけ注意すれば、大抵のところはどうにかなるのではないでしょか。


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

Name: テラ  ..ぴよぴよ(21ポイント)   Date: 2010/05/25(火) 01:33   No:52709     
Title: Re:PHPなどによるサイト作りについて    
PHPでレンタルサーバとなると無料ではあまりないです。
あったとしても広告が入ってしまったり定員が満了の為契約できないことが多いです。
有料ですと色々ありますが値段やDBを使える面から言っても
個人用ならハッスルサーバーがずばぬけてお勧めできます。
URLをはっておきます。
http://px.a8.net/svt/ejp?a8mat=1NRZJ8+BRWNHU+HQW+61Z81
半角にして下さい。

掲示板を作るならPHPよりCGIの方がサンプルソースが多いです。
ハッスルではCGIも使えます。

他にもロリポップやエックスサーバがありますが
前者は遅い気がし、後者は高いです。

ちなみにAA検索でしたらAA缶とかのサイトでは検索出来る気がします。


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

Name: しん  ..ぴよぴよ(894ポイント)   Date: 2010/05/25(火) 03:10   No:52717     
Title: Re:PHPなどによるサイト作りについて    
私はXreaをオススメします。
バリュードメインで独自ドメインを取得しそのままxreaでサーバーをレンタルする
というパターンが多いと思います。
データベース(MySQL)の使用もできるし、サブドメインの設定も可能です。

私も掲示板やチャット、アップローダーなどの個人的なものから
レンタル掲示板、レンタルスペースなどのレンタル系も手がけております^^


テラさん
>掲示板を作るならPHPよりCGIの方がサンプルソースが多いです。 
プログラマーらしくありませんね。
PHPもCGIですよ。
CGI=Perlではないのでしっかり区別するべきです。


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

Name: toyo  ..熟練のプログラマー(46,673ポイント)   Date: 2010/05/25(火) 06:45   No:52719     
Title: Re:PHPなどによるサイト作りについて    
知識があっても自宅サーバはやめたほうがいいですよ
24時間稼動させてソフトやハードのトラブルにいつでも対応できるにはやっぱり専門のサーバ屋さんがいいです
私は無料のXREA使ってますが(今は無料は募集してないと思いますが)データベースも使えて便利です。
PHPならCに似てる部分も多くて標準でMySQL用の関数もあるのでCを使えればすぐに使えるようになりますよ。

PHPはCGIで使うよりApacheのモジュールに組み込まれるほうが多いですね


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

Name: テラ  ..ぴよぴよ(201ポイント)   Date: 2010/05/25(火) 08:00   No:52725     
Title: Re:PHPなどによるサイト作りについて    
>>しんs
>>PHPもCGIですよ。 
そうなんですか?
確かに同じサーバー側の言語ですが根本的に違うものではないのでしょうか?
あまり詳しくないので何とも言えないのですが・・・。

両方ともスクリプト言語で、PHPはモジュールに埋め込んだりして使えますが
CGIは別プロセスから起動しないといけないので違うものかと思っておりました。
最近ではモジュールを用いたCGIもでてきてはいますが
大半はモジュールを使ってない動作が少し重いものばかりな気がします。
その為、別物と考えていました。

toyoさんが言っている通り、PHPを使うならMySQL等のDBをを使えるので
色々出来ることがあるかと思います。


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

Name: たいちう  ..比類無きプログラマー(85,187ポイント)   Date: 2010/05/25(火) 08:55   No:52728     
Title: Re:PHPなどによるサイト作りについて    
> 確かに同じサーバー側の言語ですが根本的に違うものではないのでしょうか?

CGIは言語の名前ではありませんよ。

http://e-words.jp/w/CGI.html
http://okwave.jp/qa/q1505052.html


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

Name: たかぎ [URL]  ..ハッカー(192,393ポイント)   Date: 2010/05/25(火) 10:22   No:52732     
Title: Re:PHPなどによるサイト作りについて    
> テラさん

アフィリエイトのリンクを貼るのは感心できませんね。
それもアリバイ作りのために全角で書くなど、悪質です。
こんあことをやっていると、アドバイスも信用されませんよ。


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

Name: nayo  ..上級者(15,928ポイント)   Date: 2010/05/25(火) 10:26   No:52733     
Title: Re:PHPなどによるサイト作りについて    
出張中なので携帯から失礼します
皆様回答ありがとうございます

出来る、とのことなのでレンタルサーバーでやってみようと思います
アクセス数は四ケタはたぶんいかないかと
なので月3000円以内くらいのサーバーで良さそうなものにしたいと思います

そこでまたお願いになって申し訳ないのですが、
目的を実現するにあたりおすすめの書籍やサイトの紹介お願いします(PHPやMySQLなどその他関連)


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

Name: たかぎ [URL]  ..ハッカー(192,705ポイント)   Date: 2010/05/25(火) 10:32   No:52735     
Title: Re:PHPなどによるサイト作りについて    
無料のレンタルサーバーは、広告が入るだけでなく、いろいろ問題もあるので避けるべきです。

あと、ハッスルサーバーもロリポップもさくらの再販です。
そのためもあって、内容自体はさくらを超えられないと思います。
値段が安いことや、ロリポブログ等のサービスに魅力を感じないのであれば、さくらの方がよいでしょうね。

あと、ハッスルサーバーはtelnetやsshが使えません。また、gccも使えません。
PECLはもちろん、PEARを使う上でも支障が出ます(使えないわけではありませんが、面倒です)ので、注意してください。

XREAやCORESERVERは機能的には申し分ありません。
ただ、XREAはアカウントを詰め込みすぎていることもあり、パフォーマンスは高くありません。
また、どちらもために(数日以上の)メール遅延が起きるなど、トラブルの遭遇率がやや高い気がしています。
(共用サーバーなら多かれ少なかれあるのですが)

PHPについては、ハッスルサーバーもロリポップもCGIとして動いていたはずです。
さくらは上位のプランはモジュール版もあったはずですが、基本はやはりCGIだったと思います。
XREAやCORESERVERは、基本はモジュール版ですが、セーフモードなので制約も多く、結局CGI版を使うことになるかと思います。


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

Name: たかぎ [URL]  ..ハッカー(192,774ポイント)   Date: 2010/05/25(火) 10:35   No:52736     
Title: Re:PHPなどによるサイト作りについて    
> アクセス数は四ケタはたぶんいかないかと 

このあいまいな表現では何ともいえないのですが...
1日に1万ページビュー未満ということでしょうか?

> 月3000円以内くらいのサーバーで良さそうなものにしたいと思います 

さくらのビジネスあたりでよいとおもいます。

> 目的を実現するにあたりおすすめの書籍やサイトの紹介お願いします(PHPやMySQLなどその他関連)

現状がわからないと、有効なアドバイスはできないと思います。


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

Name: たいちう  ..比類無きプログラマー(85,306ポイント)   Date: 2010/05/25(火) 10:36   No:52737     
Title: Re:PHPなどによるサイト作りについて    
『速攻&活用! Web開発者のためのPHPベストサンプル集』
http://www.amazon.co.jp/dp/477413175X

2年ほど前にわりと熱心に探した中では一番良い本でした。
MySQLも扱っています。
今はもっと良い本が出ているのかもしれませんが、
依然この本もはずれではないでしょう。


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

Name: softya [URL]  ..ハッカー(167,089ポイント)   Date: 2010/05/25(火) 11:13   No:52739     
Title: Re:PHPなどによるサイト作りについて    
nayoさんの言語力次第しだいです。

こちらのサイトだけでは、だめでしょうか?
http://www.phppro.jp/
まぁ、PHPの場合どのフレームワークを使うか考えないといけませんね。


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

Name: nayo  ..上級者(16,180ポイント)   Date: 2010/05/25(火) 22:59   No:52797 解決!     
Title: Re:PHPなどによるサイト作りについて    
皆様回答ありがとうございます

>たかぎ様
色々不明確で申し訳なかったです
アクセス数は0〜多くて5000/日ないくらい、と考えてます
PHPに関しては素人です
C、C++、Javaに関しては3〜4年ほど学んでいます(学校で2年、仕事では使ってませんので残りは趣味程度)

>たいちう様
おすすめの書籍ありがとうございます
時代が変わっても良い書籍はいつまでも良いものがありますからね
購入を検討してみようと思います

>softya様
素晴らしいサイトのご紹介ありがとうございます
どのフレームワークを使うか、ということも考えないといけないのですね
まだ詳しく分かっていないので調べてみて自分に合ったものを選択してみようと思います

一応解決とさせて頂きますがその他まだオススメなどございましたらお願いします


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



Name: ゴリ  ..ぴよぴよ(150ポイント)   Date: 2010/05/24(月) 23:13   No:52689       
Title: マップチップ    
今ゲームを作っているのですが、(探し方が悪いせいなのか…)マップチップが見つかりません。
16×16のものはたくさん見つかったのですが、主人公が32ピクセルずつ進むので、
32×32のマップチップが欲しいです。
ちなみに、ゲームのジャンルはRPGです。
どなたか、そのようなマップチップがあるサイトなどを教えてください。

また、32×32のマップチップを使わなくても、16×16のマップチップで出来る方法を知っていましたら、
教えてください。

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


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


Name: ru  ..かけだし(1,855ポイント)   Date: 2010/05/24(月) 23:37   No:52692     
Title: Re:マップチップ    
http://www.google.co.jp/search?hl=ja&source=hp&q=%E3%83%9E%E3%83%83%E3%83%97%E3%83%81%E3%83%83%E3%83%97&btnG=Google+%E6%A4%9C%E7%B4%A2&aq=f&aqi=&aql=&oq=&gs_rfai=

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

Name: sophya  ..ぴよぴよ(29ポイント)   Date: 2010/05/25(火) 14:18   No:52748     
Title: Re:マップチップ    
http://pygame.skr.jp/index.php?%E3%83%9E%E3%83%83%E3%83%97%E3%83%81%E3%83%83%E3%83%97%E3%83%91%E3%83%AC%E3%83%83%E3%83%88#i8e77cdf

ここにマップチップ関する内容があります。

また、画像関連のソフトツールは下記のリンでダウンロードできる。
http://www.flatworld.jp/list/304072_1.html


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

Name: Dixq (管理人)  ..ウィザード(1,193,875ポイント)   Date: 2010/05/25(火) 14:46   No:52750     
Title: Re:マップチップ    
普通に16x16を縦横2倍に拡大したのではダメですか?

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

Name: ゴリ  ..ぴよぴよ(643ポイント)   Date: 2010/05/25(火) 22:38   No:52794 解決!     
Title: Re:マップチップ    
皆さんありがとうございますm(_ _)m

ruさん
>>
ありがとうございます。
探してみたら、いくつか見つかりました。

sophyaさん
>>
ありがとうございます。
勉強になりました。

Dixq(管理人さん)
>>
ありがとうございます。
私もそう思いやってみたのですが、画像が大きくなり、今使っているマップエディタでは使えなくなりました。
けれども、今使っているマップエディタは結構使いやすいので、あまり変えたくなかったのです。
なので32×32のマップチップを探そうと思ったのですが、予想以上に少ないですね^^;
おそらく2倍に拡大する方法でやる事になります(別のマップエディタで…)。

皆さん、本当にありがとうございますm(_ _)m
いくつか見つかりましたが、数が少ないので、
見つかったチップ+2倍に拡大したチップで作業を進めていくと思います。
本当にありがとうございました。

〜独り言〜
自分で書けるようになればいいんですけどね、ドット絵とかイラストは苦手(描けない)なんですよね。
でも、やっぱり簡単なものぐらいは描けるようになりたい(なったほうが良い)ですよね…^^;


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



Name: しろ  ..入門者(3,262ポイント)   Date: 2010/05/25(火) 07:55   No:52724       
Title: 変数の宣言で質問です。    
友人に「C言語わくわくゲームプログラミング」をもらったので、ちょこちょこ読んでいます。

シューティングで銃を撃つプログラムがあるのですが、変数の宣言で疑問があるので、質問です。下記のプログラムが書籍内にあるプログラム(多少アレンジしています)ですが、Jitamamove関数の定義でjitama.lifeの値で場合分けしています。

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

#include "DxLib.h"

typedef struct CharaData{
    int x;
    int y;
    int ghandle;
    int life;
}CharaData;

CharaData jikidata;
CharaData jitama;

//JitamaMove関数の宣言
void JitamaMove();



 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
    

    jikidata.x=50;
    jikidata.y=50;
    jikidata.ghandle=LoadGraph("media\\test_jiki.bmp");  //自機の画像を読み込み
    jitama.ghandle=LoadGraph("media\\test_tama.bmp");  //弾の画像を読み込み
    int i;
    char Key[256];
    
    

    SetDrawScreen( DX_SCREEN_BACK ) ;           

    while(!ProcessMessage()&&!GetHitKeyStateAll(Key)){
       
        
        ClearDrawScreen();
        if(Key[KEY_INPUT_RIGHT]){
            jikidata.x++;
        }
        if(Key[KEY_INPUT_LEFT]){
            jikidata.x--;
        }
        if(Key[KEY_INPUT_UP]){
            jikidata.y--;
        }
        if(Key[KEY_INPUT_DOWN]){
            jikidata.y++;
        }

        if(Key[KEY_INPUT_RIGHT]&&Key[KEY_INPUT_X]){
            jikidata.x=jikidata.x+2;
        }
        if(Key[KEY_INPUT_LEFT]&&Key[KEY_INPUT_X]){
            jikidata.x=jikidata.x-2;
        }
        if(Key[KEY_INPUT_UP]&&Key[KEY_INPUT_X]){
            jikidata.y=jikidata.y-2;
        }
        if(Key[KEY_INPUT_DOWN]&&Key[KEY_INPUT_X]){
            jikidata.y=jikidata.y+2;
        }

        DrawGraph(jikidata.x,jikidata.y,jikidata.ghandle,TRUE);
        JitamaMove();
        ScreenFlip();

        

        if(Key[KEY_INPUT_SPACE])
            break;

        


    }


    
    DxLib_End();
    return 0;
}




//JitamaMove関数の定義
void JitamaMove(){
    char Key[256];
    GetHitKeyStateAll(Key);
    
    

    if(Key[KEY_INPUT_A]){
    if(jitama.life==0){
        jitama.life=1;
        jitama.x=jikidata.x+10;
        jitama.y=jikidata.y+8;
    }
    }
    if(jitama.life>0){
        jitama.x=jitama.x+10;
        DrawGraph(jitama.x,jitama.y,jitama.ghandle,TRUE);
        //画面外に出たときの処理
        if(jitama.x>640)
            jitama.life=0;
        }
    }

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


ですが、そもそもjitama.lifeの値を宣言していないので、この場合分けは成立しない気がするのですが・・・・・・でもプログラムを実行するとうまくいきます。なぜでしょうか?

それで関数内で下記のようにjitama.lifeを宣言すると定義するとうまくいきません。(弾は表示されるのですが自機を離れない)これもなぜでしょう。

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

void JitamaMove(){
    char Key[256];
    GetHitKeyStateAll(Key);
    
    

    if(Key[KEY_INPUT_A]){
    if(jitama.life==0){
        jitama.life=1;
        jitama.x=jikidata.x+10;
        jitama.y=jikidata.y+8;
    }
    }
    if(jitama.life>0){
        jitama.x=jitama.x+10;
        DrawGraph(jitama.x,jitama.y,jitama.ghandle,TRUE);
        //画面外に出たときの処理
        if(jitama.x>640)
            jitama.life=0;
        }
    }

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

お手数をおかけいたしますが、よろしくお願いいたします。


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


Name: Ma  ..ハッカー(101,184ポイント)   Date: 2010/05/25(火) 08:11   No:52726     
Title: Re:変数の宣言で質問です。    
jikidata.x=50; 
jikidata.y=50; 

jikidata.x=50; 
jikidata.y=50; 
jikidata.life = 0;


原因はおそらく
前半のプログラムで起動したときは、たまたまlife の値が正だった→if(jitama.life>0) にひっかかって初期化される。
二回目の時は、たまたまlifeの値が負だった。→どちらの文にもひっかからない。


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

Name: たいちう  ..比類無きプログラマー(85,151ポイント)   Date: 2010/05/25(火) 08:49   No:52727     
Title: Re:変数の宣言で質問です。    
いやいや、lifeを使っているのは、jikidataではなくjitamaです。
そしてjitamaはグローバル変数なので0で初期化されています。
ゲーム内での意味としては未使用といった所でしょう。
未使用ならば使用開始し、画面外に出たら未使用にもどしています。


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

Name: しろ  ..入門者(3,578ポイント)   Date: 2010/05/25(火) 21:36   No:52781     
Title: Re:変数の宣言で質問です。    
なるほど、グローバル変数は0で初期化されるのですね。
勉強不足でした。

もう一つ質問なのですがJitamaMove関数の定義内で下記のように、jitama.life=0を定義すると弾が発射するのですが、自機から離れません。
これはなぜなのでしょうか。

お手数をおかけいたしますが、よろしくお願いいたします。


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

//JitamaMove関数の定義
void JitamaMove(){
    char Key[256];
    GetHitKeyStateAll(Key);
    jitama.life=0;//←ココです。
    
    

    if(Key[KEY_INPUT_A]){
    if(jitama.life==0){
        jitama.life=1;
        jitama.x=jikidata.x+10;
        jitama.y=jikidata.y+8;
    }
    }
    if(jitama.life>0){
        jitama.x=jitama.x+10;
        DrawGraph(jitama.x,jitama.y,jitama.ghandle,TRUE);
        //画面外に出たときの処理
        if(jitama.x>640)
            jitama.life=0;
        }
    }


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

Name: ru  ..かけだし(2,470ポイント)   Date: 2010/05/25(火) 22:01   No:52784     
Title: Re:変数の宣言で質問です。    
jitama.life=0;//←ココです。 

    if(Key[KEY_INPUT_A]){ 
    if(jitama.life==0){ // ココ
        jitama.life=1; 
        jitama.x=jikidata.x+10; // ココ
        jitama.y=jikidata.y+8; // ココ
    } 
    } 


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

Name: しろ  ..入門者(3,713ポイント)   Date: 2010/05/25(火) 22:15   No:52789     
Title: Re:変数の宣言で質問です。    
ええと……

jitama.life=0;

if(jitama.life==0){ 
        jitama.life=1; 
        jitama.x=jikidata.x+10; 
        jitama.y=jikidata.y+8; 
    } 

まずこの部分で、弾の位置を決めますよね。
(最初にjitama.life=0と宣言してるので、if文章の要件は満たすはず)

それでif内でjitama.lifeの値は1となり、つぎの

 if(jitama.life>0){ 
        jitama.x=jitama.x+10; 
        DrawGraph(jitama.x,jitama.y,jitama.ghandle,TRUE); 
        //画面外に出たときの処理 
        if(jitama.x>640) 
            jitama.life=0; 
        } 

の中に入り、whileの繰り返しで弾が表示→動くと思うのですが。でもなにか重大な勘違いをしているような気もします。


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

Name: ru  ..入門者(2,570ポイント)   Date: 2010/05/25(火) 22:20   No:52790     
Title: Re:変数の宣言で質問です。    
毎回 jitama.life=0; してるから

 if(jitama.life>0){  
        jitama.x=jitama.x+10;  
        DrawGraph(jitama.x,jitama.y,jitama.ghandle,TRUE);  
        //画面外に出たときの処理  
        if(jitama.x>640)  
            jitama.life=0;  
        }  
これは1回だけ


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

Name: しろ  ..入門者(3,727ポイント)   Date: 2010/05/25(火) 22:24   No:52791 解決!     
Title: Re:変数の宣言で質問です。    
理解できましたー! ありがとうございます!!

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



Name: ultima  ..ぴよぴよ(927ポイント)   Date: 2010/05/24(月) 23:41   No:52693       
Title: ウィンドウを表示させたいのですが    
私は今龍神録プログラミングの館のやり方でウィンドウを表示しようとしています。
OSはWindous7でVisual Studio 2008 C++を使っています。



#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        if( DxLib_Init() == -1 ) return -1; 
 
 
 #define GLOBAL_INSTANCE 
#include "../include/GV.h"

int Key[256];

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
    char GetHitKeyStateAll_Key[256];
    GetHitKeyStateAll( GetHitKeyStateAll_Key );
    for(int i=0;i<256;i++){
        if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
        else                            GetHitKeyStateAll_InputKey[i]=0;
    }
    return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

    while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
          //↑メッセージ処理          ↑画面をクリア           ↑入力状態を保存       ↑ESCが押されていない


        //ココ!!



        ScreenFlip();
    }

    DxLib_End();
    return 0;
}



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




プログラムは初心者で知識が少ないのでコピー&ペーストしかしてません。

これをコンパイルするとエラーが起きてしまいます。

「コマンドライン warning D9035:オプション'Wp64'の使用は現在推奨されていません。今後のバージョンからは削除されます。」

というエラーです。

このエラーの意味がよくわからないので、教えていただけないでしょうか?


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


Name: ru  ..かけだし(1,895ポイント)   Date: 2010/05/24(月) 23:45   No:52695     
Title: Re:ウィンドウを表示させたいのですが    
http://www.play21.jp/board/formz.cgi?action=res&id=dixq&resno=47299&lognum=145&from=all

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

Name: ultima  ..ぴよぴよ(938ポイント)   Date: 2010/05/25(火) 22:05   No:52786 解決!     
Title: 解決しました!    
ありがとうございました^^

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



Name: kiri  ..ぴよぴよ(22ポイント)   Date: 2010/05/25(火) 18:57   No:52765       
Title: 18章の構造体    
はじめて質問させていただきます。
よろしくお願いします。

質問は、ゲームプログラミングの館の18章(http://dixq.net/g/20.html)の
#include "DxLib.h"
 
typedef struct{
        int x,y,img;
}ch_t;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[16];
    char Key[256];
    ch_t ch;

〜〜〜以下略〜〜〜

ch_t ch; とするのはなぜでしょうか?

typedef struct{
        int x,y,img;
}ch;

ではいけないのでしょうか?


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,194,120ポイント)   Date: 2010/05/25(火) 19:05   No:52767     
Title: Re:18章の構造体    
kiriさん

こんにちは。

別にchでもいいですよ。
でも、タグ名はタグだと解りやすいように_tを付けるのが慣習になっています。
ch_tをchにして

ch c;

とかにしてもいいかもしれませんが、あまりにも名前が短すぎると解りにくくなってしまいます。
サンプルはコードが短いので良いと思いますが、本格的にコードを書く時は一目で何の役割をする変数かわかるように命名する必要がありますね。

構造体の基本については、ネットに沢山資料がありますので、もっと詳しく知りたい時は
http://www.google.co.jp/search?hl=ja&q=%EF%BC%A3%E8%A8%80%E8%AA%9E%E3%80%80%E6%A7%8B%E9%80%A0%E4%BD%93&lr=lang_ja
こちら参考にされると良いかもしれません。


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

Name: kiri  ..ぴよぴよ(145ポイント)   Date: 2010/05/25(火) 20:25   No:52778 解決!     
Title: Re:18章の構造体    
返信ありがとうございます。
自分でもいろいろと勉強不足な部分もあったのでもっと調べてみたいと思います。



こちらはタイトルとは関係ありませんが、過去ログ検索ページ(http://dixq.net/board/log/ の方)で検索すると、「非対象のサーバーです」と表示されて検索できなくなっているようなので、一応こちらで報告しておきます。


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



Name: さぷお  ..ぴよぴよ(203ポイント)   Date: 2010/05/25(火) 19:27   No:52771       
Title: 文字列描写の消去    
先月からDXライブラリでプログラミングを始めた者です。

描写している物の消去について分からない事があるので質問しました

------------------------------------------------------------------------------------------------------------------------------
#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
        if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 
 
        char Key[256];
        int White;
        White   = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得

        LoadGraphScreen( 0 , 0 , "back.png" , TRUE ) ;//背景表示

        while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
               if( Key[ KEY_INPUT_RIGHT ]  == 1 )      //右ボタンが押されたら
                       DrawString(  0,  0, "hello! DX Library!" , White);            //文字列表示
         }
 
        DxLib_End() ;                   // DXライブラリ使用の終了処理
        return 0 ;                      // ソフトの終了
}

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

この様に背景画像を表示をした後に文字列を描写したら、文字列だけを消すことはできないのでしょうか?
それとも、上からもう一度背景画像を表示するようにしないといけないのでしょうか?

もし文字だけを消せるのであれば、画像を重ねる時より処理は速くなるのでしょうか


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


Name: ru  ..かけだし(2,399ポイント)   Date: 2010/05/25(火) 19:39   No:52774     
Title: Re:文字列描写の消去    
#include "DxLib.h" 
  
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{ 
        ChangeWindowMode( TRUE ) ; // ウインドウモードに変更 
        if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了  
        SetDrawScreen( DX_SCREEN_BACK );
  
        char Key[256]; 
        int White; 
        White   = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得 

        int graph = LoadGraph("back.png"); // 画像読込

        while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
        { 
            DrawGraph(0, 0, graph, TRUE); // 背景表示

            if( Key[ KEY_INPUT_RIGHT ]  == 1 )      //右ボタンが押されたら 
                DrawString(  0,  0, "hello! DX Library!" , White);            //文字列表示 

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



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



Name: kazuoni [URL]  ..ハッカー(142,707ポイント)   Date: 2010/05/24(月) 11:04   No:52654       
Title: DXライブラリ 文字列の透過    
お邪魔します。

現在、ある画像に文字列を描写し、その文字列(日本語文字を含めた)
を透過した画像を動的に生成しようと考えています。

背景と文字列の色が被らないという前提で、以下の様に考えました。

0、文字列に描写したい色をSetTransColorでセット
1、MakeScreenでハンドル生成
2、1で確保したところに文字列を描写
3、Screenを戻し、描写→文字列透過

と考えていたのですが、文字列は透過されませんでした。
どこかおかしな点があるでしょうか?

よろしくお願いします。


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


Name: Ma  ..ハッカー(101,052ポイント)   Date: 2010/05/24(月) 11:52   No:52656     
Title: Re:DXライブラリ 文字列の透過    
んー、それだと、完全に透明なハンドルになりませんか?
正しくは

2、1で確保したところに、「画像を描画して次に」(SetTransColorで指定した色を持つ)文字列を描写 
ではないでしょうか?

追記
マスキングしてもいいでしょう。 編集済み


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

Name: Justy  ..伝説なるハッカー(536,850ポイント)   Date: 2010/05/24(月) 13:46   No:52659     
Title: Re:DXライブラリ 文字列の透過    
 SetTransColorなんて不要でしょう。

1 SetDrawValidAlphaChannelGraphCreateFlag(TRUE)を呼んでから
MakeScreenでハンドル生成

2 描画先を1にして文字列描画
3 描画先を元に戻し、1を透過有りで描画

 これでいいんじゃないですか?


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

Name: kazuoni  ..ハッカー(142,894ポイント)   Date: 2010/05/25(火) 04:05   No:52718     
Title: Re:DXライブラリ 文字列の透過    
返信が遅れて申し訳ありませんでした。

>SetDrawValidAlphaChannelGraphCreateFlag(TRUE)
を用いてみましたが、文字列は透過されず、代わりに背景が透過されているようです。


少し追記をさせていただきます。
描写先に指定したスクリーンには普通に何かを描写するかもしれないですが、
とにかく文字列に指定した色を透過色とし、そのハンドルを描写するときは
指定したところを透過する画像にしたいです。(結局は文字列を透過したい)
たしかにTransColorは使用したくはないのですが、自分にはこれぐらいしか思い浮かばなかったもので。


> マスキング
やはり最善はこれですかね。
一応この方法はうまくいっているのですが、
画像一枚に一発で透過できたら便利かなと思いまして質問させていただいた次第です。


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

Name: HK  ..入門者(4,505ポイント)   Date: 2010/05/25(火) 12:26   No:52743     
Title: Re:DXライブラリ 文字列の透過    
1.SetDrawValidGraphCreateFlag
 で描画可能グラフハンドル作成可能にする

2.SetDrawValidAlphaChannelGraphCreateFlag
 でαch描画可能グラフハンドル作成可能にする

3.MakeGraph
  で描画可能グラフハンドル作成

4.SetDrawValidAlphaChannelGraphCreateFlag 
 でαch描画可能グラフハンドル作成を閉じる

5.SetDrawValidGraphCreateFlag
 で描画可能グラフハンドル作成を閉じる

の手順で描画可能な画像を1枚作り、描画手順は以下のように。

SetDrawScreen 
で描画先を、先ほど作ったグラフハンドルに指定して、文字を描画。

SetDrawScreen で描画先を元に戻す

ループ部分で
DrawRotaGraph で先ほど描画したものを描画
ループ抜けたら破棄


これで、私は文字を拡大縮小したり回転したり、半透明にさせたりして描画することに成功しました。
半透明に関しては、DrawRotaGraphの描画の直前に SetDrawBlendMode で透明度を変更しました。


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

Name: Justy  ..伝説なるハッカー(535,259ポイント)   Date: 2010/05/25(火) 18:17   No:52762     
Title: Re:DXライブラリ 文字列の透過    
 あー、なるほど。失礼しましました。
 フォントの部分を透過な訳ですね。

 マスクでいいと思います。

 或いは(指定した色を透過色にはできませんが)別の方法としては
Zバッファを使うという手もあります。

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    ChangeWindowMode(TRUE);
    
    if(DxLib_Init() < 0)    return 1;
    
    SetUseZBufferFlag(TRUE);
    SetWriteZBufferFlag(TRUE);
    
    SetDrawValidAlphaChannelGraphCreateFlag(TRUE);
    int renderTexture = MakeScreen(640, 480);
    SetDrawValidAlphaChannelGraphCreateFlag(FALSE);
    
    int bg = LoadGraph("bg.jpg");         // フォント以外に表示
    int font_bg = LoadGraph("font_bg.jpg"); // フォントのところに表示
    
    while(!ProcessMessage())
    {
        // Zバッファイメージを作成
        SetDrawScreen(renderTexture);
        ClearDrawScreen();
        DrawFormatString(100, 100, 0xffffff, "%d", 123456789);
        DrawFormatString(200, 300, 0xffffff, "%d", 123456789);
        
        // バックバッファへ切り替え
        SetDrawScreen(DX_SCREEN_BACK);
        ClearDrawScreen();
        SetWriteZBufferFlag(FALSE);
        
        // (コメントアウトを解除すると)フォントのところの絵を表示
        // DrawGraph(0, 0, font_bg, FALSE);
        
        // renderTextureの黒いところ(フォント以外)に bgを書き込む
        DrawGraphToZBuffer(0,0, renderTexture, DX_ZWRITE_MASK);
        DrawGraph(0, 0, bg, FALSE);
        
        ScreenFlip();
    }
    
    DeleteGraph(renderTexture);
    DeleteGraph(bg);
    DeleteGraph(font_bg);
    
    DxLib_End();
    
    return 0;
}


 こうするとフォントのところだけ背景色(或いは font_bg)になり、フォント以外は bgが
表示されます。


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



Name: 紅葉  ..中級者(14,620ポイント)   Date: 2010/05/24(月) 05:52   No:52649       
Title: 3dsMAX9について    
C言語の質問ではないです。
ここで不適切な質問でしたら締めさせて頂きますので
言って頂けますと助かります。

ネットで3dsMAX9を購入しました。(古いVerということもありかなり安かったので)
学校で同じ3dsMAX9を使っているのですがどうも仕様が違います。

設定の問題だと思うのですがオブジェクトを
回転・移動させる時にそれぞれの軸の矢印?が出てきません。
その為1つの軸の回転や移動しかできません。
かなり困っています・・・。

又、ポリゴンを押し出ししたりすると
メッシュが掛かっているような感じになってしまいます。

状況を上手く伝えていないので回答が難しいかと思いますが
どなたかお分かりになる方はいらっしゃらないでしょうか?


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


Name: softya [URL]  ..ハッカー(166,569ポイント)   Date: 2010/05/24(月) 09:13   No:52651     
Title: Re:3dsMAX9について    
確認してみてください。
・ビデオカードは十分高性能ですか?
・最新のビデオドライバですか?
・DirectXとOpenGLのどちらを使う設定になっていますか?切り替えるとうまく動きませんか?
あたりが怪しいです。


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

Name: 紅葉  ..中級者(14,764ポイント)   Date: 2010/05/24(月) 10:09   No:52653     
Title: Re:3dsMAX9について    
回答ありがとうございます。

原因はiniファイルでした。

全て最新です。スペックも多分問題ないかと思います。
3つの目はどこで変えるのかわからなかった為、確認しておりません。

iniファイルを削除して環境設定を初期化した所
表示されるようになりました。
しかし又、問題が発生してしまいました。
添付させていただいた画像の様にメッシュ?が
かかったようなポリゴンになり陰まで勝手についております。
頂点数等は正常なのですがこれは解決できないのでしょうか?


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

Name: softya [URL]  ..ハッカー(166,603ポイント)   Date: 2010/05/24(月) 11:12   No:52655     
Title: Re:3dsMAX9について    
グーローシェーディングが有効になっている様に見えますね。
流石にMAXにそこまで詳しくないので、表示系の設定を見直してみてください。


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

Name: 紅葉  ..中級者(14,879ポイント)   Date: 2010/05/24(月) 18:43   No:52671     
Title: Re:3dsMAX9について    
回答ありがとうございます。
3Dはほとんどわからないので単語が出てきただけでも非常に助かりました。
表示系の設定を探してみたのですが見つかりませんでした。
何かわかりましたら回答マークをつけさせて頂きます。

もし他に改善できそうなことがありましたら教えて頂けますと助かります。


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

Name: softya [URL]  ..ハッカー(166,611ポイント)   Date: 2010/05/24(月) 18:54   No:52672     
Title: Re:3dsMAX9について    
プレビュー系の設定のメニューの画像があったらなにか分かるかも知れません。
それらしきものでも構いません。


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

Name: 紅葉  ..中級者(14,961ポイント)   Date: 2010/05/24(月) 19:07   No:52674     
Title: Re:3dsMAX9について    
回答ありがとうございます。
設定系の項目が見つからないのでメニューの画像を載せさせて頂きます。

モデルを線のみで表示すると頂点が増えていないので
やはり表示系が怪しそうです。


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

Name: softya [URL]  ..ハッカー(166,651ポイント)   Date: 2010/05/24(月) 19:16   No:52677     
Title: Re:3dsMAX9について    
なんかモデルのメニューみたいだけど(字が潰れていて読めませんが・・・)、ツールとかファイルメニューとかに全体的な3DS MAX自体の設定のメニューは無いでしょうか?

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

Name: 紅葉  ..上級者(15,258ポイント)   Date: 2010/05/25(火) 01:42   No:52713     
Title: Re:3dsMAX9について    
色々設定を弄って
パースぺクティブ→右クリック→設定から
ビューポート設定のレンダリング方法→レンダリングレベル→フラットシェーディング
にしたら正しく表示されるようになりました。

但し吐き出したりレンダリングをしてしまうと正しく表示できないです。
又、一度Maxを閉じてしまうと設定し直さないといけません。
これは仕様なのでしょうか?


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

Name: softya [URL]  ..ハッカー(166,696ポイント)   Date: 2010/05/25(火) 09:39   No:52729     
Title: Re:3dsMAX9について    
マルチポストしましたね?
http://stmomo.jp/modules/newbb/viewtopic.php?topic_id=4055&forum=2
規約に従ってください。



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

Name: ムンバ  ..熟練のプログラマー(51,978ポイント)   Date: 2010/05/25(火) 18:00   No:52761     
Title: Re:3dsMAX9について    
こんにちは。

見当違いのサイトだったら申し訳ないんですけど、検索で

ttp://shinjuwankougeki.web.fc2.com/

なんですけど・・・マルチポストだったんですね?
失礼しました。


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



Name: パコネコ  ..ぴよぴよ(95ポイント)   Date: 2010/05/24(月) 23:33   No:52691       
Title: DXライブラリを手に入れる    
今まで「スタディC」というものを使ってC言語を勉強していたのですがずっとこのままでは
行けないと思い部活の先生の勧めでここで勉強させてもらおうと思ったのですが…
0. (導入)DXライブラリを手に入れる。(全てはココから) で、
ダウンロードしてみたのですが…SLNが起動できません
起動するために必要なものがわかりませんどなたか教えていただきませんか?
お願いします。


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


Name: ru  ..かけだし(1,867ポイント)   Date: 2010/05/24(月) 23:41   No:52694     
Title: Re:DXライブラリを手に入れる    
http://www.microsoft.com/japan/msdn/vstudio/express/


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

Name: パコネコ  ..ぴよぴよ(316ポイント)   Date: 2010/05/24(月) 23:46   No:52696     
Title: Re:DXライブラリを手に入れる    
Visual C++ 2010 Express であってますか?

「DxLib_VC2003用.sln」または「DxLib_VC2005用.sln」または「DxLib_VC2008用.sln」を開いて下さい。(※ファイル名は今後変わる可能性があります)
自分のコンパイラに合わせた物を開いたらよいですが、よく分からない人は2008を開いて下さい。
(仮に間違ったファイルを選択しても勝手にソフトが変換してくれるので間違っていても大丈夫です)

ダウンロードしてみたのですがSLNファイルが起動できません↑のやつ
どうしたらいいでしょうか?
お力をお貸しください


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

Name: ru  ..かけだし(1,913ポイント)   Date: 2010/05/24(月) 23:51   No:52697     
Title: Re:DXライブラリを手に入れる    
Visual C++ 2010 Express
インストールしてください


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

Name: パコネコ  ..ぴよぴよ(396ポイント)   Date: 2010/05/24(月) 23:57   No:52698     
Title: Re:DXライブラリを手に入れる    
インストールって保存したりであってますか?
子もプログラムは起動できませんとなってしまいます
ワイのやり方が悪いのでしょうか?
何か足りないのでしょうか?
何度も回答してもらっているのにごめんなさい


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

Name: パコネコ  ..ぴよぴよ(494ポイント)   Date: 2010/05/25(火) 00:00   No:52699     
Title: Re:DXライブラリを手に入れる    
上の間違えました
子もプログラムは起動できませんではなく
このファイルは開けませんでした
ごめんなさい


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

Name: ru  ..かけだし(1,926ポイント)   Date: 2010/05/25(火) 00:01   No:52700     
Title: Re:DXライブラリを手に入れる    
保存したら
vc_web.exeを実行してください


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

Name: パコネコ  ..ぴよぴよ(566ポイント)   Date: 2010/05/25(火) 12:07   No:52741     
Title: Re:DXライブラリを手に入れる    
実行するんですね
ありがとうございます
実行するために更新プログラムのインストールというのが必要だったので
ずっとその作業をしていました
お礼が遅れてごめんなさい
今実行中なので後で成功したかだけ書いときます


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

Name: パコネコ  ..ぴよぴよ(661ポイント)   Date: 2010/05/25(火) 13:58   No:52747 解決!     
Title: Re:DXライブラリを手に入れる    
無事に起動することに成功しました
ruさん何度も教えてくださってありがとうございました
また質問することがあると思いますので…その時もできれば「またこいつか」などと思わず教えてくださいね


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



Name: 月夜  ..ぴよぴよ(28ポイント)   Date: 2010/05/25(火) 12:40   No:52745       
Title: ゲームの素材    
勉強用にアクションゲームを作ろうとしているのですが
ゲームの素材画像が置いてありそうな場所とかってないでしょうか?
配布する予定はないのですが無料のものを教えて頂けますと助かります。


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




Name: Ten  ..ぴよぴよ(8ポイント)   Date: 2010/05/24(月) 14:22   No:52661       
Title: 構造体について分かりません    
C言語の課題がわからない問題があったので、教えてください。

『氏,名,電話番号からなる番号簿をつくれ.さらに番号簿の任意の項目(例えば,氏)を入力すると該当するすべての人物のデータが表示されるようにせよ.なお,個人データは,構造体配列で持つこと.』という課題が出たのですが全く分かりません。解答を教えてください。


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


Name: 紅葉  ..上級者(15,150ポイント)   Date: 2010/05/24(月) 19:13   No:52676     
Title: Re:構造体について分かりません    
環境と貴方が理解している段階がわからないのでまずはそれを記載して下さい。

構造体と配列は理解できるでしょうか?
構造体とは複数の変数をパッケージ化したものです。
配列とは同じ様な変数の型を連番で扱うことです。

typedef struct{
  char name1[8]; // 配列のサイズは適当です
  char name2[8];
  char phone[16];
}NAME;

NAME name[生徒数];

このように宣言すれば値を格納する構造体ができます。
name[0].name1のようにすればアクセスすることが出来ます。
これらを使えば解決できるかと思います。


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

Name: Ten  ..ぴよぴよ(81ポイント)   Date: 2010/05/24(月) 19:37   No:52678     
Title: Re:構造体について分かりません    
#include <stdio.h>

#define PERSON_NUM 5

typedef struct {
    char si[20];
    char mei[20];
    int tel;
    } person_t;

main()
{
    person_t p[PERSON_NUM] = {{1,"Yamada","Tarou",0766566161},
                              {2,"Tanaka","Asuka",0546734565},
                              {3,"Suzuki","Ken",0715242523},
                              {4,"Yamashita","Rei",4267845225},
                              {5,"Kinoshita","Shinji",5127325352}};


までは分かりますが、ここから任意の項目(例:Yamada)が入力されると、該当するすべての人物の
データが表示されるようにするところがわかりません。


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

Name: たいちう  ..比類無きプログラマー(84,960ポイント)   Date: 2010/05/24(月) 19:51   No:52679     
Title: Re:構造体について分かりません    
> までは分かりますが、ここから任意の項目(例:Yamada)が入力されると、該当するすべての人物の
> データが表示されるようにするところがわかりません。

一度に全部作ろうとせず、まずはこの5人分のデータを全て表示するプログラムを作りましょう。
それが難しければ、一人目のデータを全て表示するプログラムを。


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

Name: 紅葉  ..上級者(15,284ポイント)   Date: 2010/05/24(月) 19:55   No:52680     
Title: Re:構造体について分かりません    
試していないので何とも言えないですが下記の様にしていけないでしょうか?
また変数の型に問題点が御座います。
NOを保存する型がないですよね?
又、int型なのに0から始まってしまっております。
デバックに通りましたか?

for(int i=0; i<PERSON_NUM; i++){
    if( p[i].si == "入力された文字列"){
        printf("%s",p[i].si);
    }
}



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

Name: toyo  ..熟練のプログラマー(46,814ポイント)   Date: 2010/05/24(月) 20:30   No:52681     
Title: Re:構造体について分かりません    
質問とは関係なくて恐縮ですがCでは0で始まる数字は8進数になります
010は10進数で8です
    person_t p[PERSON_NUM] = {{1,"Yamada","Tarou",0766566161},
                              {2,"Tanaka","Asuka",0546734565},
                              {3,"Suzuki","Ken",0715242523},
                              {4,"Yamashita","Rei",4267845225},
                              {5,"Kinoshita","Shinji",5127325352}}; 

ではたまたま0で始まる数値に8以上の数がないのでエラーになりませんが078とかいう数値を使うとエラーになると思います
電話番号もchar配列のほうがいいと思いますよ


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

Name: Ten  ..ぴよぴよ(470ポイント)   Date: 2010/05/24(月) 21:14   No:52683     
Title: Re:構造体について分かりません    
#include <stdio.h>

#define PERSON_NUM 5

typedef struct {
    char number;
    char si[20];
    char mei[20];
} person_t;

int main(void)
{
    int i;
    char a[20];
    person_t p[PERSON_NUM] = {{1,"Yamada","Asuka"},
                              {2,"Tanaka","Tarou"},
                              {3,"Suzuki","Ken"},
                              {4,"Yamashita","Rei"},
                              {5,"Kinoshita","Shinji"}};


printf(":"); scanf("%s",a);
for(i=0;i<PERSON_NUM;i++){
    if (strcmp(p[i].si,a)==0){
        printf("%s\n",p[i].number);
        printf("%s\n",p[i].si);
        printf("%s\n",p[i].mei);
    }
}
return(0);} 


このようなプログラムを作ったのですが、「Yamada」と入力すると、「セグメンテーション違反です」と出るのですが、なぜでしょう?


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

Name: ideyan  ..初心者(5,561ポイント)   Date: 2010/05/24(月) 22:00   No:52687     
Title: Re:構造体について分かりません    
p[i].numberは配列じゃないのに%sを使っているからでは?

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

Name: 紅葉  ..上級者(15,374ポイント)   Date: 2010/05/25(火) 00:49   No:52702     
Title: Re:構造体について分かりません    
char numberが理解できないのですが文字列の扱い方はわかりますか?
Noを格納するならint型にし%sを%dにして下さい。
基本が載っているサイトを一度見直してきてはいかがでしょうか?


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

Name: asd  ..上級者(20,635ポイント)   Date: 2010/05/25(火) 10:18   No:52731     
Title: Re:構造体について分かりません    
>紅葉さん
>char numberが理解できないのですが文字列の扱い方はわかりますか?
>Noを格納するならint型にし%sを%dにして下さい。

いやいや、これはtoyoさんの投稿にある、

>ではたまたま0で始まる数値に8以上の数がないのでエラーになりませんが078とかいう数値を使うとエラーになると思います
>電話番号もchar配列のほうがいいと思いますよ 

の指摘を受けてchar型に変えたものと思います。
今回は0で始まる数値に8以上の数値が含まれていないためたまたまうまくいきますが、
int型にしてしまうと09012345678のような電話番号はエラーになってしまいます。

#紅葉さんも是非基本が載っているサイトを一度見直すことをお勧めします。


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

Name: 紅葉  ..上級者(15,395ポイント)   Date: 2010/05/25(火) 10:29   No:52734     
Title: Re:構造体について分かりません    
すみません。
他の方の回答をあまり読んでいませんでした。
投稿されたソースでは1〜の連番だったのでてっきり0は入らないのかと・・・。
0から始めると皆様が言っている通り進数が変わってしまったりするので
電話番号をchar型にした方がよいと初めに書いたのは私なのですが・・・。

それでも見直してくる必要があるでしょうか?


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

Name: asd   Date: 2010/06/02(水) 15:26   No:526611275460017     
Title: Re:構造体について分かりません    
> すみません。
> 他の方の回答をあまり読んでいませんでした。
> 投稿されたソースでは1〜の連番だったのでてっきり0は入らないのかと・・・。
> 0から始めると皆様が言っている通り進数が変わってしまったりするので
> 電話番号をchar型にした方がよいと初めに書いたのは私なのですが・・・。

これは失礼いたしました。
最初の構造体宣言で一度char型にて定義されていましたね。

しかし電話番号をchar型にしたほうがよいと仰るのであれば、
なぜ

>Noを格納するならint型にし%sを%dにして下さい。

のような助言が出るのか不思議でなりません。
最初の時点ではchar型(文字列)での保持を書かれていたのに、
次の投稿ではint型を使うことを奨励してしまっているわけですから。

誤読をしてしまった私も悪いのですが、最初はchar型を推奨し、文字列の扱いが誤っていた際に
charの配列を使うよう助言をせずint型を奨励した意図が分かりません。
態度が一貫していないと思うのですが・・・
それでなお「最初にchar型と書いたのは自分だ」と言われると説得力がないと思います。





 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +