C言語何でも質問掲示板

Total hit  今日  昨日  



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

 
   無題   
     ・[42203] kazuoni 
     ・[42225] シャエ 
   ちょっと凝ったアイテ ....   
     ・[42127] Justy 
     ・[42207] kai 
     ・[42217] Justy 
   ミシャクジ様を・・・ ....   
     ・[42193] pooka 
     ・[42200] スタートメニュー 
     ・[42211] スタートメニュー 
   処理の進み具合を表示 ....   
     ・[42206] dic 
     ・[42208] dic 
   コンパイルについて   
     ・[41967] Mist 
     ・[41970] box 
     ・[42052] ひでちゃん 
     ・[42056] ぽこ 
     ・[42073] ひでちゃん 
     ・[42088] Justy 
     ・[42142] ひでちゃん 
     ・[42157] toyo 
     ・[42199] ひでちゃん 
   DirectXでフルスクリー ....   
     ・[42094] Justy 
     ・[42124] Libra 
     ・[42130] Justy 
     ・[42196] Libra 
   無題   
     ・[42147] softya 
     ・[42150] softya 
     ・[42151] ベース 
     ・[42152] softya 
     ・[42153] softya 
     ・[42155] ベース 
     ・[42156] ベ−ス 
     ・[42158] softya 
     ・[42159] ベース 
     ・[42160] softya 
     ・[42161] ベース 
     ・[42169] softya 
     ・[42173] ベース 
     ・[42179] softya 
     ・[42183] ベース 
     ・[42185] softya 
     ・[42188] ベース 
   アルファベットを表示 ....   
     ・[42167] lbfuvab 
     ・[42171] non 
     ・[42182] lbfuvab 
   文字を右揃えにする方 ....   
     ・[42177] non 
     ・[42178] やっくん 
     ・[42180] 御津凪 
   ポインタの削除   
     ・[41877] softya 
     ・[41878] ひよこ 
     ・[41879] softya 
     ・[41881] ひよこ 
     ・[41906] ひよこ 
     ・[41955] softya 
     ・[41969] ひよこ 
     ・[41997] softya 
     ・[42002] ひよこ 
     ・[42004] softya 
     ・[42011] ひよこ 
     ・[42092] softya 
     ・[42097] ひよこ 
     ・[42098] ひよこ 
     ・[42099] ひよこ 
     ・[42114] softya 
     ・[42164] ひよこ 
   if文をよういた計算を ....   
     ・[42134] array 
     ・[42135] kerotan0820 
     ・[42138] バグ 
     ・[42163] kerotan0820 
   雛形ウィンドウのしょ ....   
     ・[42145] softya 
     ・[42148] ベース 
     ・[42149] ベース 
   質問です   
     ・[42137] kerotan0820 
     ・[42141] Mist 
   ファイルの取得?   
     ・[42091] Justy 
     ・[42110] くりあ 
     ・[42123] Justy 
     ・[42136] くりあ 
   DirectXでデスクトップ ....   
     ・[42059] DVDM 
     ・[42121] スー 
   計算プログラム   
   モヤモヤがうまくいか ....   
     ・[42116] softya 
   初歩的な質問ですいま ....   
     ・[42115] softya 
   ソース変更が適用され ....   
     ・[421091260400997] Naohiro19 
   前回の改造   
     ・[42090] 天和 
   ボスがアイテムを落と ....   
     ・[42089] softya 
   再入力を促す方法を教 ....   
     ・[42083] conio 
     ・[42084] PP 
   ビット単位のシフト演 ....   
     ・[42037] たかぎ 
     ・[42043] どころてん 
     ・[42048] たかぎ 
     ・[42053] どころてん 
     ・[42055] たかぎ 
     ・[42065] conio 
     ・[42082] pp 
   単体で実行可能な実行 ....   
     ・[42070] Mist 
     ・[42071] kerotan0820 
     ・[42072] Mist 
     ・[42074] kerotan0820 
     ・[42075] non 
     ・[42076] non 
     ・[42077] kerotan0820 
     ・[42078] バグ 
     ・[42079] kerotan0820 
   初歩的な質問ですが、 ....   
     ・[41947] ぽこ 
     ・[41948] asdfg 
     ・[41950] ぽこ 
     ・[41954] non 
     ・[41966] ぽこ 
     ・[42015] asdfg 
     ・[42068] non 
     ・[419451259240593] asdfg 
   無題   
     ・[42063] kerotan0820 
     ・[42064] conio 
     ・[42066] kerotan0820 
   C言語サイトの最高峰と ....   
     ・[41330] ひよこ 
     ・[41332] Mist 
     ・[41333] たいちう 
     ・[41339] たかぎ 
     ・[41342] conio 
     ・[41343] array 
     ・[41351] Dixq (管理人) 
     ・[41373] たかぎ 
     ・[41412] Dixq (管理人) 
     ・[41416] たかぎ 
     ・[41423] sizuma 
     ・[41639] C-man 
     ・[41660] たかぎ 
     ・[41684] C-man 
     ・[41686] 通りすがり 
     ・[41688] C−man 
     ・[41769] C-man 
     ・[41770] C-man 
     ・[41776] conio 
     ・[41786] たかぎ 
     ・[41804] conio様he 
     ・[41805] conio様へ 
     ・[41806] >たかぎさまへ 
     ・[41807] Mist 
     ・[41808] Mist 
     ・[41811] たかぎ 
     ・[41813] 匿名 
     ・[41830] 天 
     ・[41835] conio 
     ・[41839] たかぎ 
     ・[41844] conio 
     ・[41845] たいちう 
     ・[41848] C-man 
     ・[41851] C-man 
     ・[41852] Dixq (管理人) 
     ・[41876] Mist 
     ・[41886] C-man 
     ・[41896]   
     ・[41900] dic 
     ・[41903] Mist 
     ・[41921] dic 
     ・[41925] C-man 
     ・[41926] たかぎ 
     ・[41949] C-man 
     ・[42014] たかぎ 
     ・[42024] C-man 
     ・[42025] たかぎ 
     ・[42026] C-man 
     ・[42030] たかぎ 
     ・[42038] conio 
     ・[42050] はね 
     ・[42058] C-man 
   クラスの相互定義につ ....   
     ・[42036] たかぎ 
     ・[42040] ジャーニー 
     ・[42041] たかぎ 
     ・[42042] ジャーニー 
   ゲームプログラミング ....   
     ・[41991] kazuoni 
     ・[41992] ひよこ 
     ・[42029] sr 
     ・[42039] softya 
   文字列の配列について   
     ・[41920] non 
     ・[41941] どころてん 
     ・[41942] box 
     ・[41946] どころてん 
     ・[41951] box 
     ・[41981] どころてん 
     ・[42027] box 
     ・[42034] どころてん 
   %が含まれる文字列を表 ....   
     ・[42022] 御津凪 
     ・[42023] 組木紙織 
     ・[42031] dic 
   ループについて   
     ・[42028] 鏃 
   Justyさんに聞きたいこ ....   
     ・[42017] yu 
     ・[42018] kai 
     ・[42019] Justy 
   キャラクター操作につ ....   
     ・[41977] 御津凪 
     ・[41984] オラウー 
     ・[41989] kazuoni 
     ・[41990] softya 
     ・[41993] 御津凪 
     ・[41998] オラウー 
     ・[41999] 御津凪 
     ・[42001] オラウー 
   c言語についての質問 ....   
     ・[41974] non 
     ・[41975] 御津凪 
     ・[41988] s 
   DXライブラリのバージ ....   
     ・[41980] 御津凪 
     ・[41983] 港 
   画面モードの切り替え ....   
     ・[41841] ひよこ 
     ・[41856] Dixq (管理人) 
     ・[41866] スタートメニュー 
     ・[41971] スタートメニュー 
     ・[41973] 御津凪 
     ・[41978] スタートメニュー 
   日本語がうまく読み込 ....   
     ・[41958] Naohiro19 
     ・[41961] Justy 
     ・[41962] YuO 
     ・[41968] dic 
     ・[41972] dic 
   静的メンバ変数   
     ・[41899] dic 
     ・[41902] でんすけ 
     ・[41915] Tororo 
     ・[41923] dic 
     ・[41935] でんすけ 
   ボムと敵弾について   
     ・[41680] softya 
     ・[41930] ft 
   最後のやつだけでない   
     ・[41889] non 
     ・[41891] 天和 
     ・[41893] non 
     ・[41894] 天和 
     ・[41897] non 
     ・[41928] 天和 
     ・[41929] 天和 
   キャラをキー入力で移 ....   
     ・[41913] ひよこ 
     ・[41914] ひよこ 
     ・[41917] Ω 
   ファミコンプログラム ....   
     ・[41816] たかぎ 
     ・[41832] TKOZ 
     ・[41833] softya 
     ・[41837] TKOZ 
     ・[41843] toyo 
     ・[41880] toyo 
     ・[41905] TKOZ 
   関数PlgBltの速度につ ....   
     ・[41752] softya 
     ・[41756] Justy 
     ・[41892] kazuoni 

Name: シャエ  ..ぴよぴよ(89ポイント)   Date: 2009/11/17(火) 02:15   No:42195       
Title: 無題    
プログラミング初心者です。

敵が放った弾の現在の位置って、どういう風に考えたらいいですかね?
たとえばx軸300、y軸100にいる敵が角度shotatan2(n)(つまり自機狙い)のspd1.0で放った弾はcnt150で、どの座標にいるかの考え方です。

うまく考えることのできる方、教えてもらえないでしょうか?


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


Name: kazuoni [URL]  ..ハッカー(114,277ポイント)   Date: 2009/11/17(火) 11:06   No:42203     
Title: Re:無題    
これからスレを立てるときには、タイトルをつけてください。

>敵が放った弾の現在の位置
龍神録を前提にしているのかどうなのかわかりませんが・・・
構造体bullet_tには弾の座標がメンバとしてあるので、
それを参照すればよいのでは?


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

Name: シャエ  ..ぴよぴよ(69ポイント)   Date: 2009/11/17(火) 22:44   No:42225     
Title: Re:無題    
すみません今度から気をつけます。

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


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



Name: kai  ..初心者(8,534ポイント)   Date: 2009/11/15(日) 18:36   No:42107       
Title: ちょっと凝ったアイテムの落とし方    
こんばんは。
龍神録で敵アイテムの落とし方について教えてほしいのですが、
アイテムの落とす位置は
item[k].x+=rang(40);
item[k].y+=rang(40);
のようにランダムで落としているのですが、これを
添付した画像のアイテムのように
真ん中に一つ、ちょっと少し間をあけて周りに数個ランダム配置するようにしたいのですが
どういった計算をすればこのようになるのでしょうか?
誰か分かる方がいましたら、教えてください><


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


Name: Justy  ..伝説なるハッカー(461,790ポイント)   Date: 2009/11/16(月) 01:01   No:42127     
Title: Re:ちょっと凝ったアイテムの落とし方    
 こんなんでしょうか。


    // 配置されるアイテムの最大の距離
    const double maxLength = 40;
    
    // 少し開ける長さ
    const double avoidLength = 15;      
    
    // 配置する角度
    const double ang = rang(PI);                
    
    // オフセット位置
    const double length = fabs(rang(maxLength - avoidLength)) + avoidLength;
    double itemPosX = +sin(ang) * length;
    double itemPosY = -cos(ang) * length;

 出したいアイテムの方向の角度から求めた単位ベクトルと
ランダムで決めた長さに開けたい間の長さを足した長さを、
掛けて最終的なオフセット座標を出しています。

 あとはこのオフセット座標をアイテムを出したい中心位置に足すだけです。


※ 2009/11/17 21:07 コード修正 (fabs)


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

Name: kai  ..初心者(8,633ポイント)   Date: 2009/11/17(火) 15:09   No:42207 解決!     
Title: Re:ちょっと凝ったアイテムの落とし方    
遅くなりましたが、
Justyさんのアドバイスのおかげで
無事解決できました!
しかし、Justyさんのプログラムの名前の付け方って
いつみてもプログラマーっぽくてかっこいいですよね。尊敬します。
avoidLengthとか今の自分には思いつかないです。


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

Name: Justy  ..伝説なるハッカー(462,048ポイント)   Date: 2009/11/17(火) 21:10   No:42217     
Title: Re:ちょっと凝ったアイテムの落とし方    
 よくみたらマズイところが合ったので修正しました。

 rang(X)は 0〜Xでなく、-X〜Xだったんですね。
 となると

    const double length = fabs(rang(maxLength - avoidLength)) + avoidLength;

としないと rang()の結果が負だと、避けるどころか近づいてしまうことがあります。

 というわけでちょっと直しました。



>名前の付け方

 そう言われたのは初めてです (;^_^A
 
 一応変数の役割とか意味が見ただけで(何となくでも)わかるような名前を
つけるようにしています。

 何せこのコードの中に3つも“長さ”がありますんで。


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



Name: スタートメニュー  ..ぴよぴよ(907ポイント)   Date: 2009/11/17(火) 00:49   No:42191       
Title: ミシャクジ様を・・・。    
ミシャクジ様弾幕を(60章での中ボスの2段階目で)ボスに撃たせようとしてるのですが(中ボスの2段階目で)
いざ実行して二段階目に行くと
”Ensoukyou.exe の 0x00562a20 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xb8892af8 を読み込み中にアクセス違反が発生しました。”となります。
雑魚敵が撃つミシャクジ様コードをボス用にいじってみたのですが、
どうもわかりません。
以下コードです。ご意見お願いします。


void boss_shot_bulletH002(){
#define TM000 120
int i,k,t=boss_shot.cnt%TM000,t2=boss_shot.cnt;
double angle;
if(t>=0 && t<1200 && t%1200==0){
double angle=rang(PI);
for(int j=0;j<2;j++){//途中から2分裂する分
for(int i=0;i<80;i++){//一度に60個
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].knd =8;//8番の弾
boss_shot.bullet[k].angle =angle+PI2/80*i;//円形60個
boss_shot.bullet[k].flag =1;
boss_shot.bullet[k].x =enemy[shot[k].num].x;
boss_shot.bullet[k].y =enemy[shot[k].num].y;
boss_shot.bullet[k].col =4;//4番の色
boss_shot.bullet[k].cnt =0;
boss_shot.bullet[k].state =j;//ステータス。0か1かで回転がかわる
boss_shot.bullet[k].spd =2;
se_flag[0]=1;//発射音鳴らす
}
}
}
}
for(int i=0;i<SHOT_BULLET_MAX;i++){//全弾分
if(boss_shot.bullet[i].flag>0){//登録されている弾があれば
int state=boss_shot.bullet[i].state;
int cnt=boss_shot.bullet[i].cnt;
if(30<cnt && cnt<120){//30〜120カウントなら
boss_shot.bullet[i].spd-=1.2/90.0;//90カウントかけて1.2減らす
boss_shot.bullet[i].angle+=(PI/2)/90.0*(state?-1:1);//90カウントかけて90°傾ける
}
}
}
}


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


Name: pooka [URL]  ..上級者(19,542ポイント)   Date: 2009/11/17(火) 01:38   No:42193     
Title: Re:ミシャクジ様を・・・。    
ぱっと見ですが、ボスの弾幕のようなので
>boss_shot.bullet[k].x = enemy[shot[k].num].x;
>boss_shot.bullet[k].y = enemy[shot[k].num].y;
これは
boss_shot.bullet[k].x = boss.x;
boss_shot.bullet[k].y = boss.y;
では?

あと
>for(int i = 0; i < SHOT_BULLET_MAX; i++){//全弾分
のSHOT_BULLET_MAXは
BOSS_BULLET_MAX
かと。


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

Name: スタートメニュー  ..かけだし(1,041ポイント)   Date: 2009/11/17(火) 07:46   No:42200     
Title: Re:ミシャクジ様を・・・。    
pookaさん
ご指摘ありがとうございました。
上記場所を直したところ、
”Run-Time Check Failure #3 - The variable 'j' is being used without being initialized.”
というのが出ました。
どうやら”for(int j=0;j<2;j++){//途中から2分裂する分”これが、
ひっかかっているみたいなのですが
どうしたらいいでしょうか。

ご意見よろしくお願いします。


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

Name: スタートメニュー  ..かけだし(1,088ポイント)   Date: 2009/11/17(火) 17:05   No:42211 解決!     
Title: Re:ミシャクジ様を・・・。    
色々調べたところ最初のintにjをいれ2分裂forのiをjにしたら出来ました。
pookaさんご意見ありがとうございました。


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



Name: dic  ..プログラマー(37,786ポイント)   Date: 2009/11/17(火) 14:37   No:42205       
Title: 処理の進み具合を表示する    
たとえば下のようなプログラムで、処理の進み具合を表示したいのですが
カウンタは使用せず、イテレータを使っているので、現在の処理がどのくらいまで
進んだかを知る方法が思いつかないのですが、どういった方法があるでしょうか?

<pre>
#include <windows.h>
#include <stdio.h>
#pragma warning ( disable: 4786 )
#include <string>
#include <vector>
using namespace std;

void Print( vector<string> *v )
{
vector<string>::iterator p = v->begin();

while( p != v->end() )
{
// ここに全体の処理の進み具合を表示したい
printf( p->c_str() );
Sleep( 5000 );
p++;
}
}

void Init( vector<string> *v )
{
char mes[80] = "ヤンマーニ\n";
int i;
for( i=0; i<10; i++ )
{
v->push_back( mes );
}
}

int main()
{
vector<string> v;

Init( &v );
Print( &v );

return 0;
}
<pre>


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


Name: dic  ..プログラマー(37,988ポイント)   Date: 2009/11/17(火) 14:41   No:42206     
Title: Re:処理の進み具合を表示する    
pre タイプミスしました


#include <windows.h>
#include <stdio.h>
#pragma warning ( disable: 4786 )
#include <string>
#include <vector>
using namespace std;

void Print( vector<string> *v )
{
vector<string>::iterator p = v->begin();

while( p != v->end() )
{
// ここに全体の処理の進み具合を表示したい
printf( p->c_str() );
Sleep( 5000 );
p++;
}
}

void Init( vector<string> *v )
{
char mes[80] = "ヤンマーニ\n";
int i;
for( i=0; i<10; i++ )
{
v->push_back( mes );
}
}

int main()
{
vector<string> v;

Init( &v );
Print( &v );

return 0;
}


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

Name: dic  ..プログラマー(38,021ポイント)   Date: 2009/11/17(火) 15:10   No:42208 解決!     
Title: Re:処理の進み具合を表示する    
下のようにして解決しました

void Print( vector<string> *v )
{
vector<string>::iterator p = v->begin();

int i = 0;
while( p != v->end() )
{
// ここに全体の処理の進み具合を表示したい
printf( "%d:", i );
printf( p->c_str() );
Sleep( 5000 );
p++;
i++;
}
}


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



Name: ひでちゃん  ..ぴよぴよ(155ポイント)   Date: 2009/11/14(土) 13:46   No:41965       
Title: コンパイルについて    
現在「Microsoft Visual C++ 2008 Express Edition」というフリーのソフトで一緒に付いてきたコマンドプロントを使用しています。

C言語の勉強のためにサンプルをコピーしてきてコマンドプロントでコンパイルしているのですが、ほとんどのサンプルプログラムがコンパイルエラーが出ます。

これはサンプルが悪いのでしょうか?
それともC言語は使うコンパイラによって使える関数(ヘッダー?)が変わるのでしょうか?

コンパイルエラーの対策はどのようにするのが一番良いのでしょうか?


初歩的な質問だとは思いますが、どうかご回答宜しくお願いします。


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


Name: Mist  ..比類無きプログラマー(71,146ポイント)   Date: 2009/11/14(土) 13:52   No:41967     
Title: Re:コンパイルについて    
どんなエラーが出ているのかわからないと回答できません。

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

Name: box  ..ハッカー(146,097ポイント)   Date: 2009/11/14(土) 13:56   No:41970     
Title: Re:コンパイルについて    
どんなサンプルをコンパイルしたときにどんなエラーが出るか、
具体的に提示してください。そうしないと、どうしようもありません。

なお、コマンドプロンプト(command prompt)が正しいです。


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

Name: ひでちゃん  ..かけだし(2,217ポイント)   Date: 2009/11/15(日) 02:10   No:42052     
Title: Re:コンパイルについて    
失礼しました。

確かにどのようなプログラムで
どのようなエラーがわからないと
答えられませんね・・・・



【エラー文】
test.c(5) : error C2061: 構文エラー : 識別子 'ShutDown'
test.c(5) : error C2059: 構文エラー : ';'
test.c(5) : error C2059: 構文エラー : ')'
test.c(63) : error C2275: 'time_t' : この型は演算子として使用できません
C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\crtdefs.h(582) :
'time_t' の宣言を確認してください。
test.c(63) : error C2146: 構文エラー : ';' が、識別子 'NowTime' の前に必要です。

test.c(63) : error C2065: 'NowTime' : 定義されていない識別子です。
test.c(64) : error C2143: 構文エラー : ';' が '型' の前にありません。
test.c(66) : error C2143: 構文エラー : ';' が '型' の前にありません。
test.c(69) : error C2143: 構文エラー : ';' が '型' の前にありません。
test.c(70) : error C2143: 構文エラー : ';' が '型' の前にありません。
test.c(71) : error C2143: 構文エラー : ';' が '型' の前にありません。
test.c(74) : error C2065: 'ShutDownSec' : 定義されていない識別子です。
test.c(76) : error C2065: 'ShutDownMin' : 定義されていない識別子です。
test.c(77) : error C2065: 'ShutDownSec' : 定義されていない識別子です。
test.c(77) : error C2065: 'ShutDownSec' : 定義されていない識別子です。
test.c(81) : error C2065: 'ShutDownSec' : 定義されていない識別子です。
test.c(85) : error C2143: 構文エラー : ';' が '型' の前にありません。
test.c(90) : error C2143: 構文エラー : ';' が '型' の前にありません。
test.c(99) : error C2065: 'NowTime' : 定義されていない識別子です。
test.c(100) : error C2065: 'NowLocalTime' : 定義されていない識別子です。
test.c(100) : error C2065: 'NowTime' : 定義されていない識別子です。
test.c(100) : warning C4133: '関数' : 'int *' と 'const time_t *' の間で型に互換
性がありません。
test.c(100) : warning C4047: '=' : 間接参照のレベルが 'int' と 'tm *' で異なって
います。
test.c(103) : error C2065: 'Sec' : 定義されていない識別子です。
test.c(103) : error C2065: 'NowLocalTime' : 定義されていない識別子です。
test.c(103) : error C2223: '->tm_sec' : 左側が構造体か共用体に対するポインタでは
ありません。
test.c(105) : error C2065: 'Sec' : 定義されていない識別子です。
test.c(105) : error C2065: 'NowLocalTime' : 定義されていない識別子です。
test.c(105) : error C2223: '->tm_sec' : 左側が構造体か共用体に対するポインタでは
ありません。
test.c(108) : error C2065: 'NowLocalTime' : 定義されていない識別子です。
test.c(108) : error C2223: '->tm_year' : 左側が構造体か共用体に対するポインタで
はありません。
test.c(109) : error C2065: 'NowLocalTime' : 定義されていない識別子です。
test.c(109) : error C2223: '->tm_mon' : 左側が構造体か共用体に対するポインタでは
ありません。
test.c(110) : error C2065: 'NowLocalTime' : 定義されていない識別子です。
test.c(110) : error C2223: '->tm_mday' : 左側が構造体か共用体に対するポインタで
はありません。
test.c(111) : error C2065: 'NowLocalTime' : 定義されていない識別子です。
test.c(111) : error C2223: '->tm_hour' : 左側が構造体か共用体に対するポインタで
はありません。
test.c(112) : error C2065: 'NowLocalTime' : 定義されていない識別子です。
test.c(112) : error C2223: '->tm_min' : 左側が構造体か共用体に対するポインタでは
ありません。
test.c(113) : error C2065: 'NowLocalTime' : 定義されていない識別子です。
test.c(113) : error C2223: '->tm_sec' : 左側が構造体か共用体に対するポインタでは
ありません。
test.c(117) : error C2143: 構文エラー : ';' が '型' の前にありません。
test.c(122) : error C2065: 'SumSec' : 定義されていない識別子です。
test.c(122) : error C2065: 'ShutDownSumSec' : 定義されていない識別子です。
test.c(124) : error C2065: 'RemainderSumSec' : 定義されていない識別子です。
test.c(124) : error C2065: 'ShutDownSumSec' : 定義されていない識別子です。
test.c(124) : error C2065: 'SumSec' : 定義されていない識別子です。
test.c(128) : error C2065: 'RemainderSumSec' : 定義されていない識別子です。
test.c(128) : error C2065: 'ShutDownSumSec' : 定義されていない識別子です。
test.c(128) : error C2065: 'SumSec' : 定義されていない識別子です。
test.c(132) : error C2065: 'RemainderSumSec' : 定義されていない識別子です。
test.c(133) : error C2065: 'RemainderSumSec' : 定義されていない識別子です。
test.c(134) : error C2065: 'RemainderSumSec' : 定義されていない識別子です。
test.c(135) : error C2065: 'RemainderSumSec' : 定義されていない識別子です。
test.c(139) : error C2065: 'RemainderSumSec' : 定義されていない識別子です。

これが全てです。
エラーがこんなに出るとは思いませんでした。
プログラムは添付します。


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

Name: ぽこ  ..かけだし(2,274ポイント)   Date: 2009/11/15(日) 03:13   No:42056     
Title: Re:コンパイルについて    
とりあえず、ソースファイルの拡張子を.cから.cppに変えて
コンパイルしてみてください。


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

Name: ひでちゃん  ..入門者(2,786ポイント)   Date: 2009/11/15(日) 10:15   No:42073     
Title: Re:コンパイルについて    
なるほど
C++にするということですね。

やってみましたが
/out:test.exe
test.obj
test.obj : error LNK2019: 未解決の外部シンボル __imp__ExitWindowsEx@8 が関数 "bo
ol __cdecl ShutDown(void)" (?ShutDown@@YA_NXZ) で参照されました。
test.obj : error LNK2019: 未解決の外部シンボル __imp__MessageBoxA@16 が関数 "boo
l __cdecl ShutDown(void)" (?ShutDown@@YA_NXZ) で参照されました。
test.obj : error LNK2019: 未解決の外部シンボル __imp__AdjustTokenPrivileges@24
が関数 "bool __cdecl ShutDown(void)" (?ShutDown@@YA_NXZ) で参照されました。
test.obj : error LNK2019: 未解決の外部シンボル __imp__LookupPrivilegeValueA@12
が関数 "bool __cdecl ShutDown(void)" (?ShutDown@@YA_NXZ) で参照されました。
test.obj : error LNK2019: 未解決の外部シンボル __imp__GetTokenInformation@20 が
関数 "bool __cdecl ShutDown(void)" (?ShutDown@@YA_NXZ) で参照されました。
test.obj : error LNK2019: 未解決の外部シンボル __imp__OpenProcessToken@12 が関数
"bool __cdecl ShutDown(void)" (?ShutDown@@YA_NXZ) で参照されました。
test.exe : fatal error LNK1120: 外部参照 6 が未解決です。

このようなエラーになってしまいました。


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

Name: Justy  ..伝説なるハッカー(460,440ポイント)   Date: 2009/11/15(日) 13:55   No:42088     
Title: Re:コンパイルについて    
 コマンドプロンプトからですか。

 ビルドツールは cl.exeですか?

 もしそうなら多分コンパイルするとき、

> cl test.cpp


としていると思いますが、

> cl test.cpp /link User32.lib advapi32.lib


としてみてください。


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

Name: ひでちゃん  ..入門者(2,918ポイント)   Date: 2009/11/16(月) 09:54   No:42142     
Title: Re:コンパイルについて    
>> cl test.cpp /link User32.lib advapi32.lib
> としてみてください。

実行したら無事にコンパイルされました。


「cl test.cpp」
とやるのと
「cl test.cpp /link User32.lib advapi32.lib」
では、どのように変わるのでしょう?

「cl test.cpp /link User32.lib advapi32.lib」
を使うときはどのような時に使うのですか?


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

Name: toyo  ..熟練のプログラマー(44,996ポイント)   Date: 2009/11/16(月) 12:01   No:42157     
Title: Re:コンパイルについて    
プログラムでMessageBoxなどの関数を呼び出していると思いますがこれらの関数の実際に動作する実体はライブラリに存在します。
自分の書いたプログラムを動かすにはこれらのライブラリの実体とリンクする必要があるのです。
未解決の外部シンボル
というエラーは外部ライブラリとのリンクが出来ていないときに出ます
その後に関数名が表示されますがC++では関数名が内部表現に修飾されているので実際に使った関数名と違ったものになっています(同じ部分があるので推測は出来ると思います)
マイクロソフトのサイトで関数を検索するとどのライブラリにある関数か書いてあります
以下はMessageBoxの解説に書いてある部分です
------------------------
対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダーファイル:Winuser.h 内で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
Unicode:すべてのプラットフォームで Unicode 版と ANSI 版を実装
-------------------------


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

Name: ひでちゃん  ..入門者(2,949ポイント)   Date: 2009/11/17(火) 07:26   No:42199 解決!     
Title: Re:コンパイルについて    
なるほど。
よくわかりました。

ありがとうございます。


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



Name: Libra  ..中級者(10,034ポイント)   Date: 2009/11/15(日) 14:33   No:42093       
Title: DirectXでフルスクリーンモード    
現在、DirectXとC++を使って、プログラムを組んでいるのですが、
添付したソースの1を参考に、WinMain関数にある
APIのウィンドウクラスの登録部分と、DirectXの初期化を
クラスにしたいと思ってます。
プログラムを組んでみたのですが、1のソースと異なり、
自分の組んだ2のソースでは、フルスクリーン実行時に
ウィンドウの上部にウィンドウの名前が出てしまいます。
また、その状態で最小化を行うと

組んだプログラム概要
Inputクラス(DirectInput)→→→→→→→→→→→→→→Libraクラス(派生クラス)
SetWindowクラス(Wndクラス登録&DirectX初期化)→→↑

実行結果
1:フルスクリーンで画像が出る
2:ウィンドウがフルスクリーンで出る

開発環境
VisualStudio2008

C言語は独習Cを一通りやって、C++を勉強中です。


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


Name: Justy  ..伝説なるハッカー(460,741ポイント)   Date: 2009/11/15(日) 14:57   No:42094     
Title: Re:DirectXでフルスクリーンモード    
 ウィンドウスタイルが変な感じがしますね。
 フルスクリーンなのに WNDSTYLEが指定されています。
 とりあえず、WS_POPUPに変えてみたらどうなりますか?


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

Name: Libra  ..中級者(10,099ポイント)   Date: 2009/11/16(月) 00:15   No:42124     
Title: Re:DirectXでフルスクリーンモード    
返信ありがとうございます。
ウィンドウスタイルを変更したら、期待通りの動作になりました。

元のソースはフルスクリーンとウィンドウモードで、
ウィンドウスタイルが同じだったので、
スタイルは同じでも良いと考えていました。




追加で質問したいです。

作りたい仕様

・フルスクリーンで起動し、最小化した後、
元のサイズにするとフルスクリーンに戻る

・起動中に解像度を(あらかじめ決めた値に)変更したい
(640×480→1280×960等)




現在の状況
・フルスクリーンで起動、最小化後、
ウィンドウクラスで指定した大きさになってしまう。



・予想

フルスクリーン:
→メッセージを受け取って何かしらの処理?
→ウィンドウ破棄して、もう一度ウィンドウ作成から?

解像度:
→複数ウィンドウクラスを用意する?


これらに関して、実装手順、ヒント、参考サイト等
教えていただけないでしょうか?


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

Name: Justy  ..伝説なるハッカー(461,775ポイント)   Date: 2009/11/16(月) 01:46   No:42130     
Title: Re:DirectXでフルスクリーンモード    
解像度の変更、フルスクリーンの解除はこのページが参考になるかもしれません。

Win32API(C言語)編 第63章 画面解像度の変更
http://www.geocities.jp/ky_webid/win32c/063.html

フルスクリーン
http://eternalwindows.jp/winbase/window/window13.html



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

Name: Libra  ..中級者(10,264ポイント)   Date: 2009/11/17(火) 02:37   No:42196 解決!     
Title: Re:DirectXでフルスクリーンモード    
回答ありがとうございます。
リンクの内容をヒントに、さらにいろいろ調べたところ、
欲しかった内容のページが見つかりました。

http://www36.atwiki.jp/directx/pages/15.html

一応、これで解決という事で、チェック入れます。
Justy様、ありがとうございました。


書籍とかがあれば、それに沿ってやりたいのですが、
現在大学の書籍コーナーからDirectX系の書籍が消えていまして、
(恐らくDirectX11が出たから?)
ネットで調べてしか進めないという状態です・・・。


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



Name: ベース [URL]  ..かけだし(1,372ポイント)   Date: 2009/11/16(月) 10:08   No:42146       
Title: 無題    
この質問なのですがなぜこうなるのかわかりません。わかる方いらしたらご教授よろしくお願いします。

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


Name: softya  ..プログラマー(39,489ポイント)   Date: 2009/11/16(月) 10:21   No:42147     
Title: Re:無題    
残念ですが不十分です。
それと、終了した質問は閉じてください。

>複数の掲示板で同じ質問をすることをマルチポストといい、大抵禁止されています。
>しかし、ここでは相互リンクし、リンク先の掲示板でマルチポストが許されていれば
>マルチポストはOKとしています。複数の掲示板で同じ質問をするときは相互リンクし、
>どこの掲示板で同じ質問をしているか明確にして下さい。

1.相互リンクじゃない。
2.リンク先の掲示板でマルチポストが許されていない。
3.どこの掲示板で同じ質問をしているか明確に書いていない。

以上を解決してください。


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

Name: softya  ..プログラマー(39,545ポイント)   Date: 2009/11/16(月) 10:25   No:42150     
Title: Re:無題    
同時に質問しなければ規約に違反しませんので、いちばん簡単な解決方法はokwave系の質問を閉じるかこちらの質問を止める事です。

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

Name: ベース  ..かけだし(1,410ポイント)   Date: 2009/11/16(月) 10:28   No:42151     
Title: Re:無題    
わかりました。okwaveの質問を閉じます。

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

Name: softya  ..プログラマー(39,611ポイント)   Date: 2009/11/16(月) 11:08   No:42152     
Title: Re:無題    
質問内容は、
http://www.play21.jp/board/formz.cgi?action=res&resno=42143&page=&id=dixq&rln=42149
って事ですね。

私のところでトレースポイントした所では、ちゃんと先にWinMainが来ますので、逆になっているのは変だとは思います。環境の問題でしょうか?
私は環境は、WindowsVistaでVisualStudioS2005StandardEditionです。
少なくともWinMainに来ないとプログラムが始まりませんので、表示上だけ逆転しているみたいですね。トレースポイントではなく、ブレークポイントで調べてみるとWimMainが先に呼ばれる事が確認できると思います。

あとWndProcはウィンドウ・メッセージが届くとだびに呼び出されてますので沢山あって当たり前です。
Spy++などで、Windowsアプリにどれだけメッセージが届くのか確認してみると分かります。それはもう恐ろしい数のメッセージが届きますよ。


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

Name: softya  ..プログラマー(39,648ポイント)   Date: 2009/11/16(月) 11:13   No:42153     
Title: Re:無題    
[補足]
WinMainは起動時に一回だけ呼び出されるだけです。
WndProcはコールバックと言う仕組みで、DispatchMessageから呼び出されます。
http://msdn.microsoft.com/ja-jp/library/cc410766.aspx


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

Name: ベース  ..かけだし(2,288ポイント)   Date: 2009/11/16(月) 11:54   No:42155     
Title: Re:無題    
回答ありがとうございます。環境はwinXp Studio2005StandardEditionです。なぜ個数、処理する順番が違うのでしょうか?ログの続きです。
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
'gamemain.exe': 'C:\WINDOWS\system32\mslbui.dll' を読み込みました。シンボルが読み込まれていません。
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup



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

Name: ベ−ス  ..かけだし(1,149ポイント)   Date: 2009/11/16(月) 11:55   No:42156     
Title: Re:無題    
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
'gamemain.exe': 'C:\Program Files\SIGMATiltWheelMOUSE\MULTI-DIRECTION OPTICAL MOUSE\1.3\MOUDL32B.dll' を読み込みました。バイナリはデバッグ情報と一緒にビルドされませんでした。
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1360 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1360 __tmainCRTStartup


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

Name: softya  ..プログラマー(38,762ポイント)   Date: 2009/11/16(月) 12:04   No:42158     
Title: Re:無題    
WinMainが何度も呼び出されるはずはありません。
質問ですが、
1.デバックビルドでトレースポイントしてますでしょうか?
2.ブレークポイントは試されましたか?

私の環境のトレースポイントです。wWinMainなのはUNICODEの環境のため。
Function: wWinMain(HINSTANCE__ *, HINSTANCE__ *, wchar_t *, int), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1010 wWinMainCRTStartup
この様に、WinMainは一回しか登場しません。


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

Name: ベース  ..かけだし(2,352ポイント)   Date: 2009/11/16(月) 12:12   No:42159     
Title: Re:無題    
デバッグビルドでトレースしています。
ブレークポイントGetmessage()に置いて試しました。
ですが変わりません。



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

Name: softya  ..プログラマー(39,101ポイント)   Date: 2009/11/16(月) 12:38   No:42160     
Title: Re:無題    
>ブレークポイントGetmessage()に置いて試しました。
Getmessageはメインループなので、何度も呼び出されて当たり前です。
あぁ、納得しましたトレースポイントをGetmessage()の所に置いているのですね。

ウィンドウ・メッセージの仕組みを簡単に説明します。
CreateWindowされたウィンドウに届くメッセージは、GetMessage()で取り出します。
これがWinMainにあるメインループです。取り出したメッセージはDispatchMessage()からWndProcを呼び出してメッセージの処理をしてもらいます。
メッセージが届いてもWndProcを呼び出す必要の無いメッセージの場合は、DispatchMessage()からWndProcは呼び出されません。
このメインループは、プログラムが終了するまで回り続けます。

どんなメッセージ番号かは、トレースポイントを作る時に変数の表示を一緒にする様にすると分かりやすいと思います。


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

Name: ベース  ..かけだし(2,376ポイント)   Date: 2009/11/16(月) 12:50   No:42161     
Title: Re:無題    
仕組みは何となくわかりました。でもなぜWinProcは連続でくるのでしょうか?

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

Name: softya  ..プログラマー(39,467ポイント)   Date: 2009/11/16(月) 19:20   No:42169     
Title: Re:無題    
>仕組みは何となくわかりました。でもなぜWinProcは連続でくるのでしょうか?
まぁ、私もウィンドウメッセージの仕組みを完璧に理解しているわけではありませんが、GetMessage()→DispatchMessage()→WndProc()の通りに流れるわけではありません。
必要に応じて、DispatchMessage()内で複数のメッセージを生成してWndProc()が呼び出される場合があるみたいなのです(たぶん、画面の再描画等)。
それとDispatchMessage()→どこか別のウィンドウってのもあって、WndProc()が呼ばれない事もあります。


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

Name: ベース  ..かけだし(2,418ポイント)   Date: 2009/11/16(月) 20:44   No:42173     
Title: Re:無題    
回答ありがとうございます。そうなんですか。画面の再描画等と書いておりますが、他に何があるのでしょうか?
何回も質問すいません。


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

Name: softya  ..プログラマー(39,560ポイント)   Date: 2009/11/16(月) 21:31   No:42179     
Title: Re:無題    
どのメッセージがそうなのかは把握してる分けではありません。
それとPostMessageとSendMessageでメッセージ処理は違う動作をします。
PostMessage関数ならPostMessage()→メッセージキュー→GetMessage()→DispatchMessage()→WndProc()とメッセージが流れますが、SendMessage関数だとSendMessage()→WndProc()と直接送られますのでGetMessage()とWndProc()の数が合わない事は良くあります。


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

Name: ベース  ..かけだし(2,468ポイント)   Date: 2009/11/16(月) 22:40   No:42183     
Title: Re:無題    
回答ありがとうございます。自分でもPostMessage関数をやってみたのですがたいして変わらずです。
PostMessageをどこに置いたのでしょうか?


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

Name: softya  ..熟練のプログラマー(40,606ポイント)   Date: 2009/11/16(月) 23:30   No:42185     
Title: Re:無題    
何か勘違いしている様なので、こちらで試して見ました。
WndProc中のWM_LBUTTONDOWNでPostとSendを呼び出すように作ってあります。

#define POST_MSG (WM_APP+0)
#define SEND_MSG (WM_APP+1)
case WM_LBUTTONDOWN:
PostMessage(hWnd,POST_MSG,0,0);
SendMessage(hWnd,SEND_MSG,0,0);
break;

case POST_MSG:
OutputDebugString( _T("PostMessage Get\n") );
break;

case SEND_MSG:
OutputDebugString( _T("SendMessage Get\n") );
break;


で、そのトレース結果がこれです。
基本的なメッセージ番号については、
http://yokohama.cool.ne.jp/chokuto/urawaza/message/
を参考に。
ちなみにWM_APP+0のメッセージ番号は16進で0x8000になります。

>まず、WM_LBUTTONDOWNのメッセージ
Function: wWinMain(HINSTANCE__ *, HINSTANCE__ *, wchar_t *, int), Thread: 0x1D6C wWinMainCRTStartup GetMessage {msg=0x00000201 wp=0x00000001 lp=0x00ec0169}
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 513

>SEND_MSG(0x8001)の処理
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 32769
SendMessage Get

>POST_MSG(0x8000)の処理
Function: wWinMain(HINSTANCE__ *, HINSTANCE__ *, wchar_t *, int), Thread: 0x1D6C wWinMainCRTStartup GetMessage {msg=0x00008000 wp=0x00000000 lp=0x00000000}
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 32768
PostMessage Get

>WM_LBUTTONDOWNに付随して発生したメッセージ
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 132
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 32

>WM_LBUTTONUPメッセージ
Function: wWinMain(HINSTANCE__ *, HINSTANCE__ *, wchar_t *, int), Thread: 0x1D6C wWinMainCRTStartup GetMessage {msg=0x00000202 wp=0x00000000 lp=0x00ec0169}
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 514

>WM_LBUTTONUPきに付随して発生したメッセージ
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 132
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 32



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

Name: ベース  ..入門者(2,858ポイント)   Date: 2009/11/17(火) 00:07   No:42188 解決!     
Title: Re:無題    
わかりました。確かにそういう処理になりました。
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 132
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 32
はWM_LBUTTONUPなどとともに生じるメッセージなのですね。そして
Function: wWinMain(HINSTANCE__ *, HINSTANCE__ *, wchar_t *, int), Thread: 0x1D6C wWinMainCRTStartup GetMessage {msg=0x00000202 wp=0x00000000 lp=0x00ec0169}
Function: wWinMain(HINSTANCE__ *, HINSTANCE__ *, wchar_t *, int), Thread: 0x1D6C wWinMainCRTStartup GetMessage {msg=0x00000202 wp=0x00000000 lp=0x00ec0169}
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 132
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 32
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 132
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1D6C wWinMainCRTStartup 32
は再描画などとともに生じるメッセージなのですね。わかりました。回答ありあがとうございました!


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



Name: NWT  ..ぴよぴよ(100ポイント)   Date: 2009/11/16(月) 18:15   No:42166       
Title: アルファベットを表示するプログラム    
abcdefghijklmnopqrstuvwxyz
bcdefghijklmnopqrstuvwxyza
cdefghijklmnopqrstuvwxyzab
defghijklmnopqrstuvwxyzabc
efghijklmnopqrstuvwxyzabcd
fghijklmnopqrstuvwxyzabcde
ghijklmnopqrstuvwxyzabcdef
hijklmnopqrstuvwxyzabcdefg
ijklmnopqrstuvwxyzabcdefgh
jklmnopqrstuvwxyzabcdefghi
klmnopqrstuvwxyzabcdefghij
lmnopqrstuvwxyzabcdefghijk
mnopqrstuvwxyzabcdefghijkl
nopqrstuvwxyzabcdefghijklm
opqrstuvwxyzabcdefghijklmn
pqrstuvwxyzabcdefghijklmno
qrstuvwxyzabcdefghijklmnop
rstuvwxyzabcdefghijklmnopq
stuvwxyzabcdefghijklmnopqr
tuvwxyzabcdefghijklmnopqrs
uvwxyzabcdefghijklmnopqrst
vwxyzabcdefghijklmnopqrstu
wxyzabcdefghijklmnopqrstuv
xyzabcdefghijklmnopqrstuvw
yzabcdefghijklmnopqrstuvwx
zabcdefghijklmnopqrstuvwxy

と表示するプログラムを作成している途中のものです。

今のところ1列目を表示するプログラムはできました
#include <stdio.h>

int main(void)
{
int a;

for( a = 'A' ; a <= 'Z' ; a++)
{
printf("%c",a);
}

return(0);
}


ここから先がわからないのでアドバスをお願いします。


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


Name: lbfuvab  ..上級者(23,164ポイント)   Date: 2009/11/16(月) 18:25   No:42167     
Title: Re:アルファベットを表示するプログラム    
ヒント:配列と剰余演算子


後、'A'から'Z'まで連続と言うのは決まっていないので注意してください。




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

Name: non  ..熟練のプログラマー(69,679ポイント)   Date: 2009/11/16(月) 19:35   No:42171     
Title: Re:アルファベットを表示するプログラム    
2行目を作ってみました

#include<stdio.h>
int main(void)
{
int i,moji;
for(i=0,moji='b';i<26;i++,moji++){
if(moji>'z') moji='a';
putchar(moji);
}
return 0;
}



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

Name: lbfuvab  ..上級者(23,310ポイント)   Date: 2009/11/16(月) 22:09   No:42182     
Title: Re:アルファベットを表示するプログラム    
解説です。
char str[]="abcdefghijklmnopqrstuvwxyz";

の様に配列strを定義します。
一列目を出力するには

int i;
for(i=0;i<26;i++) putchar(str[i]);

とすればおkです。
しかし二列目で(三列目以上でも同様に)

for(i=0;i<26;i++) putchar(str[i + 1]); //三列目ならi+2とする

とすると配列の範囲の[0,26)を超えてしまいます。
そこで剰余演算子の出番です。

後は、自分で調べてください。


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



Name:  ..上級者(24,488ポイント)   Date: 2009/11/16(月) 20:46   No:42174       
Title: 文字を右揃えにする方法ってないでしょうか?    
例えば、これとかは
DrawFormatString(x, y,color[0],"%.1fFPS",1000/ave);
左揃えになってます。
どうしたら良いのでしょうか?


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


Name: non  ..熟練のプログラマー(69,705ポイント)   Date: 2009/11/16(月) 21:21   No:42177     
Title: Re:文字を右揃えにする方法ってないでしょうか?    
%5.1 のように全体の桁数を指定する方法ではだめですか。


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

Name: やっくん  ..中級者(12,950ポイント)   Date: 2009/11/16(月) 21:26   No:42178     
Title: Re:文字を右揃えにする方法ってないでしょうか?    
文字列から文字数とフォントサイズを割り出し、
たとえば
文字数×フォントサイズを揃えたい位置から引いてあげたものをX座標に入れるとかではだめでしょうか?
フォントのサイズは指定したドット数に大体比例するようですし。


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

Name: 御津凪 [URL]  ..ハッカー(122,770ポイント)   Date: 2009/11/16(月) 21:39   No:42180     
Title: Re:文字を右揃えにする方法ってないでしょうか?    
> 文字数×フォントサイズ

その計算法は、固定幅フォントで、かつ描画する文字列が半角文字のみ、あるいは全角文字のみでないと正しく計算できません。

DX ライブラリには文字列幅を計算する関数 GetDrawStringWidth や GetDrawFormatStringWidth がありますので、
それらの関数を使って計算した方が正確です。


しかし、今回程度のものなら、それらを使って計算する方法より、
non さんのように右揃えになるように書式指定をした方が楽かと思います。


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



Name: ひよこ  ..比類無きプログラマー(70,205ポイント)   Date: 2009/11/13(金) 09:40   No:41875       
Title: ポインタの削除    
リストを勉強しているのですが、サイトのを書き直していますが、
ポインタエラーになってしまいます。どうすればいいでしょうか?
あくまで勉強なのでnewは使っていません。

#include <stdio.h>
#include <malloc.h>

typedef struct cell_t
{
struct cell_t *next;
int data;
};

cell_t *g_cell;//セルの先頭

int setList(int data)
{
cell_t *tmp;
tmp = (cell_t*)malloc(sizeof(cell_t));

if(tmp == NULL)
{
return(-1);
}

tmp->next =NULL;

if(g_cell==NULL)//先頭が存在しないなら
g_cell=tmp;//先頭にする
else
{
cell_t *end_cell=g_cell;//NULLになる
cell_t *now_end_cell=NULL;//最後の要素
while(end_cell!=NULL){
now_end_cell=end_cell;
end_cell=end_cell->next;
}
now_end_cell->next=tmp;//一番最後のリストに新しい要素のポインタをつなぐ。
}
tmp->data = data;
return 0;
}
void show_rist(){
cell_t *p=g_cell;
while(p!=NULL){
printf("ptr=%p,data=%d\n",p,p->data);
p=p->next;
}
}
void deleteList()
{
cell_t *now=g_cell;//削除されるポインタ
cell_t *back=NULL;//削除されるポインタの後ろ
while(now!=NULL){
if(now->data%10==0){
if(back==NULL){//最初に引っかかったら
g_cell=now->next;
}
else
{
back->next=now->next;
free(now);
}
}
else
back=now;

now=now->next;
}
}

int main()
{
g_cell= NULL;//先頭のセルの初期化
for(int i=0;i<100+1;i++)
setList(i);
deleteList();
show_rist();

return 0;
}


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


Name: softya  ..プログラマー(37,804ポイント)   Date: 2009/11/13(金) 10:20   No:41877     
Title: Re:ポインタの削除    
back->next=now->next;
からステップ実行してみれば原因は分かりますよ。


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

Name: ひよこ  ..比類無きプログラマー(70,261ポイント)   Date: 2009/11/13(金) 10:32   No:41878     
Title: Re:ポインタの削除    
あれ、なんかfreeを通ったらおかしくなりました。
back->next=now->next;で代入はきちんとできていると
思ったのですが、これはどうしてでしょうか?


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

Name: softya  ..プログラマー(37,946ポイント)   Date: 2009/11/13(金) 10:38   No:41879     
Title: Re:ポインタの削除    
free(now);でnowのメモリ空間は解放されますよね。
その次のnow=now->next;でnow->nextは解放された未定義のメモリ空間の参照ですので、動作は保障されません。



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

Name: ひよこ  ..比類無きプログラマー(70,269ポイント)   Date: 2009/11/13(金) 10:54   No:41881     
Title: Re:ポインタの削除    
確かに未定義ですね。よく考えたらできました。ありがとうございます。
この前の、龍神録リスト化の続きなのですがdel_effectを作っていたのですが、
二つ条件があるときのリストはどのようにできるのですか?


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

Name: ひよこ  ..熟練のプログラマー(69,064ポイント)   Date: 2009/11/13(金) 17:42   No:41906     
Title: Re:ポインタの削除    
すみません、説明が悪かったですね。
今敵の消滅エフェクトを作っていたのですが、条件が二つありまして、どのように書けばいいのかと
思って質問します。下のソースで実行するとcalc_del_effectでポインタエラーとなります。
head_del_effectのnextが
いけないとわかりました。
どうすればいいのでしょうか?

//消滅エフェクトを登録する
void enter_del_effect(enemy_t *p){
del_effect_t *new_del_effect;
new_del_effect = new del_effect_t;
new_del_effect->next=NULL;

// 最初の処理なら。
if( head_del_effect==NULL ) {
// 最初の敵データ
head_del_effect = new_del_effect;
}
else
{
// リストの最後を探す。
del_effect_t *now_del_effect = head_del_effect;
while( now_del_effect->next!=NULL ) {
now_del_effect = now_del_effect->next;
}
// リストの最後に接続する。
now_del_effect->next = new_del_effect;
}
new_del_effect->flag=1;//フラグを立てる
new_del_effect->cnt=0;
new_del_effect->col=p->back_col;//敵の背景色を消滅色に設定する
new_del_effect->x=p->x;//敵の座標を消滅位置にセット
new_del_effect->y=p->y;
}

//消滅エフェクトを計算・エフェクトを計算する
void calc_del_effect(){
del_effect_t *check_del_effect = head_del_effect;
del_effect_t *before_del_effect = NULL;
while( check_del_effect != NULL ) {
del_effect_t *next_del_effect = check_del_effect->next;//head_del_effect->next

if(check_del_effect->cnt%2==0){
effect_t *new_effect;
new_effect = new effect_t;
new_effect->next=NULL;
// 最初の処理なら。
if( head_effect==NULL ) {
// 最初の敵データ
head_effect = new_effect;
}
else
{
// リストの最後を探す。
effect_t *now_effect = head_effect;
while( now_effect->next!=NULL ) {
now_effect = now_effect->next;
}
// リストの最後に接続する。
now_effect->next = new_effect;
}
new_effect->flag=1;
new_effect->brt=255;
new_effect->ang=rang(PI);
new_effect->col=check_del_effect->col;
new_effect->eff=1;
new_effect->img=img_del_effect[new_effect->col];//消滅する画像をセット
new_effect->knd=0;
new_effect->x=check_del_effect->x;
new_effect->y=check_del_effect->y;
new_effect->spd=0;
}
else
{
//条件にひっかからなかったらそのアドレスをbefore_ememy
before_del_effect = check_del_effect;
}
if(check_del_effect->cnt>8) {
// 削除
if( before_del_effect == NULL ) {//先頭か
head_del_effect = next_del_effect;//一回目だったら、NULLを、2回目以上はアドレスへつなぐ
} else {
before_del_effect->next = next_del_effect;
}
delete check_del_effect;
}
else {//条件にひっかからなかったらそのアドレスをbefore_ememy
before_del_effect = check_del_effect;
}
check_del_effect->cnt++;
check_del_effect = next_del_effect;
}
}


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

Name: softya  ..プログラマー(38,098ポイント)   Date: 2009/11/14(土) 10:22   No:41955     
Title: Re:ポインタの削除    
見て思ったのが、
1.削除条件が良く分からない。

2.before_del_effectの代入が2箇所ある。
>before_del_effect = check_del_effect;

3.前回と同じ問題がある。
解放済みの領域を参照しているコードがあります。
ステップ実行すれば分かる問題なので、もう少し念入りに調査するクセを付けてくださいね。
私の答えを待っているだけでは、プログラミング能力は向上しませんよ。

4.2つのコードが混じってややこしいなら関数を分けてください。
head_effectの処理は別関数に分けれます。


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

Name: ひよこ  ..比類無きプログラマー(71,054ポイント)   Date: 2009/11/14(土) 13:54   No:41969     
Title: Re:ポインタの削除    
なるほど、別関数にまとめるのですか、ありがとうございます。
ポインタエラーも出なくなり、実行してみたのですが消滅エフェクトが出ません。
ブレークポイントで登録の部分も通っているようなのですが、どこが悪いのでしょうか?
消滅エフェクト登録時のソースを置きます。

//消滅エフェクトを登録する
void enter_del_effect(enemy_t *p){
del_effect_t *new_del_effect;
new_del_effect = new del_effect_t;
new_del_effect->next=NULL;

// 最初の処理なら。
if( head_del_effect==NULL ) {
// 最初の敵データ
head_del_effect = new_del_effect;
}
else
{
// リストの最後を探す。
del_effect_t *now_del_effect = head_del_effect;
while( now_del_effect->next!=NULL ) {
now_del_effect = now_del_effect->next;
}
// リストの最後に接続する。
now_del_effect->next = new_del_effect;
}
new_del_effect->flag=1;//フラグを立てる
new_del_effect->cnt=0;
new_del_effect->col=p->back_col;//敵の背景色を消滅色に設定する
new_del_effect->x=p->x;//敵の座標を消滅位置にセット
new_del_effect->y=p->y;
}

void del_effect_enter(){
del_effect_t *check_del_effect = head_del_effect;
del_effect_t *before_del_effect = NULL;
while( check_del_effect != NULL ) {
del_effect_t *next_del_effect = check_del_effect->next;//head_del_effect->next

if(check_del_effect->cnt%2==0){//2カウントに一度エフェクトを登録
effect_t *new_effect;
new_effect = new effect_t;
new_effect->next=NULL;
// 最初の処理なら。
if( head_effect==NULL ) {
// 最初の敵データ
head_effect = new_effect;
}
else
{
// リストの最後を探す。
effect_t *now_effect = head_effect;
while( now_effect->next!=NULL ) {
now_effect = now_effect->next;
}
// リストの最後に接続する。
now_effect->next = new_effect;
}
new_effect->flag=1;
new_effect->brt=255;
new_effect->ang=rang(PI);
new_effect->col=check_del_effect->col;
new_effect->eff=1;
new_effect->img=img_del_effect[new_effect->col];//消滅する画像をセット
new_effect->knd=0;
new_effect->x=check_del_effect->x;
new_effect->y=check_del_effect->y;
new_effect->spd=0;
}
else
{
//条件にひっかからなかったらそのアドレスをbefore_ememy
before_del_effect = check_del_effect;
}
//check_del_effect->cnt++;
check_del_effect = next_del_effect;
}
}
void delete_del_effect(){
del_effect_t *check_del_effect = head_del_effect;
del_effect_t *before_del_effect = NULL;
while( check_del_effect != NULL ) {
del_effect_t *next_del_effect = check_del_effect->next;//head_del_effect->next
if(check_del_effect->cnt>8) {//登録されてから8カウントで消去
// 削除
if( before_del_effect == NULL ) {//先頭か
head_del_effect = next_del_effect;//一回目だったら、NULLを、2回目以上はアドレスへつなぐ
} else {
before_del_effect->next = next_del_effect;
}
delete check_del_effect;
}
else {//条件にひっかからなかったらそのアドレスをbefore_ememy
before_del_effect = check_del_effect;
}
check_del_effect = next_del_effect;
}
}
//消滅エフェクトを計算・エフェクトを登録する
void calc_del_effect(){
if( head_del_effect!= NULL ) {
del_effect_enter();
delete_del_effect();
del_effect_t *p=head_del_effect;
while(p!=NULL){
p->cnt++;
p=p->next;
}
}
}
void effect_main(){
dn_calc();//ドガーンとゆれる画面の処理
calc_effect();//エフェクトの計算
calc_del_effect();//消滅エフェクトの計算
bom_calc();//ボム計算
enter_crybom_effect();
}


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

Name: softya  ..プログラマー(38,619ポイント)   Date: 2009/11/14(土) 17:27   No:41997     
Title: Re:ポインタの削除    
あまり私が調べすぎるのも、本人の成長の阻害になる気がするのでヒントだけにとどめます。
1.ブレークで登録が出来ているとの事ですが、リストがちゃんと出来ているかOutputDebugStringなどで確認しましたか?
2.消滅エフェクトの処理側でリストがちゃんと処理されていますか?消滅エフェクトの何処まで処理されているかトレースしてみてください。


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

Name: ひよこ  ..比類無きプログラマー(71,593ポイント)   Date: 2009/11/14(土) 18:53   No:42002     
Title: Re:ポインタの削除    
おそらくこれが悪いのだと思いますが、del_effect_enter()で作ったエフェクトがおかしくなってます。
effect_ptr=01F71760 cnt=-842150451 col=3 flag=1 x=86.000000 y=385.000000 ang=1610612736 brt=1070944260 eff=0 knd=1081073664 ,next=00000001
effect_ptr=01F71698 cnt=-842150451 col=3 flag=1 x=86.000000 y=385.000000 ang=-536870912 brt=1073352384 eff=0 knd=1081073664 ,next=00000001
effect_ptr=01F71378 cnt=-842150451 col=3 flag=1 x=86.000000 y=385.000000 ang=-536870912 brt=-1075045437 eff=0 knd=1081073664 ,next=00000001
effect_ptr=01F71410 cnt=-842150451 col=3 flag=1 x=86.000000 y=385.000000 ang=536870912 brt=-1074664265 eff=0 knd=1081073664 ,next=00000001
effect_ptr=06D52610 cnt=-842150451 col=3 flag=1 x=86.000000 y=385.000000 ang=-536870912 brt=1073726605 eff=0 knd=1081073664 ,next=00000001

消滅エフェクト登録自体はできているようです。
del_effect_ptr=06D4A218 cnt=0 col=3 flag=1 x=86.000000 y=385.000000 next=00000000


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

Name: softya  ..プログラマー(38,635ポイント)   Date: 2009/11/14(土) 19:02   No:42004     
Title: Re:ポインタの削除    
またズレてませんか?
リビルドしてみてください。


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

Name: ひよこ  ..比類無きプログラマー(71,953ポイント)   Date: 2009/11/14(土) 20:13   No:42011     
Title: Re:ポインタの削除    
ズレてるの意味がわかりませんが、リビルドして下のようになりました。
del_effect_ptr=06E726D0 cnt=0 col=1 flag=1 x=96.000000 y=365.000000 next=00000000
effect_ptr=06E727F0 cnt=-842150451 col=1 flag=1 x=96.000000 y=365.000000 ang=-1610612736 brt=-1075933256 eff=0 knd=1081073664 ,next=00000001
effect_ptr=003E1760 cnt=-842150451 col=1 flag=1 x=96.000000 y=365.000000 ang=-536870912 brt=1073047341 eff=0 knd=1081073664 ,next=00000001
effect_ptr=06E69FC8 cnt=-842150451 col=1 flag=1 x=96.000000 y=365.000000 ang=536870912 brt=1072025778 eff=0 knd=1081073664 ,next=00000001
effect_ptr=06E6A060 cnt=-842150451 col=1 flag=1 x=96.000000 y=365.000000 ang=-1610612736 brt=-1075972787 eff=0 knd=1081073664 ,next=00000001
effect_ptr=06E6A1E8 cnt=-842150451 col=1 flag=1 x=96.000000 y=365.000000 ang=1610612736 brt=-1075443376 eff=0 knd=1081073664 ,next=00000001
出力用の関数です

void Rist_Debug_String(del_effect_t *p){
TCHAR str[256];
_stprintf(str,TEXT("del_effect_ptr=%p cnt=%d col=%d flag=%d x=%f y=%f next=%p \n"),
p,p->cnt,p->col,p->flag,p->x,p->y,p->next
);
OutputDebugString( str );
}
void Rist_Debug_String2(effect_t *p){
TCHAR str[256];
_stprintf(str,TEXT("effect_ptr=%p cnt=%d col=%d flag=%d x=%f y=%f ang=%d brt=%d eff=%d knd=%d ,next=%p \n"),
p,p->cnt,p->col,p->flag,p->x,p->y,p->ang,p->brt,p->eff,p->knd,p->next
);
OutputDebugString( str );
}

エフェクトの追加の仕方del_effect_enter()内で
new_effect->spd=0;
Rist_Debug_String2(new_effect);
としています。


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

Name: softya  ..プログラマー(38,944ポイント)   Date: 2009/11/15(日) 14:26   No:42092     
Title: Re:ポインタの削除    
nextが何処で1になるかステップ実行して確認してください。
p->ang,p->brtは表示する型が違っています。


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

Name: ひよこ  ..比類無きプログラマー(72,090ポイント)   Date: 2009/11/15(日) 15:44   No:42097     
Title: Re:ポインタの削除    
あ、こんなところに原因がありました。graph_effect(0);//敵が死ぬエフェクトがないのが原因のようです。
いろいろとすみません。ただいま消滅エフェクトの拡大現象を修正中です。


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

Name: ひよこ  ..比類無きプログラマー(72,153ポイント)   Date: 2009/11/15(日) 15:54   No:42098     
Title: Re:ポインタの削除    
よくみたら、初期化忘れでcntの値がおかしかったようです。
softyaさん、いろいろとありがとうございました。また、おかしくて直らない場所があったら
質問します、その時はよろしくお願いします。


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

Name: ひよこ  ..比類無きプログラマー(72,158ポイント)   Date: 2009/11/15(日) 15:55   No:42099 解決!     
Title: Re:ポインタの削除    
解決にします。

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

Name: softya  ..プログラマー(39,182ポイント)   Date: 2009/11/15(日) 22:43   No:42114     
Title: Re:ポインタの削除    
とりあえず、アドバイスを。
・落ち着いてよく調べる事を心がけてください。
・ステップ実行は、自分のプログラムの気づかないバグを気づかせてくれるので、作ってすぐはなるべく実行するようにしてくださいね。
・バグは自分の理解度を深めるチャンスです。粘り強く調べてください。
・ポインタ系のバグはOutputDebugStringなどを多用して情報を収集すること。
・特にリストは作ってすぐの時は必ずちゃんと情報が格納されているか確認する事。大抵は失敗があります。
以上です。
では、プログラミングを楽しんでください。


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

Name: ひよこ  ..比類無きプログラマー(73,380ポイント)   Date: 2009/11/16(月) 17:25   No:42164     
Title: Re:ポインタの削除    
いろいろとありがとうございます。
できるだけ努力します。


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



Name: kerotan0820  ..上級者(17,850ポイント)   Date: 2009/11/16(月) 04:20   No:42133       
Title: if文をよういた計算を行うプログラム    
前回期末テストの各教科の点数を入力したら、3,5,9教科の合計,平均を表示してくれるプログラムを組んだのですが、中間テストにも対応出来るようにしたいのです。
なのでif文を使って1を入力したら中間テスト、2を入力したら期末テストになるように自分で組んでみたのですがうまくいきません。
プログラムはこれです

#include <stdio.h>
int main(void){
int kokugo,sugaku,rika,shakai,eigo,gijutsu,kateika,bijutsu,ongaku,gikagoukei,kyouka5,kyouka9,kyouka3,c;
double a,b;
/*中間か期末かの入力を求める*/
printf("中間の場合は1 期末の場合は2を入力してください\n");
printf("1or2:"); scanf("%d",&c);
if(c==1){
printf("5教科の各点数を入力してください\n");
printf("国語:"); scanf("%d" ,&kokugo);
printf("数学:"); scanf("%d" ,&sugaku);
printf("理科:"); scanf("%d" ,&rika);
printf("社会:"); scanf("%d" ,&shakai);
printf("英語:"); scanf("%d" ,&eigo);
printf("__________________\n");
kyouka5=kokugo+sugaku+rika+shakai+eigo;
kyouka3=kokugo+sugaku+eigo;
a=(double)kyouka5/5;
b=(double)kyouka3/3;
printf(" ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n");
printf("■3,5教科合計■\n");
printf("3教科合計:%d\n" ,kyouka3);
printf("5教科合計:%d\n\n" ,kyouka5);
printf("■3,5教科平均■\n");
printf("3教科平均:%f\n" ,b);
printf("5教科平均:%f\n" ,a);
scanf("%d");
}else(c==2){
/*以下9教科の場合のプログラム*/
printf("9教科の各点数を入力してください\n");
printf("国語:"); scanf("%d" ,&kokugo);
printf("数学:"); scanf("%d" ,&sugaku);
printf("理科:"); scanf("%d" ,&rika);
printf("社会:"); scanf("%d" ,&shakai);
printf("英語:"); scanf("%d" ,&eigo);
printf("技術:"); scanf("%d" ,&gijutsu);
printf("家庭科:"); scanf("%d" ,&kateika);
printf("美術:"); scanf("%d" ,&bijutsu);
printf("音楽:"); scanf("%d" ,&ongaku);
printf("__________________\n");
gikagoukei=gijutsu+kateika;
kyouka9=kokugo+sugaku+rika+shakai+eigo+gikagoukei+bijutsu+ongaku;
kyouka5=kokugo+sugaku+rika+shakai+eigo;
kyouka3=kokugo+sugaku+eigo;
a=(double)kyouka9/9;
b=(double)kyouka5/5;
printf("☆   ≪結果≫    ☆\n");
printf(" ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n");
printf("■技家合計■\n");
printf("技家合計:%d\n\n" ,gikagoukei);
printf("■3,5,9教科合計■\n");
printf("3教科合計:%d\n" ,kyouka3);
printf("5教科合計:%d\n" ,kyouka5);
printf("9教科合計:%d\n\n" ,kyouka9);
printf("■5,9教科平均■\n");
printf("5教科平均:%f\n" ,b);
printf("9教科平均:%f\n" ,a);
scanf("%d");
}

return 0;
}

エラーメッセージには構成がいけないみたいなことが出てくるのですが、何がいけないのでしょうか
scanfに関するエラーメッセージがざーっと出るのですが、いまいちわかりません
ご教授お願いします


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


Name: array [URL]  ..熟練のプログラマー(60,941ポイント)   Date: 2009/11/16(月) 04:58   No:42134     
Title: Re:if文をよういた計算を行うプログラム    
scanf()については、多分エラーではなくwarning(警告)ではないですか。
scanf()を使うのは推奨してされていない。という警告だったと思います。
警告レベルを下げるか、scanf_s()を代用すれば警告は消えると思います。


で、実際のエラーですが

(誤) }else(c==2){
(正) }else if(c==2){

じゃないですか? 自分も稀にやってしまう事があります^^;


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

Name: kerotan0820  ..上級者(17,897ポイント)   Date: 2009/11/16(月) 05:02   No:42135 解決!     
Title: Re:if文をよういた計算を行うプログラム    
■array様
ありがとうございます!無事成功しました^^

scanf_s()にしておきました ありがとうございます


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

Name: バグ  ..ハッカー(174,114ポイント)   Date: 2009/11/16(月) 07:35   No:42138     
Title: Re:if文をよういた計算を行うプログラム    
解決したようですが、どうしても気になったので…(^_^;)


×if文をよういた計算を行うプログラム

〇if文を用いた計算を行うプログラム


用いる(もちいる)


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

Name: kerotan0820  ..上級者(17,971ポイント)   Date: 2009/11/16(月) 16:36   No:42163     
Title: Re:if文をよういた計算を行うプログラム    
■バグさん
そうだったのですか;
お恥ずかしい限りです(笑)
用いる、おぉ… もちいると読むのですねこれは(笑)
ありがとうございました^^


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



Name: ベース  ..かけだし(1,347ポイント)   Date: 2009/11/16(月) 09:57   No:42143       
Title: 雛形ウィンドウのしょりについて    
雛形のウィンドウをGetmessage()のところとWndProcのところをトレースポイントしたときに気づいたんですが、
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x1668 __tmainCRTStartup
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x1668 __tmainCRTStartup
       .
       .
       . 
       .
と出るのですが、なぜ順番的(
Function: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x16D4 __tmainCRTStartup
Function: WndProc(HWND__ *, unsigned int, unsigned int, long), Thread: 0x16D4 __tmainCRTStartup
の交互

じゃないのはなぜなのでしょうか?あとFunction: WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int), Thread: 0x16D4 __tmainCRTStartupと
Function: WndProc(HWND__ *, unsigned int, unsigned int, long),
に個数に差が出るのですが、なぜなのでしょうか?


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


Name: softya  ..プログラマー(39,329ポイント)   Date: 2009/11/16(月) 10:04   No:42145     
Title: Re:雛形ウィンドウのしょりについて    
マルチポストになっちゃってますので、ちゃんと「規約と注意事項」を読んで頂きたいです。
http://oshiete1.goo.ne.jp/qa5451747.html


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

Name: ベース  ..かけだし(1,380ポイント)   Date: 2009/11/16(月) 10:22   No:42148     
Title: Re:雛形ウィンドウのしょりについて    
すみません。書き直します。

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

Name: ベース  ..かけだし(1,398ポイント)   Date: 2009/11/16(月) 10:24   No:42149 解決!     
Title: Re:雛形ウィンドウのしょりについて    
すみませんでした。

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



Name: sweden  ..ぴよぴよ(847ポイント)   Date: 2009/11/16(月) 01:21   No:42128       
Title: 質問です    
今学校の課題で、10進数を2進数に変換するプログラムを作成しています。2進数に変換するところまではできたのですが結果を表示するときは逆順に表示しなければだめ、というところまではきたのですが、逆順に表示する方法が思いつきません。考えたプログラムは下の通りなのですが、逆順に表示する方法を教えてほしいです。
#include<stdio.h>
main(){
int a,c,n,m,k,b[1000];
printf("10進数で数を入力してください");
scanf("%d",&n);
if(n==0){
m=0;
b[m]=0;
printf("%dです。",0);
}
while(n>0){
k=0;
a=n%2;
b[k]=a;
c=n/2;
n=c;
printf("%d",b[k]);
k=k+1;
if(n==0){
break;
m=k;
printf("%d",b[m]);
}
}
}


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


Name: kerotan0820  ..上級者(17,949ポイント)   Date: 2009/11/16(月) 07:12   No:42137     
Title: Re:質問です    
質問するときは<pre>と</pre>でコードを囲んだほうがいいですよ

詳しくはこのサイトの規約と注意事項をどうぞ
http://dixq.net/board/board.html

回答は申し訳ありませんが出来ません;



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

Name: Mist  ..比類無きプログラマー(71,823ポイント)   Date: 2009/11/16(月) 09:50   No:42141     
Title: Re:質問です    
提示したプログラムは2進数の変換は一応できていますけど、bを配列にしているのに"k=0"の位置がおかしいのでb[0]しか使用していないし、20行目にbreakがあるからその後の行が実行されませんね。
意図を察するにbの配列に1ビットづつの値を入れたいんでしょうけどそうはなっていないですね。
で、逆順表示ですが上記の配列へのデータセットがきちんとできたとすれば以下のようにしてください。
全部書くと勉強にならないので※部分に何をいれるかは考えてください。


if (n==0) {
m=※;
while(m >= 0) {
printf("%d", b[m]);
m--;
}
break;
}



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



Name: くりあ  ..入門者(4,918ポイント)   Date: 2009/11/15(日) 03:27   No:42057       
Title: ファイルの取得?    
Microsoft Visual C++ 2008 Express Editionでプログラミングをしているのですが、
良くファイルを扱うソフトなどで、開くファイルを指定するもの?
ファイル選択ダイアログ?というのですか?あれをやってみようかと思ったのですが、
どうすればいいのでしょうか?
それと、できたら、exeファイルにファイルをドラッグ&ドロップすると、
開けるようにするやり方も知りたいのですが、どうしたらいいのでしょうか?

お願いします。


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


Name: Justy  ..伝説なるハッカー(460,698ポイント)   Date: 2009/11/15(日) 14:25   No:42091     
Title: Re:ファイルの取得?    

> ファイル選択ダイアログ

 OPENFILENAM構造体に情報をセットして、GetOpenFileNameでダイアログを
開くことができます。

ファイル選択
http://wisdom.sakura.ne.jp/system/winapi/common/common6.html



>ドラッグ&ドロップ

 ファイルを exeに Drag&Dropしたのなら、
mainか WinMain関数の引数にファイルへのパスが入ってきますので、
それを調べればいいかと。


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

Name: くりあ  ..初心者(5,052ポイント)   Date: 2009/11/15(日) 20:24   No:42110     
Title: Re:ファイルの取得?    
Justyさんお答えありがとうございます。

>ファイルを exeに Drag&Dropしたのなら、
mainか WinMain関数の引数にファイルへのパスが入ってきますので、
それを調べればいいかと。

すいません。プログラミングを始めたばかりで良く分からないのですが……
どのように調べればいいのでしょうか?


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

Name: Justy  ..伝説なるハッカー(461,161ポイント)   Date: 2009/11/16(月) 00:08   No:42123     
Title: Re:ファイルの取得?    
 コンソールアプリなのか Windowsアプリなのか不明なので、
とりあずコンソールだとします。

 まず、コマンドライン引数というものがあります。

C言語編 第45章 引数のあるmain関数
http://www.geocities.jp/ky_webid/c/045.html

コマンドライン引数
http://www9.plala.or.jp/sgwr-t/c/sec11-4.html


 main関数の場合、int型と char *の配列の2つを引数にとることができる
のですが、ドラッグ&ドロップしたファイル・フォルダ名は
ここに格納されます。


 試しに以下のコードをビルドして出来た実行ファイルに対して、
何かファイルやフォルダをドラッグ&ドロップしてみて下さい。


#include <windows.h>
#include <stdio.h>

int main(int argc , char * argv[] )
{
    int i;
    for(i=1; i<argc; ++i)
    {
        printf("arg[%d] = %s\n", i, argv[i]);
        MessageBoxA(NULL, argv[i] , NULL , MB_OK);
    }
    return 0;
}

 ドラッグ&ドロップしたファイル名が表示されるはずです。


 main関数ではなく、WinMainからプログラムが始まっている場合は
第三引数の PSTRの中にファイルパスが入っています。

 ただ、こちらは複数のファイル・フォルダをドラッグ&ドロップすると
文字列が main関数の時のように別々になっておらず、1つの文字列の中に
複数のファイル・フォルダパスが格納されているので、自分で分解する必要が
あるので、少々面倒です


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

Name: くりあ  ..初心者(5,091ポイント)   Date: 2009/11/16(月) 07:08   No:42136 解決!     
Title: Re:ファイルの取得?    
何となくわかりました。ありがとうございます。
もっと勉強して使えるようにしたいです。


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



Name: スー  ..初心者(8,220ポイント)   Date: 2009/11/15(日) 01:20   No:42049       
Title: DirectXでデスクトップの画像の取得方法    
こんばんわスーです。
いまDirectXとWindowsAPIを使ってスクリーンセーバーを作っています。

デスクトップの画像を表示しながら、何かをする予定です。
イメージとしてはVISTAにインストールされているバブルのスクリーンセーバーです。

それでデスクトップの画像を取得する時点で苦戦しています。
WindowsAPIではデスクトップ画像を取得することはできました。

//デスクトップの画面を取得する関数
//取得したHDCが戻り値
HDC GetDeskTop(){
HDC Deskhdc;
HBITMAP DeskBmp;
HDC DeskBmphdc;

Deskhdc = CreateDCA("DISPLAY",NULL,NULL,NULL);
DeskBmp = CreateCompatibleBitmap(Deskhdc,wx,wy);
DeskBmphdc = CreateCompatibleDC(Deskhdc);
SelectObject(DeskBmphdc, DeskBmp);

ReleaseDC(NULL,Deskhdc);
DeleteObject(DeskBmp);
return DeskBmphdc;
}

これで取得したHDCを、LPDIRECT3DTEXTURE9などのDirectXで使えるように変換する方法はありますか?
もしくは、DirectXの関数でデスクトップの画像を取得する関数はありますか?

皆様、どうぞよろしくお願いします。

使用環境
WindowsXP
VC++2005
DirectX SDK(March 2008)







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


Name: DVDM [URL]  ..初心者(5,864ポイント)   Date: 2009/11/15(日) 03:45   No:42059     
Title: Re:DirectXでデスクトップの画像の取得方法    
>>スーさん
>これで取得したHDCを、LPDIRECT3DTEXTURE9などのDirectXで使えるように変換する方法はありますか?
デスクトップの画像をテクスチャとしてDirectXで使うという認識でいいのでしょうか・・・。
といっても、DirectXはそこまで詳しくないので変換する関数があるかどうかは解りません。


デスクトップの画像が取得出来たのであれば、その画像を一度ビットマップ等で書き出し、
それをD3DXCreateTextureFromFileEx等で読み込んでみてはいかがでしょうか。
D3DXCreateTextureFromFileExの最後の引数がLPDIRECT3DTEXTURE9型なので読み込んでこれそうな感じです。


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

Name: スー  ..初心者(8,274ポイント)   Date: 2009/11/16(月) 00:03   No:42121 解決!     
Title: Re:DirectXでデスクトップの画像の取得方法    
DVDMさんレスありがとうございます。

確かに、ビットマップで保存して、それをDirectXで読み込めばできそうですね。
ありがとうございました。




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



Name: 9mm  ..ぴよぴよ(271ポイント)   Date: 2009/11/15(日) 22:58   No:42117       
Title: 計算プログラム    
太陽高度の計算プログラムとそれを利用して日射量を求めるというプログラムを作りたいのですが、まだCを始めて間もないのでどういう風に作っていけばいいかわかりません。
一応太陽高度を求める式は以下のようになっています。

sin(h)=sin(a)*sin(b)+cos(a)*cos(b)*cos(c)

h:太陽高度
a:日赤緯
b:北緯
c:時角

ここでそれぞれ

c=15*(T-12)+L-135+(e/4)

T:日本標準時 (単位:時間)
L:東経 (単位:度)
e:均時差 (単位:分)

w=360*N/366

a=0.362-23.3*cos(w+6.8)-0.337*cos(2*w-11.9)-0.185*cos(3*w+35.5)

e=-0.0167+7.37*cos(w+85.6)-9.93*cos(2*w-72.3)-0.321*cos(3*w-66.3)

N:1月1日から起算した日数

ここまでが太陽高度を求める計算です。

ここから日射量を求める計算です。

I'=I*(Pの1/sin(h)乗)

I:太陽定数=1353
P:大気透過率

これが日射量を求める計算式です。

この二つを利用して問題を解くプログラムを作成するという課題です。

1.N=1の時、1日の日射量(I')を一分毎に計算せよ。
2.毎日12時の日射毎(I')を1日毎に計算せよ。

かなり専門的な分野なので分かりにくいかと思います。すいません。

あとヒントをもらったんですが、これもよくわからないので一応乗せておきます。

m[1]=31
m[2]=28
m[3]=31
 ・
 ・
 ・
m[12]=31

month:月 読み込み
day:日 読み込み

M=0

for(i=1,i<month,i+t){
M=M+m[i]
}

N=M+day


さっぱりのヒントですww

分かりづらくてすいません。ぜひお願いします。


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




Name: 素人  ..上級者(18,854ポイント)   Date: 2009/11/15(日) 17:44   No:42103       
Title: モヤモヤがうまくいかないです・・    

敵にダメージを与えるとき
敵&ボスの判定部分と自機ショットが接触してる部分は
モヤモヤみたいなものがあります。これを龍神録に実装してみたのですが、
なぜか、
effect[k].knd が 7 になると
描画されないバグがあるのですが、原因が分からなくて困ってます・・
どこが原因なのかアドバイスお願いします。
effect.cpp内
void calc_effect(){
for(int i=0;i<EFFECT_MAX;i++){
if(effect[i].flag>0){ //エフェクトが登録されていたら
effect[i].x+=cos(effect[i].mvang)*effect[i].spd;
effect[i].y+=sin(effect[i].mvang)*effect[i].spd;
switch(effect[i].knd){ //エフェクトの種類によって分岐
省略
case 7: //敵の消滅エフェクト
effect[i].cnt++;
effect[i].r+=0.08; //エフェクトの大きさを段々大きくする
if(effect[i].cnt>10) //10カウント以上になったら
effect[i].brt-=25; //明るさを少なくする
if(effect[i].cnt>20) //20カウント以上になったら
effect[i].flag=0; //消す
break;
default:
printfDx("effect設定エラー\n");
break;
}
}
}
}

適当な場所に
void out_effect(int s){
int k;
if((k=search_effect())!=-1){
effect[k].flag =1;
effect[k].x =enemy[s].x;
effect[k].y =enemy[s].y;
effect[k].cnt =0;
effect[k].knd =7;
effect[k].brt =255;
effect[k].r =6.0; //最初は少し大きめに描画
effect[k].img =img_boss_effect[26];
effect[k].eff =0;
}
}

out.cpp内
上のほうに
extern void out_effect(int s);

//自機ショットと敵との処理
void cshot_and_enemy(){
int i,s;
for(i=0;i<CSHOT_MAX;i++){ //自機ショット総数
if(cshot[i].flag>0){
for(s=0;s<ENEMY_MAX;s++){ //敵総数
if(enemy[s].flag>0){
if(out_judge_cshot(i,s)){ //自機ショットと敵が当たっていれば
cshot[i].flag=0; //その自機ショットを消す
out_effect(s); //←■これ■
省略


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


Name: softya  ..プログラマー(39,259ポイント)   Date: 2009/11/15(日) 22:57   No:42116     
Title: Re:モヤモヤがうまくいかないです・・    
そもそも
case 7:
の後の所を通っているのかブレークポイントを張って調べてみてください。


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



Name: ひかる  ..ぴよぴよ(253ポイント)   Date: 2009/11/15(日) 17:03   No:42102       
Title: 初歩的な質問ですいません。    
龍神録プログラミングの館の10章に書いてある通りに
プログラムを書き換えたのですが
コンパイル中にload.cppの所で

型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
'LoadDivGraph' : 再定義; 以前の定義は '関数' でした
'LoadDivGraph' の宣言を確認してください
error C2078: 初期化子の数が多すぎます。
error C2440: '初期化中' : 'int [9]' から 'int' に変換できません

と出て、敵を表示することができません。
初歩的な質問で申し訳ありませんが、どうすれば良いか教えてくださいませんでしょうか?


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


Name: softya  ..プログラマー(39,208ポイント)   Date: 2009/11/15(日) 22:57   No:42115     
Title: Re:初歩的な質問ですいません。    
ソースコードが無いと指摘し辛いので、load.cpp内容を規約に従って貼り付けてくださいね。


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



Name: ALFA  ..ぴよぴよ(328ポイント)   Date: 2009/11/15(日) 18:46   No:42109       
Title: ソース変更が適用されない?    
お初にお目にかかります、ALFAです。

2年ほど前にC言語の本を手にとりましたが、まとまった時間もなく最近やっと始めることができました。
自分の目的がゲーム制作のため、「14歳からはじめるC言語わくわくゲームプログラミング教室」を購入し、C言語について不明な点があった場合に「C言語によるプログラミング」を使用するといったスタイルで勉強中です。

本題ですが、先日上記の本通りに作成を進めていたところ、エラーメッセージが表示(当然、私のミスでしたが)されたのでデバッグ後にメイクしなおしたのですが、ソースの修正が適用されませんでした。

これは最近になって気付いたことで、プログラムを始めた当初からこのような事が起きていたかは定かではありませんが、前はなんの問題もなくソースの修正が出来ていたはずです。

「borland C++ compiler」と「BCC developer」を使用しております。


初歩的な質問で申し訳ありませんが、どうかご教授お願いします。


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


Name: Naohiro19   Date: 2009/12/10(木) 08:23   No:421091260400997     
Title: Re:ソース変更が適用されない?    
リビルドすればいいと思います。



Name: 天和  ..ぴよぴよ(704ポイント)   Date: 2009/11/14(土) 12:43   No:41959       
Title: 前回の改造    
何度もすいません前回の(http://www.play21.jp/board/formz.cgi?action=res&resno=41888&page=&lognum=&id=dixq&rln=41929)のやつに
さらに単語数をつけたいのですが・・・
例this is a penだと
英単語数は4です
This 4letter
is 2letter
a 1letter
pen 3letter
という風に・・・が
#include<stdio.h>
int main(void)
{
int c;
int e;
e = 0;
while(1){
c = getchar();
if(c ==' ')
e++;

if(c == '\n')
{
printf("英単語数は%dです", e + 1);
break; }

}
while(1){
c = getchar();
if(c != '\n')
putchar(c);
e++;
if(c == ' ')
{
printf(": %d letters.\n", (e - 1));
e = 0;
}
if(c == '\n')
{
printf(": %d letters.\n", (e - 1));
break;

}
}
return 0;
}
とやると2回同じ単語をいちいち入力しなければならないのでgetcharを入力したら
再度もう一度同じ単語でやるというふうにはできないでしょうか?


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


Name: 天和  ..ぴよぴよ(705ポイント)   Date: 2009/11/15(日) 14:09   No:42090     
Title: Re:前回の改造    
不可能・・・でしょうか?

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



Name: ほのか  ..初心者(5,403ポイント)   Date: 2009/11/15(日) 11:32   No:42081       
Title: ボスがアイテムを落とす方法 2    
http://www.play21.jp/board/formz.cgi?action=res&resno=38795&page=&lognum=119&id=dixq&rln=39104
エクセルの中はどのようにしたらいいでしょうか?


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


Name: softya  ..プログラマー(38,895ポイント)   Date: 2009/11/15(日) 14:08   No:42089     
Title: Re:ボスがアイテムを落とす方法 2    
どの様なプログラムにするか決めたなら、まずそれを教えてください。
csvの内容はプログラム次第で変わります。

良く分からないと言うのであれば、雑魚のアイテムの仕組みを良く調べなおしてみてください。
雑魚のアイテムを変更することや、雑魚のアイテムの数を変更する事、雑魚のアイテムを出すタイミングが変更出来ますか?まず、そこを理解してもらわないとボスのアイテムは作れません。


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



Name: PP  ..ぴよぴよ(48ポイント)   Date: 2009/11/15(日) 11:18   No:42080       
Title: 再入力を促す方法を教えてください!!    
・例えば、while文かfor文を用いて0以下13以上がの値が入力されたときに再入力を促すにはどんな文にすればよいのでしょうか? 回答よろしくお願いします。

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


Name: conio [URL]  ..比類無きプログラマー(75,521ポイント)   Date: 2009/11/15(日) 11:50   No:42083     
Title: Re:再入力を促す方法を教えてください!!    
---------------------------------
do{

//入力処理

}while(0以下、または13以上であれば)
---------------------------------

---------------------------------
while(0以下、または13以上であれば)

//入力処理

}
---------------------------------

---------------------------------------
for( ;0以下、または13以上であれば; ){

//入力処理

}
---------------------------------------
こんな感じでどうでしょう?
個人的には do while文が良いと思います。


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

Name: PP  ..ぴよぴよ(86ポイント)   Date: 2009/11/15(日) 12:06   No:42084 解決!     
Title: Re:再入力を促す方法を教えてください!!    
貴重なご回答ありがとうございました!!
参考にさせていただきます。


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



Name: どころてん  ..ぴよぴよ(380ポイント)   Date: 2009/11/15(日) 00:30   No:42035       
Title: ビット単位のシフト演算    
#include <stdio.h>
int main(void)
{
unsigned all_data,data1;
scanf("%x",&all_data);

data1=(all_data>>8)&0xff;

printf("%x \n",data1);

return 0;
}

このプログラムですが、&0xffって何ですか??
何かのおまじないですか??





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


Name: たかぎ [URL]  ..ハッカー(122,709ポイント)   Date: 2009/11/15(日) 00:34   No:42037     
Title: Re:ビット単位のシフト演算    
左辺と0xffのビットANDです。



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

Name: どころてん  ..ぴよぴよ(426ポイント)   Date: 2009/11/15(日) 01:01   No:42043     
Title: Re:ビット単位のシフト演算    
すいません、言葉が足らなさすぎました。
&0xffってこのプログラムではどんな役割をしているんですか?


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

Name: たかぎ [URL]  ..ハッカー(122,822ポイント)   Date: 2009/11/15(日) 01:12   No:42048     
Title: Re:ビット単位のシフト演算    
> &0xffってこのプログラムではどんな役割をしているんですか?

下8ビットを取り出しています。


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

Name: どころてん  ..ぴよぴよ(478ポイント)   Date: 2009/11/15(日) 02:10   No:42053     
Title: Re:ビット単位のシフト演算    
> 下8ビットを取り出しています。
何で下8ビットを取り出すってわかるんでしょうか?
何か定義に基づいてるのですか?
それともそのまま覚えたほうがいいのでしょうか??



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

Name: たかぎ [URL]  ..ハッカー(122,931ポイント)   Date: 2009/11/15(日) 02:13   No:42055     
Title: Re:ビット単位のシフト演算    
> 何で下8ビットを取り出すってわかるんでしょうか?

0xffというのは、2進数になおすと、11111111のように1が8つ並びます。
それと他の値とのビットANDを計算すると、1のところ(つまり下位8ビット)はそのままで、9ビット目から上は全部0になります。
結果として、下位8ビットだけが取り出せます。


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

Name: conio [URL]  ..比類無きプログラマー(75,732ポイント)   Date: 2009/11/15(日) 08:11   No:42065     
Title: Re:ビット単位のシフト演算    
>>何で下8ビットを取り出すってわかるんでしょうか?
>>何か定義に基づいてるのですか?
16進数や、2進数にするとどのようなビットの並びになるか、等は分かりますか?

もし分からなければ、解説しているサイトなどもありますので、見てみるといいかもしれません。
16進数、2進数なんかで検索すると 色々と出てきます。
------------------------------------------------------
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html
http://www.geocities.jp/cwqnx949/xshinsuu/
------------------------------------------------------


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

Name: pp  ..ぴよぴよ(76ポイント)   Date: 2009/11/15(日) 11:38   No:42082     
Title: Re:ビット単位のシフト演算    
&0xffをint *p=&a;などの&aのようなアドレス参照を意味する&と勘違いされていませんか?
data1=(all_data>>8)&0xff;は(all_data>>8)の計算結果と0xff(10進数でいうところの255)を
&演算(AND演算)してその結果をdata1に代入するという式です
この式にある&は+や*と同じ左辺と右辺を使って処理をする演算子でアドレス参照を意味する&ではありません


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



Name: kerotan0820  ..上級者(15,885ポイント)   Date: 2009/11/15(日) 08:40   No:42067       
Title: 単体で実行可能な実行ファイルにする方法    
たびたび質問をして申し訳ありません


VC++で作成したプログラムを


Ctrl+F7 でコンパイルし、作成した実行ファイルがデバッグフォルダ内にあるのですが、それを実行し、数値などを入力して実行をしようとするとウィンドウが閉じます


どうすればウィンドウの表示を維持できるのですか?


あと、ウィンドウをコマンドプロントでなくWindowsの普通のウィンドウで立ち上げることは可能なのでしょうか


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


Name: Mist  ..比類無きプログラマー(71,212ポイント)   Date: 2009/11/15(日) 09:20   No:42070     
Title: Re:単体で実行可能な実行ファイルにする方法    
> どうすればウィンドウの表示を維持できるのですか?

方法1:メニューから「デバッグ」→「デバッグなしで開始」を選択する。
方法2:プログラムの最後にgetcharを入れてキー入力されないと終わらないようにする

> あと、ウィンドウをコマンドプロントでなくWindowsの普通のウィンドウで立ち上げることは可能なのでしょうか

コンソールプログラムというのはコマンドプロンプトで動くプログラムなので無理です。


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

Name: kerotan0820  ..上級者(16,019ポイント)   Date: 2009/11/15(日) 09:26   No:42071     
Title: Re:単体で実行可能な実行ファイルにする方法    
■Mist様
説明不足で申し訳ありません
自分で見ることは出来るのですが、この作成したファイルをブログにて配布したいのですが、exeファイルを実行しても実行後閉じてしまいます
このプログラムは入力したテストの合計点、平均などを求めるプログラムなのですが、入力を求めるところまでは可能なのですが、入力後Enterを押すとウィンドウが閉じてしまいます;


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

Name: Mist  ..比類無きプログラマー(71,293ポイント)   Date: 2009/11/15(日) 09:51   No:42072     
Title: Re:単体で実行可能な実行ファイルにする方法    
だから、コンソールプログラムをexeから直接実行した場合、終了と同時にコマンドプロンプトが閉じられるのでそうなるものなのです。
方法2ように、結果を見終わるまでプログラムが終わらないようにするしかありません。


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

Name: kerotan0820  ..上級者(16,317ポイント)   Date: 2009/11/15(日) 10:23   No:42074     
Title: Re:単体で実行可能な実行ファイルにする方法    
■Mist様
getcharの使い方を調べてみたのですが、いまいちわかりません;
以下のプログラムに組み込みたいのですがその場合どうすればよいのでしょうか

#include <stdio.h>
int main(void){
int kokugo,sugaku,rika,shakai,eigo,gijutsu,kateika,bijutsu,ongaku,gikagoukei,kyouka5,kyouka9,kyouka3;
double a,b;
printf("各教科の点数を入力してください♪)\n");
printf("国語:"); scanf("%d" ,&kokugo);
printf("数学:"); scanf("%d" ,&sugaku);
printf("理科:"); scanf("%d" ,&rika);
printf("社会:"); scanf("%d" ,&shakai);
printf("英語:"); scanf("%d" ,&eigo);
printf("技術:"); scanf("%d" ,&gijutsu);
printf("家庭科:"); scanf("%d" ,&kateika);
printf("美術:"); scanf("%d" ,&bijutsu);
printf("音楽:"); scanf("%d" ,&ongaku);
printf("__________________\n");
gikagoukei=gijutsu+kateika;
kyouka9=kokugo+sugaku+rika+shakai+eigo+gikagoukei+bijutsu+ongaku;
kyouka5=kokugo+sugaku+rika+shakai+eigo;
kyouka3=kokugo+sugaku+eigo;
a=(double)kyouka9/9;
b=(double)kyouka5/5;
printf(" ≪結果≫\n");
printf("■技家合計■\n");
printf("技家合計:%d\n\n" ,gikagoukei);
printf("■3,5,9教科合計■\n");
printf("3教科合計:%d\n" ,kyouka3);
printf("5教科合計:%d\n" ,kyouka5);
printf("9教科合計:%d\n\n" ,kyouka9);
printf("■5,9教科平均■\n");
printf("5教科平均:%f\n" ,b);
printf("9教科平均:%f\n" ,a);
return 0;
int getchar(void);
}


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

Name: non  ..熟練のプログラマー(69,571ポイント)   Date: 2009/11/15(日) 10:29   No:42075     
Title: Re:単体で実行可能な実行ファイルにする方法    
ただ単に
getchar();
とだけ、書いてみて。


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

Name: non  ..熟練のプログラマー(69,582ポイント)   Date: 2009/11/15(日) 10:29   No:42076     
Title: Re:単体で実行可能な実行ファイルにする方法    
return()の前に。


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

Name: kerotan0820  ..上級者(16,440ポイント)   Date: 2009/11/15(日) 10:32   No:42077     
Title: Re:単体で実行可能な実行ファイルにする方法    
■non様
追加してコンパイルし、Debugフォルダ内の実行ファイルで試しましたが閉じてしまいます;

ちなみに追加したのはこんな感じです(下のほうだけ)

printf("■5,9教科平均■\n");
printf("5教科平均:%f\n" ,b);
printf("9教科平均:%f\n" ,a);
getchar();
return 0;
}



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

Name: バグ  ..ハッカー(174,064ポイント)   Date: 2009/11/15(日) 10:41   No:42078     
Title: Re:単体で実行可能な実行ファイルにする方法    
多分、scanf関数を使用した際に入力された改行コードがバッファに残っていて、getchar関数がそれを取得してしまっているのではないでしょうか?
とりあえず、getcharではなく、scanfで空読みさせればいいのでは?


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

Name: kerotan0820  ..上級者(16,487ポイント)   Date: 2009/11/15(日) 10:51   No:42079 解決!     
Title: Re:単体で実行可能な実行ファイルにする方法    
■バグ様
なるほど!そのような手もありましたね^^
無事成功しました♪
本当にたすかりました。ありがとうございました


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



Name: asdfg  ..ぴよぴよ(285ポイント)   Date: 2009/11/14(土) 01:55   No:41945       
Title: 初歩的な質問ですが、お願いします。    
最大公約数を求める問題なのですが、よくわからないところがあります。

#include <stdio.h>

int main(void) {
int n1, n2, i, gcd = 1;

puts("整数2つ入力");
printf("1つ目:"); scanf("%d", &n1);
printf("2つ目:"); scanf("%d", &n2);

i = 1;

while (i <= n1 && i <= n2) {
if (n1 % i == 0 && n2 % i == 0) {
gcd *= i;
n1 /= i;
n2 /= i;
i = ●;
} else {
i++;
}
}
printf("gcd = %d\n", gcd);

return 0;
}

というプログラムで、●に適切な"数値"を入れよという問題なんですが、何をいれればよいのでしょうか。
i+1はだめで、数値じゃないとだめらしいです。

もともとの問題は何個か穴埋めの問題があって、ここの部分以外は解けました。

よろしくお願いします。



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


Name: ぽこ  ..かけだし(2,393ポイント)   Date: 2009/11/14(土) 02:30   No:41947     
Title: Re:初歩的な質問ですが、お願いします。    
もともとの問題文の穴はここだけですか?
while文の前のi = 1;も穴じゃありませんでした?


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

Name: asdfg  ..ぴよぴよ(387ポイント)   Date: 2009/11/14(土) 02:41   No:41948     
Title: Re:初歩的な質問ですが、お願いします。    
そうです。穴でした。
この●以外の部分の答えはあり、自分の解答と同じになったので、
●の部分以外の穴は埋めておきました。

●の部分に入る数値はありますか?
ここに数値を入れると、最大公約数は求められないと思うのですが・・・
ミス問でしょうか?


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

Name: ぽこ  ..かけだし(2,235ポイント)   Date: 2009/11/14(土) 03:43   No:41950     
Title: Re:初歩的な質問ですが、お願いします。    
いえ、だとすればi=1も間違っています。
1でもプログラムの動作としては問題ないのですが、
考え方が間違っています。

これってwhile文で素因数分解やっているんですよ。
素因数分解を行うときに、機械的に解くにはどうすればいいか
考えればおのずと答えは見えてくると思います。

ためしにn1=8、n2=12辺りで紙の上で動作を追っていけば答えはすぐに
見つかりますよ。


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

Name: non  ..熟練のプログラマー(69,369ポイント)   Date: 2009/11/14(土) 08:47   No:41954     
Title: Re:初歩的な質問ですが、お願いします。    
そうですねぇ。答えがわからないですね。
i=2で動くには動くのですが、ない方がいいですね。


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

Name: ぽこ  ..かけだし(2,267ポイント)   Date: 2009/11/14(土) 13:48   No:41966     
Title: Re:初歩的な質問ですが、お願いします。    
> そうですねぇ。答えがわからないですね。
> i=2で動くには動くのですが、ない方がいいですね。
>

ああ、互いに素の場合を失念してました。
i=1で良いです。すみません。


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

Name: asdfg  ..ぴよぴよ(541ポイント)   Date: 2009/11/14(土) 21:24   No:42015     
Title: Re:初歩的な質問ですが、お願いします。    
回答有難うございます。

確かに●に入れる数値は2ですね。

これが素因数分解のプログラムということが理解できていませんでした。

あと、while文の前のi=1;の部分は、i=2;のほうがいいですね。

もともとの問題はこうでした。一応載せておきます。(●は適切な語句、★は適切な数値)

#include <stdio.h>

int main(void) {
int n1, n2, i, gcd = 1;

puts("整数2つ入力");
printf("1つ目:"); scanf("●", ●n1);
printf("2つ目:"); scanf("●", ●n2);

i = ★;

while (i <= n1 && i <= n2) {
if (n1 % i == 0 ● n2 % i == 0) {
gcd *= i;
n1 /= i;
n2 /= i;
i = ★;
} else {
●;
}
}
printf("gcd = %d\n", gcd);

return 0;
}


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

Name: non  ..熟練のプログラマー(69,495ポイント)   Date: 2009/11/15(日) 08:56   No:42068     
Title: Re:初歩的な質問ですが、お願いします。    
後ろのi = ★;
は、先生のミスか、わざとでしょう。


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

Name: asdfg   Date: 2009/11/26(木) 22:03   No:419451259240593 解決!     
Title: Re:初歩的な質問ですが、お願いします。    
解決し忘れてました。ありがとうございました。



Name: kerotan0820  ..上級者(15,341ポイント)   Date: 2009/11/15(日) 05:47   No:42062       
Title: 無題    
今度ある期末テストにむけて
9教科(国語、数学、理科、社会、英語、技家、音楽、美術)合計と平均
5教科(国語、数学、理科、社会、英語)の合計と平均
3教科(国語、数学、英語)の合計

これを表示するプログラムを組もうと思い、前回5教科の合計を出すプログラムを組んだことがあったのでそれを改造してプログラムを組みました。
5教科の合計と平均を求めるプログラムを組んだ際のものはこれです


#include<stdio.h>
int main(void){
int a,b,c,d,e,f,g;
int k=5;
double h;
printf("国語,数学,理科,社会,英語の点数を改行して入力し,Enterを押してください\n");
scanf("%d" ,&a);
scanf("%d" ,&b);
scanf("%d" ,&c);
scanf("%d" ,&d);
scanf("%d" ,&e);
f=a+b+c+d+e;
h=(double)f/k;
printf("合計:%d\n" ,f);
printf("平均:%f\n" ,h);
return 0;
}

これはこのサイトで質問しながら組んだものなので、問題なく実行できます。
これをいじって組んだ9教科のやつがこれです


#include<stdio.h>
int main(void){
int kokugo,sugaku,rika,shakai,eigo,gijutsu,kateika,bijutsu,ongaku,gikagoukei,5kyouka,9kyouka,3kyouka,a,b;
int k=5;
double h;
printf("国語,数学,理科,社会,英語の点数を改行して入力し,Enterを押してください\n");
scanf("%d" ,&kokugo);
scanf("%d" ,&sugaku);
scanf("%d" ,&rika);
scanf("%d" ,&shakai);
scanf("%d" ,&eigo);
scanf("%d" ,&gijutsu);
scanf("%d" ,&kateika);
scanf("%d" ,&bijutsu);
scanf("%d" ,&ongaku);

gikagoukei=gijutsu+kateika;
9kyouka=kokugo+sugaku+rika+shakai+eigo+gikagoukei+bijutsu+ongaku;
5kyouka=kokugo+sugaku+rika+shakai+eigo;
3kyouka=kokugo+sugaku+eigo;
a=(double)9kyouka/k;
b=(double)5kyouka/k;


printf("技家合計:%d\n" ,gikagoukei);

printf("3教科合計:%d\n" ,3kyouka);
printf("5教科合計:%d\n" ,5kyouka);
printf("9教科合計:%d\n" ,9kyouka);

printf("5教科平均:%f\n" ,b);
printf("9教科平均:%d\n" ,a);
return 0;
}


普通にエラーが出ます

エラーメッセージをみていろいろ試したのですがどうしてもエラーが起きます…;
ご教授お願いします


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


Name: kerotan0820  ..上級者(15,709ポイント)   Date: 2009/11/15(日) 05:55   No:42063     
Title: Re:無題    
プログラムにいろいろとミスや修正したい点があったので
修正しました

こちらを参考に質問に答えていただければ幸いです


#include<stdio.h>
int main(void){
int kokugo,sugaku,rika,shakai,eigo,gijutsu,kateika,bijutsu,ongaku,gikagoukei,5kyouka,9kyouka,3kyouka;
int k=5;
double a,b;
printf("各教科の点数を入力し、Enterを押してください\n");
printf("国語:\n"); scanf("%d" ,&kokugo);
printf("数学:\n"); scanf("%d" ,&sugaku);
printf("理科:\n"); scanf("%d" ,&rika);
printf("社会:\n"); scanf("%d" ,&shakai);
printf("英語:\n"); scanf("%d" ,&eigo);
printf("技術:\n"); scanf("%d" ,&gijutsu);
printf("家庭科:\n"); scanf("%d" ,&kateika);
printf("美術:\n"); scanf("%d" ,&bijutsu);
printf("音楽:\n"); scanf("%d" ,&ongaku);

gikagoukei=gijutsu+kateika;
9kyouka=kokugo+sugaku+rika+shakai+eigo+gikagoukei+bijutsu+ongaku;
5kyouka=kokugo+sugaku+rika+shakai+eigo;
3kyouka=kokugo+sugaku+eigo;
a=(double)9kyouka/k;
b=(double)5kyouka/k;


printf("技家合計:%d\n" ,gikagoukei);

printf("3教科合計:%d\n" ,3kyouka);
printf("5教科合計:%d\n" ,5kyouka);
printf("9教科合計:%d\n" ,9kyouka);

printf("5教科平均:%f\n" ,b);
printf("9教科平均:%d\n" ,a);
return 0;
}




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

Name: conio [URL]  ..比類無きプログラマー(75,452ポイント)   Date: 2009/11/15(日) 07:42   No:42064     
Title: Re:無題    
変数は、先頭に数字があってはいけません。
--------------------------
5kyouka,9kyouka,3kyouka
--------------------------
これらの変数を、先頭に数字が来ないような名前に変更してください。

----------------------
a=(double)9kyouka/k;
b=(double)5kyouka/k;
----------------------
あと、kの値は5ですよね?
9教科の平均は9で割らないといけません。

ここは変数など使わずに
----------------------
a=(double)9kyouka/9;
b=(double)5kyouka/5;
----------------------
としてみてはどうでしょう?
(変数名をそのままにしてますが、適宜"kyouka9"のような変数に変更してください)

あと、最後の平均を出すところが、一方が%dになっています。
(恐らく記述ミス)
-------------------------------
printf("5教科平均:%f\n" ,b);
printf("9教科平均:%d\n" ,a);
-------------------------------


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

Name: kerotan0820  ..上級者(15,686ポイント)   Date: 2009/11/15(日) 08:12   No:42066 解決!     
Title: Re:無題    
■conio様
回答ありがとうございました
無事成功しました^^


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



Name: C-man [URL]  ..ぴよぴよ(37ポイント)   Date: 2009/11/03(火) 20:53   No:41327       
Title: C言語サイトの最高峰となるには    
はじめまして。
ここのC言語何でも質問掲示板は本当にすごいですよね。
管理人様のことを尊敬させていただく日々です。

さて、
弊も及ばずながらC言語無双というサイトを立ち上げました。
技術レベルはともかく、初心者の方々に分かりやすいサイトとして
日々更新を続けています。

もし、皆様に意見をいただけるのなら、
「よりよいものにするためにはどうすればよいか」
についてご意見を頂戴いたしたく存じます。


ご多忙の折に申し訳ございませんが宜しくお願い申し上げます。

YAHOO、GOOGLE殿等で
C言語無双
と検索いただけると幸いです。



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


Name: ひよこ  ..熟練のプログラマー(61,524ポイント)   Date: 2009/11/03(火) 21:45   No:41330     
Title: Re:C言語サイトの最高峰となるには    
ページ見てきましたが、すごいですね、C言語がほとんどできない私でも、
わかっていたこともわかりやすく書いてありました。勉強させていただきます。
しかし、自分的には、
(ポインタ演算)ここでは悪でしかないと判断し、これ以上は説明しない。
と、みると知りたくなるので詳しく書いてほしかったです。


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

Name: Mist  ..比類無きプログラマー(70,223ポイント)   Date: 2009/11/03(火) 22:35   No:41332     
Title: Re:C言語サイトの最高峰となるには    
ざっとですが全ページ見させていただきました。
初心者向けとしては丁寧なつくりでよいと思います。

ひとつ気になるところがあったので一応書いておきます。
「構造体のメモリ配置」のメモリ配置で「隙間なく連続してエリアは確保される。」と書いてますけど、それは例に示した構造体が、たまたま筆者の環境でパティングの発生しない構造体であったからであって、読み手に必ず連続しているものだと思わせる書き方は誤解の原因になりそうです。
メモリ上にどう配置されるかまで触れるなら、パディングとかアライメントについても触れるべきだと思いますしあくまで初心者向けだとするなら、メモリ上の配置まで説明しないほうがよいのではないでしょうか。
初心者レベルというのをどう定義するかにもよりますが、構造体の配列がメモリ上でどう並んでいるかなんて初心者レベルには関係ないでしょうし、知らなくて困ることもないと思いますよ。

あと、細かい部分の説明が特定環境に依存しているなと思うところもありますが、一般に広まっているWindows上でプログラミングする分には間違いではないから問題ないのかな。


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

Name: たいちう  ..プログラマー(36,292ポイント)   Date: 2009/11/03(火) 22:56   No:41333     
Title: Re:C言語サイトの最高峰となるには    
内容の話ではないんだけど、サイトにC-manさんへの質問の手段があった方が良いと思う。
メールアドレスを載せるなり、質問フォームを作るなり、掲示板を用意するなり。

サイトを見てくれた人がどう感じたかを知りたいならば、この掲示板に質問するより、
自分のサイトで質問を受け付けた方が直接的でしょ?
フィードバックを大事にしましょう、ていうか、
フィードバックを受けやすいようにしましょう。

spamの嵐になるリスクはあるけど、期待できるメリットの方が大きいのではないかと。
既にspamに懲りているなら別かもしれませんが。


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

Name: たかぎ [URL]  ..ハッカー(114,595ポイント)   Date: 2009/11/04(水) 00:09   No:41339     
Title: Re:C言語サイトの最高峰となるには    
この手のサイトは応援したいので、あえて辛口で書きます。

最初、Borland C++ Compilerに特化した解説かと思ったのですが、超初級編を読まないで先に進むことを推奨しているのであれば、そうではなさそうです。
それであれば、Borland C++ Compilerでしか通用しないような解説は問題があるのではないでしょうか?
もちろん、移植性の話を最初からすると非常に難しくなるので、Windowsの32ビット環境を仮定して解説することは間違っていません。ですので、入門編の最初にでもそのことを断っておくのがよいかと思います。

その意味では、例えば、汎整数型の表現範囲を決め打ちにするのはよいと思います。ただ、解説が中途半端なために誤解を招く表現になっています。具体的には、

intのバイト数は処理系に依存し(コンピュータの自然なビット長となるので)、2バイトとなることもある。
この場合は、扱える数値の範囲は上記のshortと同じとなる。

の部分ですが、バイト数が処理系に依存するのはint型だけではなく、char, signed char, unsigned char以外のすべての型がそうです。また、char型の表現範囲も-128〜127とは限りません。解説するなら正確に行うべきですし、それで難しくなりすぎるのなら、いっそ何も触れないほうがよいのではないでしょうか?

汎整数型に関しては、普通はintを使うべきところでshortを使っているところも非常に気になります。shortを使うと、汎整数拡張や既定の実引数拡張等に伴う挙動が、初心者にはかなり理解しにくいのではないでしょうか?

また、頻繁に出てくる void main(void) という表現も、Borland C++ ComiplerやVisual C++の独自仕様で許されるだけで、一般的には間違いですから、入門者向けの解説としては不適切かと思います。

ほかにもいろいろありますが、とりあえずこれぐらいで。


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

Name: conio  ..比類無きプログラマー(71,127ポイント)   Date: 2009/11/04(水) 00:26   No:41342     
Title: Re:C言語サイトの最高峰となるには    
>>「よりよいものにするためにはどうすればよいか」
>>についてご意見を頂戴いたしたく存じます。

解説サイトは「分かりやすい」「内容が豊富」と言ったことも重要なのですが、
一番重要なのは「間違った情報を載せない事」だと思います。

間違った知識、正誤が混ざった中途半端な知識を持つ事が 一番厄介な事ではないかと。


完璧を目指そうとすればするほど、難しくなるとは思いますが
様々な書籍で確認をする、理解を確かなものにしておく、解説に間違った情報が無いか細心の注意を払う
などの対処が必要なのではないでしょうか。
「1教えるなら、10知っておかないと駄目」、というやつです)


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

Name: array [URL]  ..熟練のプログラマー(58,793ポイント)   Date: 2009/11/04(水) 00:52   No:41343     
Title: Re:C言語サイトの最高峰となるには    
はじめまして

聞き覚えのあるサイトだなと思ったら、数ヶ月前に利用させてもらったこと
がありました。

ひよこさんと同意見で新たに覚える点が多々あり良いサイトであったと認識しています。

サイトに対してツッコミ大歓迎みたいなので1つ気になった点を・・・


私としては、初めてのプログラミングは「Hello World」が良いと思うんですよ。
出力文字が「Hello World」でなかったとしても、初心者に対していきなり
変数を使ってしまうと、理解する内容が無駄に増えるのではないかと思います。

初心者に対しては、プログラムのprintf()で文字が表示された。という一点を
理解してもらうだけで良いのではないでしょうか。

・・・・ものすごい細かい点で申し訳ないです。


あ、多分、初心者さんが最初に書くことになるであろう
「4.開発環境(コンパイラ)の入手」
についての意見です。



ついでに言えば、「 5.一般的に「変数」とは」のソースも本当に意味がないので
せめて表示して、目で確認できるようにしてあげれば親切なのではないでしょうか。


サイト運営大変でしょうが、頑張ってください。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,080,609ポイント)   Date: 2009/11/04(水) 08:19   No:41351     
Title: Re:C言語サイトの最高峰となるには    
おぉ、素晴らしいサイトですね。
最高峰というのは、アクセス数としての最高峰なのでしょうか?それともわかりやすいサイトとしての最高峰なのでしょうか?

それによって話も変わるとは思いますが、その両方について私の意見を書いてみます。

この手のC言語の入門サイトは「C言語 入門」「C言語 解説」などの検索キーワードで調べる人が多いと思いますが、
トップページにこのキーワードが見当たりません。
キーワードにひっかけたいなら、ひっかけたいキーワードをページの題名にしたり、ページの最初の段階で「太字」で書くなどするといいと思います。
メインの名前はC言語無双さんでいいと思いますが、サブタイトルのようにC言語、入門、解説、これらのキーワードを入れてみてはいかがでしょう?

「C言語 入門」でぐぐって一番最初に来るサイトをいつも私は読んでいましたが、そこと構成が似ているので、
非常に読みやすそうな印象を受けました。でも、入門者がいつも困るのは
「似たようなサイトがたくさんありすぎる。どこのサイトを読んだらいいの?」
ということだと思います。
情報が沢山あるなら、いいことじゃないかと思うと思うのですが、
入門者は情報がありすぎるより、「これ」と決められている方が読みやすいのだと思います。

ですので、うちのサイトが一番いいんだという何か売り込みがあったらいいんじゃないかと思いました。
C言語の解説サイトは山のようにあると思うので、その中で一番になるのは、個性がないと難しいと思うんですよ。
もちろんわかりやすく解説してあることが一番でしょうけど、付加価値が必要そうです。

あと、初心者は自分でコンパイルすることなく、ザーっと読んで行ってわかった気になることが多いと思います。
しかし、読み終わったとき「あれ、どうやればいいんだ?」みたいになると。
そこで、コピペで動くサンプルプログラムを全ての章に用意してはいかがでしょうか。
長いプログラムコードがあると敬遠してしまいがちだと思うので、あえて表示せず、リンク先で紹介するのもありかと。

あと、ページの最後に2行くらいでそのページのまとめを書くといいかもしれません。
一度読んだ人が、しばらくしてまた訪れて、要点だけ読んで行ってもだいたい思い出せたという感じが理想ではないかと思います。


応援しています。サイト運営頑張ってください☆


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

Name: たかぎ [URL]  ..ハッカー(114,950ポイント)   Date: 2009/11/04(水) 12:13   No:41373     
Title: Re:C言語サイトの最高峰となるには    
よく見ると突っ込みどころ満載のようです。
本気で最高峰を目指すのであれば全面協力しますが、嫌になるほどの指摘事項に対応することになるかと思います。
この掲示板に書き込んでいくべきかどうかも迷うところです。
他の人の意見も聞きたいところなので、公開の場で作業したほうが良いと思いますが、作業性を考えると、いったんWikiか何かにコンテンツを写してそこで作業したいぐらいです。
どうしますか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,081,669ポイント)   Date: 2009/11/04(水) 19:32   No:41412     
Title: Re:C言語サイトの最高峰となるには    
たかぎさんに監督してもらうと何も書けなくなってしまいそうだ・・(^^;
とりあえずたかぎさんのサイトを隈なく読むことから始め・・・ってきじねこさんの新着情報に書いてある(^^;

たかぎさんのHPの[迷信]シリーズはためになるのでよく重宝させて頂いています。

>C-manさん

↑こういう深い記述を見てそれも理解した上で説明するとなお良い解説が出来るのではないでしょうか?
conioさんが仰るように、1教えるなら10の知識が必要ですものね。
1教えてるのに解説者が0.5しかないうちのサイトはどうなんだという突っ込みはさておき。

もし最高峰という言葉がアクセス面であればgoogleランクを上げるのも手だと思います。
googleランクは被リンク状態から決定されるようなので、
いろんなサイトで紹介されるとよいと思います。

技術的な記述面でいえば・・
たかぎさんから「文句無し」の言葉をもらったらその日から最高峰だと思います(笑


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

Name: たかぎ [URL]  ..ハッカー(115,371ポイント)   Date: 2009/11/04(水) 19:54   No:41416     
Title: Re:C言語サイトの最高峰となるには    
> たかぎさんに監督してもらうと何も書けなくなってしまいそうだ・・(^^;

そんなことはないでしょう。
逆に間違っても誰かが訂正してくれることがわかっていれば、安心して書けると思います。それに、私も間違うこともありますし、知らないこともあります。

「C/C++迷信集」は、誤解している人も多いようですが、
http://www.kijineko.co.jp/tech/superstitions
にも書いているように、暇つぶしか気分転換にでも読んでもらうとよい「読み物」にすぎません。
何しろ、一生のうちに一度も遭遇しないような処理系への移植性の話とかも出てくるわけで、絶対知っていないといけないような話ではありません。

入門サイトの場合、面倒な話をいかに回避するかが重要なポイントになります。ですので、中途半端な解説ならしないほうがよいのです。
例えば、「ヌル指令」http://hissatucgengo2.web.fc2.com/Syokyuu62.html のページは明らかに間違っていますが、こんなことには触れないほうがよいと思います。

> もし最高峰という言葉がアクセス面であれば

これも結局は内容がよければ自然にアクセスも増えるので、目指すべき方向はそれほど違いません。
初期のアクセスを稼ぐためにSEOを行うのであれば、まずはフレームをやめるとか、タイトルバーやmetaタグの書き方を工夫するとか、内部リンクを強化するとか、やるべきことはあるにはありますが...。


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

Name: sizuma [URL]  ..上級者(16,549ポイント)   Date: 2009/11/04(水) 21:56   No:41423     
Title: Re:C言語サイトの最高峰となるには    
>内容の話ではないんだけど、サイトにC-manさんへの質問の手段があった方が良いと思う。
僕もそう思いますね。
ここで書き込みする人は、文法は分かってる人がほとんどでしょうから、入門者がどこでつまづくのかは分からないと思うんで。(もちろんところ穴があるでしょうけど・・・・)
各ページの下にラジオボタンとかテキストエリアのフォームから分からなかったら送信してもらう、とかでしょうか。もちろん画面は多少見にくくなるんで一短はありますけどね。

個人的には、フレームで分割してる右の画面で文字を一文字分ぐらいインデントしてほしいかな、と思いました。
見やすい構成にはなってると思います。

音声の話。
僕の環境だと、片方からしか音声が流れなくて、ヘッドホンなんですごい気持ち悪い感じになります。
なんかツールをつかって左右のバランスを変えたほうがいいと。
確かサウンドエンジンは左右のバランスが変えられたと思うんですが。
ICレコーダーでしょうか?
音質はこだわりだすとキリがないでしょうけど、やはり聞いてみて聞き苦しくない音声を作るのはなかなか難しいですよね。


>たかぎさんのHPの[迷信]シリーズはためになるのでよく重宝させて頂いています
同じく。勉強不足で全部わかるわけではないですが、コラムってやっぱり面白いです。


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

Name: C-man  ..ぴよぴよ(148ポイント)   Date: 2009/11/10(火) 07:22   No:41639     
Title: 全ての皆様へ    
ご多忙の折に建設的なご意見、誠にありがとうございます。
一個一個のご指摘を精読し、一個一個直してまいります。

弊の目指す"最高峰"とは、アクセス数ではなく、「分かりやすく有用な」という意味での最高峰です。


皆さんのご指摘の、弊への意見を述べる場所を設けたほうが良いという事に関しまして申しますと、そのうちに設置をさせていただく予定です。

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


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

Name: たかぎ [URL]  ..ハッカー(116,254ポイント)   Date: 2009/11/10(火) 17:32   No:41660     
Title: Re:全ての皆様へ    
弊社サイトでも書きましたが、こちらではもう少し詳しくフォローします。
ちょっときつい言い方になりますがお許しください。

何とか協力してよいサイトにしていただこうと考えていたのですが、現状では困難だと判断しました。

- 直接の連絡手段なし
- 掲示板のレスに1週間かかる

という状況を踏まえてのことです。
さらにいえば、レスの内容も具体性に欠け、社交辞令的なあいさつに留まっている感があります。
これでは、下手をすれば何年もかかってしまいます。

お忙しい状況は察しますが、かなり困難かと思います。


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

Name: C-man  ..ぴよぴよ(482ポイント)   Date: 2009/11/10(火) 23:10   No:41684     
Title: 高木様    
ご指摘、その通りかと存じます。
C言語無双ではございませんが、
弊は1000万アクセスのサイトを運営させていただいております。
そのサイトを立ち上げたのが3年くらい前だったでしょうか。

はじめ、インターネットのことをあまり知らなかった弊は、
自サイトに掲示板を貼ったり、メアドを貼ったりしていました。

人気が増すにつれ、「アンチ」の方も増えてまいりました。
ここでは書けないような誹謗中傷を毎日のように受けました。

よって、C言語無双のほうには掲示板を作りませんでした。
メールアドレスも載せませんでした。

高木様のような凄腕の方にご指摘がいただけ、
とても光栄に思い、ただただ御礼を申し上げたかった次第です。

社交辞令と思われることもございましょうが、
これが本当の弊の感謝の意です。

弊は何も望みません。
本掲示板にてご指摘いただけたことで十分です。

数年後にでもC言語無双を見ていただき、
弊サイトが最高峰になっているかどうか、
あるいは消滅しているか、、、
酒のさかなにでもしていただければ幸いです。
(無論、最高峰になりたいという意思は変わりませんが)


感謝いたしております。
本当にありがとうございました。







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

Name: 通りすがり  ..上級者(17,814ポイント)   Date: 2009/11/10(火) 23:20   No:41686     
Title: Re:高木様    
その1000万アクセスのサイトはどんなサイトなんですか?

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

Name: C−man  ..ぴよぴよ(22ポイント)   Date: 2009/11/10(火) 23:32   No:41688     
Title: Re:高木様    
>通りすがりさま

それだけはご勘弁下さい。
C言語無双は弊社の後輩たちも知っており、
本掲示板も見ております。



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

Name: C-man  ..ぴよぴよ(591ポイント)   Date: 2009/11/12(木) 08:22   No:41769     
Title: 皆様    
本件、解決いたしました。
ありがとうございました。

数ヵ月後、ご指摘頂いたことを考慮し、
C言語サイトの最高峰となり
本サイト管理人様、またアドバイス頂いた方に
結果のご報告をしにまいります。

弊サイトが最高峰となるか、
消滅するか、
いやいや最高峰となり、皆様に恩返しをしてまいります!!

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



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

Name: C-man  ..ぴよぴよ(601ポイント)   Date: 2009/11/12(木) 08:23   No:41770 解決!     
Title: 解決    
解決!!


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

Name: conio [URL]  ..比類無きプログラマー(73,884ポイント)   Date: 2009/11/12(木) 09:27   No:41776     
Title: Re:解決    
>>それだけはご勘弁下さい。
>>C言語無双は弊社の後輩たちも知っており、
>>本掲示板も見ております。

何だか良く分かりませんね。
何故 ご勘弁しなければならないのでしょうか?

1000万もアクセスがあるんだったら別に隠す必要も無いと思いますが。

「知名度が高くなると荒れる」ので黙秘、と言うことならば、
初めから「1000万のアクセスのサイトが・・・」何て言わない方が良かったと思いますし、
別に荒れたとしても一時的にコメント欄を閉鎖、アクセス拒否などで対応できるでしょう。


それと最高峰を目指すのであれば、既に「間違いが見受けられる」と指摘されているので、
その指摘・アドバイスを聞いたほうが良いのではないのでしょうか。
滅多な事をしなければ「毎日のように誹謗中傷」なんて受けないと思いますよ。

プログラム関連で、非難を受けるとしたら、
「間違った情報を載せておき、間違いを指摘されても適切な対応を取らない」
でしょうかね。

【間違った情報を掲載し、批判が出た例】
http://builder.japan.zdnet.com/sp/c-programming-language/story/0%2C3800083430%2C20370255%2C00.htm


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

Name: たかぎ [URL]  ..ハッカー(116,800ポイント)   Date: 2009/11/12(木) 10:46   No:41786     
Title: Re:解決    
> 1000万もアクセスがあるんだったら別に隠す必要も無いと思いますが。

実際のところがどうなのかは分かりませんが、変に隠すと、違法性が高いか、合法でもお天道様に顔向けできないようなサイトではないかとか、そもそも「1000万もアクセスがあったサイト」など存在しないのではないか、といった邪推をされてもしかたありませんね。

> 初めから「1000万のアクセスのサイトが・・・」何て言わない方が良かったと思いますし、

私もそう思います。
客観的に見れば、「C言語無双」に権威付けを行おうとして失敗したと考えざるを得ません。

> それと最高峰を目指すのであれば、既に「間違いが見受けられる」と指摘されているので、
> その指摘・アドバイスを聞いたほうが良いのではないのでしょうか。

これも同意です。
もっというなら、単純なケアレスミスなどであればともかく、明らかに理解できていないことを指摘されているわけですから、ある程度は、指摘内容に対する質問や反論があって当然ではないかと思います。
そうしたやりとりを何度か繰り返した上で結論を導き、それを「C言語無双」に反映しなければ、なかなか収束しないと思います。

現状では、指摘内容を十分に理解しないまま数週間後にサイトを更新し、「そうではない」と指摘されることが十分予想されます。
これでは何年かかっても終わりませんね。


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

Name: conio様he  ..ぴよぴよ(277ポイント)   Date: 2009/11/12(木) 12:33   No:41804     
Title: Re:解決    
>conio様

まず、1000万アクセスのサイトが。。。
といちいち弊サイトで紹介しているのは、
今後のC言語無双の可能性を示しているつもりでした。

自己紹介で、「日々コンピューター関係の仕事をしている」
ということでは、誰もその後見て下さらないと
勝手ながら考えたからです。

1000万アクセスの方のサイトをなぜ公開しないか、、
等は、本掲示板の議論とは外れるので割愛いたします。


「間違った情報を載せておき、間違いを指摘されても適切な対応を取らない」
これは、まさに最低の行為であろうかと思います。
私は間違いであれば直します。
アドバイスは全て聞きます。
それが私の強みですので。

ただ、私の能力的問題もあるのかもしれませんが、
少しずつ直してまいろうと思います。

実に的を射たご意見、ありがとうございました。




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

Name: conio様へ  ..ぴよぴよ(4ポイント)   Date: 2009/11/12(木) 12:34   No:41805     
Title: Re:解決    
conio様へ と書こうとしたところが、
への部分がアルファベットとなってしまいました。
お詫び申し上げます。


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

Name: >たかぎさまへ  ..ぴよぴよ(365ポイント)   Date: 2009/11/12(木) 12:45   No:41806     
Title: Re:解決    
>たかぎ様

>客観的に見れば、「C言語無双」に権威付けを行おうとして失敗したと考えざるを得ません。
まさに、たかぎさまご推察どおりです。

たかぎさまも良くご存知かと思いますが、
サイトを運営していて、一番の苦労は
サイト立ち上げ当初です。

立ち上げ当初にご訪問者が0名だと、
私のような人間ではなかなか筆が進まないというのが
正直なところです。
「意思が弱い」などといわれればそれまでですが、
それが私にとっての現実です。

よって、すこしでもC言語無双はすごくなる可能性を秘めている
ことを、いやらしくなくアピールしたかったのです。
(失敗していますでしょうか)。


裏表なく質問いたします。
たかぎさまが私に対して色々ご指摘下さる理由は、
比較的弊サイトを高く評価いただいているからだ(可能性を見出していただけている)と
勝手に思っているのですが、
その理由をお聞かせいただけませんでしょうか。
(C言語のサイトは星の数ほどあり、私よりももっと間違いばかりを謳っている
サイトも沢山ありえるのでしょうが。)


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

Name: Mist  ..比類無きプログラマー(70,615ポイント)   Date: 2009/11/12(木) 12:49   No:41807     
Title: Re:解決    
あて先を名前にされると誰のレスかわからないからやめてください。

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

Name: Mist  ..比類無きプログラマー(70,637ポイント)   Date: 2009/11/12(木) 12:52   No:41808     
Title: Re:解決    
C-manさんが私の指摘見てどう考えたのかを知りたいですね。
サイトを見直したところ、指摘した部分は注意書きみたいなのが増えていましたが間違った情報はそのまま残っていますし。
修正途中なんですかね?


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

Name: たかぎ [URL]  ..ハッカー(117,430ポイント)   Date: 2009/11/12(木) 13:02   No:41811     
Title: Re:解決    
> よって、すこしでもC言語無双はすごくなる可能性を秘めている
> ことを、いやらしくなくアピールしたかったのです。
> (失敗していますでしょうか)。

不信感を与えている時点で失敗だと思いますが...。
反感を持った人たちのDoS攻撃でアクセスアップしてもうれしくありませんよね。

> たかぎさまが私に対して色々ご指摘下さる理由は、
> 比較的弊サイトを高く評価いただいているからだ(可能性を見出していただけている)と
> 勝手に思っているのですが、
> その理由をお聞かせいただけませんでしょうか。

基本的にこの手のサイトは応援したいと考えています。
また、学校で生徒を指導している身でもありますので、間違った情報を掲載される困るということもあります。

> (C言語のサイトは星の数ほどあり、私よりももっと間違いばかりを謳っている
> サイトも沢山ありえるのでしょうが。)

たくさんありますね。
全部を把握できませんし、把握したものすべてに対して指摘することもできませんが...。
そもそも連絡手段がなければ指摘のしようもありませんし。


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

Name: 匿名  ..上級者(18,499ポイント)   Date: 2009/11/12(木) 13:05   No:41813     
Title: Re:解決    
ここまで読まさせていただきましたけど・・
C-manさんが1000万アクセスという言葉を餌に人を釣ってるようにしか見えませんでした・・


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

Name:  ..ぴよぴよ(174ポイント)   Date: 2009/11/12(木) 17:51   No:41830     
Title: Re:解決    
通りすがりさんは別にリンクをはれとか具体的に述べろとか言ってるわけじゃなく

「どんなサイトなんですか?」

といっているだけなのに、

「それだけはご勘弁を!」

という流れになるのは何故?

通販系のサイトです、とか、ゲーム系のサイトです、とか
特定されて困るのなら、されない何か言い方がいくらでもあると思うのですが。


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

Name: conio  ..比類無きプログラマー(74,245ポイント)   Date: 2009/11/12(木) 19:01   No:41835     
Title: Re:解決    
>>弊は1000万アクセスのサイトを運営させていただいております。
>>そのサイトを立ち上げたのが3年くらい前だったでしょうか。

※HPより
>>数年前に某サイトを開設した。
>>おかげさまで凄まじい反響を頂き、
>>毎日のご訪問者は1500人を超え、累計なんと1000万アクセスに達した。

どうでもいいですが、計算合わないですよね?
------------------------------
365 * 3 * 1500 = 164万2500人
------------------------------

計算をあわせるには
サイトを開設したのが 約 18年前  もしくは、
一日のアクセス数が 約 9132人 である必要があります。

誤差としては少々 大きすぎるでしょうか。


まぁ、そんな事を突っ込んでもしょうがないので、
ともかく、誤った内容が無く分かりやすいサイト目指して頑張って下さい。


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

Name: たかぎ [URL]  ..ハッカー(117,648ポイント)   Date: 2009/11/12(木) 20:24   No:41839     
Title: Re:解決    
> どうでもいいですが、計算合わないですよね?

「アクセス」というのがどんな計算方法なのかによります。
例えば、ページビューなのか、訪問者数なのかによっても異なります。ページビューにしても、ウェブサーバーのログをそのまま引っ張ってくると、スタイルシートや画像などの部品のアクセス数もカウントされているはずです。

> 一日のアクセス数が 約 9132人 である必要があります。

そうはなりません。1日の訪問者数の平均が1500人であっても、同じ人が平均6ページ程度見れば9000ページビューになります。

それ以上に、サイトの開設当初から同程度のトラフィックを稼いでいるとは考えにくいので、最初の数ヶ月はその後の平均より少ないと思います。もちろん、湯水のごとく資金を投入して、広告を打ったのであれば話は別ですが...


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

Name: conio  ..比類無きプログラマー(74,716ポイント)   Date: 2009/11/12(木) 21:23   No:41844     
Title: Re:解決    
確かにそうですね。
アクセスやカウンタと言っても、
更新を連打すれば簡単に増えたり、1日に1カウントしか増えない、など色々ありますね。すいません。

ページごとにカウントしたり、更新すれば簡単にアクセスが増えるタイプのものであれば、
「1000万アクセス」の意味が 少々落ちてしまうので
ちょっと残念かなーとは思いました。


C-manさんへ
>>>客観的に見れば、「C言語無双」に権威付けを行おうとして失敗したと考えざるを得ません。
>>まさに、たかぎさまご推察どおりです。

>>立ち上げ当初にご訪問者が0名だと、
>>私のような人間ではなかなか筆が進まないというのが
>>正直なところです。

>>よって、すこしでもC言語無双はすごくなる可能性を秘めている
>>ことを、いやらしくなくアピールしたかったのです。
>>(失敗していますでしょうか)。

もう既に数百、数千のアクセスがあるのですから、
変に"凄味"を持たせようとしなくてもいいと思いますよ。

それに、「アクセス数」等ではなく、「分かりやすさ等の内容」で最高峰を目指すのですよね?
分かりやすく有用であれば、自然とブランドイメージといいますか 評判などは良くなる・高くなると思いますので、
気にする必要は無いでしょう。

中身がしっかりしていれば自然と"凄味"は出ます。
(このサイトは色んな情報が記載されてて凄い!、等)

逆に、中身がしっかりしていないのに「なんとアクセス●●●万!!」みたいな感じで
表面的にアピールした所で、C言語解説サイトとしての価値や"凄味"は出ないと思います。
(有名無実というやつです)


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

Name: たいちう  ..プログラマー(36,841ポイント)   Date: 2009/11/12(木) 21:33   No:41845     
Title: Re:解決    
そんな集中攻撃するようなことじゃないじゃん。

良いサイトを作ろうという人がいて、
どんなアドバイスをすることができるか、というのが、
このスレッドの趣旨じゃないでしょうか?
少なくとも回答者にとっては。

私はフィードバックを得やすくすることが大切、と書いたけど、
spamというリスクがある事も書きました。
自分にやましい事がなくても、インターネット上に必要以上の
情報を公開しないことは、それほど不思議でもないでしょう。

ましてや、以前別のサイトの管理で懲りているならば、
そのサイトをここに書かない、という判断もあり得ると思うので、
ご勘弁というなら、詮索する必要を感じません。
ご勘弁、に至った理由も不要です。
誹謗中傷やspamで閉じることになったサイトを一杯見てきてるじゃないですか。


最後に本題ですが、フィードバックの重要性と、
誹謗中傷への心配を考えると、メールを受け付けて、
ブログっぽいコーナーで、それを紹介したり返事を書いたりというのは、
どうでしょうか。あるいは承認済みの投稿のみ表示する掲示板とか。

フィードバックを得るためには、自分の意見を必要としていそうだな、
とか、自分の意見を聞いてくれそうだな、と、
サイトを見た人が感じる必要があります。
そんな雰囲気を醸し出してくれるのではないでしょうか。


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

Name: C-man  ..ぴよぴよ(665ポイント)   Date: 2009/11/12(木) 22:39   No:41848     
Title: Mistさまへ    
ここの掲示板では、社交辞令的な記述は返って皆様の反感を買うということが
分かりましたので、
これからは、自分の思ったことを裏表なく書かせていただきます。

>Mist 様へ
No:41332 について。
アライメントの点については、ご指摘の通り注釈をつけさせていただきました。
ただし、初心者がメモリの配置まで勉強する必要がないかと言えば、
私はあると判断するので、このように載せております。
大して難しい内容ではないと思いますので。

尚、
Windows環境での話という注釈をつけようと思います。



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

Name: C-man  ..ぴよぴよ(735ポイント)   Date: 2009/11/12(木) 22:59   No:41851     
Title: 1000万アクセス    
結論として
1000万アクセスのくだりは消しました。
私のサイトにとっては「悪」でしかないようです。



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

Name: Dixq (管理人) [URL]  ..ウィザード(1,081,655ポイント)   Date: 2009/11/12(木) 23:09   No:41852     
Title: Re:Mistさまへ    
ま、まぁまぁ・・^^;

高い目標を目指してHPを作るっていうのは良いことですよねっ♪

私はHPを作り始めた動機は別にあったので、最高峰とかは考えた事はないですが、
作っている間に少なからずそういう気持ちは持ち始めましたし、確かにどうせなら、一番良いものを作りたいと思いますよね。
「C言語」でトップのサイトになるのは無理なので、
せめて「C言語 ゲーム」で検索して出てくる中では一番皆さんが見たいと思ってくれるサイトを作りたいと思ったりしました。

数ある中で自分のサイトを選んでもらうには「戻るボタンを押させない工夫」が必要なんじゃないかな?
と思ってゲームの館は一ページに書いたり(あんなに長くなるとは思ってなかったので今ではわけたくてしょうがないですが^^;)
実行結果を動画で見れるようにしたり、自分が、解説サイトを見た時に「こんなのあったらいいのにな」と
思ったものを色々採用したりしました。

後大事なのはきちんとした文章を書くことでしょうね〜;
国語的に間違ってたり文章が幼稚?というか間違っていたりするとそのサイトそのものの信用が下がりますよね(まさにウチ)
ゲームの館には間違いがてんこ盛りなので、早くなおしたいと思っています^^;

・・ということで、取り留めもないことを書きましたが、
楽しくサイト運営を続けてくださいな〜☆


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

Name: Mist  ..比類無きプログラマー(70,688ポイント)   Date: 2009/11/13(金) 10:14   No:41876     
Title: Re:Mistさまへ    
やっぱ認識が違うなぁ。

> ただし、初心者がメモリの配置まで勉強する必要がないかと言えば、
> 私はあると判断するので、このように載せております。

消す、消さないじゃなくて初心者に誤解を与えるようなは記述は残しといていいの?ってことを言いたいんですが。

> このように、連続してエリアは確保される。
> これは、ただの配列のときと同様だ。

は不要で注釈に書いていることのほうが大事。
こういう書き方だと、読む人には隙間なく連続するのが当たり前、隙間が開くのは例外だと思われる。
でも、実際にはそうではなくて環境や設定によりコンパイラが決めていて、プログラマが何もしなくても「連続してエリアは確保」されるかどうかは保障されていないし、パディングが発生してもコンパイラは何も教えてくれない。
構造体のメンバサイズや並び順を気にしないで書く初心者のほうがパディングは発生しやすいでしょう。

で、上記を踏まえて、その下のmemsetのくだりの構造体の複数メンバをサイズ決めうちで初期化するなんて下の下。
例だとしても最悪、初心者がまねすればバグの元にしかならない。
初心者向けであるからこそ、構造体っていうのは実メモリ上ではメンバのサイズ以上確保される場合があるから、memset等サイズを指定してするような関数を使用する場合は、sizeofを用いて正しいサイズでアクセスするように、ということを教えるべきですよ。

ここでC-manさんのサイトの談義するのも場違いな気もするのでこれで最後にします。


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

Name: C-man  ..ぴよぴよ(818ポイント)   Date: 2009/11/13(金) 12:41   No:41886     
Title: Re:Mistさまへ    
ご指摘、誠にごもっともかと存じます。
異議一切ございません。
ご指摘の点、弊の時間取れ次第修正させていただきます。
多忙の折、指摘いただきありがとうございました!!



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

Name:    ..かけだし(1,233ポイント)   Date: 2009/11/13(金) 15:29   No:41896     
Title: Re:Mistさまへ    
結局1000万云々は削除されるのですね。
名前の横の【URL】のリンクも全て削除してますね。
この掲示板からサイトを見られにくくしたのでしょうか?
そんな対応をしていたら何かやましいことがあったと思われても仕方がないですね。
見られたくないならいっその事「某1000万超えの解説サイトを運営している者ですが」と
コメントも全部ボカしてしまったらどうですか?


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

Name: dic  ..プログラマー(36,973ポイント)   Date: 2009/11/13(金) 16:13   No:41900     
Title: Re:Mistさまへ    
1000万人にも見られてるって
総理大臣級だよ


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

Name: Mist  ..比類無きプログラマー(71,130ポイント)   Date: 2009/11/13(金) 16:45   No:41903     
Title: いいかげん止めましょう    
スレの本来の主旨とは関係ないことでいつまで粘着するんですか。
そんなことしても、この掲示板の評判下げるだけですよ。
そんなこと書く暇あるなら、感想か指摘のひとつも書いてあげたらどうですか。


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

Name: dic  ..プログラマー(36,922ポイント)   Date: 2009/11/13(金) 19:53   No:41921     
Title: 無題    
>Mistさま
もうしわけありません
タイトルのデフォルトがそのまま入力されててチェックしてませんでした
感想は辛口になるのでやめておいてるのです


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

Name: C-man  ..ぴよぴよ(855ポイント)   Date: 2009/11/13(金) 20:29   No:41925     
Title: Re:無題    
遅れましたが、やっと週末が来ましたので、
皆様のサイトに対するご指摘
一つ一つを精読し、回答をさせていただこうと思います。



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

Name: たかぎ [URL]  ..ハッカー(119,760ポイント)   Date: 2009/11/13(金) 20:36   No:41926     
Title: Re:無題    
とりあえずリンクは貼っておいたほうがよいと思いますので...
http://hissatucgengo2.web.fc2.com/

とりあえず,void main(void) と short の濫用だけは早急に何とかしてほしいですね。


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

Name: C-man  ..ぴよぴよ(932ポイント)   Date: 2009/11/14(土) 03:15   No:41949     
Title: Re:無題    
>たかぎ様
まずは、弊が考えてもどう考えてもまずいところを直します。

日々アクセス数とかランキングが気になって、
そればかりを眺めていたので、
ここ3ヶ月くらいは上記のようなことは気にせず、
サイトの内容をひたすら高めていこうと思います。




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

Name: たかぎ [URL]  ..ハッカー(121,309ポイント)   Date: 2009/11/14(土) 21:01   No:42014     
Title: Re:無題    
http://hissatucgengo2.web.fc2.com/Syokyuu62.html
↑の記述は明らかに間違っています。
早めに修正してください。


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

Name: C-man  ..かけだし(1,308ポイント)   Date: 2009/11/14(土) 22:48   No:42024     
Title: Re:無題    
> たかぎ 様
取り急ぎ、ヌル指令の記述を消します。
載せるのならば今一度調べてからということに致します。

ところで、
誠にお恥ずかしいのですが、何が致命的に間違っているのかが分かりません。
もし宜しければ教えていただけないでしょうか。


以下、弊サイトでのヌル指令の記述
-------------------------
ソースコードにおいて下記の(イ)のように意味を持たない#があると、
その行は無視をされる。
(制御命令を持たない#だけの行があるときは、その行は無視される)

例を見よう。

#define  DEBUG 1   /* (ア) */
#  define DEBUG 1   /* (イ) */

(ア)は#の横にdefineという記述(プリプロセッサに対する有効な記述)が
あるので、意味のある記述である。

しかし、
(イ)は#のすぐ右に有効な記述がない。
よって、(イ)の行に書かれていることは無視される。

--
ただ、この使い方は別に推奨しない。
// と書くことで、それより右に書いてある1行がコメントとして扱われるようなコンパイラもある。

コメントはやっぱり王道の/*  */ で囲えばそれでいい。


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

Name: たかぎ [URL]  ..ハッカー(121,593ポイント)   Date: 2009/11/14(土) 22:54   No:42025     
Title: Re:無題    
実際に試してみれば分かりますが...

(ア)と(イ)は同じように機能します。
#は1桁目から始まる必要はありません(前に空白類が入ってもよい)し、defineやifなどは#の直後ではなく、間に空白類がはいってもかまいません。

Null directive(空指令)は、#のあとに書いてもよいのは空白類だけです。


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

Name: C-man  ..かけだし(1,334ポイント)   Date: 2009/11/14(土) 22:58   No:42026     
Title: Re:無題    
>たかぎ様
まことにお恥ずかしい次第です。
ありがとうございました。



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

Name: たかぎ [URL]  ..ハッカー(122,666ポイント)   Date: 2009/11/14(土) 23:58   No:42030     
Title: Re:無題    
週末はお時間がありそうなので、細かい点も指摘しておきます(忘れる前に)。

C言語の構成 vol.2

「半角スペースや、TAB、改行が全て空白文字として扱われる。」とありますが、C規格では、ここでいう半角スペースが「空白文字」です。
空白文字のほか、タブや改行をひっくるめて「空白類文字」と呼んでいます。
ちなみに、空白類文字と注釈(コメント)をあわせて「空白類」と呼びます。

「TABキーを押すと、半角4文字分(又は8文字分)の空白が入る。」とありますが、エディタの設定次第で変わりますね。

---

C言語の構成 vol.5

「なるほど、kekkaはshort型なのだな。」
これは修正漏れですね。kekkaはint型です。

「自作関数など自分で勝手に作ったものを突然使っても
コンパイラは何のことか分からない。」
分からないからエラーにするのではなく、返却値の型がintで、関数原型なしの関数が呼ばれたと判断します。

---

C言語の構成 vol.6

「void main(void){」と「short kekka; 」が残っています。

---

C言語の構成 vol.7

「<>内には標準ヘッダファイルを指定し、」
<>で書くのは「標準ヘッダ」です。標準ヘッダはファイルで実装されているとは限りません。

「(正確に言うと""で囲むと、ソースファイルの置いてあるディレクトリを参照した後、
標準ヘッダファイルが用意されているディレクトリも参照される。」
正確にいうと「処理系定義」です。

「#include "C:\test\Head07.h"」
ヘッダ名に逆斜線を記述した場合の動作は未定義です。

---

定数

「2. 浮動小数点定数
つまり小数点つきの数字(実数)のことだ。」
C規格では、実数というのは「虚数(通常は複素数)」に対しての「実数」です。
したがって、int型なども実数型であると定義されています。

---

変数のデータ型

「 4バイト分のエリアが用意される(32ビット処理系の場合)。」
1バイトは8ビットとは限らないので、移植性の話をするなら正確にすべき。
そうでなければ、使っている処理系を固定して、〜の場合には、としたほうがよいでしょう。

---

演算子(代入、算術)

「これを多重代入という。」
そんな風にいいましたっけ?

---

演算子(代入、算術) 

「+と*の優先順位云々ではなく、しっかりカッコで優先順位を明記するようにしたい。」
先日、小学4年生の娘の参観に行ったとき、これをやっていました。
小学生が使いこなせるような概念なので、括弧を付けるのは冗長なだけでは?

---

演算子(インクリメント、デクリメント演算子)

「プロは「ここでインクリさせるんでしょ」などというが、」
言わないと思います。

「a++;

a=a+1;
と同意である。」
違います。


とりあえずここまで。


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

Name: conio [URL]  ..比類無きプログラマー(75,225ポイント)   Date: 2009/11/15(日) 00:41   No:42038     
Title: Re:無題    
サイトを改めて拝見させて貰いました。

で、第99章についてですが、
----------------------------------------------------
第99章.基本情報処理技術者勉強法
基本情報処理技術者試験 と 応用情報処理技術者試験
----------------------------------------------------
これは、FEとAPですよね?


それぞれ、"処理"という単語が必要ありません。
------------------------------------------------------
基本情報処理技術者試験  ⇒  基本情報技術者試験(FE)
応用情報処理技術者試験  ⇒  応用情報技術者試験(AP)
------------------------------------------------------

プログラムと違って 別に致命的な間違いなどではありませんが、正式名称の方がいいかなと。
(上記2つとその他の試験を纏めて「情報処理技術者試験」と呼称するので、
        「処理」が要るのか、要らないのかが 紛らわしかったりします。)


役に立てるか分かりませんが、他にも何か見つけたら報告しようと思います。
更新頑張ってください。


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

Name: はね  ..中級者(14,570ポイント)   Date: 2009/11/15(日) 01:21   No:42050     
Title: Re:無題    
はじめまして。
サイトを拝見させていただきました。
資格についてなんですが、私個人の意見としては、
基本情報技術者試験よりも、
近年、新しく導入されたITパスポートのほうから
資格を取ることを目標に書かれてみてはいかがでしょうか?
情報処理技術者試験の区分の中でも
スキルレベル1の一番簡単な(そう簡単でもないですが・・)
ITパスポートの資格を習得することによって
自信もつくと思いますので。
正直、初心者がいきなり基本情報はかなり難しいと思います。(自分も苦労しました)
そういう人がいるので独立行政法人情報処理推進機構 情報処理技術者試験センターが
新しく導入した資格です。
まずはこの資格の勉強方法をサイトで教えることをお勧めします。


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

Name: C-man  ..かけだし(1,453ポイント)   Date: 2009/11/15(日) 03:28   No:42058     
Title: Re:無題    
>たかぎ様
ご指摘の点、弊の中で検討をし、何らかの対応をさせていただこうと思います。
今しばらく検討のお時間をいただければと存じます。

>conio様
ご指摘の点、修正致します。
ありがとうございました。

>はね様
ITパスポートですね。
検討をしてみたいと思います。
ありがとうございます。



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



Name: ジャーニー  ..ぴよぴよ(610ポイント)   Date: 2009/11/15(日) 00:25   No:42033       
Title: クラスの相互定義について    
はじめてですがよろしくお願いします。

現在C++でゲームを作っているところなのですが最近までC#を使っていたので勝手が全くわからなくなってしまいました。
わからないところは以下のようになっています。
以下のファイルはヘッダファイルの切り抜きです

class Character
{
private:
Player *player;
public:
};

class Player
{
private:
Player *enemy_player;
std::vector<Character> character;
public:
};


上のプログラムは問題の部分だけを切り抜いたところになっています
Playerクラスはプレイヤ情報を持つクラスで相手のプレイヤ情報のアドレスを持ちます
また自身のもつキャラクタ(不定数となるのでvectorを使っています)の配列を持ちます

Characterクラスはキャラクタ情報を管理します
親となるプレイヤクラスのアドレスを所持します

このときキャラクタクラスはPlayerクラスの宣言前に行っているのでエラーが出てしまいます
またPlayerクラスとキャラクタクラスを逆にすると今度はプレイヤクラスの中のキャラクタクラスのvectorでエラーがでてしまいます
この2つを問題なく宣言するにはどうすればいいでしょうか
あと最近までC#でやってたのでアドレス関係もあっているかわからないです

C++は久々で質問としてちんぷんかんぷんなことを書いているかもしれませんがよろしくお願いします


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


Name: たかぎ [URL]  ..ハッカー(122,690ポイント)   Date: 2009/11/15(日) 00:33   No:42036     
Title: Re:クラスの相互定義について    
Characterのクラス定義の前に、

class Player;

と書いてください。


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

Name: ジャーニー  ..ぴよぴよ(711ポイント)   Date: 2009/11/15(日) 00:48   No:42040     
Title: Re:クラスの相互定義について    
できました!ありがとございます
ちょっとまだアドレス関係のエラーはありますがなんとかしてみます
ちなみにこれはクラス名だけとりあえず定義しておいて後から中身を追加したという解釈で大丈夫でしょうか?


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

Name: たかぎ [URL]  ..ハッカー(122,753ポイント)   Date: 2009/11/15(日) 00:50   No:42041     
Title: Re:クラスの相互定義について    
> ちなみにこれはクラス名だけとりあえず定義しておいて後から中身を追加したという解釈で大丈夫でしょうか?

まあ、そんなところです。
クラス名だけ宣言しておけば、そのクラスへのポインタや参照なら使えます。


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

Name: ジャーニー  ..ぴよぴよ(722ポイント)   Date: 2009/11/15(日) 00:59   No:42042 解決!     
Title: Re:クラスの相互定義について    
たかぎさんありがとうございます
また困ったことがありましたらよろしくお願いします


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



Name: sr  ..ぴよぴよ(121ポイント)   Date: 2009/11/14(土) 16:04   No:41986       
Title: ゲームプログラミングについて    
初心者です。使用ソフトはVC++2008 EE
画像と背景を合わせようと思いました。
サイトを参考にしつつ、まずjpgの画像をpngにリネームし
その後に透過させるためにペインターで要らない部分を黒く塗り潰しました。
しかし、実際に合わせてみるとキャラの周りに塗り残しのようなものが出てしまい
困っています。原因、また対処法を教えて欲しいです。

また、簡単なサウンドノベル風?ゲームを作りたいと思っているのですが
画像を表示させて、文字を表示し、エンターで進ませる。
読む込む配列が無くなったら終了。というところまでは出来ました。
次に画像を変えて、また文字を表示させたいのですが、どのような考え方で
繋げればいいのでしょうか?
読み込む配列が無くなったら次の画像を読み込み〜ということでしょうか?

プログラムを作ること自体が始めてなので、質問の仕方も問題があるかも知れませんが
出来るだけ詳しく教えて欲しいです。


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


Name: kazuoni [URL]  ..ハッカー(113,949ポイント)   Date: 2009/11/14(土) 16:55   No:41991     
Title: Re:ゲームプログラミングについて    
DXライブラリ使用ですかね?
これを前提に回答してみます。

>jpgの画像をpngにリネーム
は特にする必要がないと思いますが・・・

>実際に合わせてみるとキャラの周りに塗り残し
RGB(0,0,0)で塗りつぶしたところのみ透過されます。(デフォルト)
ペイントでも塗りつぶし機能を使えばそのようなことはないはずなんですが・・・。
キャラの周りがどこなのかわかりませんが、
キャラに沿って黒いということならば、
そこの色がRGB(0,0,0)ではないということです。
面倒ですが、拡大して、1ドットずつ黒で塗りつぶしていってください。

>次に画像を変えて、また文字を表示させたいのですが、どのような考え方で
>繋げればいいのでしょうか?
>読み込む配列が無くなったら次の画像を読み込み〜ということでしょうか?

それでいいのではないでしょうか?
配列がなくなるという表現がよくわかりませんが・・・。


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

Name: ひよこ  ..比類無きプログラマー(71,185ポイント)   Date: 2009/11/14(土) 17:05   No:41992     
Title: Re:ゲームプログラミングについて    
おそらく、配列がなくなるっていうのは、読んだ文が終わったらってことではないのですか?
ゲームプログラムの館にサウンドノベルについて書いてあります。
counterみたいな変数を使い1回目のところが終わったら、counterを使って描く画像を読む、
みたいな感じはどうでしょうか?


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

Name: sr  ..かけだし(1,686ポイント)   Date: 2009/11/14(土) 23:40   No:42029     
Title: Re:ゲームプログラミングについて    
返答ありがとうございます。
DXライブラリ使用です。

このサイトに
「JPEGにすると真っ黒のピクセルが真っ黒ではなくなるので透過されません。JPEGは使わないようにしましょう。
容量が多くてかまわない場合はbmpで、容量を軽くしたい場合はpng形式の画像にしましょう。」
とあったのでpngにしたのですが・・・。
それと、黒く塗りつぶしたはずの画像を見てみて、透過処理出来ていた部分を白で塗りつぶししてみました。
案の定キャラの周りに塗り残しのようなものがあり、それを消しゴムで消し、塗りつぶしで真っ黒になることを
確認してから保存しました。
しかし、再度画像を開くと、先ほど消しゴムをかけて塗りつぶしたはずのキャラの周りの部分がまた残っていました。
画像保存の際の画質悪化かと思い、bmpにして保存してみましたが結果は変わらず・・・。



ゲームプログラミングの館のサウンドノベル風〜・・・
のところからコピーし、LoadGraphScreenで画像を表示したものです。

#include "DxLib.h"

int i=0,j,ch_i=0,counter=0,White;
char Key[256],oldKey[256]={},disp[80]="",ch[5][80]={
"プログラムを習得するには、実際に自分で書いてみることが大事。",
"参考書を読むことも重要だが、数学のように演習を通して、",
"体に身につけるようにしよう。",
"きっと、よりはっきりと、関数の使い方、",
"プログラムの書き方がわかるだろう。"
};


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

White=GetColor(255,255,255);

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
       

  LoadGraphScreen (0 , 0 , "char.bmp" , TRUE ) ;


for(j=0;j<256;j++){
if(oldKey[j]==0 && Key[j]==1)
Key[j]=2;
oldKey[j]=Key[j];
}

if(Key[KEY_INPUT_RETURN]==2){ // 前回押されてなくて、今回押されていたら
i=0; // iを初期値に戻し
ch_i++; // 表示する配列を1つずらす
if(ch_i==5) // これ以上表示する配列がなくなったらbreak;
break;
}

// 配列の終端-2以下で、今回コピーするiまでの配列要素のi番目が\0じゃなくカウンターが5の倍数なら
if(i<=80-2 && ch[ch_i][i]!='\0' && counter%5==0){
i+=2; // 全角文字なので配列要素2つずつカウントアップ
strncpy(disp,ch[ch_i],i);// iバイトまでの配列要素をdisp配列にコピー
disp[i]='\0'; // 終端記号を代入
}

DrawFormatString(10,420,White,"%s",disp);//disp配列の文字データを表示

counter++;
ScreenFlip() ;

}

DxLib_End() ;
return 0 ;
}



これからどのように変えていけばいいか教えて欲しいです。
変数ということは int 変数 = LoadGraphScreen("chara.bmp")
とするのでしょうか?




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

Name: softya  ..プログラマー(38,722ポイント)   Date: 2009/11/15(日) 00:45   No:42039     
Title: Re:ゲームプログラミングについて    
>「JPEGにすると真っ黒のピクセルが真っ黒ではなくなるので透過されません。JPEGは使わないようにしましょう。
容量が多くてかまわない場合はbmpで、容量を軽くしたい場合はpng形式の画像にしましょう。」
とあったのでpngにしたのですが・・・。」

もう少しプログラムに詳しくなると分かると思いますが、jpgとpngではファイルフォーマットが違います。つまり拡張子だけjpg→pngに変えても中身はjpgファイルのままなので、jpgファイルとして処理されます。jpgは非可逆圧縮で高圧縮されているのでブロック単位で色がある程度変化してしまい黒が黒である保障がされません。

>画像保存の際の画質悪化かと思い、bmpにして保存してみましたが結果は変わらず・・・。
一度jpgにしたものは画像が劣化します。
劣化しないためには必ずbmpやpngだけで処理する必要があります。
bmpにする元がjpgだった場合は、キャラの周りのエッジを完全に黒(0,0,0)にしてbmp保存してください。
常にbmpにしておくのが無難でjpgは使わないようにしましょう。


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



Name: どころてん  ..ぴよぴよ(40ポイント)   Date: 2009/11/13(金) 18:38   No:41912       
Title: 文字列の配列について    
#include<stdio.h>
#include<string.h>

int main(void)
{
char str[81];
int len,cnt=0;

puts("文字列の入力");
scanf("%s",str);
len=strlen(str);

printf("%sは%d文字である \n",str,len);

for(cnt=0;cnt<len;cnt++){
putchar(str[cnt]);

printf("\n");
}
//putchar(str[cnt+1]);
return 0;
}

このプログラムについてですが、配列の文字列はナル文字\0の記述が必須と聞きました。
しかし、コメントの//putchar(str[cnt+1]);をプログラムに入れると
最後に「フ」?のようなエラーが出て、逆にこのまま実行すると正常に動きます。
なぜこのような事が起きるのでしょうか?
どなたかご回答お願いします。




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


Name: non  ..熟練のプログラマー(69,306ポイント)   Date: 2009/11/13(金) 19:41   No:41920     
Title: Re:文字列の配列について    
>for(cnt=0;cnt<len;cnt++){
このfor文を抜けたとき、cntはいくらになっていると思いますか。
また、'\0'が格納されている配列のindexはいくらでしょう。


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

Name: どころてん  ..ぴよぴよ(79ポイント)   Date: 2009/11/13(金) 23:52   No:41941     
Title: Re:文字列の配列について    
for文が抜けた時のcntは0になると思いますが、
配列のindexって何ですか??



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

Name: box  ..ハッカー(145,913ポイント)   Date: 2009/11/14(土) 00:09   No:41942     
Title: Re:文字列の配列について    
> for文が抜けた時のcntは0になると思いますが、

0になりません。
くだんのループは、cnt < len である間、継続します。
継続しなくなるのは、cnt == len になったときです。
そして、くだんのループを抜けたとき、cnt はその時点の値を保持しています。つまり、lenです。

> 配列のindexって何ですか??

添字のことです。


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

Name: どころてん  ..ぴよぴよ(120ポイント)   Date: 2009/11/14(土) 02:04   No:41946     
Title: Re:文字列の配列について    
'\0'が格納されている配列の場所は
str[len]の所にナル文字が入ると思います。


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

Name: box  ..ハッカー(145,953ポイント)   Date: 2009/11/14(土) 06:04   No:41951     
Title: Re:文字列の配列について    
> '\0'が格納されている配列の場所は
> str[len]の所にナル文字が入ると思います。

その場合、
putchar(str[cnt+1]);
の添字の値は文字列として有効な場所でしょうか?


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

Name: どころてん  ..ぴよぴよ(225ポイント)   Date: 2009/11/14(土) 15:17   No:41981     
Title: Re:文字列の配列について    
ありがとうございました。
やっとナル文字の意味がわかりました。
for(cnt=0;cnt<len;cnt++)
だとlenが4の時、cntは0,1,2で止まって
最後にナル文字が入らなくなってしまいますね・・・

for(cnt=0;cnt<len+1;cnt++)
だったら大丈夫でしょうか??


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

Name: box  ..ハッカー(146,136ポイント)   Date: 2009/11/14(土) 23:15   No:42027     
Title: Re:文字列の配列について    
> for(cnt=0;cnt<len;cnt++)
> だとlenが4の時、cntは0,1,2で止まって

なぜですか?
「0以上4未満」ですから、0, 1, 2, 3の4回ループします。


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

Name: どころてん  ..ぴよぴよ(232ポイント)   Date: 2009/11/15(日) 00:28   No:42034     
Title: Re:文字列の配列について    
すいません、3が抜けていました。

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



Name: dic  ..プログラマー(37,715ポイント)   Date: 2009/11/14(土) 22:10   No:42020       
Title: %が含まれる文字列を表示しようとするとエラーになる    
現在ライブラリを作って、テストしてて発見したのですが
printf() 関数に渡す文字列に % を含む文字列を渡すとランタイムエラーがでます
一文字ずつ printf( "%d" ); で表示するとうまく表示できるのです

サンプルプログラムでは指定した文字列をいったん、全部 char化し、vector<char>に格納して
一個ずつ表示する方法と
printfで一気に表示する方法を試しました

やはりこれも文字コードと関連のあるバグなのでしょうか?


#include <stdio.h>
#include <vector>
using namespace std;


int main()
{
char buf[256] = "---dns.org/%7eupus---";
//---dns.org/~upuser---

vector<char> v;
int i;

for( i=0; i<strlen(buf); i++ )
v.push_back( buf[i] );

// これはうまく表示される
for( i=0; i<v.size(); i++ )
printf( "%c", v.at(i) );

// ここでランタイムエラー
printf( buf );

return 0;
}


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


Name: 御津凪 [URL]  ..ハッカー(122,615ポイント)   Date: 2009/11/14(土) 22:47   No:42022     
Title: Re:%が含まれる文字列を表示しようとするとエラーになる    
VC++ だと、 % で指定するフォーマット文字列をチェックするため、指定が正しくないとランタイムエラーが出ます。
(対応する変数が渡されていなくてもエラーになります)

これを回避するには、% を二つ並べるか、 puts などで書式出力を行わないようにするといいと思います。


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

Name: 組木紙織  ..比類無きプログラマー(74,996ポイント)   Date: 2009/11/14(土) 22:47   No:42023     
Title: Re:%が含まれる文字列を表示しようとするとエラーになる    
>現在ライブラリを作って、テストしてて発見したのですが
>printf() 関数に渡す文字列に % を含む文字列を渡すとランタイムエラーがでます

バグというより仕様です。
仕様というより未定義の動作?


printf("%s",buf);
としてみてください。


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

Name: dic  ..プログラマー(37,587ポイント)   Date: 2009/11/15(日) 00:01   No:42031 解決!     
Title: Re:%が含まれる文字列を表示しようとするとエラーになる    
buf[256] = ".......";
if( strstr(buf,..) )
としててランタイムエラーがでたんで
printfでどうなってるか確認してみたわけです

そうですか%は特殊文字ってみなすんですか
今回は%を含む文字列は削除という方法で解決できました

回答ありがとうございました


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



Name:  ..ぴよぴよ(35ポイント)   Date: 2009/11/14(土) 06:26   No:41952       
Title: ループについて    
初心者です。助けてください。
ステージを終えた際に再びハイスコア以外を初期化し、メインメニュー(難易度選択画面)に無限ループさせたいのですが、そのプログラムはmain.cppにfor文、while文等で記述するのでしょうか?

またステージ中にESCを押してポーズメニューを開いた場合、同様の処理(メインメニューに戻る、リトライ等)もmain.cppに記述するのでしょうか?


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


Name:  ..かけだし(2,011ポイント)   Date: 2009/11/14(土) 23:19   No:42028     
Title: Re:ループについて    
多少自分で改善したのですが何故か綺麗にループ出来ないままです。
敵の出現のエクセルデータ及びボスキャラの出現が出来ないままです。
自分が加えた部分はリトライor戻る選択部分と選択の上下移動。
ini部分のコピーペースト、初期パワーと残機数ぐらいです。

main.cpp

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

//ループで必ず行う3大処理
int ProcessLoop(){

}
int GetHitKeyStateAll_2(int KeyStateBuf[]){

}
void char_disp(int White,int y){
DrawString( 150 , y , "・" , White );
DrawString( 170 , 100 , "ステージをリトライ" , White );
DrawString( 170 , 120 , "戻る" , White );
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
int Key[256];
int White , y=100;
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
White = GetColor( 255 , 255 , 255 ) ; //色の取得
int back_knd[DANMAKU_MAX]={
0,1,0,1,1,
};
int boss_hp[DANMAKU_MAX]={

変更していないので略します

fps_wait(); enter_func_tm("待機した時間",1);
if(CheckStateKey(KEY_INPUT_ESCAPE)==1){//エスケープが入力されたらブレイク
while(ProcessMessage()==0 && ClearDrawScreen()==0 &&GetHitKeyStateAll_2(Key)==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存       ↑ESCが押されていない

char_disp(White,y); // 文字を描画
if( Key[KEY_INPUT_DOWN]==1 || Key[KEY_INPUT_UP]==1 ){

}

if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y+=20;
if(y==140) // y座標が260なら(選択が一番下なら)
y=100; // 選択座標を一番上に
}
if( Key[KEY_INPUT_UP]==1 ||( Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){
y-=20;
if(y==80)
y=120;
}
if(y == 100 && Key[KEY_INPUT_Z] ==1){
StopSoundMem(area.bgm.handle) ;
area.bgm.flag=1;
stage_count=1;
memset(&ch,0,sizeof(ch_t));
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);
memset(lazer,0,sizeof(lazer_t)*LAZER_MAX);
memset(enemy_order,0,sizeof(enemy_order_t)*ENEMY_ORDER_MAX);
memset(shot,0,sizeof(shot_t)*SHOT_MAX);
memset(cshot,0,sizeof(cshot_t)*CSHOT_MAX);
memset(effect,0,sizeof(effect_t)*EFFECT_MAX);
memset(del_effect,0,sizeof(del_effect_t)*DEL_EFFECT_MAX);
memset(&bom,0,sizeof(bom_t));
memset(&bright_set,0,sizeof(bright_set_t));
memset(&dn,0,sizeof(dn_t));
memset(&boss,0,sizeof(boss_t));
memset(child,0,sizeof(child_t)*CHILD_MAX);
memset(&stage_title,0,sizeof(stage_title_t));
memset(item,0,sizeof(item_t)*ITEM_MAX);
memset(&area,0,sizeof(area_t));//(48)
memset(option_bb,0,sizeof(option_bb_t)*2);//(49)

ch.x=FMX/2;
ch.y=FMY*3/4;
ch.power=0;//初期パワー(41)
ch.num=3;//初期残機数(41)

stage_title.appear_cnt=stage_title_count[stage];

/*弾幕それぞれの設定。後々きちんと設定しましょう。*/
// boss.appear_count[0]=1700;//中ボスが出現する時刻(42)
boss.appear_count[0]=1650;//中ボスが出現する時刻(42)(47)
boss.appear_count[1]=2850;//最後ボスが出現する時刻(44)(47)

boss.danmaku_num[0]=1;//中ボスが何個目までの弾幕を出すか
boss.danmaku_num[1]=4;//最後に出るボスが何個目までの弾幕を出すか(47)

for(int i=0;i<DANMAKU_MAX;i++){//弾幕それぞれのHP(47)
boss.set_hp[i]=boss_hp[i];
}
boss.hp_max=boss.set_hp[0];
for(int i=0;i<DANMAKU_MAX;i++)//弾幕それぞれの背景の種類
boss.back_knd[i]=back_knd[i];
/*ここまで*/
if(area.bgm.flag==1){
area.bgm.flag=0;//音楽再生フラグを初期化(48)
area.bgm.knd[0]=0;//通常BGMをどういうタイミングで再生するか、取り決めはmusic.cpp(48)
area.bgm.knd[1]=0;//ボスBGMをどういうタイミングで再生するか、取り決めはmusic.cpp(48)
area.bgm.loop_pos[0]=26672;//通常BGMのループ位置(48)
area.bgm.loop_pos[1]=27010;//ボスBGMのループ位置(48)
}
option_bb[0].img=img_cshot[2];//オプションボンボンの画像代入(49)
option_bb[1].img=img_cshot[2];

bright_set.brt=255;//初期輝度は最大
break;
}
if(y == 120 && Key[KEY_INPUT_Z]==1){
break;

ScreenFlip();//裏画面反映
}
}
ScreenFlip();//裏画面反映
count++;
}
DxLib_End();//DXライブラリ終了処理
return 0;
}


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



Name: kai  ..初心者(8,221ポイント)   Date: 2009/11/14(土) 20:31   No:42013       
Title: Justyさんに聞きたいことがあるのですが    
ちょっと前に、
ボス時に、東方みたいなボスカウントによって
段々にワッカが小さくなるサンプルを作成してくれて
それを改造している龍神録(60章)に実装してみたのですが、
なぜか、左上の1ピクセル分のみ色を識別して、
それをワッカとして表示しているバグが発生しているのですが、
どうしたらうまくいくのか助けてください・・



// 円を作る頂点の数(多いほど円に近づくが処理が重くなる)
#define VERTEX_MAX 30
// 円にいくつ元のテクスチャを貼るか
#define TEXTURE_MAX 3

if( CheckStateKey( KEY_INPUT_Z ) == 1 )
{
// 0初期化...
memset( vrt, 0, sizeof( VERTEX ) * VERTEX_MAX * 2 );
for(int i = 0; i < VERTEX_MAX * 2; i++ )
{
vrt[ i ].u = ( ( i / 2 ) % ( VERTEX_MAX / TEXTURE_MAX )) * ( 1.0f / ( VERTEX_MAX / TEXTURE_MAX - 1 ));
vrt[ i ].v = (float)( i % 2 );
vrt[ i ].a = vrt[ i ].r = vrt[ i ].g = vrt[ i ].b = 255;
}
}
if( spell_eff.flag == 1 )
{
if( spell_eff.end_time > spell_eff.cnt + 1 )
{
spell_eff.ang += PI / 30.f;

if( spell_eff.cnt < 70 )
{
if( spell_eff.cnt < 40 )
{
spell_eff.ang -= PI / 40.f / ( spell_eff.cnt + 10 );
spell_eff.r += spell_eff.start_r / 40.f;
}
}
spell_eff.r -= (spell_eff.start_r - spell_eff.end_r) / spell_eff.end_time;
spell_eff.r2 -= (spell_eff.start_r - spell_eff.end_r) / spell_eff.end_time;
}
else
{
spell_eff.flag = 0;
}
spell_eff.cnt++;
DrawPolygonBase( vrt ,VERTEX_MAX * 2, DX_PRIMTYPE_TRIANGLESTRIP, img_boss_effect[25], TRUE );
}

DrawGraph(130,20,img_boss_effect[25],TRUE);
DrawFormatString(130,0,GetColor(255,255,255),"endtime : %d", spell_eff.end_time - spell_eff.cnt );
DrawFormatString(130,30,GetColor(255,255,255),"cnt : %d", spell_eff.cnt );
DrawFormatString(130,60,GetColor(255,255,255),"ang : %d", spell_eff.ang );
DrawFormatString(130,90,GetColor(255,255,255),"r : %d", spell_eff.r );
DrawFormatString(130,120,GetColor(255,255,255),"r2 : %d", spell_eff.r2 );
DrawFormatString(130,150,GetColor(255,255,255),"flag : %d", spell_eff.flag );


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


Name: yu  ..熟練のプログラマー(40,330ポイント)   Date: 2009/11/14(土) 21:58   No:42017     
Title: Re:Justyさんに聞きたいことがあるのですが    
あ〜・・・多分このソースコードは自分が書きましたw
(書き方、変数名の付け方、見難さから考えて)
かなり前に書いたやつだと思います。
ですので、自分でも何をやっているのか・・・w
処理を簡易的に教えたかったので、このままじゃ少し扱いにくいと思いますよ


とりあえず動くようにしたいのなら
static VERTEX vrt[ VERTEX_MAX * 2 ];	// 外側の頂点と内側の頂点が必要だから *2 してある



毎回 vrt がメモリに確保されているので初期化がされず、おかしいことになっているんだと思います
(あまり static は好きじゃないですけどね;)


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

Name: kai  ..初心者(8,435ポイント)   Date: 2009/11/14(土) 22:07   No:42018 解決!     
Title: Re:Justyさんに聞きたいことがあるのですが    
ああああああorz
申し訳ありません><
色々な方々から教えて貰っていたので
多分Justyさんだったかな・・?と思ったのですが
yuさんでしたか。ホントすみません。。。
そしてありがとうございます。無事、動きました!


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

Name: Justy  ..伝説なるハッカー(460,311ポイント)   Date: 2009/11/14(土) 22:10   No:42019     
Title: Re:Justyさんに聞きたいことがあるのですが    
 良かったです。
 書いた覚えがなく思い出せなくて困ってましたw


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



Name: オラウー  ..かけだし(1,297ポイント)   Date: 2009/11/14(土) 13:40   No:41964       
Title: キャラクター操作について    
キャラクターの操作にスーパーマリオブラザーズのような
重みを加えたいんですが、どんなコードを打てばいいでしょうか


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


Name: 御津凪 [URL]  ..ハッカー(121,706ポイント)   Date: 2009/11/14(土) 14:37   No:41977     
Title: Re:キャラクター操作について    
どのような重みを付けるかによりますが、
重力のことなら、
空中にいたら落下量を少しずつ増加させて、現在位置に落下量を加えるようなコードを打てばいい感じになりますね。

それ以上のことはどう説明すればいいのかはわかりません。
(質問者の技量がわからない上に、どのコードに加えるのかがわからないので)


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

Name: オラウー  ..かけだし(1,367ポイント)   Date: 2009/11/14(土) 15:43   No:41984     
Title: キャラクター操作について    
たとえばスーパーマリオブラザーズは横に動くとき
最初のほうは動きが遅くてそこからだんだん速くなりますよね
あれを再現したいです
僕はプログラムはまだ初心者です
コードはこのサイトの落ち者ゲー(手抜き)というものそのままです
添付ファイルをつけます


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

Name: kazuoni [URL]  ..ハッカー(113,591ポイント)   Date: 2009/11/14(土) 16:44   No:41989     
Title: Re:キャラクター操作について    
物理の加速度という概念を勉強してみてください。

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

Name: softya  ..プログラマー(38,553ポイント)   Date: 2009/11/14(土) 16:53   No:41990     
Title: Re:キャラクター操作について    
簡単な物理計算の知識が必要です。
・加速度
・慣性
・摩擦
に付いての知識をご存知でしょうか?

まず、加速度ですかキーを押す事で少しづつ早くなり一定速度まで速くなる処理で使います。
これは、等加速度運動の考え方を使います。
http://www.geocities.jp/buturiyag3/03-01.htm
簡単に言うと移動速度は、キーの値が直接反映されるのでは無く、移動速度にキーが押されるたびに加速度値を加えていく事で移動速度を制御します。
int s;//速度
int v;//加速度
if( キーが有効 ) v=2;
else v=0;
s=s+v;
が処理の簡単な例です。この例の問題は加速の上限を決めていないので速度がどんどん速くなることです。

次に慣性ですが、動き出した物体は同じ速度で同じ方向に動き続ける法則を持っています。これが慣性の法則です。いきなりカーブを曲がろうとしても速い速度で動いていると急に曲がれない現象がその一例です。
http://www.max.hi-ho.ne.jp/lylle/undo1.html
int x;//x座標
x = x + s;//座標に速度を足します。
これを毎フレーム行うと、速度分だけキャラは移動してしまいますね。それも永久に。これが慣性の法則をプログラムとして組み込んだことになります。
ただし、真空の宇宙空間でも無い限り永久に動き続ける物体はありません。それが次にくる摩擦という考え方です。

摩擦は、一定の割合で速度を減らすものです。地球上の物体は、摩擦や空気抵抗で慣性の法則の同じ速度を保つ事ができません。この考えをプログラムに組み込みます。
s = s * 0.5;
この場合は、毎フレーム速度が半分になるものとしてみました。
実際には、値を調整して良い感じになるものを探す必要があります。





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

Name: 御津凪 [URL]  ..ハッカー(122,385ポイント)   Date: 2009/11/14(土) 17:08   No:41993     
Title: Re:キャラクター操作について    
先に添付されたコードにどう書き足せばある程度再現できるかを説明します。

1. ch_t 構造体に double 型の変数 vx を追加します。(これが加速度となります)
2. この変数を初期化するため、 ini 関数に ch.vx=0; を追記します。
3. operate_char 関数を以下のように変更します。
void operate_char(){

if(Key[KEY_INPUT_LEFT]>0)//左キーが押されていたら
ch.vx-=3;//左へ3加速
if(Key[KEY_INPUT_RIGHT]>0)//右キーが押されていたら
ch.vx+=3;//右へ3加速

// 加速度の計算など
if(ch.vx != 0){
if(ch.vx > 0){
ch.vx-=2;
if(ch.vx < 0) ch.vx=0;
}
else if(ch.vx < 0){
ch.vx+=2;
if(ch.vx > 0) ch.vx=0;
}
ch.x+=ch.vx; // 加速度を現在の位置に反映
}
}


これでコンパイル・実行すれば動きに重みがつきます。ちょうど softya さんの説明している方法を実装した形になります。
変更した operate_char 関数がその部分になるので、どういう処理になっているのか理解すると、加速度の修正や応用が行えるはずです。

ただし、これで方向キーを押し続けると際限なく加速するので、
最高速度を決め、それ以上の加速をしないようにする必要があります。



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

Name: オラウー  ..かけだし(2,064ポイント)   Date: 2009/11/14(土) 17:44   No:41998     
Title: キャラクター操作について    
御津凪さんのコードを付け足したら下のようなエラーと警告がたくさん出ました


c:\落ち物ゲー(手抜き)\code\main.cpp(57) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(59) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(62) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(63) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(64) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(65) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(65) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(67) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(68) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(69) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(69) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(71) : error C2039: 'vx' : 'ch_t' のメンバではありません。
c:\落ち物ゲー(手抜き)\code\main.cpp(8) : 'ch_t' の宣言を確認してください。
c:\落ち物ゲー(手抜き)\code\main.cpp(149) : warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。
c:\落ち物ゲー(手抜き)\code\main.cpp(149) : warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。
c:\落ち物ゲー(手抜き)\code\main.cpp(150) : warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。
c:\落ち物ゲー(手抜き)\code\main.cpp(150) : warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。
c:\落ち物ゲー(手抜き)\code\main.cpp(158) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。
c:\落ち物ゲー(手抜き)\code\main.cpp(158) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。

物理のことをもっと調べてみます
皆さんいろいろ教えてくれてありがとうございます




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

Name: 御津凪 [URL]  ..ハッカー(122,517ポイント)   Date: 2009/11/14(土) 17:49   No:41999     
Title: Re:キャラクター操作について    
> 1. ch_t 構造体に double 型の変数 vx を追加します。(これが加速度となります)

これを行いましたか?(error C2039 はこれが正しく行われていないことを示します)

> 2. この変数を初期化するため、 ini 関数に ch.vx=0; を追記します。

こちらも忘れずに行ってください。


エラーと警告の文章のほとんどはよく読めばわかるので、
できるだけ自力で解決した方が望ましいです。

それでもわからなければどうわからないのか含めて質問すればいいので。


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

Name: オラウー  ..かけだし(2,132ポイント)   Date: 2009/11/14(土) 18:12   No:42001 解決!     
Title: Re:キャラクター操作について    
出来ました、
1と2が抜けてました

ありがとうございました


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



Name: s  ..ぴよぴよ(841ポイント)   Date: 2009/11/14(土) 13:12   No:41963       
Title: c言語についての質問です    
当方学び始めたばかりの初心者です。
少し詰まったところがあるのでご質問させていただきます。

「入力された値を足していき(複数)、『e』が入力されれば合計値を出力」
という仕様で


void main(void)
{
int a=0;
int b=0;
int e;
scanf("%d",&a);
while(a!=e)
{
b=b+a;
scanf("%d",&a);
}
printf("合計:%d\n",b);
}

というプログラムを組んだのですが、『e』を入力しても合計値が出力されません。
数字を入力せずに1度目に『e』を入力すれば終わるのですがそれでは意味がありませんし・・・

どこが間違ってるのかもよくわからないのでご指摘お願いします。


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


Name: non  ..熟練のプログラマー(69,418ポイント)   Date: 2009/11/14(土) 14:24   No:41974     
Title: Re:c言語についての質問です    
scanf("%d",&a);
は数字を入力する書式指定です。
eは文字ですから、eを入力できるようにするなら、
まず、文字列で入力して、それを数値に変換するようにしないといけません。



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

Name: 御津凪 [URL]  ..ハッカー(121,610ポイント)   Date: 2009/11/14(土) 14:30   No:41975     
Title: Re:c言語についての質問です    
まず、
・変数 e が未初期化なので、処理自体正しく動きません。(VC++ では実行時エラーになりました)
・プログラム上に e が入力されたかを判別する処理がありません。
・ main 関数は int 型を返す関数でなければならない。(void は C 言語の仕様上正しくありません)

で、うまく動かない原因ですが、
・最初に e を入力したときに終了するのは、
e に(たまたま) 0 が入っており、
scanf では a には何も代入されず(入力したのは数字ではないので)、
結果 a と e は 0 なので、 while ループに入らないため。

・数値を入力した後に e を入力しても終了しないのは、
二度目以降の scanf では a には何も代入されず、
前の入力した数字のままのため、
a と e が不一致のままとなり、 while ループから出られない。
( e が 0 となっていたのなら、 0 を入力すると while ループから出ることになります)

scanf 関数は、変数に代入した個数が返されるので、変数 e を使わずに、
while(scanf("%d", &a) != 0)


と while 文に指定してしまえば、 e (というか数字以外)が入力されたら while から出るようになります。


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

Name:  ..ぴよぴよ(129ポイント)   Date: 2009/11/14(土) 16:13   No:41988 解決!     
Title: Re:c言語についての質問です    
nonさん
ありがとうございます。
今からその方向でも試して見ます。


御津凪さん
ありがとうございます。
e指定ではなく数字以外、を指定すればよかったんですね。


返事が遅れましたがご指摘いただきありがとうございました。
またよろしくお願いします。




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



Name:  ..ぴよぴよ(12ポイント)   Date: 2009/11/14(土) 14:44   No:41979       
Title: DXライブラリのバージョンを最新にする方法    
現在古いDXライブラリを使って、ゲームを作っているのですが、
最新のバージョン3に変える方法が分からなくて困ってます。
どうすればいいのでしょうか?


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


Name: 御津凪 [URL]  ..ハッカー(121,843ポイント)   Date: 2009/11/14(土) 14:47   No:41980     
Title: Re:DXライブラリのバージョンを最新にする方法    
新しいバージョンの DXライブラリのファイルを 古い DXライブラリのファイルに上書きするだけで OK です。

ただし、古い DXライブラリのファイルをバックアップしてから行ってください。
新しいバージョンの DXライブラリにしたときにコンパイルエラーやバグが出る場合があり、
どこが変わったのか判別しずらくなるからです。


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

Name:  ..ぴよぴよ(47ポイント)   Date: 2009/11/14(土) 15:37   No:41983 解決!     
Title: Re:DXライブラリのバージョンを最新にする方法    
無事、バグもなく更新できました。
御津凪様、ありがとうございました。


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



Name: スタートメニュー  ..ぴよぴよ(921ポイント)   Date: 2009/11/12(木) 20:27   No:41840       
Title: 画面モードの切り替えの仕方    
龍神録を起動する際にウィンドウかフルスクリーンと選べますよね。
あれはいったいどうやって作ればいいのでしょうか?

よろしくお願いします。


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


Name: ひよこ  ..熟練のプログラマー(69,738ポイント)   Date: 2009/11/12(木) 20:49   No:41841     
Title: Re:画面モードの切り替えの仕方    
ゲームプログラミングの館でメッセージボックスを使う方法が書いてあります。

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,081,655ポイント)   Date: 2009/11/12(木) 23:17   No:41856     
Title: Re:画面モードの切り替えの仕方    
いちいち起動時に聞くのもうっとうしいと思ったらコンフィグファイルを作るといいですよ。

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

Name: スタートメニュー  ..かけだし(1,011ポイント)   Date: 2009/11/13(金) 00:43   No:41866     
Title: Re:画面モードの切り替えの仕方    
ひよこさん
ご返事ありがとうございます。
気づきませんでした。ありがとうございました。

管理人さん
まだC言語始めたばかりで一応googleで検索したら訳がわからない物しかでませんでした。
恐れ入りますがコンフィグファイルとはどのようなものでしょうか。


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

Name: スタートメニュー  ..かけだし(1,023ポイント)   Date: 2009/11/14(土) 13:58   No:41971 解決!     
Title: Re:画面モードの切り替えの仕方    
解決チェックし忘れました。

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

Name: 御津凪 [URL]  ..ハッカー(120,678ポイント)   Date: 2009/11/14(土) 14:12   No:41973     
Title: Re:画面モードの切り替えの仕方    
解決済みとなりましたが一応。

> 恐れ入りますがコンフィグファイルとはどのようなものでしょうか。

コンフィグファイルとは、設定が記述されているファイルを指します。(設定ファイルとも呼びます)
今回の場合、ウインドウかフルスクリーンかをファイルで決めるので、
例えば、

・ウインドウで起動するのなら、 w とだけ書かれたコンフィグファイルにする
・フルスクリーンで起動するのなら、 f とだけ書かれたコンフィグファイルにする

とし、
プログラム側でそのコンフィグファイルを開き、読み込んだ1文字が 'w' か 'f' かで判断することで
ウインドウかフルスクリーンを指定する判断を定めることができます。

コンフィグファイルは自由に形式や方法を決めて作ることができるので、
上記の記述に限らず、さまざまな方法があります。
(もちろん、プログラム側も対応するようにコードを書く必要があります)


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

Name: スタートメニュー  ..かけだし(1,075ポイント)   Date: 2009/11/14(土) 14:37   No:41978     
Title: Re:画面モードの切り替えの仕方    
御津凪さん
ご返事ありがとうございました。

星蓮船でいう環境カスタムプログラムの事だったんですね。



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



Name: dic  ..プログラマー(37,173ポイント)   Date: 2009/11/14(土) 11:46   No:41957       
Title: 日本語がうまく読み込めない    
日本語のテキストをfgets関数で取得しようとしてるのですが
なぜか、文字化けが発生してしまいます
原因は何でしょうか?


#include <stdio.h>
#include <vector>
using namespace std;


static vector<char> v;


void load()
{
FILE *file = fopen( "iGoogle.txt", "rb" );
char buf[256];
while( !feof(file) )
{
// 文字化けして取得している
fgets( buf, sizeof(buf), file );
printf( buf );
}
fclose( file );
}

int main()
{
load();

return 0;
}


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


Name: Naohiro19  ..ぴよぴよ(929ポイント)   Date: 2009/11/14(土) 12:27   No:41958     
Title: Re:日本語がうまく読み込めない    
charだと1バイトしか読み込めないので
2バイト対応であるwchar_tを使ってみてはどうでしょうか?

static vector<char> v;


static vector<wchar_t> v;


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

Name: Justy  ..伝説なるハッカー(460,285ポイント)   Date: 2009/11/14(土) 12:45   No:41961     
Title: Re:日本語がうまく読み込めない    

>原因は何でしょうか?

 文字コードの問題ではないでしょうか。
 テキストの文字コードを(多分 Shift-JISに)変えて保存しなおすか、
読み込んだ後適切に変換してから表示してみてください。


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

Name: YuO  ..プログラマー(35,977ポイント)   Date: 2009/11/14(土) 12:51   No:41962     
Title: Re:日本語がうまく読み込めない    
確認時にJustyさんとかぶったことがわかりましたが,気にせず投稿します。


"iGoogle.txt"の文字コードは何ですか。
なんとなく,UTF-8のにおいがしています。

日本語版Windowsのコマンドプロンプトの既定のコードページは932なので,
標準C/C++の範囲の標準出力では,シフトJISの文字列しか出力できません。

文字コードがシフトJISでないならば,
・前もって文字コードを変換しておく
・プログラムで文字コードを変換する
・コマンドプロンプトのコードページを変更しておく (UTF-8なら65001)にする
などの手段をとる必要があります。


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

Name: dic  ..プログラマー(37,238ポイント)   Date: 2009/11/14(土) 13:53   No:41968     
Title: Re:日本語がうまく読み込めない    
返答ありがとうございます
文字コードですが、windows付属のメモ帳でひらけるので
Sift-JISで保存できてるはずだと思うのですが

文字コードの確認方法がわからないので
iGoogle.txtを送付してみます


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

Name: dic  ..プログラマー(37,506ポイント)   Date: 2009/11/14(土) 13:59   No:41972 解決!     
Title: Re:日本語がうまく読み込めない    
自分で確認しましたが、SHift-JISだとIEだと文字化け起こしますね
UTF-8だと日本語が意図どおりに表示されました

XP付属のメモ帳ですが、UTF-8でも表示できたんですね

Justyさん YuOさんの言うとおり原因は文字コードでした

Naohiro19さんの言うとおり2バイト対応で考えていきます


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



Name: でんすけ  ..初心者(5,152ポイント)   Date: 2009/11/13(金) 15:59   No:41898       
Title: 静的メンバ変数    
クラスのメンバ変数に「static」を付けると
未解決とエラーが出ます。
原因はなんだと考えられますか?


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


Name: dic  ..プログラマー(36,962ポイント)   Date: 2009/11/13(金) 16:08   No:41899     
Title: Re:静的メンバ変数    
実態を定義していないかと

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

Name: でんすけ  ..初心者(5,240ポイント)   Date: 2009/11/13(金) 16:29   No:41902     
Title: Re:静的メンバ変数    

class CsObj
{
private:
static int Obj;
}

int CsObj::Obj = 0;



実態の定義とは
int CsObj::Obj = 0;

のことでしょうか?


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

Name: Tororo  ..ぴよぴよ(708ポイント)   Date: 2009/11/13(金) 18:55   No:41915     
Title: Re:静的メンバ変数    
A.h でクラスAを定義してメンバに
staticな変数TESTを入れた時は
A.cppで実体化(int A::TEST = 0)等と実体化しないといけません^^



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

Name: dic  ..プログラマー(36,960ポイント)   Date: 2009/11/13(金) 19:59   No:41923     
Title: Re:静的メンバ変数    
>実態の定義とは
>int CsObj::Obj = 0;
>のことでしょうか?
そうですね

>int CsObj::Obj = 0;
の部分ですね


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

Name: でんすけ  ..初心者(5,254ポイント)   Date: 2009/11/13(金) 23:03   No:41935 解決!     
Title: Re:静的メンバ変数    
ありがとうございました。

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



Name: ft  ..初心者(6,783ポイント)   Date: 2009/11/09(月) 06:01   No:41606       
Title: ボムと敵弾について    
龍神録のサンプルではbom.flag!=0となると敵弾のフラグがすべてオフとなっておりますが、
これを発射されるボムのエフェクト周りをオフという風にしたいのですがどうすればいいでしょうか?


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


Name: softya  ..プログラマー(35,526ポイント)   Date: 2009/11/10(火) 22:14   No:41680     
Title: Re:ボムと敵弾について    
ボムからの影響判定で消すってことは一種の当たり判定です。
ボム当たり判定を作って、それで敵を消せば良いと思います。


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

Name: ft  ..初心者(6,832ポイント)   Date: 2009/11/13(金) 22:03   No:41930     
Title: Re:ボムと敵弾について    
なるほど、確かにそれでいけそうですね。
effect.cppよりボムの画像の座標だけを取得して、out.cppにてそれを使いたいのですが、
どのようにすればいいのでしょうか?


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



Name: 天和  ..ぴよぴよ(406ポイント)   Date: 2009/11/13(金) 12:53   No:41888       
Title: 最後のやつだけでない    
英文を打って(例This is a pen)単語単位で切り出しそのごその単語の文字数を出力させないさいという問題で
#include<stdio.h>
int main(void)
{
int c;
int e;
e = 0;
while(1){
c = getchar();
putchar(c);
e++;
if(c == ' ')
{printf(": %d letters.\n", (e - 1));
e = 0;}
if(c == EOF)
{printf(": %d letters.\n", (e - 1));
e = 0;
break;

}
return 0;
}
とプログラムを組んだのですがさいごのもじだlettersという文字が出てきませんよろしくお願いします


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


Name: non  ..熟練のプログラマー(68,900ポイント)   Date: 2009/11/13(金) 13:38   No:41889     
Title: Re:最後のやつだけでない    
EOFの入力はCTRL-Zです。
そのように入力しましたか?


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

Name: 天和  ..ぴよぴよ(231ポイント)   Date: 2009/11/13(金) 14:02   No:41891     
Title: Re:最後のやつだけでない    
いえ、前回の(http://www.play21.jp/board/formz.cgi?action=res&resno=41122&page=&lognum=126&id=dixq&rln=41131
の時にはそんなことしなくてもできたので・・・
できれば普通に入力したらでるようにしたいです。
ちなみにコンパイルしなおしなおしたらこんなエラーが出ます。
c:\users\k09036kk\desktop\c++\vc\project\宿題3\宿題3\宿題3.cpp(22) : fatal error C1075: 左側 中かっこ '{' に対応するものが 'c:\users\k09036kk\desktop\c++\vc\project\宿題3\宿題3\宿題3.cpp(3)' で見つかる前に EOF が検出されました。


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

Name: non  ..熟練のプログラマー(69,062ポイント)   Date: 2009/11/13(金) 14:37   No:41893     
Title: Re:最後のやつだけでない    
エラーは }の個数が対応してないからでしょう。

前回はしらないけど、EOFはCTRL-Zなんだからしょうがない。
Enterで終わらせたいなら、
if(c == '\n')
に変更したらどうですか。


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

Name: 天和  ..ぴよぴよ(305ポイント)   Date: 2009/11/13(金) 15:00   No:41894     
Title: Re:最後のやつだけでない    
それをやるとlettersが改行した後に出力してしまうので
もし¥nがあったらその前にretterを表示させた後に改行しなさいとプログラム組めればいいのですが・・


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

Name: non  ..熟練のプログラマー(69,201ポイント)   Date: 2009/11/13(金) 15:43   No:41897     
Title: Re:最後のやつだけでない    

#include<stdio.h>
int main(void)
{
int c;
int e;
e = 0;
while(1){
c = getchar();
if(c != '\n')
putchar(c);
e++;
if(c == ' ')
{
printf(": %d letters.\n", (e - 1));
e = 0;
}
if(c == '\n')
{
printf(": %d letters.\n", (e - 1));
break;

}
}
return 0;
}




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

Name: 天和  ..ぴよぴよ(359ポイント)   Date: 2009/11/13(金) 20:58   No:41928     
Title: Re:最後のやつだけでない    
なるほど改行の時だけ出力させないでその代わりの文章を用意してやればいいんですねありがとうございましたー

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

Name: 天和  ..ぴよぴよ(364ポイント)   Date: 2009/11/13(金) 21:08   No:41929 解決!     
Title: Re:最後のやつだけでない    
解決しました

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



Name: Ω  ..ぴよぴよ(700ポイント)   Date: 2009/11/13(金) 18:08   No:41909       
Title: キャラをキー入力で移動させる    
初めましてー Ω(オメガ)と言います。
今、Borland と BCC Developerでちょっとしたシューティングゲームを作ってますが、
画像をキー入力で移動させるとこで止まってます。
右に移動させるのはキレイに出来たんですけど、左に移動させると残像みてえなのが
1f(ぐらい)表示されて、なんか変な感じなんです。いろいろ試したけどどうしても解決しなくて・・・
↓コードです

#include "DxLib.h"


typedef struct{
int x,y;}Ziki_date;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

int Ziki_image[1];
char Key[256];
Ziki_date Ziki;

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理



Ziki.x=320;
Ziki.y=240;

SetDrawScreen(DX_SCREEN_BACK);
LoadDivGraph("Ziki.png",1,1,1,32,32,Ziki_image);

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){

if(Key[KEY_INPUT_RIGHT]==1)
Ziki.x+=4;

DrawGraph(Ziki.x,Ziki.y,Ziki_image[0],TRUE);
ScreenFlip();

if(Key[KEY_INPUT_LEFT]==1)
Ziki.x-=4;

DrawGraph(Ziki.x,Ziki.y,Ziki_image[0],TRUE);
ScreenFlip();

}

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




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


Name: ひよこ  ..熟練のプログラマー(69,158ポイント)   Date: 2009/11/13(金) 18:43   No:41913     
Title: Re:キャラをキー入力で移動させる    
DrawGraph(Ziki.x,Ziki.y,Ziki_image[0],TRUE);とScreenFlip();
が二つあるからです;
DrawGraphは指定座標に絵を描きます。もし、RIGHTの後ろにあると、左を押したときに
Ziki.xとZiki.x-4が描かれて残像みたいに見えると思います。
ScreenFlip()は裏画面から表へ描きます。よって上の二つが描かれます。
DrawGraphとScreenFlip();
は一番後ろだけに置きましょう。


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

Name: ひよこ  ..熟練のプログラマー(69,163ポイント)   Date: 2009/11/13(金) 18:46   No:41914     
Title: Re:キャラをキー入力で移動させる    
後、int Ziki_image[1];は必要ないなら別に配列にしなくてもいいですよ。


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

Name: Ω  ..ぴよぴよ(749ポイント)   Date: 2009/11/13(金) 18:59   No:41917 解決!     
Title: Re:キャラをキー入力で移動させる    
解決しました! 丁寧にありがとうございます。
ScreenFlipとDrawGraphは一個で良かったんですね
int Ziki_imageはあとあと使うんでこうしてあります


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



Name: TKOZ  ..プログラマー(36,435ポイント)   Date: 2009/11/12(木) 13:22   No:41815       
Title: ファミコンプログラムを作っているのですが…    
cc65であいかわらず、c言語でファミコンプログラミングしているTKOZです。

今回は、サウンドの音の出し方について質問します。

サウンドのドレミファソラシドの音を出力する方法が分かりません。
矩形波のチャンネル1でいいのですが、以下のページを参考にして作ってみたのですが、
何の音すら再生されません。

http://hp.vector.co.jp/authors/VA042397/nes/apu.html
http://hp.vector.co.jp/authors/VA042397/nes/ioport.html

ソースはこんな感じです。

void SoundProc(int freq)
{
int num=0;
*(char*)0x4015=0x00;
num=1790000/(freq<<5)-1;
num=num&0x00FF;
*(char*)0x4002=num;
*(char*)0x4015=0x01;
}

I/Oレジスタ0x4003の
bit7-3 再生時間
bit2-0 再生周波数上位3bit データ値
というのは、どうすれば設定できますでしょうか?


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


Name: たかぎ [URL]  ..ハッカー(117,447ポイント)   Date: 2009/11/12(木) 13:30   No:41816     
Title: Re:ファミコンプログラムを作っているのですが…    
例えば、再生時間をt、再生周波数をfとすると...

unsigned char t;
unsigned char f;
...
*(unsigned char*)0x4003 = (t << 2) | (f & 3);

でよいのでは?

# ファミコンのプログラミングはほとんど忘れました。



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

Name: TKOZ  ..プログラマー(36,587ポイント)   Date: 2009/11/12(木) 17:52   No:41832     
Title: Re:ファミコンプログラムを作っているのですが…    
先ほどの書き込みはネットカフェからのものです。

下のソースのようにしたのですが、音が全く鳴りません。
何故でしょうか?

void SoundPlay(void)
{
int num;
unsigned char t=0xF;
*(char*)0x4015=00;

num=1790000/(440*32)-1;

num=num & 0x00FF;

*(char*)0x4002=num;

*(unsigned char*)0x4003 = (t << 2) | (440 & 3);

*(char*)0x4003=num;

*(char*)0x4015=01;
}


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

Name: softya  ..プログラマー(37,783ポイント)   Date: 2009/11/12(木) 18:05   No:41833     
Title: Re:ファミコンプログラムを作っているのですが…    
こうじゃないですか?
num=1790000/(440*32)-1;
*(char*)0x4001=0;//とりあえずクリア
*(char*)0x4002=(num&0xff);
*(unsigned char*)0x4003 = (t << 2) | ((num>>8) & 0x03);

>*(char*)0x4003=num;
いらないです。



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

Name: TKOZ  ..プログラマー(36,845ポイント)   Date: 2009/11/12(木) 19:54   No:41837     
Title: Re:ファミコンプログラムを作っているのですが…    
http://gikofami.fc2web.com/nes/nes012.html
上記のページを参考に組んでみたした。
しかし、…メインループがおかしいのか、どうかは分かりませんが、
連続した音の再生は出来ませんでした。
時々、プツッって途切れるような音の鳴り方です。
というか、ほとんど音鳴りません。


void SoundPlay(void)
{
int num;
unsigned char t=0xF;

*(char*)0x4015=0x01;

*(char*)0x4000=0xBF;

*(char*)0x4001=0xAB;

num=1790000/(220>>5)-1;
//*(unsigned char*)0x4003 = (t << 2) | ((num>>8) & 0x03);
*(char*)0x4002=0xDC;
*(char*)0x4003=0xF0;

}


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

Name: toyo  ..熟練のプログラマー(44,526ポイント)   Date: 2009/11/12(木) 21:20   No:41843     
Title: Re:ファミコンプログラムを作っているのですが…    
NES研究室さんのHELLO WORLDサンプルにサウンドをつけてみました


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

Name: toyo  ..熟練のプログラマー(44,602ポイント)   Date: 2009/11/13(金) 10:53   No:41880     
Title: Re:ファミコンプログラムを作っているのですが…    
ドレミファソラシドを鳴らしてみました
実機での確認は出来ないのでエミュでやりましたがVirtuaNESでは鳴ってくれました
6502はレジスタが8ビットしかないのでCの変数も8ビットのみでやったほうがいいと思います
スタックも少ないので引数のサイズも少ないほうがいいでしょうし


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

Name: TKOZ  ..プログラマー(36,910ポイント)   Date: 2009/11/13(金) 17:05   No:41905 解決!     
Title: Re:ファミコンプログラムを作っているのですが…    
今日は忙しかったので、返信が遅れました。

>toyoさん
ありがとうございます。
これで、なんとか自作の曲がサウンドで鳴らせそうです。


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



Name: kazuoni [URL]  ..ハッカー(112,580ポイント)   Date: 2009/11/11(水) 23:17   No:41747       
Title: 関数PlgBltの速度について    
お邪魔します。

回転描写PlgBltの動作について質問に来ました。。
768kb,512×512
の.bmpを回転描写させたいのですが、
FPS=60で管理しているプログラムで、毎ループPlgBltで等倍回転させると、
FPS=43ぐらいに落ちてしまいます。

・回転描写なので、関数sin,cosで遅くなっているのでは?とも思いましたが、
テーブル化してもほぼ変化はありませんでした。

・画像を縮小(0.1倍)回転すると、FPS=55ぐらいには戻ります。

・上で示した画像

・回転させなければ(第二引数lpPointの内容が変化しなければ)FPS=60を保ちます。(PlgBltで描写しても)

これはやはりPlgBltの描写速度の問題でしょうか?
この問題の解決は難しいでしょうか?
DXライブラリもどきが完成したと喜んで、ゲーム制作をしていた矢先・・・。

よろしくお願いします。


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


Name: softya  ..プログラマー(36,684ポイント)   Date: 2009/11/12(木) 01:10   No:41752     
Title: Re:関数PlgBltの速度について    
PlgBltだと全てソフトで回転させていると思います。
GPUハードで回転を行っているDirectXとは雲泥の速度差かと思いますね。
自前でPlgBlt同等なものをアセンブラで組んでSIMD系の命令を駆使すれば、速度が出るかもしれません。
http://ja.wikipedia.org/wiki/Streaming_SIMD_Extensions


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

Name: Justy  ..伝説なるハッカー(459,994ポイント)   Date: 2009/11/12(木) 01:35   No:41756     
Title: Re:関数PlgBltの速度について    
 まぁ、GDIですからねぇ。
 一度DXライブラリの GPUを使わないモードで出来るだけ同等に近い条件で
動かしてみて速度を比較してみてはどうでしょう?


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

Name: kazuoni [URL]  ..ハッカー(113,093ポイント)   Date: 2009/11/13(金) 14:20   No:41892 解決!     
Title: Re:関数PlgBltの速度について    
持ち上げすみません。。
スレが流れるの速いですね^^;

softyaさん、Justyさんご回答ありがとうございます!

>DXライブラリの GPUを使わないモードで出来るだけ同等に近い条件で動かしてみて速度

やってみました。
グラフィックライブラリimgctlの回転関数も同時に試してみました。
転送速度: DXライブラリ > imgctl ≒ PlgBlt
って感じでした。
(DXライブラリが同じ条件まで持って行けたかどうかが微妙ですが・・・)
ただ、どれも自分の満足できる速さではなかったですorz
これならいっそ、もう仕様にしてしまおうかって思います。。

>自前でPlgBlt同等なものをアセンブラで組んでSIMD系の命令を駆使

確かにその通りだと思います。。
MMXを用いたブレンドにしたって、結構なスピード
がでましたからね・・・。
ただ、アンチエイリアシング・色の平均値による縮尺等の実装・・・
自分にはちょっと敷居が高そうな気がしましたorz

元サイズが大きいと、PlgBltは動作が厳しいんですね。
キャラチップ(32×32)を拡大回転する分なら全然行けるんですけどね。。
これじゃ使い物にならないw

っというわけで、そろそろこの自作DXライブラリもどきはお蔵入りさせます。
記念に管理人さんの作成された
「リンゴ落ちゲーミク」
をそのまま移植してみました。

http://kissho.xii.jp/1/src/1jyou96588.zip.html
DLキー kazuoni

まぁ、音声ファイルは潜在的なバグのおかげで、
今回はならないようにしていますが^^;
DXライブラリをまねしただけなので、
移植はすぐ出来てしまうんですが。。

今回は、管理人さんの用意された素材を使用させていただきました。
この場をお借りして御礼申し上げます。

時間があったら、またアセンブリでPlgBltを実装してみたいと思います。
(おそらくないとは思いますけど・・・w)
一度、ここで解決とさせていただきます。

次回もよろしくお願いします。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +