C言語何でも質問掲示板


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

 
   龍神録26章にて   
     ・[33151] Justy 
     ・[33153] アキシアル 
   整数の割り算について   
     ・[33150] たかぎ 
     ・[33152] tuka 
   奇数の和   
     ・[33126] MNS 
     ・[33128] kyou 
     ・[33129] さが 
     ・[33130] たいちう 
     ・[33132] conio 
     ・[33133] kyou 
     ・[33135] Mist 
     ・[33136] conio 
     ・[33138] kyou 
     ・[33140] Mist 
     ・[33142] conio 
     ・[33149] たかぎ 
   素材と音楽がダウンロ ....   
     ・[33147] Justy 
   ライブラリを作りたい ....   
     ・[33005] 御津凪 
     ・[33146] たかぎ 
   c言語   
     ・[33125] MNS 
     ・[33127] ajto 
     ・[33144] たかぎ 
   外部ファイルで設定   
     ・[33086] box 
     ・[33087] さが 
     ・[33088] box 
     ・[33091] さが 
     ・[33097] たかぎ 
     ・[33098] たかぎ 
     ・[33107] さが 
     ・[33115] たかぎ 
     ・[33131] さが 
     ・[33139] さが 
   2プレイヤーの操作分 ....   
     ・[33109] situmon 
     ・[33122] 氷水華 
   リストのソート   
     ・[33113] Justy 
     ・[33114] たかぎ 
     ・[33117] ちゅん 
   当たり判定   
     ・[33105] situmon 
     ・[33106] yu 
     ・[33110] poc 
   実行ファイルの容量   
     ・[33083] 初級者 
     ・[33085] チルチル 
     ・[33089] box 
     ・[33092] チルチル 
     ・[33094] たかぎ 
     ・[33099] チルチル 
     ・[33102] たかぎ 
   ファイル名が不明な場 ....   
     ・[33070] non 
     ・[33071] MNS 
   龍神録レーザー部での ....   
     ・[33009] MNS 
     ・[33010] あ〜る 
     ・[33011] box 
     ・[33012] あ〜る 
     ・[33013] あ〜る 
     ・[33015] あ〜る 
     ・[33016] MNS 
     ・[33017] Justy 
     ・[33019] あ〜る 
     ・[33028] Dixq (管理人) 
     ・[33050] あ〜る 
     ・[33051] Dixq (管理人) 
     ・[33065] あ〜る 
   おたずねしたいのです ....   
     ・[32986] NI 
     ・[32987] hj 
     ・[32988] SooA 
     ・[32990] 羽球好き 
     ・[33029] Dixq (管理人) 
     ・[33039] たかぎ 
     ・[33054] Dixq (管理人) 
     ・[33064] たかぎ 
   while文を利用して   
     ・[33052] Dixq (管理人) 
     ・[33056] conio 
     ・[33059] kyou 
     ・[33060] MNS 
     ・[33061] kyou 
     ・[33062] クロウ 
     ・[33063] kyou 
   質問   
     ・[33053] Dixq (管理人) 
   エラー   
     ・[33041] バグ 
     ・[33047] situmon 
   break文   
     ・[33037] バグ 
     ・[33038] situmon 
   意味がよくわかりませ ....   
     ・[33035] situmon 
   龍神録プログラミング ....   
     ・[32997] yyy 
     ・[32998] kazuoni 
     ・[33026] NI 
     ・[33027] Dixq (管理人) 
     ・[33033] yyy 
   画像の擬似3D表示につ ....   
     ・[32999] Justy 
     ・[33000] YK 
     ・[33002] Justy 
     ・[33003] YK 
     ・[33004] Justy 
     ・[33020] YK 
     ・[33021] Justy 
     ・[33022] YK 
     ・[33023] Justy 
     ・[33024] YK 
     ・[33025] Justy 
     ・[33031] YK 
   卒業研究としてのシュ ....   
     ・[32817] Dixq (管理人) 
     ・[32835] こめかみ 
     ・[32836] Dixq (管理人) 
     ・[32880] こめかみ 
     ・[32910] Dixq (管理人) 
     ・[32927] はね 
     ・[32978] こめかみ 
     ・[32981] はね 
     ・[32992] こめかみ 
     ・[328021242639038] こめかみ 
   表示に関する質問   
     ・[32991] Mato 
   凄く初歩的な質問です   
     ・[32983] Dixq (管理人) 
     ・[32984] ゴルビー 
   ポインタのサイズ   
     ・[32933] toyo 
     ・[32934] 研修生 
     ・[32935] box 
     ・[32936] 研修生 
     ・[32937] Blue 
     ・[32938] Blue 
     ・[32942] 研修生 
     ・[32948] dic 
     ・[32949] dic 
     ・[32950] dic 
     ・[32951] dic 
     ・[32952] dic 
     ・[32979] YuO 
     ・[32982] dic 
   宣言の仕方を工夫しよ ....   
     ・[32954] はね 
     ・[32955] NI 
     ・[32956] pooka 
     ・[32957] NI 
     ・[32958] pooka 
     ・[32959] NI 
     ・[32961] さが 
     ・[32962] NI 
     ・[32963] pooka 
     ・[32964] NI 
     ・[32965] NI 
     ・[32966] pooka 
     ・[32967] dic 
     ・[32968] NI 
     ・[32970] pooka 
     ・[32971] NI 
     ・[32973] pooka 
     ・[32975] NI 
     ・[32976] pooka 
     ・[32977] NI 
   龍神録の自機ショット ....   
     ・[32904] Kou 
     ・[32972] Q 
     ・[32974] Q 
   少し難しくしてもう一 ....   
     ・[32767] チルチル 
     ・[32787] situmon 
     ・[32790] めいらる 
     ・[32791] チルチル 
     ・[32793] yu 
     ・[32794] situmon 
     ・[32795] チルチル 
     ・[32800] あ〜る 
     ・[32811] situmon 
     ・[32833] チルチル 
     ・[32841] situmon 
     ・[32850] チルチル 
     ・[32854] situmon 
     ・[32857] チルチル 
     ・[32859] situmon 
     ・[32874] チルチル 
     ・[32875] situmon 
     ・[32885] チルチル 
     ・[32886] BEMANI 
     ・[32919] situmon 
     ・[32920] yu 
     ・[32925] situmon 
     ・[32926] yu 
     ・[32930] BEMANI 
     ・[32969] situmon 
   ポインタのサイズ2   
     ・[32944] YuO 
     ・[32946] 研修生 
   組み込み   
     ・[32940] non 
     ・[32941] ユズ 
   暗黙の型変換   
     ・[32897] 御津凪 
     ・[32898] 研修生 
     ・[32901] 御津凪 
     ・[32905] 研修生 
     ・[32906] 御津凪 
     ・[32907] 研修生 
     ・[32911] 御津凪 
     ・[32915] たかぎ 
     ・[32931] 研修生 
   Escキーで終了   
     ・[32929] Justy 
   導入してますがサンプ ....   
     ・[32882] こめかみ 
     ・[32883] Justy 
     ・[32908] Konno 
     ・[32921] Justy 
     ・[32923] Konno 
     ・[32924] Konno 
   弾の精度について   
     ・[32912] Kou 
     ・[32913] YB 
     ・[32914] チルチル 
     ・[32917] YB 
     ・[32918] Kou 
   無題   
     ・[32903] 御津凪 
   scanf   
     ・[32890] たかぎ 
     ・[32891] 研修生 
     ・[32892] toyo 
     ・[32894] たかぎ 
     ・[32895] 研修生 
     ・[32899] 研修生 
     ・[32900] toyo 
     ・[32902] toyo 
   お願いします   
     ・[32815] Dixq (管理人) 
     ・[32852] ポン 
     ・[32893] conio 
   オブジェクトを動的に ....   
     ・[32887] kazuoni 
   無題   
     ・[32804] 御津凪 
     ・[32881] maam 
   無題   
     ・[32867] コンボボックス 
     ・[32870] さが 
     ・[32872] コンボボックス 
     ・[32877] コンボボックス 
   シューティングゲーム ....   
     ・[32819] Dixq (管理人) 
     ・[32820] situmon 
     ・[32824] Dixq (管理人) 
     ・[32826] MNS 
     ・[32827] situmon 
     ・[32828] Dixq (管理人) 
     ・[32829] situmon 
     ・[32830] MNS 
     ・[32831] situmon 
     ・[32876] situmon 
   コンボボックスとエデ ....   
     ・[32848] Mist 
     ・[32865] なめこ 
   弾幕のスペルの表示   
     ・[32853] チルチル 
     ・[32855] ひよこ 
     ・[32856] yu 
     ・[32858] ひよこ 
     ・[32860] yu 
     ・[32861] ひよこ 
     ・[32863] BEMANI 
     ・[32864] ひよこ 
   サンプルプログラムが ....   
     ・[32838] 初級者 
     ・[32842] MGN 
     ・[32843] Mist 
     ・[32862] MGN 
   拙い質問で恐縮なので ....   
     ・[32846] Ma 
     ・[32847] 小僧寿司チェーン 
   時間がない   
     ・[32814] Dixq (管理人) 
     ・[32818] エデリュス 
     ・[32821] MNS 
     ・[32822] yu 
     ・[32823] Dixq (管理人) 
     ・[32825] エデリュス 
   無題   
     ・[32816] Dixq (管理人) 
   クラスへのポインタの ....   
     ・[32806] toyo 
     ・[32807] 御津凪 
     ・[32808] ちゅん 
   BorlandC++ ....   
     ・[32801] Justy 
     ・[32803] 256bit 
   無題   
     ・[32783] kazuoni 
     ・[32786] ひで 
   ウィンドウ終了処理   
     ・[32764] Justy 
     ・[32765] さが 
     ・[32768] Justy 
     ・[32785] さが 
   配列で実現した待ち行 ....   
     ・[32784] kazuoni 
   MessageBox について   
     ・[32769] Justy 
     ・[32771] Ma 
     ・[32773] SooA 
     ・[32775] Ma 
     ・[32778] Justy 
     ・[32781] Ma 
   【雑談?】ポインタの ....   
     ・[32655] MNS 
     ・[32656] toyo 
     ・[32657] toyo 
     ・[32659] toyo 
     ・[32660] box 
     ・[32661] march3 
     ・[32663] MNS 
     ・[32664] march3 
     ・[32666] toyo 
     ・[32670] box 
     ・[32739] 通りすがり 
     ・[32740] 通りすがり 
     ・[32776] march3 
   APIで背景の色?   
     ・[32293] ランド 
     ・[32296] スレ 
     ・[32301] ランド 
     ・[32302] スレ 
     ・[32304] lbfuvab 
     ・[32311] toyo 
     ・[32356] 遠藤 
     ・[32359] 遠藤 
     ・[32364] toyo 
     ・[32397] 遠藤 
     ・[32404] 遠藤 
     ・[32408] toyo 
     ・[32416] 遠藤 
     ・[32491] toyo 
     ・[32766] 遠藤 
   画像の上下反転につい ....   
     ・[32742] SooA 
     ・[32755] ubuntu 
     ・[32758] SooA 
     ・[32759] SooA 
     ・[32760] ubuntu 
     ・[32761] ubuntu 

Name: アキシアル  ..ぴよぴよ(161ポイント)   Date: 2009/05/06(水) 11:45   No:33137       
Title: 龍神録26章にて    
こんにちは。そして初めまして、アキシアルと申します。

龍神録をPSPに移植しようとして、プログラミングの館1章から確認しつつ作業していたのですが、
26章にて、「ボスをボムを使用して倒す、又はボスをプレイヤー死亡処理中に倒すとフリーズしてしまう」
というバグが出るようになってしまいました。

printfDxを利用して確認してみると、boss.x、boss.yの値がおかしかったので、boss_shot.cpp内の
calc_phy()にある

boss.x=boss.phy.prex-((boss.phy.v0x*t)-0.5*boss.phy.ax*t*t);//現在いるべきx座標計算

boss.y=boss.phy.prey-((boss.phy.v0y*t)-0.5*boss.phy.ay*t*t);//現在いるべきy座標計算


の部分をコメントアウトしてテストしてみると、ボスが移動しなくなる代わりにフリーズを起こすことは
なくなりました。

恐らくboss.xとboss.yがオーバーフローしているのではないかと思うのですが、

・ボスの移動とフリーズ回避を両立させる手段
・なぜボム使用時と死亡処理中にのみフリーズするのか

がわかりません。

キーコンフィグまわり以外にプログラムを変更していないので、現状ではほぼサンプルプログラムと
同じだと思います。

使用環境はWindows Vista Visual C++ 2008EE PSPSDKとDxライブラリPortableを使用しています。

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

最後に長文失礼致しました。


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


Name: Justy  ..伝説なるハッカー(350,901ポイント)   Date: 2009/05/06(水) 14:25   No:33151     
Title: Re:龍神録26章にて    

>部分をコメントアウトしてテストしてみると、ボスが移動しなくなる代わりに
>フリーズを起こすことは なくなりました

 この計算式で使われている変数のどれかが、未初期化 or 破壊されたなどの理由で
おかしな値になった結果、boss.x、boss.yの値もおかしくなっているのでしょう。

 なので、この式で使われているすべての変数をデバッガとかも使って見直して見てください。

 あと、DLできるサンプルと diffして自分が書いていないところ、間違って書いているところを
探してみるのもいいかもしれません。


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

Name: アキシアル  ..ぴよぴよ(331ポイント)   Date: 2009/05/06(水) 16:26   No:33153 解決!     
Title: Re:龍神録26章にて    
回答ありがとうございました。

diffを取ってみたところ、プログラムの中に FIELD_MAX_X,FIELD_MAX_Yという古い定数
(それぞれFMX,FMYに置き換えなければいけない定数です・・・)を見つけてしまいました・・・。
これが変数を破壊していたみたいで、修正したところフリーズも直りました。

お手数をおかけして申し訳ありませんでした。

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


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



Name: tuka  ..ぴよぴよ(39ポイント)   Date: 2009/05/06(水) 14:06   No:33148       
Title: 整数の割り算について    
以下のソースコードのようにsignedの整数値をunsignedの整数値で割ると演算結果がおかしくなりました。

例:

int a = -13;
unsigned int b = 22680;
int c = a / b;

とするとcの値が0にならない。

bの変数をsignedにすれば正しく計算されるのですが、なぜunsignedで割ると値がおかしくなるのでしょうか?
またできればunsignedで割りたいのですがよい回避策をご存知の方はいませんか?
環境はMicrosoft社のVisual Studioシリーズ OSはWindows XPです。

よろしくお願いします。



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


Name: たかぎ [URL]  ..比類無きプログラマー(99,605ポイント)   Date: 2009/05/06(水) 14:12   No:33150     
Title: Re:整数の割り算について    
> なぜunsignedで割ると値がおかしくなるのでしょうか?

「通常の算術型変換」によって、除算演算子の一方のオペランドがsigned、他方がunsignedである場合、signed側が暗黙的にunsignedに型変換されるからです。

> またできればunsignedで割りたいのですがよい回避策をご存知の方はいませんか?

unsignedで割った結果、どのようになることを期待していますか?


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

Name: tuka  ..ぴよぴよ(127ポイント)   Date: 2009/05/06(水) 14:31   No:33152 解決!     
Title: Re:整数の割り算について    
解説ありがとうございます。

符号付き整数を符号なし整数で割るのだから結果は符号付きだと思っていましたが、
unsignedが優先されてしまうのですね。
納得しました。


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



Name: kyou  ..ぴよぴよ(700ポイント)   Date: 2009/05/06(水) 09:17   No:33123       
Title: 奇数の和    
みなさん おはようございます。

先日も教えていただいて大変助かったのですが、
ひょっとするとこの掲示板は 私の質問のような
初歩の初歩を投稿するような 場所ではないのかな?
(みなさんかなり高度で(^^ゞ )

と 思いつつ、自分の生活まわりには"c言語"に
まったく無縁の方々ばかりで・・・ みなさんに
教えていただくしか 今の私にすべはないのです。

前おきが長くて申し訳ございません。

本題です。

for文を利用して

#include<stdio.h>

intmain(void)
{

inti,n,wa;

wa=0;
n=1;

scanf("%d",&n);
printf("\n入力値:%d",n);

for(i=1;i<=n;i=i+2){
wa=wa+n;
}
printf("\n合計値:%d",wa);
}

こんな感じまで考えてみたのですが、

実はこれを「奇数の和を求めて出力する(1から入力された値まで)」
プログラムを作成したいのです。

奇数の和?はどのようにすると求めることができるのでしょうか?

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




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


Name: MNS  ..初心者(7,726ポイント)   Date: 2009/05/06(水) 09:36   No:33126     
Title: Re:奇数の和    
for(i=1;i<=n;i=i+2){ 

wa=wa+n;
}


これは・・

for(i=1;i<=n;i=i+2){
wa=wa+i;
}


こうではないでしょうか?


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

Name: kyou  ..ぴよぴよ(749ポイント)   Date: 2009/05/06(水) 09:47   No:33128     
Title: Re:奇数の和    
MNS様

早速ありがとうございます。

私も何度もこうかなぁ〜と思いながら
残念ながら出来ません。

根本的にどこからか間違っているのでしょうか?


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

Name: さが  ..入門者(2,747ポイント)   Date: 2009/05/06(水) 10:10   No:33129     
Title: Re:奇数の和    
nが小さすぎです

追記 scanfを完全にスルーしていました。以後気をつけます。


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

Name: たいちう  ..プログラマー(26,891ポイント)   Date: 2009/05/06(水) 10:13   No:33130     
Title: Re:奇数の和    
難しいならば、段階的に作ってみましょう。
scanfで入力した値をnとして、

1)1からnまでを表示
2)1からnまでの和を表示
3)1からnまでの奇数を表示
4)1からnまでの奇数の和を表示

順番に完成させてください。
分からなければ、その部分について再度質問を。


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

Name: conio [URL]  ..上級者(15,140ポイント)   Date: 2009/05/06(水) 10:33   No:33132     
Title: Re:奇数の和    
---------------------------------------------------
#include<stdio.h>

int main(void)
{
 inti,n,wa;

 wa=0;
 n=1;

 scanf("%d",&n);
 printf("\n入力値:%d",n);

 for(i=1;i<=n;i=i+2){
   wa=wa+n;
 }
 printf("\n合計値:%d",wa);
}
---------------------------------------------------
上記のプログラムはとりあえず、"代入"ではなく"初期化"しておいた方が良いでしょう。
int wa = 0, n = 0;みたいに。

初期化を忘れると、合計が212753みたいな値になったりします。
なるべく初期化をしておいた方が良いと思います。

そして、途中でnに1を代入する操作はいらないでしょう。(scanf関数で値が設定される)

既に解答は出ていますが、一応 修正&追加したプログラムを書いてみました↓
---------------------------------------------------
#include<stdio.h>

int main (void){
 int i, n = 0, wa = 0;

 scanf("%d",&n);
 printf("\n入力値:%d \n",n);

 for(i = 1; i <= n; i += 2){
   wa += i;
   printf("%3d +",i);
 }
 printf("\b= %d \n",wa);
 printf("\n合計値:%d \n",wa);

 return(0);
}
---------------------------------------------------


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

Name: kyou  ..ぴよぴよ(618ポイント)   Date: 2009/05/06(水) 10:48   No:33133     
Title: Re:奇数の和    
konio様

ありがとうございます。



for(i = 1; i <= n; i += 2){
   wa += i;
   printf("%3d +",i);
 }
 printf("\b= %d \n",wa);
 printf("\n合計値:%d \n",wa);

 return(0);
}

上記の%3d+  と
\b の意味がわかりません。

ごめんなさい。もう泣きそうです。
弱音はダメですね。

もう少し頑張ります。



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

Name: Mist  ..熟練のプログラマー(59,936ポイント)   Date: 2009/05/06(水) 10:51   No:33135     
Title: Re:奇数の和    
> 上記のプログラムはとりあえず、"代入"ではなく"初期化"しておいた方が良いでしょう。

代入と初期化どう違うのか説明してほしいです。
変数が使用される前にあらかじめ値をセットしておくことが変数の初期化であって、それば宣言と同時であっても宣言後であってもなんら変わりはないと思いますが?


※後半の書き方がまずかったので修正します

> そして、途中でnに1を代入する操作はいらないでしょう。(scanf関数で値が設定される)

> scanf("%d",&n);

の場合数字以外の文字を入力された場合、nが不定値のままなのでnに初期値を設定することは意味があると思います。


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

Name: conio  ..上級者(15,295ポイント)   Date: 2009/05/06(水) 11:26   No:33136     
Title: Re:奇数の和    
>>Mistさん
「変数の生成時にある初期値を入れておく」のが "初期化"で、
「変数を生成した後に、値を入れる」のが "代入"だと記憶しております。

--------------------------------
int x = 0;//初期化

int x;
x = 0; //代入
--------------------------------

あとscanf関数についてですが、「例外は無いもの」として考えました。「必ず数値が入れられる」という前提です。
(文字を入力してしまった場合などは考えない)
あと、代入の変わりにn = 0で初期化してあるので、不定値にはならないようにしています。
(初期化するようにプログラムを変更した場合は、途中のn = 1はいらなくなる という意味)
n = 0;//初期化
n = 1;//←いらない
n = 5;//scanf関数で値が設定される

言葉足らずですいませんでした。



>>kyouさん
printf("%3d +",i);
まず %3d は「少なくとも3桁で表示」という意味です。
3桁の値ではない場合は、空白が埋められ 間隔が出来て見やすくなります。
(+ の方は単純に、"+"と表示させる為のものです。)
-----------------------------------------------------
for(int i = 1; i <= 3; i++)
 printf("%d", i);
【実行結果】
123

for(int i = 1; i <= 3; i++)
 printf("%3d", i);
【実行結果】
 1 2 3
-----------------------------------------------------

\bの方は「拡張表記」と呼ばれるものです。
(改行をする \n も拡張表記の一種です。)

\bは「表示位置を直前の位置へ移動させる」機能です。
キーボードのバックスペースを押して、文字を消す動作だと思ってください。

-----------------------------------------------------
printf("123");
printf("\b");
【実行結果】
12
-----------------------------------------------------

printf("%3d +",i);とprintf("\b= %d \n",wa);は式が分かりやすいようにするだけなので、
削除しても問題は無いです。


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

Name: kyou  ..ぴよぴよ(667ポイント)   Date: 2009/05/06(水) 12:04   No:33138     
Title: Re:奇数の和    
conio様 皆様

本当にご親切にありがとうございます。

皆さんに教えてもらったのをもとにいろいろ
検証し、理解していきたい思います。



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

Name: Mist  ..熟練のプログラマー(60,070ポイント)   Date: 2009/05/06(水) 12:06   No:33140     
Title: Re:奇数の和    
私が言いたかったのは、代入であれ初期化であれ変数を使用するまでに初期値がセットされているならば実行結果は同じであるのに初期化のほうをわざわざ勧められるのが不思議に思えただけです。
代入ではなく初期化を使うことで何かメリットがあるのでしょうか?
私が初期化を使うのが好きじゃない(ソースコードの可読性が下がる場合がある)からそう思うだけかもしれませんが。


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

Name: conio  ..上級者(15,547ポイント)   Date: 2009/05/06(水) 12:33   No:33142     
Title: Re:奇数の和    
>>Mistさん


---------------------------------------------------------------
>>初期化を忘れると、合計が212753みたいな値になったりします。
>>なるべく初期化をしておいた方が良いと思います。
---------------------------------------------------------------

すでに上記で述べた通りです。

代入だと、「途中で代入し忘れて値が不定のままになってしまう」可能性がありますので、
「変数を生成する時には必ず何らかの値で初期化しておくようにする」という様にしておけば
そのような問題はほぼ無くなるかと思います。

ですので、「なるべく初期化をしておいた方が良い」と勧めました。
(もちろん、あくまで個人的な考えなので 実際にどうするかは自由です)

あと、上記の "初期化を忘れると"は、 "値の設定を忘れると"の方が適切なので、
読み替えて欲しいと思います。


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

Name: たかぎ [URL]  ..比類無きプログラマー(99,542ポイント)   Date: 2009/05/06(水) 14:07   No:33149     
Title: Re:奇数の和    
> 私が言いたかったのは、代入であれ初期化であれ変数を使用するまでに初期値がセットされているならば実行結果は同じであるのに初期化のほうをわざわざ勧められるのが不思議に思えただけです。

実行結果が同じだからといって、どちらでもよいということにはなりませんね。
マジックナンバーを濫発しようが、スパゲッティコードだろうが、実行結果は同じなのになぜだめなのかというようなものです。

> 代入ではなく初期化を使うことで何かメリットがあるのでしょうか?

いくつかメリットがあります。

1. 初期化の意味で値を設定するのであれば、初期化のシンタックスを用いる方が自然である。
2. 宣言から初期値の代入までの間に、問題のあるコードを誤挿入するリスクがなくなる。
3. const修飾されたオブジェクトの場合、代入することができない。
4. 静的記憶域期間を持つ場合、スタートアップでゼロクリアするための実行時間が節約できる。
5. 集成体の場合、複数の代入を繰り返さなければならず、効率が低下する場合がある(C99では、構造体に複合リテラルを代入することが可能)。

逆に初期化では実現できない場合もあります。

1. 集成体の要素に定数式以外を設定する(ただし、C99では、自動記憶域期間の場合には可能)。
2. 要素を指定して値を設定する(C99では可能)。
3. 共用体の場合、最初のメンバ以外を初期化することができない(C99では可能)。


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



Name: ぴよぴよ  ..ぴよぴよ(671ポイント)   Date: 2009/05/06(水) 10:49   No:33134       
Title: 素材と音楽がダウンロードできない。    
シューティングゲームの館の素材と音楽をDLしようと思ったら、

「あなたが指定したファイルは見つかりません」http://dixq.net/zip/Sh.zip

とでます。

ファイルはどこにあるのでしょうか?


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


Name: Justy  ..伝説なるハッカー(350,614ポイント)   Date: 2009/05/06(水) 13:55   No:33147     
Title: Re:素材と音楽がダウンロードできない。    
 Sh.zipがどこにあるかはわかりませんが、必要なデータは同ページ下にある
「ソースとプロジェクトのダウンロード」の中にも入っていますので、
そちらを使ってみてはどうでしょう?


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



Name: ジジ  ..ぴよぴよ(142ポイント)   Date: 2009/05/03(日) 15:15   No:33001       
Title: ライブラリを作りたいのですが・・・    
DXライブラリで簡単なゲームは作れるようになったので
2Dゲーム製作用の自分用ライブラリを作ろうかと考えています。

そこで皆様に3点ほど質問があります。

1点目
完全自分用ライブラリの作成は無意味なのでしょうか?

2点目
ライブラリを作る際に画像の描画の仕方でも種類があると思うのですが
どれを選んだほうがよいのでしょうか?
(DirectXの2D描画、WindowsAPIの命令)等

3点目
これだけは絶対必要な関数
(メインループ、画像の読み込み、固定のFPSでまわす)等
基本的なことをお願いします。

ライブラリを作る際の解説サイトなどを教えていただけますと助かります。

お時間のあるときにご回答ください。


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


Name: 御津凪 [URL]  ..比類無きプログラマー(86,051ポイント)   Date: 2009/05/03(日) 16:43   No:33005     
Title: Re:ライブラリを作りたいのですが・・・    
> 完全自分用ライブラリの作成は無意味なのでしょうか?

無意味ではありません。
まず、そのライブラリが有用となれば、後続する自作ゲームの製作にも利用でき、
ゲーム製作時間の大幅な短縮が見込まれます。
また、そうでなかったとしても、どういう書き方がいけなかったのかや、
なぜ使いづらいのかなど、プログラミングとしての知識・技術が自然と身につきます。

> ライブラリを作る際に画像の描画の仕方でも種類があると思うのですが
> どれを選んだほうがよいのでしょうか?
> (DirectXの2D描画、WindowsAPIの命令)等

描画速度を意識しないのであれば、 WindowsAPI での描画関数を使用するという手はありますが、
当然 WindowsAPI の描画の仕組みを知る必要が有ります。

DirectX(OpenGL)は、ゲーム系のリアルタイム描画としては最適ですが、
それぞれ特有の構造、描画を最低限知る必要が有ります。(当然ですが)


> これだけは絶対必要な関数
> (メインループ、画像の読み込み、固定のFPSでまわす)等
> 基本的なことをお願いします。

ゲームの構造上必要なのは、

・起動時の各部分の初期化
・メインループ
・読み込んだデータなどの後始末

となるでしょう。(「固定のFPSでまわす」はメインループに含まれる)
それに加え、

・タスクシステム
・メモリの管理(怠るとメモリリークを起こす)
・データの管理・暗号化(データを非公開とするときに必要)
・セーブデータ管理

などが挙げられます。

> ライブラリを作る際の解説サイトなどを教えていただけますと助かります。

解説ではありませんが、 DXライブラリはソースコードを公開しているはずなので、
DXライブラリがどういった構造をしているかなどの参考のために見てみるといいと思いますよ。
(その状態でライブラリが作成できるということは、それを真似れば出来るということになりますので)


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

Name: たかぎ [URL]  ..比類無きプログラマー(99,118ポイント)   Date: 2009/05/06(水) 13:38   No:33146     
Title: Re:ライブラリを作りたいのですが・・・    
> 1点目
> 完全自分用ライブラリの作成は無意味なのでしょうか?

無意味ではありません。

> 2点目
> ライブラリを作る際に画像の描画の仕方でも種類があると思うのですが
> どれを選んだほうがよいのでしょうか?
> (DirectXの2D描画、WindowsAPIの命令)等

必要に応じて選択できるようにしておくとよいでしょう。
できれば、両方に同じインタフェースを持たせる方がよいのですが、抽象化しすぎると効率も悪くなるので、落としどころを見つけてください。

> 3点目
> これだけは絶対必要な関数
> (メインループ、画像の読み込み、固定のFPSでまわす)等
> 基本的なことをお願いします。

DXライブラリのアプリケーションとしては、御津凪さんが書かれたようなものになるかと思います。
それ以外に、もっと汎用的なクラスや関数が必要になるはずです。
まずは、WindowsやDirectX関係のほか、C/C++の既存のライブラリを調査することをお勧めします。

> ライブラリを作る際の解説サイトなどを教えていただけますと助かります。

手前味噌&書きかけですが、以下のURLで解説を書いています。
http://www.kijineko.co.jp/tech/how-to-library


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



Name: ajto  ..ぴよぴよ(10ポイント)   Date: 2009/05/06(水) 09:18   No:33124       
Title: c言語    
1から9までをかけるときプログラムにはなんと書いたらよいでしょうか?


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


Name: MNS  ..初心者(7,680ポイント)   Date: 2009/05/06(水) 09:30   No:33125     
Title: Re:c言語    
for文を利用すると良いですよ。
基礎的なものですので、自身で解決することを強くお勧めします。


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

Name: ajto  ..ぴよぴよ(18ポイント)   Date: 2009/05/06(水) 09:38   No:33127     
Title: Re:c言語    
ありがとうございます。
cはじめたばっかで、困ってました。MNSさんありがとうございます


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

Name: たかぎ [URL]  ..比類無きプログラマー(98,842ポイント)   Date: 2009/05/06(水) 13:22   No:33144     
Title: Re:c言語    
単に1〜9までを掛けるだけでよいのであれば...

1*2*3*4*5*6*7*8*9

で大丈夫です。
ループで書いた場合と違って定数式になりますので、非常に効率がよくなります。


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



Name: さが  ..かけだし(2,358ポイント)   Date: 2009/05/05(火) 19:40   No:33084       
Title: 外部ファイルで設定    
今作っているゲームで、defineで宣言していたものをiniファイルに移し
プレイヤーが簡単に変更できるようにしようとしたんですが

その中に配列の宣言に使っているものがあり、"定数式が必要です。"と怒られてしまいます。

こういうものを外部ファイルに逃がすことは出来ないのでしょうか。


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


Name: box  ..ハッカー(139,505ポイント)   Date: 2009/05/05(火) 19:49   No:33086     
Title: Re:外部ファイルで設定    
> こういうものを外部ファイルに逃がすことは出来ないのでしょうか。

iniファイルの読み書きをするために
Windowsが標準で用意している関数に関する知識を
どのくらいお持ちですか?それによります。


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

Name: さが  ..かけだし(2,386ポイント)   Date: 2009/05/05(火) 20:04   No:33087     
Title: Re:外部ファイルで設定    
今のところ基本の読み書きしかわかってないです。
WritePrivateProfileSection()
GetPrivateProfileString()


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

Name: box  ..ハッカー(139,563ポイント)   Date: 2009/05/05(火) 20:37   No:33088     
Title: Re:外部ファイルで設定    
では、次に、

> プレイヤーが簡単に変更できるようにしようとしたんですが

iniファイルを読むためにどういったコードを書いて実現しようとされたか、と、

> その中に配列の宣言に使っているものがあり、"定数式が必要です。"と怒られてしまいます。

エラーが出た箇所のコードを見せていただけますか?


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

Name: さが  ..入門者(2,665ポイント)   Date: 2009/05/05(火) 20:59   No:33091     
Title: Re:外部ファイルで設定    
すいません。一気にやればよかったですね。
コードは添付に乗っけました。define.hがコメントになっているのはマクロしないためです。

エラーですが
\GV.h(27) : error C2057: 定数式が必要です。
\GV.h(27) : error C2466: サイズが 0 の配列を割り当てまたは宣言しようとしました。

がでます。
これは今まで#defineでマクロ定義していたものを消したために
img_chara[CHARA_NUM]ならCHARA_NUMの値が入ってないと言われてるんだと思います。

先ほどのレスを拝見すると、このimg_charaの宣言より前にCHARA_NUMに値を入れることができると解釈しましたが、どうするのでしょうか。


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

Name: たかぎ [URL]  ..比類無きプログラマー(98,411ポイント)   Date: 2009/05/05(火) 21:22   No:33097     
Title: Re:外部ファイルで設定    
値を設定する順番の問題ではありません。
配列を宣言する際の要素数には定数式を指定しなければなりませんが、この場合は定数式になっていません。
普通の配列でこれを解決する方法はありませんので、別のことを考える必要があります。
一番手っ取り早いのは、配列の代わりにstd::vectorクラステンプレートを使う方法です。


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

Name: たかぎ [URL]  ..比類無きプログラマー(98,457ポイント)   Date: 2009/05/05(火) 21:23   No:33098     
Title: Re:外部ファイルで設定    
ちょっと言葉足らずでした。
std::vectorを使った上で、iniファイルから値を読み込む順序を改善する必要があります。


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

Name: さが  ..入門者(2,740ポイント)   Date: 2009/05/05(火) 22:24   No:33107     
Title: Re:外部ファイルで設定    
たかぎさんありがとうございます。なるほど配列では出来ないんですか。
VC++の方でlistを使ったことがありますが、発狂しそうになりました。

img_charaは他のimgと扱いが違ってきてしまって厄介ですが、統一したほうがいいんですか?


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

Name: たかぎ [URL]  ..比類無きプログラマー(98,670ポイント)   Date: 2009/05/06(水) 00:31   No:33115     
Title: Re:外部ファイルで設定    
> VC++の方でlistを使ったことがありますが、発狂しそうになりました。

本当にそうだとすると、精神が脆弱すぎます。
std::vectorの場合...

> int img_chara[CHARA_NUM];



std::vector<int> img_chara(CHARA_NUM);

とすれば済みます。

> int sound_voice[PLAYER_NUM][COMB_VOICE];

なら

std::vector<std::vector<int> > sound_voice(PLAYER_NUM, std::vector<int>(COMB_VOICE));

となります。
あとは配列と同じように[]演算子でアクセスできるようになります。
ただし、配列とは型が異なりますので、関数の仮引数などは修正が必要になります。

また、GLOBALマクロは使えなくなります。
元々このマクロは使わない方がよい代物なので、この際改めましょう。


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

Name: さが  ..入門者(2,894ポイント)   Date: 2009/05/06(水) 10:18   No:33131     
Title: Re:外部ファイルで設定    
vectorは[]でアクセスできるんですね。
夜のうちにイテレータ?を使って一応書いてみたんですが、恐らく

>また、GLOBALマクロは使えなくなります。
ここに引っかかって実行できません。

C++を触らずにきてしまったのでどうすればいいのか分かりません。privateとかpublicなどに書き換えていけばいいのでしょうか?

今のところ出ているエラーは
warning LNK4217: ローカルで定義されたシンボル __invalid_parameter がフィクション
   "public: int & __thiscall std::vector<int,class std::allocator<int> >::operator[](unsigned int)"
   (??A?$vector@HV?$allocator@H@std@@@std@@QAEAAHI@Z) にインポートされました。
warning LNK4217: ローカルで定義されたシンボル ??1exception@std@@UAE@XZ
    (public: virtual __thiscall std::exception::~exception(void)) がフィクション
   __unwindfunclet$??0logic_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z$0 にインポートされました。
error LNK2001: 外部シンボル "__imp___CrtDbgReportW" は未解決です。
などがあります。


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

Name: さが  ..入門者(3,040ポイント)   Date: 2009/05/06(水) 12:05   No:33139 解決!     
Title: Re:外部ファイルで設定    
Justyさんのレスを発見し無事エラーを消すことが出来ました。

>DxLib.hの DX_USE_VISUALC_MEM_DEBUGの定義がコメントアウトされていたら
>それを有効にして、ビルドの設定の使用するランタイムライブラリのところを
>マルチスレッド デバッグにしてみて下さい。

何をしているかはさっぱりですが、とりあえずvectorの勉強を進めようかなと思います。


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



Name: 氷水華  ..ぴよぴよ(422ポイント)   Date: 2009/05/05(火) 22:27   No:33108       
Title: 2プレイヤーの操作分け方    
タイトルのとうり2プレイヤー型弾幕STGを考えてるのですが、1プレイヤー側キーボードで2プレイヤー側ゲ〜ムパっドにしたいのですが操作プログラムの作り方が分かりません。どうやって分ければいいかとか…教えていただけませんか?

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


Name: situmon  ..プログラマー(28,683ポイント)   Date: 2009/05/05(火) 22:39   No:33109     
Title: Re:2プレイヤーの操作分け方    
playerとplayer2、2つの構造体をつくって、
playerはキーボードの反応だけ、
player2はゲームパッドの反応だけで
動くようにすればいいのではないですか?


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

Name: 氷水華  ..ぴよぴよ(438ポイント)   Date: 2009/05/06(水) 08:06   No:33122     
Title: 2プレイヤーの操作分け方    
分かりました。やってみます。

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



Name: ちゅん  ..かけだし(1,495ポイント)   Date: 2009/05/05(火) 23:59   No:33112       
Title: リストのソート    
こんばんは、毎度お世話になっております。

早速質問です。
C++のリストを利用しているのですが、リストの要素のメンバを用いてのソートはできないのでしょうか。

これでは解りにくいと思いますので、具体的に述べますと、
所持しているアイテムを格納しているリスト

std::list<Item*> belongingList があります。

Itemクラスには、int型のitemNumというメンバ変数がありまして、これを元に昇順にソートをしたいのです。
所持品の中には装備も含まれておりますので、アドレスは変えたくありません。

やはり、自分でリストを作った方が良いのでしょうか?


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


Name: Justy  ..伝説なるハッカー(350,211ポイント)   Date: 2009/05/06(水) 00:23   No:33113     
Title: Re:リストのソート    

>リストの要素のメンバを用いてのソートはできないのでしょうか。

 listは Itemのポインタを持っている状態なのですね。

 できますよ。
 listの sortメンバ関数にはユーザー定義の比較関数や関数オブジェクトを指定することができます。

ttp://www.cppll.jp/cppreference/cpplist_details.html#sort

 たとえば、

bool ItemComp(const Item* lhs, const Item*rhs)
{
    return lhs->itemNum < rhs->itemNum;
}

 こういう関数を用意して、

std::list<Item*> list;
...
list.sort(&ItemComp);

 こんな感じで。


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

Name: たかぎ [URL]  ..比類無きプログラマー(98,482ポイント)   Date: 2009/05/06(水) 00:24   No:33114     
Title: Re:リストのソート    
std::list<Item*>::sortに比較用のファンクタを渡せば解決します。


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

Name: ちゅん  ..かけだし(1,559ポイント)   Date: 2009/05/06(水) 01:50   No:33117 解決!     
Title: Re:リストのソート    
Justyさん、たかぎさん、ありがとうございました!
おかげで無事に解決できました。

こんな簡単な操作で解決できるとは…
半ば諦めてリストを作り直そうとすら思っていたので、本当に助かりました!


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



Name: poc  ..ぴよぴよ(51ポイント)   Date: 2009/05/05(火) 21:57   No:33104       
Title: 当たり判定    
こんばんは。
今当たり判定について勉強していますが、「当たり判定」と言っても色々な処理のしかたがあって、どれを使ったらいいのか迷っています。

2Dの横スクロールの弾幕シューティングの場合、どんな当たり判定の処理を使えばいいのでしょうか。




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


Name: situmon  ..プログラマー(28,600ポイント)   Date: 2009/05/05(火) 22:04   No:33105     
Title: Re:当たり判定    
http://dixq.net/g/#s11
をみてみてください。
たぶん横も縦も(スクロール)同じだと思います。

##いえいえ・・・
##yuさんのほうが詳しいのでそちらを参考にしたほうがいいかと思います。


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

Name: yu  ..プログラマー(26,759ポイント)   Date: 2009/05/05(火) 22:06   No:33106     
Title: Re:当たり判定    
STGでしたら、円か矩形(あまり無いと思いますが)になると思います

円の場合でしたら以下が参考になるのではないでしょうか
http://dixq.net/g/#s11

#もろ被りました。スルーして下さい orz
#以下、追記

URLのものをそのままSTGに使用しては弾が自機をすり抜けることがあります。
(当たり判定が小さいか、弾が速いか)
すり抜けないようにするために、弾の間も判定しなければなりません。
具体的な処理はこちらを参考にされてはいかがでしょうか
http://dixq.net/rp/18.html



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

Name: poc  ..ぴよぴよ(113ポイント)   Date: 2009/05/05(火) 23:14   No:33110     
Title: Re:当たり判定    
お二人ともありがとうございます。
円は一応理解してるので、矩形に挑戦したいと思います。

ありがとうございました


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



Name: チルチル  ..中級者(12,208ポイント)   Date: 2009/05/05(火) 18:29   No:33081       
Title: 実行ファイルの容量    
注釈は機械語に変換されないから注釈を1万行書いたとしても実行ファイルは1バイトも増えないんですか?
あと分割コンパイルをするとヘッダファイルをインクルードしたりエクスターン宣言とかをしますが
その場合は分割コンパイルをしなかった場合に比べて実行ファイルの容量が増えるのでしょうか?


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


Name: 初級者  ..入門者(4,867ポイント)   Date: 2009/05/05(火) 19:28   No:33083     
Title: Re:実行ファイルの容量    
私だったら、まず実験してみます。

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

Name: チルチル  ..中級者(12,344ポイント)   Date: 2009/05/05(火) 19:48   No:33085     
Title: Re:実行ファイルの容量    
それはまあそうなんですけど、多分目に見えるほどの差は出ないと思うので・・

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

Name: box  ..ハッカー(139,607ポイント)   Date: 2009/05/05(火) 20:40   No:33089     
Title: Re:実行ファイルの容量    
コメントは、コンパイルの前に、何も書かなかったものと解釈します。
したがって、コメントを1万行書いても1億行書いても、
できあがる実行ファイルの大きさは同じです。


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

Name: チルチル  ..中級者(12,393ポイント)   Date: 2009/05/05(火) 21:13   No:33092     
Title: Re:実行ファイルの容量    
そうなんですか〜
ところでまた疑問が出てきたんですけど
#defineは普通に書くのより容量が増えますか?


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

Name: たかぎ [URL]  ..比類無きプログラマー(98,291ポイント)   Date: 2009/05/05(火) 21:15   No:33094     
Title: Re:実行ファイルの容量    
C言語の話だとして...

通常、注釈はどれだけ書いても実行ファイルのサイズには影響しません。
ただし、例外もあります。

1. CINTのようなインタープリタの場合
 実行ファイル=ソースファイルですので、コメントのサイズがそのまま実行ファイルのサイズに反映されます。

2. コメントごとデバッグ情報を埋め込む場合
 当然、コメントのサイズに比例して、ソースファイルのサイズが増加します。

分割コンパイルの場合、最適化がある程度制限されるので、実行ファイルのサイズに影響が出ます。
ただし、大きくなるか小さくなるかは状況次第です。


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

Name: チルチル  ..中級者(12,562ポイント)   Date: 2009/05/05(火) 21:36   No:33099 解決!     
Title: Re:実行ファイルの容量    
あ〜小さくなる場合もあるんですか・・
よくわかりました、
どうもありがとうございます。


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

Name: たかぎ [URL]  ..比類無きプログラマー(98,463ポイント)   Date: 2009/05/05(火) 21:47   No:33102     
Title: Re:実行ファイルの容量    
> あ〜小さくなる場合もあるんですか・・

念のため補足しておきます。
分割コンパイルした方が小さくなる場合ですが...

分割しないときに、最適化によってやや大きめの関数がインライン置換される場合が考えられます。
関数を外部定義にすればインライン置換されませんので、結果として実行ファイルは小さくなります。



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



Name: MNS  ..初心者(7,574ポイント)   Date: 2009/05/05(火) 08:51   No:33069       
Title: ファイル名が不明な場合のファイルの読み込み    
わからないことがあるので、質問させてください。

plugin --- 〜.txt
|- 〜.txt
|- 〜.txt
   ・・・


このように、pluginフォルダに、いくつかのテキストファイルが入っているとします。
そのテキストファイルの数はわからず、ましてはファイル名もわかりません。

このとき、pluginフォルダ内の全てのテキストファイルの内容を読み込みたいとき、
どのようなコードを書けばいいのか、全くわかりません。

市販ゲームでは、ユーザーが様々なプラグインを作成できますが、
プログラム自体は、ファイル数もファイル名もわからないのに、
どうやってプログラム内に取り込んでいるか気になったもので・・。

ファイルの入出力に関しては、
DXライブラリか、標準のファイル入出力関数を使っていただけると、助かります。


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


Name: non  ..熟練のプログラマー(40,207ポイント)   Date: 2009/05/05(火) 09:03   No:33070     
Title: Re:ファイル名が不明な場合のファイルの読み込み    
Windowsなら
findfirstとfindnextを検索してください。
過去ログにもあるはずです。


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

Name: MNS  ..初心者(7,650ポイント)   Date: 2009/05/05(火) 10:58   No:33071 解決!     
Title: Re:ファイル名が不明な場合のファイルの読み込み    
仰るとおりに、
findfirstとfindnextを調べてみたところ、
自分が求めていたものであることがわかり、
コードも無事、書くことができました^^
どうもありがとうございました。


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



Name: あ〜る  ..初心者(6,041ポイント)   Date: 2009/05/03(日) 19:50   No:33007       
Title: 龍神録レーザー部でのエラーについて    
お久しぶりです
龍神録の館のレーザーを実装するところでなんとかコンパイルは通ったんですけど、レーザーが太くなる時に
atan2:DOMAIN error
というメッセージが出てきてプログラムが止まってしまいます
OKボタンを押すと問題無く進むんですけど、このままだとゲームとして論外なんで、どなたか解決策を教えて下さい
環境はBCCでソースは館の物をほとんどいじっていません

(5/4 9:20 管理人により題名が変更されました)


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


Name: MNS  ..初心者(6,734ポイント)   Date: 2009/05/03(日) 20:01   No:33009     
Title: Re:エラーについて    
思うに、0の除算が行われているせいではないでしょうか?
atan2の引数が0である場合はないか確認してください。


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

Name: あ〜る  ..初心者(6,117ポイント)   Date: 2009/05/03(日) 20:56   No:33010     
Title: Re:エラーについて    
レーザーと当たり判定を求める式の中の、get_sita関数の中の変数thetaに使われてるatanが0の時に「エラー」と表示されるようにしたら、「エラー」が2個表示されました(その後一回弾幕がループ(もう一度レーザーが描画)するごとに2個ずつ表示されました)
これはどうすればいいのでしょうか?


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

Name: box  ..ハッカー(139,454ポイント)   Date: 2009/05/03(日) 20:58   No:33011     
Title: Re:エラーについて    
> 変数thetaに使われてるatanが0以下の時に「エラー」と表示されるようにしたら

ソースコードを見せてください。
atanが0以下のとき、の意味がわかりません。


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

Name: あ〜る  ..初心者(6,171ポイント)   Date: 2009/05/03(日) 21:00   No:33012     
Title: Re:エラーについて    
あ、すいません、編集したんですけど間に合いませんでした
atanが0以下の時ではなく0の時の事でした


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

Name: あ〜る  ..初心者(6,225ポイント)   Date: 2009/05/03(日) 21:07   No:33013     
Title: Re:エラーについて    
というか調べるのは引数ですね
物凄い勘違いしてた気がします
すいませんでした、もう一度調べ直してきます


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

Name: あ〜る  ..初心者(6,322ポイント)   Date: 2009/05/03(日) 21:15   No:33015     
Title: Re:エラーについて    
atan2に渡されている引数sとtが0の時、それぞれ別の表示をするようにしたら1回弾幕がループする毎にそれぞれ2回ずつ表示されました
ソースは龍神録のをコピペしたので間違いは無いと思うのですが、どこか足りてない部分があるかもしれません


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

Name: MNS  ..初心者(6,953ポイント)   Date: 2009/05/03(日) 21:30   No:33016     
Title: Re:エラーについて    
コピー・ペーストしたというなら、
どこかをコピー・ペーストし忘れているのかもしれませんし、
ソースコードの中で、自分の独自の処理を行っていると、
たとえコピー・ペーストしたコードがあっていたとしても、
食い違う点が出てきてしまうかもしれません。

しっかりと理屈を理解しておかないと、こういう不測の状況で困りますので、
コードを提示できなというのなら、理屈を1から理解して、書き直すしかないと思います。
こういう場合は、コードを提示しないと、解決は難しいと思いますので。
(私が回答できるかは別として、ですが)

私はレーザーをゲームとして実装したことがないので、
的確な回答はできないですが、34章を読んだ限りでは、
内積・外積を求める関数で何かを間違えていることしか考えられません


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

Name: Justy  ..伝説なるハッカー(349,336ポイント)   Date: 2009/05/03(日) 21:33   No:33017     
Title: Re:エラーについて    

>ソースは龍神録のをコピペした

 館の方はすべて VisualC++を前提としており、その場合は atan2のそれぞれの引数に 0を
入れてもそのまま実行を続けますが、BCCの場合はエラーになります。

 なので、両方の引数が 0だった場合は atan2を実行しないようにしてください。

 どうしても 0でもかまわず実行したいのでれば、

int _matherr(struct _exception *__e) { return 1; }

をソースのどこかに入れてください。

 これで数学系のエラーは(それが良いことなのかどうかは別にして)出なくなります。

ttp://d.hatena.ne.jp/wata_d/20061017/1161052576


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

Name: あ〜る  ..初心者(6,378ポイント)   Date: 2009/05/03(日) 21:50   No:33019     
Title: Re:エラーについて    
皆さんありがとうございました!
atanの前に
if(s!=0&&t!=0)
を入れたら無事動くようになりました
BCCでは駄目だったんですね…知りませんでした…
どうもありがとうございました!


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,020,810ポイント)   Date: 2009/05/04(月) 09:15   No:33028     
Title: Re:エラーについて    
× ソースは龍神録のをコピペしたので間違いは無いと思うのですが
○ ソースは龍神録のをコピペしたので間違いがあると思うのですが

でお願いします(汗
VC++を前提にしているので,他が考慮出来ていませんでした。ごめんなさい。
修正したいのですが,龍神録のこのコードは前の章の内容を直すと後のコードも全て直さないといけないのがやっかいなんですよね・・;


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

Name: あ〜る  ..初心者(6,544ポイント)   Date: 2009/05/04(月) 20:46   No:33050     
Title: Re:龍神録レーザー部でのエラーについて    
わかりました、以後気をつけます(笑)
元はといえばVC用だって分かっておきながらBCでやってる僕がいけないので…(-.-;)

そしてもう一個質問が出来てしまいました…
レーザーはちゃんと描画出来るようになったのですが(微妙に当たり判定にミスがありましたが…)ボスのHPを0にしてもレーザーが描画されたままになってしまいました…
これもどこかでVCと違いが出ているのでしょうか?
どなたか理由が分かる方がいらっしゃいましたら教えて下さい


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,021,765ポイント)   Date: 2009/05/04(月) 21:07   No:33051     
Title: Re:龍神録レーザー部でのエラーについて    
むむむ・・きっとボスのHPが0になった時にレーザーに関わる構造体がリセットされていないんだと思います。
ボスのHPが0になった時

memset(レーザーの先頭アドレス, 0, レーザーの領域分);

が書いてなければ初期化漏れだと思います・・。


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

Name: あ〜る  ..初心者(6,672ポイント)   Date: 2009/05/05(火) 00:25   No:33065     
Title: Re:龍神録レーザー部でのエラーについて    
ありがとうございます!
どこに入れれば良いのかわかんなかったんですけど、とりあえずenter_boss関数の中に書いたら上手くいったんですけど、あってましたかね?(プロジェクトの中を探しても発見出来なかったので…)
つまらないミスでお手を煩わせてすいませんでした…
ありがとうございました!!


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



Name: 羽球好き  ..ぴよぴよ(33ポイント)   Date: 2009/05/02(土) 21:48   No:32985       
Title: おたずねしたいのですが    
はじめまして。
現在専門学校?に通ってる新2年生です。
2年生からC++の授業があるってことで、楽しみにしてたのですが、先生がいなくなり、代わりの先生も来ず、授業自体がなくなってしまいました。
そこで、現在、独学で勉強を始めようとして、ゲームプログラミングの館を参考に学習を進めています。

で、ゲームプログラミングの館の22節までは見れたのですが、23節の行けない所を作るの途中から、スクロールできず、説明が見れません。
私のパソコンからは見れないのか、それとも現在見れないのか分からないので、質問いたしました。
大変分かりやすく参考になってるので、見れないのは残念なのですが、もし別のところからアクセスできるのであれば教えていただけたら助かります。


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


Name: NI  ..かけだし(1,116ポイント)   Date: 2009/05/02(土) 22:41   No:32986     
Title: Re:おたずねしたいのですが    
今サイトを見てきましたが、23節は普通に見る事が出来ました。
> もし別のところからアクセスできるのであれば教えていただけたら助かります。
あなたが見ているサイトのURLが分からないので答える事が出来ません。



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

Name: hj  ..ぴよぴよ(3ポイント)   Date: 2009/05/02(土) 22:42   No:32987     
Title: Re:おたずねしたいのですが    
私の環境では、みれましたよ。

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

Name: SooA [URL]  ..上級者(19,963ポイント)   Date: 2009/05/02(土) 22:45   No:32988     
Title: Re:おたずねしたいのですが    
更新を行っても読み込めないのでしょうか?
一時ファイルを削除するのも効果があるかもしれません。

それでもダメなら FireFox や Opera 等
別のブラウザを使用してみましょう。


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

Name: 羽球好き  ..ぴよぴよ(75ポイント)   Date: 2009/05/02(土) 23:53   No:32990 解決!     
Title: Re:おたずねしたいのですが    
みなさん、返事ありがとうございました。

FireFoxから見たら、見ることが出来ました。

頑張って勉強してみます。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,020,923ポイント)   Date: 2009/05/04(月) 09:22   No:33029     
Title: Re:おたずねしたいのですが    
そんないい加減な事で授業内容がかわるんですね(汗
私自身学校で習ったCの知識はほとんどありません。
きっとここにいらっしゃる常連様ほとんどの方は自分でコツコツ勉強された方ばかりだと思います。
プログラムの知識って学校とかでつけるものじゃなく,自分で興味持って家でコツコツつけるものだと思うんですよね。
最近はウェブの情報も充実していますし,困ったら聞いていただけたらと思いますし,学校の授業がなくても大丈夫ですから,頑張って下さい^^


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

Name: たかぎ [URL]  ..比類無きプログラマー(97,990ポイント)   Date: 2009/05/04(月) 16:00   No:33039     
Title: Re:おたずねしたいのですが    
> そんないい加減な事で授業内容がかわるんですね(汗

いい加減といえばそうなのですが、最近はC++を教えられる人が少ないので学校側も困っているように思います。
Javaしかやったことがない講師が、教科書だけを頼りにC++を教えてくれてもあまりうれしくないですからね。
なお、C言語を教えられる人であれば、比較的容易に手配できる気がしています。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,022,047ポイント)   Date: 2009/05/04(月) 21:13   No:33054     
Title: Re:おたずねしたいのですが    
なるほど〜,しかし簡単な理由で授業内容がかわるものなんですね・・。
普通
「授業内容が決まっている」→「教えられる先生を補充する」
の順番かと思いましたが
「今いる先生が教えられそうな内容を確認する」→「開けそうな授業内容を決める」
の順番である感じがしますね(汗


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

Name: たかぎ [URL]  ..比類無きプログラマー(98,077ポイント)   Date: 2009/05/05(火) 00:18   No:33064     
Title: Re:おたずねしたいのですが    
学科にもよるでしょうね。
例えば、ゲームプログラミング系の学科であれば、C++を外すことは決してできないでしょう。
それに対して、情報系の学科であれば、何かと理由を付けてC++を外し、代わりにC#を入れたとしても何の不思議もありません。


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



Name: kyou  ..ぴよぴよ(45ポイント)   Date: 2009/05/04(月) 20:40   No:33049       
Title: while文を利用して    
はじめまして。お世話になります。
最近独学でCをはじめましたが、どうしてもクリアできません。
(かなり初期の段階で(^^ゞ )

やりたいのは整数を入力して、入力した整数の数だけ「*」を表示したいのです。
ループから抜け出すこともできません。

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



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


Name: Dixq (管理人) [URL]  ..ウィザード(1,021,860ポイント)   Date: 2009/05/04(月) 21:09   No:33052     
Title: Re:while文を利用して    
今作っているプログラムコードがあれば投稿してもらえるとアドバイスしやすいかもしれません。
なお,抜け出すのはbreakで出来ますし,あらかじめループする回数が分かっているなら
for文などを使って決まった数回してやればいいと思います。
(whileでも出来ますが)


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

Name: conio [URL]  ..中級者(14,706ポイント)   Date: 2009/05/04(月) 21:29   No:33056     
Title: Re:while文を利用して    
ループから抜け出せないのは恐らく、判定条件が不変になっているからではないでしょうか。

---------------------------------------
while(5){
 printf("*");
}
printf("\n");
---------------------------------------
みたいな。
(上記のプログラムは実行すると物凄い(?)事になります)


やりかたには色々ありますが、とりあえず一例↓
---------------------------------------
int count = 5;
while(count > 0){
  //'*'を表示させる処理
  //変数countに何らかの処理を加える
}
---------------------------------------
日本語で書いてある部分を上手くプログラムに変えれば完成します。

上記のプログラムは、初めから値を入れています。
キーボードからの入力にする場合は"scanf関数"に修正すれば問題ないと思います。


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

Name: kyou  ..ぴよぴよ(298ポイント)   Date: 2009/05/04(月) 22:19   No:33059     
Title: Re:while文を利用して    
Dixq様 conio様

早速ありがとうございます。

自分で考えれたのは


int n ;

scanf("%d",&n);
printf("\n%d",n);

while(n>0){

  printf("*");
}
printf("\n");

この辺りまでです。

なさけないですが、ここからどう抜け出すのか?
また、これで整数を入力した数だけ*が表示できるのか?
ほとんどわかっていません。
(これまでのテキストの流れで・・・こんなこと考えています。)

全くわかっていなくて 申し訳ございません<(_ _)>




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

Name: MNS  ..初心者(7,253ポイント)   Date: 2009/05/04(月) 22:35   No:33060     
Title: Re:while文を利用して    
int n;

scanf("%d",&n);

 例えば、9という値を入力したとします。
 これはそのままnの値になりますね。


printf("\n%d",n);

 9と表示されるでしょう。


while(n>0){

  printf("*");
}

 nの値は9です。よって、n>0を満たしています。
 なので、永遠に printf("*") が行われます。
 そもそも、while文というものは、
 while(条件)で、条件を満たしていれば、
 永遠に括弧内の処理が行われます。
 よって、何かのタイミングで、
 条件を満たさなくさせなくてはいけません。
 この場合、条件はn>0ですので、
 nを0以下にすればいいことは分かりますよね?
 どうぞ、ご自分でお考えになってください。

ヒントを与えるとすれば、
9 (n>0)を満たす
8 (n>0)を満たす
7 (n>0)を満たす
6 (n>0)を満たす
5 (n>0)を満たす
4 (n>0)を満たす
3 (n>0)を満たす
2 (n>0)を満たす
1 (n>0)を満たす
0 (n>0)を満たさない
満たす数を数えてみてください、活路が見出せませんか?


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

Name: kyou  ..ぴよぴよ(343ポイント)   Date: 2009/05/04(月) 22:47   No:33061     
Title: Re:while文を利用して    
MNS様

ヒントまでありがとうございます。

満たす数は上記の場合9です。ということは
n+1で抜け出せるのでしょうか?



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

Name: クロウ  ..初心者(5,243ポイント)   Date: 2009/05/04(月) 22:51   No:33062     
Title: Re:while文を利用して    
while文は( )の中がtrue(成立する)限り{}の中を繰り返す文です。
つまり
while(1){

・・・・
}

にすると無限ループをするわけです。

kyouさんの場合ですと、
while文の条件の(n>0)がずっと成り立っているので、0以下を入力しない限り無限ループを起こしているわけです。
これが成り立たないようにつまり、n<=0にしてしまえばwhile文は抜けることになります。
つまり、while文の中でnを減らしてやればいいのです。

ちなみにn -= 1(省略形 n--) は、今のnの値を1減らしてくれるものです。
while突入→*を描画→
n = 9のとき、n - 1 = 8を代入→(whileの条件を判定:n > 0が成立)→*を描画→
n = 8のとき、n - 1 = 7を代入→(whileの条件を判定:n > 0が成立)→*を描画→
・・・・
では、
n = 1のときはどうなると思いますか?



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

Name: kyou  ..ぴよぴよ(436ポイント)   Date: 2009/05/04(月) 23:09   No:33063 解決!     
Title: Re:while文を利用して    
クロウさん。みなさん。
ありがとうございます。

できましたぁ。
ただし、再度みなさんが伝えてくださったことを
しっかり理解して出来るように、頑張って勉強します。

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



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



Name: ゆるるぅるぃ  ..ぴよぴよ(65ポイント)   Date: 2009/05/04(月) 18:15   No:33044       
Title: 質問    
すいません。
エクセルを使ってたくさんの敵を表示させる、ってのができません。
表示はされますが、実行結果が同じようになりません。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,021,940ポイント)   Date: 2009/05/04(月) 21:10   No:33053     
Title: Re:質問    
実行結果が同じようにならないというのは,自分が作ったエクセルのデータとそれを読み込んで実行しているはずのゲームで出現する敵の内容が異なるということでしょうか。
読み込んでいるエクセルのファイル名が違うということはありませんか?


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



Name: situmon  ..プログラマー(28,502ポイント)   Date: 2009/05/04(月) 16:53   No:33040 解決!       
Title: エラー    
enemy.obj : error LNK2005: "int main" (?main@@3HA) は既に background.obj で定義されています。
enemy.obj : error LNK2005: "int count" (?count@@3HA) は既に background.obj で定義されています。
load.obj : error LNK2005: "int main" (?main@@3HA) は既に background.obj で定義されています。
load.obj : error LNK2005: "int count" (?count@@3HA) は既に background.obj で定義されています。
main.obj : error LNK2005: "int main" (?main@@3HA) は既に background.obj で定義されています。
main.obj : error LNK2005: "int count" (?count@@3HA) は既に background.obj で定義されています。
player.obj : error LNK2005: "int main" (?main@@3HA) は既に background.obj で定義されています。
player.obj : error LNK2005: "int count" (?count@@3HA) は既に background.obj で定義されています。
title.obj : error LNK2005: "int main" (?main@@3HA) は既に background.obj で定義されています。
title.obj : error LNK2005: "int count" (?count@@3HA) は既に background.obj で定義されています。
などとでてくるのですがこれはなんなのでしょう。
クリックしてもエラーの箇所がわかりません。
初歩的ですいません。


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


Name: バグ  ..ハッカー(159,400ポイント)   Date: 2009/05/04(月) 17:22   No:33041     
Title: Re:エラー    
同一プロジェクト内にmain関数が2つ以上存在していませんか?

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

Name: situmon  ..プログラマー(28,563ポイント)   Date: 2009/05/04(月) 19:52   No:33047     
Title: Re:エラー    
わかりました!!
externでも=0をかいてたからでした。
ありがとうございました。


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



Name: situmon  ..プログラマー(28,124ポイント)   Date: 2009/05/04(月) 14:10   No:33034 解決!       
Title: break文    
初歩的な質問ですいませんが

if( CheckHitKey( KEY_INPUT_Z ) == 1 && count%5==0){
for(int j=0;j<Player_shot_max2;j++){
if(player_shot[0][j].flag==0){
player_shot[0][j].flag=1;
player_shot[0][j].x=player.x;
player_shot[0][j].y=player.y;
break;
}
}
}



if( CheckHitKey( KEY_INPUT_Z ) == 1 && count%5==0){
for(int j=0;j<Player_shot_max2;j++){
if(player_shot[0][j].flag==0){
player_shot[0][j].flag=1;
player_shot[0][j].x=player.x;
player_shot[0][j].y=player.y;
}
}
}

では処理がどう違うのでしょうか?
違いはbreakなのですが、
しただと連続で弾がでないで
うえだと連続で玉が出ます。


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


Name: バグ  ..ハッカー(159,379ポイント)   Date: 2009/05/04(月) 14:19   No:33037     
Title: Re:break文    
上記コードでは、breakの時点でforループを途中で抜けます。
下記コードではループを終了する条件が満たされるまで抜けません。


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

Name: situmon  ..プログラマー(28,174ポイント)   Date: 2009/05/04(月) 14:20   No:33038     
Title: Re:break文    
ありがとうございました!!

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



Name: うー  ..ぴよぴよ(59ポイント)   Date: 2009/05/04(月) 13:36   No:33032       
Title: 意味がよくわかりません    

先ほどダウンロードしたフォルダの中の「サンプルプログラム実行用フォルダ」のフォルダの中の

VisualStdioでしたらDxLib.slnを開き、プログラムが書ける状態にしてください。

と、ゲームプログラミングの館に書いてありましたが、意味がよくわかりません 誰か教えてください


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


Name: situmon  ..プログラマー(28,157ポイント)   Date: 2009/05/04(月) 14:13   No:33035     
Title: Re:意味がよくわかりません    
DxLib_VC\サンプルプログラム実行用フォルダのDxLib_VC2008_and_2005用.slnのことだと思います。

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



Name: yyy  ..ぴよぴよ(56ポイント)   Date: 2009/05/03(日) 13:15   No:32996       
Title: 龍神録プログラミングの館でDLが正常に出来ない    
1番最初のほうにあるすべての章の一括ダウンロードをして、解凍しようとすると、ファイルが壊れています と表示されるんですが、どうすればいいのでしょうか??

(5/4 9:20 管理人により題名が変更されました)


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


Name: yyy  ..ぴよぴよ(83ポイント)   Date: 2009/05/03(日) 13:18   No:32997     
Title: 補足    
未知の形式か、ファイルが壊れています でした 解凍ツールはwin rar です

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

Name: kazuoni [URL]  ..比類無きプログラマー(83,983ポイント)   Date: 2009/05/03(日) 13:33   No:32998     
Title: Re:補足    
http://www.play21.jp/board/formz.cgi?action=res&resno=32837&page=&id=dixq&rln=32862
などでも書いてありますが、いろいろなブラウザで試してみてください。


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

Name: NI  ..かけだし(1,157ポイント)   Date: 2009/05/04(月) 08:26   No:33026     
Title: Re:補足    
私がやった時もファイルが壊れていましたが、
ブラウザをfirefoxにしたら開く事が出来ました。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,020,694ポイント)   Date: 2009/05/04(月) 09:10   No:33027     
Title: Re:補足    
そういうトラブル多いようですね。
レンタルサーバーのtok2は本当に対応が悪く,この件についていくら質問フォームから質問しても返事がないんですよね・・。
以前5〜6回送って1度だけ返事が来たのですが,結局その時もそれっきりになりました。
格安サービスをしているからといってそこまで対応が悪いのはどうかと思います・・。

少々値段は上がりますが,もうちょっとちゃんとしたレンタルサーバー借りた方がいいですかね。

というかこの問題ってレンタルサーバー側の問題なんですかね・・?


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

Name: yyy  ..ぴよぴよ(108ポイント)   Date: 2009/05/04(月) 13:46   No:33033 解決!     
Title: ありがとうございます    
いまからやってみようとおもいます。

皆様、ありがとうございました


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



Name: YK  ..かけだし(1,349ポイント)   Date: 2009/05/03(日) 08:42   No:32993       
Title: 画像の擬似3D表示について    
はじめまして、YKと申します。
Dixqさんのページは説明がわかりやすく、いつも参考にさせてもらっています。

この度はタイトルに書いたように、画像の擬似3D表示について伺いたいことがあります。

よくゲームである魔方陣等の描写ですが、画像を擬似3D表示、回転のアルゴリズムがどうもわかりません。
画像の倍率を変えて回転描写すればいいのでは、と考えたのですが自分ではうまくできませんでした。
アルゴリズム、簡単な例などわかる方よろしくお願いします。




ちなみに私のプログラミング暦は今年で3年です。


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


Name: Justy  ..伝説なるハッカー(347,686ポイント)   Date: 2009/05/03(日) 14:06   No:32999     
Title: Re:画像の擬似3D表示について    

>よくゲームである魔方陣等の描写ですが

 よくありすぎてどういう動きを目標としているのか特定できないのですが、
要するに2Dの縦か横にスケーリングして潰した上で画面に対してその形状を保ったまま
画像だけを回転させたいということですか?


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

Name: YK  ..かけだし(1,326ポイント)   Date: 2009/05/03(日) 14:33   No:33000     
Title: Re:画像の擬似3D表示について    
説明不足ですいません。
そういう感じです。


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

Name: Justy  ..伝説なるハッカー(349,009ポイント)   Date: 2009/05/03(日) 15:48   No:33002     
Title: Re:画像の擬似3D表示について    
 なるほど。

 環境が不明瞭なので一般的に話になりますが、DirectXや OpenGLなど大抵の場合
4頂点を指定してトライアングルストリップかトライアングルファンを
表示する機能がありますので、それを使うことになります。
 
 で行列計算を使って表示する4点の座標を求めて、その4頂点描画機能を使って
表示するのが一番いいですね。
 ここから先は行列がわからないとちょっとつらいかもしれません。

座標変換
ttp://www.geocities.co.jp/SiliconValley-Bay/4543/Rubic/Mathematics/Mathematics-2.html
ttp://www.mech.tohoku-gakuin.ac.jp/rde/contents/course/robotics/coordtrans.html
ttp://nis-lab.is.s.u-tokyo.ac.jp/nis/CG/cgtxt/cg2/cg024.htm


 まず、画像の中心座標を原点としたときの回転・スケーリングしていないときの
4点の座標を出します。
 これは縦横の画像サイズがわかっていれば出せます。
 
 画像サイズがそれぞれ imageSizeX、imageSizeYだとすると

    struct position
    {
        float x, y;
    };
    position pos[] =
    {
        { - imageSizeX/2, - imageSizeY/2 },
        { + imageSizeX/2, - imageSizeY/2 },
        { + imageSizeX/2, + imageSizeY/2 },
        { - imageSizeX/2, + imageSizeY/2 },
    };

 となります。

 次に 2D用の行列として 2 x 3の行列を作ります(3 x 3でもいいのですが面倒なのでこれで)。
 画像の中心の画面上の表示位置 [posX, posY]もこの段階で入れてきます。

    float m[3][2] = { { 1, 0 }, { 0, 1 }, { posX, posY }, };


 次にスケーリングです。値をそれぞれ scaleX、scaleYとするなら

    m[0][0] *= scaleX; m[0][1] *= scaleX;
    m[1][0] *= scaleY; m[1][1] *= scaleY;

 とします。

 最後に回転を行います。
 角度(ラジアン)を angleに入れておけば

    float cos_val = std::cosf(angle);
    float sin_val = -std::sinf(angle);
    float tm0 = cos_val * m[0][0] + sin_val * m[1][0];
    float tm1 = cos_val * m[0][1] + sin_val * m[1][1];
    float tm2 = -sin_val * m[0][0] + cos_val * m[1][0];
    float tm3 = -sin_val * m[0][1] + cos_val * m[1][1];
    m[0][0] = tm0; m[0][1] = tm1; m[1][0] = tm2; m[1][1] = tm3;

 という計算になります。
 これで必要な移動・回転・スケーリングを行う行列は完成です。
 
 あとは、先に求めた4頂点に対してこの行列を適用していきます。

    for(int n=0; n<4; ++n)
    {
        float x = pos[n].x * m[0][0] + pos[n].y * m[1][0] + m[2][0];
        float y = pos[n].x * m[0][1] + pos[n].y * m[1][1] + m[2][1];
        pos[n].x = x;
        pos[n].y = y;
    }

 配列 posに表示に必要な4つの頂点が入りましたので、これをそのまま
描画ライブラリに入れればOKです。
 指定したスケーリングを画面に対して維持したまま回転してくれます。


 慣れないと結構難しいと思いますが、環境によっては行列のサポートライブラリが
ありますので、そちらを利用するのがいいかと思います。


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

Name: YK  ..かけだし(1,363ポイント)   Date: 2009/05/03(日) 16:08   No:33003     
Title: Re:画像の擬似3D表示について    
長文ありがとうございます!
なるほど、DirectX、OpenGLですか。
両方とも経験ないですがこれをきに挑戦してみます!


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

Name: Justy  ..伝説なるハッカー(349,050ポイント)   Date: 2009/05/03(日) 16:38   No:33004     
Title: Re:画像の擬似3D表示について    

>両方とも経験ないですが

 今どんな環境で何を使っているんですか?


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

Name: YK  ..かけだし(1,401ポイント)   Date: 2009/05/03(日) 22:08   No:33020     
Title: Re:画像の擬似3D表示について    
OS:Windows XP pro
BCC Developer
言語:C++
ライブラリ:DXライブラリ
でやってます


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

Name: Justy  ..伝説なるハッカー(349,403ポイント)   Date: 2009/05/03(日) 22:43   No:33021     
Title: Re:画像の擬似3D表示について    
 であれば、こちらが参考になるかと。

回転描写と拡大縮小描写
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1033


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

Name: YK  ..かけだし(1,506ポイント)   Date: 2009/05/03(日) 23:50   No:33022     
Title: Re:画像の擬似3D表示について    
おお!すでに同じ質問をしてる人がいたか・・・
>ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1033
このページにかいてある
DrawModiGraphF()
ってのは龍神録プログラミングの館にでてくるものでいいんですよね?


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

Name: Justy  ..伝説なるハッカー(349,417ポイント)   Date: 2009/05/03(日) 23:59   No:33023     
Title: Re:画像の擬似3D表示について    

>ってのは龍神録プログラミングの館にでてくるものでいいんですよね?

 いいと思います。


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

Name: YK  ..かけだし(1,627ポイント)   Date: 2009/05/04(月) 01:20   No:33024     
Title: Re:画像の擬似3D表示について    
おお、できました!
これは縦、横を潰して回転描写できるんですね。


これみたらまた疑問が・・・
画像使いますねw


画像の上が今回の画像描写
では、下のように描写する場合は画像の頂点A、Cを潰し、B、Dを伸ばせばいいわけですよね?
こういうこともできるんでしょうか?

また回転は時計回りですが、反時計回りもできるんでしょうか?


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

Name: Justy  ..伝説なるハッカー(349,723ポイント)   Date: 2009/05/04(月) 01:52   No:33025     
Title: Re:画像の擬似3D表示について    

>こういうこともできるんでしょうか?

 可能です。
 
DXライブラリを用いた例だとその図の上のようにするには
「回転(毎フレーム変化する) -> スケール -> 移動」という順番で行っていましたが。

下の図のようにするには
「回転(毎フレーム変化する) -> スケール -> 回転2 -> 移動」という順番で行列を
掛けて合わせてください。

 この回転2のところに、一定の角度(図と同じにするなら -π/4の角度)の行列を与えることで
下の図のように傾いて潰れた回転ができるはずです。



>反時計回りもできるんでしょうか?

 できます。
 毎フレーム変化する角度の差分の符号を反転させるだけです。


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

Name: YK  ..かけだし(1,654ポイント)   Date: 2009/05/04(月) 10:42   No:33031 解決!     
Title: Re:画像の擬似3D表示について    
わかりました、いろいろありがとうございます!
頑張ってみます。


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



Name: 256bit  ..ぴよぴよ(162ポイント)   Date: 2009/04/27(月) 23:28   No:32802       
Title: 卒業研究としてのシューティングゲーム制作について    
 はじめまして、256bitと申します。

 私は今、大学の研究課題でアクションシューティングゲームの制作を考えています。
 今後、制作でわからないことがありましたら、どうぞよろしくお願いします。m(_ _)m

(5/4 9:20 管理人により題名が変更されました)


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,018,079ポイント)   Date: 2009/04/28(火) 21:26   No:32817     
Title: Re:はじめまして    
256bitさん、こんばんは。

大学の卒業制作ではなく、研究ですか?
アクションゲームについての研究がなされるのであれば私もどんな研究になるのか興味あります。
アクションゲームは練習程度しか作ってないのであまりお手伝いは出来ないかもしれませんが、
一般的な話ならお手伝い出来るかもしれません。

制作頑張って下さいね。


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

Name: こめかみ  ..熟練のプログラマー(44,597ポイント)   Date: 2009/04/29(水) 00:33   No:32835     
Title: Re:はじめまして    
あー、私もゲームソフトを作る時間を何とかとりたくて、
卒業研究自体をゲーム制作に出来ないかと、
いろいろ口実を考えているのですが・・・

研究としてはどうなんでしょうねぇ。
ゲーム学会とかは存在するようですが、
ゲームの専門学校でもないただの情報系の大学で、
真面目にそんなことして取り合って貰えるんですかねぇ。

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

ポイントとしては、

1.研究内容の分野や業界の現状についてよく把握しておくこと。
2.社会の役に立つか。
3.参考文献などを明確にすること。

らしいです。(とりあえず私の認識では。)

1.はゲーム業界の現状って業界へ入ってみなければわからないような気がします。
それを言うならどんな仕事もそうですかね。
身近にゲーム業界の関係者でもいれば話しを聞いたりして心強いでしょうが。
私にはそんな知り合いがいませんし。難しいです。

そもそも商業弾幕STGって絶滅寸前じゃないのかなぁ。

2.社会の役に立つゲームを作る研究ってどんなのでしょうか。
私が考えたものは大きく分けて二つ。

A.ゲーム業界の人達のお仕事に私がする研究によって貢献すること。
どんな研究をすればそんなことが可能になるのかまるで思いつきませんし、
思いついても実践する実力が私にあるかどうか。
少なくとも素人がただゲームを作るだけで可能になる研究とは思えません。

B.テトリスがトラウマを癒すとか、シューティングゲームが視力の「コントラスト感度」向上を促すとか、
http://www.afpbb.com/article/life-culture/health/2587446/3977309
http://news.bbc.co.uk/2/hi/health/7813637.stm
そういう最近の研究記事を無理やり土台に、
ゲーム自体が人体の機能改善に役に立つと言い張って、
ゲームを制作する。
・・・それ情報系の研究じゃないですよねぇ。


私見ですが、
そもそもゲームは役に立たないから面白いような気がしますし、
研究自体が野暮なような気もします。
我ながらなんてモトモコモない意見。
256bitさん、および真面目にゲームを研究してる方ごめんなさい。

3.の参考文献についてですが、
サイトなどを参考文献にするにはURLなどを明確にする他に、
参考にした日付を明確にし、その日のHTMLファイルを保存しとく位しとけば間違いないのかな。
ネットの情報原は更新されてしまうので参考文献の情報源としては弱いようです。
ここら辺も個人的に結構大きな壁です。

さらに研究室既存の研究も踏まえなくてはいけないし。
学校でした研究で作ったゲームを公開出来るのかなって心配もあります。

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

卒業研究でゲーム作るのは無理があるかなーやっぱり。
しかし他の研究題材は何も考えていないという無計画なワタシ。くそっ、背水の陣だ。


256bitさんはその辺どんな切り口で研究されるんですかね。
差し支えなければお聞きしたいです。

長々と横レス失礼いたしました。スルーして下さっても全然構いませんからね。
制作頑張ってください。ワタシも頑張ります。



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

Name: Dixq (管理人) [URL]  ..ウィザード(1,020,071ポイント)   Date: 2009/04/29(水) 07:54   No:32836     
Title: Re:はじめまして    
私もゲーム制作が好きな人間ですから、研究できないか考えました。
私が考えたのは、情報系の大学生として相応しいテーマの研究を一つきちんと行っておき、
サブテーマとして二つ目の研究で自分の好きな研究をするということでした。

でもうちの大学にゲームとか詳しい教授がいませんでしたし、結局実現しませんでした。

詳しく前例を調べていないのでよくわかりませんが、
大学生のサブ研究テーマなら

・どのようなアルゴリズムで当たり判定を計算すれば高速化出来るのか
また、弾幕計算の高速化、計算アルゴリズムの効率化・・・

この辺を攻めてみたらどうかと思います。
以下私がよく知らない、興味ある分野を勝手に適当に書いてみます。

・弾情報に配列を用いた方が早いのか、ベクターを用いた方が早いのか、線形リストなどを用いた方が早いのか

・弾は大きいものから表示しなければなりませんが、どのように計算すれば早く全てを描画出来るのか(龍神録では登録中の弾の総数X弾の種類回の計算が必要で、非効率でした)

・レーザーの当たり判定についてうちのサイトではわかりにくい計算式がコテコテ書いてありますが、
もっと簡単に計算出来ますからそういう効率化をしても面白いと思いますし、以前、ソフトウェア技術研究会で組木紙織さんが発表されていたような複雑な形の当たり判定を考えてもいいかもしれません。

このようなアルゴリズム系の話なら、アルゴリズム専門の教授に受けると思います。
情報系なら一人はCに詳しいアルゴリズム専門の教授がいると思います。

また、心理的な部分を攻めてみるのも面白いかもしれません。
心理学的、統計的、その辺が詳しい教授には

・弾幕が人に与える心理的効果

みたいなテーマも頑張れば受け入れてもらえるかもしれません。
東方を初め、弾幕シューティングが好きな人は、何か自分が好きな弾幕があると思いますし、
その弾幕は始めてみた時「おぉ・・」と感動したと思います。

それは一体何故感動するのか、その原因は音楽なのか弾の配置なのかスピードなのか・・。
そういうのを分類してみて、ユーザーの感動に貢献するというのもありかもしれません。
ただこれにはアンケート調査などが必要だと思うので、大変かもしれません。
(学会で通用するアンケートの調査は厳しくとても大変ですよ・・)

大学生のサブテーマならこれ位の内容でもOKしてくれると思います。
大学院の本テーマとしてとかだと話は別かもしれませんが・・。

・・・いづれにしても一度シューティングを完成させていないととりかかりが難しいでしょうし、
作る事は研究ではありませんから制作することを期待すると期待はずれかもしれませんねm(_ _)m


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

Name: こめかみ  ..熟練のプログラマー(46,201ポイント)   Date: 2009/04/29(水) 23:59   No:32880     
Title: Re:はじめまして    
dixqさんの貴重な意見!!
参考にさせていただきます。

>私が考えたのは、情報系の大学生として相応しいテーマの研究を一つきちんと行っておき、
>サブテーマとして二つ目の研究で自分の好きな研究をするということでした。

相応しいテーマかといえば、
私の所属する研究室は3D系なので2Dの弾幕STGはちょっと遠いですね。
背景の描画をメインに据えて弾幕STGをその惹きたてに特化するとかいいかもしれない。
まあじっくり考えてみます。


>でもうちの大学にゲームとか詳しい教授がいませんでしたし、結局実現しませんでした。

ウチはゲームに(たぶん)理解のある教授はいますので希望はあるかと。


>効率的・高速なアルゴリズム
>当たり判定
>・・・いづれにしても一度シューティングを完成させていないととりかかりが難しいでしょうし、
>作る事は研究ではありませんから制作することを期待すると期待はずれかもしれませんねm(_ _)m

ですよねぇ。何よりも先ず遊べるものを作れないとお話にならないというのが辛いところです。


>ソフトウェア技術研究会で組木紙織さんが発表されていたような複雑な形の当たり判定を考えてもいいかもしれません。

残念ながら私は参加してないですー。
ゆっくりうpしていってね!!!
あ、超いまさらですが研究会お疲れ様です。

>このようなアルゴリズム系の話なら、アルゴリズム専門の教授に受けると思います。
>情報系なら一人はCに詳しいアルゴリズム専門の教授がいると思います。

なるほど。そういうのはプログラマー個人の技能や企業のノウハウなんだと勝手に思ってましたが。
研究対象としてもいけるんですね、へー。


>また、心理的な部分を攻めてみるのも面白いかもしれません。
>心理学的、統計的、その辺が詳しい教授には
>
>・弾幕が人に与える心理的効果
>
>みたいなテーマも頑張れば受け入れてもらえるかもしれません。
>東方を初め、弾幕シューティングが好きな人は、何か自分が好きな弾幕があると思いますし、
>その弾幕は始めてみた時「おぉ・・」と感動したと思います。

心理ですか。
ノーマルシューターの私は東方を始め弾幕STGの世界を俯瞰し切れていないので今なお感動し続けています。
東方以前のアーケードの弾幕STGのプレイ動画とか見ると東方の弾幕の元ネタになった弾幕とか沢山あるので(ガラ婦人とか)どの弾幕が好きかといわれてもいまいちピンとこないのですが。

現時点の私の実力で、しいて言うなら紅魔郷3面の一連の流れのバランスが特に好きです(優柔不断な私のことだから好みはまた変わるかもしれませんが。)。


>それは一体何故感動するのか、その原因は音楽なのか弾の配置なのかスピードなのか・・。
>そういうのを分類してみて、ユーザーの感動に貢献するというのもありかもしれません。
>ただこれにはアンケート調査などが必要だと思うので、大変かもしれません。

弾幕の魅力・・・

弾幕の見た目・避ける楽しさ・ゲーム性・シンクロする音楽や絵素材、設定・総合的なバランス
考えることをゲームソフトだけに絞ってもぱっと考え付くだけでこんなに考慮すべき要素がある。
プレイヤーの熟練度で弾幕に感想を抱く精神状態も変わってきそうですし。
ほかにもあんなことやこんなことやそんなことや・・・
真面目に考え出したらきりがないですねぇ。
"弾幕"という言葉に付随する意味を絞らないと話にならなそうです。
弾幕の魅力の心理研究アンケートは難しそうですね。弾幕シューター人口の問題もあります。
動画サイトで公開してアンケートをとるとか?アリか?そんな研究アリなのか?



>(学会で通用するアンケートの調査は厳しくとても大変ですよ・・)

体験談ですか?私は学会とかまだ意識したことが無いです。
卒業研究が最終的にどのような形に落ち着くものなのかもよく判っていません。
真面目に考える時期の筈なんですけど、先が思いやられます。


>大学生のサブテーマならこれ位の内容でもOKしてくれると思います。
>大学院の本テーマとしてとかだと話は別かもしれませんが・・。

サブテと本テの違いがわからないです。真剣さ、厳密さ、有用性の度合いとかですか?
すみません、身近に大学院生がいないもので。


雑談にしては長いw無理に相手してくれなくてもいいですからね。>dixqさん



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

Name: Dixq (管理人)  ..ウィザード(1,020,405ポイント)   Date: 2009/04/30(木) 19:01   No:32910     
Title: Re:はじめまして    
電車に乗り遅れたので携帯いじってるDixqです、こんにちは。

>サブテと本テの違いがわからないです。真剣さ、厳密さ、有用性の度合いとかですか?

一般的な認識はわかりわせんが、私が意図したのは、卒業研究として大学に残すものかどうかです。
メインテーマは卒論として提出し、発表会でも発表しますが、他のテーマは完全に自分の趣味としてやります。
ただ学会とか行くなら大学から補助が出るでしょうし、社会人になったら趣味で研究とか難しいですから興味ある研究は今やっとくべきかと思います。

そういう意味で言いました。

時間があるのは学生のうちだけだと現在身に染みて思います‥。


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

Name: はね  ..中級者(9,137ポイント)   Date: 2009/04/30(木) 23:59   No:32927     
Title: Re:はじめまして    
横から失礼します。

私は卒業研究でガッツリ、ゲーム作ったので少しでもアドバイスになればいいのですが、
医療分野はかなり隙間産業(?)です。

医療と言っても無数に分野があるのでコレ!とは言えないのですが、医療+ゲームは全くと言っていいほど
発達してないので需要や自由度もあり、卒業研究としての説得性も強いです。

かなり簡単ですが、
「現在のこの治療は○○ですが、これがゲームで行うことによって云々・・・作ります」みたいな切り口で。

「医療(治療) ゲーム」でググると色々とヒントが得られるかと思います。

失礼しました。


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

Name: こめかみ  ..熟練のプログラマー(45,135ポイント)   Date: 2009/05/01(金) 23:26   No:32978     
Title: Re:はじめまして    
>>dixqさん

>サブテと本テの違いがわからないです。真剣さ、厳密さ、有用性の度合いとかですか?

>一般的な認識はわかりわせんが、私が意図したのは、卒業研究として大学に残すものかどうかです。
>メインテーマは卒論として提出し、発表会でも発表しますが、他のテーマは完全に自分の趣味としてやります。
>ただ学会とか行くなら大学から補助が出るでしょうし、社会人になったら趣味で研究とか難しいですから興味>ある研究は今やっとくべきかと思います。

趣味の研究に補助がでるのですか。大学スゲェ!


>時間があるのは学生のうちだけだと現在身に染みて思います‥。

うえー、そんな話聞くと院に行ってモラトリアム続行したくなるじゃないですか。
でも院生活や研究だって要領よくなきゃ時間かかりますよねぇ。
院生活・サイト運営・ゲーム制作・バイク・その他よく知らない何か・
を全部平行してやってのけてたdixqさんは偉大ですね。



>>はねさん

>私は卒業研究でガッツリ、ゲーム作ったので少しでもアドバイスになればいいのですが、

!


>医療分野はかなり隙間産業(?)です。

!?


>医療と言っても無数に分野があるのでコレ!とは言えないのですが、医療+ゲームは全くと言っていいほど
>発達してないので需要や自由度もあり、卒業研究としての説得性も強いです。
>
>「医療(治療) ゲーム」でググると色々とヒントが得られるかと思います。

少し調べてみました。
医療とか訓練とかいろんな活用の道が模索されているんですね、ゲームって。
なるほど、ゲーム中毒がそもそも副作用なのだとしたら、
正しく遊べば薬用に転ずることもあるかもしれませんね。面白い。

果たして、弾幕が人を救えるか。


>かなり簡単ですが、
>「現在のこの治療は○○ですが、これがゲームで行うことによって云々・・・作ります」みたいな切り口で。

その理屈だと治療に使えそうな既存のゲームを探し出してくればいいのであって、
自分で作る理由にはならないような・・・
必然的に問題提起に沿うオリジナリティが求められるわけですか。
取っ掛かりさえ掴めば、アイディアがゆんゆん湧いてきそうです。

はねさんの卒業研究を拝見したいものですねー。
参考にしたいというのはもちろんあるのですが、
内容が純粋に面白そうです。
よかったら遊ばせてくれませんかね。
発表資料もみてみたいです。
面倒でなければ是非。

公開されるのが嫌でしたら私のメルアド晒します。


>横から失礼します。
>失礼しました。

じゃんじゃん失礼してください。大変参考になりました。



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

Name: はね  ..中級者(9,824ポイント)   Date: 2009/05/02(土) 01:18   No:32981     
Title: Re:はじめまして    
>>その理屈だと治療に使えそうな既存のゲームを探し出してくればいいのであって、
>>自分で作る理由にはならないような・・・
仰るとおりで、既存のゲームが治療に本当に有効ならばいいのですが、そのようなゲームはまずなかったです。
対象ユーザー、遊ぶことで医学的根拠を実践できるゲーム内容などなど・・・合致しているゲームは偶然の産物ではありえないですね。(←偉そうなこと言っていますが私自身半端に終わっていたり^^;)
私自身知識が乏しいので実在しているかもしれませんが・・・。
「目力トレーニング」や「脳トレ」もこれで良くなる。というゲームではないですし医学的根拠はありません。


>>卒業研究を拝見したいものですねー。
できればお見せしたいのですが、論文は学校に置いてきてしまってお見せできないです。
ソースやソフトも某会社の権利と開発環境の機密性的な話でお渡しすることができません。すみません。

ただ、展示の際に使用したゲームのパネル、参考にした論文はお見せできるので、
アドレスを教えて頂ければ送ります。

パネルはお客様用にかなり端折っていますが^^;


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

Name: こめかみ  ..熟練のプログラマー(45,946ポイント)   Date: 2009/05/03(日) 03:37   No:32992     
Title: Re:はじめまして    
>ただ、展示の際に使用したゲームのパネル、参考にした論文はお見せできるので、
>アドレスを教えて頂ければ送ります。

やった!
ではこちらアドレスになります。◎は@です。お手数おかけしてすみません。
come.comecame.came◎gmail.com

いそがなくていいですからね。
私もまだ集中して卒研に取り組める状態ではないので、
すぐには見れないかも知れません、申し訳ない。
このお礼はいつか必ずしますよ、カレーとか奢ります。


>「目力トレーニング」や「脳トレ」もこれで良くなる。というゲームではないですし医学的根拠はありません。

あー、その手のゲームはやった事が無いです。
目は悪くないし脳年齢なぞ興味ないですわー、なんて。ええ、私の視野が狭うございました。
評価するなら体験してからしろって話ですよね。
しかし興味が無いと遊ぶ機会も無いので仕方がないっちゃ仕方がないところです。
先入観なのですがなんか地味そうなんですよね診断系のゲームって。
私は派手で爽快なゲームが好きです。それと電子音、ピコピコっと。

というわけで、私はそれらがどういうゲームなのか把握してないのですが、
医学的根拠が無いなんて、ちょっと詐欺で無い?
まあゲームで遊ぶ側も本気でトレーニングしようとは思っていないのかもしれませんが。
そのタイトルの触れ込みだと、
他の遍くゲームは目と脳に悪いしトレーニングにならないのだぜ、と、
暗に言われているような気がしてちょっと心外。(考え過ぎ)


>>>卒業研究を拝見したいものですねー。
>できればお見せしたいのですが、論文は学校に置いてきてしまってお見せできないです。
>ソースやソフトも某会社の権利と開発環境の機密性的な話でお渡しすることができません。すみません。

いえいえ、取っ掛かりをつかめるだけでも大収穫です。ありがとうございます。
特にソースの関しては見せていただけても私の力量では解析が難しいでしょうし、
むしろ、お渡しされたら困ってしまうと思います。。



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

Name: こめかみ   Date: 2009/05/18(月) 18:30   No:328021242639038     
Title: Re:はじめまして    
こちら側も一応〆として報告しておきましょうかね。

ちゃんと届きました。ありがとうございました。




Name:  ..ぴよぴよ(143ポイント)   Date: 2009/05/02(土) 23:21   No:32989       
Title: 表示に関する質問    
はじめまして。
色々お世話になってます。

初歩的な質問なのですが、画像等のデータを動かしつつの文章の表記をするにはどのようにすればよいのですか?
画像を動かすのは、12. 画像を動かす の所で紹介されていた物を使ってみたのですが、ClearDrawScreenを使えこなせていない所為か、必要な文字まで消えてしまったり…。
イメージとしては、画面下方でキャラクターを動かし画面上方に文章、みたいな感じなのですが…。

よろしくお願いします。


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


Name: Mato  ..ぴよぴよ(705ポイント)   Date: 2009/05/03(日) 00:48   No:32991     
Title: Re:表示に関する質問    
はじめまして。

ClearDrawScreenは全てを消してしまいます。
ですので、「文章に関しては、動かさなくても表示し続ける」ことで良いかと思います。

キャラ描画 → 文章描画 → 表示 → Clear → (動かす) → キャラ描画 → 文章描画 → 表示

わかりにくくてすいません;;


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



Name: ゴルビー  ..ぴよぴよ(88ポイント)   Date: 2009/05/01(金) 23:46   No:32980       
Title: 凄く初歩的な質問です    
初めまして。
Cに対してかなり難しいイメージを持っていたのですが
四聖龍神録をやり自分もやってみたいなと考えるようになりました。

龍神録プログラミングを一通りやってみたのですが、
とても参考になりました。
色々と自分なりにいじってみて、
学校の友達にやらせたいなと思ったのですが・・・
どのファイルを持っていけばいいのか良くわかりません。
ファイル名などは変えていません。

それと、配布は絶対にしないのですが、
学校祭で一般の方?にプレイしてもらっても良いですか?
(どっちかというとコッチの方が重要かもしれません)


場違いでしたらスイマセン。


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


Name: Dixq (管理人)  ..ウィザード(1,020,511ポイント)   Date: 2009/05/02(土) 08:17   No:32983     
Title: Re:凄く初歩的な質問です    
こんにちは。

もちろん学園祭で使っていただいて構いませんよ。
もし配布される際は規約に準じて頂ければOKです。

また、実行ファイルはコンパイルした時に出来る「Debug」フォルダにありますからそれを一つ上のフォルダにコピーしてダブルクリックしてください。
ゲームが起動出来ると思います。


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

Name: ゴルビー  ..ぴよぴよ(95ポイント)   Date: 2009/05/02(土) 12:41   No:32984 解決!     
Title: Re:凄く初歩的な質問です    
ありがとうございます。
またわからないことがあれば、質問させていただきます。


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



Name: 研修生  ..かけだし(2,371ポイント)   Date: 2009/05/01(金) 09:42   No:32932       
Title: ポインタのサイズ    
ポインタのサイズについてご質問します。
int x[5];と宣言をすると、これのサイズsizeof(x)は20になります。※開発環境はVisualC++6.0です。
型はint *[5]でサイズが4つの配列が5個あるので4x5=20というのが出てきます。

次に配列にアドレス演算子&をつけます。配列にアドレス演算子&をつけると配列全体へのポインタになります。
これのサイズsizeof(&x)も20になります。型はint (*)[5]になり前者とは異なり、5個の配列へのポインタ
ということになります。これはあくまでポインタなのですがこのポインタのサイズが20になる理由を教えて下さい。
直感的にはわかるのですが、ちゃんと理解しておきたいのでお願いします。


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


Name: toyo  ..プログラマー(32,592ポイント)   Date: 2009/05/01(金) 10:16   No:32933     
Title: Re:ポインタのサイズ    
ポインタなのに20になる方がおかしい気がします
Cygwin の gccと Visual C++2008ではsizeof(&x)は4になりました
sizeof(x)についてはそういう決まりがあるので配列のサイズになります


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

Name: 研修生  ..かけだし(2,388ポイント)   Date: 2009/05/01(金) 10:22   No:32934     
Title: Re:ポインタのサイズ    
debugでsizeof(&x)の中身自体をみると4でしたがいざ実行したら20になりました

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

Name: box  ..ハッカー(139,416ポイント)   Date: 2009/05/01(金) 10:31   No:32935     
Title: Re:ポインタのサイズ    
> debugでsizeof(&x)の中身自体をみると4でしたがいざ実行したら20になりました

そのソースコードを見せてください。


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

Name: 研修生  ..かけだし(2,431ポイント)   Date: 2009/05/01(金) 10:36   No:32936     
Title: Re:ポインタのサイズ    

int main()
{
int x[5];
printf("%u",(unsigned)sizeof(&x));
return 0;
}

です


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

Name: Blue  ..中級者(9,614ポイント)   Date: 2009/05/01(金) 10:42   No:32937     
Title: Re:ポインタのサイズ    
>開発環境はVisualC++6.0です。
バグらしい。
http://f4.aaa.livedoor.jp/~pointc/No.22309.html

どうせ、適切な回答がもらえないとかいってまるちぽすとするんだろうな


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

Name: Blue  ..中級者(9,670ポイント)   Date: 2009/05/01(金) 10:59   No:32938     
Title: Re:ポインタのサイズ    
英語だけど同じ質問を発見
http://cboard.cprogramming.com/c-programming/80997-sizeof-pointer-array-array.html


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

Name: 研修生  ..かけだし(2,437ポイント)   Date: 2009/05/01(金) 14:48   No:32942 解決!     
Title: Re:ポインタのサイズ    
バグでしたか。納得です。

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

Name: dic  ..上級者(19,902ポイント)   Date: 2009/05/01(金) 18:58   No:32948     
Title: Re:ポインタのサイズ    
こういうことです

#include <stdio.h>

int main()
{
int x[5];
printf("xのサイズ:%u\n",(unsigned)sizeof(&x));
printf("x[0]のサイズ:%u\n",(unsigned)sizeof(&x[0]));
return 0;
}



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

Name: dic  ..上級者(20,011ポイント)   Date: 2009/05/01(金) 19:10   No:32949     
Title: Re:ポインタのサイズ    
と思ったんですが
下のコードは期待どおりには動いてくれませんね

#include <stdio.h>

int main()
{
char c[5];
printf("cのサイズ:%u\n",sizeof(&c));
printf("c[0]のサイズ:%u\n",sizeof(&c[0]));

return 0;
}

VC++6.0 のバグでしょうかね


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

Name: dic  ..上級者(20,167ポイント)   Date: 2009/05/01(金) 19:13   No:32950     
Title: Re:ポインタのサイズ    
返答者が頭がこんがらがって・・・

#include <stdio.h>

int main()
{
char c[5];
printf("cのサイズ:%u\n",sizeof(&c));
printf("c[0]のサイズ:%u\n",sizeof(&c[0]));
printf("c[0]のサイズ:%u\n",sizeof(c[0])); // ←これ

return 0;
}

char c[5]
&c[0] は アドレスなので4バイトですね
c[0] が 1バイトですね

すいません

バグではないですね


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

Name: dic  ..上級者(20,346ポイント)   Date: 2009/05/01(金) 19:52   No:32951     
Title: Re:ポインタのサイズ    
うわっちゃ〜
またミスってますね
No:32948 の返信は微妙に間違ってます
正確なソースは以下のようになります


#include <stdio.h>

int main()
{
char c[5];
printf("cのサイズ:%u\n",sizeof(&c));
printf("c[0]のアドレスのサイズ:%u\n",sizeof(&c[0]));
printf("c[0]のサイズ:%u\n",sizeof(c[0]));

int x[5];
printf("xのサイズ:%u\n",sizeof(x));
printf("x[0]のアドレスのサイズ:%u\n",sizeof(&x[0]));
printf("x[0]のサイズ:%u\n",sizeof(x[0]));
return 0;
}


ポインタでつまづくとは・・・
私もまだまだですね


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

Name: dic  ..上級者(20,521ポイント)   Date: 2009/05/01(金) 20:12   No:32952     
Title: Re:ポインタのサイズ    
なんかひとり勘違いをしていたようですね

#include <stdio.h>


int main()
{
int x[5];
printf( "xのサイズ:%u\n",sizeof(&x));
printf( "x[0]のアドレスサイズ:%u\n", sizeof(&x[0]) );
printf( "x[0]のサイズ:%u\n", sizeof(x[0]) );

int y;
printf( "yのサイズ:%u\n", sizeof(&y) );

return 0;
}


int x[5] と配列を宣言したので
sizeof(&x) としたら int x[5] の全体のサイズを返すので 20 です

sizeof(&x[0]) = 4 byte
sizeof(&x[1]) = 4 byte
sizeof(&x[2]) = 4 byte
sizeof(&x[3]) = 4 byte
sizeof(&x[4]) = 4 byte
合計20バイトです

int x と単品で宣言し
sizeof(&x) としたら int x のアドレスのサイズを返すので 4 です

もうすこし char でポインタの勉強をし、
理解できたら int型にチャレンジした方が良いかと思います


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

Name: YuO  ..プログラマー(31,019ポイント)   Date: 2009/05/01(金) 23:27   No:32979     
Title: Re:ポインタのサイズ    
お願いだから「ポインタのサイズ2」の私の投稿 (No.32944) を読んでほしい……。

> int x[5] と配列を宣言したので
> sizeof(&x) としたら int x[5] の全体のサイズを返すので 20 です

&xはint (*)[5]型の値,つまりポインタなのでVC++6の場合は4を返すのが「本来」正しいです。
sizeof(x)は20を返すのが正しいですが。


> もうすこし char でポインタの勉強をし、
> 理解できたら int型にチャレンジした方が良いかと思います

これはそっくりそのままdicさんに跳ね返ってきますよ。


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

Name: dic  ..上級者(20,666ポイント)   Date: 2009/05/02(土) 04:37   No:32982     
Title: Re:ポインタのサイズ    
int x[5];
sizeof(&x) が20を返し
sizeof(x) も20を返すのでおかしいのではないのか?
ということですね

ようやく理解できました


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



Name: NI  ..ぴよぴよ(60ポイント)   Date: 2009/05/01(金) 20:52   No:32953       
Title: 宣言の仕方を工夫しようで    
初歩的な質問なんですが、龍神録プログラミングの館の5章で変更のあるプログラムを書いて、
ビルドしたんですが、main.cppでエラーが起きました。なぜ起きたのか教えてください。
お願いします。
              main.cppのソース
#define GLOBAL_INSTANCE
#include "../include/GV.h"

//現在のキー入力処理を行う
int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
int CheckStateKey(unsigned char Handle);

//データのロード
void load();

//描画メイン
void graph_main();

int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
//キャラクタデータ宣言

//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
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;//初期化と裏画面化

load();//データロード

while(ProcessLoop()==0){//メインループ

graph_main();//描画メイン

if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
}

DxLib_End();//DXライブラリ終了処理
return 0;
}
このソースで実行すると以下のエラーが出ます。

main.cpp
c:\documents and settings\test\デスクトップ\ゲームプログラミング\project\project\1章\mydat\source\main.cpp(15) : error C2086: 'int img_ch[2][12]' : 再定義されました。



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


Name: はね  ..中級者(9,156ポイント)   Date: 2009/05/01(金) 21:02   No:32954     
Title: Re:宣言の仕方を工夫しようで    
エラー文の通りですが int img_ch がどこか他の場所に書いていませんか?

ちょい編集です。

同じ変数名(この場合は配列ですが)があるとPCはわからなくなります。
なので対処法としてはint img_ch2など名前を変えるか、メンバ変数にするか、
namespaceと使うなどあります。

推測ですが、main.cppのint img_chを消せばいけそうです。


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

Name: NI  ..ぴよぴよ(98ポイント)   Date: 2009/05/01(金) 21:05   No:32955     
Title: Re:宣言の仕方を工夫しようで    
はい。Load.cppとGraph.cppに書いてあります。

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

Name: pooka  ..ぴよぴよ(676ポイント)   Date: 2009/05/01(金) 21:07   No:32956     
Title: Re:宣言の仕方を工夫しようで    
エラーの通りで、int img_ch[2][12]が再定義されています。
5章をみるとGV.hに
GLOBAL int img_ch[2][12];
とあるのでmain.cppの
int img_ch[2][12];
を消してみてください。


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

Name: NI  ..ぴよぴよ(337ポイント)   Date: 2009/05/01(金) 21:12   No:32957     
Title: Re:宣言の仕方を工夫しようで    
> int img_ch[2][12];
> を消してみてください。
実行してみました。そうすると以下のエラーが起きます。main.obj : error LNK2005: "int (* img_ch)[12]" (?img_ch@@3PAY0M@HA) は既に load.obj で定義されています。
graph.obj : error LNK2005: "int (* img_ch)[12]" (?img_ch@@3PAY0M@HA) は既に load.obj で定義されています。
graph.obj : error LNK2005: "struct ch_t ch" (?ch@@3Uch_t@@A) は既に main.obj で定義されています。
LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
C:\Documents and Settings\TEST\デスクトップ\ゲームプログラミング\project\project\1章\Debug\RyuJin.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。


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

Name: pooka  ..ぴよぴよ(730ポイント)   Date: 2009/05/01(金) 21:18   No:32958     
Title: Re:宣言の仕方を工夫しようで    
環境が書かれていませんが、とりあえずリビルドしてみてください。
あとソースコードを記載する時は、規約に則ってプレタグを使うようにしてください。


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

Name: NI  ..ぴよぴよ(362ポイント)   Date: 2009/05/01(金) 21:20   No:32959     
Title: Re:宣言の仕方を工夫しようで    
> 環境が書かれていませんが、とりあえずリビルドしてみてください。
> あとソースコードを記載する時は、規約に則ってプレタグを使うようにしてください。
ソースコードについてはこれから十分気をつけます。
後、リビルドとはなんの事でしょうか?


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

Name: さが  ..かけだし(1,993ポイント)   Date: 2009/05/01(金) 21:26   No:32961     
Title: Re:宣言の仕方を工夫しようで    
まず5章を読み直すことからじゃないの?

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

Name: NI  ..ぴよぴよ(477ポイント)   Date: 2009/05/01(金) 21:31   No:32962     
Title: Re:宣言の仕方を工夫しようで    
すでに何回も読み直しました。
もしかしたら
 (後は「main.cpp」「graph.cpp」「load.cpp」にある変数の宣言部と、extern宣言を全て消してください。)
というところが間違っているかもしれません。
変数の宣言部やextern宣言というところがよく分からないので


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

Name: pooka  ..ぴよぴよ(769ポイント)   Date: 2009/05/01(金) 21:42   No:32963     
Title: Re:宣言の仕方を工夫しようで    
コンパイラは何を使用していますか?
Visual C++ならメニューのビルド→ソリューションのリビルドでリビルドできます。


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

Name: NI  ..ぴよぴよ(491ポイント)   Date: 2009/05/01(金) 21:46   No:32964     
Title: Re:宣言の仕方を工夫しようで    
> コンパイラは何を使用していますか?
> Visual C++ならメニューのビルド→ソリューションのリビルドでリビルドできます。
分かりました。やってみます。


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

Name: NI  ..ぴよぴよ(793ポイント)   Date: 2009/05/01(金) 21:48   No:32965     
Title: Re:宣言の仕方を工夫しようで    
やってみましたが、以下のエラーが出ました。
main.obj : error LNK2005: "int (* img_ch)[12]" (?img_ch@@3PAY0M@HA) は既に load.obj で定義されています。
graph.obj : error LNK2005: "int (* img_ch)[12]" (?img_ch@@3PAY0M@HA) は既に load.obj で定義されています。
graph.obj : error LNK2005: "struct ch_t ch" (?ch@@3Uch_t@@A) は既に main.obj で定義されています。
LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
C:\Documents and Settings\TEST\デスクトップ\ゲームプログラミング\project\project\1章\Debug\RyuJin.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。


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

Name: pooka  ..ぴよぴよ(851ポイント)   Date: 2009/05/01(金) 21:52   No:32966     
Title: Re:宣言の仕方を工夫しようで    
じゃあビルド→ソリューションのクリーンを行ってから、再度ビルドしてみてください。

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

Name: dic  ..上級者(20,538ポイント)   Date: 2009/05/01(金) 21:54   No:32967     
Title: Re:宣言の仕方を工夫しようで    
斜め読みですが
extern 絡みでしょう


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

Name: NI  ..ぴよぴよ(811ポイント)   Date: 2009/05/01(金) 21:57   No:32968     
Title: Re:宣言の仕方を工夫しようで    
> じゃあビルド→ソリューションのクリーンを行ってから、再度ビルドしてみてください。
やってみました。前回と同じ結果になりました。


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

Name: pooka  ..ぴよぴよ(888ポイント)   Date: 2009/05/01(金) 22:07   No:32970     
Title: Re:宣言の仕方を工夫しようで    
> はい。Load.cppとGraph.cppに書いてあります。
もしかしてLoad.cppとGraph.cppにも
extern int img_ch[2][12];
って書いてますか?
書いていたら消してみてください。


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

Name: NI  ..ぴよぴよ(842ポイント)   Date: 2009/05/01(金) 22:10   No:32971     
Title: Re:宣言の仕方を工夫しようで    
Load.cppとGraph.cppには
int img_ch[2][12];
と書いてあります。
後、main.cppにもexternは書いていません。


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

Name: pooka  ..ぴよぴよ(929ポイント)   Date: 2009/05/01(金) 22:20   No:32973     
Title: Re:宣言の仕方を工夫しようで    
GV.hに
extern int img_ch[2][12];
と書くだけで他の所には宣言しないようにしてください。
つまり、Load.cpp、Graph.cpp、main.cppはexternを消しただけではなく
int img_ch[2][12];
も書かないようにしてください。


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

Name: NI  ..ぴよぴよ(983ポイント)   Date: 2009/05/01(金) 22:26   No:32975     
Title: Re:宣言の仕方を工夫しようで    
> GV.hに
> extern int img_ch[2][12];
> と書くだけで他の所には宣言しないようにしてください。
> つまり、Load.cpp、Graph.cpp、main.cppはexternを消しただけではなく
> int img_ch[2][12];
> も書かないようにしてください。
>
上記のことを実行してみました。そうすると以下のエラーが起きました。(エラーが二個減りました)
graph.obj : error LNK2005: "struct ch_t ch" (?ch@@3Uch_t@@A) は既に main.obj で定義されています。

C:\Documents and Settings\TEST\デスクトップ\ゲームプログラミング\project\project\1章\Debug\RyuJin.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。


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

Name: pooka  ..かけだし(1,444ポイント)   Date: 2009/05/01(金) 22:38   No:32976     
Title: Re:宣言の仕方を工夫しようで    
5章をもう一度よく読んでみてください。
それと今main.cppはどんな感じになっていますか?


#define GLOBAL_INSTANCE
#include "../include/GV.h"

//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
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;//初期化と裏画面化

load();//データロード

while(ProcessLoop()==0){//メインループ

graph_main();//描画メイン

if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
}

DxLib_End();//DXライブラリ終了処理
return 0;
}


main.cppは5章まででこんな感じになると思います。

#すべての章のプロジェクトファイルを一括ダウンロードできるので、その中の5章のファイルと比較したほうが早く解決できるかもしれません。


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

Name: NI  ..かけだし(1,050ポイント)   Date: 2009/05/01(金) 22:58   No:32977 解決!     
Title: Re:宣言の仕方を工夫しようで    
プロジェクトファイルを一括ダウンロードして、自分が書いたソースと比べて直すことが出来ました。
関わってくださいました皆様、本当にありがとうございました!


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



Name: Q  ..ぴよぴよ(65ポイント)   Date: 2009/04/29(水) 19:23   No:32868       
Title: 龍神録の自機ショットが表示されない    
はじめまして。Qと申します。

早速質問なのですが、タイトルの通り自機ショットが表示されません。
龍神録の章に従って進んできたのですが、17章でショット音は出ているのにショットは表示されません。
graph_mainの中にはちゃんとgraph_cshot();が入っているし、imgの参照ファイルも正しいです。
ショット自体が駄目なのかと思い次の章へ進んでみると、敵はダメージを受けて消えています。

原因として何が考えられるでしょうか。アドバイスお願いします。

環境はwindows xp でvisual c++ 2008です。
ちなみに20章では、エフェクトが発生せず、敵弾以外の音も聞こえませんでした。



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


Name: Kou  ..入門者(4,285ポイント)   Date: 2009/04/30(木) 16:32   No:32904     
Title: Re:龍神録の自機ショットが表示されない    
graph_main()で、ショットを表示する順番が違っていませんか?
発射音がして敵も消えるなら、おそらく表示の順番だと思いますが。
・・・実は私も同じ症状があって、順番を変えたらきちんと表示された事がありました(汗)

graph_main()の中のgraph_cshot()を実行した後に、得点盤や背景など全体を広域で画像を表示する関数がないか
確認してみては?


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

Name: Q  ..ぴよぴよ(192ポイント)   Date: 2009/05/01(金) 22:16   No:32972     
Title: Re:龍神録の自機ショットが表示されない    
アドバイスありがとうございます。
そういうパターンもあるのですね。
graph_main()の中でgraph_cshot()を一番最後にしたのですが、それでも駄目でした。
何か他に原因があるみたいです。もうちょっといろいろ試してみます。
ありがとうございました。


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

Name:  ..ぴよぴよ(108ポイント)   Date: 2009/05/01(金) 22:22   No:32974 解決!     
Title: Re:龍神録の自機ショットが表示されない    
突然ですが解決しました。
load.cppで参照するときに『../』が書かれていなくて『/dat/img/char/bl_00.png』みたいになってました。
他の、音が鳴らない等の原因もそれでした。
なんか論外ですね...
ご迷惑おかけしました。


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



Name: situmon  ..プログラマー(25,653ポイント)   Date: 2009/04/26(日) 17:49   No:32756       
Title: 少し難しくしてもう一度シューティングゲームを作りました!    
昨日と今日で、どうしたら難しくやり応えがあるか考えてもういちど
作りました!もちろん背景も変えました。
PASSはsitumonです。

http://down11.ddo.jp/uploader/download/1240735676/attach/%E9%97%87%E5%8C%96%E7%8C%AB%E5%B1%8B%E6%95%B7.zip

あっちのほうはそろそろ終わって、こっちの難しいほうをプレイして
いただきたいです。
といってもたぶんすぐクリアできますが・・・
ボムに手を加えました・・・


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


Name: チルチル  ..中級者(9,197ポイント)   Date: 2009/04/26(日) 23:44   No:32767     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
またWLANの調子が悪くてダウンロードに時間がかかってしまいました・・

前回と比べてかなりクオリティ上りましたね、
全体的にうまくまとまっていると思います。

使われている画像や音楽は雰囲気と合っていていいですね、あれは自分で作ったんですか?
サイトなどで手に入れたのなら、どこのサイトか教えてください。

あとタイトル画面の矢印がちょっと見にくいですね、
もっと目立つ物に変更してみてはどうでしょうか?
それか選択されている所が明るく表示されるようにしてもいいですね。

それからタイトル画面などで一番下が選択されている時に下を押すと一番上に戻るようにしてはどうですか?
あとキャンセルを押したら終了が選択されるようにしてもいいですね。

何かウインドウのアイコンだけ変わってないような気がしますけど、気のせいですかね?
あとアイコンの余白は透過した方がきれいじゃないですか?

って言うか前回と比べて自機狙いが多いですね・・
初見殺しな弾幕はもう少し減らしてみてはどうでしょうか?

あとポーズ中は弾とかが消えていますが、解除した時に対応が間に合わないので
ポーズ中も弾とかを表示してはどうでしょうか?

それから弾幕を開始してから弾を撃つまでに時間がかかりすぎではないでしょうか?
弾が発射されるまでに体力を半分ぐらい減らせるんですが・・

あまり敵の前で止まっていることができないのでオプションにホーミング機能を付けてはどうでしょうか?

あと、当たり前かもしれませんがポーズ中にBGMの最後まで行くと
ポーズが解除されるまでループが始まらない気がするんですよね・・

それとFPS 60.0より60.0FPSの方が見やすくないですか?

あと最初の自分に向って加速してくる弾はちょっとよけにくいですね・・

それから道中とボス戦でBGMを変えてみてはいかがでしょうか?
BGMの切れ目も、もう少しわからないように調整するときれいになると思います。

決め技を使っている時は弾を消したり敵にダメージを与えたりしてはどうでしょうか?
あと消える時は自分に向って集まるように消してもいいかもしれません。

それから画面の上の方に行かないとよけられない弾幕は頻繁に出さないで
たまに入れるといいと思います。

あと中ボス前の敵の最後の弾だけ半月型になっていますが、あれはそういう弾なんですか?

それからボスの画像で弾幕名が隠れていますが、弾幕名の方を手前に表示してはどうですか?

それと分裂する弾は分裂しそうだなってわかるような動きをした方がいいと思います。

あと「光った目は逃がさない」だったかな?
あの弾幕の動きはなかなか見ごたえがありました。

ちなみに自機の人はどういう人なんですか?

それから猫さんのドット絵ですが粗いけど結構カワイイですね、あれって自分で描いたんですか?
自分で描いたのなら少し頑張って立ち絵を描いてみるとキャラが引き立つと思います。

って言うか一度にこれだけ書いたらわかりにくいですね、すいません・・

それにしても一日でこれだけ作れるとはすごいですね。


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

Name: situmon  ..プログラマー(26,661ポイント)   Date: 2009/04/27(月) 17:38   No:32787     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    

>>全体的にうまくまとまっていると思います。
ありがとうございます。

>>使われている画像や音楽は雰囲気と合っていていいですね、あれは自分で作ったんですか?
はい、画像はGIMP&PIXIAで作成、曲はTiMidity音源を使い、cherryで自作です。
すべて、(できるだけ)自作で作るようにしたいので・・・

>あとタイトル画面の矢印がちょっと見にくいですね、
明るくしたり、工夫をします。

>それからタイトル画面などで一番下が選択されている時に下を押すと一番上に戻るようにしてはどうですか?
そうですね、それを適用するだけで少し、ゲームの精度が上がりますね!

>何かウインドウのアイコンだけ変わってないような気がしますけど、気のせいですかね?
アイコンは花か猫で・・・猫はあえて透過してません。

>って言うか前回と比べて自機狙いが多いですね・・
>初見殺しな弾幕はもう少し減らしてみてはどうでしょうか?
>それと分裂する弾は分裂しそうだなってわかるような動きをした方がいいと思います。
何回もやってもらうため、わざと吃驚弾幕をつくりました。
自機狙いの恐ろしさ・・

>>あとポーズ中は弾とかが消えていますが、解除した時に対応が間に合わないので
そうですね・・・でもなるべくポーズは避けたいですね・・・

>>それから弾幕を開始してから弾を撃つまでに時間がかかりすぎではないでしょうか?
それは改善します。

>>あまり敵の前で止まっていることができないのでオプションにホーミング機能を付けてはどうでしょうか?
すいませんホーミングとは具体的にどういうことですか?

>あと、当たり前かもしれませんがポーズ中にBGMの最後まで行くと
>ポーズが解除されるまでループが始まらない気がするんですよね・・
すいません、そこまで気づきませんでした。

>>それとFPS 60.0より60.0FPSの方が見やすくないですか?

>>あと最初の自分に向って加速してくる弾はちょっとよけにくいですね・・・
弾幕好きのためのものにしましたから・・・

>それから道中とボス戦でBGMを変えてみてはいかがでしょうか?
つくるのってどうしても時間かかるんですよね・・・

>BGMの切れ目も、もう少しわからないように調整するときれいになると思います。
直せたら直します。

>>決め技を使っている時は弾を消したり敵にダメージを与えたりしてはどうでしょうか?
こんどはボムの効力にも気を使ってみます。

>>それから画面の上の方に行かないとよけられない弾幕は頻繁に出さないで
あれも気づいてましたが、難易度をできるだけ上げるために・・・

>>あと中ボス前の敵の最後の弾だけ半月型になっていますが、あれはそういう弾なんですか?
たまたま最後だけああなってしまいました。

>>それからボスの画像で弾幕名が隠れていますが、弾幕名の方を手前に表示してはどうですか?
手前・・・ですね

>>あと「光った目は逃がさない」だったかな?
ありがとうございます。

>>ちなみに自機の人はどういう人なんですか?
まだキャラ設定してません・・・

>>それから猫さんのドット絵ですが粗いけど結構カワイイですね、あれって自分で描いたんですか?
>>自分で描いたのなら少し頑張って立ち絵を描いてみるとキャラが引き立つと思います。
一年前の絵です。あの時はまだ、ペンタブがなかったので・・・



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

Name: めいらる  ..入門者(3,505ポイント)   Date: 2009/04/27(月) 18:05   No:32790     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
やってみました〜

とりあえずあの加速してくる弾の速度がちょっと異常に思えました(^ω^;)急にあの速度で飛んでこられると避けられる人はまずいないかと…
初見殺しとして使うならばちょっと回数が多い気もします。

あとボス戦でボスの技が始まるまでの間が長いのでほとんど撃たせずに倒せるのはちょっと拍子抜けしました〜

あとは全体的によくできていると思います〜がんばってください(^ω^)

※ちなみにホーミング機能とは自動的に敵に向かって追尾する弾のことです。オプションの弾のみホーミングにしたりすれば避けるのに必死になっていても敵にある程度攻撃ができます。


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

Name: チルチル  ..中級者(10,493ポイント)   Date: 2009/04/27(月) 19:07   No:32791     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
>>はい、画像はGIMP&PIXIAで作成、曲はTiMidity音源を使い、cherryで自作です。

すごいですね、私は弾幕を考えるので精一杯で素材を自作する余裕がありません・・
特にタイトル画面の音楽が気に入りました、もしよかったら私にも使わせてくれませんか?

>>あの時はまだ、ペンタブがなかったので・・・

ペンタブなしであれだけ描けるとしたら、ペンタブを使ったら相当な物が描けるんじゃないでしょうか?
ますます立ち絵が見たくなってきました。



ホーミング処理は龍神録プログラミングの館にコードが載っていますが、

弾の角度 = atan2( 敵のY座標 - 弾のY座標 , 敵のX座標 - 弾のX座標 );

という処理を行えば弾が敵の方を向きます、自機狙いと同じですね。



いきなり敵の方を向くんじゃなくて、敵の方にカーブする弾の場合は
1フレームのX方向とY方向の増加数を変数に格納して、
上の処理で求めた角度をsin,cos関数に入れて、
出てきた数から増加数を引いた数を十分の一ぐらいして増加数に足せば作れると思います。

すいません、わかりにくいですね・・
龍神録プログラミングの館の 弾幕「ケロちゃん風雨に負けず」を作ってみよう みたいな感じです。
まあ、自機のホーミング弾は普通いきなり敵の方を向きますからこの処理は必要ないと思います、
使うとしたら敵の自機狙いショットを自機に向ってカーブする弾に変えればいいかもしれません。



私のコードは参考にならないと思いますが試しに載せておきます。

決して文字数を多くしてポイントを稼ごうとしているわけではありませんよ・・

float Homing(float X,float Y,float Angle){//ホーミングの関数



long Reach=1000000;



if( Boss.flag==1 ){//フラグが立っていれば

if( (Boss.x-X)*(Boss.x-X)+(Boss.y-Y)*(Boss.y-Y)<Reach ){

Reach=(Boss.x-X)*(Boss.x-X)+(Boss.y-Y)*(Boss.y-Y);

t=-1;

}

}//フラグが立っていれば



for( j=0;j<50;j++ ){//ショットfor文

if( Enemy[j].flag==1 ){//フラグが立っていれば

if( (Enemy[j].x-X)*(Enemy[j].x-X)+(Enemy[j].y-Y)*(Enemy[j].y-Y)<Reach ){

Reach=(Enemy[j].x-X)*(Enemy[j].x-X)+(Enemy[j].y-Y)*(Enemy[j].y-Y);

t=j;

}

}//フラグが立っていれば

}//ショットfor文



j=Reach;

if( Reach==1000000 )return Angle;

else if( t==-1 )if( Boss.y-Y!=0 || Boss.x-X!=0 )return atan2( Boss.y-Y , Boss.x-X );else return Angle;

else if( Enemy[t].y-Y!=0 || Enemy[t].x-X!=0 )return atan2( Enemy[t].y-Y , Enemy[t].x-X );else return Angle;



}//ホーミングの関数


ホーミング処理を関数にしています、

弾の角度 = Homing( 弾のX座標 , 弾のY座標 , 弾の角度 );

のように使うと一番近い敵への角度が返ります、
弾の角度も引数になっているのは、敵が一体もいない時は元の角度を返すためです。

って言うか自機狙いができるんだから、こんなコード載せなくてもホーミングぐらい作れると思いますけどね。
ちがいますよ、ポイントを稼ごうとなんかしてませんよ・・


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

Name: yu  ..プログラマー(26,098ポイント)   Date: 2009/04/27(月) 20:22   No:32793     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
やってみました〜

皆さんと同じく、加速弾がとても速いように感じられました。
後は良くできていて楽しめました。

音楽、グラフィック自作ですか・・・
素晴らしいですね
自分の作ったものなんか素材が9割5分しめてます。orz


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

Name: situmon  ..プログラマー(27,091ポイント)   Date: 2009/04/27(月) 20:33   No:32794     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
曲に関してはOKです。
どんどん使ってください。
もしよければ、データファイルも渡しますんで・・・


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

Name: チルチル  ..中級者(11,006ポイント)   Date: 2009/04/27(月) 20:48   No:32795     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
ありがとうございます、ぜひ使わせていただきます。

ところで・・今までに自分で作ったデータが他にもあったりしませんか?

できれば他のデータも見て(使って)みたいんですが・・


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

Name: あ〜る  ..初心者(5,921ポイント)   Date: 2009/04/27(月) 22:54   No:32800     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
前作と今回の作品やってみましたよ〜
なんか凄い出来がいいですね、自分の作ってるのが凄い稚拙に見えてきて……
システムについてはほとんど言われてる様なので特にありませんが、個人的な感想としては弾幕シューティングにおける、「弾を避ける」事の楽しさの方は十分過ぎるくらいだったんですけど、シューティングゲーム自体の「敵を倒す爽快さ」が少し物足りなかったです
具体的に言うと、敵単体のHPが多すぎた気がしたので、もう少し少なくするか、若しくはHP1で弾幕も展開しない、やられるだけの敵がいるだけでも、少し変わると思います
長々とすいません…しかもちょっと上から目線だし…
ただ凄いしっかりと出来てて感動しました、ほんと尊敬します
これからも頑張って下さい


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

Name: situmon  ..プログラマー(27,165ポイント)   Date: 2009/04/28(火) 19:33   No:32811     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
あ〜るさんありがとうございます。
チルチルさん、データを見せるのはかまわないですが、
データと一言で言ってもたくさんあって、なんのことか明確にしてくださると助かります。


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

Name: チルチル  ..中級者(11,136ポイント)   Date: 2009/04/29(水) 00:15   No:32833     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
そうですね〜やはり一番興味があるのはBGMに使えそうなデータですね。

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

Name: situmon  ..プログラマー(27,557ポイント)   Date: 2009/04/29(水) 10:42   No:32841     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
ではメールアドレスを教えてください。
ほかに手段があってそっちのほうが安全だ!
というならばその手段を教えてくれると助かります。
そこに、アップロードしたときのパスワードをおくります。URLも、
曲データはあまり公の場に出すのはよくないと思うので。


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

Name: チルチル  ..中級者(11,198ポイント)   Date: 2009/04/29(水) 13:03   No:32850     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
え〜とアドレスは、

the.moon.of.original.sin.x@gmail.com

ですね、手間をかけてしまってすいません。


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

Name: situmon  ..プログラマー(27,594ポイント)   Date: 2009/04/29(水) 14:21   No:32854     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
いまおくりました、
なるべく早くのダウンロードをお願いします。
すいません。


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

Name: チルチル  ..中級者(11,310ポイント)   Date: 2009/04/29(水) 14:55   No:32857     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
すみません、アップローダーが混雑していてダウンロードができません、
もう少しまってください・・


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

Name: situmon  ..プログラマー(27,539ポイント)   Date: 2009/04/29(水) 14:58   No:32859     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
こちらもそうでしたので、気にせずに(>○<)
ゆっくりでいいですよ。
まだ混雑するでしょうし・・・


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

Name: チルチル  ..中級者(11,407ポイント)   Date: 2009/04/29(水) 21:43   No:32874     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
遅くなってすいません、ダウンロードできました。
今から聴いてみます、どうもありがとうございました。


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

Name: situmon  ..プログラマー(27,589ポイント)   Date: 2009/04/29(水) 21:55   No:32875     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
はい!!
ただwavだとmidiの音とはかなり違い、音がよくないものになってしまった曲もあります。
ですが、使いたければ、許可を取らなくても、どうぞ!!


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

Name: チルチル  ..中級者(11,506ポイント)   Date: 2009/04/30(木) 00:46   No:32885     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
曲聴きました、クオリティがすごいです、これはもうプロ級です。
曲自体もいいんですが、曲名も雰囲気と合っていていいです、
今まで色々なサイトの曲素材を聴きましたが、これほど完成度の高い曲は聴いた事がありません!!


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

Name: BEMANI  ..プログラマー(27,445ポイント)   Date: 2009/04/30(木) 03:40   No:32886     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
>>situmonさん
>ただwavだとmidiの音とはかなり違い、音がよくないものになってしまった曲もあります
MIDI は軽いですが使うPCで聴こえてくる音が違っていたります。
MIDI にも結構味があって個人的には好きですが、やはりどのPCで聴いても同じ WAVE(OGGやMP3) がいいですよね。

MIDI を WAVE に出力する時の音源で聴こえ方や音色が変わります。
音源を買うのが一番早いですが、フリーでは、SoundFont と呼ばれるものが存在します。
SoundFont は莫大な量あるので自分好みの音源を探すのにとても苦労しますが、音質は格段に上がります。
もし、今の音色ではちょっと変だなぁ〜と感じるのであれば是非導入してみて下さい。

自分は Timidity++ というソフトに SoundFont を入れて MIDI を WAVE に変換しています。
もし集めるのが面倒だと言うなら、今自分が持ってる中で使えそうなのをサーバーにアップしても構いません。
といっても、途中で面倒になったのであまり期待しない方がいいかもしれませんが;


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

Name: situmon  ..プログラマー(27,680ポイント)   Date: 2009/04/30(木) 21:07   No:32919     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
>チルチルさん
そういってもらえて何よりです!どうぞご自由にお使いください!!
>BEMANIさん
無料のSoundFontはすべて外国のサイトにしかなくて・・・
BEMANIさんが使っている無料で安全なのを教えてください。
あとTimidity++での、waveの変換ってどうやるんですか?


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

Name: yu  ..プログラマー(26,375ポイント)   Date: 2009/04/30(木) 21:23   No:32920     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
>あとTimidity++での、waveの変換ってどうやるんですか?

出力→RIFF WAVE file 
にして
再生すると設定の出力で設定された場所にwavのデータが生成されますよ

SoundFont便利ですよね〜
無料なのにかなり良い音が出ます・・・
ここの掲示板で存在を知りましたがw


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

Name: situmon  ..プログラマー(27,721ポイント)   Date: 2009/04/30(木) 22:21   No:32925     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
でも一気に変換することができませんがしょうがないのでしょうか?
またSoundFontについて知らないので教えてほしいです・・・
ぐぐってもよくわかりませんでした。


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

Name: yu  ..プログラマー(26,621ポイント)   Date: 2009/04/30(木) 22:50   No:32926     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
一気には変換できないのは仕様だと思います・・・


soundfontとはFM音源とかとはまた違った、
Wavetable音源で、これはサンプルの音をとっておいて
その音のピッチを変えることで音程が変えられるようになっているそうです。
それをMIDIのデータを元に、該当する音を鳴らしているそうです。

SoundFontは無料ですし、ネットにかなりたくさんのものが出回っています。
自分で好きな楽器を選んで自分に合ったものをそろえることができます。

無料で音源を変えたいときとかお勧めです。


#ちょっと事情により編集しました;


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

Name: BEMANI  ..プログラマー(27,898ポイント)   Date: 2009/05/01(金) 09:04   No:32930     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
>>situmonさん
確かに外国のサイトからDLすることが多いと思います。
DL する前に、まず SoundFont についての日本語レビューサイトを探します。
そこには大抵、「どんな音色なのか」「容量はどうか」「どこでDLできるのか」等
見た感じ、解りやすく書かれています。

DLする時は外国のサイトに登録しなければいけないケースがありますので、
その際はサイト登録してください。
怖くてできないのであればやらない方がいいです。


自分が初めて SoundFont を知ったサイトです。
ここでDLできた音源は、もちろん全てがいいとは言い切れませんが殆どいい音色でした。
まずは日本語のレビューから探し、そこからいいな〜と思った音色を使っていく感じでいいと思います。
ttp://gaha2.blog52.fc2.com/blog-entry-254.html



>またSoundFontについて知らないので教えてほしいです・・・
SoundFont を簡単に言ってしまえば 「自分好みの音色で音楽を再生出来るもの」です。
実際、気に食わない音色があれば自分で編集できますし、
容量が重くて使いにくいなら自分で容量を削減することもできます。
もちろん面倒くささはありますが・・・



>でも一気に変換することができませんがしょうがないのでしょうか?
二・三曲一気に変換したいと言うことでしょうか?
どのみち、一気に変換することはできないと思います。


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

Name: situmon  ..プログラマー(27,758ポイント)   Date: 2009/05/01(金) 22:04   No:32969 解決!     
Title: Re:少し難しくしてもう一度シューティングゲームを作りました!    
ありがとうございます。
ですが今の音源で満足なのでまだいいかなぁ?と思ったりです。
でもそんなことができることがわかったので勉強になりました。

みなさまどうもありがとうございました。


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



Name: 研修生  ..入門者(2,707ポイント)   Date: 2009/05/01(金) 15:01   No:32943       
Title: ポインタのサイズ2    
もう少しきちんと理解しておきたいのでご質問します。
int x[5];
int* p1 = x;
int(*p2)[5] = &x;



1,sizeof(x)
2,sizeof(&x);
3,sizeof(*x);
4,sizeof(p1);
5,sizeof(*p1);
6,sizeof(p2);
7,sizeof(*p2);

の値がどうなるか考えたいと思います。処理系がVisualC++6.0なのでintはサイズ4です。
1,ポインタが5個の配列の型はint *[5]で4x5=20

2,前質問でもありましたが、int(*)[5]で5個の配列へのポインタでサイズは4です。

3,型はint (**)[5]であくまでポインタなのでサイズは4?

4,型はint (**)[5]なので3と同じく4?

5,型はint (***)[5]で4?

6,型は・・??でサイズは??

7,型は・・??でサイズは??

1と2は合ってるとは思うのですが3,4,5は確信があやふやなのでご指摘いただければと思います。
6,7は型もサイズもわかりません。教えて下さい。




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


Name: YuO  ..プログラマー(30,933ポイント)   Date: 2009/05/01(金) 15:36   No:32944     
Title: Re:ポインタのサイズ2    
VC++6とのことなので,通常のポインタはすべて4バイトですね。
sizeof(int) == sizeof(int *)なので4とあるとどちらかわかりにくくなってしまいます。
このため,intをすべてcharに置き換えて書いてみます。

> 1,sizeof(x)

x : char [5] // array[5] of char
よって,
sizeof(x) = sizeof(char [5]) = sizeof(char) * 5 = 1 * 5 = 5

> 2,sizeof(&x);

x : char [5]
&x : char (*)[5} // pointer to array[5] of char
よって,
sizeof(&x) = sizeof(char (*)[5]) = 4

> 3,sizeof(*x);

x : char [5] // 配列型の一次式は特定の演算子以外に対して先頭要素へのポインタに変換 : char *
*x : char // char
よって
sizeof(*x) = sizeof(char) = 1

> 4,sizeof(p1);

p1 : char * // pointer to char
よって
sizeof(p1) = sizeof(char *) = 4

> 5,sizeof(*p1);

p1 : char *
*p1 : char
よって
sizeof(*p1) = sizeof(char) = 1

> 6,sizeof(p2);

p2: char (*)[5]
よって
sizeof(p2) = sizeof(char (*)[5]) = 4

> 7,sizeof(*p2);

p2: char (*)[5]
*p2 : char [5]
よって
sizeof(*p2) = sizeof(char [5]) = sizeof(char) * 5 = 1 * 5 = 5


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

Name: 研修生  ..入門者(2,730ポイント)   Date: 2009/05/01(金) 16:12   No:32946 解決!     
Title: Re:ポインタのサイズ2    
納得しました。ありがとうございました。

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



Name: ユズ  ..ぴよぴよ(53ポイント)   Date: 2009/05/01(金) 11:49   No:32939       
Title: 組み込み    
こんにちは。

C言語を使用してごく簡単なロボットを作ってみたいと考えています。

当方、Cを独学で始めたから1年たちます。
そのような初心者にもロボットなどを作ることはできるのでしょうか?

マイコンなどハードの知識はほとんど言っていいほどありません;



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


Name: non  ..熟練のプログラマー(40,198ポイント)   Date: 2009/05/01(金) 12:02   No:32940     
Title: Re:組み込み    
どのようなロボットを作ろうとしているかで、難易度はずいぶんと違ってきます。
梵天丸のようなものなら簡単でしょうし、2足歩行ロボットでもモーションコントローラを
使えばかなり簡単です。この場合は、マイコンの知識は不要です。
なお、勉学期間と習熟度は比例しません。


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

Name: ユズ  ..ぴよぴよ(94ポイント)   Date: 2009/05/01(金) 14:19   No:32941     
Title: Re:組み込み    
お答えありがとうございます。

いまのところ紙に書いた黒い線の上を移動するようなモノを作りたいと考えています。

ほかにはあまり思い浮かんでいません;


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



Name: 研修生  ..かけだし(1,999ポイント)   Date: 2009/04/30(木) 13:28   No:32896       
Title: 暗黙の型変換    
暗黙の型変換についてご質問です。私の参考書ではライブラリ関数strchrの中身はこのようになっていました。

char *strchr(const char* s, intc)
{
c=(char)c;
while(*s!=c){
if(*s=='\0'){
return NULL;
}
s++;
}
return (char *)s;
}

int main()
{
char str[50];
char temp
int ch;
 scanf("%s",str);
scanf("%s",temp)
ch=temp[0];
//printfの処理
return 0;
}


最初の所のキャストを行なっていますが暗黙の型変換によってこれは
c=(int)(char)c; となりこのキャストは無意味になっています。
これを意味のあるものにするにはどのように変更すればいいでしょうか?


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


Name: 御津凪 [URL]  ..比類無きプログラマー(84,692ポイント)   Date: 2009/04/30(木) 13:44   No:32897     
Title: Re:暗黙の型変換    
打ち間違い等はさておき、
> c=(int)(char)c;



少なくとも、 c の値を char 型のサイズに丸めて int 型としているという意味にはなります。

char 型が 8bit 表現であれば、
char 型 の範囲内に丸められ、 8bit 表現値の範囲内にあることが保障できます。

これは、
c &= 0xff;



と動作結果は全く同じ(はず)です。


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

Name: 研修生  ..かけだし(2,025ポイント)   Date: 2009/04/30(木) 15:38   No:32898     
Title: Re:暗黙の型変換    
意味は理解できましたが、解決策がほしいです。

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

Name: 御津凪 [URL]  ..比類無きプログラマー(84,973ポイント)   Date: 2009/04/30(木) 16:17   No:32901     
Title: Re:暗黙の型変換    
> 意味は理解できましたが、解決策がほしいです。

この解決策というのは、

> これを意味のあるものにするにはどのように変更すればいいでしょうか?

ということでしょうか?
そういうことであれば、上記に記載した通り、
"c=(char)c;" は意味のある(char 型のサイズに丸める)処理です。
この時点で意味があるのでそのままで OK です。

もし回答の意味が違う(ずれている)のであればその詳細をお願いします。


ちなみに引数を int から char にすると、 "c=(char)c;" の部分は不要になり(最適化されて無視され)ます。

また、C標準ライブラリ関数の引数(及び文字を返す関数の戻り値)に文字の型が char 型でないのは、
処理系によって char 型のサイズが違うことがあるため関数呼び出しの動作が変わってしまうのを防ぐためです。
(仕様を見ていないので不明ですが…)


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

Name: 研修生  ..かけだし(2,038ポイント)   Date: 2009/04/30(木) 16:54   No:32905     
Title: Re:暗黙の型変換    
うーん、そのキャストは意味がないと先輩に言われて質問したんですが。
c=(char)cは左辺がintなので折角キャストしても暗黙のキャストでintに戻ってしまう。
つまりc=(int)(char)cになってしまう という指摘を受けました。
この指摘は間違っているのでしょうか?
※VisualC++6.0が開発環境ですのでcharのサイズは1でした


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

Name: 御津凪 [URL]  ..比類無きプログラマー(85,435ポイント)   Date: 2009/04/30(木) 17:20   No:32906     
Title: Re:暗黙の型変換    
> c=(char)cは左辺がintなので折角キャストしても暗黙のキャストでintに戻ってしまう。

「型」としての説明では正しいですが、「変数の値」としての話なら間違いです。

一度、下記のプログラムを実行してみてください。
#include <stdio.h>


void putval_int_cast_char( int c ){
printf("[cast befor: %5d, ", c); // キャスト処理前の c の値
c = (char)c;
printf("cast after: %5d]\n", c); // キャスト処理後の c の値
}

int main( void ){
printf("Char:\n");
putval_int_cast_char('a');
putval_int_cast_char('A');
putval_int_cast_char('\0');
printf("Int:\n");
putval_int_cast_char(-32);
putval_int_cast_char(132);
putval_int_cast_char(256);
putval_int_cast_char(-256);
putval_int_cast_char(1600);
putval_int_cast_char(-1600);

return -1;
}


この処理を、こちらで mingw32 でデフォルト設定でコンパイル・実行した出力結果が下記になります。
Char:

[cast befor: 97, cast after: 97]
[cast befor: 65, cast after: 65]
[cast befor: 0, cast after: 0]
Int:
[cast befor: -32, cast after: -32]
[cast befor: 132, cast after: -124]
[cast befor: 256, cast after: 0]
[cast befor: -256, cast after: 0]
[cast befor: 1600, cast after: 64]
[cast befor: -1600, cast after: -64]


このようにキャスト前と後では値が変化しています。
これを踏まえてもう一度聞いてみてはどうでしょうか?
(もしかしたら先輩さんの説明が足りなかったのかもしれません)


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

Name: 研修生  ..かけだし(2,089ポイント)   Date: 2009/04/30(木) 18:20   No:32907     
Title: Re:暗黙の型変換    
激しく無知で恐縮なのですが値が変化していればどうなるのでしょう?
優先順位がchar<intなので暗黙の型変換が行なわれるという認識だったのですが、優先順位が
変わるのでしょうか?


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

Name: 御津凪 [URL]  ..比類無きプログラマー(85,739ポイント)   Date: 2009/04/30(木) 19:02   No:32911     
Title: Re:暗黙の型変換    
> 値が変化していればどうなるのでしょう?

たとえば strchr 関数の引数 c に 1600 を渡したとします。
c = (char)c; の処理により値が変化し、 64 という値になります。
64 はアスキーコードで '@' を表すため、 '@' が渡されたものとして、以降の処理を行います。


暗黙の型変換は、コンパイラが行っても問題ないと判断したときに行います。
(できなかったらエラーを出す)
警告レベルを最大にすると、値が変化する可能性のある暗黙の型変換(大きい型から小さい型への場合)
は全て警告として表示されます。
(逆は値が変化することがないため警告は出ません)

基本、暗黙の型変換には優先順位がありません(代入先の型に合わせるため)。
ただし、明示的な型変換があればそちらを優先し、その後、代入先の型と合わなければ暗黙の型変換が試みられます。
(明示的型変換 > 暗黙的型変換)

明示的型変換どうしの場合は、右から順に行われます。
c = (int)(char)c;



この例だと、 char 型にキャストしてから int 型にキャストします。


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

Name: たかぎ [URL]  ..比類無きプログラマー(98,095ポイント)   Date: 2009/04/30(木) 19:42   No:32915     
Title: Re:暗黙の型変換    
char型が符号付きか符号無しかは処理系定義です。Visual C++に限った場合でも、コンパイルオプションに依存します。
そして、符号付き整数型に表現範囲を超えた値を型変換しようとした場合、処理系定義の値になるか、処理系定義のシグナルが発生します。Visual C++に限れば期待通りに動作しますが、そうでなければ誤動作の可能性があります。つまり移植性がありません。
移植性に配慮して書き直すと、

char *strchr(const char* s, intc)
{
const unsigned char *ss = (const unsigned char*)s;

c=(unsigned char)c;
while(*ss!=c){
if(*ss=='\0'){
return NULL;
}
ss++;
}
return (char *)ss;
}

としなければなりません。


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

Name: 研修生  ..かけだし(2,115ポイント)   Date: 2009/05/01(金) 09:18   No:32931 解決!     
Title: Re:暗黙の型変換    
ちょっと考えてみます。ありがとうございました。

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



Name: 遠藤  ..ぴよぴよ(608ポイント)   Date: 2009/04/29(水) 20:43   No:32873       
Title: Escキーで終了    
アプリケーションを作っています
WinAPIを使った時は



case WM_KEYDOWN:
switch(wp){
case VK_ESCAPE: // Esc F12 キー を押したときの処理
case VK_F12:
PostMessage(hWnd,WM_CLOSE,0,0);
return 0;
}
break;



と書いてEscキーを押したら終了としていたのですが
以下のように書いてアプリを作っているのでどうすれば
終了させられるかがわからないです。

**************************サンプル


// test.cpp : メイン プロジェクト ファイルです。

#include "stdafx.h"
#include "Form1.h"

using namespace test;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
return 0;
}




どなたかご回答していただけないでしょうか?

XP
VS2005AC
C言語?


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


Name: Justy  ..伝説なるハッカー(347,582ポイント)   Date: 2009/05/01(金) 01:12   No:32929     
Title: Re:Escキーで終了    
 Form1に KeyDownとか KeyPressのイベント追加して、押されたキーが一致したら
Close()すればいいかと思いますが。


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



Name: Konno  ..ぴよぴよ(246ポイント)   Date: 2009/04/29(水) 10:02   No:32839       
Title: 導入してますがサンプル画像表示せず。    
はじめまして。
今野と申します。
Dxライブラリを導入しているところですが、最初から躓いてしましました。
皆様、よろしく、ご教授願います。
症状:
画像char.pngをサンプルプログラム実行用フォルダに保存して、以下のプログラム実行

#include "DxLib.h"
char st1[]="画像の保存場所が違うか、ファイル名が違うため、表示できません。";
char st2[]="正常に認識されています。";

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


if(LoadGraphScreen( 0 , 0 , "char.PNG" , TRUE ) == -1)
DrawString(50,220,st1,GetColor(255,255,255));
else
DrawString(50,220,st2,GetColor(255,255,255));


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

"画像の保存場所が違うか、ファイル名が違うため、表示できません。"が表示。
直線や円などは自由に表示できます。
なお、実行用フォルダパスは以下になります。
C:\Documents and Settings\********\My Documents\Visual Studio 2008\DxLib_VC\サンプルプログラム実行用フォルダ

使用環境
PC:Vaio VGN-T71B
OS:XP
Compiler:Visual C++ 2008 Express Edition



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


Name: こめかみ  ..熟練のプログラマー(46,312ポイント)   Date: 2009/04/30(木) 00:17   No:32882     
Title: Re:導入してますがサンプル画像表示せず。    
>画像char.pngをサンプルプログラム実行用フォルダに保存して、以下のプログラム実行
>
>if(LoadGraphScreen( 0 , 0 , "char.PNG" , TRUE ) == -1)

pngの文字サイズをそろえてみるとかどうでしょうか。


char.PNGとchar.pngの違いで認識されなかったりするかもです。


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

Name: Justy  ..伝説なるハッカー(346,949ポイント)   Date: 2009/04/30(木) 00:38   No:32883     
Title: Re:導入してますがサンプル画像表示せず。    
 このプログラムを実行するとどうなりますか?
 もし「〜は存在しません」と表示されたのなら、表示されたパスに画像がありますか?


#include "DxLib.h"
#include <shlwapi.h>
#include <string>

#pragma comment(lib, "shlwapi.lib")

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    ChangeWindowMode(TRUE);
    if(DxLib_Init() == -1) return -1;
    
    char currDir[MAX_PATH];
    GetCurrentDirectoryA(MAX_PATH, currDir);

    std::string s(currDir);
    s += "\\char.PNG";
    if(::PathFileExistsA(s.c_str()))
        s += "は存在します";
    else
        s += "は存在しません";
    ::MessageBoxA(GetMainWindowHandle(), s.c_str(), "Info", MB_OK);
    
    DxLib_End();
    return 0;
}



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

Name: Konno  ..ぴよぴよ(504ポイント)   Date: 2009/04/30(木) 18:33   No:32908     
Title: Re:導入してますがサンプル画像表示せず。    
こめかみさん、Justyさんへ
ご指導ありがとうございます。
まず、以下の事を行いました
(1)拡張子"PNG"の小文字"png"への変更→状況変わらず。
(2)Jusyさんのプログラム実行
C:\Documents and Setting\Konno\My Documents\VisualStadio2008\Projects\test_dx\Char.PNGは存在しません。
というメッセージが出た。

Char.PNGがあるDxLib_VCフォルダは「VisualStadio2008」フォルダの中にあり「test_dx」の中には入れていませんでした。
よってChar.PNGのファイルだけコピーし、test_dxフォルダに入れたら正常動作しました。
画像ファイルはそれを使うプロジェクトのフォルダに入れないといけないのでしょうか?

Konno


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

Name: Justy  ..伝説なるハッカー(347,395ポイント)   Date: 2009/04/30(木) 21:36   No:32921     
Title: Re:導入してますがサンプル画像表示せず。    

>画像ファイルはそれを使うプロジェクトのフォルダに入れないといけないのでしょうか?

 使うプロジェクトのフォルダに入れる、というかアプリから読むときに相対パスで
ただ "xxx.png"と指定したのなら、カレントディレクトリにそのファイルがなければなりません。

 カレントディレクトリは直接 exeをダブルクリックすればその exeのあるディレクトリが
カレントディレクトリとなりますが、特に何の設定もしていない状態で
VisualStudioのデバッガから実行したのであれば vcprojファイルのあるディレクトリが
基準となりますので、そのディレクトリからアクセスできる状態でなければなりません。


 デバッガから実行した時のカレントディレクトリを変更するにはプロジェクトのプロパティから
「構成プロパティ -> デバッグ」の「作業ディレクトリ」でパスを指定すると
起動したときに自動的にそのパスをカレントディレクトリにして起動してくれますので
この機能を使って直接 "DxLib_VCフォルダ"を指定してしまってもいいかもしれません。



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

Name: Konno  ..ぴよぴよ(554ポイント)   Date: 2009/04/30(木) 22:10   No:32923     
Title: Re:導入してますがサンプル画像表示せず。    
Justyさん
アドバスありがとうございました。
初歩的な質問だったのかもしれませんね。
ご丁寧にありがとうございました。
これから学習していきます。


Konno


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

Name: Konno  ..ぴよぴよ(582ポイント)   Date: 2009/04/30(木) 22:13   No:32924 解決!     
Title: Re:導入してますがサンプル画像表示せず。    
解決しました。

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

Konno


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



Name: YB  ..ぴよぴよ(61ポイント)   Date: 2009/04/30(木) 18:54   No:32909       
Title: 弾の精度について    
マウスの位置に向けて弾を発射するときに
ある程度弾がずれるような風にするには
どのようにすればよいのでしょうか?
色々試してみたもののうまくいかなかったので質問させていただきました。


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


Name: Kou  ..入門者(4,373ポイント)   Date: 2009/04/30(木) 19:05   No:32912     
Title: Re:弾の精度について    
> マウスの位置に向けて弾を発射するときに
> ある程度弾がずれるような風にするには

これは、画面上の特定の座標でマウスをクリックしたり、またはマウスカーソルがある座標に対して
弾を発射したとき、着弾位置がずれる(正確な位置に着弾せずに誤差が出る)・・・こんな意味でしょうか?

x、y各座標用の変数にランダムな値又は、補正値のような値(レベルによって正確さが変わる等)を加算・減算すればどうですか?

意味が違っていたらすみません・・・


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

Name: YB  ..ぴよぴよ(253ポイント)   Date: 2009/04/30(木) 19:23   No:32913     
Title: Re:弾の精度について    
判りづらい書き方ですいません。
大体そのような感じです。
それで

>x、y各座標用の変数にランダムな値又は、補正値のような値(レベルによって正確さが変わる等)を加算・減算すればどうですか?

というのはプレイヤーとマウスのx、yの距離に加算・減算すると言うことでしょうか?
その場合距離が長いほど誤差が少なくなり、近いほど誤差が大きくなるので、一定にしたいのですが・・・

判りにくい書き方ですみません


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

Name: チルチル  ..中級者(11,539ポイント)   Date: 2009/04/30(木) 19:28   No:32914     
Title: Re:弾の精度について    
発射点からマウスへの角度を求めて0.1から-0.1ぐらいの乱数を足して弾の角度にしてはどうですか?
これだと距離によって差が大きくなったりはしませんが、見た目には差が大きくなると思うので
ピタゴラスの定理でマウスへの距離を求めて、距離が遠くなるほど乱数の最大値が小さくなるようにすれば
距離に関係なく少しずれるようになると思います。
弾が確実に少しずれるようにしたいのなら、どのくらいずらすかをピタゴラスの定理で求めて
符号だけ乱数で決めればいいと思いますよ。
あ、でもそれじゃKouさんの方法と同じかな?


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

Name: YB  ..ぴよぴよ(277ポイント)   Date: 2009/04/30(木) 20:41   No:32917 解決!     
Title: Re:弾の精度について    
角度を乱数で変えて誤差を出す方法でやってみるのが一番良さそうなので、
これでやってみることにします。

ただ、角度については勉強不足だったんで、調べる必要がありそうです。

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


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

Name: Kou  ..入門者(4,500ポイント)   Date: 2009/04/30(木) 20:49   No:32918     
Title: Re:弾の精度について    
チルチルさんの方法の方が具体的でわかり易いと思いますよ。

x、yの座標を計算するときに、一般的な方法として

x = cos(角度)*速度
y = sin(角度)*速度

のような感じで計算すると思いますが、私の考えていた方法も、

x = cos(角度)*速度+補正値
y = sin(角度)*速度+補正値

こんな感じで考えていたので・・・
これだと距離に対しての誤差ではなく、単純に着弾位置の座標に対して、x、yの各座標用変数に加減算した分の
誤差が出るだけだと思います・・・説明下手でごめんなさい。

書き込み中に解決されていました・・・


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



Name: Huzzy  ..ぴよぴよ(974ポイント)   Date: 2009/04/29(水) 23:42   No:32879       
Title: 無題    
只今、龍神録をベースにグラディウス系のSTGを製作
させていただいています。
そして自機のサブウェポン製作に力を入れているのですが、
横スクSTGによく有るような?自機攻撃が爆弾を投下しているような、
軌道を中々画いてくれません;;

void ch0_shot_pattern(){
int k,d;
int n=cshot0num[ch.power<30?0:1];
for(int i=0;i<n;i++){
if((k=search_cshot())!=-1){
cshot[k].flag=1;
cshot[k].cnt=0;
cshot[k].angle=PI/2;
cshot[k].spd=10;
cshot[k].y=ch.y+cshot0pos_y[i];
cshot[k].x=ch.x+cshot0pos_x[i];
cshot[k].power=(n<2 ? 20 : 12) + ch.power/100;//2筋なら20,4筋なら12(50)
cshot[k].knd=0;
cshot[k].img=img_cshot[0];//画像番号代入(49)
}
}
}

の様な龍神録プログラムのアレンジなのですが、どのような関数を入れたら上記のような
軌道を画くかわかる方が居られましたら、ご教授頂けたら幸いです。


あとサブウェポンは一応、斜め上下ショット・ホーミングショットがありますが
他の攻撃パターンについて中々良い案が思いつきません。
こちらについてのアドバイスも頂けましたら助かります。

よろしくお願いします。




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


Name: 御津凪 [URL]  ..比類無きプログラマー(84,850ポイント)   Date: 2009/04/30(木) 16:30   No:32903     
Title: Re:無題    
真下に落とすような軌道なら、
下方向に加速するだけ(y座標に足す量を増やしていく)でOKです。

放物線のような軌道なら、
真下に落とす軌道処理に加え、x座標を一定値増減させるだけです。



サブウェポンの案ですが、
sin, cos 関数を使うと、うねる弾を発射できますよ。
いろいろ試すと面白いかもしれません。
(他にも敵に当たったら爆発するミサイルとかもありますね)


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



Name: 研修生  ..かけだし(1,655ポイント)   Date: 2009/04/30(木) 10:52   No:32889       
Title: scanf    
scanfで
scanf("%s",str);

scanf("%s",&str)は前者が適切で後者は前者とは型は違うけど値は同じなので見かけ上はうまくいくように
見えます。このとき何故値は同じになるのでしょうか?




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


Name: たかぎ [URL]  ..比類無きプログラマー(97,678ポイント)   Date: 2009/04/30(木) 11:10   No:32890     
Title: Re:scanf    
strの型によります。



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

Name: 研修生  ..かけだし(1,677ポイント)   Date: 2009/04/30(木) 11:17   No:32891     
Title: Re:scanf    
今回は
char str[50];となっています


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

Name: toyo  ..プログラマー(32,438ポイント)   Date: 2009/04/30(木) 12:39   No:32892     
Title: Re:scanf    
指してる場所(アドレス)は同じですが型が違います
str は&str[ 0 ]と同じになるので char* 型
じゃあ&strはchar**型じゃないのかというと実はchar(*)[ 50 ]型


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

Name: たかぎ [URL]  ..比類無きプログラマー(97,743ポイント)   Date: 2009/04/30(木) 12:55   No:32894     
Title: Re:scanf    
型に関してはtoyoさんが書かれたとおりです。
厳密なことをいえば、書式指定と実引数の型が矛盾しているので未定義の動作になります。


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

Name: 研修生  ..かけだし(1,708ポイント)   Date: 2009/04/30(木) 13:18   No:32895     
Title: Re:scanf    
何故同じ場所を指すのでしょうか?
配列の実装によって変わるような気もするのですが。


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

Name: 研修生  ..かけだし(2,032ポイント)   Date: 2009/04/30(木) 15:44   No:32899 解決!     
Title: Re:scanf    
残念ながらわかる方がいらっしゃらないので他でご質問します。
ありがとうございました。


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

Name: toyo  ..プログラマー(32,494ポイント)   Date: 2009/04/30(木) 15:52   No:32900     
Title: Re:scanf    
うまい説明が思いつきませんが
str : 配列の先頭要素のアドレス
&str : 50個の配列の先頭アドレス
配列の先頭アドレスと配列の先頭要素のアドレスは当然同じアドレスになる

でわかりませんかね


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

Name: toyo  ..プログラマー(32,526ポイント)   Date: 2009/04/30(木) 16:23   No:32902     
Title: Re:scanf    
構造体で例えると
構造体のアドレスと構造体の先頭メンバのアドレスが同じになる
みたいな


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



Name: ポン  ..ぴよぴよ(147ポイント)   Date: 2009/04/28(火) 20:41   No:32812       
Title: お願いします    
ボンバーマン風のアクションゲームを作っているのですが
敵のランダムな動かし方がわかりません。
何か参考になるサイトなどありましたら教えてください


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,017,637ポイント)   Date: 2009/04/28(火) 21:21   No:32815     
Title: Re:お願いします    
サイトはよくわかりませんが、
私は32で割り切れる座標に来た時に、ランダムに移動させるようにしていました。
あまり方法は多くないと思いますし、それでいいんじゃ無いかと思いますがどうでしょうか?

今どのように移動制御をしているかわかりませんが、
32ピクセルが1ブロックだとすると、32で割り切れる座標に差し掛かったとき、
移動方向をランダムに決め、そちらが進入可能ならそのまま歩かせ、
無理だったらもう一度それ以外の方向でランダムに決めたらいいと思います。

ただやってみて思いましたが、あまりチョコマカ不可解な動きをすると予測しにくいので、
特定の歩数以上歩いたら方向転換するようにしたほうがいいと思います。


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

Name: ポン  ..ぴよぴよ(187ポイント)   Date: 2009/04/29(水) 13:32   No:32852     
Title: Re:お願いします    
返信ありがとうございます。
詳しい動かし方のソースなどありましたら、教えてもらえませんか?


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

Name: conio  ..中級者(14,534ポイント)   Date: 2009/04/30(木) 12:47   No:32893     
Title: Re:お願いします    
-----------------------------------------------------------------
if(move_flag == MOVE_NONE){
  switch(rand % 4){
   case 0:move_flag = MOVE_RIGHT;break;
   case 1:move_flag = MOVE_LEFT;break;
   case 2:move_flag = MOVE_UP;break;
   case 3:move_flag = MOVE_DOWN;break;
   default:break;
  }
}
if(move_flag != MOVE_NONE){
  switch(move_flag){
   case MOVE_RIGHT:if((++mob.pt.x) % 32 == 0)
            move_flag = MOVE_NONE;
           break;
   case MOVE_LEFT:if((--mob.pt.x) % 32 == 0)
            move_flag = MOVE_NONE;
           break;
   case MOVE_UP:if((--mob.pt.y) % 32 == 0)
            move_flag = MOVE_NONE;
           break;
   case MOVE_DOWN:if((++mob.pt.y) % 32 == 0)
            move_flag = MOVE_NONE;
           break;
   default:break;
  }
}
-----------------------------------------------------------------
自分は大体こういう風にしました。
上記のプログラムでは、当たり判定などはしていないので、
壁であろうが通路であろうが進む仕様になってます。

@当たり判定を付ける
A進もうとした方向が壁であれば、別の方向へ進む
という処理を付ければ一応はマップに沿って動くようになります。

あと、ヘッダや変数の定義、動作確認などは省略してあるので参考程度にどうぞ。


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



Name: dust  ..ぴよぴよ(138ポイント)   Date: 2009/04/30(木) 00:38   No:32884       
Title: オブジェクトを動的に作成するプログラムについて    
はじめまして
課題をやっておりまして、
(1) 二次元配列を動的に生成して、その配列に文字列"TOKYO"と"SAITAMA"を格納して表示する
(2)struct student構造体オブジェクトを要素とする一次元配列を動的に生成して、
その配列にメンバの値を格納して表示する

二つの条件を元にプログラムを作成しました



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

#define STR_LENGTH 2 //文字列の長さ
#define STR_NUMBER 2 //文字列の数
#define STR_NAME 6

//構造体を宣言する
struct student
{
//名前、身長、体重を構造体オブジェクトのメンバに格納する関数の定義
char name[STR_NAME];
int math;
int eng;

};

//すべての文字列を一度に表示する関数の関数定義
void print_str(char *p)
{

puts(p);
}

int main(void)
{
int i,j;
char (*a)[STR_NAME] = NULL;//確保される記憶域の先頭アドレスを格納するための配列を宣言・定義する

struct student *b = NULL;//確保される記憶域の先頭アドレスを格納するための構造体を宣言・定義する

a = malloc(STR_LENGTH * STR_NAME * sizeof(char));
b = malloc(2 * sizeof(struct student));

if(a == NULL) //本当に記憶域が確保できたかを確認する
{
puts("記憶域の確保に失敗しました");
return NULL; //ここでプログラムを終了する
}


else if(b == NULL) //本当に記憶域が確保できたかを確認する
{
puts("記憶域の確保に失敗しました");
return NULL; //ここでプログラムを終了する
}

strcpy(a[0],"TOKYO");
strcpy(a[1],"SAITAMA");

puts("各文字列を表示します")
;
for(i=0; i < STR_LENGTH; i++)
print_str(&a[i][0]); //すべての文字列を出力する

strcpy(b[0].name,"TANAKA");
b[0].math=75;
b[0].eng=60;

strcpy(b[1].name,"YAMAMOTO");
b[1].math=85;
b[1].eng=90;

puts("各生徒の成績を表示します");

for (j=0; j < STR_NUMBER; j++)
printf("Name: %s\nMath: %d\nEng: %d\n",b[j].name,b[j].math,b[j].eng);


free(a); //記憶域を解放して破棄する
free(b); //記憶域を解放して破棄する

return 0;
}



実行結果が出るのですがどうしても警告が残ってしまいます。

警告 W8004 222.c 31: 'b' に代入した値は使われていない(関数 main )
警告 W8004 222.c 29: 'a' に代入した値は使われていない(関数 main )

a の確保のしかたが違うような気がするのですが・・・・
警告を消すためにプログラムをどう改良すればいいのか
よろしくお願いします。


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


Name: kazuoni [URL]  ..比類無きプログラマー(83,940ポイント)   Date: 2009/04/30(木) 04:09   No:32887     
Title: Re:オブジェクトを動的に作成するプログラムについて    
直接の原因は
ttp://oshiete1.goo.ne.jp/qa4796882.html
で回答されています。
(Borland C++ Compiler 5.5ではこのような警告がでるのですか^^;)
根本から解決するにはちょっと難しいような気がしますが・・・。

二次元配列動的確保っという題意を上のプログラムで満たしているかどうか微妙ですが、
以下の方法がよく参考書等では紹介されています。
char **x;

x=(char **)malloc(STR_NUMBER * sizeof(char *));
for(i=0 ; i<STR_NUMBER ; i++)
x[i] = (char *)malloc(STR_NAME * sizeof(char));


トピ主さんのプログラムが必然的に動いているのか、偶然なのか
がとても興味があるのですが^^;
(aの動的確保の際、どのようにキャストされているのか)


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



Name: maam  ..ぴよぴよ(31ポイント)   Date: 2009/04/27(月) 22:13   No:32797       
Title: 無題    
こんばんは。
ゲームを作ってみたくて、サイトを見ながら勉強しているのですが、シューティングゲームの館の[2.FPSを表示する]でつまずいてしまいました。
どうして50周分の時間を測定して平均をだすのでしょうか。
初歩的な質問ですいません。


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


Name: 御津凪 [URL]  ..比類無きプログラマー(84,784ポイント)   Date: 2009/04/28(火) 09:55   No:32804     
Title: Re:無題    
> どうして50周分の時間を測定して平均をだすのでしょうか。

単にどれくらいの FPS (速度)で動作しているかわかりやすくするためでしょう。
平均を出さず、その瞬間の FPS で測定・表示すると、
めまぐるしく FPS 値が上下するため、見づらい(速いのか遅いのかわからない)からです。

実際にそのようにしてどれくらい見づらいか試してみるのも一つの手でしょう。

あと、タイトルはわかりやすい名前にすると回答者、閲覧者に対してどのような内容なのか
把握できますので、内容に沿ったタイトルにするといいですよ。
(次回質問するときでもよろしいので)


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

Name: maam  ..ぴよぴよ(75ポイント)   Date: 2009/04/30(木) 00:13   No:32881     
Title: Re:無題    
御津凪さん

返信ありがとうございます。
勉強になりました。
次回質問するときはそうさせていただきます


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



Name: コンボボックス  ..ぴよぴよ(317ポイント)   Date: 2009/04/29(水) 19:13   No:32866       
Title: 無題    
コンボボックスに4つの項目があります。

しかし選択しないと項目が出ないのですが
いちばん上の項目を初期表示することはできないのでしょうか?

一応、調べてみたのですが
SelectedIndex = 0;
にしろと書いてありしたかと思うのですが
この書き方だとずっと0になるんではないかと思います・・・

実行したらエラーが帰ってきてしまいました。


private: System::Void comboBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) {
//listBox1->SelectedIndex = 0;
}
};



VisualStadio2005
VC++
XP

お時間のあります時にでも回答よろしくお願いします。


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


Name: コンボボックス  ..ぴよぴよ(317ポイント)   Date: 2009/04/29(水) 19:14   No:32867     
Title: コンボボックスについて    
すいません・・・
名前にタイトルを入れてしまいました・・・

タイトルは「コンボボックスについて」です


Name: さが  ..かけだし(1,897ポイント)   Date: 2009/04/29(水) 19:36   No:32870     
Title: Re:コンボボックスについて    
listBox1は関係あるのでしょうか。
エラーはそこだと思います。

>この書き方だとずっと0になるんではないかと思います・・・
Form1_Loadとかウィンドウがロードされた時に 0にすればよいかと思います。


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

Name: コンボボックス  ..ぴよぴよ(546ポイント)   Date: 2009/04/29(水) 20:36   No:32872     
Title: Re:コンボボックスについて    
>>さがさん

this->listBox1->SelectedIndex = 0;

this->comboBox1->SelectedIndex = 0;
と書いたらできました><

ロードのところにもつけ足したりしていたのに
表示されなかったのは一つ目のが原因だったようです・・・

削除ボタンを作っていて
int index = listBox1->SelectedIndex;
って所からコピペしたのですが

そこで間違えてしまっていたようです・・・

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



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

Name: コンボボックス  ..ぴよぴよ(592ポイント)   Date: 2009/04/29(水) 22:36   No:32877     
Title: Re:コンボボックスについて    
すいません・・・
治ったのはいいのですが
ほかのボタンを追加したりリソースをいじると

this->comboBox1->SelectedIndex = 0;

のような私が追加した項目が消えてしまいます。
消えないようにする方法はないでしょうか?

プロジェクトを作る時にWindowsフォームアプリケーションって選びました。


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



Name: situmon  ..プログラマー(27,056ポイント)   Date: 2009/04/27(月) 17:59   No:32789       
Title: シューティングゲーム配布について    
この掲示板でゲームを公開させていただいたのですが、
自作のコードとシューティングゲームの館のコードを混ぜてつくったものです。

ですが、あれは果たして自作というものなのか・・・
ということについて、判断が難しいものだったのでききたいです。

たとえば四聖龍神録のコピーをつくってそれを素材もコードもまったく変えず
に配布したら、それは自作とはいえないと思います。
それにそれを公開しても自分で作ってないので、トラブルもでてくるかもしれません。

ではシューティングゲームの館のコードを使用したあのゲームは、
自作といえて掲示板のみならずいろいろなところで自分の手でつくったといって公開できるのでしょうか。

だからといって、最初からすべて自分で、つくろうとしても、
シューティングゲームの館の原理と一緒で、
それに多少はシューティングゲームのコードを使わなくては
自分でつくれません。それでももし最初から自分で作ったら自作のコードだけのゲームと
いえるならばそろそろ、自分で土台をつくったほうがいいと思います。

ですが、なるべくあのゲームのコードでこれからもゲームを作って
自作として公開したいです。ですが、やはりあれも、
アレンジではないそのままあのコードを使って素材を変えただけのゲーム
となるならばいってくれると助かります。




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


Name: Dixq (管理人) [URL]  ..ウィザード(1,018,401ポイント)   Date: 2009/04/28(火) 21:32   No:32819     
Title: Re:Dixqさんへ    
素材もプログラムも完全コピーで自作として配布されるのはちょっと問題があると思いますが、
そうではなく参考にして頂いたのであれば、
こちらのサイトの紹介さえして頂ければ問題ありません。

もし自分でアレンジしたいということであれば、配列を使わず線形リストやベクターで作ってみるというのはどうでしょう?
龍神録の館で紹介しているプログラムは線形リストやベクターなどを使わず、予め使うかどうかわからない領域までガッポリ配列で用意しているので無駄ですよね。
そういうところを自分なりに効率化して改善してみてはどうでしょう?
それだけでも色々とプログラムは異なってくると思いますし、独自のアレンジが出来ると思います。

そうではなくて、コードはこのままで自分なりにチョコチョコアレンジして公開したいということなら、
上でも書いたとおり、説明書きさえしていただければ配布して頂いて問題ありません。



また、このトピの題名だと個人的な話のようで「メールでいいじゃないか」という意見が出そうなので、
何か「シューティングゲーム配布について」「館の利用規約について」のような名前がいいかもしれません。



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

Name: situmon  ..プログラマー(27,252ポイント)   Date: 2009/04/28(火) 21:37   No:32820     
Title: Re:Dixqさんへ    
>>線形リストやベクターなどを使わず、予め使うかどうかわからない領域までガッポリ配列で用意しているので>>無駄ですよね。
すいません。どういうことでしょう。
また線形リストやベクターについて教えてほしいです。
またそれは中学生でもできる内容ですか?

あとサイトの紹介をすればあのゲームは自作といえるのですか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,019,188ポイント)   Date: 2009/04/28(火) 21:46   No:32824     
Title: Re:Dixqさんへ    
どのようにサイトで宣伝されるかはお任せしますよ。

後、まずわからないことがあったら先にググってみましょう。

http://www.google.co.jp/search?hl=ja&q=%E7%B7%9A%E5%BD%A2%E3%83%AA%E3%82%B9%E3%83%88&lr=lang_ja&rlz=

http://www.google.co.jp/search?hl=ja&q=STL+vector&lr=lang_ja

また、これらには数学的な話は絡まないので、やる気さえあれば特に年齢は関係ないと思います。


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

Name: MNS  ..初心者(6,236ポイント)   Date: 2009/04/28(火) 21:51   No:32826     
Title: Re:Dixqさんへ    
リストについては
http://www.geocities.jp/ky_webid/cpp/library/003.html
ベクターについては
http://www.geocities.jp/ky_webid/cpp/library/002.html
を参考になされると良いと思います。

これらはC++で追加された新たな配列で、
使用する領域をいちいちを決めなくて良い利点があります。

つまりは、
int hairetu[4000];
という配列があったとき、この配列の100個の要素を使ったとしても、
残りの3900個の要素分の領域が使用されません。これは無駄です。

それに対し、リストやベクターは使用する領域を予め決める必要がありません。
常に使用している要素分の領域が確保されます(例外もありますが)

中学生でも十分理解できる内容なので、是非使ってみてください。


私が回答すべきではないのかも知れませんが、

P.S
(やはり回答すべきでないと思いましたので、削除しました)
>>管理人さん
被ってしまい、申し訳ないです。


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

Name: situmon  ..プログラマー(27,345ポイント)   Date: 2009/04/28(火) 21:59   No:32827     
Title: Re:Dixqさんへ    
すいません。
ベクターは 決めなくても、自動的に要素数を増やしてくれるもので、

線形リストがどうしてもよいサイトが見つからずわかりません。

でも ガッポリ配列で用意しているので は
たぶんつかわないフォントハンドルの数(たとえば8種類しか使わないのに20個宣言しとくとか・・・)
のことなどですね。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,019,250ポイント)   Date: 2009/04/28(火) 22:00   No:32828     
Title: Re:Dixqさんへ    
>>MNSさん

そこまでお気遣いなさらずとも^^;
ご配慮ありがとうございます。
何でも気軽に書き込みして頂いて結構ですので御気になさらず☆


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

Name: situmon  ..プログラマー(27,436ポイント)   Date: 2009/04/28(火) 22:10   No:32829     
Title: Re:Dixqさんへ    
MNSさんの回答がアップされているときにコメントしてたので、
さっきのような回答になり、不快な思いをさせたかもしれません・・・
すいません。お二方ともどうもありがとうございます!


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

Name: MNS  ..初心者(6,682ポイント)   Date: 2009/04/28(火) 22:16   No:32830     
Title: Re:Dixqさんへ    
>>線形リストがどうしてもよいサイトが見つからずわかりません。

std::list で話を進めます。
ヴェクターと基本は変わらず自動的に要素分だけ領域を確保してくれます。
ただ、ベクターは配列なので、要素を連続したアドレスに確保しています。
そのため、4000個の要素があったとして、200個目のデータを消したときに、後ろの3800個のデータを全て一つ分づつずらさなくてはいけません。
なので、ベクターで途中の要素を削除するのはかなり重い処理となります。

それに対し、
線形リスト(std::list)は、まず要素が違います。
ベクターの要素はただのデータで、メモリに連続的に並んでいますが、
リストの要素はデータと次の要素へのポインタを持ったノードというもので構成されています。
なので、リストの要素はベクターと違い、メモリに連続的に並んでいるわけではありません。
そのため、要素を削除しても、その前後の要素のポインタをつなぎかえるだけなので、
要素の削除がベクターに比べて優れています。

つまり、要素の増減が激しいもの(敵、弾)などは線形リストで管理すべきです。

P.S
詳しくは次のサイトをごらんになってください
http://www.cc.kyoto-su.ac.jp/~yamada/ap/list.html


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

Name: situmon  ..プログラマー(27,449ポイント)   Date: 2009/04/28(火) 22:57   No:32831     
Title: Re:Dixqさんへ    
ありがとうございます。
意味が少しわかった気がします。
最近、明快入門C++ シニア編 を買ってもらったのでそれで
ポインタをがんばりたいと思います。

あと別に説明書きがいやというわけではないのですが、
説明書きがいらない完全な自作、とはどういうものでしょうか?

たとえばシューティングゲームの館と原理はいっしょでいいけど、コードはすべて自作で・・・
とか、シューティングゲームの館のように、angleを使ってはいけない!
とか、構造体をつかっての敵の管理を他の管理のしかたに変えましょう!
という原理もちがった、完全に自作(考え方も)でないといけない!
とかです。

それともし自作のコードを使ったゲームをつくったとき、
素材はいままでDixqさんのシューティングの館のコードで作ってた
ゲームの素材を使ってもいいのですか?(つまり前公開してたゲームの自作の素材)


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

Name: situmon  ..プログラマー(27,617ポイント)   Date: 2009/04/29(水) 22:13   No:32876     
Title: Re:Dixqさんへ    
あと少し、ポインタについて今日勉強したのですが、
ポインタはどんどんゲーム製作に取り入れるべきでしょうか?


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



Name: なめこ  ..ぴよぴよ(109ポイント)   Date: 2009/04/29(水) 11:59   No:32844       
Title: コンボボックスとエディットボックス    
はじめまして。なめこと申します。
今、コンボボックスとエディットボックスのことでつまってしまいました。

プログラムの流れは

エディットボックス1に入力した文字列をコンボボックスに入れる。(例としてaa, bb)
コンボボックスに入力された文字列を選択し、エディットボックス2にそれぞれ数字を入力。(aaは1、bbは2)
その後、aa か bb を選択すると、エディットボックス3にエディットボックス2の数字(1、2)を出力する。

となるように考えています。

分からないところは、

aa か bb を選択すると、エディットボックス3にエディットボックス2の数字(1、2)を出力する。

のところです。
どのようにソースを書けば良いのでしょうか。


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


Name: Mist  ..熟練のプログラマー(59,848ポイント)   Date: 2009/04/29(水) 12:17   No:32848     
Title: Re:コンボボックスとエディットボックス    
規約にあるとおり開発環境を明示してください。
MFCなのか、Win32なのか、C++Builderなのか、はたまたVBなのか。
開発環境が不明ですと回答を得るのは無理だと思います。


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

Name: なめこ  ..ぴよぴよ(130ポイント)   Date: 2009/04/29(水) 17:46   No:32865     
Title: Re:コンボボックスとエディットボックス    
すみません。書くのを忘れていました。
開発環境は、Visual C++ 2008 の、WIN32です。


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



Name: ひよこ  ..プログラマー(27,084ポイント)   Date: 2009/04/29(水) 13:30   No:32851       
Title: 弾幕のスペルの表示    
弾幕はスペルが右上に表示されますが、どうやって表示すればいいのでしょうか?


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


Name: チルチル  ..中級者(11,273ポイント)   Date: 2009/04/29(水) 13:58   No:32853     
Title: Re:弾幕のスペルの表示    
スペルってスペル名のことですか?

スペル名を書いた画像を描画するか、
DrawString関数やDrawFormatString関数などの文字出力系関数に
GetDrawStringWidth関数など組み合わせて表示すればいいと思います。


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

Name: ひよこ  ..プログラマー(27,154ポイント)   Date: 2009/04/29(水) 14:35   No:32855     
Title: Re:弾幕のスペルの表示    
すみません。わかりずらいですね。
スペル名を表示させようと思ったら
表示されないということなんですが。どうしてでしょうか。
別トピの流星書記のゲームです。


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

Name: yu  ..プログラマー(26,319ポイント)   Date: 2009/04/29(水) 14:43   No:32856     
Title: Re:弾幕のスペルの表示    
あまりにも情報が少ないと思います・・・

具体的にどのような処理をしているのかが分からないので
答えようが無いと思います。

上手くいかないところのソースコードを見せてくださったら
何か分かるかもしれません。


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

Name: ひよこ  ..プログラマー(28,034ポイント)   Date: 2009/04/29(水) 14:57   No:32858     
Title: Re:弾幕のスペルの表示    
そうですね。きっぱりと決心しました。
こちらがうまくいかなかったソースです。

void boss_shot_bulletH012(){
DrawString( 190 , 40, "虹符 カラフルドロップ" ,GetColor( 255 , 255 , 255 ) );
#define TM000 120
int i,k,t=boss_shot.cnt%TM000,t2=boss_shot.cnt;
double angle;
//60カウント以下で10カウントに1回
if(t<60 && t%10==0){
angle=bossatan2();//自機とボスとの成す角
for(i=0;i<30;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = GetRand(1);//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 5;//弾の種類
boss_shot.bullet[k].angle = angle+PI2/30*i;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3;//スピード
se_flag[0]=1;
}
}
}
if(t<60 && t%10==0){
angle=bossatan2();//自機とボスとの成す角
for(i=0;i<30;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = GetRand(5);//弾の色
boss_shot.bullet[k].x = 200+i*5;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = bossatan3(k, boss_shot.bullet[k].x, boss_shot.bullet[k].y);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3;//スピード
se_flag[0]=1;
}
}
}
if(t<60 && t%10==0){
angle=bossatan2();//自機とボスとの成す角
for(i=0;i<30;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = GetRand(5);//弾の色
boss_shot.bullet[k].x = 100+i*5;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = bossatan3(k, boss_shot.bullet[k].x, boss_shot.bullet[k].y);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3;//スピード
se_flag[0]=1;
}
}
}
}

よろしくおねがいします。


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

Name: yu  ..プログラマー(26,329ポイント)   Date: 2009/04/29(水) 15:01   No:32860     
Title: Re:弾幕のスペルの表示    
龍神録の場合だったらですが

計算部
 ↓
描画部


の順ですから



スペル名描画
   ↓
  背景描画


になってしまって
文字が背景に潰されているんじゃないですか?


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

Name: ひよこ  ..プログラマー(29,418ポイント)   Date: 2009/04/29(水) 15:41   No:32861     
Title: Re:弾幕のスペルの表示    
よくわかりませんが、今わかるのは、成功する、成功しないソースがあることと
graph.cpp

void graph_main(){

if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);

graph_back_main();//背景描画メイン
graph_effect(0);//敵が死ぬエフェクト

if(bright_set.brt!=255)SetDrawBright(255,255,255);

graph_effect(4);//喰らいボムのエフェクト

if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);

graph_child();//ボスのアシスト描画
graph_item();//アイテム描画
graph_boss();//ボス描画
graph_enemy();//敵の描画
graph_cshot();//自機ショットの描画

if(bright_set.brt!=255)SetDrawBright(255,255,255);

graph_ch();//自機の描画

if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);

graph_lazer();//レーザーの描画


if(bright_set.brt!=255)SetDrawBright(255,255,255);

graph_effect(1);//ボムのエフェクト
graph_effect(2);//ボム線のエフェクト
graph_effect(3);//ボムキャラのエフェクト
graph_stage_title();//タイトルの表示
graph_board();//ボードの描画
graph_flash();//フラッシュ描画
graph_bullet();//弾の描画
graph_develop();
draw_fps(565,465);//fps描画
//draw_func_tm(450,250);//処理時間描画
}
main.cpp
case 7://通常処理
enter_func_tm("最初");
calc_ch(); enter_func_tm("キャラ計算");
ch_move(); enter_func_tm("キャラ移動");
cshot_main(); enter_func_tm("自機ショットメイン");
enemy_main(); enter_func_tm("敵処理メイン");
boss_shot_main();enter_func_tm("ボスショットメイン");
shot_main(); enter_func_tm("ショットメイン");
out_main(); enter_func_tm("当たり判定");
effect_main(); enter_func_tm("エフェクトメイン");
calc_main(); enter_func_tm("計算メイン");
graph_main(); enter_func_tm("描画メイン");
if(boss.flag==0)
stage_count++;
break;

というソースが書いてあることです。


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

Name: BEMANI  ..プログラマー(27,186ポイント)   Date: 2009/04/29(水) 16:10   No:32863     
Title: Re:弾幕のスペルの表示    
>>ひよこさん
>よくわかりませんが・・・
yuさんが仰っていることは関数を呼ぶ順番が違うのではないかと言う事です。

スペル名描画();
背景描画();

としてしまうと、スペル名を描画した後に背景が描画されてしまうので、
結果、文字が背景の下に隠れてしまいます。
ですので、文字を描画する関数を背景描画の関数の後に入れてみましょう。



ちょっと気になったのですが、
boss_shot_bulletH012 という関数の中でスペル名を表示させているのでしょうか?

DrawString( 190 , 40, "虹符 カラフルドロップ" ,GetColor( 255 , 255 , 255 ) );

これが多分スペル名を描画しているのだと思いますが、
この boss_shot_bulletH012 という関数がどこにも見当たらないのですが
この関数をどこかで呼んでいますか?


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

Name: ひよこ  ..プログラマー(30,203ポイント)   Date: 2009/04/29(水) 16:32   No:32864     
Title: Re:弾幕のスペルの表示    
そういうことなんですか。というより順番を変えてなくても表示された例があるので・・・
boss_shot_bulletH012 はひとつの弾幕をあらわしています。
龍神録の館の「1面を作って見よう」を改良したので呼ばれていると思います。
いちおうfunc.hをのせておきます。

extern void boss_shot_bulletH000();
extern void boss_shot_bulletH001();
extern void boss_shot_bulletH002();
extern void boss_shot_bulletH003();
extern void boss_shot_bulletH004();
extern void boss_shot_bulletH005();
extern void boss_shot_bulletH006();
extern void boss_shot_bulletH007();
extern void boss_shot_bulletH008();
extern void boss_shot_bulletH009();
extern void boss_shot_bulletH010();
extern void boss_shot_bulletH011();
extern void boss_shot_bulletH012();
extern void boss_shot_bulletH013();
extern void boss_shot_bulletH014();
extern void boss_shot_bulletH015();
extern void boss_shot_bulletH016();
extern void boss_shot_bulletH017();
extern void boss_shot_bulletH018();
extern void boss_shot_bulletH019();
extern void boss_shot_bulletH020();
extern void boss_shot_bulletH021();
extern void boss_shot_bulletH022();
extern void boss_shot_bulletH023();
extern void boss_shot_bulletH024();
extern void boss_shot_bulletH025();

void (*boss_shot_bullet[DANMAKU_MAX])() =
{
//中ボス

boss_shot_bulletH005,//ノーマル
boss_shot_bulletH001,//遊符 宇宙の奥までつながる道

//ラスボス
boss_shot_bulletH011,
boss_shot_bulletH004,//宇宙の奥
boss_shot_bulletH010,
boss_shot_bulletH002,//宇宙にて開く花
boss_shot_bulletH012,//虹符 カラフルドロップ
boss_shot_bulletH007,//大風車
boss_shot_bulletH003,//流星雨
//終り

boss_shot_bulletH000,//ぬるぽ回避用(この弾幕は出てこない)
};



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



Name: MGN  ..ぴよぴよ(17ポイント)   Date: 2009/04/29(水) 09:32   No:32837       
Title: サンプルプログラムが落とせない    
サンプルプログラムが落とせないのは私だけでしょうか
落そうとしても壊れたファイルしか落とせません


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


Name: 初級者  ..入門者(4,847ポイント)   Date: 2009/04/29(水) 09:44   No:32838     
Title: Re:サンプルプログラムが落とせない    
何の、という修飾語が抜けています。

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

Name: MGN  ..ぴよぴよ(39ポイント)   Date: 2009/04/29(水) 11:09   No:32842     
Title: Re:サンプルプログラムが落とせない    
このサイトにあるあらゆるサンプルプログラムです

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

Name: Mist  ..熟練のプログラマー(59,784ポイント)   Date: 2009/04/29(水) 11:10   No:32843     
Title: Re:サンプルプログラムが落とせない    
IEだと失敗するとの報告がしょっちゅう出ていますので根気よく何度もリトライするか、FireFoxのような非IEブラウザでダウンロードしてください。

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

Name: MGN  ..ぴよぴよ(63ポイント)   Date: 2009/04/29(水) 16:07   No:32862     
Title: Re:サンプルプログラムが落とせない    
ありがとうございます
firefoxでダウンロードできました


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



Name: 小僧寿司チェーン  ..ぴよぴよ(618ポイント)   Date: 2009/04/29(水) 11:59   No:32845 解決!       
Title: 拙い質問で恐縮なのですが……    
どうもはじめまして。最近四聖龍神録のサイトを見て自分もプログラミングを勉強し始めました。
手始めに作者さんのゲームプログラミングの館での紹介を手本にやり始めたのですが、14節で躓いてしまったのでここで質問させていただきたいと思います。

14節にて、画像を識別ハンドルに格納してから読み込むことは出来たのですが、何故か背景の表示ができないのです。
プログラムを見直してみたら、背景の読み込みが抜けていたので3節の透過処理を応用して表示させようとしたのですが、エラーは出ていないのにどうやってもキャラクターしか表示されず、背景は真っ黒なままで表示されませんでした。

もしかしたら既出かもしれませんが、検索してもどうも知りたい内容のスレッドが見つからなかったので立てさせていただきました。

皆様の貴重なお時間を割いていただくのは誠に恐縮なのですが、下記にプログラム内容を載せますので、何卒ご教授よろしくお願いいたします。




#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウィンドウモードに変更
if( DxLib_Init() == -1 ) return -1 ; // DXライブラリ初期化処理

int image;
int image2; //ハンドルを受け取るためのint型変数を宣言

image = LoadGraph( "char.png" ) ;
image2 = LoadGraph( "back.bpm" ) ; //画像のハンドルを代入

DrawGraph( 0 , 0 , image , TRUE ) ;
DrawGraph( 0 , 0 , image2 , FALSE ) ; //画像を表示

WaitKey(); //何かキー入力があるまで待つ
DxLib_End() ; //DXライブラリの終了処理
return 0 ;
}



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


Name: Ma  ..初心者(6,544ポイント)   Date: 2009/04/29(水) 12:07   No:32846     
Title: Re:拙い質問で恐縮なのですが……    
ファイル名が間違っていると思います

>mage2 = LoadGraph( "back.bpm" ) ; //画像のハンドルを代入

"back.bmp" では?


あ、それから規約読みましょうね。


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

Name: 小僧寿司チェーン  ..ぴよぴよ(684ポイント)   Date: 2009/04/29(水) 12:12   No:32847     
Title: Re:拙い質問で恐縮なのですが……    
うはwwwそうでしたwww

本当に恥ずかしい間違いをwww

回答者さん本当にありがとうございました助かりました(*^ω^*)

重ねて、駄スレ立ててしまって申し訳ありませんでしたm(__)m


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



Name: エデリュス  ..ぴよぴよ(689ポイント)   Date: 2009/04/28(火) 21:14   No:32813       
Title: 時間がない    
質問なんですが自分まだ学生なのであまり時間がないのですかが
皆さんはパソコンを使わない時はどのようにしていますか。



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


Name: Dixq (管理人) [URL]  ..ウィザード(1,017,421ポイント)   Date: 2009/04/28(火) 21:18   No:32814     
Title: Re:時間がない    
どのようにというと、スタンバイにするか、電源を切るか、付けっぱなしか・・ということでしょうか?

私は基本的にスタンバイなどにはせず、電源を切るようにしています。

何と言うか、次使うとき電源を入れなおした状態の方が気分的にスッキリする気がするので・・。

それに家に帰ったらPCの電源をいれ、着替えているうちに立ち上がるので、特に時間のロスも感じません。

人それぞれ違うでしょうし、特に正しい意見というものも無いと思うので、好きな方法でいいんじゃないでしょうか?

もし電気代とか考えるならこまめに切った方がいいとは思いますが。


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

Name: エデリュス  ..ぴよぴよ(740ポイント)   Date: 2009/04/28(火) 21:27   No:32818     
Title: Re:時間がない    
すいません。
質問が曖昧でした。
パソコンをできない時にCやSTGなど、どうやって考えていますか
と言う事です。


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

Name: MNS  ..初心者(5,722ポイント)   Date: 2009/04/28(火) 21:38   No:32821     
Title: Re:時間がない    
どうやって考えるか、というと・・

頭の中で考えるか、図で書くか位でしょうか?

まぁ、私はパソコンをしない時間はプログラミング関連の本を読んでますね。

一回読んだだけで全てを理解するのは熟練者以外はほぼ無理なので、

プログラミング関連の本は何度も読み返すとその分理解が深まります。
(私だけかもしれませんが)

学校帰りなどに何かゲーム製作関連の本を買ってみてはどうでしょうか?

恐らくは数週間〜数ヶ月くらいもつと思います。

でも、やはりはパソコンで実際にやってみるのが一番良いと思います^^


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

Name: yu  ..プログラマー(26,241ポイント)   Date: 2009/04/28(火) 21:40   No:32822     
Title: Re:時間がない    
自分は授業中、暇なときに紙に書いていたり・・・w
主にプログラムの設計とかですが。

後は数学とかの授業中に習ったことを使って、
プログラムで活かせないか考えたりもしてますw
(最近内積を習ったのですが、その時にレーザーの当たり判定に使えるのでは?と思っていたら
 龍神録で既に使われていました。orz)


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,019,031ポイント)   Date: 2009/04/28(火) 21:40   No:32823     
Title: Re:時間がない    
あぁ、そういうことでしたか^^;

>CやSTGなど

STGをシューティングゲームだとすると、同じカテゴリに属するものではないと思いますが、

「シューティングゲームを作る際、パソコンが使えない状況でC言語のプログラムをどのように考えるか」
または
「シューティングゲームのゲームシステムやストーリーなどの企画・設計をパソコンが使えない状況でどのように考えるか」

ということでよろしかったでしょうか。

私は使おうと思ったらいつでもPCが使える状態だったので、よくわかりませんが、メモ帳にプログラムコードをずらずら書いたことはよくあります。
もしエデリュスさんが大学生で、授業中も先生の話はどうでもいいから自分のSTG作りたいということなら、
ノートに書くしかないんじゃないでしょうか?
もしノートパソコン持ち込める環境なら持ち込んでもいいかもしれませんし。
(パソコンが使えない状況というのが電車の中なのか、授業中なのか、何か他の場合なのかそういうのでも応えは変わってくるのでは無いかと思います。)

いつかCのコンパイラが入る携帯を買おうと試みたことありますが、結局そこまでの利益が得られないという結論に至り、やめました。

私は龍神録を作ってるとき寝ても冷めてもSTGのゲームシステムやプログラムについて考えていました。
夜寝てて夢に見た弾幕を起きて実装したこともあります(病気過ぎ)

風呂に入ってるときやバイクに乗ってる時ってボーっとよく弾幕の構想を練ったりしていました。
家についたり風呂から上がったらすぐノートにその絵を描いたり、すぐ実装出来る状況なら実装したりしました。

パソコンが使えない状態でゲームが作りたいならノートに書く以外に無いのではないでしょうか?
アドバイスが出来ることといえばメモ帳を持ち歩く事位でしょうか。
寝ても冷めてもゲーム制作のこと考えてると、何気ない瞬間に名案浮かんだりすると思います。
しかし家に帰ってから実装しようと思っても、家に着くと忘れてしまったりするんですよね。

思いついたらまずメモる。これを続けるとすごくアイディア沢山のメモ帳が出来上がると思いますよ。


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

Name: エデリュス  ..ぴよぴよ(909ポイント)   Date: 2009/04/28(火) 21:50   No:32825 解決!     
Title: Re:時間がない    
MNSさん
>>プログラミング関連の本
そうですか。一冊買ってみてもいいんですが結構値が張りますね。本って・・・

yuさん
>>自分は授業中、暇なときに紙に書いていたり・・・
授業中は無理ですね。先生の目の前ですから。
昼休みとがやってみたいと思います。

Dixqさん
>>メモ帳にプログラムコードをずらずら書いた
プログラムコードをずらずら書く・・・自分にはまだ無理ですね・・・
>>思いついたらまずメモる。
そうですか。これからはメモを持ち歩くようにします。


現在見よう見真似で作成してます。
戸惑いや困惑がおおいですがさまざまなアドバイス
頂きこれからもがんばっていこうと思います。
ありがとうございました。

PS
解決ボタンを押し忘れました。
すいません。


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



Name: 河童  ..ぴよぴよ(156ポイント)   Date: 2009/04/28(火) 16:51   No:32809       
Title: 無題    
はじめまして
河童と名乗っているとある高校のパソコン同好会のものです

今度の学校祭に向けてシューティングゲームを作ろうと考えています
そこでこのサイトを参考にさせていただきたいと思います
制作の際お助けいただければ嬉しいです

管理人さんへ
最終的には販売することになると思うのですがその許可をぜひともお願いします。<m(__)m>


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,017,923ポイント)   Date: 2009/04/28(火) 21:25   No:32816     
Title: Re:無題    
河童さん、こんにちは。

学園祭で出し物ですか〜。いいですね。私もそういうのやってみたかったです。
最近忙しくてあまり掲示板を見る時間が無いのですが、休みの前日などは出来るだけ見るようにしています。
お手伝いは可能な範囲で出来るだけやりますよ。

プログラム面で、販売は構いませんが、その際は素材には充分気をつけて下さい。
とりあえず音素材系は全てご自分で揃えて下さい。
また、画像についても、東方をかなり参考にしてソックリにしているので、
ご自分で独自のものに作り直されたほうが無難かと思います。

もし作品が完成したらよければプレイさせていただけると光栄です。
頑張って下さい。


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



Name: ちゅん  ..かけだし(1,324ポイント)   Date: 2009/04/28(火) 15:41   No:32805       
Title: クラスへのポインタのポインタ    
こんにちは、久しぶりの投稿となります。
クラスへのポインタのポインタを用いてメンバにアクセスしたいのですが、
どうしたらいいのか分かりません…。

要するに
class hoge
{
public:
int a;
};
として、

hoge *b = new hoge;
hoge **c;
c = &b;
としたときに、cを用いてポインタbの指すクラスのメンバaにアクセスしたいのです。

c->aと試してみても、
error C2227: '->useParam' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
と出て、コンパイルできませんし、ネットでも調べてみましたが分からずじまいです。

どうかご存知の方がいらっしゃいましたら、ご教授願えますでしょうか。


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


Name: toyo  ..プログラマー(32,369ポイント)   Date: 2009/04/28(火) 15:55   No:32806     
Title: Re:クラスへのポインタのポインタ    
(*c)->a
でアクセスできるのでは


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

Name: 御津凪 [URL]  ..比類無きプログラマー(84,839ポイント)   Date: 2009/04/28(火) 15:55   No:32807     
Title: Re:クラスへのポインタのポインタ    
ポインタのポインタからアクセスするなら、 "(*c)->a" で可能です。
これは、"(*c)" で参照元のポインタにしてから "->a" で参照する意味です。

ちなみに、
(*(*c)).a



でもアクセスできます。
また、
hoge*** d = &c;



なら、
(*(*d))->a



でアクセスできます。


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

Name: ちゅん  ..かけだし(1,364ポイント)   Date: 2009/04/28(火) 16:50   No:32808 解決!     
Title: Re:クラスへのポインタのポインタ    
toyoさん、御津凪さん、ありがとうございます!
おかげで無事コンパイルできました!!


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



Name: 256bit  ..ぴよぴよ(94ポイント)   Date: 2009/04/27(月) 22:36   No:32798       
Title: BorlandC++ Compiler 5.5    
 BorlandC++ Compiler 5.5によるDXライブラリの使い方の手順を一通り行って見ました。しかし、 BCC Developerのエラーの意味がよくわかりません。エラーの意味を教えてください。

↓実際に出たエラー

エラー F1009 c:\documents and settings\紘基\デベハトップ\soturon\test\drawpixel.cpp: 入力ファイル 'c:\documents and settings\紘基\デベハトップ\soturon\test\drawpixel.cpp' をオープンできない
*** 1 errors in Compile ***

** error 1 ** deleting Debug\DrawPixel.obj

Compile End !! (Elapsed time 0:00.235)


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


Name: Justy  ..伝説なるハッカー(346,028ポイント)   Date: 2009/04/27(月) 23:27   No:32801     
Title: Re:BorlandC++ Compiler 5.5    

>エラーの意味を教えてください

 要するにファイル(drawpixel.cpp)が見つからないってことです。
 
 日本語文字を含むパスの処理に問題があるので、「デスクトップ」が「デベハトップ」に化けています。
 日本語の文字を含まないパスのディレクトリにプロジェクト一式を移動してから実行してみてください。


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

Name: 256bit  ..ぴよぴよ(215ポイント)   Date: 2009/04/27(月) 23:34   No:32803 解決!     
Title: Re:BorlandC++ Compiler 5.5    
 アドバイスありがとうございます。
 ファイルをデスクトップからローカルフォルダに移動した結果、動作ました。(^^)v


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



Name: ひで  ..入門者(2,536ポイント)   Date: 2009/04/27(月) 12:31   No:32782       
Title: 無題    
お久しぶりです。
またまた質問させていただきたいのですが、プログラムの処理が終わるまで掛かった時間を出力させたいのですが、時間に関することはまったくの無知なので教えてください。

いま作ってるソースを貼り付けました。
このプログラムは完成しているのですが、これに時間を出力させたいのです。
よろしくお願いします。

コンパイル環境はVC++2008です。


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


Name: kazuoni [URL]  ..比類無きプログラマー(83,558ポイント)   Date: 2009/04/27(月) 13:25   No:32783     
Title: Re:無題    
このあたりが参考になるかもしれません。

C 標準関数逆引き辞典
ttp://always-pg.com/c/runtime_rd/date/


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

Name: ひで  ..入門者(2,567ポイント)   Date: 2009/04/27(月) 17:12   No:32786     
Title: Re:無題    
>kazuoniさん

ありがとうございます。
拝見させていただきます。


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



Name: さが  ..ぴよぴよ(67ポイント)   Date: 2009/04/26(日) 20:08   No:32762       
Title: ウィンドウ終了処理    
ウィンドウモードで右上のバッテンを押した後に、タスクマネージャのプロセスを見ると実行していたものが残っているんですが
これはちゃんと終了されてないんですよね?

これを解決するためにはバッテンを無効かバッテンを押した時の処理を書く必要があると思うんですが
具体的にどのようにすればよいか教えてください。


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


Name: Justy  ..伝説なるハッカー(344,217ポイント)   Date: 2009/04/26(日) 22:48   No:32764     
Title: Re:ウィンドウ終了処理    
 環境が書いてありませんが、普通の Windows + Win32 APIの話でしょうか?

 プロセスが残っているということは、きっと WinMain関数の終端まで
到達していないのでしょう。

 ソースもないので、簡単なアドバイスしかできませんが、
GetMessage() or PeekMessage()のループの終了条件や WM_CLOSE/WM_DESTROYメッセージを
受け取って、適切に処理しているか確認してみてください。


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

Name: さが  ..ぴよぴよ(120ポイント)   Date: 2009/04/26(日) 23:21   No:32765     
Title: Re:ウィンドウ終了処理    
スイマセン。専門板では無いんですよね。

Visual C++ 2005 Express Edition で Dxライブラリを使用しています。
龍神録のプログラムをちょこちょこ変えて、別のゲームを作ってる感じです。


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

Name: Justy  ..伝説なるハッカー(344,393ポイント)   Date: 2009/04/27(月) 00:10   No:32768     
Title: Re:ウィンドウ終了処理    
 DXライブラリなら、ProcessMessage()の戻り値に応じてループから抜けるように
書いていますでしょうか?

 通常であれば×をクリックしたとき、ProcessMessage()の戻り値は -1が返りますので
その場合ループから抜けて WinMainを終わらせればいいはずです。

 龍神録の館のプログラムなら×を押したときに main.cppで while(ProcessLoop()==0) と書いてある
ループを抜けているかどうか確認してください。

 もし、戻り値に応じて処理してループを抜けているにも関わらず、プロセスが終了しない場合は
ブレイクポイントやステップ実行でどこまで実行されているのか確認して見てください。


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

Name: さが  ..ぴよぴよ(321ポイント)   Date: 2009/04/27(月) 16:47   No:32785 解決!     
Title: Re:ウィンドウ終了処理    
Justyさんありがとうございます。無事解決しました。

ProcessLoop()の通常時の返り値を1に設定し
while(ProcessLoop())としてメインをループしていました。

そして×が押された時にProcessLoopは-1を返しループを抜けるだろうと思い込んでいたのが原因でした。
while(ProcessLoop()==1)としたところ恐らく正常に終了することが出来ました。


ゲームの方はもう終盤なのに基本構造が分かってないとは、ダメな開発者ですね。。


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



Name: mosaa  ..かけだし(1,060ポイント)   Date: 2009/04/27(月) 12:07   No:32780       
Title: 配列で実現した待ち行列    
学校の課題なんですけど、
キュー(待ち行列)の操作なんですけど、
ちょっと初歩的なところがわからなくなりました。
途中まで考えましたが、

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

typedef long ELEM;

#define QUEUE_SIZE 100

ELEM queue[QUEUE_SIZE];
int front;
int rear;

#define next(a) (((a+1)%QUEUE_SIZE)

void error(char *s)
{
fprintf(stderr,s);
exit(1);
}
void init()
{
front =rear=0;
}
void show(){
while()
/*ここで、while文を使用して frontからrearまでを表示したい。
}
void main(){
enqueue(10);
show();
enqueue(32);
show();
enqueue(5);
show();
dequeue();
show();
enqueue(10);
show();
dequeue();
show();
dequeue();
show();
void enqueue(ELEM x)
{
if(next(rear)==front)
error("待ち行列がフルなので要素が入れられません\n");
queue[rear]=x;
rear=next(rear);
}
ELEM dequeue()
{
ELEM x;

if(front == rear)
error("待ち行列が空なので要素を取り出せません\n");
x=queue[front];
front=next(front);
return x;
}
int empty()
{
return front == rear;
}

という風です。エラーが多々あります。
queueの中身を表示するshow()関数が作成できると一番ですね。
分かりにくい部分があれば言ってください。
最終的な結果は多分、10 が残るのではないでしょうか?


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


Name: kazuoni [URL]  ..比類無きプログラマー(83,593ポイント)   Date: 2009/04/27(月) 14:50   No:32784     
Title: Re:キャラクターを動かすプログラム    
マルチはまずいです。。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1425607299

規約を読んでから、再度質問をしてください。
(新しいスレは立てなくてよいと思いますが。)


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



Name: Ma  ..初心者(6,444ポイント)   Date: 2009/04/26(日) 21:32   No:32763       
Title: MessageBox について    
DXライブラリを使ってBCC Developer でゲーム開発をしているものです。
今回 MessageBox を使って、終了確認を行っていたのですが、どうやらフルスクリーンになると
表示できないようなのですが、改善方法はないでしょうか?

以下が、MessageBox に使ったコードです。


int flag=MessageBox(GetMainWindowHandle() ,TEXT("本当に終了しますか?") , TEXT("終了確認") , MB_YESNO | MB_ICONQUESTION | MB_TOPMOST);
if(flag==IDNO){// NO を選択した。
//終了をキャンセル。
}
else{// YES を選択した。
//終了処理
}


この方法では、ウィンドウが最上面に表示されなかったりします。
たまに表示されたかと思って、「いいえ」を押してみると、
一瞬だけウィンドウのフォーカスがMessageBox にうつったせいか、
すぐにゲームには戻らず、一瞬だけデスクトップ画面にもどってまたゲームにもどります。
あたかも、Ctrl+Tab で一瞬だけ他のウィンドウにフォーカスした感じです。

他には、MessegeBox を移動したらメインウィンドウの画面が更新できないので、
画面にたくさんのMessegeBox がたぶった状態になったりします。
返り値を待っているからあたりまえでしょうが・・・


これらの問題点を解決する、他の方法や、改善する方法ありませんでしょうか?

ちなみに、ダイアログはほとんど初心者で、コピペ程度しかできません。
(この機会に学ぼうかとも思ってます。)


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


Name: Justy  ..伝説なるハッカー(344,417ポイント)   Date: 2009/04/27(月) 00:27   No:32769     
Title: Re:MessageBox について    
 ライブラリの初期化をしたあとにでも SetUseGDIFlag(TRUE)とやってみたらどうなりますか?

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

Name: Ma  ..初心者(6,462ポイント)   Date: 2009/04/27(月) 04:58   No:32771     
Title: Re:MessageBox について    
>Justy 様
とくに変化は見受けられませんでした。

*すいません訂正します。
最前面に表示できるようになりました。

ですが、戻り値を待っている間、ダイアログを移動すると、ダイアログの模様で背景が掻き消されていく問題。
また、二回目のダイアログ表示だと、なぜか最前面表示されなくなる問題ができました。
なぜ、一回目だけなのか分かりませんが・・・


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

Name: SooA [URL]  ..上級者(19,097ポイント)   Date: 2009/04/27(月) 06:39   No:32773     
Title: Re:MessageBox について    
MessageBoxの問題解決ではありませんが、
私の場合はバックグラウンド処理を停止させたく
なかったので、終了用ループ処理を追加して
ダイアログ風のメニューを描画しています。


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

Name: Ma  ..初心者(6,604ポイント)   Date: 2009/04/27(月) 07:58   No:32775     
Title: Re:MessageBox について    
>SooA
やっぱ自作ですかー。
ちょっとした手間を避けるためにと思ってたんですが、
やはり処理を続けるなら、単に描画するのがベストかもしれませんね。


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

Name: Justy  ..伝説なるハッカー(344,905ポイント)   Date: 2009/04/27(月) 10:03   No:32778     
Title: Re:MessageBox について    

>また、二回目のダイアログ表示だと、なぜか最前面表示されなくなる問題ができました

 あ、毎回ダイアログを出す前後で呼ばないとだめだったかも。

ttp://www.play21.jp/board/formz.cgi?action=res&resno=25277&page=&lognum=79&id=dixq&rln=25304



>ダイアログを移動すると、ダイアログの模様で背景が掻き消されていく問題。

 それはどうしようもないですね。
 MessageBox()が戻ってこないと処理が先に進まないんで……。


 SooAさんのように自前で書くのがベストかも。


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

Name: Ma  ..初心者(6,482ポイント)   Date: 2009/04/27(月) 12:10   No:32781 解決!     
Title: Re:MessageBox について    
以下、Justyさんがくださった過去ログからです。
>どうやらSetUseGDIFlag()はDxLib_Init()の後で使うべきだったようです。

う〜ん、どうも上手くいかないですね。
いろいろと不都合がありそうなので、自前で作ることにしました。


ご協力ありがとうございました<(_ _)>


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



Name: march3  ..かけだし(1,315ポイント)   Date: 2009/04/24(金) 18:49   No:32654       
Title: 【雑談?】ポインタのポインタについて    
最近このサイトにハマっています。
詳しい情報がたくさん得られるので、
今特に困っていることではないのですが、私の疑問の解決にご助力いただけると幸いです。


#include <stdio.h>

int main(void){
int a = 100;
int *p1,**p2,***p3;

p1 = &a;
p2 = &p1;
p3 = &p2;
printf("a = %d\n", ***p3);

return(0);
}


このプログラムで p3 が **p3 で実現できないのはなぜだと思われますか。

**p2 は「ポインタのアドレスを入れるもの」で
***p3 も本質的には「ポインタのアドレスを入れるもの」なので、
**p3で問題ないように思うのですが・・・言いたいこと伝わりますでしょうか。


#include <stdio.h>

int main(void){
int a = 100;
int *p1,**p2,**p3; //***p3 → **p3に変更

p1 = &a;
p2 = &p1;
p3 = &p2;
printf("a = %d\n", ***p3); //表示したいときだけ ***p3 で3つ先の値を意味させる

return(0);
}

このプログラムはコンパイルが通らないのですが、
なぜそういう仕様になっているのか疑問じゃありません?

気が向いたらでいいので返信くれるとうれしいです。


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


Name: MNS  ..初心者(5,431ポイント)   Date: 2009/04/24(金) 19:09   No:32655     
Title: Re:【雑談?】ポインタのポインタについて    
**p はポインタのアドレスを入れるものであって、
***p は'ポインタのポインタ'のアドレスを入れるものであるからではないでしょうか?

たぶん、ポインタのアドレスと、ポインタのポインタのアドレスは明確に区別されていると思います。
そうでないと、「ポインタ」と「ポインタのポインタ」でも同じことが言えると思いませんか?

あくまで私の考えですが・・、
(こういうことが聞きたかったのではなければ、聞き流してください;)


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

Name: toyo  ..プログラマー(32,067ポイント)   Date: 2009/04/24(金) 19:12   No:32656     
Title: Re:【雑談?】ポインタのポインタについて    
キャストすればコンパイルは通ります

#include <stdio.h>
int main(void){
int a = 100;
int *p1,**p2,**p3; //***p3 → **p3に変更
p1 = &a;
p2 = &p1;
p3 = (int**)&p2;
printf("a = %d\n", *(int*)(**p3)); //表示したいときだけ ***p3 で3つ先の値を意味させる
return(0);
}


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

Name: toyo  ..プログラマー(32,098ポイント)   Date: 2009/04/24(金) 19:20   No:32657     
Title: Re:【雑談?】ポインタのポインタについて    
たまたまintとポインタのサイズが同じだからint型をint*型にできただけですが


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

Name: toyo  ..プログラマー(32,236ポイント)   Date: 2009/04/24(金) 19:54   No:32659     
Title: Re:【雑談?】ポインタのポインタについて    
ポインタの段階でキャストすればいいのか

#include <stdio.h>
int main(void){
char a = 100;
char *p1,**p2,**p3; //***p3 → **p3に変更
p1 = &a;
p2 = &p1;
p3 = (char**)&p2;
printf("a = %d\n", **(char**)(*p3)); //表示したいときだけ ***p3 で3つ先の値を意味させる
return(0);
}


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

Name: box  ..ハッカー(139,224ポイント)   Date: 2009/04/24(金) 20:17   No:32660     
Title: Re:【雑談?】ポインタのポインタについて    

> int a = 100;
> int *p1,**p2,**p3; //***p3 → **p3に変更

このとき、

> p1 = &a;

aはint型ですので、p1はint *型であることを要求します。

> p2 = &p1;

p1はint *型ですので、p2はint **型であることを要求します。

> p3 = &p2;

p2はint **型ですので、p3はint ***型であることを要求します。
ところが、p3の実際の型はint **で、合っていません。
よって、コンパイルエラーが出ます。

> このプログラムはコンパイルが通らないのですが、
> なぜそういう仕様になっているのか疑問じゃありません?

全く疑問に思いません。



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

Name: march3  ..かけだし(1,630ポイント)   Date: 2009/04/24(金) 20:25   No:32661     
Title: Re:【雑談?】ポインタのポインタについて    
MNSさん
>「ポインタ」と「ポインタのポインタ」でも同じことが言えると思いませんか?

char a;
char *p1, **p2

p1 = &a;
p2 = &p1;


この場合でポインタ演算すると
p1+1 は +1Byte
p2+1 は +4Byte
のように加算される値が異なりますよね。

「ポインタのポインタ」と「変数のポインタ」は、指している先のサイズによって区別する必要があると思いませんか。
でも「ポインタのポインタ」と「ポインタのポインタのポインタ」は
ポインタのサイズが決まっていて、そのアドレスを入れるので、ここに区別は無くてもいいように思ってしまうんですよね。
(言ってることわかんなかったらごめんなさい)


toyoさん

キャストする方法は思いつきませんでした。
でもややこしすぎて実践では絶対に使いたくないですね。


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

Name: MNS  ..初心者(5,547ポイント)   Date: 2009/04/24(金) 20:33   No:32663     
Title: Re:【雑談?】ポインタのポインタについて    
それは単純に、
「ポインタのポインタ」と「ポインタのポインタのポインタ」が
区別できなくては、都合が悪いからではないからでしょうか?

少なくとも私は、
「ポインタのポインタのポインタ」に、「ポインタのアドレス」が代入できてしまうのは困ります。


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

Name: march3  ..かけだし(1,718ポイント)   Date: 2009/04/24(金) 20:35   No:32664     
Title: Re:【雑談?】ポインタのポインタについて    
boxさん

まぁ「そういうもんなんだ」といわれればそこまでなんですが、
そこをあえてなぜなのか問うてみたかったわけでして。。。
具体的に「こういう場合に **p と ***p に区別がないと不便だよね」ってのがあるとわかりやすいんですが


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

Name: toyo  ..プログラマー(32,354ポイント)   Date: 2009/04/24(金) 20:37   No:32666     
Title: Re:【雑談?】ポインタのポインタについて    
Cではポインタ同士の代入は自由にできますがキャストして型をあわせる必要があるということです
例えばmalloc()の戻り値はvoid*型でどのポインタ型にも代入できます
int***をint**に代入するのも問題ないと考えます(意味があるかどうかは別にして)


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

Name: box  ..ハッカー(139,378ポイント)   Date: 2009/04/24(金) 21:02   No:32670     
Title: Re:【雑談?】ポインタのポインタについて    
> 具体的に「こういう場合に **p と ***p に区別がないと不便だよね」ってのがあるとわかりやすいんですが

お書きになった、コンパイルの通らないコードが、
まさにその「区別がないと不便(まずい)」例であると思います。


「何とか型」と「何とか型へのポインタ」、例えば
int型とint *型とが異なることは理解されているのですよね?
だとすると、同じ理屈で、

typedef int ** int_double_ptr;
int_double_ptr p, *q;

と書いたとき、pとqとは型が異なる、つまり

pは実際はint **型
qは実際はint ***型

で、両者は別物
ということも理解できるのではないでしょうか。


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

Name: 通りすがり  ..上級者(16,196ポイント)   Date: 2009/04/26(日) 04:27   No:32739     
Title: Re:【雑談?】ポインタのポインタについて    
>具体的に「こういう場合に **p と ***p に区別がないと不便だよね」ってのがあるとわかりやすいんですが

もしできたとしましょう。

-------------------------------------------------------------------------------------------------
int i;
int *p;
int *pp; //これはダブルポインタ用途
int *ppp; //これはトリプルポインタ用途

i = 10;
p = &i;
pp = &p;
ppp = &pp;

printf("%d", ***ppp); //これはよい

//1.ppを間違えてトリプルポインタとして扱って表示しようとした場合
printf("%d", ***pp); //『10』をintのメモリアドレスとして参照しようとして確実に停止する

//2.pppを間違えてポインタとして扱って表示しようとした場合
printf("%d", *ppp); //停止はしないけど&ppのメモリアドレスが表示されて意図した動作をしない

//3.pppを間違えてポインタとして扱って、配列番号として使おうとした場合
int i2;
int hairetsu[10];
i2 = hairetsu[*ppp]; //*pppは&ppのアドレスが入っている。とんでもない数値なのでまず停止
-------------------------------------------------------------------------------------------------

記述を間違えたときに致命的な問題がすぐに起こります。

問題なのは、問題の部分までプログラムを実行してからでないとこれらのエラーに気づけないことです。
コンパイルエラーだとすぐわかるので、効率的でしょう?

上のコードは
pp = (int *)&p;
などのように記述すればコンパイルが通るので、実際に動作を試してみるとよいかと。


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

Name: 通りすがり  ..上級者(16,637ポイント)   Date: 2009/04/26(日) 05:17   No:32740     
Title: Re:【雑談?】ポインタのポインタについて    
>上のコードは
>pp = (int *)&p;
>などのように記述すればコンパイルが通るので、実際に動作を試してみるとよいかと。

書いておきます。


#include <stdio.h>

int main(){

int i;
int *p;
int *pp; //これはダブルポインタ用途
int *ppp; //これはトリプルポインタ用途

int i2;
int hairetsu[20];

i = 10;
p = &i;
pp = (int *)&p;
ppp = (int *)&pp;

printf("%d", ***(int ***)ppp); //これはよい

//1.ppを間違えてトリプルポインタとして扱って表示しようとした場合
printf("%d", ***(int ***)pp); //『10』をintのメモリアドレスとして参照しようとして停止

//2.pppを間違えてポインタとして扱って表示しようとした場合
printf("%d", *(int *)ppp); //停止はしないけど&ppのメモリアドレスが表示されて意味を成さない

//3.pppを間違えてポインタとして扱って、配列番号として使った場合
i2 = hairetsu[*ppp]; //*pppは&ppのアドレスが入っている。とんでもない数値なのでまず停止
return 0;

}


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

Name: march3  ..かけだし(1,855ポイント)   Date: 2009/04/27(月) 08:05   No:32776 解決!     
Title: Re:【雑談?】ポインタのポインタについて    
>問題なのは、問題の部分までプログラムを実行してからでないとこれらのエラーに気づけないことです。
>コンパイルエラーだとすぐわかるので、効率的でしょう?

おぉ、なるほど。
コンパイルのときに気づけるか、実行してバグってからでないと気づけないかの違いですか。
確かに圧倒的な違いですね。納得です。


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



Name: 遠藤  ..ぴよぴよ(105ポイント)   Date: 2009/04/15(水) 21:35   No:32280       
Title: APIで背景の色?    
WindowsAPIを使いフリーソフトを作ろうかと考えています。
添付した中にあります右の画像が現在の私が作れたものです。
左が本についていたものになります。
左の背景見たく灰色?にしたいのですがソースの何処を変えればいいのでしょうか・・・?

また日曜〜月曜までボタンを作り
それぞれに10文字程度のメモ欄を5個づつ持たせようと
しているのですがソースの書く場所がどこにすればよいのかがわかりません><


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


Name: ランド  ..入門者(4,015ポイント)   Date: 2009/04/15(水) 22:47   No:32293     
Title: Re:APIで背景の色?    
背景については、ウィンドウクラスを登録する箇所に
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
とあるので、WHITE_BRUSHを所定の灰色のブラシに変更するとお望みの結果になるかと。
GRAY_BRUSH?の他にも灰色が何種類かあったと思いますので、調べてみてください。


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

Name: スレ  ..ぴよぴよ(28ポイント)   Date: 2009/04/15(水) 23:04   No:32296     
Title: Re:APIで背景の色?    
調べてみたのですが添付したツールの灰色はないようです・・・。

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

Name: ランド  ..入門者(4,124ポイント)   Date: 2009/04/16(木) 00:13   No:32301     
Title: Re:APIで背景の色?    
すみません、無い場合を考慮していませんでした。
CreateSolidBrush関数でブラシを作成できますので、そちらを利用してみて下さい。
RGB(210,210,210)あたりがそれらしく見えましたが、具体的なRGBの数値は見つけられませんでした。

画像ツールにてRGB数値を抽出しても明度の有無で違った雰囲気に・・・


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

Name: スレ  ..ぴよぴよ(81ポイント)   Date: 2009/04/16(木) 00:16   No:32302     
Title: Re:APIで背景の色?    
なるほど・・・
調べていたらダイアログボックス?みたいなのでも作れることを調べたのですが
フリーソフトなどのツール制作は
こちらでやるのが一般的なのでしょうか?


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

Name: lbfuvab  ..上級者(20,245ポイント)   Date: 2009/04/16(木) 00:58   No:32304     
Title: Re:APIで背景の色?    
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
          ↓
wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
で無理ですか?


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

Name: toyo  ..プログラマー(30,694ポイント)   Date: 2009/04/16(木) 07:30   No:32311     
Title: Re:APIで背景の色?    
ダイアログですね
ダイアログリソース作って表示するのが簡単です
ちょっと作ってみました


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

Name: 遠藤  ..ぴよぴよ(147ポイント)   Date: 2009/04/17(金) 00:26   No:32356     
Title: Re:APIで背景の色?    
toyoさん
それです><

ダイアログリソースってどうやって描画するのでしょうか?

やはり私が作ったもの?はいらないんでしょうか?

またメモ書きをテキストなどに吐き出したいのですができますでしょうか?

質問ばかりですいません><


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

Name: 遠藤  ..ぴよぴよ(155ポイント)   Date: 2009/04/17(金) 00:51   No:32359     
Title: Re:APIで背景の色?    
私もダイアログリソース作ってみました・・・
これであってるのでしょうか・・・?


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

Name: toyo  ..プログラマー(30,890ポイント)   Date: 2009/04/17(金) 07:34   No:32364     
Title: Re:APIで背景の色?    
それでいいですよ
有料版のVisual C++ならリソースエディタがついてるのでそれで作れます
無料版にはリソースエディタがないのですがフリーのリソースエディタがあるのでそれを使っても作れます
中身は普通のテキストなので頑張ればメモ帳でも作れますが

私は粂井さんの「猫でもわかる」のサイトを参考にさせてもらっています。
http://www.kumei.ne.jp/c_lang/sdk/sdk_14.htm
http://www.kumei.ne.jp/c_lang/sdk/sdk_22.htm


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

Name: 遠藤  ..ぴよぴよ(254ポイント)   Date: 2009/04/17(金) 23:38   No:32397     
Title: Re:APIで背景の色?    
返信ありがとうございます。

サイトを見ながら作ったのですがエラーが起こります・・・。

またクリックすると項目が変わりテキスト欄に入れた文字を吐き出したり
自動的に書き込んだりできるようにしたいです。

どのようにかけばいいのでしょうか?


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

Name: 遠藤  ..ぴよぴよ(207ポイント)   Date: 2009/04/18(土) 04:13   No:32404     
Title: Re:APIで背景の色?    
上記から少し変えたものです。
エラーはなくなったのですが表示ができないです・・・。

またダイアログでのイベントの取得方法(ボタンをクリックしたら〜など)がわからないです・・・。


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

Name: toyo  ..プログラマー(31,533ポイント)   Date: 2009/04/18(土) 07:33   No:32408     
Title: Re:APIで背景の色?    
main.cppを以下のように換えてみてください

#include <windows.h>
#include "resource.h"

LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
DialogBox(hCurInst, MAKEINTRESOURCE(MYDIALOG1), NULL, (DLGPROC)DlgProc);
return 0;
}

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
TCHAR buf[256];
switch (msg) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch (LOWORD(wp))
{
case IDOK1: // 日曜ボタンをクリックしたときの処理
return TRUE;
case IDCANCEL: // ×で閉じるときの処理
//エディットボックスの内容は以下のようにして取得
GetWindowText(GetDlgItem(hDlg, IDC_EDIT5), buf, 256);
//確認用に表示してみる
MessageBox(hDlg, buf, TEXT("TEXT5"), MB_OK);
EndDialog(hDlg, IDCANCEL);
return TRUE;
}
break;
}
return FALSE;
}


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

Name: 遠藤  ..ぴよぴよ(315ポイント)   Date: 2009/04/18(土) 13:38   No:32416     
Title: Re:APIで背景の色?    
toyoさん
回答本当にありがとうございます。

コピペさせていただきました。

しかし起動すると月曜が選ばれている?状態になってしまいます。
これを、できれば起動した日にちの曜日にクリックを合わせたいです。

また、ファイルを読み込んだり、書きだしたりはテキスト等で吐き出そうとしているのですが
GetWindowText(GetDlgItem(hDlg, IDC_EDIT5), buf, 256);
で取得したものをどうすればよいのかがわかりません。

選択されている曜日によって表示したり書き換えたりする内容を変えたいです。
自分用のテレビ欄?を保存できるツールをつくりたいんです。

お時間がありましたら一度作っていただけないでしょうか?
もちろん甘いことを言っているのは承知ですので
気が向きましたらでかまいません。


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

Name: toyo  ..プログラマー(31,685ポイント)   Date: 2009/04/20(月) 17:19   No:32491     
Title: Re:APIで背景の色?    
年月日の表示とボタンにフォーカスまで作ってみました
リソースファイルとヘッダを一部変えています
ファイルの書き込みは普通に
fp = fopen("memo.txt", "w");
fputs(buf);
fclose(fp);
みたいなのでいいのでは


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

Name: 遠藤  ..ぴよぴよ(359ポイント)   Date: 2009/04/26(日) 23:44   No:32766     
Title: Re:APIで背景の色?    
遅れてすいません

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

少し自分で改造してみますねw


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



Name: ubuntu  ..ぴよぴよ(239ポイント)   Date: 2009/04/26(日) 06:16   No:32741       
Title: 画像の上下反転について    
はじめましてubuntuと申します。
今回画像処理プログラミングを学習していて、ひっかかった部分がありまして、このサイトで何か良い
アドバイスをもらえたらと書き込みさせてもらいました。

//各画素の濃度値を順番にコピーする
for(j=0;j<height;j++){ // j:画像のy座標、img:元の画像、:height:画像の高さ
for(i=0;i<width;i++){ // i:画像のx座標、width:画像の幅
p=j*img->width*3+i*3; // 各画素の濃度値と配列番号の対応公式
                          // outimg:コピー後の画像
outimg->data[p]=img->data[p];   // 赤の画素値
outimg->data[p+1]=img->data[p+1]; // 緑の画素値
outimg->data[p+2]=img->data[p+2]; // 赤の画素値
}
}

上のソースでは、1つの画像をそのまま完全コピーするプログラムソースの一部なのですが、この部分だけを
変更して画像を上下反転させたいのですが、何か良い方法ありませんか?
何かアドバイスよろしくお願いします。



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


Name: SooA [URL]  ..上級者(18,800ポイント)   Date: 2009/04/26(日) 07:01   No:32742     
Title: Re:画像の上下反転について    
先ず貼ってあるソースの内容を理解してみましょう。
プログラムは 0,0 の位置から横幅(width)をコピーする処理を、
縦幅(height)の回数繰り返しているのは解りますか?


現在の処理
img(読取)  outimg(書込)
↓ここから ↓ここから
■■■■■ ■■■■■
■■□□□→■■□□□
□□□□□ □□□□□

上下に反転させたいのであれば
データの上下だけ逆に書き込んでいきます。

img(読取)  outimg(書込)
↓ここから
■■■■■ □□□□□
■■□□□→■■□□□
□□□□□ ■■■■■
↑ここから



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

Name: ubuntu  ..ぴよぴよ(587ポイント)   Date: 2009/04/26(日) 17:46   No:32755     
Title: Re:画像の上下反転について    
SooAさん回答ありがとうございました。
SooAさんの考え方でやってみたのですが、コードがおかしいのか、うまくできません。

for(j=0;j<height;j++){
for(i=0;i<width;i++){
p=j*img->width*3+i*3;
outimg->data[p]=img->data[p];
outimg->data[p+1]=img->data[p+1];
outimg->data[p+2]=img->data[p+2];
}
}
for(j=img->height-1;j>=0;j--){
for(i=0;i<width;i++){
q=j*img->width*3+i*3;
outimg->data[q]=img->data[p];
outimg->data[q+1]=img->data[p+1];
outimg->data[q+2]=img->data[p+2];
}
}

こんな感じで逆からimgの濃度値をoutimgの配列にコピーしたのですがうまくいきません。
このコードではダメなのでしょうか?回答お願いします。


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

Name: SooA [URL]  ..上級者(19,054ポイント)   Date: 2009/04/26(日) 18:14   No:32758     
Title: Re:画像の上下反転について    
何故か処理が増えてますが、
読み込むデータと書き込むデータは

outimg->data[p] = img->data[p];
↑書き込む側   ↑読み込む側
の部分ですので for文を逆にしても
pの値が同じなのでコピーする位置は変わりません。


//各画素の濃度値を順番にコピーする
int x , y, r, w ;

// 画像の y座標、img:元の画像、:height:画像の高さ
for( y=0; y<height; y++ )
{
// 画像の x座標、width:画像の幅
for( x=0; x<width; x++ )
{
// 読み取り位置
r = y*img->width*3 + x*3 ;

// 書き込み位置
w = ( (height-1)-y )*img->width*3 + x*3 ;

// コピー後の画像
outimg->data[w] = img->data[r] ;
outimg->data[w+1] = img->data[r+1] ;
outimg->data[w+2] = img->data[r+2] ;
}
}


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

Name: SooA [URL]  ..上級者(19,127ポイント)   Date: 2009/04/26(日) 18:34   No:32759     
Title: Re:画像の上下反転について    
> このコードではダメなのでしょうか?回答お願いします。
よく見ると変数qを使っていますが、
下部ループでの読み取り位置pが全く変化していないので
画像AをBに複製した後に、
画像Aの終端のデータでBを埋め尽くす。
といった感じの処理になっていると思います。


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

Name: ubuntu  ..ぴよぴよ(124ポイント)   Date: 2009/04/26(日) 18:53   No:32760     
Title: Re:画像の上下反転について    
SooAさん回答ありがとうございました。
SooAさんのとおり変更したら上手くいきました。
とても参考になりました。
質問なのですが、

for(j=0;j<height;j++){    // #1
for(i=0;i<width;i++){
p=j*img->width*3+i*3;
outimg->data[p]=img->data[p];
outimg->data[p+1]=img->data[p+1];
outimg->data[p+2]=img->data[p+2];
}
}
for(j=img->height-1;j>=0;j--){ // #2
for(i=0;i<width;i++){
q=j*img->width*3+i*3;
outimg->data[q]=img->data[p];
outimg->data[q+1]=img->data[p+1];
outimg->data[q+2]=img->data[p+2];
}
}

先ほどのコードで、なぜ#2のfor部分でコピー元のデータ(img->data[p])を書き込み用データ配列(outimg->data[q])に逆から入れる処理をしていてうまくできないのかがよく分かりませんでした。
配列の番号[p],[q]では値が異なるため、配列自身の値も変わってくるのではないのでしょうか?
初心者的質問で恐縮なのですが、回答お願いします。


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

Name: ubuntu  ..ぴよぴよ(179ポイント)   Date: 2009/04/26(日) 18:58   No:32761     
Title: Re:画像の上下反転について    
SooAさんすみません。
よくよく考えてみたら、とても馬鹿な質問をしていました。
今完璧理解できました。
お手数かけて申し訳ありません。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +