C言語何でも質問掲示板


アンケートにご協力下さい → >> アンケートフォーム <<

規約と使い方

 
   並び替えプログラムで   
     ・[16903] 通り 
     ・[16915] TT414 
     ・[16917] rio 
     ・[16920] バグ 
     ・[17010] TT414 
   最大の値の文字を求め ....   
     ・[17001] バグ 
     ・[17005] ディオ 
     ・[17006] Mist 
     ・[17007] バグ 
     ・[17008] ディオ 
     ・[17009] ディオ 
   細長い弾の進行方向と ....   
     ・[16970] 管理人 
     ・[16973] 鷹見 
     ・[16975] 名無しさん 
     ・[16978] 管理人 
     ・[16988] 鷹見 
   シューティングゲーム ....   
     ・[16972] こめかみ 
     ・[16979] 管理人 
     ・[16987] こめかみ 
   プログラムの高速化に ....   
     ・[16937] toyo 
     ・[16938] たかぎ 
     ・[16939] マサキ 
     ・[16940] ibis 
     ・[16941] たかぎ 
     ・[16942] たかぎ 
     ・[16953] マサキ 
     ・[16960] マサキ 
     ・[16961] マサキ 
     ・[16962] ibis 
     ・[16976] たかぎ 
     ・[16986] マサキ 
   \を\\にするには   
     ・[16982] すく 
     ・[16983] aiai 
     ・[16984] たかぎ 
     ・[16985] ibis 
   DXライブラリで文字が ....   
     ・[16899] DIL 
     ・[16900] 会虎 
     ・[16901] miss 
     ・[16904] bodomcross 
     ・[16912] 合虎 
     ・[16913] bodomcross 
     ・[16945] 合虎 
     ・[16981] bodomcross 
   敵が弾を撃ってこない ....   
     ・[16977] あなざぁ 
   このサイトの事ですが ....   
     ・[16910] 管理人 
     ・[16911] 雷(携帯) 
     ・[16967] リーマン 
     ・[16968] tkmakwins15 
   listでの末尾データ交 ....   
     ・[16947] ランド 
     ・[16948] しっぽ 
     ・[16952] ランド 
     ・[16956] ibis 
   無題   
     ・[16950] lbfuvab 
     ・[16951] box 
     ・[16954] あなざぁ 
   最大値・最小値の求め ....   
     ・[16932] ibis 
     ・[16946] やまさん 
   無題   
     ・[16933] ibis 
     ・[16935] 管理人 
     ・[16943] yoa 
   当たり判定・・・   
     ・[16927] しりうす〜 
     ・[16928] あなざぁ 
     ・[16929] あなざぁ 
   参考書   
     ・[16816] lbfuvab 
     ・[16817] 管理人 
     ・[16828] box 
     ・[16830] すく 
     ・[16887] Haru 
     ・[16890] Mist 
     ・[16891] Haru 
     ・[16896] Mist 
     ・[16914] Haru 
     ・[16916] Mist 
     ・[16919] Haru 
     ・[16922] バグ 
     ・[16926] Haru 
   バグについて   
     ・[16921] バグ 
     ・[16923] たかぎ 
     ・[16924] ibis 
   MS WORDの問題   
     ・[16831] YuO 
     ・[16844] やなぎ  
     ・[16845] やそ 
     ・[16846] やそ 
     ・[16892] やなぎ 
     ・[16893] Mist 
     ・[16894] やそ 
     ・[16898] YuO 
     ・[16908] たかぎ 
   バックグラウンド状態 ....   
     ・[16906] 管理人 
     ・[16907] 超初心者 
   自機の当たり判定   
     ・[16876] やそ 
     ・[16880] TKOZ 
     ・[16881] アルク 
     ・[16882] ps 
     ・[16883] ps 
     ・[16884] ps 
     ・[16885] 1 
     ・[16886] やそ 
     ・[16888] ps 
     ・[16889] ps 
     ・[16895] やそ 
   Dxlibでプログラミング ....   
     ・[16873] あなざぁ 
     ・[16875] やそ 
     ・[16877] Mist 
     ・[16878] あなざぁ 
   数値を代入し、言葉に ....   
     ・[16861] toyo 
     ・[16862] へろり 
     ・[16863] やそ 
     ・[16864] やそ 
     ・[16865] Mist 
     ・[16867] やそ 
     ・[16868] たかぎ 
     ・[16869] タメゴロー 
     ・[16870] タメゴロー 
     ・[16871] バグ 
   getche   
     ・[16834] DIL 
     ・[16836] へろり 
     ・[16849] DIL 
     ・[16850] box 
     ・[16852] DIL 
     ・[16854] box 
     ・[16858] DIL 
   配列の中身のコピー   
     ・[16856] 通り 
     ・[16857] aiai 
   アドベンチャーゲーム ....   
     ・[16686] ibis 
     ・[16705] 管理人 
     ・[16717] 雫 
     ・[16847] TKOZ 
   リングバッファについ ....   
     ・[16713] box 
     ・[16720] ibis 
     ・[16721] box 
     ・[16722] ibis 
     ・[16742] ベジータ 
     ・[16765] ibis 
     ・[16833] ベジータ 
     ・[16839] Mist 
     ・[16841] ベジータ 
   インクリメントのタイ ....   
     ・[16809] box 
     ・[16813] 組木紙織 
     ・[16814] 組木紙織 
     ・[16815] へろり 
     ・[16820] ibis 
     ・[16821] ibis 
     ・[16823] マルクス 
     ・[16837] toyo 
   初めまして   
     ・[16786] kazuoni 
     ・[16787] 管理人 
     ・[16829] ワープスター 
   API 枠無しウィンドウ ....   
     ・[16822] lbfuvab 
     ・[16826] ibis 
     ・[16827] ibis 
   コンパイラのPATHの設 ....   
     ・[16747] bodomcross 
     ・[16748] 管理人 
     ・[16749] しっぽ 
     ・[16766] ibis 
     ・[16772] lbfuvab 
     ・[16778] Hermit 
     ・[16825] 超々初心者 
   BCCでシューティングゲ ....   
     ・[16818] 管理人 
   ダイヤのPG   
     ・[16796] m(-_-)m 
     ・[16797] m(-_-)m 
     ・[16799] Mist 
     ・[16800] m(-_-)m 
     ・[16802] m(-_-)m 
     ・[16803] m(-_-)m 
     ・[16804] 管理人 
     ・[16805] Mist 
     ・[16806] 管理人 
     ・[16807] Mist 
     ・[16808] 管理人 
   住所録   
     ・[16606] Mist 
     ・[16607] やそ 
     ・[16608] Haru 
     ・[16609] Haru 
     ・[16611] Mist 
     ・[16612] Haru 
     ・[16613] Haru 
     ・[16615] Mist 
     ・[16617] Haru 
     ・[16618] YuO 
     ・[16620] やそ 
     ・[16621] Haru 
     ・[16622] 管理人 
     ・[16623] Haru 
     ・[16624] 管理人 
     ・[16625] Mist 
     ・[16626] Haru 
     ・[16637] Haru 
     ・[16638] Mist 
     ・[16639] 管理人 
     ・[16640] Haru 
     ・[16641] やそ 
     ・[16642] Haru 
     ・[16643] Mist 
     ・[16644] 管理人 
     ・[16645] やそ 
     ・[16672] lbfuvab 
     ・[16678] やそ 
     ・[16790] Haru 
     ・[16791] C 
     ・[16798] Mist 
   掃出し法の問題   
     ・[16667] バグ 
     ・[16668] はしもと 
     ・[16669] バグ 
     ・[16670] はしもと 
     ・[16671] バグ 
     ・[16794] はしもと 
   質問です。   
     ・[16773] box 
     ・[16774] レン 
     ・[16775] 管理人 
     ・[16779] レン 
     ・[16784] 管理人 
   ミニゲーム作ってみま ....   
     ・[16682] 管理人 
     ・[16691] すく 
     ・[16692] 管理人 
     ・[16693] 管理人 
     ・[16694] 管理人 
     ・[16757] すく 
     ・[16769] 管理人 
     ・[16781] すく 
     ・[16783] 管理人 
   STG製作に関して……   
     ・[16741] 管理人 
     ・[16746] Justy 
     ・[16782] Arma 
   音声ファイル   
     ・[16593] bagu  
     ・[16594] バグ 
     ・[16679] テルル 
     ・[16687] ibis 
     ・[16699] 管理人 
     ・[16750] テルル 
     ・[16751] テルル 
     ・[16763] ibis 
     ・[16768] 管理人 
     ・[16780] tkmakwins15 
   シューティングゲーム ....   
     ・[16777] 管理人 
   ゲーム画像素材を作る ....   
     ・[16732] 管理人 
     ・[16767] ようと 
     ・[16770] 管理人 
     ・[16776] 管理人 
   細線化を行うプログラ ....   
   質問   
     ・[16715] box 
     ・[16716] mossa 
     ・[16718] bodomcross 
     ・[16719] box 
     ・[16723] mossa 
     ・[16724] box 
     ・[16726] mosaa 
     ・[16727] box 
     ・[16728] mossa 
     ・[16729] tkmakwins15 
     ・[16730] box 
     ・[16731] mosaa 
     ・[16733] box 
     ・[16734] 管理人 
     ・[16735] mosaa 
     ・[16737] box 
     ・[16738] mosaa 
     ・[16739] 管理人 
     ・[16740] mosaa 
     ・[16745] mosaa 
     ・[16753] テルル 
     ・[16755] tkmakwins15 
     ・[16756] mossa 
     ・[16758] box 
     ・[16759] mosaa 
     ・[16760] すく 
     ・[16761] mosaa 
     ・[16762] mosaa 

Name: rio  ..ぴよぴよ(646ポイント)   Date: 2008/05/29(木) 19:46   No:16902       
Title: 並び替えプログラムで    
VisualC++ 2005
Windows XP

コマンドプロンプトで実行して
”ファイル名は?”
と聞いてきてテキストファイルのフルパス(場所)を入力してエンターキーで次は
”作成先は?”
と聞いてきてフルパス(場所)を入力してエンターキーで終わり、

英文のかかれたテキストファイルから全英単語を重複なく順番に新しいテキストファイル(以下、”NEWテキスト”と呼ぶ)に書き込み保存するプログラミングです。


実際の内容の結果は次のようになる。


-------------------英文.txt-------------------------------

I was wondering if my plant needs friends, do I need to get more of the same plant so it can get polinated and produce peppers?

------------------new英文.txt(プログラムによって新規作成)------------------------------

I
was
wondering
if
my
plant
needs
friends
do
need
to
get
more
of
the
same
so
it
can
polinated
and
produce
peppers

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


このプログラムは下のものとなります。



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

typedef struct tag_list_t{
int num;
char **wordlist;
}list_t;

int list_add(list_t *list, char *word){
int i;
for(i=0;i<list->num;i++) if(strcmp(list->wordlist[i], word)==0) return 0;
list->wordlist=realloc(list->wordlist, sizeof(char*)*(list->num+1));
list->wordlist[list->num]=strdup(word);
list->num+=1;
return 1;
}

int main(void){
list_t list={0, NULL};
char fname_in[FILENAME_MAX], fname_out[FILENAME_MAX], word[255+1];
char *find;
FILE *fp_in, *fp_out;

printf("”ファイル名は?”");
fgets( fname_in, FILENAME_MAX, stdin );
printf("”作成先は?”");
fgets( fname_out, FILENAME_MAX, stdin );
if ( (find = strchr(fname_in,'\n')) != NULL ) *find = '\0';
if ( (find = strchr(fname_out,'\n')) != NULL ) *find = '\0';

if((fp_in=fopen(fname_in, "r"))==NULL) return 1;
if((fp_out=fopen(fname_out, "w"))==NULL) return 2;

while(fscanf(fp_in, "%255[A-Za-z]%*[^A-Za-z]", word)==1) if(list_add(&list, word)) fprintf(fp_out, "%s\n", word);

fclose(fp_in);
fclose(fp_out);
return 0;
}




ですがこれでは大文字と小文字が区別されて同じ単語も違うものとして出力されます
例 any と Any など
出力を小文字のみで統一して重複除去できないですか?
ソース教えてください。


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


Name: 通り  ..ぴよぴよ(268ポイント)   Date: 2008/05/29(木) 20:35   No:16903     
Title: Re:並び替えプログラムで    
islowerなりisupperなりを使えばよいでしょう。

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

Name: TT414  ..かけだし(1,106ポイント)   Date: 2008/05/30(金) 13:22   No:16915     
Title: Re:並び替えプログラムで    
stricmpを使いましょう。

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

Name: rio  ..ぴよぴよ(671ポイント)   Date: 2008/05/30(金) 13:53   No:16917     
Title: Re:並び替えプログラムで    
すいませんが初心者なもんで
ソース丸ごと乗せてくれませんか?


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

Name: バグ  ..比類無きプログラマー(88,160ポイント)   Date: 2008/05/30(金) 14:43   No:16920     
Title: Re:並び替えプログラムで    
何故、初心者だとソースを丸ごと載せなくてはいけないのですか?
ここの掲示板は基本的に丸投げは禁止なはずですが…

それに、これだけのソースを書ける人がislower、isupper、strcmpの使用方法が分からないというのも不思議で仕方ないです…

ほぼ答えになりますが、ヒントを載せますね。

一番分かり易いのは、tolower関数で全てのアルファベットを小文字に変換して、strcmp関数で比較する方法ではないでしょうか?

関数の使用方法が分からないのであれば、下記のURLで調べるのをお勧めします。

http://www.bohyoh.com/CandCPP/C/Library/index.html


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

Name: TT414  ..かけだし(1,119ポイント)   Date: 2008/06/02(月) 17:00   No:17010     
Title: Re:並び替えプログラムで    
strcmpをstricmpに変更するだけです。

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



Name: ディオ  ..ぴよぴよ(69ポイント)   Date: 2008/06/02(月) 13:31   No:16993       
Title: 最大の値の文字を求めるプログラムについて    
こんにちは。

C言語を始めたばかりの初心者ですが、よろしくお願いいたします。

早速質問させていただきます。


a, b, c, d, e, fという変数を定義して、

scanf関数でそれぞれの値を入力して、

そのなかで最大の値が入力された文字を求めるプログラムはどう書けばよいのでしょうか。

自分で考えてみたところ、6つの数の中での最大値を求めることはできたのですが、

出力は最大値の数字になってしまい、"a"などの文字で出力するプログラムがわかりません。


わかりにくい質問かとは思いますがよろしくお願いします。


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


Name: バグ  ..比類無きプログラマー(88,552ポイント)   Date: 2008/06/02(月) 13:54   No:17001     
Title: Re:最大の値の文字を求めるプログラムについて    
とりあえず、その途中まで出来ているプログラムをここに載せてみては如何でしょうか?

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

Name: ディオ  ..ぴよぴよ(435ポイント)   Date: 2008/06/02(月) 15:05   No:17005     
Title: Re:最大の値の文字を求めるプログラムについて    
そうですね、すみません。


#include <stdio.h>

int main(void){

int a, b, c, d, e, f, m, n;
int max;

printf("数値を6つ入力\n");
printf("a=");
scanf("%d", &a);
printf("b=");
scanf("%d", &b);
printf("c=");
scanf("%d", &c);

printf("d=");
scanf("%d", &d);
printf("e=");
scanf("%d", &e);
printf("f=");
scanf("%d", &f);

max=a;
if(a > max){ max=a; }
if(b > max){ max=b; }
if(c > max){ max=c; }
if(d > max){ max=d; }
if(e > max){ max=e; }
if(f > max){ max=f; }

printf("最大値 = %d\n", max);



return 0;
}


これは最大値の値を求めるプログラムと自分でもわかるのですが、

どうしたら最大値は"a"とか、文字で表せるんでしょうか?

アドバイスよろしくお願いしますm(_ _)m


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

Name: Mist  ..初心者(6,217ポイント)   Date: 2008/06/02(月) 15:24   No:17006     
Title: Re:最大の値の文字を求めるプログラムについて    
質問の意味するところがよくわかりませんが
今だと「最大値 = 100」と表示されるのを「最大値 a = 100」と表示したいということでしょうか?

そうであれば

char max_c;

max=a;
max_c = 'a';

// 初期化で入れているのでこの比較は無駄 if(a > max){ max=a; }
if(b > max){ max=b; max_c = 'b'; }
if(c > max){ max=c; max_c = 'c'; }
if(d > max){ max=d; max_c = 'd'; }
if(e > max){ max=e; max_c = 'e'; }
if(f > max){ max=f; max_c = 'f'; }

printf("最大値 %c = %d\n", max_c, max);

でいいと思いますが。


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

Name: バグ  ..比類無きプログラマー(88,979ポイント)   Date: 2008/06/02(月) 15:32   No:17007     
Title: Re:最大の値の文字を求めるプログラムについて    
あ、別に怒っている訳ではないですよ(苦笑)
ただ、どういうやり方で、どういった答えを求められているのかを推測するのに便利かなぁ…と思っただけですので(^_^;)

凄く簡単な方法を記述しときます。同じような処理が続く場合は関数化したり、するとスッキリしますが、敢えてそういった事はしておりませんので、色々とイジってみてくださいね(^-^)


#include <stdio.h>

int main(void)
{
int a, b, c, d, e, f;
int max;
char name;

printf("数値を6つ入力\n");
printf("a=");
scanf("%d", &a);
printf("b=");
scanf("%d", &b);
printf("c=");
scanf("%d", &c);

printf("d=");
scanf("%d", &d);
printf("e=");
scanf("%d", &e);
printf("f=");
scanf("%d", &f);

max = a;
name = 'a';

if (b > max)
{
max = b;
name = 'b';
}

if (c > max)
{
max = c;
name = 'c';
}

if (d > max)
{
max = d;
name = 'd';
}

if (e > max)
{
max = e;
name = 'e';
}

if (f > max)
{
max = f;
name = 'f';
}

printf("最大値 = %d\n", max);
printf("変数名 = %c\n", name);
return 0;
}


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

Name: ディオ  ..ぴよぴよ(512ポイント)   Date: 2008/06/02(月) 15:37   No:17008 解決!     
Title: Re:最大の値の文字を求めるプログラムについて    
ありがとうございます!

char max_c; を定義してやればいいんですね。

わかりにくい質問を汲み取ってくれて、どうもありがとうございました。




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

Name: ディオ  ..ぴよぴよ(549ポイント)   Date: 2008/06/02(月) 15:42   No:17009 解決!     
Title: Re:最大の値の文字を求めるプログラムについて    
Mistさん, バグさん

丁寧にどうもありがとうございましたm(_ _)m



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



Name: 鷹見  ..ぴよぴよ(354ポイント)   Date: 2008/05/31(土) 17:18   No:16958       
Title: 細長い弾の進行方向と合わせた弾の回転    
こんばんは。こちらでいろいろ学ばせていただき、
今は、シューティングゲーム作っているのですが、
わからないことがあります。

___ 細長い方を頭として、細長い弾を進行方向に合わせ、
    回転させたいのですが、どのような計算でできますか?

どなたか知恵を貸してくください、よろしくお願いします。


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


Name: 管理人 [URL]  ..伝説のハッカー(588,447ポイント)   Date: 2008/06/01(日) 03:52   No:16970     
Title: Re:細長い弾の進行方向と合わせた弾の回転    
どのようなものかイメージがわかないです。今のところ細い方を頭にして進行方向にあわせて回転するというとイメージとして図のように3Dの回転のようなイメージしかわきませんが3Dなのでしょうか?

ペイントで書いた簡単なものでいいので、絵を添えてもらえると解り易いと思います。


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

Name: 鷹見  ..ぴよぴよ(670ポイント)   Date: 2008/06/01(日) 06:03   No:16973     
Title: Re:細長い弾の進行方向と合わせた弾の回転    
おはようございます、
ペイントで描いてみたのですが間違って変な所に配置してしまいました、ごめんなさい。

今作っているのは2Dのシューティングです。
管理人さんの作ったゲームの竜神録で例えますと、
1面では、中くらいの敵(敵の大きさ)が3発ずつ弾を発射しています。
小さい敵とは弾の形が違い細長いです、そのまま普通に表示すると、X軸に+4方向に進むときも
画像は縦のまま進んでいきます。

この細長い弾を弾の進行方向に合わせて回転させるにはどのような計算で出せるのか?
DXライブラリではこの関数で回転させるみたいですが、DrawRotaGraph 
第四引数に計算式をあてはめるのだと思います。

説明が足りず混乱させてしまい申し訳ないです、この説明でわかっていただけたらと思います。
皆様、よろしくお願いします


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

Name: 名無しさん  ..ぴよぴよ(702ポイント)   Date: 2008/06/01(日) 12:00   No:16975     
Title: Re:細長い弾の進行方向と合わせた弾の回転    
2Dならば、頭を右向きにした画像を用意しておいて
角度=atan2(現在のy座標-1フレーム前のy座標,現在のx座標-1フレーム前のx座標);
で出した角度をDrawRotaGraphに与えてやればいいだけかと思います。


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

Name: 管理人 [URL]  ..伝説のハッカー(589,417ポイント)   Date: 2008/06/01(日) 15:08   No:16978     
Title: Re:細長い弾の進行方向と合わせた弾の回転    

http://dixq.net/s/31.html
このような動きでいいのでしょうか?

弾の軌跡を回転させるのではなく、弾の進行方向に向けて画像を回転させて表示させたいという事ですね?
進行方向という概念があるのなら、それを引数に渡せばいいだけです。

1、一応軌跡を回転させるには
π=PIとした時まず1回転は2*PIであらわせるのはいいでしょうか?
#define PI2 (3.1415926*2)
とでも定義しておいて、
PI2/360
これが1度に相当します。
今弾の角度が
angle=0
だとして、1度ずつ回転させるには
angle+=PI2/360;
です。これで時計回りになります。マイナスにすれば時計の反対周りです。

2、画像を回転させるには
その先ほどの進行方向angleを引数に渡せばいいだけですです。


typedef struct{
double x,y,angle,speed;
}bullet_t;

bullet_t bullet;

bullet.x=200;
bullet.y=200;
bullet.angle=PI2/4;
bullet.speed=2.0;

/***弾の軌跡計算部***/

bullet.x+=cos(bullet.angle)*bullet.speed;
bullet.y+=sin(bullet.angle)*bullet.speed;

/*****/

/***表示部***/

DrawRotaGraph(bullet.x,bullet.y,1.0,bullet.angle,画像,TRUE);

/*****/

これで弾は真下へと進み、弾の画像も増したに向きます。
このangleを変化させてやればそっちに進行し、画像もそっちに向きます。
 


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

Name: 鷹見  ..ぴよぴよ(832ポイント)   Date: 2008/06/02(月) 05:56   No:16988 解決!     
Title: Re:細長い弾の進行方向と合わせた弾の回転    
おはようございます。
返事が遅くなりました、お二人の提案された2つ方法を実際に実行した結果、

名無しさんの方法は。
綺麗に球の向きが進行方向を向いてくれました、弾の画像を横にするのは予め、
angle - PI/2で修正しました。

管理人さんの方法は。
なぜか弾の向きは、変化があるのとないのがありました、
私の方でなにか間違っている可能性が高いと思います。
基本的にはシューティングゲームの館の方式で書いていますが、Atan2で求めた数値を弾のAngleにいれたのを、
DrawRotaGraphの第4引数に入れる、ということですよね。

ラジアンや角度はまだ使い方が難しいです、
お二人の協力感謝します、ありがとうございました。


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



Name: こめかみ  ..かけだし(2,487ポイント)   Date: 2008/06/01(日) 05:25   No:16971       
Title: シューティングゲームの館18〜20の敵のショットについて    
以前お世話になったこめかみです。

敵のショットの動作について質問があります。

シューティングゲームの館、20章の時点で出来上がるサンプルプログラムで
敵キャラクターのショットの量が前半と後半で変わってしまう理屈がわかりません。

うまく質問できないのですが。
前半の9回の敵のショットより後半9回の敵のショットのスピードというか密度というか
2倍(感覚的に)になるのは何故なんでしょうか。


void EnemyPattern2(int i){
int j;
if(enemy[i].counter<50)
enemy[i].y+=4.0f;

if(enemy[i].counter==75){
for(j=0;j<ENEMY_TOTAL_NUM;j++)
if(EnemyShot[j].flag==0)
break;
EnemyShot[j].mem_ex=enemy[i].x;
EnemyShot[j].mem_ey=enemy[i].y;
EnemyShot[j].mem_px=Player.x;
EnemyShot[j].mem_py=Player.y;
EnemyShot[j].counter=0;
EnemyShot[j].flag=1;
EnemyShot[j].pattern=1;
EnemyShot[j].img=0;
}

if(enemy[i].counter>100)
enemy[i].y-=4.0f;
}


この当たりの関数に特に注目してサンプルをいじりながら考えているのですが。
埒が明かなく投稿させていただきました。
とりあえず一定の速度で発射させるのを目標にしています。
着眼点などのアドバイスよろしくお願いします。


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


Name: こめかみ  ..入門者(2,530ポイント)   Date: 2008/06/01(日) 05:39   No:16972     
Title: Re:シューティングゲームの館18〜20の敵のショットについて    
今日はバイトがあるのでそろそろ寝ます。
課題もあるので返信は遅くなってしまうかもしれません。

失礼します。


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

Name: 管理人 [URL]  ..伝説のハッカー(589,450ポイント)   Date: 2008/06/01(日) 16:15   No:16979     
Title: Re:シューティングゲームの館18〜20の敵のショットについて    
それは「敵が出現してから75カウント目に発射」というモジュールを使ってる面で
皆同じですが、その敵が出現するタイミングが違うからです。
敵の出現を管理しているswitch文に
case 50:
case 70:
case 90:
case 110:
case 130:
case 150:
case 170:
case 190:
case 210:
case 220:
case 230:
case 240:
case 250:
case 260:
case 270:
case 280:
case 290:
このようにかかれていると思います。
最初は20ずつだったのに、後半は10ずつになっていますよね。
なので、この間隔を全部同じにすれば同じになります。


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

Name: こめかみ  ..入門者(2,594ポイント)   Date: 2008/06/02(月) 04:37   No:16987 解決!     
Title: できました    
丁寧な回答ありがとうございます。

自分はswitch文の意味するところからよく分かっていなかったのですね。

理解できたのでしばらく敵の出現で遊んでみます。

一人で考えてたらきっとうまくいかなかったと思います。
感謝です。


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



Name: マサキ  ..初心者(6,312ポイント)   Date: 2008/05/30(金) 22:34   No:16936       
Title: プログラムの高速化について    
いま授業で「プログラムの実行結果を変えずに処理を高速化する」ということを実験しています。
これは当たり前のことですが、自分としてはwhile文やfor文による無駄な繰り返しをなくしたりすれば処理が早くなるのではないかと思いました。
この他にはどのようにすれば処理速度が向上するのか全然わかりません。
例えば標準関数のfgetcやfscanfといったように用いる関数によって処理速度は変わってくるものなのでしょうか?
処理の高速化にはどのような事が関連しているのでしょうか?

一応授業で扱ったプログラムも添付しておきます。
これはあるppm形式の画像をラプラシアンフィルタにかけ、新たな画像を作成するといったプログラムです。
今回はこのプログラムの高速化を図るわけですが
@画像のためのメモリは動的に確保する 
A画像のサイズは変えない
B結果画像が変わらない
という三つの制約があります。

どんな些細な事でも構いません。何かアドバイスよろしくお願いします。





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


Name: toyo  ..中級者(10,416ポイント)   Date: 2008/05/30(金) 23:07   No:16937     
Title: Re:プログラムの高速化について    
コンパイラのオプションで -O3 を指定する
というのは反則ですか


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

Name: たかぎ [URL]  ..プログラマー(38,611ポイント)   Date: 2008/05/30(金) 23:10   No:16938     
Title: Re:プログラムの高速化について    
まずは処理系を明確にしてください。
次に、プログラム中のどの部分に一番時間がかかっているのかを調べてください(大体予想はつきますが)。
話はそれからです。


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

Name: マサキ  ..初心者(6,437ポイント)   Date: 2008/05/30(金) 23:31   No:16939     
Title: Re:プログラムの高速化について    
>toyoさん
コンパイル時に −O2ならば使用しています。
説明不足でしたが、コンパイル=>実行の仕方は指定されていて

gcc -Wall -O2 ファイル名
time ./a.exe 処理を行いたい画像のファイル名 5.0

です


>たかぎさん
すいません。説明不足ですよね.....
WINDOWS上でCygwinを用いて実行しています。
やはりグレースケール画像作成・ラプラシアン計算の部分が一番時間がかかっていると思うのですが...


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

Name: ibis  ..中級者(9,438ポイント)   Date: 2008/05/30(金) 23:42   No:16940     
Title: Re:プログラムの高速化について    
普通は標準関数で言うとscanf、fscanf、printf、fprintfは遅いです。

コンパイラに最適化させる場合は、プログラマの手でソースを過剰に最適化してはいけません。
ループや定数の扱いなどは、コンパイラの最適化でも十分だったりしますので。
でも根本的にアルゴリズムを変えるような最適化(例えばprintfをputsに置き換えるとか)であれば、積極的にすべきですけど。
細かいところを自力で最適化したい場合は、アセンブラコードに変換してからですかね。

・・・というのは受け売りなんですがw


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

Name: たかぎ [URL]  ..プログラマー(38,815ポイント)   Date: 2008/05/30(金) 23:56   No:16941     
Title: Re:プログラムの高速化について    
第一印象では、一番遅そうな箇所はwrite_ppm_csq_memでした。
fwriteは、内部で排他制御を行っているため、結構オーバーヘッドが大きいはずです。そのような関数を1バイト書き込むごとに呼び出すのはよくありません。
putc_unlockedに置き換えてもよいのですが、(POSIX準拠ではありますが)非標準関数になってしまうので、いったんメモリ上でデータを作ってから一気に書き込んだ方が高速になる可能性があります。

あとは、配列の添え字計算も時間がかかりそうです。
laplasian関数内のkernelは、[3][3]ではなく、無駄なようでも[3][4]にした方が若干高速になります(3だとと、添え字の計算に乗算が必要になるため)。
それ以外は、-Sオプションを付けてコンパイル結果を確認し、配列の処理がうまく最適化されていない場合は、手作業で修正してください。


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

Name: たかぎ [URL]  ..プログラマー(39,031ポイント)   Date: 2008/05/31(土) 00:45   No:16942     
Title: Re:プログラムの高速化について    
コンパイル結果を調べてみましたが、配列の添え字に関しては十分最適化がかかっているようです。
改善の余地があるとすれば、回数の少ないループを開いてしまうことと、浮動小数点演算をなくすことぐらいです。

例えば、laplasianの
      for(i=-1;i<=1;i++)

for(j=-1;j<=1;j++)
val += gray[g+i][r+j]*kernel[i+1][j+1];


の部分は、ループの回数も固定なので、開いてしまえそうです。

また、make_gray_imageの
      gray[g][r]=(UCHAR)(tmp/3.0+0.5); /* 平均値を四捨五入 */



の部分は、
      gray[g][r]=(UCHAR)((tmp*10/3 + 5)/10); /* 平均値を四捨五入 */



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


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

Name: マサキ  ..初心者(6,563ポイント)   Date: 2008/05/31(土) 16:43   No:16953     
Title: Re:プログラムの高速化について    
返事が遅くなって申し訳ありませんでした。
>ibisさん
やはりscanf、fscanf、printf、fprintfなど、遅い関数は存在するんですね。
ありがとうございました。

> たかぎさん
なるほど。アドバイスありがとうございます。
それではさっそくこれらを参考にプログラムの修正に入っていこうと思います。
新たなプログラムができましたら一応添付しておきます。


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

Name: マサキ  ..初心者(7,074ポイント)   Date: 2008/05/31(土) 17:36   No:16960     
Title: Re:プログラムの高速化について    
とりあえず修正版のプログラムが完成したので添付しておきます。
今回の主な改善点は以下のようなものです。
@関数を直接入力する(関数呼び出しをなくす)
Aループ処理の内容を開いた形で記述
Bループ処理を行う場合はなるべくダウンカウンタで行う
C浮動小数点演算をなくす

のようなものです。
たしかに、たかぎさんの言ったようにプログラムを修正したら処理が早くなりました。ありがとうございました。
また、元のプログラムで作成した画像と修正後のプログラムで作成した画像をcmpコマンドを使って確かめたため、処理後の画像が変わってしまっている事はないと思います。

ここで更なる疑問なのですが、
#defineを使うよりも、直接入力した方が多少なりとも高速化が図れるのでしょうか?
なぜアップカウンタよりもダウンカウンタの方が処理が早くなるのでしょうか?
[3][3]ではなく[3][4]にした方がよいとありましたが、「3だと添え字の計算に乗算が必要になる」とはどういう意味でしょうか?
今回の場合画像のサイズが960×1280と決まっていたので、画像コピーなどのループ処理は少なくとも960*1280回以上行うということになります。そこで大げさな話ですが、やはりこのような場合でもfor文やwhile文による処理を行うよりも一つ一つの場合(960*1280個以上のパターン)を延々と書いた方が処理は早くなるのでしょうか?

質問ばかりですみません。



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

Name: マサキ  ..初心者(7,084ポイント)   Date: 2008/05/31(土) 17:38   No:16961     
Title: Re:プログラムの高速化について    
先ほど貼り忘れました。

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

Name: ibis  ..中級者(9,674ポイント)   Date: 2008/05/31(土) 18:02   No:16962     
Title: Re:プログラムの高速化について    
defineマクロはコンパイル時に展開されるので、実行時の速度には影響は無いです。

CPUの特性上、「x==y」「x!=y」よりも「x==0」「x!=0」の方が速いです。
アップカウンタは前者で、ダウンカウンタは後者ですから。

多次元配列のアドレスは乗算によって求められます。
ただし、整数どうしの乗算で「x*pow(2,y)」は「x<<y」に最適化できますから、乗算せずに済む場合もあります。
どちらの計算も同じ結果になりますが、後者の方が速いです。
「x*4」は「x*pow(2,2)」と等しいので「x<<2」に変換できますが、「x*3」ではそうはいきません。
それが3と4の違いです。


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

Name: たかぎ [URL]  ..プログラマー(39,182ポイント)   Date: 2008/06/01(日) 12:49   No:16976     
Title: Re:プログラムの高速化について    
> @関数を直接入力する(関数呼び出しをなくす)

これはちょっとやりすぎですね。
せめてインライン関数にする程度にとどめておきましょう。

> C浮動小数点演算をなくす

bairituが5.0だと決まっているのであれば、これも整数にできそうです。
汎用性と効率はトレードオフですので、高速化のために汎用性を捨てるのはやむを得ません。

> そこで大げさな話ですが、やはりこのような場合でもfor文やwhile文による処理を行うよりも一つ一つの場合> (960*1280個以上のパターン)を延々と書いた方が処理は早くなるのでしょうか?

これもやりすぎです。
長いループを開いてしまうと、キャッシュのヒット率が低下するなどの理由でかえって遅くなります。


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

Name: マサキ  ..初心者(7,254ポイント)   Date: 2008/06/01(日) 23:30   No:16986     
Title: Re:プログラムの高速化について    
>ibis さん
なるほど。だからダウンカウンタの方が速いんですね。
つまり終了条件のチェックがダウンカウンタの方が速いということですよね。
ありがとうございました。

>たかぎ
float型をint型に直したらけっこう時間速くなりました。
ありがとうございます。

インライン関数なんてものが存在したんですね?w
恥ずかしい事ながらこの存在を始めて知りました。
やはりまだまだ未熟者ですね。これからも頑張っていきたいと思うので、また何か躓いたと時は是非よろしくお願いします。


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



Name: aiai  ..ぴよぴよ(389ポイント)   Date: 2008/06/01(日) 20:28   No:16980       
Title: \を\\にするには    
char buf[30]の中身に
"C:\xxx\xxx\xxx\xxx\xxx.txt"という
文字列が入っていた場合
すべての"\"を"\\"に置き換える有効な手段は
ありませんか?

strcmpでbufの"\"と"\\"と比較しても
同じ文字と判断されなかったので
どなたかご教授願えないでしょうか?


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


Name: すく  ..ぴよぴよ(793ポイント)   Date: 2008/06/01(日) 21:18   No:16982     
Title: Re:\を\\にするには    
bufを1ずつ読み込んで比較しては。

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

Name: aiai  ..ぴよぴよ(455ポイント)   Date: 2008/06/01(日) 22:00   No:16983 解決!     
Title: Re:\を\\にするには    
やっぱり1つづつ調べて置き換えるしかないのですね。
文字の"\\"の比較ではうまくいかなかったので
1ずつ読みだして0x5cと比較することにしました。
すくさんありがとうございます。


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

Name: たかぎ [URL]  ..プログラマー(39,195ポイント)   Date: 2008/06/01(日) 23:18   No:16984     
Title: Re:\を\\にするには    
元の文字列がSJISだと、もう少し煩雑になりますね。


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

Name: ibis  ..中級者(9,687ポイント)   Date: 2008/06/01(日) 23:22   No:16985     
Title: Re:\を\\にするには    
ところで\の代わりに/は使えませんかねぇ?

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



Name: 合虎  ..ぴよぴよ(45ポイント)   Date: 2008/05/29(木) 18:17   No:16897       
Title: DXライブラリで文字が出力できません    
VisualC++ 2008を使っているのですが、文字を出力することができません。
私はノートパソコンを使っているので、PCの空き容量がすごく少なく、700MB前後しかありません
なにか関係があるのでしょうか??
誰か助けてください


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


Name: DIL  ..ぴよぴよ(308ポイント)   Date: 2008/05/29(木) 18:31   No:16899     
Title: Re:DXライブラリで文字が出力できません    
まずは、どのようなプログラムを書いたのか投稿したほうがいいと思いますよ。

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

Name: 会虎  ..ぴよぴよ(329ポイント)   Date: 2008/05/29(木) 19:23   No:16900     
Title: Re:DXライブラリで文字が出力できません    
すいませんでした。プログラムはこれですが、管理人様のプログラムをスックリそのまま移しただけなのでプログラム自体に問題はないと思います

プログラム↓


#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了


int White;
White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得

DrawString( 0, 0, "hello! DX Library!" , White); //文字列表示
DrawString(100,100, "こんにちは! DXライブラリ!" , White);//文字列表示


WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}


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

Name: miss  ..ぴよぴよ(0ポイント)   Date: 2008/05/29(木) 19:27   No:16901     
Title: 無題    
これはミスです

Name: bodomcross  ..かけだし(1,439ポイント)   Date: 2008/05/29(木) 21:25   No:16904     
Title: Re:無題    
コンパイルエラーなどはでませんか?
エラーの内容によっては、設定の間違いなどもありますので詳細を教えてください


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

Name: 合虎  ..ぴよぴよ(155ポイント)   Date: 2008/05/30(金) 07:51   No:16912     
Title: Re:無題    
デバックしたときは警告0、エラー0と出るので、コンパイルは正常に終了していると思います
VisualC++2008自体の設定は変えていないのでそこにも問題はないと思うのでもう手も足も出ません(^^;
VisualC++2008 はここからDLしました→http://www.microsoft.com/japan/msdn/vstudio/express/default.aspx


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

Name: bodomcross  ..かけだし(1,506ポイント)   Date: 2008/05/30(金) 08:42   No:16913     
Title: Re:無題    
私のPCでは、表示ができました。
if( DxLib_Init() == -1 ) return -1;
の次に、ProcessMessage();
を入れたらどうなるでしょうか?


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

Name: 合虎  ..ぴよぴよ(184ポイント)   Date: 2008/05/31(土) 07:25   No:16945     
Title: Re:無題    
ProcessMessage();を入れてみましたが、変化なしでした。
でも、全画面にすると正常に動くということがわかりました


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

Name: bodomcross  ..かけだし(1,577ポイント)   Date: 2008/06/01(日) 20:45   No:16981     
Title: Re:無題    
んーどうなのでしょう?

もしかして、プロジェクトを作るときに、間違ってるのかなぁ?

わからないやww

わかる方いらっしゃいましたら、回答お願いします


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



Name: あなざぁ  ..ぴよぴよ(276ポイント)   Date: 2008/06/01(日) 10:39   No:16974       
Title: 敵が弾を撃ってこない・・・    

http://homepage2.nifty.com/natupaji/DxLib/lecture/lecture1_8.html

こちらのサンプルソースを参考にシューティングの原型?
を作ろうとしているのですが、敵が弾を撃ってきません。
確かに EShotCounter = 0;
(EShotCounter == 60 なら弾を撃つ)
と初期化して、
EShotCounter++;
と更新しているはずですが・・・

いくら待っても撃ってくれません^^;
どういうミスなんでしょうか?





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


Name: あなざぁ  ..ぴよぴよ(323ポイント)   Date: 2008/06/01(日) 13:45   No:16977 解決!     
Title: Re:敵が弾を撃ってこない・・・    

すいません。自己解決しました。

間違っていた箇所:

EShotCounter == 0;
       ↑タイプミス。初期化できていない


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



Name: リマーン  ..ぴよぴよ(215ポイント)   Date: 2008/05/30(金) 02:54   No:16909       
Title: このサイトの事ですが。    
C言語ではなく、このサイトの事ですが、今私はゲームプログラミング館でC言語の勉強をさせてもらっています。ただいま、入門編を終わり少し疑問に思ったのですが、このゲームプログラミング館に書いてある章を全て終わったとしてどれくらいの実力が付くのでしょうか?


1.ゲームプログラミングで使われる基本的な関数を覚える。
2.他のC言語でゲームを作るサイトの内容を理解できるようになる。
3.簡単なゲームなら作成可能。

ここに書いてある章を全て終わった方よろしければ教えてください。



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


Name: 管理人 [URL]  ..伝説のハッカー(588,089ポイント)   Date: 2008/05/30(金) 03:54   No:16910     
Title: Re:このサイトの事ですが。    
それは読んだ人がどれ位勉強するかによると思います。
「高校出たらどれ位の学力が身に付く?」と聞いてるのと同じようなもので、
勉強したとしても、教科書をただ眺めているだけでは身に付かないです。

「ゲームプログラミングの館を終えたけど、全然ゲームの作り方がわかない」
という人と、
「館を読んだらサクサクゲームが作れるようになった」
という人がいらっしゃるようです。
恐らく前者の方は、ただ端から読んだだけ。
自分でコンパイルしたりしてみず、少し疑問があっても、そのまま次の章にいったりすることを繰り返し、
内容を理解した「つもり」でドンドン先に行ってしまう。
それだと結局最後まで読んでも、何が身に付いたのかいまいちわからない・・という事になると思います。

プログラミングは数学と同じです。
社会の教科書はただ教科書を読んで暗記すれば、学校のテスト位ならいい点取れるでしょう。
でも、数学の教科書を流し読みしたところで、問題が解けるようにはなりません。
とにかく演習が大事です。
関数の使い方は読んでわかるようなものでも、是非自分でコンパイルして結果を確かめてみて下さい。
自分で変形してみたり、使い方をかえて実行してみたりすることで使い方が身に付きます。

サンプルはあくまでサンプルであり、そのサンプルは関数を理解する為の補足なのですから、それが主体ではありません。
サンプルを元に、自分であれこれ作り変えてみて、使っていく中で理解して下さい。
もしそれを全てやっていけばかなり力が付くと思います。

実際私が初めてゲームを作った時は、こんなサイトも無かったですし、知識もありませんでした。
入門編あたりの知識さえなかったです。

とりあえずDrawGraph関数の使い方だけ知ってました。

画像さえ表示できたら何とかゲームっぽくなりますしね。
裏画面処理なんて知るはずもなかったですから、どうしたらチラチラしなくなるんだろう・・と考えたり、
どうしたら2つの画像を同時に動かせるんだろう・・と考えていくうちに応用できるようになっていきました。

知識はなくともゲームは作れます。その質や効率はおいておくとして。

とにかくプログラムは試行錯誤、演習が大事です。
頑張って下さい。


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

Name: 雷(携帯)  ..ぴよぴよ(2ポイント)   Date: 2008/05/30(金) 07:32   No:16911     
Title: Re:このサイトの事ですが。    
管理人さんの言う通りかと

やる気がある人はここ以外でも色々なサイトを回るでしょうし

一度読み終わったら、自分で考えて
あ、これがしたい、どうやったかな…
って時に利用するのはどうかな?と思います

実際はそう利用させてもらっています
完成したものはありませんがw


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

Name: リーマン  ..ぴよぴよ(279ポイント)   Date: 2008/05/31(土) 19:20   No:16967     
Title: Re:このサイトの事ですが。    
お二人とも返信ありがとうございます。
返信された言葉を見ながら、我ながらアホな事を質問したなと思ってました。
「この参考書やれば東大上がりますか?」なんて事言ってる様なものですね。


管理人さんがおっしゃる様に、
演習しないとなかなか覚えたり、使う事が出来ないなと思ったので、
最初の方から自分なりに、
各章のサンプルをコンパイルするのは当然として
この数字、この記号を変えたらこれがどう動くのか?
この動きと反対の動きをさせるにはどこをいじればいいのか?
っていうのはやっていました。

管理人さんがおっしゃっている前者の方にならないように今後も気を受けます。



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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(76,266ポイント)   Date: 2008/05/31(土) 20:49   No:16968     
Title: Re:このサイトの事ですが。    
うーん、一番困っているのが実際に使えるようになってもどのようなプログラムを組むかという問題なんですよね。
やはり創造力が必要になりますね。これはプログラムのWebページや参考書などで教えてくれるものではありません。
これが数学と一番違うところですね。


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



Name: ランド  ..かけだし(1,309ポイント)   Date: 2008/05/30(金) 20:10   No:16934       
Title: listでの末尾データ交換、削除    
Zを押すと弾情報を追加し、
弾が画面外に出ると 末尾データを代入→末尾データを削除 としたいのですが、
弾の数が3個以上のとき、画面外に出るとフリーズしてしまいます。
intでの解説+サンプルを見ながら自分なりに作ってみたので、
処理順序か何かが変な部分があると思うんですが…
(たぶんフリーズ原因はSHOTHandleだと)

とりあえず関係してる部分のソースを書き出します。
開発環境はBCC Developerです。

#include "DxLib.h"
#include <list>
#include <stdio.h>

struct ShotManage{
int flag; //敵か味方か

double x,y;
double movex,movey;

int sizex,sizey;
int type;
int range;
int atk;
};

list <ShotManage> shot;

void SHOTHandle(void);
void CreateShot(int men,int human,int type,double x,double y);

void SHOTHandle(void){

if( shot.empty()!=1 ){ //空で無ければ

list<ShotManage>::iterator it;
ShotManage obj;

for( it = shot.begin(); it != shot.end() ; ++it){
obj = *it;

if(obj.x>800 || obj.x<-160
||obj.y>480+obj.sizey/2
||obj.y<0-obj.sizey/2 ){ //画面外に出たら

list<ShotManage>::iterator lastobj; //末尾の1つ後
lastobj = shot.end();
lastobj--; //末尾にずらす

obj = *lastobj; //末尾情報を消したい弾に上書き

shot.pop_back(); //末尾削除

if( shot.empty()==1 ){break;}

}

obj.x+=obj.movex;
obj.y+=obj.movey;

*it = obj;

}

}
}

void CreateShot(int men,int human,int type,double x,double y){

ShotManage obj;

obj.flag=human;//敵か味方か
obj.x=x;obj.y=y;
obj.type=type;

GetGraphSize( pic.shot[obj.type] , &obj.sizex , &obj.sizey ) ;
obj.range =(obj.sizex>obj.sizey)? obj.sizey:obj.sizex;

if(human==mikata){

if(type==0){

obj.movex=8;
obj.movey=0;
obj.atk=1;

}
}

if(human==teki){
     //敵の弾
}

shot.push_back(obj);
}


何度もすみませんが、よろしくお願いします。


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


Name: ランド  ..かけだし(1,092ポイント)   Date: 2008/05/31(土) 12:40   No:16947     
Title: Re:listでの末尾データ交換、削除    
vectorと違って削除部分以外のイテレータはそのまま使っても大丈夫・・・だそうなので、
書き直してみましたが、個数に関わらず要素削除時にフリーズするようになりました。


void SHOTHandle(void){

list<ShotManage>::iterator it;
ShotManage obj;

for( it = shot.begin(); it != shot.end() ; ++it){


obj = *it;

obj.x+=obj.movex;
obj.y+=obj.movey;

*it = obj;

if(obj.x>800 || obj.x<-160
||obj.y>480+obj.sizey/2
||obj.y<0-obj.sizey/2 ){

shot.erase(it);

}

}

}


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

Name: しっぽ  ..中級者(10,045ポイント)   Date: 2008/05/31(土) 12:56   No:16948     
Title: Re:listでの末尾データ交換、削除    
最初のは


for( it = shot.begin(); it != shot.end() ; ++it){
}

の中がおかしいです。

リストに2つ以上の要素があり、最後の要素がそれ自身と入れ替え対象になった場合、
shot.pop_back() で無効になったイテレータに対し
*it = obj;
という操作が行われてしまいます。


2番目のは
無効になったイテレータで、forの操作を続けるからです。


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

Name: ランド  ..かけだし(1,308ポイント)   Date: 2008/05/31(土) 16:10   No:16952 解決!     
Title: Re:listでの末尾データ交換、削除    
3時間かかりましたが、解決できました!
どうもありがとうございました!

*it = obj;を先に回したり、
lastobjを使わずに =back() で代入したり など色々いじってみましたが、

if( it == lastobj ){ shot.pop_back() ; break;}
をはさんでみたところ、正常に動作しました。

3個以上発生させたときに、半分ぐらいまでは正常に削除できるという不可思議な現象に悩まされてましたが、
>>最後の要素がそれ自身と入れ替え対象に〜 のおかげで、
それ自身が対象になるタイミングが入れ替え動作でずれていることに気づくことができました。

また、>>無効になったイテレータで〜 も、解決の糸口になりました。

//有効なイテレータかチェックする関数があればいいんですけどね、無効にならないようにすることが大事なんですかね・・・


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

Name: ibis  ..中級者(9,483ポイント)   Date: 2008/05/31(土) 17:08   No:16956     
Title: Re:listでの末尾データ交換、削除    
tryブロック内でイテレータが指す要素にアクセスすれば、有効か無効か判定できますよ。

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



Name: あなざぁ  ..ぴよぴよ(486ポイント)   Date: 2008/05/31(土) 14:46   No:16949       
Title: 無題    
こんにちは。
エラーが消えなくて困ってます。

ソースを実行すると、このようなエラーが出ます。
(コンパイラ:Borland、DxLibを使用)

エラー E2030 C:\borland\work\shoot\shoot.cpp 260: break の位置が誤っている(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
エラー E2030 C:\borland\work\shoot\shoot.cpp 262: break の位置が誤っている(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
エラー E2040 C:\borland\work\shoot\shoot.cpp 270: 宣言が正しく終了していない
エラー E2190 C:\borland\work\shoot\shoot.cpp 272: 不要な }
*** 4 errors in Compile ***

** error 1 ** deleting Debug\shoot.obj

上の4つは中カッコの関係で日常茶飯事なんですが、一番気になるのが下のエラーです。
確かに見てみるとプロジェクトファイルの中にOBJファイルがないんです。
これはいったいどういうことなのでしょうか?(^^;)





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


Name: lbfuvab  ..ぴよぴよ(667ポイント)   Date: 2008/05/31(土) 15:16   No:16950     
Title: Re:無題    
まず4つのエラーを潰しましょう。


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

Name: box  ..ハッカー(110,771ポイント)   Date: 2008/05/31(土) 15:23   No:16951     
Title: Re:無題    
> 一番気になるのが下のエラー

4つのエラーの方を気にしてください。
日常茶飯事であっては、大いにまずいと思いますよ。

下のエラーは、4つのエラーが出なくなれば、
自然に消えます。


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

Name: あなざぁ  ..ぴよぴよ(451ポイント)   Date: 2008/05/31(土) 16:56   No:16954 解決!     
Title: Re:無題    
そうだったんですね。
中カッコが多いとどうも・・・
がんばって探してみます。


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



Name: やまさん  ..かけだし(1,332ポイント)   Date: 2008/05/30(金) 17:33   No:16930       
Title: 最大値・最小値の求め方を教えてください。    
こんにちは^^
「四聖龍神録」楽しくPLAYさせて頂きました^^v
以前からこちらのサイトを拝見させて頂いており、
将来的には自分もシューティングゲームを作りたいと思っています><
「シューティングゲームの館」では、
あまり前提知識を要さなくともゲームを作る楽しさを教えて下さるとの事ですが、
元々C言語には興味があり(プログラムと言えばCしか聞いたことなかっただけですがf^^;)
今はC言語の基礎を少しずつ勉強しています。
そんな中、分からない事がでてきましたのでご教授頂ければ幸いですm(__)m

Windows XP
Visual Studio 2005 を使用しています。

問題は、
0〜100の範囲で入力された複数の数値の中から、最大値と最小値を求めて表示するプログラムの作成です。
条件として、
・−1が入力された時点で数値の入力は終了する。
・最大値と最小値はmain関数以外の関数で求める。
・入力された数値を記憶する配列は10とする。
・数値の範囲を0〜100としているが、それ以外の数値が入力された場合の事は考えて無くても良い。



#include<stdio.h>

int sub(int suuti[],int *max,int *min);

int main(void)
{
int i=0,suuti[10],max=0,min=100;

for(i=0;i<10;i++){
printf("%d番目の数値を入力して下さい。",i+1);
scanf("%d",&suuti[i]);
if(suuti[i] == -1)
break;
}

sub(suuti,&max,&min);

printf("最大値は%d 最小値は%d",max,min);


fflush(stdin);
getchar();
return 0;
}



int sub(int suuti[],int *max,int *min)
{
int i;

for(i=0;i<10;i++){
if(*max < suuti[i]){
*max = suuti[i];
}
if(*min > suuti[i]){
*min = suuti[i];
}
if(suuti[i] == -1){
break;
}
}
return 0;
}


上記のプログラムでは自分の期待する結果が得られます。
が、これは問題が解けず、解答を見て自分のソースを改善したプログラムです。
ポインタについてまだ全然理解していないですが、このプログラムについては、
sub関数で変数 max と min のアドレスに数値を代入し、main関数でそのアドレスから数値を取り出してる?
と自分では理解しています。(間違っていれば指摘お願いします><ポインタ難しいです;;)
が、なぜそうしなければならないのかが分かりません。
下記のプログラムは解答を見る前に自分が書いたものです。


#include<stdio.h>

int sub(int suuti[],int max,int min);

int main(void)
{
int i=0,suuti[10],max=0,min=100;

for(i=0;i<10;i++){
printf("%d番目の数値を入力して下さい。",i+1);
scanf("%d",&suuti[i]);
if(suuti[i] == -1)
break;
}


sub(suuti,max,min);

printf("最大値は%d 最小値は%d",max,min);


fflush(stdin);
getchar();
return 0;
}



int sub(int suuti[],int max,int min)
{
int i;

for(i=0;i<10;i++){
if(suuti[i] == -1){
break;
}
if(max < suuti[i]){
max = suuti[i];
}
if(min > suuti[i]){
min = suuti[i];
}

}
return 0;
}


自分としてはこれで問題ないと思っていたのですがf^^;
「main関数で宣言しているmaxとmin」と「sub関数内のmaxとmin」は別の物なんでしょうか?
maxとminをグローバル変数で宣言したらいいのかとも思いましたが、結果に変化なかったですf^^;
話が横道にもそれ、長くなりましたが、
何故このプログラムで最大・最小を求められないのか教えて頂きたいです。
宜しくお願いします。


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


Name: ibis  ..中級者(9,225ポイント)   Date: 2008/05/30(金) 19:30   No:16932     
Title: Re:最大値・最小値の求め方を教えてください。    
mainのmaxとsubのmaxは別物ですよ。
引数として渡すときにmainのmaxの複製物が作られます。
その複製物がsubのmaxなわけです。
複製物(subのmax)を書き換えてもオリジナル(mainのmax)には影響は無いですから、
それに影響を与えようとするとポインタが必要になるわけです。


グローバル変数にしたというのは多分、宣言箇所を変えただけですよね?
宣言箇所をグローバルスコープにすればmainからもsubからも扱えますが、
引数として渡せばやはり複製されますよ。
そうするとsubは複製物(subのmax)もオリジナル(グローバルのmax)も両方扱えそうに思えますが、
実際には複製物が優先されます。
グローバルスコープで宣言すれば引数でなくても扱えます。
引数にしなければ複製物が作られることはなく、その場合はオリジナルを扱えます。


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

Name: やまさん  ..かけだし(1,704ポイント)   Date: 2008/05/31(土) 09:35   No:16946 解決!     
Title: Re:最大値・最小値の求め方を教えてください。    
ありがとうございます^^

引数として渡すときにmainのmaxの複製物が作られるんですか><
それは知らなかったですf^^;
試しに、sub関数内にprintfで出力すると上手くいっていたので、
subの方のmax,minが複製された物でmainの方に影響しないと言うのが実感でしました^^v

ポインタも理解できなく、必要あるのか?と疑問でしたが・・・あぁ〜必要かな?と思えてきましたf^^;
ただ、現在、何かプログラムを作ろうとする時、
自力で「ポインタを使おう」と言う考えが出てこないですね;;
ま、そこは経験を積んで身に付けるしかないですかねf^^;頑張ります><b

おかげさまで、自分のプログラムでは失敗した理由・ポインタが必要だった理由が分かりました^^
また、グローバルスコープで宣言すれば引数でなくても扱えると言うアドバイスのおかげで、
ポインタを使わない組み方でも成功する事ができました^^(引数として渡す事に拘ってましたねf^^;)

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


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



Name: yos  ..初心者(5,164ポイント)   Date: 2008/05/30(金) 18:28   No:16931       
Title: 無題    
一応、ゲームが完成したんですけど、
ゲームをやめた時にLog.txtが、勝手に作られます。
どうすれば、作られないようにできますか?


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


Name: ibis  ..中級者(9,291ポイント)   Date: 2008/05/30(金) 19:34   No:16933     
Title: Re:無題    
デバッグビルドではないですかねぇ?
多分、リリースビルドしてみるとよろしいかと思いますが。


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

Name: 管理人 [URL]  ..伝説のハッカー(588,339ポイント)   Date: 2008/05/30(金) 21:29   No:16935     
Title: Re:無題    
ログを出力しない関数を呼べば生成されませんよ。
DXライブラリの初期化関数の前に
SetOutApplicationLogValidFlag関数を呼んで下さい。

まず、DXライブラリのリファレンスページを確認します。

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

今回はログ関係の関数が無いか探してみたいので「ログ」で検索してみましょう。
アナログという言葉にひっかかるので、何件か違う項目がひっかかりますが、
ログの出力関係の関数が見つかるはずです。
リファレンスページで検索かけると大抵見つかりますよ。


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

Name: yoa  ..ぴよぴよ(8ポイント)   Date: 2008/05/31(土) 04:32   No:16943 解決!     
Title: Re:無題    
解決しました。
ありがとうございます。

一応、調べてはいたんですが、調べ方が悪かったみたいです。

あと、タイトルをいれるのを忘れてました。
すみません。 orz


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



Name: あなざぁ  ..ぴよぴよ(0ポイント)   Date: 2008/05/30(金) 15:38   No:16925       
Title: 当たり判定・・・    

DxLibを使ってます。

シューティングゲームを作ろうと、
今、ゲームプログラミングで当たり判定を勉強中です・・
あるサンプルコードをみながらプログラムを書いているのですが、

こんなプログラムです。

画像を操作し、スペースキーを押すと自機から弾が発射される。
敵は左右をウロチョロしていて、敵に弾が当たるとその弾が消える。
弾は最大20個まで画面に存在できる。
スペースキーを連続押ししても弾は一度しか発射されない。

これでプログラムを組んだのですが、
弾が消えないのです。
確かに
if(ShotFlag[i]==0)と書いたのですが・・・
どこの部分がおかしいのでしょうか。

ソースは以下の通りです。
本当に長いので、見るのは暇な時だけで結構です。


大体こんな感じです。

OreX,OreY,OreGraph(俺(自機のこと、笑)のX座標、Y座標、画像)
EnemyX,EnemyY,EnemyGraph(敵の情報、上記と同じ)
EnemyW,EnemyH(敵の横幅、縦幅)
ShotX[SHOT],ShotY[SHOT],ShotFlag[SHOT],ShotGraph
(弾のX座標、Y座標、弾の存在しているかしていないかのフラグ、画像)
※0:存在しない、1:存在する
ShotW,ShotH(弾の横幅、縦幅)
ShotBFlag(前のループでスペースキーを押したかのフラグ(連続で出ることの防止))
i (for文用)





#include "DxLib.h"

#define SHOT 20

//WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )

{

int OreX, OreY, OreGraph;
int EnemyX, EnemyY, EnemyGraph, EnemyMuki;
int EnemyW, EnemyH;
int ShotX[SHOT], ShotY[SHOT], ShotFlag[SHOT], ShotGraph;
int ShotW, ShotH;
int ShotBFlag;
int i;

//画面モード
ChangeWindowMode( TRUE );

//Dxライブラリ初期化
if(DxLib_Init()== -1) return -1;

//裏画面モード
SetDrawScreen(DX_SCREEN_BACK);

//画像ロードと座標設定
OreGraph = LoadGraph("俺.bmp");
OreX=320; OreY=400;

EnemyGraph = LoadGraph("私.bmp");
EnemyX=0; EnemyY=50;

ShotGraph = LoadGraph("弾.png");

//弾はまだ画面上に存在しない
for(i=0;i<SHOT;i++)
{
ShotFlag[i] = 0;
}


ShotBFlag = 0;

EnemyMuki = 1;

//敵の画像サイズ
GetGraphSize(EnemyGraph, &EnemyW, &EnemyH);

//弾の画像サイズ
GetGraphSize(ShotGraph, &ShotW, &ShotH);

//移動ルーチン
while(1)
{
//画面の初期化
ClearDrawScreen();

//自分の操作ルーチン
{
if(CheckHitKey(KEY_INPUT_RIGHT)==1)OreX+=3;
if(CheckHitKey(KEY_INPUT_LEFT)==1)OreX-=3;
if(CheckHitKey(KEY_INPUT_UP)==1)OreY-=3;
if(CheckHitKey(KEY_INPUT_DOWN)==1)OreY+=3;

//スペースを押したら処理を分岐
if(CheckHitKey(KEY_INPUT_SPACE))
{
if(ShotBFlag == 0)
{
//画面に出ていない弾を調べる
for(i=0;i<SHOT;i++)
{
if(ShotFlag[i]==0)
{
int Ow,Oh,Sw,Sh;

GetGraphSize(OreGraph,&Ow,&Oh);
GetGraphSize(ShotGraph,&Sw,&Sh);

ShotX[i]= (Ow-Sw)/2 + OreX;
ShotY[i]= (Oh-Sh)/2 + OreY;

ShotFlag[i]=1;


break;
}
}

}

ShotBFlag = 1;
}
else
{

ShotBFlag=0;

}

//はみ出し修正

if(OreX<0)OreX=0;
if(OreX>640-63)OreX=640-63;
if(OreY<0)OreY=0;
if(OreY>480-65)OreY=480-65;

//俺描画
DrawGraph(OreX,OreY,OreGraph,TRUE);

}

//弾の数だけ弾を動かす処理をする
for(i=0;i<SHOT;i++)
{
//弾の移動ルーチン
if(ShotFlag[i]==1)
{
ShotY[i]-=16;

if(ShotY[i]<-80)
{
ShotFlag[i]=0;
}

//弾描画

DrawGraph(ShotX[i],ShotY[i],ShotGraph,TRUE);

}
}

//敵移動ルーチン
{

if(EnemyMuki==1)EnemyX+=3;
if(EnemyMuki==0)EnemyX-=3;

if(EnemyX>576)
{
EnemyX=576;
EnemyMuki=0;
}

if(EnemyX<0)
{
EnemyX=0;
EnemyMuki=1;
}

//敵描画
DrawGraph(EnemyX,EnemyY,EnemyGraph,FALSE);
}

//弾と敵の当たり判定 弾の数だけ繰り返す
for(i=0;i<SHOT;i++)
{
//弾iが存在するときのみ
if(ShotFlag[i]==0)
{
//当たり判定
if( ( ( ShotX[i] > EnemyX && ShotX[i] < EnemyX + EnemyW ) ||
( EnemyX > ShotX[i] && EnemyX < ShotX[i] + ShotW ) ) &&
( ( ShotY[i] > EnemyY && ShotY[i] < EnemyY + EnemyH ) ||
( EnemyY > ShotY[i] && EnemyY < ShotY[i] + ShotH ) ) )

{
//接触している場合は弾の存在を消す
ShotFlag[i]=0;
}
}
}

ScreenFlip();

if(ProcessMessage()<0)break;

if(CheckHitKey(KEY_INPUT_ESCAPE))break;
}

DxLib_End();

return 0;

}










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


Name: しりうす〜  ..入門者(3,701ポイント)   Date: 2008/05/30(金) 16:48   No:16927     
Title: Re:当たり判定・・・    
存在しない弾の当たり判定しかしてないからじゃないかな。

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

Name: あなざぁ  ..ぴよぴよ(51ポイント)   Date: 2008/05/30(金) 16:50   No:16928     
Title: Re:当たり判定・・・    
余談ですが、
敵の画像データが「私」となっているのは、
自機の画像を2候補作ったので、片方余ったからです。
(あまり気にしないでください)


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

Name: あなざぁ  ..ぴよぴよ(98ポイント)   Date: 2008/05/30(金) 16:53   No:16929 解決!     
Title: Re:当たり判定・・・    

本当ですね!!

すみません。くだらない失敗で・・・(汗)


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


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



Name: Haru  ..かけだし(2,247ポイント)   Date: 2008/05/26(月) 16:03   No:16812       
Title: 参考書    
C言語で私今使ってる参考書が、
著 高橋麻奈 の『やさしいC』と『ここから始めるC言語』
という本なんですが、次のステップに進む為の良いお勧めの書籍ありますか?
ネットでも調べてみたんですが、実際に皆さんが使っててこの書籍はよかった!
みたいなものがあったら、良かったら教えてください。


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


Name: lbfuvab  ..ぴよぴよ(774ポイント)   Date: 2008/05/26(月) 18:06   No:16816     
Title: Re:参考書    
実際にプログラムを組んではどうでしょうか?

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

Name: 管理人 [URL]  ..伝説のハッカー(588,754ポイント)   Date: 2008/05/26(月) 18:11   No:16817     
Title: Re:参考書    
ウェブ上でも結構勉強出来ますよ。「C言語 入門」でググれば色々出てきます。

私は明解C言語という本を持っていました。

しかし基本がある程度出来たのなら実際に自分でいろんなプログラム書いてみる方が成長が早いと思います。
WINAPIを学んで、簡単なエディタソフトを作ってみるとか、DXライブラリを学んでうちのゲームプログラミングの館で紹介しているようなゲームを作ってみるとか。

線形リスト、クイックソート、再帰関数などの各種アルゴリズムはそのとき必要になったら勉強するスタイルでいってみてはどうでしょう。


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

Name: box  ..ハッカー(110,759ポイント)   Date: 2008/05/26(月) 22:07   No:16828     
Title: Re:参考書    
どんな分野のプログラムを作るにしろ、
ポインタの知識は不可欠です。
ポインタの説明だけに的を絞った本が出ていますので、
お読みになってみてはいかがでしょうか。

「C言語ポインタ完全制覇」前橋和弥著 技術評論社
ISBN 9784774111421

「図解C言語 ポインタの極意」柴田望洋著 ソフトバンククリエイティブ
ISBN 9784797331189


その後は、アルゴリズムとデータ構造の基礎を
勉強すればよいのではないかと思います。
ある種のデータ構造を理解するにはポインタの知識が必要で、
先に勉強しておいた内容がここで役立ちます。


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

Name: すく  ..ぴよぴよ(773ポイント)   Date: 2008/05/26(月) 22:45   No:16830     
Title: Re:参考書    
高橋麻奈 いろいろ出してますね。
SWの本も出してますよね。

単純なCなら、OS自作入門
が面白かったです。


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

Name: Haru  ..かけだし(2,404ポイント)   Date: 2008/05/29(木) 12:28   No:16887     
Title: Re:参考書    
皆さん、ありがとうございます。
>lbfuvabさん

どのようなプログラムを作ればよいのかわからなかったので参考書を・・。と、思って、質問しました。
説明が足りなくてすいません。

>管理人さん

いつも、親切にありがとうございます。
まずはWEBでぐぐってみたりして学ぶ事にしようとおもいます!

>boxさん
ポインタに的を絞ってあるのは、ありがたいですね。
さっそく探してみようとおもいます。

>すくさん

高橋麻奈の本は結構わかりやすかったので気に入っています!
OS自作入門ですね!探してみます!




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

Name: Mist  ..初心者(5,477ポイント)   Date: 2008/05/29(木) 14:13   No:16890     
Title: Re:参考書    
> どのようなプログラムを作ればよいのかわからなかったので参考書を・・。と、思って、質問しました。

う〜ん、自分がどんなソフトを作りたいかという目的が見つからないから、入門書を読みまくって知識だけ
ためようというのは、目的(ソフトを作る)と手段(プログラミング)が入れ替わってしまっているように思い
ます。

私は
1.こんなソフトが作りたい(例えばゲームとか)
2.プログラムしてみたけど思うようにいかない
3.わからない部分を本・ネットで勉強する、調べる
という流れが自然な気がします。
Haruさんはすでに「まったくプログラムができない」レベルは卒業されているとおもいますので、目的を
持って学習されることをお勧めします。


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

Name: Haru  ..かけだし(2,488ポイント)   Date: 2008/05/29(木) 14:22   No:16891     
Title: Re:参考書    
>Mistさん

目的ですね!
う〜ん・・・。
個人的にだったら・・・
ゲームを勉強するのが面白そうなんで、ゲームを勉強してみますね!
会社的には良いのかな?(笑)


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

Name: Mist  ..初心者(5,850ポイント)   Date: 2008/05/29(木) 18:08   No:16896     
Title: Re:参考書    
> 会社的には良いのかな?(笑)
いいんじゃないでしょうか。
どんな仕事をしている会社なのかはわかりませんが、仕事だけでは身につくスキルに偏りがでますし
無茶もできなかったりしますので、ゲーム作りを通して仕事ではできないようなことにチャレンジ
していけば、結果として仕事の役に立つ場合もあります。
仕事中にやるのはだめだけどね(^^:


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

Name: Haru  ..入門者(2,678ポイント)   Date: 2008/05/30(金) 12:55   No:16914     
Title: Re:参考書    
>MISTさん

私が働いている、会社は派遣会社なんで、仕事の依頼がこないと、どんな仕事内容になるかは
わからないんです(本当かな?笑)
なので、とにかく今は勉強になる事はなんでもしてみようと思います!
頑張って、少しでも早く質問する立場から回答することができる立場へいきたいと思います!

それと、質問なんですが、今私が勉強している、C言語とC++とはどのように違うんでしょうか?
Cを習得するまでC++には手をつけないほうが良いでしょうか?


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

Name: Mist  ..初心者(6,079ポイント)   Date: 2008/05/30(金) 13:35   No:16916     
Title: Re:参考書    
> C言語とC++とはどのように違うんでしょうか?
それこそ、ググればいくらでも詳しい解説ページが出てくると思いますが(^^;

まぁ、一言で言えば似て非なるものです。
C++はCの拡張版であって上位版ではありません。
Cを理解していればC++の習得は早くなるかもしれませんが、最初からC++を学習したとしても問題ありません。
両方同時のどっちつかずはまずいのかもしれませんが、仕事の場合
「できない」=「仕事なし」
となる場合もあるので、基本的な部分は早い段階で押さえておいたほうがいいと思います。

私は組み込み系のSE/PGしていますが、組み込みはハード制約上C++が使えないことがよくあるのでCのほうが
中心ですがゲームを作るときなどはC++を使って勉強しながらやってます。


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

Name: Haru  ..入門者(2,625ポイント)   Date: 2008/05/30(金) 14:15   No:16919     
Title: Re:参考書    
>mistさん

確かにそれこそ、ググりなさい。って感じの質問でした。
言われて初めて気づきました(笑)
なるほどです・・・。わかりやすい解説ありがとうございます!


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

Name: バグ  ..比類無きプログラマー(88,285ポイント)   Date: 2008/05/30(金) 14:48   No:16922     
Title: Re:参考書    
C言語とC++は似て非なる物です。考え方が全然違います。
オブジェクト指向というものが分かり始めた時にC++の便利さに気付くと思いますよ。


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

Name: Haru  ..入門者(2,671ポイント)   Date: 2008/05/30(金) 15:46   No:16926     
Title: Re:参考書    
>バグさん

ありがとうございます!
オブジェクト指向ですね・・・!
とにかく頑張れって、意味で捉えてもいいでしょうか(^^;笑


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



Name: あなざぁ  ..ぴよぴよ(757ポイント)   Date: 2008/05/30(金) 14:14   No:16918       
Title: バグについて    

コンパイルしてエラーが発生したときに、
バグの部分を自分で見つけ出すコツはありますか?