C言語何でも質問掲示板


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

規約と使い方

 
   for文の不思議   
     ・[6508] Justy 
     ・[6509] box 
     ・[6510] Justy 
     ・[6511] 大工 
   タイミング合わせとは   
     ・[6484] Justy 
     ・[6486] たのもー 
     ・[6488] Justy 
     ・[6489] 管理人 
     ・[6506] たのもー 
   入力関数について   
     ・[6452] 組木紙織 
     ・[6453] 大工 
     ・[6468] 組木紙織 
     ・[6470] 大工 
     ・[6471] miyaza 
     ・[6472] 大工 
     ・[6474] miyaza 
     ・[6477] 大工 
     ・[6494] 組木紙織 
     ・[6495] 大工 
     ・[6497] Justy 
     ・[6504] 組木紙織 
     ・[6505] 大工 
   背景等が描画できませ ....   
     ・[6461] 管理人 
     ・[6473] 一本杉 
     ・[6476] 雷 
     ・[6478] 管理人 
     ・[6479] 一本杉 
     ・[6480] 一本杉 
     ・[6491] 管理人 
   シューティングゲーム ....   
     ・[6340] はね 
     ・[6349] 管理人 
     ・[6369] 管理人 
     ・[6419] はね 
     ・[6430] 管理人 
     ・[6446] はね 
     ・[6447] 管理人 
     ・[6454] はね 
     ・[6463] 管理人 
     ・[6481] はね 
     ・[6483] 管理人 
     ・[6485] 管理人 
     ・[6487] はね 
     ・[6490] 管理人 
   テトリス作ってみまし ....   
     ・[6425] 雷#wing 
     ・[6427] バグ 
     ・[6432] 管理人 
     ・[6437] 雷#wing 
     ・[6439] バグ 
     ・[6441] 雷 
     ・[6455] 管理人 
     ・[6466] 雷 
     ・[6469] バグ 
     ・[6475] 雷 
   大学取得教科について ....   
     ・[6379] 管理人 
     ・[6383] むつ 
     ・[6424] 雷#wing 
     ・[6433] 管理人 
     ・[6442] 雷 
     ・[6443] むつ 
     ・[6444] 管理人 
     ・[6450] 雷 
     ・[6456] 管理人 
     ・[6464] 雷 
   シューティングゲーム ....   
     ・[6403] 管理人 
     ・[6405] かりなん 
     ・[6406] 管理人 
     ・[6407] 管理人 
     ・[6408] 管理人 
     ・[6409] かりなん 
     ・[6410] 管理人 
     ・[6411] かりなん 
     ・[6412] 管理人 
     ・[6413] GPGA 
     ・[6428] 管理人 
     ・[6436] Justy 
     ・[6445] 管理人 
     ・[6448] Justy 
     ・[6457] 管理人 
     ・[6459] Justy 
     ・[6462] 管理人 
   ゲーム画面の大きさ   
     ・[6394] 管理人 
     ・[6420] tower 
     ・[6421] GPGA 
     ・[6431] 管理人 
     ・[6434] tower 
   MakeFile   
     ・[6417] box 
   DrawFormat ....   
     ・[6395] 管理人 
     ・[6397] 管理人 
     ・[6399] BAZZ 
     ・[6400] 管理人 
   文字配列をint型に   
     ・[6382] 熱海 
     ・[6384] むつ 
     ・[6386] 管理人 
     ・[6387] box 
     ・[6388] 管理人 
     ・[6396] 熱海 
   実行時のエラーについ ....   
     ・[6355] miyaza 
     ・[6356] miyaza 
     ・[6358] 大工 
     ・[6359] 熱海 
     ・[6360] 大工 
     ・[6361] miyaza 
     ・[6362] miyaza 
     ・[6363] miyaza 
     ・[6367] 組木紙織 
     ・[6368] Justy 
     ・[6373] 管理人 
     ・[6381] 熱海 
     ・[6385] 管理人 
   無題   
     ・[6342] 管理人 
     ・[6343] ダッシュ 
     ・[6344] 管理人 
     ・[6345] 管理人 
     ・[6346] ダッシュ 
     ・[6347] ダッシュ 
     ・[6348] 管理人 
     ・[6350] ダッシュ 
     ・[6351] 管理人 
     ・[6352] ダッシュ 
     ・[6370] 管理人 
     ・[6372] ダッシュ 
     ・[6374] 管理人 
   オプションについて   
     ・[6337] Hermit 
   はじめまして、visual ....   
     ・[6319] 管理人 
     ・[6320] kaoru 
     ・[6321] 管理人 
   配列を仮引数に   
     ・[6317] 管理人 
   構造体へのポインタ?   
     ・[6312] box 
     ・[6313] ちょっぴ 
   分割コンパイルについ ....   
     ・[6092] box 
     ・[6093] jugS 
     ・[6094] box 
     ・[6095] jugS 
     ・[6096] box 
     ・[6098] jugS 
     ・[6099] box 
     ・[6124] jugS 
     ・[6276] jugS 
     ・[6279] Justy 
     ・[6288] jugS 
     ・[6290] Justy 
     ・[6291] jugS 
     ・[6292] keichan 
     ・[6293] keichan 
     ・[6294] jugS 
   バッチファイルでじゃ ....   
     ・[6267] 管理人 
     ・[6271] Justy 
     ・[6289] GPGA 
   マップチップ・キャラ ....   
     ・[6256] Justy 
     ・[6259] 管理人 
     ・[6269] 風鈴 
     ・[6270] 管理人 
     ・[6273] 風鈴 
     ・[6274] 管理人 
     ・[6275] 風鈴 
     ・[6277] 管理人 
     ・[6284] 管理人 
   スーパーボムマン   
     ・[5925] 管理人 
     ・[6006] Justy 
     ・[6007] 管理人 
     ・[6014] Justy 
     ・[6022] 管理人 
     ・[6070] 管理人 
     ・[6100] ダッシュ 
     ・[6104] 管理人 
     ・[6136] Justy 
     ・[6214] 管理人 
     ・[6223] むつ 
     ・[6237] Justy 
     ・[6242] 管理人 
     ・[6243] 管理人 
     ・[6244] Justy 
     ・[6245] 管理人 
     ・[6246] 管理人 
     ・[6248] Justy 
     ・[6250] ダッシュ 
     ・[6252] 管理人 
     ・[6253] Justy 
     ・[6254] 管理人 
     ・[6272] Justy 
     ・[6278] 管理人 
     ・[6280] Justy 
     ・[6281] 管理人 
     ・[6282] Justy 
     ・[6283] 管理人 
     ・[59241184912795] 管理人 
   C言語の質問ではないの ....   
     ・[6261] 管理人 
     ・[6262] 雷#wing 
     ・[6263] 管理人 
     ・[6264] 管理人 
     ・[6265] 雷#wing 
     ・[6268] 管理人 
   シューティングゲーム ....   
     ・[6251] 管理人 
     ・[6257] はね 
     ・[6258] 管理人 
   入力制限のしかた   
     ・[6226] miyaza 
     ・[6229] いさご 
     ・[6230] miyaza 
     ・[6231] miyaza 
     ・[6233] いさご 
     ・[6234] miyaza 
     ・[6235] むつ 
     ・[6236] 組木紙織 
     ・[6247] いさご 
   VC express edition の ....   
     ・[6238] 組木紙織 
     ・[6239] Justy 
     ・[6240] 組木紙織 
     ・[6241] Blue 
   超入門者コード   
     ・[6208] Blue 
     ・[6209] ※ 
     ・[6210] 長 
     ・[6212] keichan 
     ・[6220] 管理人 
     ・[6225] 長 
     ・[6227] box 
     ・[6228] 長 
   音声ファイルが再生で ....   
     ・[6202] バグ 
     ・[6206] * 
     ・[6219] 管理人 
     ・[6222] * 
   malloc と free につい ....   
     ・[6216] Blue 
     ・[6217] なぎ 
     ・[6218] そら 
     ・[6221] そら 
   ループについて   
     ・[5997] box 
     ・[6009] ループ 
     ・[6010] 管理人 
     ・[6203] ループ 
     ・[6204] Yuki 
     ・[6205] バグ 
     ・[6211] ※ 
     ・[6215] ループ 
   ジャンケンプログラム ....   
     ・[6122] 管理人 
     ・[6123] 管理人 
     ・[6201] バグ 
   文字列bの最初の単語だ ....   
     ・[6173] なぎ 
     ・[6193] なぎ 
     ・[6199] ケン@ポチ 
   ファイル入出力   
     ・[6127] のん 
     ・[6128] miyaza 
     ・[6129] のん 
     ・[6131] のん 
     ・[6132] miyaza 
     ・[6133] miyaza 
     ・[6134] のん 
     ・[6138] のん 
     ・[6140] miyaza 
     ・[6141] のん 
     ・[6145] のん 
     ・[6148] 組木紙織 
     ・[6150] のん 
     ・[6152] 組木紙織 
     ・[6153] のん 
     ・[6154] のん 
     ・[6155] 組木紙織 
     ・[6156] 組木紙織 
     ・[6157] のん 
     ・[6159] のん 
     ・[6160] なぎ 
     ・[6161] miyaza 
     ・[6162] なぎ 
     ・[6163] miyaza 
     ・[6165] のん 
     ・[6166] miyaza 
     ・[6167] バグ 
     ・[6168] のん 
     ・[6170] miyaza 
     ・[6171] のん 
     ・[6172] miyaza 
     ・[6174] のん 
     ・[6175] miyaza 
     ・[6176] のん 
     ・[6177] miyaza 
     ・[6178] のん 
     ・[6179] のん 
     ・[6180] miyaza 
     ・[6181] miyaza 
     ・[6182] のん 
     ・[6184] のん 
     ・[6185] miyaza 
     ・[6186] のん 
     ・[6187] miyaza 
     ・[6190] のん 
     ・[6192] miyaza 
     ・[6194] のん 
     ・[6197] miyaza 
     ・[6198] のん 

Name: 大工  ..中級者(14,999ポイント)   Date: 2007/04/05(木) 22:53   No:6507       
Title: for文の不思議    

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


#define Correct 1
#define Error 0

enum eScale { binary, octal, hexadecimal, decimal, } scale_pat;

void input_scale(int scale_pat);
//基数変換をする関数.
void f_binary(char value[], int b_null);
void f_octal(char value[], int b_null);
void f_hexadecimal(char value[], int b_null);
void f_decimal(char value[]);

int main (void){

int cnt, check, e;
char msg[10];


printf("Please choose the following\n\n");
printf("binary scale : 1\noctal scale : 2\nhexadecimal scale : 3\ndecimal scale : 4\n\n");

printf("Please input >>>");

do{
scanf(" %d", &cnt);
e = getchar();

switch(cnt){

case 1:
input_scale(binary);
check = Correct;
break;

case 2:
input_scale(octal);
check = Correct;
break;

case 3:
input_scale(hexadecimal);
check = Correct;
break;

case 4:
input_scale(decimal);
check = Correct;
break;

default :
printf("*Error*\n");
printf("Please input different value >>>");
check = Error;
break;
}
}while(check == Error);

return 0;
}
void input_scale(const int scale_pat){

int a, cnt, check;
char scale[10];

printf("Please input the number >>>");

fgets(scale, sizeof(scale), stdin);


switch(scale_pat){
case binary:
//構文チェックを行う.
for(cnt = 0, check = 0; scale[cnt] != '\n'; cnt++){
if(scale[cnt] == '0' || scale[cnt] == '1') check++;
}
if(check == cnt) f_binary(scale, check - 1);//2進数からの他の進数に変換する関数を呼ぶ.
else{
fprintf(stderr, "*Error*\n");//エラー時に強制終了する.
exit(EXIT_FAILURE);
}

break;

case octal:
//構文チェックを行う.
if(scale[0] != '0'){
printf("*Error*\n");
exit(EXIT_FAILURE);
}
for(cnt = 0, check = 0; scale[cnt] != '\n'; cnt++){
if(scale[cnt] != '8' && scale[cnt] != '9') check++;
}
if(check == cnt) f_octal(scale, check - 1);//2進数からの他の進数に変換する関数を呼ぶ.
else{
fprintf(stderr, "*Error*\n");//エラー時に強制終了する.
exit(EXIT_FAILURE);
}

break;

case hexadecimal:
//構文チェックを行う.
if(scale[0] != '0' || scale[1] != 'x'){
fprintf(stderr, "*Error*\n");//エラー時に強制終了する.
exit(EXIT_FAILURE);
}
for(cnt = 2, check = 2; scale[cnt] != '\n'; cnt++){
if(isxdigit(scale[cnt])) check++;
}
if(check == cnt) f_hexadecimal(scale, check - 1);//10進数からの他の進数に変換する関数を呼ぶ.
else{
fprintf(stderr, "*Error*\n");//エラー時に強制終了する.
exit(EXIT_FAILURE);
}

break;

case decimal:

//構文チェックを行う.
for(cnt = 0, check = 0; scale[cnt] != '\n'; cnt++){
if(isdigit(scale[cnt])) check++;
}
if(check == cnt) f_decimal(scale);//10進数からの他の進数に変換する関数を呼ぶ.
else{
fprintf(stderr, "*Error*\n");//エラー時に強制終了する.
exit(EXIT_FAILURE);
}

break;

}

return;
}
void f_binary(char value[], int b_null){

int cnt;

for(cnt = 0; value[cnt] != '\0'; cnt++){


}
}
void f_octal(char value[], int b_null){

int cnt;

for(cnt = 0; value[cnt] != '\0'; cnt++){


}
}
void f_hexadecimal(char value[], int b_null){

int cnt;

for(cnt = 0; value[cnt] != '\0'; cnt++){


}
}
void f_decimal(char value[]){

int decimal, cnt = 0, a_dec[100];

decimal = atoi(value);

//2進数に変換.
for(cnt = 0; decimal != 0; cnt++){
a_dec[cnt] = decimal % 2;//余り
decimal /= 2;
}
for(cnt -= 1; cnt >= 0; cnt--){
printf("%d", a_dec[cnt]);
}
printf("(2)\n");

//8進数に変換.
for(cnt = 0; decimal != 0; cnt++){
a_dec[cnt] = decimal % 8;//余り
decimal /= 8;
}
for(cnt -= 1; cnt >= 0; cnt--){
printf("%d", a_dec[cnt]);
}
printf("(8)\n");

//16進数に変換.
for(cnt = 0; decimal != 0; cnt++){
a_dec[cnt] = decimal % 16;//余り
decimal /= 16;
}
for(cnt -= 1; cnt >= 0; cnt--){
switch(a_dec[cnt]){

case 10:
printf("A");
break;

case 11:
printf("B");
break;

case 12:
printf("C");
break;

case 13:
printf("D");
break;

case 14:
printf("E");
break;

case 15:
printf("F");
break;

default :
printf("%d", a_dec[cnt]);
break;

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

return;
}


昨日質問したものとちょっと違うので新しくトピを立てさせていただきます。
f_decimal関数内の2進数に変換するfor文はちゃんと動いてくれるのですがそれ以降の8進数・16進数のところはまるでコメントアウトしているように振舞われるのです。(まるでなかったように)


原因を教えて頂けませんか?

環境はCygwinです。


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


Name: Justy  ..比類無きプログラマー(75,956ポイント)   Date: 2007/04/05(木) 23:01   No:6508     
Title: Re:for文の不思議    
 f_binary / f_octal/ f_hexadecimal関数ですか?
 きっと何もしてないので、コンパイラによって削除されてしまったんでしょう。

 "int cnt"を "volatile int cnt"とすると消されずに済むかもしれませんよ。


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

Name: box  ..比類無きプログラマー(62,346ポイント)   Date: 2007/04/05(木) 23:02   No:6509     
Title: Re:for文の不思議    
2進数への変換が終わったとき、decimalの値はゼロになっています。
したがって、8進数や16進数への変換を行なうためのループを、
一度も実行しません。


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

Name: Justy  ..比類無きプログラマー(75,986ポイント)   Date: 2007/04/05(木) 23:08   No:6510     
Title: Re:for文の不思議    
 失礼しました。
 f_decimalの中の8進数・16進数の処理ですね。

 ただ単に for文の中の条件式にマッチしなかったからじゃないでしょうか。

 f_decimal関数の先頭で atoiで変数 decimalに値を設定していますが、
直後の2進数変換の中で decimal値が0に変化してしまっています。

 その変化した decimal値をもって8・16進数に変換しようとしているので、
for文の条件に失敗していると思われます。



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

Name: 大工  ..上級者(15,051ポイント)   Date: 2007/04/05(木) 23:29   No:6511     
Title: Re:for文の不思議    
あ―!!

分かりました、ありがとうございます。

不完全ですがここはこうした方がいいとかあったら教えて下さい><;


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



Name: たのもー  ..かけだし(1,237ポイント)   Date: 2007/04/05(木) 00:06   No:6482       
Title: タイミング合わせとは    
先日はありがとうございました。とても勉強になりました。
今回の質問の内容は以下のものです。
C言語のDOS用のゲームをダウンロードしてソースをよんでいると
疑問が出てきました。

@ タイミング合わせとは何か。

A 10〜18行目までの/*〜/*に意味があるのか。

B return 0; はなくてもよいのか。
というものです。
今回もよろしくお願いします。 


   ↓↓  ソースです(一部省略)  ↓↓


#include <stdio.h>

void main()
{
int ans,ti,wron;
/*wronは不正解回数ansは回答*/
wron=0;
printf("<<E n g l i s h T e s t>>\n\n");//タイトル表示

/*
printf("[]\n\n");
printf("( ).\n");
printf("1: 2: 3: 4:\n");
scanf("%d",&ans);
if(ans==2){printf("正解 \n\n");}
if(ans==1||ans==3||ans==4){printf("× 正解は \n\n\a");wron++;}
for(ti=1;ti<300000000;ti++){} //タイミング合わせ
*/

printf("「何してるの?」\n「今コンピュータでゲームをやってるんだ。」\n\n");
printf("What are you doing?\nI'm ( ) PC game.\n");
printf("1:play 2:playing 3:plaing 4:praying\n");
scanf("%d",&ans);
if(ans==2){printf("正解 play gameでゲームをする\n\n");}
if(ans==1||ans==3||ans==4){printf("× 正解は2 play gameでゲームをする\n\n\a");wron++;}
for(ti=1;ti<300000000;ti++){} //タイミング合わせ

printf("[その植民地は本国から独立した。]\n\n");
printf("The colony became independent( )the mother country.\n");
printf("1:from 2:of 3:on 4:to\n");
scanf("%d",&ans);
if(ans==2){printf("正解 become independent of〜で〜から独立する\n\n");}
if(ans==1||ans==3||ans==4){printf("× 正解は2 become independent of〜で〜から独立する\n\n\a");wron++;}
for(ti=1;ti<300000000;ti++){} //タイミング合わせ
}
 
 


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


Name: Justy  ..比類無きプログラマー(75,712ポイント)   Date: 2007/04/05(木) 00:28   No:6484     
Title: Re:タイミング合わせとは    
 たのもーさん、とてもいい質問ですね。


@ タイミング合わせとは何か
 時間調整です。
 無駄に forループを走らせることで、CPUに意味もなく負荷をかけて、
次の処理の実行を遅らせます。

 ただ、マシンによって待ち時間が変わってしまうという問題と
最適化をかけてコンパイルすると、この処理は無駄と判断されて
消えてしまうかもしれないので、現在では使用されることはない手法です。


A 10〜18行目までの/*〜/*に意味があるのか
 特に意味はないと思います。
 一連の処理を実行したくないとき、コメント化する(コメントアウトと呼ばれています)ことで
コンパイル対象からその部分を外す為の手法です。
 きっと、この作者はこのプログラムにとっては不要だけれども、一応念の為に
とっておこうと思ったのではないでしょうか。


 ただ、/*〜*/は
/*

printf("[]\n\n"); /* 表示 */
printf("( ).\n");
*/
 のようにネストが出来ません。

 通常、複数行を纏めてコメントアウトしたい場合は(C99準拠 or C++なら)
//   printf("[]\n\n");		/* 表示 */

// printf("( ).\n");


 のように // を使うか

#if 0

printf("[]\n\n"); /* 表示 */
printf("( ).\n");
#endif
 のように #if を使用します。


B return 0; はなくてもよいのか
 原則としては必要です。main関数の戻り値は int型ですから。
 対象の処理系が認めていれば必要ないことがありますが、滅多に認めていません。


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

Name: たのもー  ..かけだし(1,290ポイント)   Date: 2007/04/05(木) 01:44   No:6486 解決!     
Title: Re:タイミング合わせとは    
早い解答ありがとうございます。
一読しただけで理解できるほどわかりやすかったです^^。
さすが比類無きプログラマーだなと思いました。
また質問にくると思いますがそのときはよろしくお願いします。


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

Name: Justy  ..比類無きプログラマー(75,848ポイント)   Date: 2007/04/05(木) 02:31   No:6488     
Title: Re:タイミング合わせとは    
早い解答ありがとうございます。
 いえ、どういたしまして。

また質問にくると思いますがそのときはよろしくお願いします
 はーい、こちらこそよろしくお願いします。


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

Name: 管理人 [URL]  ..ハッカー(271,251ポイント)   Date: 2007/04/05(木) 03:19   No:6489     
Title: Re:タイミング合わせとは    
必要ないかもしれないですけど、タイミング合わせについて、補足します。

上記のやりかたでは一定時間待つことが出来ませんでしたね。
そこを解決する方法を書きます。

この方法は色々あるのですが、一番お手軽なのが「Sleep関数」を使う事です。
引数にした時間だけ処理を止めてくれる関数です。
これを使用するときは、プログラムの最初にwindows.hをインクルードしましょう。


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

int main(void){
printf("エンターを押すとタイマー(3秒)スタート\n");

while(getchar()!='\n'); //エンターが押されるまで意味のないループ

printf("タイマースタート!\n\n");

Sleep(3000);

printf("3秒経ちました。\n");

return 0;
}

実行結果

エンターを押すとタイマー(3秒)スタート

タイマースタート!

3秒経ちました。


 
 
しかしSleep関数は処理を止めてしまう関数なので、その間に何かしたくても出来ません。
そういう意味で、常に現在の時間を取得して計算する方法がより有効です。



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

int main(void){
clock_t t;

printf("エンターを押すとタイマー(3秒)スタート\n");

while(getchar()!='\n'); //エンターが押されるまで意味のないループ

printf("タイマースタート!\n\n");

t=clock(); //今の時間を取得

while(clock()-t<3000); //3000ミリ秒経つまで意味のないループ

printf("3秒経ちました。\n");

return 0;
}

実行結果

エンターを押すとタイマー(3秒)スタート

タイマースタート!

3秒経ちました。

 
 
 
このclock()関数の返り値は特有のclock_t型なので注意してください。
深くしりたければこの関数について検索かければ沢山出てきます。
この関数はパソコンの電源をつけてから経過した時間で、「ミリ秒(1/1000秒)」で返されます。
ですからこのような計算ができるわけですね。

これを利用してストップウォッチなんかが作れます。


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


int main(void){
clock_t t;
printf("エンターを押すと計測スタート\n");
while(getchar()!='\n'); //エンターが押されるまで意味のないループ
printf("計測スタート!\n");
t=clock(); //今の時間を取得
while(getchar()!='\n'); //エンターが押されるまで意味のないループ
printf("計測時間 %.3f秒\n",(clock()-t)/1000.0);
return 0;
}

実行結果

エンターを押すと計測スタート

計測スタート!

計測時間 4.468秒

 
 
 
これはSleep関数では出来なかった事ですね。このようにclock関数を使うと時間を計測しながら、常にユーザーの動きをチェックしたり他の処理を行ったり出来ます。

参考までに。

p.s.
clock_t型は 
typedef long clock_t;
で定義されているので(システムによって違う場合があります)、普通は普通のint型だと思っていいと思います。


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

Name: たのもー  ..かけだし(1,328ポイント)   Date: 2007/04/05(木) 22:37   No:6506 解決!     
Title: Re:タイミング合わせとは    
返事遅れてすみませんm(_ _)m
いや〜実に詳しい解説ありがとうございます。
参考書の内容を超えていましたよ。
本当にありがとうございました。


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



Name: 大工  ..中級者(13,462ポイント)   Date: 2007/04/03(火) 23:16   No:6451       
Title: 入力関数について    

#include <stdio.h>

#define Correct 1
#define Error 0

enum eScale { binary, octal, hexadecimal, decimal, } scale_pat;

void input_scale(int scale_pat);

int main (void){

int cnt, check;
char msg[10];


printf("Please choose the following\n\n");
printf("binary scale : 1\noctal scale : 2\nhexadecimal scale : 3\ndecimal scale : 4\n\n");

printf("Please input >>>");

do{
scanf("%d", &cnt);

switch(cnt){

case 1:
input_scale(binary);
check = Correct;
break;

case 2:
input_scale(octal);
check = Correct;
break;

case 3:
input_scale(hexadecimal);
check = Correct;
break;

case 4:
input_scale(decimal);
check = Correct;
break;

default :
printf("*Error*\n");
printf("Please input different value >>>");
check = Error;
break;
}
}while(check == Error);

return 0;
}
void input_scale(const int scale_pat){

int a;
char msg[10];

gets(msg);

printf("test is %s\n", msg);

return;
}



いま作っているプログラムは途中なので目的は伏せて起きます.
input_scale関数(現在はテスト中なので内容は変わりますが)内でgets(msg)がうまく動いてくれません。ですがscanf("%s", msg)とするとうまく動いてくれます。

どうしてこのような事態がおこってしまうんでしょうか?

あと、よかったらで良いのですがscanf(" %d", &val)でa(文字)を入力したとしたら暴走しますがこれを回避するために一度文字列として入力して(getsを用いて)それをisdigitを使って判断し、それからungetcを使ってバッファにもどしscanfを使ってとりこんだほうが効率てきなのでしょうか?


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


Name: 組木紙織  ..中級者(9,332ポイント)   Date: 2007/04/03(火) 23:46   No:6452     
Title: Re:入力関数について    
最初にscanf()したときにバッファに'\n'が残っており、その状態でgets()を使ったので'\n'のみが読み込まれ、
gets()は'\n'を'\0'に変換し、最終的にmsg[10]に入るのは'\0'だけとなるのでうまく動かないのではないかと思います。


>あと、よかったらで良いのですがscanf(" %d", &val)でa(文字)を入力したとしたら暴走しますがこれを回避するために一度文字列として入力して(getsを用いて)それをisdigitを使って判断し、それからungetcを使ってバッファにもどしscanfを使ってとりこんだほうが効率てきなのでしょうか

gets()で取り込んだならsscanf()を使ったらよいのではないかと思います。戻り値を調べれば判断できたと思います。
一度バッファに戻すとその分だけ効率が落ちるような気がするので。


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

Name: 大工  ..中級者(13,490ポイント)   Date: 2007/04/04(水) 00:17   No:6453     
Title: Re:入力関数について    
返信ありがとうございます。

fflushを使ってバッファクリアしようと思ったのですがうまくいきません><;


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

Name: 組木紙織  ..中級者(9,379ポイント)   Date: 2007/04/04(水) 08:07   No:6468     
Title: Re:入力関数について    
fflushは出力に対して効果がある関数だったはずなので、
rewind(stdin)
を使ったらどうでしょうか?


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

Name: 大工  ..中級者(13,514ポイント)   Date: 2007/04/04(水) 12:09   No:6470     
Title: Re:入力関数について    
ん〜・・・それでも動いてくれません><;

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

Name: miyaza  ..初心者(8,384ポイント)   Date: 2007/04/04(水) 13:05   No:6471     
Title: Re:入力関数について    
>ん〜・・・それでも動いてくれません><;
rewind()を使う場所がおかしいんじゃないですか?
まあ、ソースが無いので予想ですが。

具体的にどのように修正したかを書かないと適切な回答を得るのが難しくなると思います。


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

Name: 大工  ..中級者(12,552ポイント)   Date: 2007/04/04(水) 14:08   No:6472     
Title: Re:入力関数について    

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

#define Correct 1
#define Error 0

enum eScale { binary, octal, hexadecimal, decimal, } scale_pat;

void input_scale(int scale_pat);
void f_binary(char value[], int b_null);



int main (void){

int cnt, check;
char msg[10];


printf("Please choose the following\n\n");
printf("binary scale : 1\noctal scale : 2\nhexadecimal scale : 3\ndecimal scale : 4\n\n");

printf("Please input >>>");

do{
scanf(" %d", &cnt);
rewind(stdin);

switch(cnt){

case 1:
input_scale(binary);
check = Correct;
break;

case 2:
input_scale(octal);
check = Correct;
break;

case 3:
input_scale(hexadecimal);
check = Correct;
break;

case 4:
input_scale(decimal);
check = Correct;
break;

default :
printf("*Error*\n");
printf("Please input different value >>>");
check = Error;
break;
}
}while(check == Error);

return 0;
}
void input_scale(const int scale_pat){

int a, cnt, check;
char scale[10];

gets(scale);

switch(scale_pat){
case binary:
for(cnt = 0, check = 0; scale[cnt] != '\0'; cnt++){
if(scale[cnt] == '0' || scale[cnt] == '1') check++;
}
printf("check == %d, cnt == %d\n", check, cnt);
if(check == cnt) f_binary(scale, check);
else{
printf("*Error*\n");//エラー時に強制終了する.
exit(EXIT_FAILURE);
}

break;

case octal:

break;

case hexadecimal:

break;

case decimal:

break;

}

return;
}
void f_binary(char value[], int b_null){
printf("(;゜д゜)ァ....\n");
}



こんな感じです。


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

Name: miyaza  ..初心者(8,496ポイント)   Date: 2007/04/04(水) 14:35   No:6474     
Title: Re:入力関数について    
最初に1番を選んだ場合
gets()で入力された文字が'1'か'0'だけであるかを調べてそうであるなら(;゜д゜)ァ....を表示ということでよろしいのでしょうか。
こちらでは表示されましたが、どのような不具合が出るのでしょうか?
gets()での入力もできましたが・・・


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

Name: 大工  ..中級者(12,552ポイント)   Date: 2007/04/04(水) 16:01   No:6477     
Title: Re:入力関数について    
>最初に1番を選んだ場合
gets()で入力された文字が'1'か'0'だけであるかを調べてそうであるなら(;゜д゜)ァ....を表示ということでよろしいのでしょうか。

現時点では不完全ですがそのような感じです。(ですが文字ではなく文字列です)

>こちらでは表示されましたが、どのような不具合が出るのでしょうか?
gets()での入力もできましたが・・・

getsでの入力ができなかったんです><;

実行してみると>>>>

Please choose the following

binary scale : 1
octal scale : 2
hexadecimal scale : 3
decimal scale : 4

Please input >>>1
check == 0, cnt == 0
(;゜д゜)ァ....

のようになり文字(列)が入力できることなく終了してしまっているのです。(getsの部分がコメントアウトしているような状況です。)


Name: 組木紙織  ..中級者(9,467ポイント)   Date: 2007/04/05(木) 07:37   No:6494     
Title: Re:入力関数について    
fflush(stdin)とrewind(stdin)は標準入力に扱うと実装依存らしいです。

bccとVC両方でrewind(stdin)は扱えたので気づかなかったです。
getchar()を使うとか、gets()を二回使うなどして、読み捨ててあげれば出来と思います。


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

Name: 大工  ..中級者(12,562ポイント)   Date: 2007/04/05(木) 12:17   No:6495     
Title: Re:入力関数について    
実装依存って・・・?

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

Name: Justy  ..比類無きプログラマー(75,895ポイント)   Date: 2007/04/05(木) 17:31   No:6497     
Title: Re:入力関数について    
>実装依存って・
 言語の仕様書に規定されていない為、環境(OSとかコンパイラとか)に
よって動作が異なることです。


>fflush(stdin)とrewind(stdin)は標準入力に扱うと実装依存らしいです。

 あれ? そうでしたっけ?

 確かに前者の fflush(stdin)は実装依存というか完全に規定外です。
 fflushは出力ストリームか直前の操作が入力ではない更新ストリーム用なので、
入力ストリームには使えません。
(環境によっては動いてしまうかもしれませんが。)


 しかし、後者の rewindはストリームならどれでもOKだったと記憶しています。

 最も rewindを使う用途が「キーボードバッファをクリアしたい」のだとすると
標準入力ストリーム(stdin)がキーボードバッファとつながっているかどうかがは
環境次第なので実装依存か、とは思いますが。


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

Name: 組木紙織  ..中級者(9,646ポイント)   Date: 2007/04/05(木) 22:33   No:6504     
Title: Re:入力関数について    
少し調べてみました。
c言語のJIS規格(JISX3010)ではfflush()は入力ストリームは未定義をしてあり、
rewind(stdin)はfseek(stdin, OL,SEEK_SET)と等価であるとして、fseekは入力ストリームと出力ストリーム
両方とも使えるとしてあるので、
上で述べたrewind()は実装依存らしいというのは間違いでした。

訂正します。不正確な情報を出してしまってすみませんでした。


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

Name: 大工  ..中級者(12,610ポイント)   Date: 2007/04/05(木) 22:37   No:6505     
Title: Re:入力関数について    
みなさん、返信ありがとうございました。

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



Name: 一本杉  ..ぴよぴよ(39ポイント)   Date: 2007/04/04(水) 01:51   No:6460       
Title: 背景等が描画できません。    
初めまして、一本杉と申します。
他に解決策が思いつかない&過去ログを見ても解決策が見つからなかったので、
掲示板を使わせて頂きました。

シューティングゲームの館の4章「基本的な関数を作る。」のソースをコンパイルしたところ、
コンパイルは問題なかったのに右下にFPSが表示されるだけで、プレイヤー、背景が描画できません。
五分くらい放置しても駄目でした。

ゲームプログラミングの館の3章「画像を表示する。」は問題なく描画できたので、
ためしに22章「キャラを4方向に歩かせる。」のソースに3章で使った”back.bmp”を背景に描画する
プログラムを付け加えてみたところコンパイルは正常なのに、
プレイヤーが描画されるだけで背景は描画できませんでした。

解決策としてLoadGraph関数の変わりに、似た様な機能を持つLoadImage関数を
使ってみたのですが、引数の設定でエラー吐かれて挫折。
背景を無限ループ使って無理矢理描画してみたら、案の定PCがフリーズして挫折。


どうすればシューティングゲームの館4章に出てくるプレイヤー、背景が描画できますか?

環境はVC++6.0です。


   
   





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


Name: 管理人 [URL]  ..ハッカー(269,584ポイント)   Date: 2007/04/04(水) 02:24   No:6461     
Title: Re:背景等が描画できません。    
初めまして。一本杉さん、管理人です。

おや、、3章がうまく出来るという事は、DrawGraph関数はきちんと使用できているということですよね、
しかしながらシューティングは出来ないと・・。

変ですね。一度

http://dixq.net/zip/rpg7.zip

こちらでRPGのサンプルがダウンロード出来ますので、
slnファイルを開き、正常にコンパイル、実行できるか試してみてください。


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

Name: 一本杉  ..ぴよぴよ(175ポイント)   Date: 2007/04/04(水) 14:16   No:6473     
Title: Re:背景等が描画できません。    
返信ありがとうございます。

slnファイルを開こうとすると関連付けされてないみたいでエラーが出るので、
手動で関連付けしようと思うのですが、関連先のプログラムはMIcrosoft(R) Developer Studioで
いいのでしょうか?

前にDxLib.slnを上記と同じ所に関連付けしたときエラーがでてコンパイルできなかったもので・・・


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

Name:  ..ぴよぴよ(745ポイント)   Date: 2007/04/04(水) 15:14   No:6476     
Title: Re:背景等が描画できません。    
一番上の解決方法は多分これかと、
ビルドした時に出来るDebugフォルダがあると思います。
そこに画像ファイルをコピって見てください。
そこのexeを起動してみてください。

これで、画像が現れますよ^^
フォルダ指定が問題になっている可能性があるかと思いますので、ふぁいる指定時に
#include "../[ファイル名]"
     ↑この[../]を入れてみるとうまくいくことがあるかも…w

とりあえず、一番上の方法でいけるのでは?と思います。
コンパイル時に画像も一緒に格納すればそんな必要ないんですけどね…
やり方覚えてないし(マテ

頑張ってみてください


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

Name: 管理人 [URL]  ..ハッカー(269,871ポイント)   Date: 2007/04/04(水) 16:54   No:6478     
Title: Re:背景等が描画できません。    
Developerってなんでしたっけ?

slnファイルが関連付けられてないということは、VisualStudioが入っていないんですね。

DeveloperってVisualStido2005ExpressEditionより下位モデルでしたっけ?
もしそうでしたら

http://www.microsoft.com/japan/msdn/vstudio/express/vwd/

こちらからダウンロードできますので入れてみてください。


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

Name: 一本杉  ..ぴよぴよ(292ポイント)   Date: 2007/04/04(水) 17:00   No:6479 解決!     
Title: 解決・・・なのかな?    
雷さん返信ありがとうございます。

両方ともうまくいきませんでした(T T)

でも、別の階層で同じプロジュクトを作り、ビルドしたところ
何故か背景、プレイヤーが正常に表示されました。

とりあえず解決ということで・・・。
成功した理由が分かれば、ここに書き込みます。

管理人さん、雷さんご迷惑かけました。
そして、ありがとうございました。


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

Name: 一本杉  ..ぴよぴよ(389ポイント)   Date: 2007/04/04(水) 17:16   No:6480     
Title: 入れ違いになってしまった    
管理人さん返信ありがとうございます。


>Developerってなんでしたっけ?
一緒にゲームを作ろうと言われた友人が昔インストールしてくれたものなので、
僕もDeveloperについてはよく分からないんです。

>こちらからダウンロードできますので入れてみてください。
早速入れてみます。

何から何までありがとうございます。


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

Name: 管理人 [URL]  ..ハッカー(271,385ポイント)   Date: 2007/04/05(木) 03:25   No:6491     
Title: Re:入れ違いになってしまった    
解決されたようでよかったです。
DXライブラリはホントゲーム作成を簡単なものにしてくれるので是非頑張ってください♪


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



Name: はね  ..ぴよぴよ(313ポイント)   Date: 2007/04/01(日) 23:29   No:6339       
Title: シューティングゲームで    
この前はお答えいただきありがとうございました。

また質問なのですが
今、シューティングゲームに付け足しでアイテムを出すようにしたいのですが、なかなか上手くできません。

敵を倒すとアイテムは出るのですが、時々死なない敵が出て困っています。

自分なりに追加した部分だけ、まとめて添付しておきますので暇な時にでも見てもらえないでしょうか
基本的にサイトにあるソースに添付ファイルにある内容を追加しているだけです。

ちなみに敵のhpも設定しましたが、
EnemyCalcDisp()で敵のフラグを立てる場所に
enemy[i].hp=1;
と敵それぞれに設定しています。


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


Name: はね  ..ぴよぴよ(314ポイント)   Date: 2007/04/01(日) 23:43   No:6340     
Title: 言い忘れです    
このバグ(?)は敵を複数画面に表示した際に起こるようです。

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

Name: 管理人 [URL]  ..ハッカー(260,420ポイント)   Date: 2007/04/02(月) 01:09   No:6349     
Title: Re:言い忘れです    
すみません、明日早いので明日お返事します、ごめんなさい(_ _|||)

プログラムはみていないのですが、

>時々死なない敵が出て困っています。

ー>フラグを下げる処理が本当にその時そこを通っているか、その落としたフラグが本当にその本体のフラグか確認する。

ということをデバッカで確認するとよいかもしれません。。。
沢山あやしそうなところにブレイクポイントを置いてちまちま実行していくとか・・
と言うくらいの事はすでにやってますかね^^;
明日改めてお返事します(_ _)


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

Name: 管理人 [URL]  ..ハッカー(262,070ポイント)   Date: 2007/04/02(月) 21:47   No:6369     
Title: Re:言い忘れです    
なるほど、

enemy.cpp

のファイルをそのまま見せてもらったらはっきりするんですが、

おそらく原因はコレじゃないかなと思います。

おそらく敵が消えないのは、あの赤い弾幕がくるっとまわる奴を発射する敵の時以降じゃないですか?

敵が出現する時の初期化部分を見てください。


switch(counter){
case 50:
case 350:
case 650:
case 950:
case 1250:
case 1550:
case 1850:
case 2150:
case 2450:
enemy[i].hp=1; enemy[i].pattern=2; //どういう軌道を描くか
enemy[i].flag=1; //出現フラグを立てる
enemy[i].counter=0;//出現して何カウント目か測るカウンター初期化
enemy[i].size=0.5f;//敵の大きさ
enemy[i].range=(int)((MONSTER1_X_SIZE-60)/2.0f*enemy[i].size); //※画像サイズから余白の部分60ピクセルを引く
enemy[i].x=210.0; //xの初期座標
enemy[i].y=-10.0; //yの初期座標
break;
case 3050:
case 3350:
case 3650:
enemy[i].pattern=5; //どういう軌道を描くか
enemy[i].flag=1; //出現フラグを立てる
enemy[i].counter=0;//出現して何カウント目か測るカウンター初期化
enemy[i].size=0.5f;//敵の大きさ
enemy[i].range=(int)((MONSTER1_X_SIZE-60)/2.0f*enemy[i].size); //※画像サイズから余白の部分60ピクセルを引く
enemy[i].x=210.0; //xの初期座標
enemy[i].y=-10.0; //yの初期座標
break;


このように初期化されているんじゃないかと思います。
case 50:
case 350:
case 650:
case 950:
case 1250:
case 1550:
case 1850:
case 2150:
case 2450:
は、前半出てくる敵に関する初期化です。
case 3050:
case 3350:
case 3650:
こちらは後半出てくる敵に関する初期化です。
この両方で初期化しないといけませんが、両方で初期化していますか?
つまりcase3050:以降の初期化にenemy[i].hp=1;は書いていますか?


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

Name: はね  ..ぴよぴよ(314ポイント)   Date: 2007/04/03(火) 16:14   No:6419     
Title: Re:    
あ、すみません。
敵の出るタイミングや行動パターンは自分なりに変えて作っています。
説明が足りませんでした。

デバッグはどうにも良くわからなくて、試してませんでしたorz

ちなみにswitch文ではhpは書いてありました。

テストプレイやりまくってわかったのですが、
次の敵が表示されない内に今表示されている敵を倒してしまうとバグるようです。

強引ですが、敵のhpを多くして敵が死ぬのを遅らせるのも1つかなぁ、と思ったりしています^^;


Name: 管理人 [URL]  ..ハッカー(268,079ポイント)   Date: 2007/04/03(火) 18:04   No:6430     
Title: Re:    
なるほど、では全てのソースを見せていただかないとよくわからないですね;
プロジェクトごとアップしてもらえたらもしかしたら解決するかも・・。


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

Name: はね  ..ぴよぴよ(421ポイント)   Date: 2007/04/03(火) 20:55   No:6446     
Title: Re:    
プロジェクトごとと言うことはbdpファイルやら色々入っているフォルダをupすれば良いのでしょうか?
またそれをupする時はzipの中に入れてupすれば良いんですかね?

分からないことだらけで申し訳ないですorz

ちなにBCCで制作しているのですが、問題無いですかね?


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

Name: 管理人 [URL]  ..ハッカー(269,087ポイント)   Date: 2007/04/03(火) 21:02   No:6447     
Title: Re:    
コンパイラがVC++ではないのでしたらソースだけ入れたzipファイル渡していただけたらと思います。
こちらで環境作ってコンパイルしますんで。

アップローダ掲示板などを利用するか、HPをお持ちでしたらご自分のスペースにアップしていただくか、こちらにメール添付で送っていただけたらと思います。


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

Name: はね  ..ぴよぴよ(379ポイント)   Date: 2007/04/04(水) 00:27   No:6454     
Title: Re:遅くなりました    
すみません、ちょっと色々あって遅くなりました。

ちゃんとダウンロードできるでしょうか?

時間ある時で結構ですので検証お願いします


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

Name: 管理人 [URL]  ..ハッカー(269,660ポイント)   Date: 2007/04/04(水) 02:33   No:6463     
Title: Re:遅くなりました    
ScoreDisp
ItemCalcDisp
CollisionDetection2
など、探してもない関数がありますけど、これらはどこに書いてあるんでしょうか?


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

Name: はね  ..ぴよぴよ(415ポイント)   Date: 2007/04/04(水) 18:17   No:6481     
Title: Re:遅くなりました    
ScoreDispはscore.cppに
ItemCalcDispとCollisionDetection2はitem.cppに
書いてあるはずなのですが、無いですかね?


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

Name: 管理人 [URL]  ..ハッカー(269,910ポイント)   Date: 2007/04/05(木) 00:12   No:6483     
Title: Re:遅くなりました    
あら、前のファイルより増えていたんですね、すみません><;
みてみます。


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

Name: 管理人 [URL]  ..ハッカー(270,041ポイント)   Date: 2007/04/05(木) 00:50   No:6485     
Title: Re:遅くなりました    
お書きになったプログラムの中で
CollisionDetection
の攻撃あたり判定の中の

if(enemy[s].hp==0&&EnemyItem[s].Item[d].flag==0){

の文が正しく行われていないようです。
enemy[s].hpが0に成った時、
EnemyItem[s].Item[d].flagが1であるときがあります。
この不具合を修正すれば直るでしょう。


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

Name: はね  ..ぴよぴよ(426ポイント)   Date: 2007/04/05(木) 02:31   No:6487 解決!     
Title: Re:遅くなりました    
返答ありがとうございます。
と言うことはアイテムのフラグ関係の場所を直せば良いと言うわけですね^^
これを参考に直してみます。

色々とありがとうございました


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

Name: 管理人 [URL]  ..ハッカー(271,330ポイント)   Date: 2007/04/05(木) 03:24   No:6490     
Title: Re:遅くなりました    
いえいえ、あの攻撃パターン面白かったですよ。
私の作ったヘッポコなサンプルでここまで盛り上げてくださってこちらも嬉しいです。
形になったら是非見せてください☆


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



Name: バグ  ..プログラマー(34,494ポイント)   Date: 2007/04/03(火) 17:29   No:6423       
Title: テトリス作ってみました    
テトリスを作ってみました。良かったら遊んでみて下さい(^-^)
またコンソールですけど…(苦笑)


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


Name: 雷#wing  ..ぴよぴよ(653ポイント)   Date: 2007/04/03(火) 17:38   No:6425     
Title: Re:テトリス作ってみました(^_^;)    
DLできました〜
落下速度もう少し速くてもいいような…

これって、DSなんですか?
色が付いてますが・・・???


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

Name: バグ  ..プログラマー(34,766ポイント)   Date: 2007/04/03(火) 17:54   No:6427     
Title: Re:テトリス作ってみました    
早速、遊んでいただいたようで有難うございます(^-^)

落下速度は最初はかなり遅いんですが、最後には…(笑)
初速を速くしたい場合は、main関数の中のnWaitという変数の初期値を減らしてみて下さい。初期値は3000になっていますが、これは約3秒に1度落下するという設定なんですね。つまり、この数値1につき1ミリ秒という事です。15以下にするとゲームとして成り立たないので、20位で止めておいた方が無難かと思います(^_^;)

え…と、ところでDSとはなんでしょうか?(?_?)

WIN32APIの中の関数を使えば、コンソールアプリに色を付ける事が出来ます。このテトリスのプログラムの中のConsole.h、Console.cppの中にその辺りの関数が入ってますので、良ければ見てみてください(^o^)


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

Name: 管理人 [URL]  ..ハッカー(268,259ポイント)   Date: 2007/04/03(火) 18:08   No:6432     
Title: Re:テトリス作ってみました    
おぉ、是非やってみます!

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

Name: 雷#wing  ..ぴよぴよ(937ポイント)   Date: 2007/04/03(火) 18:41   No:6437     
Title: Re:テトリス作ってみました    
ドス画面のことを表そうとしたんですが…違いましたか(^^;
ドス画面の略称って何で言うんでしょうか?

WIN32でそんなことが出来るなんて・・・びっくりデス!

是非見させていただきます。


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

Name: バグ  ..プログラマー(34,820ポイント)   Date: 2007/04/03(火) 18:53   No:6439     
Title: Re:テトリス作ってみました    
あぁ、なるほど!DOSの略称でDSでしたか!(@_@;)

私はコマンドプロンプトとか、コンソールとか、DOS窓とか、呼んでいるので分かりませんでしたよ(;^_^A


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

Name:  ..ぴよぴよ(179ポイント)   Date: 2007/04/03(火) 19:08   No:6441     
Title: Re:テトリス作ってみました    
あ・・・oが無かったのか!(ぉぃ

解ってほっとしました^^


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

Name: 管理人 [URL]  ..ハッカー(269,138ポイント)   Date: 2007/04/04(水) 01:01   No:6455     
Title: Re:テトリス作ってみました    
DSってニンテンドーDSを連想するな^^;

テトリスやりましたよ〜^^
・・早くなる前に死んでしまいますが:;
所で無双って??


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

Name:  ..ぴよぴよ(474ポイント)   Date: 2007/04/04(水) 04:24   No:6466     
Title: Re:テトリス作ってみました    
三国無双とかだったり?w

DSか〜持ってないから記憶外だった^^;

あ、別のスレッドに僕も上げたので良ければ^^
バグがありますし、ファイルももう存在しませんが・・・


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

Name: バグ  ..プログラマー(35,061ポイント)   Date: 2007/04/04(水) 09:17   No:6469     
Title: Re:テトリス作ってみました    
>>管理人さん
最初は無双ではなく王者だったのですが、語感の良さで無双にしました。まぁ、いわゆる、その場ノリというやつです(笑)

>>雷さん
テトリスやってみました(^-^)

WINDOWSゲームプログラミングという書籍、実は私も持っているのですが、あれのサンプルのテトリスって、PIECEを5x5で判定してますよね?あれって何の意味があるのか不思議なんですよ…4x4でいいじゃないかなぁと私は思いました(;^_^A

5x5にするとテトリス棒の回転が自然な感じになるんですが、そのかわりに正方形の回転が不自然になるんですよ。

そんな訳で本来は、テトリス棒は5x5、正方形は4x4、その他は3x3という風にすれば綺麗な回転のテトリスを作る事ができるんですよね。

まぁ、面倒なので私もそこまでやってませんけどね(笑)


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

Name:  ..ぴよぴよ(510ポイント)   Date: 2007/04/04(水) 15:08   No:6475     
Title: Re:テトリス作ってみました    
そういえば、確かに・・・
どうやって解釈してたんだろう???

なるほど・・・確かにめんどくさそうw


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



Name: 雷#wing  ..ぴよぴよ(428ポイント)   Date: 2007/04/03(火) 00:11   No:6378       
Title: 大学取得教科について…    
大学のカリキュラムで、物理B(熱、電磁気、コンデンサー)を取るべきか否か迷っています。
もしよろしければ、アドバイスを頂けないでしょうか?

それと、「プログラマー目指すならこれお勧め!」な教科や事項がありましたら、参考のために是非教えていただきたい。

とりあえず、数学&統計学は取れるだけ(あるだけ)取る予定で、物理の力学、波動、光
を取る予定です。

よろしければお願い致します。


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


Name: 管理人 [URL]  ..ハッカー(263,905ポイント)   Date: 2007/04/03(火) 00:53   No:6379     
Title: Re:大学取得教科について…    
雷さん、ごにゅうがくおめでとうございます^^
私も今日、大学院の入学式でした☆ 共に頑張りましょうね〜♪

プログラマーに必要な教科というのは大して無いような気がします^^;

取っておいたらよさそうな科目は

・物理(運動・力学)
・統計

ですが、それは取る予定なようですし。
まぁこれらもほとんど使う機会はないでしょけどね^^;
私の使用範囲ではゲームプログラムでも厳密な重力加速度を使ったプログラムはあまり書きませんし(マリオのジャンプが厳密な重力の計算だと思うか?と言う事)
先日ダメージ計算に正規分布を用いたりしましたけど、めったに使いませんし・・。
高校で習う範囲でもう十分です。

しかしプログラムが良く出来る人は大抵いろんな数学・物理の知識を有していますよね。
色んな科目を勉強するに越した事は無いですよ。

あ、線形代数は使いますね。

数学Cで「行列」っていう意味不明な単元やったと思います。
私は当時なにやってんのか意味不明でしたが、大学に入ってその意味がわかりました。
行列を発展させた線形代数って分野があるんですが、これ結構プログラムで使います。

大学で初めて習う、「ラプラス変換・フーリエ変換」といった計算の方ものちのち為になるかも?と思います。
まぁそれもハードウェア系にすすむか、ソフトウェア系にすすむかでかわってきますけど。

まぁ物理にしても、線形代数にしても「それが必要なプログラムを作るのなら必要」という事であって、必ずしも必要なわけではないですが、
何をとるか迷っているのなら線形代数がお勧めです。

物理に関してですが、私は物理大好きなんで迷わず取りますけど、プログラムに際して、熱や磁気はぜ〜んぜん関係ないです。
そういうシュミレーションをするプログラムをするなら必要ですが、電磁気のシュミレーションをする機会なんて研究やそういう系の専門職につかない限りないでしょう。

まぁそうなればちょっと授業で習うような範囲ではなくなってくるでしょうし。

あまり正確な答えにはなってないですけど、とりあえず、後は線形代数かな?と思います。

大学で取れる単位はとれるだけ勉強した方が後々ためになるんで頑張ってください〜☆


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

Name: むつ  ..中級者(9,566ポイント)   Date: 2007/04/03(火) 04:11   No:6383     
Title: Re:大学取得教科について…    
『プログラマー目指すなら・・・』という大枠でなら、
経営分析、企業会計といった分野も知ってるといいかも。

実際の現場では、顧客のニーズの数だけシステムも複雑になるかと思います。
その辺の知識や勘所は、多分独学になるのでしょうかね。

例えば、色々な部署に分かれている会社で、納品は一括して行うが、
「請求書は分けてくれ」なんて場合、個数ではなく部署毎の使用割合から、
請求額を算出しなくてはいけないでしょう。

公的機関が一般公開している数値データで、シュミレーションする事も、
良い勉強になるかと思います。


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

Name: 雷#wing  ..ぴよぴよ(600ポイント)   Date: 2007/04/03(火) 17:29   No:6424     
Title: Re:大学取得教科について…    
管理人様、むつ様 返答ありがとうございます!

>管理者様
なるほど^^
行列は好きでも嫌いでもなかったので、多少は大丈夫かも・・・

線形代数探してみます^^

ソフトウェアに進みたいかな〜と思っています。。
(ゲーム会社いきたいなーとか夢見てますがw

>むつ様
経営分析、企業会計ですか、なるほど確かに知って置いて損はなさそうです。
一年で取るのはちょっと辛そうなので、二年時の時間割で検討します。

因みに、シュミレーションする事とはどういうことなのでしょうか?



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

Name: 管理人 [URL]  ..ハッカー(268,667ポイント)   Date: 2007/04/03(火) 18:17   No:6433     
Title: Re:大学取得教科について…    
>因みに、シュミレーションする事とはどういうことなのでしょうか?

>wikipedia
>シミュレーション (Simulation)とは、実験・訓練を目的とし、複雑な事象・システムを定式化して行う模擬実験をいう。「シュミレーション」という呼称・表記も良く見られるが、これは誤りである。

げ!!シュミレーションだと思っていました・・・。
ガーン・・・。

体育(タイイク)を「タイク」といっているような・・

雰囲気(フンイキ)を「フインキ」といっているような・・

女王(ジョオウ)を「ジョウオウ」といっているような・・。

重複(チョウフク)を「ジュウフク」と読んでいるような・・・

早急(サッキュウ)を「ソウキュウ」と読んでいるような・・・

そんな間違いでした・・。

だって「しゅみれーしょん」で変換したら出るんだもの!><;
使いやすいように誤読も変換出来るシステムは考え物かと・・・(人のセイ)


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

Name:  ..ぴよぴよ(243ポイント)   Date: 2007/04/03(火) 19:12   No:6442     
Title: Re:大学取得教科について…    
あ、いえ・・・意味は思いっきり伝わっているのですが、中身がいまいち理解できていなくて・・・
それに、たとえ誤りでも皆が使えば正しいこととなるので、問題では無いかとw

最後の二つは…間違いなんですか?


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

Name: むつ  ..中級者(9,860ポイント)   Date: 2007/04/03(火) 19:47   No:6443     
Title: Re:大学取得教科について…    
憶測ですが、大学卒業するまでに『生データ』を解析する事は出来る様になっても、
異なる複数のデータを見比べて、新たな発見が出来るようになるかが疑問です。

ネット上には、○○白書とか、○○調査データといったものが公開されています。
これらのデータをかき集めて、『データマイニング』してみると理解が深まるのではないでしょうか。

参考:http://www.branddatabank.com/service/service1.shtml


Google先生に「もしかして シミュレーション」と訂正されてしまいました・・。



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

Name: 管理人 [URL]  ..ハッカー(268,938ポイント)   Date: 2007/04/03(火) 20:42   No:6444     
Title: Re:大学取得教科について…    
>重複(チョウフク)を「ジュウフク」と読んでいるような・・・

>早急(サッキュウ)を「ソウキュウ」と読んでいるような・・・

これは間違いのようです。
しかし「みんなが使えば間違いではなくなる」

「ラ行四段」の活用動詞とか習ったと思いますが覚えています?

「買って来て」は間違いで正しくは「買いて来て」が正しいですよね。
買う はラ行四段ですけど、中に「っ」は出てこないはずです。
同様に「蹴って」「変わって」「走って」「やっつけて」なども全て間違いということです。

しかし昔から人々は言いやすい形で言い続けてきたのでこれが「促音便」として間違いが正しいとされました。

こんな風に「みんなが間違えばそれは正しくなる」という事から辞書にも間違いの読み方はのるようになりますし、会話の中では普通に使うかもしれませんね。
ただ公式の文章を出したり、公の場で発言する時には気をつけたほうがいいかもしれません。


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

Name:  ..ぴよぴよ(332ポイント)   Date: 2007/04/03(火) 22:07   No:6450     
Title: Re:大学取得教科について…    
>むつ様
白書や調査データをかき集めて、解析できるプログラムを組んでみると良いと言う解釈で良いのでしょうか?
なんか違う(理解できていない)感じがしますが…???

>管理人様
今年の広辞苑(だったかな?)が、現代語に即して改変されたんではなかったでしたっけ?あれ?去年か?(汗
後、英語が変わりすぎーと昔教師が嘆いていたのを思い出しましたw


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

Name: 管理人 [URL]  ..ハッカー(269,202ポイント)   Date: 2007/04/04(水) 01:03   No:6456     
Title: Re:大学取得教科について…    
そうなんですかぁ、しかし友達と恋バナしたりするとき
「コクル」とか使いますよねぇ、なんか「告白する」なんていったら
オマエいつの人? みたいになりますしねぇ。
時代と共に言葉は変わって行くでしょうねぇ。


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

Name:  ..ぴよぴよ(360ポイント)   Date: 2007/04/04(水) 03:57   No:6464     
Title: Re:大学取得教科について…    
ですね〜
でも、いつの人?は無いかと思いますよ^^


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



Name: かりなん  ..ぴよぴよ(364ポイント)   Date: 2007/04/03(火) 12:13   No:6402       
Title: シューティングゲームサンプルの事で    
初めまして、かりなんと言います。
プログラムに関してはほぼ初心者な為、紹介されているサンプルを
順次見ながらまずはどうなっていくかを見ていこうと思い
やっていたのですが・・・

12. 敵の概念と表示。

と言う所の全てを入れて実行使用とした際に
/* initial.cpp */
の場所にて

C:\Documents and Settings\Administrator\デスクトップ\実行用フォルダ\initial.cpp(15) : error C2374: 'i' : 再定義されています。2 回以上初期化されています。
C:\Documents and Settings\Administrator\デスクトップ\実行用フォルダ\initial.cpp(12) : 'i' の宣言を確認してください。
cl.exe の実行エラー

と言うエラーが出てしまいどうすればいいのか分からず困っています。
この場合はどうしたらいいのでしょうか・・・?
起動環境はC++6.0です。


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


Name: 管理人 [URL]  ..ハッカー(266,501ポイント)   Date: 2007/04/03(火) 12:17   No:6403     
Title: Re:シューティングゲームサンプルの事で    
こんにちは、かなりんさん、初めまして。

エラーの通り、2回以上定義されているのではないでしょうか?

サンプルをそのままコピーされました?
最初にint i=0;とか書いていませんか?

for文の中でiは宣言されていうので、別に宣言をする必要がありません。

もしも自分で改良したものではなくコピーしただけなのに問題があるということでしたら
どこか私の書いたプログラムに問題画あるということなので教えてください。


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

Name: かりなん  ..ぴよぴよ(576ポイント)   Date: 2007/04/03(火) 12:25   No:6405     
Title: Re:シューティングゲームサンプルの事で    
返信ありがとうございます。
こちらの別ページにありましたDxLibにページの通りに追加していった
だけのはずなのですが・・・(コピーペースト)

for(int i=0;i<PLAYER_MAX_SHOT1;i++)
for(int j=0;j<PLAYER_MAX_SHOT2;j++)
PlayerShot[i][j].flag=0;
→ for(int i=0;i<ENEMY_TOTAL_NUM;i++)
enemy[i].flag=0;

上記のようにinitialをペーストした際実行するとエラーが出ました。
→(やじるし)の部分に再定義と出ます。
initialを変えるまではエラーが出てないのでここでどうなっているかがよく分かりません・・・


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

Name: 管理人 [URL]  ..ハッカー(266,749ポイント)   Date: 2007/04/03(火) 12:27   No:6406     
Title: Re:シューティングゲームサンプルの事で    
調べてみたところ

VC++6.0の特徴として

現象:for ループ内における変数定義のスコープは、ループの内部だけのローカルなものであるべきなのに、そうでなく一つ外側のブロックでローカルになっている。
int main()
{
for(int i = 0; i < 5; ++i)
;
for(int i = 0; i < 5; ++i) // C2374: 'i': 再定義されています。2 回以上初期化されています。
;
return 0;
}

回避手段: 問題となる for ループをもう一つの別の一組の中括弧で囲う.


という記事を見つけました。
for文をかっこで囲んでみてください。


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

Name: 管理人 [URL]  ..ハッカー(267,022ポイント)   Date: 2007/04/03(火) 12:29   No:6407     
Title: Re:シューティングゲームサンプルの事で    

/* initial.cpp */

#include "DxLib.h"
#include "ExternGV.h"


void initialization(){
Player.x=200.0;
Player.y=400.0;
Player.counter=0;
Player.status=0;
for(int i=0;i<PLAYER_MAX_SHOT1;i++){
for(int j=0;j<PLAYER_MAX_SHOT2;j++){
PlayerShot[i][j].flag=0;
}
}
for(int i=0;i<ENEMY_TOTAL_NUM;i++){
enemy[i].flag=0;
}
}

void SetColor(){
color_white = GetColor(255,255,255); //白色ハンドルを取得
}





これで試してみてください。


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

Name: 管理人 [URL]  ..ハッカー(267,292ポイント)   Date: 2007/04/03(火) 12:30   No:6408     
Title: Re:シューティングゲームサンプルの事で    

/* initial.cpp */

#include "DxLib.h"
#include "ExternGV.h"


void initialization(){
int i,j;
Player.x=200.0;
Player.y=400.0;
Player.counter=0;
Player.status=0;
for(i=0;i<PLAYER_MAX_SHOT1;i++){
for(j=0;j<PLAYER_MAX_SHOT2;j++){
PlayerShot[i][j].flag=0;
}
}
for(i=0;i<ENEMY_TOTAL_NUM;i++){
enemy[i].flag=0;
}
}

void SetColor(){
color_white = GetColor(255,255,255); //白色ハンドルを取得
}


 
 
こちらでもいけると思います。


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

Name: かりなん  ..ぴよぴよ(656ポイント)   Date: 2007/04/03(火) 12:32   No:6409     
Title: Re:シューティングゲームサンプルの事で    
本当にありがとうございました。

for(int i=0;i<PLAYER_MAX_SHOT1;i++)
for(int j=0;j<PLAYER_MAX_SHOT2;j++)
PlayerShot[i][j].flag=0;

{
    for(int i=0;i<ENEMY_TOTAL_NUM;i++)
enemy[i].flag=0;
}

としたら動きました。
また何処かでつまったら質問するかと思いますが
よろしくお願いします。


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

Name: 管理人 [URL]  ..ハッカー(267,398ポイント)   Date: 2007/04/03(火) 12:34   No:6410     
Title: Re:シューティングゲームサンプルの事で    
http://tmz.skr.jp/messages/msg0208.html

こちらの8/19に全く同じような記述があります。
VC++コンパイラの不具合ではないかと思います。
for文の中で宣言されているものは、関数の最初に宣言してみてください。


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

Name: かりなん  ..ぴよぴよ(680ポイント)   Date: 2007/04/03(火) 12:34   No:6411     
Title: Re:シューティングゲームサンプルの事で    
書いている間にサンプルも書いていただいていたようで
ありがとございます。


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

Name: 管理人 [URL]  ..ハッカー(267,752ポイント)   Date: 2007/04/03(火) 12:37   No:6412     
Title: Re:シューティングゲームサンプルの事で    
http://www.google.co.jp/search?hl=ja&q=%E5%86%8D%E5%AE%9A%E7%BE%A9%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%822+%E5%9B%9E%E4%BB%A5%E4%B8%8A%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=

この辺で記事を見つけました。

サンプルと言うほどの物ではないですよ^^;

ご覧頂ありがとうございます☆

ゲーム作成頑張ってください^^


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

Name: GPGA  ..プログラマー(30,215ポイント)   Date: 2007/04/03(火) 13:38   No:6413     
Title: Re:シューティングゲームサンプルの事で    
このfor文で宣言した変数の寿命については
VC6の不具合ではなく、VC6が出た当時のC++の仕様だそうです。

VC6が出た当初はこれが当たり前として使われていたため
SPで修正してしまうと、互換性がなくなってしまうので
SP6が発行されている今でも、この現象がVC6では起こるようです。


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

Name: 管理人 [URL]  ..ハッカー(267,806ポイント)   Date: 2007/04/03(火) 17:57   No:6428     
Title: Re:シューティングゲームサンプルの事で    
なるほど、そうだったんですか、ではサンプルを修正しないといけませんね><
しかし何故私の方ではコンパイル時に警告すら出ないのでしょう・・。


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

Name: Justy  ..比類無きプログラマー(74,557ポイント)   Date: 2007/04/03(火) 18:36   No:6436     
Title: Re:シューティングゲームサンプルの事で    
しかし何故私の方ではコンパイル時に警告すら出ないのでしょう
 今の C++の仕様には合っているからじゃないでしょうか。

 サンプルを直すのであれば、コンパイラを見分けて、
例えば MSVC6.0だったら

#define for if(0);else for

 で回避するとかしてみると、見た目が変わらなくていいと思います。
(あまりお行儀はよくないんですけどね)


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

Name: 管理人 [URL]  ..ハッカー(268,959ポイント)   Date: 2007/04/03(火) 20:45   No:6445     
Title: Re:シューティングゲームサンプルの事で    
>#define for if(0);else for

おぉ、そんなワザが!さすがJustyさんは解決の方法がフタ味位違いますね。面白いです。

一応間違いの構文を書いたままだとそれを他にコピーした時などでエラーが出たりということにつながるかもしれませんので、カッコを使って直そうと思います。

ありがとうございます。


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

Name: Justy  ..比類無きプログラマー(74,671ポイント)   Date: 2007/04/03(火) 21:06   No:6448     
Title: Re:シューティングゲームサンプルの事で    
 そういえば、こちらの講座って C++準拠で書かれているんですね。
 気付きませんでした・・・。


 って、さらに最近気付いたんですか、DxLibも製作元のHPでは
C言語用と書いてあったんですが、実はC言語用じゃなくてC++用だったんですよね。

 こないだ、DxLibをちょっと試してみようかな、と思って
C言語でプロジェクト作ったらビルドが通らなくて・・・。


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

Name: 管理人 [URL]  ..ハッカー(269,293ポイント)   Date: 2007/04/04(水) 01:05   No:6457     
Title: Re:シューティングゲームサンプルの事で    
全然オブジェクト指向じゃないんですけど、ちらほらC++環境でないとコンパイル通らない部分があって一環性がないですね^^;
CxLibはC++だったんですかぁ、リファレンスページを見る限りではCかと思ってました。


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

Name: Justy  ..比類無きプログラマー(74,927ポイント)   Date: 2007/04/04(水) 01:14   No:6459     
Title: Re:シューティングゲームサンプルの事で    
CxLibはC++だったんですかぁ、リファレンスページを見る限りではCかと思ってました

 そう思っていたんですけどね・・・。
 インターフェースこそ一見C言語に見えるんですが、"DxDirectX.h"では
classの宣言とかありますし、"DxLib.h"ではデフォルト引数とか使われていて、
C言語だとダメみたいです。


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

Name: 管理人 [URL]  ..ハッカー(269,602ポイント)   Date: 2007/04/04(水) 02:25   No:6462     
Title: Re:シューティングゲームサンプルの事で    
なるほど、ありがとうございます、今後の参考にします。

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



Name: tower  ..入門者(3,640ポイント)   Date: 2007/04/03(火) 11:09   No:6391       
Title: ゲーム画面の大きさ    
今制作に取り掛かろうとしている所なんですがゲーム画面って
どのくらいがちょうど良い大きさなんでしょうか?
ツールはVC.NET2003でDirectXを使っています。
まだ制作は2回目で不慣れなんですが、そういうのも関係あるんでしょうか?
良く分からないので、例えば800×600とか700×500という風に具体的に教えて頂けるとありがたいです。
よろしくお願いします。


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


Name: 管理人 [URL]  ..ハッカー(265,378ポイント)   Date: 2007/04/03(火) 11:32   No:6394     
Title: Re:ゲーム画面の大きさ    
不慣れな時は
640x480
がお勧めです。
最もスタンダードな大きさとされているサイズです。
別に突然大きくてもいいんですが、区分計算など計算が多くなりますし、配置の問題など、
大きい方が小さいより若干難しいです。
デバックする時も計算が少ない方がやりやすいでしょう。

その次の大きさは800x600が、その次の大きさは1024x768がいいでしょう。
ただ1024より大きくはしない方がいいです。
まだまだ15インチモニタやノートパソコンなどでは1024x768が普通なので。

スーパーボムマンは1024x768で作っていますが、これだと同サイズのモニタを使用している人がウィンドウか出来ません。フルスクリーンになってしまうので。

ウィンドウ化出来る仕様にするなら800x600までが好まれるでしょう。


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

Name: tower  ..入門者(3,645ポイント)   Date: 2007/04/03(火) 16:36   No:6420     
Title: 無題    
遅くなってすみません。詳しい解説ありがとうございます。
とりあえず、640×480でやってみます。

あと画面の話ではないんですが、グラフィックを担当してもらってる人に
簡単にで良いから下絵を書いてもらわないと、雰囲気とかが分からなくて
書けないと言われてしまいました。私は絵なんて全然書けないんですが、どうしたら良いんでしょうか?
何か良い方法があれば教えてください。


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

Name: GPGA  ..プログラマー(30,251ポイント)   Date: 2007/04/03(火) 16:47   No:6421     
Title: Re:無題    
towerさんが考えている雰囲気や、世界観をもつ画像をネット上で探して
グラフィック担当者に提示してみてはいかがですか?


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

Name: 管理人 [URL]  ..ハッカー(268,241ポイント)   Date: 2007/04/03(火) 18:07   No:6431     
Title: Re:無題    
そうですね、640x480と1024x768ではかなりゲーム性も変わって来ますので、
RPG、シューティングか何かわかりませんけど、
一度RPGならフィールドやバトル画面、
シューティングなら敵と自分を表示するだけのサンプルを作ってみて、
実際どのくらい違うか確認してみるのもいいかもしれません。

複数人で作成されるのでしたら、そのサンプルを人に見せるとよりいいと思います。


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

Name: tower  ..入門者(3,523ポイント)   Date: 2007/04/03(火) 18:23   No:6434 解決!     
Title: 無題    
遅くなってすみません。
サンプルは友達が書いてくれる事になりました。
でも、サンプルも本グラフィックもわざわざ別の人に
書いてもらうなんて、なんか変な事をしているような気がします(汗)。
何はともあれおかげ様で無事、解決しました。
色々な意見を聞かせて頂いてありがとうございました(__)。


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



Name: maike  ..ぴよぴよ(14ポイント)   Date: 2007/04/03(火) 14:43   No:6415       
Title: MakeFile    
C言語とはちょっと違いますが、makefileの書き方が分かりません。

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


Name: box  ..比類無きプログラマー(62,293ポイント)   Date: 2007/04/03(火) 15:02   No:6417     
Title: Re:MakeFile    
プラットフォーム(特にUNIX系かな?)によっては、ソースファイル群を適切に配置しておけば
make Makefile
でMakefileを自動生成してくれる場合があります。

調べる方法としては、お決まりのパターンで
 ・近所に知っている人がいれば、その人に聞く
 ・ネットを活用する(「Makefile」でググってみると吉)
 ・本を読む(そのものずばり「make」や「GNU make」といった書籍(翻訳本)があります)
といったところでしょうか。


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



Name: BAZZ  ..ぴよぴよ(306ポイント)   Date: 2007/04/03(火) 11:31   No:6393       
Title: DrawFormatString    
とりあえず下のプログラムを見てください
おねがいします

//マップの状態を出力
void MapState(){
for(int j = 0;j < 15; j ++ )
for(int i = 0;i < 20; i ++ )
DrawFormatString(i * CHIP,j * CHIP, "%d", map[j][i]);
}

これをコンパイルするとエラーが出るんです
ちなみにエラー内容は
error C2664: 'DrawFormatString' : 3 番目の引数を 'const char [3]' から 'int' に変換できません。(新しい機能 ; ヘルプを参照)
この変換が可能なコンテキストはありません。

となるんですが・・・・
なぜエラーが出るんでしょうか??
DrawFormatString関数ってほぼprintf関数とおなじような感じで
つかえるんじゃありませんでしたっけ??

どうすればいいんだかわかりません
回答よろしくお願いします


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


Name: 管理人 [URL]  ..ハッカー(265,387ポイント)   Date: 2007/04/03(火) 11:32   No:6395     
Title: Re:DrawFormatString    
色の指定が抜けてますよw

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

Name: 管理人 [URL]  ..ハッカー(265,512ポイント)   Date: 2007/04/03(火) 11:39   No:6397     
Title: Re:DrawFormatString    
リファレンスページで関数の仕様を確認してください。

DrawFormatString( int x , int y , int Color , char *FormatString , ... ) ;

とありますね。
ここには
GetColor(255,255,255)
とか書くか、
事前に
int white=GetColor(255,255,255);
としておいて
whiteを第三引数に渡すかどちらかしましょう。

'const char [3]' から 'int' に変換できません。

こんなエラーが出た時は
「あれ?自分の書こうとしていた引数がしようと違うんだな」と思ってください。

ちなみに、書式指定のないDrawStringとは色の引数の場所がちがうんで注意してください

DrawString( int x , int y , char *String , int Color ) ;


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

Name: BAZZ  ..ぴよぴよ(449ポイント)   Date: 2007/04/03(火) 11:54   No:6399 解決!     
Title: Re:DrawFormatString    
げw

すいません
激しく盆ミスでした・・・・orz

早々と答えていただきありがとうございます

今度はちゃんと調べてから来ます・・・・゜・(ノД`)・゜・

今、出力できました
自分で言うのもなんですが
この関数結構使えそう・・・

ちなみにまだ例のやつは実装できてません(爆
がんばります


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

Name: 管理人 [URL]  ..ハッカー(265,920ポイント)   Date: 2007/04/03(火) 12:01   No:6400     
Title: Re:DrawFormatString    
>自分で言うのもなんですが

いや、BAZZさんがお作りになったわけではないので、控えめになる必要は無いのでは(笑

冗談ですw
この関数は結構使えますよ〜♪
「描画する文字列の描画先の長さを先に取得する」という関数がありますし、
併用する事で画面外に文字が出てしまう事も防げます。
チャットとか作る時によく使います。
単なるCと違って文字列の長さだけじゃ描画先の長さがわかりませんね。
何ポンドで描画しているか、どんな書体で描画しているかで何文字書いたら何ドットすすむかわかりません。
そういう時使えます。
後、フォントサイズやフォントデータなどを変更する時は変更に時間がかかるので
あらかじめ作成したフォントデータを使用してください。

詳しくは
http://dixq.net/g/#54
と55節を連続でよんで下さい。

また何かわからなかったら気軽に聞いてください^^

例の奴実装頑張ってくださいね☆

あ、今日サンプルプログラム注釈付きでアップしたんで、よければそちらも見てください☆


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



Name: 熱海  ..ぴよぴよ(155ポイント)   Date: 2007/04/03(火) 01:17   No:6380       
Title: 文字配列をint型に    
再び質問です・・・

char ss[10]を用意して
fgetsで入力したss[0]〜ss[10]に掛け算をして
その和を求めたいのですが、char型なので計算できません。。。
atoi()を使ってみたもののエラーが頻発してしまい、なかなかint型にできません。。。

どのように対処したらよいのでしょうか?


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


Name: 熱海  ..ぴよぴよ(325ポイント)   Date: 2007/04/03(火) 01:38   No:6382     
Title: Re:文字配列をint型に    
すみません、質問内容の訂正です。
ss[0]〜ss[10]ではなく
ss[0]〜ss[8]までの合計でした。。。


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

Name: むつ  ..中級者(9,639ポイント)   Date: 2007/04/03(火) 04:24   No:6384     
Title: Re:文字配列をint型に    
まず、文字コード表をいつでも参照できる様にしておいてください。

そして、入力の段階で数値以外をはじき、計算に必要な条件がそろってから
目的の処理をしてください。

そうしないと、fgets()では 123a456b]\n こんなのも拾ってしまいますよ。


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

Name: 管理人 [URL]  ..ハッカー(264,604ポイント)   Date: 2007/04/03(火) 08:10   No:6386     
Title: Re:文字配列をint型に    
まず、

・何を掛け算したいのか
・何のエラーが出て困っているのか

がパッと見て把握出来ませんので、質問の際はその辺の説明を詳しく書いていただけると回答する側として助かります。

まず、文字コードについて理解してらっしゃいますか?

char ch;
scanf("%c",&ch);

で入っているcにはどのような役割があるかご存知ですか?

このお話は過去の回答で何度も説明しているので、こちらを参考にしてください。

http://dixq.net/kaitou13.html

ASCII文字コードはこの辺で確認できます。

つまり文字コード自体の掛け算をさせたいならatoiなどせずに単純にかけてやれば合計が出るでしょう。

かけ算をしてそのを求めたい

とおっしゃっているので、かけ算がしたいのか足し算がしたいのかよくわかりませんが、
積を求める時はint型の扱える範囲に注意してください。

int型で使用できる範囲は2の32乗/2-1までです。先ほどの解説にビットとバイトの話がありましたね。
int型は一般的に4バイトですから32ビットになります。int型はunsignedじゃない限り負も扱えるので、その半分の値が使用できる事になり、さらに0を使用するのでその-1となります。
実際にご自分で値を表示させたい時は

printf("%f",pow(2.0,32.0)/2 -1);

で確認できます。具体的に言えば

2147483647

までです。この値を超えないように積をしてやりましょう。
もしも「文字型で受け取った数字」のみを足し算したいのなら、文字が入っていたらエラーになるような処理をさせないといけません。

今回文字コードについて勉強したいのでatoiを使わずに自分でコードを書いてみましょう。

まず

問題1
・文字「0」の文字コード表示させてください

問題2
・受け取った1バイト文字が0〜9の間ならTRUE,それ以外ならFALSEと表示させてください

問題3
・受け取った10バイトにそれぞれ入っている文字に対して問題2と同じ出力をさせてください。

問題4
・受け取った10バイトにそれぞれ入っている文字が数字かどうかを判断し、数字の時のみその積を計算していくプログラムを書いてください。

このような順番で順々にやっていけばコードは完成するでしょう。
やってみてください。


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

Name: box  ..比類無きプログラマー(62,015ポイント)   Date: 2007/04/03(火) 09:37   No:6387     
Title: Re:文字配列をint型に    
> その和を求めたいのですが、char型なので計算できません。。。

char型は、狭い範囲の整数(-128〜+127あるいは0〜255)を扱う型です。
char型だから計算できない、ということはありません。
もちろん、他の型の場合と同様、オーバーフローなどには気をつけねばなりません。


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

Name: 管理人 [URL]  ..ハッカー(264,955ポイント)   Date: 2007/04/03(火) 09:46   No:6388     
Title: Re:文字配列をint型に    
boxさんのおっしゃる事をプログラムでみてみると、こういうことになります。


#include <stdio.h>
#include <math.h>


int main(){
char a,b,c;
a=12;
b=6;
c=a*b;
printf("%d\n",c);
printf("%c\n",c);
return 0;
}
 
 
int型は4バイトのデータを入れる箱の種類です。
char型は1バイトのデータを入れる箱の種類です。

箱の大きさが違うだけで、同じものが扱えます。

このように、きちんと12*6が計算できますね。
%dで表示してやるとその格納されている数字が表示されます。
%cで表示してやると、その数字に対応した文字が表示されます。

char型は1バイトしか格納できませんから2の8乗つまり256種類までしか扱えません。
ですので、その扱える範囲に注意する必要があります。


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

Name: 熱海  ..ぴよぴよ(406ポイント)   Date: 2007/04/03(火) 11:39   No:6396     
Title: Re:文字配列をint型に    
ご回答ありがとうございます。

質問内容で混乱させてしまいすみませんでした。
私なりに、色々試させていただきます。

丁寧な対応、本当に感謝いたします。


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



Name: 熱海  ..ぴよぴよ(21ポイント)   Date: 2007/04/02(月) 18:05   No:6354       
Title: 実行時のエラーについて    
#include <stdio.h>
#include <stdlib.h>
int main(void){
int a,b;
printf("aの値を入力してください:");
scanf("%d",&a);
printf("bの値を入力してください:");
scanf("%d",&b);
if(a>b)
printf("a>b");
return 0;
}
int型の変数aとbを入力して大小を比較するプログラムです。
int型の変数aに'a'を代入すると暴走してしまい、実行結果が

aの値を入力してください:a
bの値を入力してください:

のようになります。
なぜ「bの値を入力してください:」まで出力されるのでしょうか?
bの値を入力する処理はできません。


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


Name: miyaza  ..初心者(8,254ポイント)   Date: 2007/04/02(月) 18:20   No:6355     
Title: Re:実行時のエラーについて    
scanf()を実行した場合バッファの内部に改行文字'\n'が残ります。今回の場合aも残りますが。
このため二つ目の入力がうまく作用しません。
バッファをクリアすることができれば問題は解決すると思います。


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

Name: miyaza  ..初心者(8,288ポイント)   Date: 2007/04/02(月) 18:49   No:6356     
Title: Re:実行時のエラーについて    
すこし訂正ですが。
今回は'\n'が残ったことよりも'a'が残ったことが原因ですね。


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

Name: 大工  ..中級者(12,606ポイント)   Date: 2007/04/02(月) 20:09   No:6358     
Title: Re:実行時のエラーについて    
scanf(" %d",&b)とすればうまくいきますよ。詳しくは携帯からなんで後でPCから書き込みますね

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

Name: 熱海  ..ぴよぴよ(57ポイント)   Date: 2007/04/02(月) 20:13   No:6359     
Title: Re:実行時のエラーについて    
大変ありがとうございますm(__)m
全く分からなかったので本当に助かりました。


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

Name: 大工  ..中級者(12,624ポイント)   Date: 2007/04/02(月) 20:40   No:6360     
Title: Re:実行時のエラーについて    
あれ・・・^^;

僕のは違ってました・・

僕もきになるんで・・・・・誰かおねがいです


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

Name: miyaza  ..初心者(8,300ポイント)   Date: 2007/04/02(月) 20:49   No:6361     
Title: Re:実行時のエラーについて    
rewind(stdin);を、scanf(("%d",&a); の下に追加すれば動くようになりますが、rewind()が何をしているか調べた方がいいと思います。

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

Name: miyaza  ..初心者(8,387ポイント)   Date: 2007/04/02(月) 20:59   No:6362     
Title: Re:実行時のエラーについて    
scanf(" %d",&b)として出来ないのは、バッファに残っているのが'\n'だけではなく今回は、'a'と'\n'が残っています。だから空白で読み飛ばすのが不可能だったんだと思います。違ってたらすみません

scanf("%*s%d",&b)
としたら動くと思いますが。


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

Name: miyaza  ..初心者(8,325ポイント)   Date: 2007/04/02(月) 21:01   No:6363     
Title: Re:実行時のエラーについて    
すみません
scanf("%*s%d",&b)
では、aに正常な値が入ったときに失敗しました。
やはりバッファをクリアするのが一番だとおもいます。


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

Name: 組木紙織  ..中級者(9,037ポイント)   Date: 2007/04/02(月) 21:30   No:6367     
Title: Re:実行時のエラーについて    
携帯から失礼します。
このプログラムだと、英字を比較しても意味がないので、戻り値を調べてエラーを出した方がいいのでは。
と思いますがどうでしょうか?


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

Name: Justy  ..比類無きプログラマー(74,304ポイント)   Date: 2007/04/02(月) 21:32   No:6368     
Title: Re:実行時のエラーについて    
英字を比較しても意味がないので、戻り値を調べてエラーを出した方がいいのでは
 私もそう思います。


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

Name: 管理人 [URL]  ..ハッカー(262,635ポイント)   Date: 2007/04/02(月) 22:01   No:6373     
Title: Re:実行時のエラーについて    
scanfの特性についてこちら
http://www9.plala.or.jp/sgwr-t/c/sec05.html
などを読むと少し解るかと思います。

関数がどういう性質を持っているのか参考文献を読むことも大事ですが、
自分で色々試して性能を理解することも大事です。
その方が関数に慣れるので、何にしてもプログラムを書いてみるのがとても重要ですね。
例えば返り値はどのように違うのか


#include <stdio.h>

int main(){
int a;
printf("今の入力では%dが返って来ました。\n", scanf("%d",&a));
return 0;
}


こんなプログラムで試してみる事も出来ます。
文献を頼りにする事は確かに重要で、その方が確実ですが、あらゆる手段を知っていると、例えば文献が見つからなかったとか何か問題があった時にでも応用、対処できるでしょう。


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

Name: 熱海  ..ぴよぴよ(281ポイント)   Date: 2007/04/03(火) 01:22   No:6381     
Title: Re:実行時のエラーについて    
ありがとうございます。

ちなみになんで\nやaが残ると処理をスルーしてしまうようになってしまうのでしょうか?
感覚的にはわかるのですが、自分でうまく説明ができません。。。


残ってしまった\nやaが次のscanfに入って、ただ消化する。
というような解釈でよいでしょうか?


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

Name: 管理人 [URL]  ..ハッカー(263,947ポイント)   Date: 2007/04/03(火) 07:41   No:6385     
Title: Re:実行時のエラーについて    
では
http://www13.ocn.ne.jp/~msactown/c_1.html
ここの14番などが参考になるかもしれません。


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



Name: ダッシュ  ..中級者(11,836ポイント)   Date: 2007/04/01(日) 23:26   No:6338       
Title: 無題    
おろ、いつの間にか400000アクセス突破してますね。おめでとう御座います。キリバンはどなただったんでしょう。

あの今管理人さんお暇でしょうか?いや、お忙しいのならそうおっしゃって下さい。本当にこの掲示板とは話題がかけ離れてることなんで、そういいだせる事じゃないです。(関係ないことでもいいといつも言われてますが、この話題はあまりにもかけ離れていると言うか・・・)

管理人さんが画像収集が好きだといってたのを少し思い出しまして・・・。あ、別にまずい物じゃないんですよ。google mapってご存知ですか?あれで面白い物を発見しまして。普通のものならそれに関連する語を検索すれば出てきそうなものの、いくら検索しても出てこない。しかしこれはあまりに鮮明と言いますか・・・。

取り合えず、上記のように本当に関係ない話題ですので、もしお暇ならレスください。迷惑だったらすぐ消してもらって構いません><


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


Name: 管理人 [URL]  ..ハッカー(260,264ポイント)   Date: 2007/04/02(月) 00:41   No:6342     
Title: Re:無題    
おかげさまで40万(いつの間にか)突破しました〜^^
もうここは私のホームページではなく皆様のホームページですね。
常連様あってのHPです、皆さんありがとうございますm(_ _)m

>今管理人さんお暇でしょうか?

なんでしょう?
明日は入学式なので今日はちと早く寝ようかと^^
別に今日すぐでなくてもよければ、お書きください☆

>本当にこの掲示板とは話題がかけ離れてることなんで、そういいだせる事じゃないです。(

いやいや、ここの掲示板は何でもウェルカムなことご存知でしょう^^
お気になさらず☆

>管理人さんが画像収集が好きだと・・

あら・・そんなこと言いましたっけ?
誤解招きそうですね^^;特にそういうわけではないですけどwヴェクターなんかに沢山収集ソフトありますね^^
googlemap便利ですよね。
gooマップとかヤフーマップとかもう全然使ってないです。
航空写真も見れるからただ見て遊ぶだけでもおもしろいw

何か特定の範囲の地図の画像をプログラムで自動的に集めたいんでしょうか?
JAVAならできそうですねぇ。
ウェブのプログラムはあまり知らないので、そういう関係のプログラムならよくわからないですが><

とりあえず、何かおっしゃってみてください、力になれるかどうかはわかりませんが^^;


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

Name: ダッシュ  ..中級者(12,157ポイント)   Date: 2007/04/02(月) 00:52   No:6343     
Title: Re:無題    
あ、いえ・・・ほんとにプログラムとかじゃないんです。偶然見つけたはいいが、一体何なのか分からず、でも、とにかく誰かに見せたい。そんな感じです。すいませんホント・・・。

取り合えず、マップでグリーンランドの航空写真を出してもらえますか?で、グリーンランドの半分よりやや下の方、なんかオレンジ色の巨大な物体が写りこんでません?これを拡大して欲しいんです。

どう見ても、人工物のようにしか見えないんですが、これはあまりにも大きすぎる。自分には「ある物」に見えるんですが、取り合えず先入観を入れないために先に画像を見て欲しいんです。

分かりにくければ、また言ってください。

はぁ、ホントくだらないですよね。すいません。


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

Name: 管理人 [URL]  ..ハッカー(260,279ポイント)   Date: 2007/04/02(月) 00:57   No:6344     
Title: Re:無題    
ん??
そのURL送ってもらった方がわかりやすいかも^^;


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

Name: 管理人 [URL]  ..ハッカー(260,265ポイント)   Date: 2007/04/02(月) 01:01   No:6345     
Title: Re:無題    
もしかしてこれですか?

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

Name: ダッシュ  ..中級者(12,249ポイント)   Date: 2007/04/02(月) 01:02   No:6346     
Title: Re:無題    
すいません、やり方がわからなかったもので。
今、やり方わかったので送ります。

http://maps.google.co.jp/?ie=UTF8&t=h&om=1&z=7&ll=70.513906,-40.078125&spn=1.631072,4.284668


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

Name: ダッシュ  ..中級者(12,258ポイント)   Date: 2007/04/02(月) 01:03   No:6347     
Title: Re:無題    
おお〜それです!!!!

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

Name: 管理人 [URL]  ..ハッカー(260,384ポイント)   Date: 2007/04/02(月) 01:04   No:6348     
Title: Re:無題    
これ単に夕焼けじゃないんですか?
北極近くは百夜って夏は一日中夕焼けになったりしますし、晴れている時の航空写真をつぎはぎしているんだと思いますから色んな気象状況の写真があってもおかしくないでしょうし、
他の写真にオーロラがうつったりしていてもおかしくないのでは?
あくまで私の勝手な推測ですが。

私の考える限りどうみても人工的な物体には考えられません^^;


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

Name: ダッシュ  ..中級者(12,359ポイント)   Date: 2007/04/02(月) 01:10   No:6350     
Title: Re:無題    
そ、そ〜ですよね。(汗)いくらなんでもこのデカさは異常ですよね。

最初見た時船に見えたので、「こ、これは・・・。」と思ってしまったのですが、まあ全長100km以上もあるような船いや、人工物なんてある訳ないですよね。しかもグリーンランドのど真ん中・・・。

ああ、恥ずかしい・・・・・・・。

でも、なんとなく見えません?こう、上に違う色でラインが入ってるとことか・・・・。


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

Name: 管理人 [URL]  ..ハッカー(260,560ポイント)   Date: 2007/04/02(月) 01:20   No:6351     
Title: Re:無題    
>>他の写真にオーロラがうつったりしていてもおかしくないのでは?

夜の写真があるわけないでだろうが!!って突っ込んでくださいよw

>全長100km以上もあるような船いや、人工物なんてある訳ないですよね
詳しく知りませんけど、加速器とかってかなり大きな人工物では・・
って言っても直径100キロ全てうまっている1つの建造物は無いかもしれませんね^^;

まぁこれだけ情報化がすすんだ今や、怪しいと思った事検索かけて出てこなかったら勘違いでしょうw


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

Name: ダッシュ  ..中級者(12,497ポイント)   Date: 2007/04/02(月) 01:37   No:6352     
Title: Re:無題    
>>夜の写真があるわけないでだろうが!!って突っ込んでくださいよw

いえ、そういうのもあるものなのか〜ふむふむ。と納得してたところです。。。orz

それにしてもノアの箱舟を思い出しましたよ。ちなみにノアの箱舟はヨーロッパのアララト山にあるとされてるらしいですね。少しだけロマンに浸ってました・・・。
ああ、もう馬鹿馬鹿〜〜・・・・・。はぁ、とにかく夜分遅くに失礼しました。管理人さんにそういってもらえたお陰でうなされずにすむと思います。もう遅いですからそろそろ寝ます。失礼致しました・・・。


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

Name: 管理人 [URL]  ..ハッカー(262,243ポイント)   Date: 2007/04/02(月) 21:50   No:6370     
Title: Re:無題    
いや〜ちと昨日は早く寝ないといけなかったのであまりお付き合いできませんでしたけど、雑談大歓迎ですよ^^
むしろこの掲示板は雑談でにぎわって欲しいくらいです☆
むしろ誰かがここで日記書いてくれてもいい位の勢いですw
なるべく

質問ー>回答 終わり。

という堅苦しい掲示板ではなく、みんなが気軽に交流できるような掲示板にできたらなと思っていますし、気軽にトピたててくださいね☆

受験で疲れたらその愚痴でもいいんでまた書いてください〜^^


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

Name: ダッシュ  ..中級者(12,576ポイント)   Date: 2007/04/02(月) 22:00   No:6372     
Title: Re:無題    
ほんとそう言われるとありがたいです。

これからはあんまり来れなくなるとは思いますが、色々とパソコン起動する機会はあるので、また時間を見つけてだべりに着ますね。


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

Name: 管理人 [URL]  ..ハッカー(262,698ポイント)   Date: 2007/04/02(月) 22:02   No:6374     
Title: Re:無題    
>これからはあんまり来れなくなるとは思いますが

いや〜寂しいけど仕方ないですね〜><
また来てくださいよ、大御所様w

受験ファイトです☆


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



Name: 大工  ..中級者(12,559ポイント)   Date: 2007/04/01(日) 22:30   No:6335       
Title: オプションについて    
こんばんわ、大工です。


gccのオプションについて勉強しているわけなんですが・・・

-c とか -o の詳しいところまで解説しているwebがなかなか見当たらなくて・・・

もし、知っているならおしえてくださィ><;


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


Name: Hermit  ..入門者(2,568ポイント)   Date: 2007/04/01(日) 22:47   No:6337     
Title: Re:オプションについて    
-c は、オブジェクトファイルまででコンパイルを終了します。

gcc -c foo.c
であれば、
foo.o
を作ります。

BorlandC++ や、VC++ 系であれば、
foo.obj
と同レベルです。


-o は、出力ファイルの名前を、-o の後に書き指定します。

gcc -c foo.c -o bar.o
で、bar.o というファイル名でオブジェクトファイルを作ります。

-c や、-o の位置はどこに書いてもかまいませんが、
-o の後は、必ず出力ファイル名にします。

gcc -o bar.o foo.c -c などでもオッケー

ただし、
gcc -co bar.o foo.c
の様に、オプションをくっつけることは出来ません。(別の命令になるかもしれない(^^;)
gcc はそういうものです。

まあ、gcc 系があるなら、もしかしたらman も入っているかもしれないので、
man gcc もしてみてください。
たくさんオプションあるので(^^;


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



Name: kaoru  ..ぴよぴよ(242ポイント)   Date: 2007/04/01(日) 05:20   No:6318       
Title: はじめまして、visualC++について質問させてください    
はじめまして。STGゲームを自分でも作ってみたい(プログラミングの練習もかねて)
と思ってこのサイトにたどり着き、さあやってみようと思ったのですが

microsoft visual studio 2003
を所持していなかったので無償版のVisual C++ 2005 Express Edition
というソフトでやってみようと思ったら

visual studio 変換ウィザード
なるものが出てきて、過去のバージョンで作成されたファイルは変換しなければ使えないらしく
変換→記事どおりに実行

してみるとエラーが表示されまったく実行できないんです。

これはやはりmicrosoft visual studio 2003

でなければならないということなのでしょうか?


もうひとつお願いします。


visualC++用 では上記の通りできなかったので
BorlandC++用 という方で参考記事の手順どおりやってみたのですが
こちらはメイクの段階でエラー

deleting Debag\test.obj

と表示されるのみでこちらもまったく使用できないんです。


これはmicrosoft visual studio 2003 を手に入れるしか方法はないのでしょうか。


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


Name: 管理人 [URL]  ..ハッカー(257,641ポイント)   Date: 2007/04/01(日) 05:26   No:6319     
Title: Re:はじめまして、visualC++について質問させてください    
はじめまして、kaoruさん。管理人です。

使った事無いんですが、VC++の無料版でも確か出来るはずです。

シューティングのプロジェクトは
visual studio 2003
で作ったものです。

しかし2005に変換すれば使えるんじゃないかと思います。

他トピで配布しているRPGサンプルはダウンロードして実行できますか?

>してみるとエラーが表示されまったく実行できないんです。

どんなエラーか教えてもらえないでしょうか?


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

Name: kaoru  ..ぴよぴよ(658ポイント)   Date: 2007/04/01(日) 06:07   No:6320 解決!     
Title: Re:はじめまして、visualC++について質問させてください    
返信ありがとうございます。

掲示板の記事を読んでいたら

Visual C++ 2005 Express Edition

に詳細な設定をすることがわかったので全て記事どうりに実行したところ
遂に実行することが出来ました!!!!

そんな設定があったなんて知りもしないで…
ご迷惑おかけして本当に申し訳ないです。
ありがとうございました☆☆

今後も頻繁に訪れてはちまちまゲーム作っていきたいと思いますので
その際はどうぞよろしくお願いしますp(^^)q


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

Name: 管理人 [URL]  ..ハッカー(257,668ポイント)   Date: 2007/04/01(日) 08:02   No:6321     
Title: Re:はじめまして、visualC++について質問させてください    
解決されたようでよかったです。
頑張ってくださいね☆


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



Name: Lbfuvab  ..ぴよぴよ(10ポイント)   Date: 2007/04/01(日) 04:19   No:6315       
Title: 配列を仮引数に    
初めまして。Cの初心者なLbfuvab
配列の要素ではなく、そのものを仮引数として扱うにはどうすればよいのでしょうか?


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


Name: 管理人 [URL]  ..ハッカー(257,468ポイント)   Date: 2007/04/01(日) 04:59   No:6317     
Title: Re:配列を仮引数に    
はじめまして、Lbfuvabさん・・・何て読むんでしょう?

配列の関数間値受け渡しの事ですね。

int a[3];

において

aと書くと、配列の先頭アドレスを示しますね。これをわたしてやればいいんです。

○○(a);

こんな感じで。
下にサンプルを作ったんでみてください。


#include <stdio.h>

void arr(char x[]){
printf("%s\n",x);
}

void main(){
char a[5]="abcd";
arr(a);
return;
}
 

x[ ]は*xと書いてもいいです。 
x[ ]と中身を省略してもいいですし。a[5]を渡しているのですからx[5]とかいてもいいです。
最も次元の高い配列要素数は省略できるという性質があります。
2次元配列になると、その意味がわかります。
以下2次元配列の例を出します。


#include <stdio.h>

void arr(char x[][5]){
printf("%s\n",x[0]);
printf("%s\n",x[1]);
}

void main(){
char a[2][5]={"abcd","defg"};
arr(a);
return;
}

 
 
 
x[ ][5]のうち[5]の5は省略できません。
・・とあれこれ言っても解りにくいと思いますのでこの辺で。
何かわからなければまた聞いてください。


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



Name: ちょっぴ  ..ぴよぴよ(217ポイント)   Date: 2007/03/31(土) 23:13   No:6310       
Title: 構造体へのポインタ?    
先日から情報系の研究室に配属され画像処理の勉強をし始めた者です。「四月初めまでに画像を拡大縮小させたり線形補間ができるようになっといて。簡単にできるようなヘッダあげるから。」とか先輩に言われたのですが、そのヘッダの中身が良く分かりません。添付したimg.hがそうなのですが、例えば
Image * Image_duplicate(Image *orig); は 構造体を返す関数へのポインタなのだから構造体が返されると思うのですが、中身を見ると構造体へのポインタが返されているようです。destって構造体へのポインタですよね?



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


Name: box  ..比類無きプログラマー(61,959ポイント)   Date: 2007/03/31(土) 23:40   No:6312     
Title: Re:構造体へのポインタ?    
> Image * Image_duplicate(Image *orig); は 構造体を返す関数へのポインタなのだから構造体が返される

関数へのポインタではありません。
Image_duplicateは、引数としてImage型へのポインタを受け取って、
戻り値としてImage型へのポインタを返す関数です。

関数へのポインタを表現する場合は、例えば
int (*func)(char *str);
のように書きます。この場合、funcは
「char型へのポインタを受け取って、int型を返す関数」へのポインタとなります。


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

Name: ちょっぴ  ..ぴよぴよ(429ポイント)   Date: 2007/04/01(日) 00:19   No:6313     
Title: Re:構造体へのポインタ?    
ああ!なるほど!勉強不足でした。
ずっとその部分でつまづいていました。これで先に進めます。
本当に有難うございました。
もう一度このプログラムを読んで分からないところが無ければ
解決ボタンを押したいと思います。


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



Name: jugS  ..ぴよぴよ(315ポイント)   Date: 2007/03/25(日) 21:42   No:6091       
Title: 分割コンパイルについて    
はじめまして。
C++を多少出来るようになってきたので、そろそろ画像を使ったプログラムを作りたいなと
思っている初心者です。
「BorlandC++ Compiler 5.5」「BCC Developer」を使い、
「シューティングの館」を参考に、勉強しているのですが、
下準備の6で

Error: 外部シンボル '_img_sound_load' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_initialization' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_SetColor' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_Background' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_PlayerControl' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_Background2' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_FpsTimeFanction' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)

とエラーが出てしまいます。
何度コピーペーストをし直しても、出てしまいます。
MEなのでVCが使えません。
Borlandでするにはどうしたらいいでしょうか。


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


Name: box  ..比類無きプログラマー(61,852ポイント)   Date: 2007/03/25(日) 22:03   No:6092     
Title: Re:分割コンパイルについて    
> 「BorlandC++ Compiler 5.5」「BCC Developer」を使い、

当該プロジェクトファイルをダブルクリックしてBCC Developerを起動させ、
そのプロジェクトを構成している*.cファイルや*.hファイルにはどういうものがあるか、
教えてください。


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

Name: jugS  ..ぴよぴよ(374ポイント)   Date: 2007/03/25(日) 22:13   No:6093     
Title: Re:分割コンパイルについて    
ヘッダファイル
ExternGV.h GlobalVariable.h

ソースファイル
tps.cpp player.cpp background.cpp initial.cpp
img_sound_load.cpp   main.cpp
です。


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

Name: box  ..比類無きプログラマー(61,959ポイント)   Date: 2007/03/25(日) 22:22   No:6094     
Title: Re:分割コンパイルについて    
> ソースファイル
> tps.cpp player.cpp background.cpp initial.cpp
> img_sound_load.cpp   main.cpp

外部シンボル未解決エラーを出しているshot.objの元となっている
ソースファイルはどれですか?

また、プロジェクトファイルがあるフォルダの直下に、Debugフォルダがあるはずです。
Debugフォルダにあるmakefile(*.makというテキストファイル)を見せていただけますか?


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

Name: jugS  ..かけだし(1,074ポイント)   Date: 2007/03/25(日) 22:29   No:6095     
Title: Re:分割コンパイルについて    
すいません。main.cppとshot.cppを間違えてました。
shot.makの中身は
#-------------------------------------------------------
# BCC Developer 1.2.21
# Copyright (C) 2003 jun_miura@hi-ho.ne.jp
#-------------------------------------------------------
.autodepend
CC=bcc32
RC=brc32
CFLAG=-W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG
OUTDIR=-nDebug
CINCS=
TARGET=Debug\S_shot.exe
SRC1=D:\df\S_shot\fps.cpp
OBJ1=Debug\fps.obj
SRC2=D:\df\S_shot\player.cpp
OBJ2=Debug\player.obj
SRC3=D:\df\S_shot\background.cpp
OBJ3=Debug\background.obj
SRC4=D:\df\S_shot\initial.cpp
OBJ4=Debug\initial.obj
SRC5=D:\df\S_shot\img_sound_load.cpp
OBJ5=Debug\img_sound_load.obj
SRC6=D:\df\S_shot\shot.cpp
OBJ6=Debug\shot.obj

TARGET: $(TARGET)

$(TARGET): $(OBJ1) $(OBJ2) $(OBJ3) $(OBJ4) $(OBJ5) $(OBJ6)
$(CC) $(CFLAG) -e$(TARGET) $(OBJ1) $(OBJ2) $(OBJ3) $(OBJ4) $(OBJ5) $(OBJ6)

$(OBJ1): $(SRC1)
$(CC) $(CFLAG) $(OUTDIR) $(CINCS) -c $(SRC1)

$(OBJ2): $(SRC2)
$(CC) $(CFLAG) $(OUTDIR) $(CINCS) -c $(SRC2)

$(OBJ3): $(SRC3)
$(CC) $(CFLAG) $(OUTDIR) $(CINCS) -c $(SRC3)

$(OBJ4): $(SRC4)
$(CC) $(CFLAG) $(OUTDIR) $(CINCS) -c $(SRC4)

$(OBJ5): $(SRC5)
$(CC) $(CFLAG) $(OUTDIR) $(CINCS) -c $(SRC5)

$(OBJ6): $(SRC6)
$(CC) $(CFLAG) $(OUTDIR) $(CINCS) -c $(SRC6)


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

Name: box  ..比類無きプログラマー(61,996ポイント)   Date: 2007/03/25(日) 22:39   No:6096     
Title: Re:分割コンパイルについて    
最初の投稿での「〜が未解決」というメッセージの「〜」に相当する
7個の関数の実体は、どのソースファイルにありますか?
関数ごとに教えてください。

また、makefileの内容から推して考えにくいことではあるのですが、
各ソースファイルに対応する*.objのいずれかが欠けている、ということはないですか?
通常は、ないはずですが…。


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

Name: jugS  ..かけだし(1,182ポイント)   Date: 2007/03/25(日) 23:05   No:6098     
Title: Re:分割コンパイルについて    
img_sound_load.cppにimg_sound_load

initial.cppにinitialization、SetColor

background.cppにBackground、Background2

player.cppにPlayerControl

tps.cppにFpsTimeFanction
があります。




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

Name: box  ..比類無きプログラマー(62,030ポイント)   Date: 2007/03/25(日) 23:43   No:6099     
Title: Re:分割コンパイルについて    
> 各ソースファイルに対応する*.objのいずれかが欠けている、ということはないですか?
> 通常は、ないはずですが…。

こちらについてはどうでしょうか?
なぜこういうことをお聞きしているかといいますと、くだんのエラーは、
*.objや必要なライブラリ関数をリンクしてS_shot.exeを作ろうとする際、
shot.objの中で呼び出している例の7関数について、どこかの*.objに
あるはずなのに見つからない、という内容だからです。

BCC Developerで、[プロジェクト]-[再構築]を実行してみたら、どうなりますか?


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

Name: jugS  ..かけだし(1,402ポイント)   Date: 2007/03/26(月) 17:42   No:6124     
Title: Re:分割コンパイルについて    
再構築したら

Error: 外部シンボル '_img_sound_load' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_initialization' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_SetColor' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_Background' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_PlayerControl' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_Background2' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照)
Error: 外部シンボル '_FpsTimeFanction' が未解決(D:\DF\S_SHOT\DEBUG\SHOT.OBJ が参照

と出ます。


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

Name: jugS  ..かけだし(1,485ポイント)   Date: 2007/03/30(金) 01:12   No:6276     
Title: Re:分割コンパイルについて    
連続ですいませんが、下がってきたので、投稿します。
2週間ほど、このエラーで止まっています。
何が悪いのか教えて下さい。
よろしくお願いします。



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

Name: Justy  ..比類無きプログラマー(72,619ポイント)   Date: 2007/03/30(金) 02:17   No:6279     
Title: Re:分割コンパイルについて    
 とりあえずですね、main.cppの main関数内で externしている幾つかの
関数があると思いますが、それらを全部 main関数の外に出してみて下さい。


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

Name: jugS  ..かけだし(1,533ポイント)   Date: 2007/03/30(金) 12:07   No:6288     
Title: Re:分割コンパイルについて    
ありがとうございました。無事に実行できました。
今後の為に、なぜこうなったのか教えて頂きたいのですが。


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

Name: Justy  ..比類無きプログラマー(73,285ポイント)   Date: 2007/03/30(金) 14:03   No:6290     
Title: Re:分割コンパイルについて    
 直接的な原因はリンク時に、コンパイラが作成した各関数のマングリングされた名前が
翻訳単位毎に一致しない為、リンクすることが出来ずにエラーになっています。


□ externが WinMainの中にあった場合、
 main.obj: _CollisionDetectionを要求
 palyer.obj: @CollisionDetection$qvがある

 と名前が一致しません。


□ externが WinMainの外にあった場合、

 main.obj: @CollisionDetection$qvを要求
 palyer.obj: @CollisionDetection$qvがある

 一致するのでリンクされます。


 cppファイルなので C++として解釈され
各ソースは C++向けのマングリングを行いますが、
externを WinMainの中に書くと、その関数は C言語として認識されてしまい
C言語向けのマングリングを行ってしまうようです。

 ちなみに WinMain以外の関数で、関数内に externした場合、
普通に C++向けのマングリングが行われるようなので、問題は起こりません。


 BCCの仕様でしょうかね??


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

Name: jugS  ..かけだし(1,551ポイント)   Date: 2007/03/30(金) 15:46   No:6291     
Title: Re:分割コンパイルについて    
とゆーことは、関数をexternするときはWinMain外にすれば、
このようなことは起きないと言うことですか?


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

Name: keichan  ..上級者(19,845ポイント)   Date: 2007/03/30(金) 15:47   No:6292     
Title: Re:分割コンパイルについて    
気になったので調べてみました。


---------------------------------------------
JISX3014:2003 7.5 結合指定
---------------------------------------------
参考 言語結合を持つ実体に対応する特性の中には、処理系固有のものがあり、それらは、ここでは規定しない。
   例えば、特定の言語結合が、外部結合をもつオブジェクト 又は 関数の名前を表現する特定の形式と
   関連付けられていたり、特定の呼び出し規約と関連付けられていたりすることがある。


つまり、BCCでWinMain内でextern指定を行うと、"処理系固有"の何かが柵になり、extern "C" 扱いになってしまうと。


>BCCの仕様でしょうかね??
VS2005 SP1では正常に動作確認しました。


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

Name: keichan  ..上級者(20,024ポイント)   Date: 2007/03/30(金) 15:52   No:6293     
Title: Re:分割コンパイルについて    
>とゆーことは、関数をexternするときはWinMain外にすれば、
>このようなことは起きないと言うことですか?

私の上記発言より
言語結合を持つ実体に対応する特性の中には、処理系固有のものがあり、それらは、ここでは規定しない。

つまり、WinMain外でextern指定しても同様の現象が起こらない。という事は保障できません。
しかし、この現象が発生するのは稀有なものであると思います。(根拠はありませんが・・・)


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

Name: jugS  ..かけだし(1,508ポイント)   Date: 2007/03/30(金) 16:17   No:6294 解決!     
Title: Re:分割コンパイルについて    
そうなんですか。
やはりプログラミングは、独学だと難しいですね。
質問に答えて頂きありがとうございました。


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



Name: GPGA  ..プログラマー(30,061ポイント)   Date: 2007/03/29(木) 18:33   No:6266       
Title: バッチファイルでじゃんけんゲーム    
先ほど、バッチファイルの話が出てましたね。
バッチファイルで何かゲームを作れるかな〜と思い、
じゃんけんゲームを作ってみました。


janken.bat
------------------------------------------------------------------------------------------

@echo off

setlocal enabledelayedexpansion

REM ----------------------------------
REM 値の設定
REM ----------------------------------
set input_str=じゃんけん:
set hand0=グー
set hand1=チョキ
set hand2=パー

REM ----------------------------------
REM ゲーム開始
REM ----------------------------------
echo じゃんけんゲームです。
echo 自分が出す手は
echo 0:グー
echo 1:チョキ
echo 2:パー
echo です。
echo それではゲームを開始します。
set /p aaa=""

:game_start

REM ----------------------------------
REM 画面のクリア
REM ----------------------------------
cls

REM ----------------------------------
REM プレイヤーの手を取得
REM ----------------------------------
set ply_val=
set /p ply_val=%input_str%
if "%ply_val%" equ "" (
echo 0か1か2を入力してください。
set /p aaa=""
goto game_start
)
if %ply_val% lss 0 (
echo 0か1か2を入力してください。
set /p aaa=""
goto game_start
) else if %ply_val% gtr 2 (
echo 0か1か2を入力してください。
set /p aaa=""
goto game_start
)


REM ----------------------------------
REM CPUの手を取得
REM ----------------------------------
set ene_val=%RANDOM%
set /a ene_val%%=3


REM ----------------------------------
REM 互いの手を表示
REM ----------------------------------
echo 自分:!hand%ply_val%!
echo 相手:!hand%ene_val%!


REM ----------------------------------
REM あいこの判定
REM ----------------------------------
if %ply_val% equ %ene_val% (
set input_str=あいこで:
set /p aaa=""
goto game_start
)

set /a tmp=%ply_val%+1%%3
if %tmp% equ %ene_val% (
REM ----------------------------------
REM 勝ち
REM ----------------------------------
echo あなたの勝ちです。
) else (
REM ----------------------------------
REM 負け
REM ----------------------------------
echo あなたの負けです。
)

REM ----------------------------------
REM リトライ
REM ----------------------------------
set retry=
set /p retry="もう一度行いますか?(y/n)"
if /i "%retry%" equ "Y" (
set input_str=じゃんけん:
goto game_start
)

endlocal
pause

------------------------------------------------------------------------------------------
 
バッチファイルもなかなかあなどれません。


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


Name: 管理人 [URL]  ..ハッカー(254,102ポイント)   Date: 2007/03/29(木) 19:19   No:6267     
Title: Re:バッチファイルでじゃんけんゲーム    
おぉ、すごい^^;
ホントあなどれませんねw


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

Name: Justy  ..比類無きプログラマー(72,441ポイント)   Date: 2007/03/29(木) 23:54   No:6271     
Title: Re:バッチファイルでじゃんけんゲーム    
 なんとまぁ・・・。

 「バッチなんか使いものにならん! 俺は WSHで行くぜ!」と思ってましたが、
ちょっと見直しました。


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

Name: GPGA  ..プログラマー(30,140ポイント)   Date: 2007/03/30(金) 13:13   No:6289     
Title: Re:バッチファイルでじゃんけんゲーム    
WSHの存在を知りませんでしたので、調べてみました。

かなり便利ですね。
簡単なプログラムを組もうと思ったら
WSHのほうがお手軽という感じがしました。


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



Name: 風鈴  ..ぴよぴよ(571ポイント)   Date: 2007/03/29(木) 12:11   No:6255       
Title: マップチップ・キャラチップについて    
度々すいません。

今、RPGで町(フィールド)の製作をしようと思っているのですが
マップチップとキャラチップと歩ける場所・歩けない場所の分割する際のサイズは、同じにするのが普通なのでしょうか?

例えば、イスと机を作るときキャラチップが24x32で歩けるか歩けないかを32x32だとすると、
イスに半分しか乗れないように見えたり、逆に机に乗ってるように見えたりがあると思うのですが
その辺りは、やはりキャラチップと分割のサイズを合わせて解決するべきなのでしょうか。

また、マップチップに関しても同じでキャラチップと分割をあわせる必要があるのでしょうか。

初歩的な質問かと思います、すいません。

最後は要望のような形になってしまうのですが
オープンソースで本当に単純なRPGなどを配布する等のご予定はありますか?


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


Name: Justy  ..比類無きプログラマー(72,482ポイント)   Date: 2007/03/29(木) 13:32   No:6256     
Title: Re:マップチップ・キャラチップについて    
>その辺りは、やはりキャラチップと分割のサイズを合わせて解決するべきなのでしょうか
 そういう場合基本的にサイズを合わせることになるのですが
今回の場合それはチップ側ではなく、コリジョンデータ(歩ける場所・歩けない場所)側を
合わせた方が楽です。


 その例ですと24x24と 32x32のチップが混在しているなら、
最大公約数の 12x12でコリジョンデータを構築すれば両方に
対応できると思います。


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

Name: 管理人 [URL]  ..ハッカー(253,418ポイント)   Date: 2007/03/29(木) 16:22   No:6259     
Title: Re:マップチップ・キャラチップについて    
>その辺りは、やはりキャラチップと分割のサイズを合わせて解決するべきなのでしょうか

そうでもないんじゃないですか?
マップチップの中で違うサイズが混合しているのは問題ですが、キャラチップだけ違うサイズっていうのはありだとおもいます。
私の作っているスーパーボムマンもキャラサイズは52x32ですし。
しかし作るのがはじめてで、わかりにくくしたくないというのでしたら全て32x32に合わせるのがいいでしょうね。
慣れてきて応用をきかせるのがいいかと思います。

マップチップ 32x32
キャラチップ 24x32

なのなら、DrawGraph(x+4,y,...)とX座標に4たしてやることでキレイに32x32と同じように表示できると思いますけどね。どうでしょうか。

>オープンソースで本当に単純なRPGなどを配布する等のご予定はありますか?

そうですね〜ご希望ならば作ってみようかと思いますが、
やはりいくつになっても
「人の作ったプログラムはわかりにくい」
ものですよねぇ。理論だけ学んでコード作りは自分でやるのが一番じゃないでしょうか?
その中で試行錯誤をくりかえしながら最適な書き方をみつけていく・・というのが私スタイルなので・・。
長い長いサンプルプログラムはサンプルにならないような気がするんです。
結局理解するのが大変でそれは用いないことになりそう・・。

どうしても作ってくれ!という要望があれば作りますよ☆


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

Name: 風鈴  ..ぴよぴよ(793ポイント)   Date: 2007/03/29(木) 21:18   No:6269 解決!     
Title: Re:マップチップ・キャラチップについて    
なるほど、ありがとうございます。
色々試して、最善のものを見つけていきたいと思います。

オープンソースについてですが、正直なところほしいです。
試行錯誤でどんどん理解していくほうがいいのでしょうが、少しイメージがつかみ難い感じがあるんです。
部分部分の関数は扱えるのですが、いざ自分でと言われるとどれを使っていいものかと。
また、自分はこういう書き方をしていた。
それで満足してるならそれはそれでいいと思いますが新しい書き方などを知ることもできるかな、と思っております。
ご検討お願いします。


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

Name: 管理人 [URL]  ..ハッカー(254,303ポイント)   Date: 2007/03/29(木) 22:46   No:6270     
Title: Re:マップチップ・キャラチップについて    
わかりました、今すぐに作れと言われても出来ませんが今夜頑張って作ってみます^^;

明後日とかになるかもしれないですけど、気長に待ってください^^;

ちなみに私のような人間が作るサンプルはサンプルにならないかもしれないですので、その辺ご了承下さいませ(_ _||)


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

Name: 風鈴  ..ぴよぴよ(803ポイント)   Date: 2007/03/30(金) 00:26   No:6273     
Title: Re:マップチップ・キャラチップについて    
本当にありがとうございます。
助かります<(_ _)>


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

Name: 管理人 [URL]  ..ハッカー(254,329ポイント)   Date: 2007/03/30(金) 00:35   No:6274     
Title: Re:マップチップ・キャラチップについて    
あ、VisualStudio2005で作ってますけど大丈夫ですか?

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

Name: 風鈴  ..ぴよぴよ(894ポイント)   Date: 2007/03/30(金) 01:06   No:6275     
Title: Re:マップチップ・キャラチップについて    
うーんと・・・正直なところ本当に初心者なのでよくわからないのですが、
ゲームプログラミングの館の導入の部分で手に入れるソフトとC(C++)・DXライブラリの知識だけで大丈夫なら、大丈夫です。


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

Name: 管理人 [URL]  ..ハッカー(254,445ポイント)   Date: 2007/03/30(金) 01:13   No:6277     
Title: Re:マップチップ・キャラチップについて    
あ、VisualStudio2005ご存じないのですか、分割コンパイルは出来ますか?

もし出来なかったら困ったな・・1つのファイルにあれだけのファイルは詰め込めないし^^;

今コンパイラ何使ってます?


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

Name: 管理人 [URL]  ..ハッカー(254,450ポイント)   Date: 2007/03/30(金) 05:11   No:6284     
Title: Re:マップチップ・キャラチップについて    
トピの内容変わりますし、新しくトピたてますので、そちらをご覧下さい。


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



Name: 管理人 [URL]  ..ハッカー(240,311ポイント)   Date: 2007/03/20(火) 22:37   No:5924       
Title: スーパーボムマン    
2007/3/25 Up !!

スーパーボムマン ver 1.11
http://dixq.net/zip/bomman.zip  (ゲーム本体)

今回の追加機能
・フルスクリーンモード・ウィンドウモードを選択可能に(モニタが1024x768より大きい解像度である時のみ有効)
・ゲームレベルを選択可能に


新バージョンリリースの度に毎回この同じ記事を編集してアップしていきますので,こちらを時々ご覧ください。

以前のバージョンから遊んでいただいている方は、
datフォルダ中にあるdat.datファイルがセーブデータですので,そちらのデータを新しいバージョンにコピーしてもらうと,以前のセーブデータが利用できます。

→次の投稿にゲームパッドについての記載をしております。


更新内容

ver 1.11 2007/3/25
・フルスクリーンモード・ウィンドウモードを選択可能に(モニタが1024x768以上の解像度である時のみ有効)
・ゲームレベルを選択可能に
・ロード画面に1行解説を追加

ver 1.10 2007/3/20
・FINAL STAGEの内容を色々と変更,難易度,壁の配置,攻撃方法変更など
・最初のロード画面をちょっぴり装飾
・爆弾を蹴ったときにごくまれにまわりの壁が消滅するバグを修正
・爆弾を蹴ったときにごくまれに誘爆しないバグを修正
・FINAL Stageでまれにゴールが2カ所ポップするバグを修正
・ごくまれにゴールがポップしないバグを修正
・まれにHP減少中に減少モーションが起きないバグを修正
・スタッフロールの誤字を修正
・2回連続で全クリするとスタッフロールが表示されないバグを修正
・FINAL Stageでアイテムが出現しすぎるバグを修正


セーブデータを無くしてしまった人へ
http://dixq.net/zip/pass.html (セーブデータ)


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


Name: 管理人 [URL]  ..ハッカー(240,514ポイント)   Date: 2007/03/20(火) 23:10   No:5925     
Title: コントローラーのススメ    
このゲームはプレステのゲームパッドで遊んでいただくことを想定して作っています。
プレステのゲームパッドは多くの家庭にあると思いますので,この機会にPCにつなげるための
「コンバータ」を購入してはいかがでしょうか。

http://esearch.rakuten.co.jp/rms/sd/esearch/vc?sv=2&f=A&g=0&v=2&p=0&e=0&s=2&c=1833&oid=000&k=0&sf=0&sitem=%A5%B2%A1%BC%A5%E0%A5%D1%A5%C3%A5%C9%A5%B3%A5%F3%A5%D0%A1%BC%A5%BF&x=0

大抵の電気屋さんで売っています。ネットで買えば900円程度です。




Pentium MやCerelonなどのパソコンではオープニングロゴやグラデーションの部分で大きく処理が遅れてしまう場合があります。普段正常と表示されていてもグラデーションを行う部分では大きく処理が遅れる場合がありますのでご了承ください。


ゲームはF12キーでいつでも強制終了できます。


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

Name: Justy  ..比類無きプログラマー(69,119ポイント)   Date: 2007/03/22(木) 00:14   No:6006     
Title: Re:コントローラーのススメ    
 新バージョン、プレイしました。
 ほとんど本編は完成に近いですね。
 あとはコンフィグ類でしょうか。


このゲームはプレステのゲームパッドで遊んでいただくことを想定して作っています
 キーボードでプレイしていますが6ボタンは多すぎる気がします。
 うーん、やっぱりマウスでも操作したいですね。
 仕様や遊び方が若干変わってしまいますが、パッドがない人場合を考える
マウスで遊べた方が敷居は低いかな、と思います。


最初のロード画面をちょっぴり装飾
 ロードが長いですよね。あれ全部読み込んでますか?

 データの読み込みを別スレッドにして、タイトル画面とロゴに必要なデータが
読み終わった段階でロゴ表示に移り、タイトルでゲーム本編を選ぶまでに
全データが読み終わっていなければそこで読み終わる待つ、とすると
読み込み待ちのストレスがなくなるのではないでしょうか。



 ところでこのゲームはウインドウモードとかにはしないんでしょうか?


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

Name: 管理人 [URL]  ..ハッカー(242,071ポイント)   Date: 2007/03/22(木) 05:02   No:6007     
Title: Re:コントローラーのススメ    
>あとはコンフィグ類でしょうか。

そうですね、キーが自分の好きな配置に出来るようにする必要がありますね。

>キーボードでプレイしていますが6ボタンは多すぎる気がします。
>うーん、やっぱりマウスでも操作したいですね。

う〜ん、そうですかぁ、全部違う役目をしてますからねぇ、
少なくするなら、蹴る、と、止める、を同じボタンには出来ると思います。
ただそうすると1つしか蹴れなくなりますけど。
マウスで、ですかぁ、マウスを使うとパッドを使ってる人と遊び方変わってきませんか?
なかなか両方で快適に遊ぶのは難しいですね><

>ロードが長いですよね。あれ全部読み込んでますか?

ハイ、全部一気に最初に読み込んでいます。
私が本当にしたいのは、
ゲーム本編に入るまでのメニュー画面で裏で気づかれないようにちょびちょびロード関数を1周に1回だけ読んで読み込んでいくという方法だったのですが、
(おっしゃっているのは、そういうことですよね?)
音楽読み込み関数とか、ひどい時5,6秒処理が返ってこないんですよ。
音楽ファイルを小さく小さくファイルをわければ処理も早く帰ってくるのでしょうが、ファイルも多くなるし、処理も複雑になるので避けました。
何かいい方法はあるのでしょうか。
本当は面の終わりでデータを破棄して面にはいるとき必要なデータをロードするのがいいんですよね。

>ところでこのゲームはウインドウモードとかにはしないんでしょうか?

リアル友達からもそういうリクエストがありました、私はこういうゲームをフルスクリーン以外で遊んだこと無いので、ウィンドウモードにすることを思いつきませんでしたけど
(実装は簡単です。)
やはりウィンドウモードでプレイすることを希望する人多いんでしょうか。


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

Name: Justy  ..比類無きプログラマー(70,046ポイント)   Date: 2007/03/22(木) 12:49   No:6014     
Title: Re:コントローラーのススメ    
そうですね、キーが自分の好きな配置に出来るようにする必要がありますね。
 キー配置はそうでもないんですが、まずはBGM・SEの音量ですね。


う〜ん、そうですかぁ、全部違う役目をしてますからねぇ、
マウスで、ですかぁ、マウスを使うとパッドを使ってる人と遊び方変わってきませんか?
 変わってくると思います。
 マウスの場合3ボタン+αでの操作ということになりますから。


(おっしゃっているのは、そういうことですよね?)
 いえ、ちょっと違います。


何かいい方法はあるのでしょうか。
 メインとは別の読み込み専用のスレッドを作って、そっちでデータを読み込ませるようにすれば、
ライブラリ関数の処理が何秒かかろうが、メインの処理には影響はないように作ることができます。

 アプリが 1/60秒で動いているとはいえ、その全ての時間をロゴやタイトルなどのゲームの更新・描画処理に
あてているわけではないと思うので、その空き時間を利用して読ませます。
(マルチコアなCPUだったらゲームのメイン処理と完全に平行してもいいかとは思います)

 流れとしては

1 DxLibの初期化
2 データ読み込みスレッド作成、待機
3 ゲームのメイン処理(メインスレッド)
4 メインスレッドを停止、読み込みスレッドの処理
5 1/60が経過した段階で読み込みスレッドを停止して、3へ

 を繰り返すってところでしょうか。
 この方式ですとメイン処理の空き時間が空いているほど速く読み込めることになります。

 特定のデータが読み終わった段階でメインスレッド側に通知すれば、
どの程度読み込みが終わったかもわかりますので、読み込み率表示も
常に滑らかなアニメーションをさせることができます。

 でもまぁ上の方式でもいいのですが、今後のことも考えるなら
処理に時間のかかりそうな関数をピックアップして、
それらの関数の非同期版(同期版は処理が終わるまで関数が戻ってきませんが
非同期版はリクエストだけ行い呼び出しもとに戻ってくる。終わったかどうかは別途
リクエストをする)を作っておくのがいいのかもしれません。

 これなら一度作ってしまえば、他のプロジェクトでも再利用しやすいですし。


本当は面の終わりでデータを破棄して面にはいるとき必要なデータをロードするのがいいんですよね。
 それがベストですね。
 ステージ間のヒント表示中に裏でデータを読む、と。


やはりウィンドウモードでプレイすることを希望する人多いんでしょうか。
 ウインドウモードじゃないと、PCをゲーム中完全に占有されてしまうので、
他に何もできなくなってしまうんですよ。
 一応 Alt+ Tabで、ゲームをバックグラウンドにすることができますが、
切り替えに若干時間がかかります。

 今、Alt+Enterのウインドウ・フルスクリーンモードの切り替えがオフになっているので
それを有効にするだけでも、大分違うと思います。


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

Name: 管理人 [URL]  ..ハッカー(242,489ポイント)   Date: 2007/03/23(金) 02:13   No:6022     
Title: Re:コントローラーのススメ    
あ、音量の方ですか、全然思いませんでしたけど、やはりその辺は気にする方多いのでしょうか?
これも実装は簡単ですので、今度実装しておきます。
>メインとは別の読み込み専用のスレッドを作って
あぁスレッドですか、マルチスレッドプログラムは組んだことがないので是非学んで実装しようと思います。
そうですね〜規模が大きくなるとロード時間短縮にも気を配るべきですね。
ウィンドウモード変更は簡単に実装できるのでこちらも今度のバージョンアップで追加しようと思います。


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

Name: 管理人 [URL]  ..ハッカー(243,516ポイント)   Date: 2007/03/25(日) 03:15   No:6070     
Title: Re:コントローラーのススメ    
ver1.11 3/25をリリースしました。


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

Name: ダッシュ  ..中級者(11,792ポイント)   Date: 2007/03/26(月) 01:19   No:6100     
Title: Re:コントローラーのススメ    
前スレでの話です。

と言うか未だに影の避け方がわかんない・・。どうするんでしょうか。。。

あとスタッフロールまで見ましたよ。

最初の方「あ〜、色んなとこの使ってるんだな〜」
後半「・・・・・・」

なんか後半部のあれはやけにも見えましたwwこれでもかって感じですね。

それにしても管理人さんにお姉さまがいたとは存じませんでした。実家で、と言うことですか?


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

Name: 管理人 [URL]  ..ハッカー(244,125ポイント)   Date: 2007/03/26(月) 02:59   No:6104     
Title: Re:コントローラーのススメ    
影を避けるヒントはまさに最終ステージ前のステージにでてくる「ヒント」の画像を参考にしてください^^

新しいバージョンの「普通」レベルはとても普通ではなくとても難しいのでよければ挑戦してくださいw

プレステのコントローラーお持ちでしたら上記コンバータでPCで使用できますよ^^

スタッフロールは、まぁ半分受け狙いですw
曲が好きなんで長く聞いて欲しかったんですよね^^

ハイ、管理人には姉貴がいます。
2人兄弟です。実家で遊んでもらいました。ゲームはそんな得意ではないのにあっさり全クリしてビビりましたw


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

Name: Justy  ..比類無きプログラマー(70,220ポイント)   Date: 2007/03/27(火) 00:44   No:6136     
Title: Re:コントローラーのススメ    
 ver1.11DLしました。
 あー、よく見かけるゲームは解像度が 640x480とか 800x600くらいのですが、
このゲームはもっと高い解像度なんですね。

 試しに、ウインドウを縮小してプレイしてみたのですが
(さすがに 640x480だとせせこましく見えてしまいましたが)
800x600でしたら結構良い感じでした。



最終ステージ前のステージにでてくる「ヒント」の画像を参考にしてください
 まんまですね(w


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

Name: 管理人 [URL]  ..ハッカー(249,088ポイント)   Date: 2007/03/27(火) 16:35   No:6214     
Title: Re:コントローラーのススメ    
私は小さな解像度のウィンドウを拡大すると荒くなるのが嫌いで、
よく「最初から大きなウィンドウサイズ」で作ります。
そのせいでウィンドウ化出来ない短所が生まれてしまうなら今度から800x600でも検討してみないといけませんね。
もういまや一般的なパソコンで800x600のモニタ使っている人はいないですよね??

>まんまですね(w

なんとか「あ、もしかしたらこういうことか?!」という感じをだしたかったので、
言葉で直接言っていないのですが、かといって一部の人にしか理解してもらえなくても
せっかく作った要素がもったいないですしと思い、あんな画像になりました^^;
最初全部の面の境目にヒントを出そうと思ったんですが、ステージ8位からネタ切れしましたww


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

Name: むつ  ..中級者(9,115ポイント)   Date: 2007/03/27(火) 18:54   No:6223     
Title: ゲームパッドの動作報告    
こちらのUSBゲームパッドでの動作を確認致しました。
http://www2.elecom.co.jp/peripheral/gamepad/jc-u1008t/

当方の環境(Celeron 800MHz 512MB RAM)
・ウィンドウモード 19〜20fps 何とかゲームはできる・・。
・フルスクリーンモード ロゴ表示の後、タイトルを表示する前に落ちる・・。


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

Name: Justy  ..比類無きプログラマー(70,468ポイント)   Date: 2007/03/27(火) 23:32   No:6237     
Title: Re:ゲームパッドの動作報告    
そのせいでウィンドウ化出来ない短所が生まれてしまうなら
今度から800x600でも検討してみないといけませんね。
 レンダリング自体は今まで通りでいいんじゃないでしょうか。
 ウインドウサイズだけ、幾つか候補を出してチョイスさせるような形にしておけば
ユーザーのニーズに合わせやすいと思うのですが、どうでしょう?


もういまや一般的なパソコンで800x600のモニタ使っている人はいないですよね??
 それがそうとも言い切れないのが世の中の常(w
 パソコンにアクティブな人ならもうほとんどいない、と言い切れますが、
そうでない場合ヘタするとまだ 640x480なんて人もまだいるんじゃないでしょうか。

 かなり特殊な例ですが、知り合いの会社で作っているソフトのターゲットの客のマシンが
無印の95/98なので変な拡張機能は使えない、とぼやいていました。
 多分モニタも当時の事を考えると・・・。


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

Name: 管理人 [URL]  ..ハッカー(249,840ポイント)   Date: 2007/03/28(水) 02:40   No:6242     
Title: Re:ゲームパッドの動作報告    
>むつさん

何?!こんなコントローラーがあるとは(笑
しかし19fpsだとすさまじくスローなのでは;
必要最低スペックの線切りがなかなか難しいですね〜><;
PenM 1.8あれば動くようですが、1.2ではかなり処理落ちするので、その中間のあたりでしょうか?
というかPenMの何HzとCeleronの何Hzが同じスペックとして考えていいのかわかりませんが^^;
CeleronDとか最近良く見ますけどあれいいんですかね?

>Justyさん

>それがそうとも言い切れないのが世の中の常(w

Justyさんは特に色んな人をご存知でしょうね^^;
う〜ん、私の携帯が640x480なんで、その解像度のパソコンを使用している人がいるというのはなかなか実感できません;
そんなモニタ使ってると常にスクロールキーを使いそうですね^^;

最近、スクロールしたくない、しかし30インチを買うような予算が無い・・と言う事で
デュアルモニタにしようかと考えていますが、あれって境目が出来るから結局見えにくかったりするんですかね?
19インチが2万で買えるのでデュアルでも4万ですね♪
19インチ2つだと何インチになるんでしょう(?_?
え〜計算してみると・・


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

Name: 管理人 [URL]  ..ハッカー(250,146ポイント)   Date: 2007/03/28(水) 03:18   No:6243     
Title: Re:ゲームパッドの動作報告    
ん、結構計算面倒くさい^^;

19インチ=48.3cmで、 30インチ=76.2cm

モニタのインチは対角線の長さの事ですから、長方形の底辺の長さが解れば対角線の長さがわかりますね〜。
モニタは1024:768ということは4:3。と言う事は、対角線で区切った三角形は必然的に3:4:5の直角三角形をなすことがわかります。
余弦定理より

cosα=(b^2+c^2-a^2)/2bc
=(9+25-16)/2*3*5
=3/5
cosβ=4/5
 
だから90度回転させた19インチモニタの三角形の底辺は48.3*(3/5)。
これを2倍してcosβでわってやればいいから・・。

48.3 * 0.6 * 2 / 0.8 =72.45cm

え〜、これが19インチもにたをデュアルにした時の画面サイズ・・になりますよね??
1インチは2.54cmだから割ってやると・・
28.5・・・。

う!わずかに30インチに負けたw
こう思うと30型って相当でかいんですねぇ。。

って計算あってるのやらどうなのやら^^;


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

Name: Justy  ..比類無きプログラマー(71,047ポイント)   Date: 2007/03/28(水) 15:19   No:6244     
Title: Re:ゲームパッドの動作報告    
 こういう計算するのも久しぶりなんで、間違っているかもしれませんが、
微妙に違う感じがします。


 えーとモニタが1つの時、対頂角が 19だとすると幅が 15.2、高さが 11.4、になります。

 で、モニタを横に2つ並べると幅と高さが 30.4 : 11.4になります。
 ここから atanで角度を求めると 約 20.56度になり、この値から対頂角の
長さを求めると、約 32.5インチとなります。

 つまり普通に19インチのモニタを並べると30インチよりは大きくなります。


 モニタを90度回転させて縦長にしたものを2つ横に並べた場合だと
幅と高さは 22.8 : 15.2となり、角度は 33.69で、対頂角の長さは
27.4インチになります。

 この場合は29インチより小さくなります。



 と私は計算してみたのですが、どうなんでしょう。


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

Name: 管理人 [URL]  ..ハッカー(250,597ポイント)   Date: 2007/03/28(水) 16:42   No:6245     
Title: Re:ゲームパッドの動作報告    
こんなくだらない計算に付き合ってもらってすみません^^;

あ、19インチモニタをそのまま並べるんじゃなくて

>だから90度回転させた19インチモニタの三角形の底辺は48.3*(3/5)。

90度回転させて並べるんです。
http://www-06.ibm.com/jp/pc/monitor/9419hb2/9419hb2a.shtml
こんな感じでくるっとまわせるやつありますよね。
こうしないとものすごいワイドなモニタに成るかと思いまして^^;
普通デュアルモニタっていうと「単に並べただけ」の事を指すんですか?私は回転させて並べるのかと思っていました><。

しかし私の計算は間違っていました。デュアルにすると三角形の比は3:4:5じゃなく、4:6:7.21になるんですね。
θ≠θ' ということです。

改めて図のように計算すると、答えが出ました。図の中に突然出てきている48.3cmという数字は19インチモニタの斜辺です。
69.48cmをインチになおすと27.3インチでした。
これが正解でしたね^^;

未だに思うんですけど、なんで画面サイズって面積じゃないんでしょう・・。
対角線だとJustyさんのように計算されるとものすごく大きなインチになりますよね。
極端に言えば縦がものすごく短くてものすごくよこにひろければ大きな画面ということになるし、
逆に正方形では小さな画面ということになってしまいます・・。


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

Name: 管理人 [URL]  ..ハッカー(250,900ポイント)   Date: 2007/03/28(水) 18:31   No:6246     
Title: Re:ゲームパッドの動作報告    
書けない・・・。

ボンバーマンに代わる絵をずっと試行錯誤して描いているんですが、絵心がないのでかけません・・・。
ただでさえRPGツクール以外での利用を許可している素材配布サイトが無いのに、
ボンバーマンは52x32ドットという特殊な大きさなので、素材が使えません。

仮に配布されている素材を利用したとしても、それはRPGで使うためのものであり、
あてはめてみると何とも不自然です・・。
(あるくモーションが小さいんです)
ボンバーマンはあれだけおおげさに腕を振って歩いて初めてボンバーマン><

http://dixq.net/img/7.bom
これをボンバーマンのフォルダであるbomman/dat/ROM0/0/の中の7.bomに
上書きして実行するとその意味がわかります。(対象をファイルに保存、で保存すると自動的に拡張子がpngに変わってしまうようなので、bomに変更してください。上書きする前に7.bomを他に移しておいた方がいいでしょう)

ボンバーマンに似ないようにボンバーマンに似せて書く(矛盾)というのは私には無理です(T_T

誰か得意な人に依頼しようにも協力してくれそうな人を存じませんし・・。
どうしたらいいでしょうね、、このままでは正式配布出来ませんし、、。
何かいい案ありませんでしょうか(T_T


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

Name: Justy  ..比類無きプログラマー(71,856ポイント)   Date: 2007/03/28(水) 21:55   No:6248     
Title: Re:ゲームパッドの動作報告    
こんなくだらない計算に付き合ってもらってすみません^^;
 いえいえ


19インチモニタをそのまま並べるんじゃなくて
 横長の方がいろいろ使い勝手がいいかな、と思ってました。
 昔はまわせるタイプなんてなかったので、デュアルモニターといえば
そのまま普通に並べただけでした。

 使い勝手の問題もあります。
 もともとデュアルモニターはデスクトップを「広げる」というより
デスクトップをもう一つ「追加する」という意味合いが強いので、
それぞれのモニターで別々のウインドウを開かせる用途でないと
使いづらいというのがあります。
 
 1280×1024を回転させると、1024x1280になります。
 当然縦は伸びたけど、横が減ります。
 2つ並べれば、横は 2048と大きくなるように
思えますが、モニターとの間に「物理的な切れ目」があるので、
1つのウインドウを「連続して」表示できるサイズは 1024までとなり、
なんとなく損した気分になりませんか?


>>27.4インチになります
69.48cmをインチになおすと27.3インチでした
 2つ目の方で正解だったんですね。
 両方乗せておいてよかったです。


未だに思うんですけど、なんで画面サイズって面積じゃないんでしょう・・
 昔からですよね、これ。
 TVからの慣習なんでしょうか。


仮に配布されている素材を利用したとしても、それはRPGで使うためのものであり、
あてはめてみると何とも不自然です・・。
上書きして実行するとその意味がわかります
 うーん、たしかに。
 動きが小さいのもちょっと気になりますね。

 でもゲーム的には「ボンバーマン」であってもグラフィックまで 
「ボンバーマン」にこだわらなければ、何点か改良するだけで
なんとでもなる気がします。


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

Name: ダッシュ  ..中級者(12,124ポイント)   Date: 2007/03/29(木) 00:15   No:6250     
Title: Re:ゲームパッドの動作報告    
すいません。こっちにレスつけてなかったです。

今やったら、避け方わかりました。でも、あまり変わらない気が・・・。

あとバグかどうかは不明ですが、ファイナルステージでゲームオーバーになると、画面上部にあるあのボムで壊せるブロックがファイナルのものから19ステージのものに変わります。

最新版でまだやってないので、もう改善されてるかも知れませんが・・・。


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

Name: 管理人 [URL]  ..ハッカー(252,654ポイント)   Date: 2007/03/29(木) 02:16   No:6252     
Title: Re:ゲームパッドの動作報告    
>>69.48cmをインチになおすと27.3インチでした
>2つ目の方で正解だったんですね。
>両方乗せておいてよかったです。

す、すみません・・なんて注意力がないんでしょう・・ホントにバカですね〜><
Justyさんがまさに答えを書いていらっしゃいました;
Justyさんが私なんざの質問に完璧な回答をなさらないわけがないですものねw

>1つのウインドウを「連続して」表示できるサイズは 1024までとなり、
>なんとなく損した気分になりませんか?

あ〜そうですねぇ、私は「縦に長いモニタ」がほしいもので。。
スクロールをとにかくしたくないんですよ。
スクロールしないといけない分だけ下に表示してくれたらいいのになといつも思います。
しかしその分横がせまくなるので、それはそれで考え物ですよね^^;

>「ボンバーマン」にこだわらなければ、何点か改良するだけで
>なんとでもなる気がします。

私に絵心があれば・・。
地道に絵を頑張って書くことにします><



>ダッシュさん
>今やったら、避け方わかりました。でも、あまり変わらない気が・・・。

(↓ネタバレ注意、範囲選択でご覧下さい)

あれ、この避け方いい案だなと(自分でイウナ)自分で思ってたりしたんですが^^;
「あ!まずいよけれない!」と思った瞬間パッと爆弾を置くことで避けられると言うシステムは自分自身何度も利用してきましたが、使いにくかったですか?^^;


>ファイナルステージでゲームオーバーになると、画面上部にあるあのボムで壊せるブロックがファイナルのものから19ステージのものに変わります。

Justyさんにもご指摘受けましたが、やっぱあんな演出じゃみんなバグだと思いますよね^^;

>FINALステージは19をクリアしたときに同じ空間に現れる何か特別なものであるように感じさせるためにFINALでゲームオーバーになった瞬間19に戻ってしまうように演出しましたが
>演出しきれてないのでバグのようになってしまいましたw


本当はFINALステージに入る瞬間にステージ19→じわ〜っとファイナルになるように演出しようとしたんですが、
かっこいい演出方法が思いつかなかったので、最後戻る時の設定だけ残ってしまったのです^^;
一応バグではないんですが、修正の必要がありますね^^;

まぁ元々バグから考え付いた演出ですしw
あ、一つ名言をお教えします。


今日のバグは明日の仕様



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

Name: Justy  ..比類無きプログラマー(72,350ポイント)   Date: 2007/03/29(木) 02:42   No:6253     
Title: Re:ゲームパッドの動作報告    
Justyさんが私なんざの質問に完璧な回答をなさらないわけがないですものねw
 そんなことはないっす。
 しょっちゅう、仕事でもこちらでも脊髄反射で答えてしまって、後からあまりのひどさにいつも悶絶してますよ(w


あ〜そうですねぇ、私は「縦に長いモニタ」がほしいもので。。
 なるほど。
 
 参考までぐぐってて見つけたのですが、値が張るので
とても買えないとはいえ世の中にはこんなのも。
http://www.nihonbinary.co.jp/Medical/FlatPanel/index.htm

 ・・・3061階調のグレイスケールってどういうのなんだろう、とひとしきり。
 って、これグレースケール専用っぽいですよね。


BTOパソコン(エアロ)TSUKUMO ネットショップ
http://shop.tsukumo.co.jp/special.php?id=070206a

 こちらの FPD2485WJは縦にもできるようで、きっと2つ並べたら凄いんだろうなぁ。



今日のバグは明日の仕様
 昔の Photoshopのイースターエッグを思い出しました。(w
 


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

Name: 管理人 [URL]  ..ハッカー(253,028ポイント)   Date: 2007/03/29(木) 03:05   No:6254     
Title: Re:ゲームパッドの動作報告    
2048×2560ってでかぁ^^;
700って明るいですねぇ;

しかし250万って個人では無理です^^;
そんなん1万円のディスプレイ250個買えますよww
15x15個並べたら部屋の壁位になるだろうな〜^^;

縦にも出来るモニタってなかなか安いのないんですよね><;
う〜ん5万のモニタ2つ買うと10万かぁ・・。

最も一般的であろうと思われる17インチ液晶も
http://www.coneco.net/SpecList/01101020/op3/OP3+%3E%3D+17+AND+OP3+%3C+19/spec_order/PRICE/
今では17000円ですからねぇ・・。安くなりましたね〜^^;

>昔の Photoshopのイースターエッグを思い出しました。(w

ん?イースターエッグ?
知らないな〜検索検索と。

おぉ?!
なにやら不気味な画像がw
Liquid Skyってなんだろう^^;
う〜ん、スタッフロール長いなぁ・・。
これが全部終わったら何か起こるのかな??


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

Name: Justy  ..比類無きプログラマー(72,604ポイント)   Date: 2007/03/30(金) 00:19   No:6272     
Title: Re:ゲームパッドの動作報告    
>イースターエッグ?
 Photoshop3.0の隠し機能で、「開発者のいい訳ランキング」みたいなのがあって、
その1位だったのが「仕様です」だったんですよ。

 当時「開発者はこういうのを仕込める特権(?)があっていいなぁ」と
思ったのを覚えています。


# 最近の Adobeの隠し機能はおもしろみに欠けます。
 規制が厳しくなったんですかねぇ


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

Name: 管理人 [URL]  ..ハッカー(254,478ポイント)   Date: 2007/03/30(金) 02:11   No:6278     
Title: Re:ゲームパッドの動作報告    
さ、、3.0は持ってない;
7.0しか^^;
3.0って何年まですか?;


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

Name: Justy  ..比類無きプログラマー(72,848ポイント)   Date: 2007/03/30(金) 02:27   No:6280     
Title: Re:ゲームパッドの動作報告    
3.0って何年まですか
 今から8〜10年くらい前だったような・・・。


7.0しか
 CS系にはバージョンアップしないんですか?


 そういえばもうすぐですよね、CS3。
 正直今回 Photoshopで初めてバージョンアップしようかどうか迷ってます。
 なんか、バージョンアップするだけの動機というか魅力というか機能がないというか。


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

Name: 管理人 [URL]  ..ハッカー(254,408ポイント)   Date: 2007/03/30(金) 02:41   No:6281     
Title: Re:ゲームパッドの動作報告    
> CS系にはバージョンアップしないんですか?

学生には金銭的な問題画一番大きいんですよ〜^^;
CSってとんでもなく高かったような・・。
CSほしくてしょうがないんですけどね、どうにかして手に入らないかな〜(T_T 教授に泣きつくとか・・。


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

Name: Justy  ..比類無きプログラマー(73,024ポイント)   Date: 2007/03/30(金) 02:52   No:6282     
Title: Re:ゲームパッドの動作報告    
 たしかに。
 バージョンアップは2万ちょいくらいするので、ちょっと高いといえば高いですよね。

 あ、ひょっとしてアカデミック版ですか?
 だとするとバージョンアップはできないんで新規に買うしかないです。

 新規に買うのであれば Elements版を買って Adobeに登録しておくと、
そのうちメールが届いて「非 Elementsにグレードアップしない?」ってメールが
届くようになるのでそれに申し込むと計6万弱で買えますよ。


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

Name: 管理人 [URL]  ..ハッカー(254,462ポイント)   Date: 2007/03/30(金) 03:35   No:6283     
Title: Re:ゲームパッドの動作報告    
アカデミック版です・・。

計6万弱・・;
2か月分の食費だぁ・・。

教授に頼んでみるしかないようですね〜><;


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

Name: 管理人 [URL]   Date: 2007/07/20(金) 15:26   No:59241184912795     
Title: Re:ゲームパッドの動作報告    
このスレッドの元のスレッドはこちらです。
http://www.play21.jp/board/formz.cgi?action=res&resno=5672&page=&id=dixq&lognum=19




Name: 雷#wing  ..ぴよぴよ(172ポイント)   Date: 2007/03/29(木) 16:56   No:6260       
Title: C言語の質問ではないのですが…    
はじめまして、以後よろしくお願いします。

管理人様へ
不適切な内容であったと判断された場合すぐに削除をお願いいたします。

質問はバッチファイル(拡張子.bat)についてなのですが質問してもかまわないのでしょうか?
と、思いつつ投稿させていただいております。

とある本で、【バッチファイルからソフトを起動する】ということが書かれていたのですが、
これはWindowsの【プログラムから開く】→【ほかのプログラム】
と同じ機能を持たせることは可能なのでしょうか?
したいことは、【.html】の拡張子のものを【他のエディター】で起動したいと言うものです。

もし、ご回答をしていただける方がいましたらよろしくお願いいたします。


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


Name: 管理人 [URL]  ..ハッカー(253,803ポイント)   Date: 2007/03/29(木) 17:19   No:6261     
Title: Re:C言語の質問ではないのですが…    
こちらの掲示板は質問の内容として、C言語ではなくてもどんな内容でも結構ですよ^^
プログラムの話から、大学生活での話や、他リアル生活などの話まで何でもOKですし、気になさらなくても大丈夫です^^

とにかくバッチファイルでhtmlファイルを指定のソフトで開きたいんですね?
出来ますよ。
下にCドライブ直下にあるhtmlを、ノートパッドで開く操作のサンプルを書いてみます。
ノートパッドってwindowsに元々はいってるソフトの事です。

 

 
C:\WINDOWS\NOTEPAD.exe C:\test.html
EXIT
 
 
 
上記文章をコピーしてbatファイルとして保存し、ダブルクリックしてください。
サンプルを実行するにはCドライブ直下にtest.htmlと名づけたhtmlファイルを置いてください。

 

 
C:\WINDOWS\NOTEPAD.exe C:\test.html
EXIT
 
 
 
開くのに用いたいソフトの実行ファイル
開きたいファイル
終了処理
となっています。

各部分は任意に変更してください^^


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

Name: 雷#wing  ..ぴよぴよ(244ポイント)   Date: 2007/03/29(木) 18:13   No:6262 解決!     
Title: Re:C言語の質問ではないのですが…    
ありがとうございます!!

googleとかで調べてみても良くわからなくて質問したら、こんなに早く回答していただけるとは!!

話題変わるのですが、WindowsMessengerはまだ使用されていますか?
過去ログはすべて呼んだほうがいいのでしょうか?(雑談のようなものしかまだ読んでいません…(^^;


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

Name: 管理人 [URL]  ..ハッカー(254,039ポイント)   Date: 2007/03/29(木) 18:21   No:6263     
Title: Re:C言語の質問ではないのですが…    
いえいえ、お力になれたら幸いです^^

>過去ログはすべて読んだほうがいいのでしょうか?

・・というと?
もし興味有るトピがあったら読んでいただけたらと思いますけど・・?
全部はとても読めないと思いますよ^^;
現在ログNo.20で1つにスレが50個位ありますから全部読んだら1000スレ位あると思います^^;

もしお暇でしたらスーパーボムマンでも(他トピ宣伝)

>話題変わるのですが、WindowsMessengerはまだ使用されていますか?

そのような書き込みどこかで私してました?
MSNメッセンジャーなら使っていますよ^^


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

Name: 管理人 [URL]  ..ハッカー(254,077ポイント)   Date: 2007/03/29(木) 18:22   No:6264     
Title: Re:C言語の質問ではないのですが…    
夕飯の準備とかするんで返事遅れたらスミマセンw

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

Name: 雷#wing  ..ぴよぴよ(282ポイント)   Date: 2007/03/29(木) 18:26   No:6265     
Title: Re:C言語の質問ではないのですが…    
>そのような書き込みどこかで私してました?
過去ログの1あたりでされていました…。

スーパーボムマンやってみます^^


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

Name: 管理人 [URL]  ..ハッカー(254,178ポイント)   Date: 2007/03/29(木) 19:20   No:6268     
Title: Re:C言語の質問ではないのですが…    
過去ログ1まで見てくださったんですか?!
ありがとうございます^^;

MSNメッセンジャーのメルアドは
dra2jp@hotmail.com
なんでよければ登録してください〜^^


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



Name: はね  ..ぴよぴよ(66ポイント)   Date: 2007/03/28(水) 23:33   No:6249       
Title: シューティングゲームの館21〜    
はじめまして。
いつも参考にさせていただいております。
さっそく質問なのですが、21からの色々な敵の弾を表示する所で質問です。
void EnemyShotPattern*(int i)の関数を作成する所です。

これを実行すると敵の出す弾がうまく表示されません。
どうやら弾幕を出しても、一番先頭の弾が画面外に行くと表示されている弾全てが消えてしまうようです。

自分なりに色々と試行錯誤してみたものの、上手くいきません。

ご教授お願います。


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


Name: 管理人 [URL]  ..ハッカー(251,980ポイント)   Date: 2007/03/29(木) 02:05   No:6251     
Title: Re:シューティングゲームの館21〜    
いつか誰かに突っ込まれるだろうなと思っていましたが、やはりご指摘受けました^^;
http://dixq.net/s/31.html
この辺のショットとかですよね。

このシューティングプログラムは程度画面外に出ると発射フラグを落とすようにプログラムしてあります。
フラグを落とすまでのカウンタを用意するべきでしょうが、とにかく「プログラムを複雑化したくない」という事でこのような書き方にしています。

一度ある程度距離の有る画面外に出ると発射フラグが0になってしまいます。

enemy_shot.cpp

に 
 

//弾が画面より外にあるときは発射フラグを戻す。
if(EnemyShot[i].EnemyShots[j].x<-20.0||EnemyShot[i].EnemyShots[j].x>440.0||EnemyShot[i].EnemyShots[j].y<-20.0||EnemyShot[i].EnemyShots[j].y>500)
 
 
とありますが、これがその処理です。
例えばx座標が-20以下になるとフラグが落ちます。これに余裕を持たせれば玉が消える現象が軽減できるでしょう。
おもいっきり画面外にわざと出るようなタイプの弾幕はフラグを落とすまでのカウンタを用意するべきでしょう。
とりあえずこのフラグの有効範囲を広くする事で対処できるのではないでしょうか。


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

Name: はね  ..ぴよぴよ(130ポイント)   Date: 2007/03/29(木) 15:43   No:6257 解決!     
Title: Re:シューティングゲームの館21〜    
素早い返答ありがとうございます^^

おっしゃる通り、弾が消える判定をカウンターに任せたら上手くできました。
まだまだ初心者ですが、今後もよろしくお願いします


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

Name: 管理人 [URL]  ..ハッカー(253,050ポイント)   Date: 2007/03/29(木) 16:14   No:6258     
Title: Re:シューティングゲームの館21〜    
解決もお早いですね☆
頑張ってください^^


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



Name: いさご  ..かけだし(1,111ポイント)   Date: 2007/03/27(火) 19:26   No:6224       
Title: 入力制限のしかた    
こんばんは。度々すみません・・・。いさごです。
今度は入力する回数の制限でわからなくなりました。
数字3つを読み取るプログラムで、4つ目の入力があれば
エラーを出さなければならないのですが、方法がわからず困っています。

int main(){

int num[3];
int i=0;

printf("数字を3つ入力してください\n");
while(i < 3){
scanf("%d", &num[i]);
i++;
}

return(0);
}

ここまでは出来たのですが・・・。
int num[4]にして、num[3]をisdigitとisalphaで調べる・・・?
という変な方法しか思いつきません。
どなたかいい方法をご存知でしたら教えてください。
お願いします。


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


Name: miyaza  ..初心者(7,813ポイント)   Date: 2007/03/27(火) 20:38   No:6226     
Title: Re:入力制限のしかた    
つまりscanf()を呼び出して四つ目の値を入力させたあとにエラーと出すということですか?

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

Name: いさご  ..かけだし(1,216ポイント)   Date: 2007/03/27(火) 21:26   No:6229     
Title: Re:入力制限のしかた    
ちょっと言い方がおかしかったかもしれません。すみません。
はい、四つ目に何らかの値が入力されればエラーを出す、と言うことです。
思いついたのはscanf()を使う事だったのですが・・・。
他に簡単な方法ご存知でしたら教えてください。



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

Name: miyaza  ..初心者(7,903ポイント)   Date: 2007/03/27(火) 21:35   No:6230     
Title: Re:入力制限のしかた    
では、iの値で判断というのはどうでしょう。


#include <stdio.h>

int main(){
int num[4];
int i=0;

while(1){
scanf("%d",&num[i]);
if(i==3){
printf("4つ目の値は入力できません。\n");
break;
}
i++;
}
return 0;
}




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

Name: miyaza  ..初心者(8,101ポイント)   Date: 2007/03/27(火) 21:58   No:6231     
Title: Re:入力制限のしかた    
しかし絶対三つの値を入力するという条件のもと四つ目の値を入力したらエラーですか。
ループ文で作るとしたらwhile(i<3)等の条件式で十分だと思うのですが、三つまでではなく三つ入れるのが絶対条件なら四つ目を入れる余地はないと思うのですが。
三つ入れた後も入力可能で、尚且つ四つ目を入力するとエラーだとすると、ループを抜ける手段が四つ目を入れるか、そもそも四つ目を入力させないかしか無いと思うのですが。

つまり何が言いたいかというと私が作った上記のプログラムでは四つ目を入力するまでループを抜けられません。
すいません。たぶんやりたいのは、こんなことじゃないですよね。


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

Name: いさご  ..かけだし(1,350ポイント)   Date: 2007/03/27(火) 22:44   No:6233     
Title: Re:入力制限のしかた    
miyazaさん、回答ありがとうございます。すみません。

もう一度紙をよく読んでみたら、やっぱり絶対に3つ必要なのであって、
入力数が3つ以外は全て不可にしろとかいてありました・・・。
どうすればいいのか混乱中です・・・。


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

Name: miyaza  ..初心者(8,172ポイント)   Date: 2007/03/27(火) 23:07   No:6234     
Title: Re:入力制限のしかた    
三つの数を入力して四つ目が入力されたらエラーを出すですね。
その条件なら私が先ほど書いたソースでも大丈夫だと思います。

余計な事を書いて逆に混乱させてしまったとしたら、すみません。




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

Name: むつ  ..中級者(9,366ポイント)   Date: 2007/03/27(火) 23:26   No:6235     
Title: Re:入力制限のしかた    
>printf("数字を3つ入力してください\n");
これは以下の様に、空白等で区切られた数値を3つとも解釈できますよね!?

○123 456 789
×123 456 789 012 ...

あまりお勧めできないけど、こんな風に取得できる。
scanf( %d %d %d, &num[ 0 ], &num[ 1 ], &num[ 2 ] );
他には、
fgets()でとって、strtokでトークンに分割するとか。
これであれば4つ目(以上)の入力でエラーというのもうなずけるかなと。
また、数値以外の入力のチェックが出来きていいかと思います。


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

Name: 組木紙織  ..初心者(8,908ポイント)   Date: 2007/03/27(火) 23:30   No:6236     
Title: Re:入力制限のしかた    
リダイレクトで入力した場合のみですが、3つの数字以外はすべてはじきます。
コンソールからはまったく想定していません(笑)

参考程度に。

#include<stdio.h>

int main(void)
{
int i[3], count=0;
while(scanf("%d",&i[count])>0){

if(++count > 3){
printf("error\n");
return 0;
}
}
if(count < 3){
printf("error_2\n");
return 0;
}
//countの再利用
for(count =0;count<3;count++){
printf("%d\n",i[count]);
}


return 0;
}


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

Name: いさご  ..かけだし(1,423ポイント)   Date: 2007/03/28(水) 19:55   No:6247 解決!     
Title: Re:入力制限のしかた    
ご回答くださった方々、本当にありがとうございます。
色々と参考にさせていただいて、なんとか作ることができました。
お手数おかけしてすみません。ありがとうございました!


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



Name: 組木紙織  ..初心者(8,526ポイント)   Date: 2007/03/27(火) 22:30   No:6232       
Title: VC express edition の移植性について    
VC++で作成したプログラムを他のパソコンで使おうとしたのですが、次のようなエラーが発生します

“このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決することがあります。”

プログラムを作成したパソコンでは問題なく動くのですがどうすれば別のパソコンで利用することが出来るかがわかりません。
移植可能なプログラムを作る方法を知っていたら教えてください。

環境は以下のとおりです。
OS:
windowsXP
コンパイラ:

Microsoft Visual Studio 2005
Version 8.0.50727.762 (SP.050727-7600)
Microsoft .NET Framework
Version 2.0.50727

インストールされている Edition: VC Express


プログラムを作成したパソコンでは問題なく動くのですが、


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


Name: 組木紙織  ..初心者(8,965ポイント)   Date: 2007/03/27(火) 23:41   No:6238     
Title: Re:VC express edition の移植性について    
#include <stdio.h>

int main(void)
{
printf("test\n");
return 0;
}

これも上記と同じエラーがでます。


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

Name: Justy  ..比類無きプログラマー(70,791ポイント)   Date: 2007/03/27(火) 23:52   No:6239     
Title: Re:VC express edition の移植性について    
 その動かないマシンには "Microsoft Visual C++ 2005 再頒布可能パッケージ" の
インストールはされていますか?

 MSVC8.0でビルドした成果物は、上記のランタイムライブラリを要求され、
それがないとエラーになって起動しないことがあります。


ダウンロードの詳細 : Visual C++ 2005 再頒布可能パッケージ (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&DisplayLang=ja

 これをインストールすれば解決できるかと思いますが、
これと同じ物が VisualStudioのインストール先のディレクトリのどこかにあるかと思います。
 それを探して入れてみて下さい(なければサイトからDLということで)。


 もっとお手軽な方法としてはプロジェクトのランタイムライブラリの設定項目で
DLLを含まないように設定しても解決できるかもしれません。



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

Name: 組木紙織  ..初心者(8,972ポイント)   Date: 2007/03/28(水) 00:12   No:6240 解決!     
Title: Re:VC express edition の移植性について    
お手軽にDLLを含まないように設定をしたら、うまく動きました。
再頒布にはそんな条件がついているとは知りませんでした。
ありがとうございます。


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

Name: Blue  ..ぴよぴよ(315ポイント)   Date: 2007/03/28(水) 01:00   No:6241     
Title: Re:VC express edition の移植性について    
参考スレ
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1247608&SiteID=7


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



Name:  ..ぴよぴよ(200ポイント)   Date: 2007/03/27(火) 15:04   No:6207       
Title: 超入門者コード    

#include <stdio.h>

int main(void) {
int num1,num2;
char ch;

do{
printf("1:足し算 2割り算\n");
ch = getchar();
while(ch !='1' && ch != '2');

if(ch == '1') {
printf("二つの整数を入力\n");
scanf("%d",num1);
scanf("%d",&num2);
printf("足し算=%d",num1 + num2 );
}else {
printf("整数入力\n");
scanf("%d",&num1);
scanf("%d",&num2);
if(num2 != 0){
printf("割り算=%d",num1/num2);
}else if(num2 == 0){
printf("エラーです\n");
}
}
return 0;
}

:\vc\Practice1\ex01.c(32) : fatal error C1004: 予期せぬ EOF が検出されました。
なぜ? }の数?


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


Name: Blue  ..ぴよぴよ(252ポイント)   Date: 2007/03/27(火) 15:08   No:6208     
Title: Re:超入門者コード    
> }の数?
そうです。
多分
>	do{

> printf("1:足し算 2割り算\n");
> ch = getchar();
> while(ch !='1' && ch != '2');

の対応が取れていないから。

また
>scanf("%d",num1);
&が抜けているような。


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

Name:  ..ぴよぴよ(935ポイント)   Date: 2007/03/27(火) 15:09   No:6209     
Title: Re:超入門者コード    
}が足りません。

do{
 printf("1:足し算 2割り算\n");
 ch = getchar();
}while(ch !='1' && ch != '2');

ここ


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

Name:  ..ぴよぴよ(235ポイント)   Date: 2007/03/27(火) 15:13   No:6210     
Title: Re:超入門者コード    
ありがとうございます!!
もっとこうしたほうがいいと思うところありますか?


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

Name: keichan  ..上級者(19,609ポイント)   Date: 2007/03/27(火) 16:06   No:6212     
Title: Re:超入門者コード    
>もっとこうしたほうがいいと思うところありますか?
getchar() は int型を返すので
char ch;

int ch;
にしなくてはいけません。


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

Name: 管理人 [URL]  ..ハッカー(249,430ポイント)   Date: 2007/03/27(火) 17:19   No:6220     
Title: Re:超入門者コード    
別の「電卓作成中」のトピに電卓プログラムのサンプルを書いておりますので
よければそちらも参考にしてください。


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

Name:  ..ぴよぴよ(414ポイント)   Date: 2007/03/27(火) 20:10   No:6225     
Title: Re:超入門者コード    

int i;

i = strcmp(str1,str2);
if(!i){
printf("文字列は等しい\n");
}else if(i < 0){
printf("%sは%sより小さい\n",str1,str2);
}else
printf("%sは%sより大きい\n",str1,str2);
}


文字列を比較している部分のコードですが、if(!i)というのが分かりません。!iというのはiではないなら、ということですよね?またstrcmpも説明があやふやですごく分かりにくいです。
ここでは何をしているのですか?


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

Name: box  ..比類無きプログラマー(62,104ポイント)   Date: 2007/03/27(火) 20:53   No:6227     
Title: Re:超入門者コード    

> if(!i)というのが分かりません。

if (!i)

iが偽ならば

ここで、偽はゼロと等価

つまり、iがゼロならば、という意味

if (!i) は、if (i == 0) と等価


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

Name:  ..ぴよぴよ(432ポイント)   Date: 2007/03/27(火) 20:57   No:6228     
Title: Re:超入門者コード    
boxさんありがとうございます。理解できました。

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



Name:  ..かけだし(1,256ポイント)   Date: 2007/03/27(火) 12:49   No:6200       
Title: 音声ファイルが再生できない?    
うまく動作しなくて困っていることがあります。
突然、音声ファイルを読み込んで再生するプログラム等で音声が再生されなくなりました。
DXライブラリ本家のサイトにあるサンプルプログラムを試しても駄目でした。
以前正常に動作した(音声が再生された)プログラムすらも出来ません。
音声再生以外の動作はちゃんと行います。
どうして音声ファイルが再生できないのでしょうか?

例えば、

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

PlayMusic( "test.mid" , DX_PLAYTYPE_BACK ) ; // test.midのバックグラウンド演奏

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

このようなものを実行しても駄目です。
ちなみにtest.mid以外のファイル(wavやogg等)でも試してみましたが駄目でした。
ファイルは実際にありますし場所も間違っていないはずです。

他のアプリケーションでは音声や音楽が聴けますし(IEでtest.midを開く等)
音量が小さくなっているということもありません。

もしかしたらこちらの環境に問題があるのかもしれないので環境を書いておきます。

コンパイラ BorlandC++ 5.5
Windows XP SP2
Pentium III 700MHz
128MB RAM

それとLog.txtに気になる行を見つけたのですがこれは関係あるのでしょうか?
682: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB

よろしくお願いします。



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


Name: バグ  ..プログラマー(33,973ポイント)   Date: 2007/03/27(火) 13:29   No:6202     
Title: Re:音声ファイルが再生できない?    
if( PlayMusic( "test.mid" , DX_PLAYTYPE_BACK ) == -1 )
{
printfDx( "Error!!" );
return -1;
}

PlayMusic関数の部分を上記のように変更して、メッセージが表示されたら、関数の実行に失敗していると思われます。エラーの内容まではリファレンスに書かれていなかったので、製作者の方に聞かれてみては如何でしょう?


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

Name:  ..かけだし(1,297ポイント)   Date: 2007/03/27(火) 14:55   No:6206     
Title: Re:音声ファイルが再生できない?    
PlayMusic関数の部分を変更してみましたが、メッセージは表示されませんでした。
とりあえず本家のほうで質問してみたいと思います。
どうもありがとうございました。


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

Name: 管理人 [URL]  ..ハッカー(249,372ポイント)   Date: 2007/03/27(火) 17:15   No:6219     
Title: Re:音声ファイルが再生できない?    
バグさんのおっしゃる
 


if( PlayMusic( "test.mid" , DX_PLAYTYPE_BACK ) == -1 )
{
printfDx( "Error!!" );
return -1;
}

 
 
の後には裏画面反映関数を書く必要があるようです。

midファイルの再生にはSWシンセサイザのボリュームが関係しているんでしたよね??
そこが下がっているとか・・しかし他のmidファイルは聞けるのでしたら
そうではないようですね。

一度、

 

if( PlayMusic( "test.mid" , DX_PLAYTYPE_BACK ) == -1 )
{
printfDx( "Error!!" );
ScreenFlip() ;
WaitKey();
return -1;
}
 
 


このように書いてみてはいかがでしょうか。


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

Name:  ..かけだし(1,351ポイント)   Date: 2007/03/27(火) 17:47   No:6222     
Title: Re:音声ファイルが再生できない?    
そのようにしても変化はなく、メッセージは表示されませんでした。

ちなみにPlaySound関数でもPlayMusic関数でも同じ結果です。
まあ別にmidでもwavでもoggでもいいんですがね;


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



Name: そら  ..かけだし(1,173ポイント)   Date: 2007/03/27(火) 16:31   No:6213       
Title: malloc と free について質問です    

malloc と free について質問です。

作成しているプログラムで、場合によってはデータ数が跳ね上がるので
データ数を可変にしたいと考えています。

そこで、意味も分からず malloc と free を使ったところ、
割当には成功するものの解放が出来ません。

気になるところ
 ※1、※2の部分

どこがいけないのでしょうか?
とりあえずコンパイルが通ったのでOKとしてますが、根本的にダメかも知れません。


以下、ソース。
とりあえず、実験なのでコンソールアプリです。

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

//======================================
// 構造体定義
//======================================
typedef struct {
int id;
} INFO_T;

typedef struct {
int use;
INFO_T *info;
} LIST_T;

//======================================
// メモリ割当
//======================================
int add_data( INFO_T **info )
{
*info = (INFO_T *)malloc( sizeof(INFO_T) );

if( *info == NULL ){
return 0;
}

// .id でも ->id でもダメ <-- ※2
// id = 1 にしたい
printf("%08x\n", *info);

return 1;
}

//======================================
// メモリ解放
//======================================
int del_data( INFO_T **info )
{
free((char *)*info);

return 1;
}

//======================================
// メイン
//======================================
int main(int argc, char* argv[])
{
int i, n;
char c[128];

LIST_T data[20];

memset(&data, 0, sizeof(data));
srand((unsigned)time(NULL));

// 初期状態
printf("=== 初期状態 ===\n");
for(i=0;i<20;i++){
printf("%2d: %08x\n", i, data[i].info);
}

printf("=== メモリ割当中 ===\n");
for(i=0;i<5;i++){
n = rand()%20;
if( data[n].use == 0 ){
if( add_data( &data[n].info ) != 0 ){
data[n].use = 1;
data[n].info->id = 1;
printf("%08x(id=%d)\n", data[n].info, data[n].info->id);
}
}else{
data[n].info->id++;
printf("%08x(id=%d)\n", data[n].info, data[n].info->id);
}
}

// メモリ割り当て済み
printf("=== メモリ割当済 ===\n");
for(i=0;i<20;i++){
printf("%2d: %08x\n", i, data[i].info);
// メモリの解放
del_data( &data[i].info );
}

// 初期状態のハズ? <-- ※1
printf("=== メモリ解放後 ===\n");
for(i=0;i<20;i++){
printf("%2d: %08x\n", i, data[i].info);
}

printf("終了します@Input Any Keys...");
scanf("%s", c);

return 0;
}




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


Name: Blue  ..ぴよぴよ(304ポイント)   Date: 2007/03/27(火) 16:48   No:6216     
Title: Re:malloc と free について質問です    
freeって、自動的にNULLを入れるような機能はないはず。
(そうならfreeの引数はポインタのポインタになっていないと)

※2は何をしたいのかよくわからないです。


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

Name: なぎ  ..中級者(14,878ポイント)   Date: 2007/03/27(火) 17:10   No:6217     
Title: Re:malloc と free について質問です    

まず、free() しても動的に確保したメモリの中身は、(恐ろしいことに)しばらく、何の変化もありません。
ですから、何かを見て、free() したかどうかを知ることはできません。

あと、※2のところは、

(*info)->id = 1;

ですね。


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

Name: そら  ..ぴよぴよ(775ポイント)   Date: 2007/03/27(火) 17:15   No:6218     
Title: Re:malloc と free について質問です    

http://www.st.rim.or.jp/~phinloda/cqa/cqa4.html
Q 【freeした直後の領域】


確かに、NULLにはならないようですね・・・。
使ったことない関数なので、知りませんでした。

そこで、

int del_data( INFO_T **info )
{
INFO_T *next = NULL;

free((char *)*info);

*info = next;

return 1;
}

とすれば、※1 の部分は初期状態と一致しました。

・・・が、自分で NULL を入れているのでそれは当たり前。
本当に解放されているのでしょうか?

malloc, free なんて使ったことが無いので、さっぱり分かりません。


構造体配列が0〜21735個で、平均で40個ぐらいなので、最大分を固定で取ると、
このデータだけで数百キロバイトになってしまうので、動的にしようと思った次第です。


※2は、
info->id = 1;
info.id = 1;
*info->id = 1;
*info.id = 1;
**info->id = 1;
**info.id = 1;
全部コンパイルが通らないが、一体どうすれば入るのだろうって話です。


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

Name: そら  ..ぴよぴよ(886ポイント)   Date: 2007/03/27(火) 17:22   No:6221     
Title: Re:malloc と free について質問です    

※2について

確認しました。

言われてみれば、* は最後に解決されますね。

運良く(?)コンパイル通らなかったから気付けたけど、
コンパイル通ってたら絶対気付かねー。



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



Name: ループ  ..ぴよぴよ(233ポイント)   Date: 2007/03/21(水) 20:16   No:5996       
Title: ループについて    

#include <stdio.h>

int powint(int , int);

int main(){
int i;

for(i = 0; i <= 10 ; i++){
printf("%2d\t%d\n", i , powint(2,i));
}

return 0;
}
int powint(int x,int p) {
int y = 1;
while(p-- > 0) {
y *= x;
}
return y;
}


powint()内のループが良く分かりません。
まず、xには2,pにはiがきますよね。すると、while(p-- > 0)ってのは最初0 > 0となってp--
ってできないのではないのですか?よくこの中のループ理解できないです。

あと、y *= xも微妙です。y = y * xのこと?


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


Name: box  ..熟練のプログラマー(59,722ポイント)   Date: 2007/03/21(水) 20:26   No:5997     
Title: Re:ループについて    

> まず、xには2,pにはiがきますよね。すると、while(p-- > 0)ってのは最初0 > 0となってp--
> ってできないのではないのですか?よくこの中のループ理解できないです。

呼び出し元の i がゼロのとき、powint関数の引数 p は同じくゼロです。
すると、while文の条件判定で偽になります。
その場合、while文の中(y *= x;)を全く実行せずに、return y; します。
つまり、2のゼロ乗である、1を呼び出し元に返しているのです。

> あと、y *= xも微妙です。y = y * xのこと?

そうです。
+=, -=, /=, %= などの演算子と同種です。



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

Name: ループ  ..ぴよぴよ(259ポイント)   Date: 2007/03/22(木) 08:21   No:6009     
Title: Re:ループについて    
for()でfor(;;)ていう中になにもないやつってどういうこと?無限ループってことですか?

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

Name: 管理人 [URL]  ..ハッカー(242,311ポイント)   Date: 2007/03/22(木) 08:46   No:6010     
Title: Re:ループについて    
そうです、
while(1)
のように無限ループになります。


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

Name: ループ  ..ぴよぴよ(612ポイント)   Date: 2007/03/27(火) 14:16   No:6203     
Title: Re:ループについて    

int main(void) {
int num,count,rigth,ans;

for(num = 1; num < 5; num++) {
printf("%d + %d =",num,num);
scanf("%d",&ans);
if(ans == num + num){
printf("%dは正解です\n",ans);
}else{
printf("NG\n");
printf("もう一度回答してください\n");
rigth =0;

for(count = 0; count < 3 && !rigth; count++){
printf("%d + %d =",num ,num);
scanf("%d",&ans);
if(ans == num + num) {
printf("正解\n");
rigth = 1;
}
}

if(!rigth) {
printf("%dが正解です",num + num);
}
}
return 0;
}
}


rigth =1,rigth =0とは一体なんでしょうか?どのような動きをするのでしょうか?


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

Name: Yuki  ..上級者(18,474ポイント)   Date: 2007/03/27(火) 14:40   No:6204     
Title: Re:ループについて    
正解判定フラグとでもいいますか。


if(ans == num + num) {
printf("正解\n");
rigth = 1;
}


入力された回答が正解だったら1、間違っていたら0としているようです。


for(count = 0; count < 3 && !rigth; count++){


の部分で、正解するか、3回間違えるまでループしています、


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

Name: バグ  ..プログラマー(34,192ポイント)   Date: 2007/03/27(火) 14:49   No:6205     
Title: Re:ループについて    
変数rigthはフラグとして使われているようですね。
入力された答えがNGの場合には0が、正解だった場合には1がそれぞれ代入されています。

rigthが判定に使われているのは2ヶ所ありますね。1ヶ所はforループの中、もう1ヶ所はif文です。

まずは前者のforループですが、rigthの前に!演算子がありますね。これは真・偽を逆転させる演算子です。C言語では0を偽とし、それ以外( 大抵の場合は1 )を真と判定します。

つまり、countが3以下でなおかつrigthが0の場合にループを繰り返しなさいという意味になります。ですから、今回のforループは最初の入力でNGだった場合に、更に3回のリトライを行っている事になります。

そして後者のif文ですが、先ほどのforループ内で、3回のリトライ全てに不正解だった場合には、当然rigthは0のままな訳ですから、正解を表示している訳です。これは正解が入力された場合にはrigthが1になるので、表示されません。


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

Name:  ..ぴよぴよ(955ポイント)   Date: 2007/03/27(火) 15:15   No:6211     
Title: Re:ループについて    
return 0;
の位置がおかいような。
最初のfor文が機能していません。


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

Name: ループ  ..ぴよぴよ(637ポイント)   Date: 2007/03/27(火) 16:42   No:6215 解決!     
Title: Re:ループについて    
Yukiさん、バグさん解説ありがとうございます!

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



Name: 管理人 [URL]  ..ハッカー(245,977ポイント)   Date: 2007/03/26(月) 17:38   No:6121       
Title: ジャンケンプログラムを作ろう!    
前のトピの回答の続きとして、書きました。

まだC言語でゲームを作ったことの無い人、「プログラムを賢く書く」ってどういうことかわからない人、プログラムの面白さを実感した事が無い人、

是非このトピの内容をご覧下さい^^

プログラム独特の考え方の紹介、ゲームプログラムの紹介をいたします☆

必要知識として

・scanf
・printf
・if文
・配列、文字列

の使い方さえわかっていれば大丈夫です!

ではまず、ジャンケンをするのにプレイヤーの意思を受け取る部分を作ってみましょう。
 
 
 

#include <stdio.h>

int main(){
int you;

printf("ジャンケン・・・。\n\n");
printf("0:グー 1:チョキ 2:パー\n\n");

scanf("%d",&you);

printf("あなたの入力:%d\n\n",you);

return 0;
}
 
 
プレイヤーの入力情報を格納するyou変数を用意し、そこにscanfで取り込んでいるだけです。
後はprintfで表示を行っているだけです。


コンピュータにジャンケンを出させてみましょう。
プレイヤーは0〜2の数字を入力してそれぞれ表現しましたね。
コンピュータにも0〜2の数字を出させて見ましょう。

ランダムな数というのはゲームにとって最重要ポイントです。
「毎回同じ結果になる」ゲームはゲームとは言いません。
人間はいつも違う結果を残すからゲームになるわけですね。

ここでランダムな数を作るにはrand()関数を使います。
これは最初に
#include <stdlib.h>
と書くことで使えるようになる関数です。
rand()と書くとここの部分はその時によって0〜32767の数に代わります。
つまり
int a;
a = rand();
とかくと、aには0~32767までの数字のどれかが入る事になります。

この数字を使って0〜2の数字に変換するには?
「割ったあまり」という考え方をここで出してきます。
+-*/という四則演算子以外に%という割ったあまりを計算する演算子があります。

a = 5 % 2;

と書くと、5を2で割ったあまりが入ります。つまり1です。

a = 5 % 3;

と書くと、5を3で割ったあまりが入ります。つまり2です。
ここで連続で見てみましょう。

a = 0 % 3; ---->このとき a=0
a = 1 % 3; ---->このとき a=1
a = 2 % 3; ---->このとき a=2
a = 3 % 3; ---->このとき a=0
a = 4 % 3; ---->このとき a=1
a = 5 % 3; ---->このとき a=2
a = 6 % 3; ---->このとき a=0
a = 7 % 3; ---->このとき a=1
a = 8 % 3; ---->このとき a=2
a = 9 % 3; ---->このとき a=0

aの値が0,1,2,0,1,2,とループしている事に気が付きましたか?
そうこのように書くことで、xで割ったあまりを計算するとx種類の数が生成出来るのです。

つまり

com = rand() % 3;

と書くことで、0〜2の数が生成できますね。これを利用してみましょう。
 
 

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

int main(){
int you,com;

printf("ジャンケン・・・。\n\n0:グー 1:チョキ 2:パー\n\n");

scanf("%d",&you);

com = rand()%3;

printf("あなた\t\t%d\nコンピュータ\t\t%d\n\n",you,com);

return 0;
}

実行結果

ジャンケン・・・。

0:グー 1:チョキ 2:パー

1
あなた 1
コンピュータ 2
 
 
おぉ、これでゲームらしくなってきたな・・・
と思ったら間違いです。
これを何度も実行してみましょう。

コンピュータ 2
コンピュータ 2
コンピュータ 2
コンピュータ 2
コンピュータ 2

・・・あれ?コンピュータは2しか出さないぞ?
と気が付くと思います。そうなんです、コンピュータは「言った事しかしない。正確にその事しかしない」ので、「だいたいな数を出せ、ランダムな数を出せ」というのはホント苦手です。
ですから、ランダムな数にさせる「きっかけ」を持たせないといけないのです。

実行するたびに変わる数って何かいいものあるんだろうか・・。と考えると
実行するたびに変わる数で一ついいものがありますね。
そう、実行した瞬間の時刻です。
「○○日○○時間○○分○○秒」
という今の時刻の事ですね。おそらく前回実行したときと今回実行した時ではこの数は異なっているはずです。
これにきっかけをもたせてランダムな数を作らせたらいいでしょう。

それは

srand((unsigned)time(NULL));

を最初に書くと実現できます。
この関数は最初に
#include <time.h>
を書くことで使用できるようになります。
「ん・・なんか難しいな」
とお思いでしょうが、別に意味は知らなくてもOKです。
これを書けば乱数が質のよい乱数になるんだなと覚えて置いてください。

プログラムにまとめると以下のようになります


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


Name: 管理人 [URL]  ..ハッカー(248,408ポイント)   Date: 2007/03/26(月) 17:39   No:6122     
Title: Re:ジャンケンプログラムを作ろう!    


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

int main(){
int you,com;

srand((unsigned)time(NULL));

printf("ジャンケン・・・。\n\n0:グー 1:チョキ 2:パー\n\n");

scanf("%d",&you);

com = rand()%3;

printf("あなた\t\t%d\nコンピュータ\t\t%d\n\n",you,com);

return 0;
}


実行結果

ジャンケン・・・。

0:グー 1:チョキ 2:パー

1
あなた 1
コンピュータ 0

 

 
先ほどと違ってコンピュータは毎回違う数字を出してきますね。
では次にこの数字を使ってじゃんけんをしてみましょう。

ジャンケンをして、あいこの時のみもう一度ジャンケンをして、
まだ勝ち負けの判定をせずに終えるプログラムを作ってみます。


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

int main(){
int you,com;

srand((unsigned)time(NULL));

printf("ジャンケン・・・。\n\n0:グー 1:チョキ 2:パー\n\n");

while(1){
scanf("%d",&you);

com = rand()%3;

printf("あなた\t\t%d\nコンピュータ\t\t%d\n\n",you,com);

if(you==com){
printf("あいこで・・・。\n\n0:グー 1:チョキ 2:パー\n\n");
continue;
}
else{
break;
}
}
return 0;
}

実行結果

ジャンケン・・・。

0:グー 1:チョキ 2:パー

1
あなた 1
コンピュータ 1

あいこで・・・。

0:グー 1:チョキ 2:パー

2
あなた 2
コンピュータ 2

あいこで・・・。

0:グー 1:チョキ 2:パー

1
あなた 1
コンピュータ 1

あいこで・・・。

0:グー 1:チョキ 2:パー

0
あなた 0
コンピュータ 0

あいこで・・・。

0:グー 1:チョキ 2:パー

1
あなた 1
コンピュータ 2

 
 
while(1)というのは無限ループのことでbreak文を書かない限り永遠にループし続けます。

continue文、break文はよろしいでしょうか?
continueを書くとその時点でループの最初に戻り
breakを書くとその時点でループから抜けます。

you==comの時はあいこですから、この時もう一度ジャンケンをさせているわけですね。
あいこの間は延々とループが繰り返されます。

今回ジャンケンプログラムを紹介する醍醐味はこの次です!!

どうやって勝ち負けを判定させるか

そりゃ

if(プレイヤーがグー かつ コンピュータがチョキ)
  勝ち;
if(プレイヤーがチョキ かつ コンピュータがグー)
  負け;

・・・

と全てのパターンについて条件を書いていってもプログラムは完成します。
しかしジャンケンではなく、1万通りも2万通りも条件があるようなプログラムだったらこのような書き方が通るでしょうか?
そう、「プログラムは賢く書く」という必要があるんです。

ここでジャンケンはどのような性質を持っているか考えます。


0:グー 1:チョキ 2:パー
として、

プレイヤー コンピュータ
0 1 ->勝ち
1 2 ->勝ち
2 0 ->勝ち

1 0 ->負け
2 1 ->負け
0 2 ->負け
 
 
ここでみてみると、0,1,2,0,1,2...というループで考えると自分が出した数字の次の数字がコンピュータの出した数字と同じ時「勝ち」でその反対が「負け」になっていることがわかります。

0,1,2,0,1,2というループは3で割ったあまりを計算する事で変換できるんでしたよね。

つまり

(自分の出した数 + 1) % 3 がコンピュータの出した数だったら勝ち!であることがわかります。

あいこでもないし、上記勝ちでもない時は「負け」であることがわかりますね。
この事をプログラムで書いてみましょう。


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

int main(){
int you,com;

srand((unsigned)time(NULL));

printf("ジャンケン・・・。\n\n0:グー 1:チョキ 2:パー\n\n");

while(1){
scanf("%d",&you);

com = rand()%3;

printf("あなた\t\t%d\nコンピュータ\t\t%d\n\n",you,com);

if(you==com){
printf("あいこで・・・。\n\n0:グー 1:チョキ 2:パー\n\n");
continue;
}
else if((you+1)%3==com){
printf("あなたの勝ちです!\n\n");
break;
}
else{
printf("あなたの負けです!\n\n");
break;
}
}
return 0;
}

実行結果

ジャンケン・・・。

0:グー 1:チョキ 2:パー

2
あなた 2
コンピュータ 0

あなたの勝ちです!

 
 
ほら、自分がパーに対してコンピュータがグーですからちゃんと「勝ち」と判定してくれましたよ!

これでジャンケンプログラムの完成ですね!
しかし

あなた 2
コンピュータ 0

という表示ではちょっとあじけないので、文章で出させて見ましょう。
今せっかく0がグー、1がチョキ、2がパーという対応関係があるのですから
この対応関係を文字列とも関連付けて見ましょう。

char jan[3][7]={"グー","チョキ","パー"};

このように文字列を用意します。
今回一番長い語句は「チョキ」です。全角3文字なので6バイト用意する必要があり、文字列は最後に終端記号が1バイトはいるので7バイト用意する必要があります。
この7バイトの文字列格納配列を3つ用意します。

jan[0]には「グー」
jan[1]には「チョキ」
jan[2]には「パー」

が入っていますから、先ほどの対応関係とぴったりですね。
これをプログラムに書いてみましょう。

以下のプログラムは本当に完成したプログラムです



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

Name: 管理人 [URL]  ..ハッカー(248,797ポイント)   Date: 2007/03/26(月) 17:39   No:6123     
Title: Re:ジャンケンプログラムを作ろう!    

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

int main(){
int you,com;
char jan[3][7]={"グー","チョキ","パー"};

srand((unsigned)time(NULL));

printf("ジャンケン・・・。\n\n");

while(1){
printf("0:グー 1:チョキ 2:パー\n\n");

scanf("%d",&you);

com = rand()%3;

printf("あなた\t\t%s\nコンピュータ\t\t%s\n\n",jan[you],jan[com]);

if(you==com){
printf("あいこで・・・。\n\n");
continue;
}
else if((you+1)%3==com){
printf("あなたの勝ちです!\n\n");
break;
}
else{
printf("あなたの負けです!\n\n");
break;
}
}
return 0;
}


実行結果

ジャンケン・・・。

0:グー 1:チョキ 2:パー

1
あなた チョキ
コンピュータ チョキ

あいこで・・・。

0:グー 1:チョキ 2:パー

1
あなた チョキ
コンピュータ パー

あなたの勝ちです!


 
 
どうでしょう?ゲームらしいゲームが作成できたと思います。
このように

・割ったあまりを計算する事である区間の数字のループを作る

とか

・勝ち負け判定を勝負の性質を考える事で実装を容易にする

という事はとても大事な事です。
今回の記事でそれが少しだけでもわかってもらえたら光栄です☆




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

Name: バグ  ..プログラマー(33,868ポイント)   Date: 2007/03/27(火) 13:20   No:6201     
Title: Re:ジャンケンプログラムを作ろう!    
では、私も初心者向けな『お手軽神経衰弱』のプログラムを載せてみますね。


/*****************************************************************************/
/* お手軽神経衰弱♪(スクロールさせたらカンニングできます(笑)) */
/* 2007.03.27 Programing By Bug */
/*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// カードの表示用関数
void DrawCard( int Card[ 4 ][ 13 ] , int X[ 2 ] , int Y[ 2 ] )
{
int i , j;
char *pMark[ 13 ] = { "A" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10" , "J" , "Q" , "K" };

for( j = 0 ; j < 4 ; j++ ) {
for( i = 0 ; i < 13 ; i++ ) {
if( i == X[ 0 ] && j == Y[ 0 ] || i == X[ 1 ] && j == Y[ 1 ] ) { // X,Yで指定された座標と一致したらカードの数字を表示
printf( "%s" , pMark[ Card[ j ][ i ] ] );
}
else if( Card[ j ][ i ] == 13 ) { // 既に取得した場所ならば空白表示
printf( "□" );
}
else { // 上記以外ならば、伏せて表示
printf( "■" );
}
}
printf( "\n" );
}
printf( "\n" );
}

// メイン関数
int main()
{
int i , j , Get , Cnt , A[ 2 ] , B[ 2 ] , X[ 2 ] , Y[ 2 ] , Card[ 4 ][ 13 ];

srand( ( unsigned )time( NULL ) );

// カウントを0で初期化する
Get = 0;
Cnt = 0;

// カードの初期化
for( j = 0 ; j < 4 ; j++ ) {
for( i = 0 ; i < 13 ; i++ ) {
Card[ j ][ i ] = i;
}
}

// カードをシャッフルする( とりあえず1000回 )
for( i = 0 ; i < 1000 ; i++ ) {
// 入れ替え用の座標の準備
A[ 0 ] = rand() % 4;
A[ 1 ] = rand() % 4;
B[ 0 ] = rand() % 13;
B[ 1 ] = rand() % 13;

// カードを入れ替える
j = Card[ A[ 0 ] ][ B[ 0 ] ];
Card[ A[ 0 ] ][ B[ 0 ] ] = Card[ A[ 1 ] ][ B[ 1 ] ];
Card[ A[ 1 ] ][ B[ 1 ] ] = j;
}

// A,B配列へダミー座標を代入( 全裏返し表示の為 )
A[ 0 ] = -1;
A[ 1 ] = -1;

// 全てのカードをGetするまでループする
while( Get < 26 )
{
// 全て裏返し状態でカードを表示する為にダミー座標を使用する
DrawCard( Card , A , A );
Cnt++;
printf( "%d手目\n" , Cnt );

// 裏返す場所を指定する
for( i = 0 ; i < 2 ; i++ ) {
printf( "%d枚目のカードの位置を指定してください\n" , i + 1 );
printf( "X( 0 〜 12 ) = " );
scanf( "%d" , &X[ i ] );
printf( "Y( 0 〜 3 ) = " );
scanf( "%d" , &Y[ i ] );

// 既に開かれている場所や、無効な座標が入力されたら入力をしなおす
if( X[ i ] < 0 || X[ i ] > 12 || Y[ i ] < 0 || Y[ i ] > 3 || Card[ Y[ i ] ][ X[ i ] ] == 13 ) {
printf( "Error!!\n" );
i--;
continue;
}

// 入力された2箇所の座標が同じ場所であれば入力をしなおす
if( i == 1 && X[ 0 ] == X[ 1 ] && Y[ 0 ] == Y[ 1 ] ) {
printf( "Error!!\n" );
i--;
continue;
}
}

// 入力された場所を裏返してカードを表示する
DrawCard( Card , X , Y );

// 裏返した2枚が同じ物だったらGetカウントをインクリメントして、2箇所の数値を13( 取得済み )にする
if( Card[ Y[ 0 ] ][ X[ 0 ] ] == Card[ Y[ 1 ] ][ X[ 1 ] ] ) {
printf( "Nice Get!!\n" );
Get++;
Card[ Y[ 0 ] ][ X[ 0 ] ] = 13;
Card[ Y[ 1 ] ][ X[ 1 ] ] = 13;
}
}

printf( "\nお疲れ様でした…\n" );
printf( "%d手でクリアです!!" , Cnt );

return( 1 );
}


開発環境はVC++6.0ですが、あまり変わった事はしていないので、おそらくどの環境でもいけるかと思います…保障はできませんが…(^_^;)


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



Name: ケン@ポチ  ..かけだし(1,532ポイント)   Date: 2007/03/27(火) 09:51   No:6158       
Title: 文字列bの最初の単語だけをコピーする関数の作成    
前回作成した文字列bを文字列aにコピーする関数をもとにつくっています。
今回は単語のコピーで、単語の区切りは空白で表しています。また、文字列の先頭の空白は読み飛ばすようにします。

例えば
(入力) This is a pen
(出力)This
といった感じです。Thisの前の空白は読み飛ばしています。

そこで前回の文字列bを文字列aにコピーする関数を改変して以下のようなプログラムにしました。
#include<stdio.h>

int word_copy(char *p1,char *p2);

int main(void){
char a[256],b[256];
char *p1,*p2;

p1= a;
p2= b;

gets(p2);

word_copy(p1,p2);

return 0;
}

int word_copy(char *p1,char *p2){
int c=0;
while(*p2 != ' '){ /*文字列が空白になるまで*/
*p1 = *p2;
p1++;
p2++;
c++;
}
while(p1>p2){
p1--;
}
printf("%s\n",p1);
printf("length=%d\n",c);
return c;
}

このプログラムを実行すると、This is a penと入力した際にis a penと表示されてしまいます。
単語の長さはちゃんとThisの4が表示されるのですが、文字のほうが表示されません。
これはwhile文はちゃんと条件通りに行っているという事ですよね?
p1とp2共に空白のアドレスまで移動し、p1はそこから最初のアドレスまで戻っているのだからThisが表示されると思うのですが・・・

またこの場合だとThisの前に空白があると当然Thisは読み取られません。解決するにはどのようにしたらよいでしょうか?



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


Name: なぎ  ..中級者(14,703ポイント)   Date: 2007/03/27(火) 10:26   No:6173     
Title: Re:文字列bの最初の単語だけをコピーする関数の作成    
is a pen と表示されるのは、
while(p1>p2){
p1--;
}
が、そもそも間違っているからです。
p1 は、「最初のアドレス」までは戻りません。
運が良ければ、「現在の p2 のアドレス」に戻るだけです。
つまり、最初のスペースの次です。

word_copy() の最初のほうで、

char *wk = p1;
で p1 の「関数に入った時の=コピーが終了した時のコピー先の」アドレスを保存しておいて、
単に表示させるだけであれば、
printf("%s\n",wk);
でOKです。

また、この場合、コピー先のデータは、文字列の終端処理がされていません。
先ほどのものは、たまたま、コピー元の文字列の先頭をポイントしましたし、今回お書きのプログラムも、p2 の途中から表示しているので、問題は表面化しませんでしたが、

while(*p2 != ' '){ /*文字列が空白になるまで*/
*p1 = *p2;
p1++;
p2++;
c++;
}
の直後に、
*p1 = '\0';
が必要です。

さらにいえば、呼び出し側で、

p1= a;
p2= b;

gets(p2);

word_copy(p1,p2);

とする必要はなく、

gets(b);
word_copy(a, b);

でOKです。
この方が、シンプルになると思います。

最後に、「This の前に空白があると……」というのは、その処理がないだけですね。

事前に(以前のプログラムにあった)
while(*p2 != '\0'){
p2++;
}
で空白を読み飛ばせばOKです。(今回は、コピーせずに読み飛ばすだけ9




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

Name: なぎ  ..中級者(14,961ポイント)   Date: 2007/03/27(火) 11:09   No:6193     
Title: Re:文字列bの最初の単語だけをコピーする関数の作成    
ちょっと訂正。

事前に(以前のプログラムにあった)
while(*p2 == ' '){
p2++;
}
で空白を読み飛ばせばOKです。(今回は、コピーせずに読み飛ばすだけ)



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

Name: ケン@ポチ  ..入門者(2,781ポイント)   Date: 2007/03/27(火) 11:33   No:6199 解決!     
Title: Re:文字列bの最初の単語だけをコピーする関数の作成    
以下のように書くことで、最初の空白の呼び飛ばし、最初の単語だけ表示ができました!


#include<stdio.h>

int word_copy(char *p1,char *p2);

int main(void){
char a[256],b[256];


gets(b);

word_copy(a,b);
return 0;
}

int word_copy(char *p1,char *p2){
int c=0;
char *p3;

p3 = p1;
while(*p2 ==' '){
p2++;
}
while(*p2 !=' '){
*p1 = *p2;
p1++;
p2++;
c++;
}
*p1='\0';
printf("%s\n",p3);
printf("length=%d\n",c);
return c;
}

今回はp3にp1の先頭アドレスを代入しておいて、p1が端っこまで行ってもp3で先頭アドレスが呼び出せるということですね。最後の所をp1 = p3としprintf("%s\n",p1)としても同じ結果が得られました。どっちもp1の先頭アドレスを指す事に変わりはない事も確認できました。

また
while(*p2 == ' '){
p2++;
}
の記述ですが、目にすると「なぁんだそんな事かぁ」と思うのですが、それがなかなか思いつかないので大変です。柔軟な思考が大事ですね!ありがとうございました。


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



Name: のん  ..ぴよぴよ(68ポイント)   Date: 2007/03/26(月) 19:32   No:6126       
Title: ファイル入出力    
独学で勉強しているのですが、ファイルの入出力がさっぱり分かりません。テキストは独習Cを使っています。
イマイチ本の説明が分からないです。

getchar()>>一文字読み込む(キーボードから次に入力された文字を返す。データーの読み取りでエラーが出た場合はEOFを返す)

@この返すという意味は一体なんでしょう?返されたものはコンソールとかに出てくるのでしょうか?

Agetche(),putch()という非標準のものも説明されていますが、実際使うことあるのですか?標準を使うべきか非標準を使うべきか混乱しています。

B次のコードを見てください
<pre>
int main(void) {
char *p,str[80];
printf("文字列を入力してください\n");
p = gets(str);
if(p){
printf("%s,%s",p,str);
}
return 0;
}

if(*p)じゃなくてなんでif(p)なのでしょうか?pにstrのアドレスを入れているのはわかるのですが。
あと、このコードって別にポインタを使わなくてもいいですよね?str自体が文字列のポインタだえすからね?





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


Name: のん  ..ぴよぴよ(130ポイント)   Date: 2007/03/26(月) 19:41   No:6127     
Title: Re:ファイル入出力    
質問の追加です。
Cfgets(),fputs()とfgetc(),fputs()の違いってなんですか?
また、どちらを通常つかうべきでしょうか?


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

Name: miyaza  ..初心者(6,837ポイント)   Date: 2007/03/26(月) 19:46   No:6128     
Title: Re:ファイル入出力    
> @この返すという意味は一体なんでしょう?返されたものはコンソールとかに出てくるのでしょうか?
関数の戻り値です。コンソールには表示されません。

ch = getchar() などとした場合に正常ならば読み取った文字をchに格納してエラーしたらEOFを格納します。



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

Name: のん  ..ぴよぴよ(139ポイント)   Date: 2007/03/26(月) 19:57   No:6129     
Title: Re:ファイル入出力    
解説ありがとうございます。

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

Name: のん  ..ぴよぴよ(169ポイント)   Date: 2007/03/26(月) 20:26   No:6131     
Title: Re:ファイル入出力    

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

int main(int argc, char *argv[]) {
FILE *fp;
char str[80];

if(argc != 2) {
return 1;
printf("ファイル名の入力\n");
}

fp = fopen(argv[1],"w");
if(fp == NULL) {
printf("エラー\n");
return 1;
}

printf("終了するには空白行くを入力\n");

do{
printf(": ");
gets(str);
strcat(str, "\n");
if(*str != '\n') {
fputs(str,fp);
}
}while(*str != '\n');

fclose(fp);
return 0;
}

@実行しファイル名を入力するとバッチファイルとして認識していませんと出ます。なぜでしょう?
Aコマンドライン引数がイマイチ分からないです。何が何を指しているのか?
Bこのコードはファイル名を入力させますが、実行するとファイルは自動的に作られるのでしょうか?
fp = fopen("test.txt","w");としたときはファイルがないときは作られると思うのですが。
Cprintf("終了するには空白行くを入力\n");とありますが、空白というのは、ENTERを押したらということ
なのでしょうか?それともスペース?
Ddo whileのなかのif文の動作がよく理解できないです。改行がないときは書き込みするというのは分かるのですが、
gets()ってのは一行読み取るをけですよね?つまり改行まで?・・・・

質問ばかりしてすみません。


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

Name: miyaza  ..初心者(7,118ポイント)   Date: 2007/03/26(月) 20:56   No:6132     
Title: Re:ファイル入出力    
> @実行しファイル名を入力するとバッチファイルとして認識していませんと出ます。なぜでしょう?
実行時のファイル名してはどのようにしているのでしょうか?

実行ファイル名 作成ファイル名

とコマンドラインから入力しているでしょうか。たとえば実行ファル名をa.exeとして作りたいファイルをtest.txtとした場合

a.exe test.txt

となります。このときa.exeの後ろのtest.txtの部分がコマンドライン引数です。

>Bこのコードはファイル名を入力させますが、実行するとファイルは自動的に作られるのでしょうか?
作られます。

>Cprintf("終了するには空白行くを入力\n");とありますが、空白というのは、ENTERを押したらということ
なのでしょうか?それともスペース?
改行ですからENTERを押したらということになります。


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

Name: miyaza  ..初心者(7,020ポイント)   Date: 2007/03/26(月) 21:03   No:6133     
Title: Re:ファイル入出力    
>Ddo whileのなかのif文の動作がよく理解できないです。改行がないときは書き込みするというのは分かるのですが、

strの一文字目が'\n'かどうかを調べてそうでなければ文字列strをfpに書き出します。


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

Name: のん  ..ぴよぴよ(191ポイント)   Date: 2007/03/26(月) 21:26   No:6134     
Title: Re:ファイル入出力    
miyazaさん分かりやすい解説ありがとうございます。

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

Name: のん  ..ぴよぴよ(223ポイント)   Date: 2007/03/27(火) 08:25   No:6138     
Title: Re:ファイル入出力    
if(*str != '\n')のところせすが、if(str !='\n')にしてないのはなぜでしょう?

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

Name: miyaza  ..初心者(7,046ポイント)   Date: 2007/03/27(火) 08:40   No:6140     
Title: Re:ファイル入出力    
> if(*str != '\n')のところせすが、if(str !='\n')にしてないのはなぜでしょう?
先頭の文字を調べているからです。*を付けると先頭の内容を参照できます。


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

Name: のん  ..ぴよぴよ(267ポイント)   Date: 2007/03/27(火) 08:49   No:6141     
Title: Re:ファイル入出力    
miyazaさんありがとうございます。

2007/03/26(月) 20:26 のコードなんですが、正常に動かないのですが・・・


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

Name: のん  ..ぴよぴよ(329ポイント)   Date: 2007/03/27(火) 08:58   No:6145     
Title: Re:ファイル入出力    
fp = fopen(argv[1],"w");のところでC:\vc\P_test1\ex01.c(14) : warning C4047: 'function' : 間接参照のレベルが 'const char *' と 'char ' で異なっています。と出てしまいます。


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

Name: 組木紙織  ..初心者(8,135ポイント)   Date: 2007/03/27(火) 09:04   No:6148     
Title: Re:ファイル入出力    
何処がどんな風に正常に動かないかを教えてください。
そしてどのように動くのが正常であるかを教えてください。
それが分からないとどうすることが出来ません。

一般的な注意事項をなので気をつけてください。
多分ですがこの場合は

if(argc != 2) {
return 1;
printf("ファイル名の入力\n");
}


この部分を

if(argc != 2) {
printf("ファイル名の入力\n");
return 1;
}


少なくともコードを書いた意味を考えると、
このように修正します。


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

Name: のん  ..ぴよぴよ(627ポイント)   Date: 2007/03/27(火) 09:13   No:6150     
Title: Re:ファイル入出力    

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

int main(int argc, char argv[]) {
FILE *fp;
char str[80];

if(argc != 2) {
printf("error\n");
return 1;
}
printf("ファイル名入力\n");
fp = fopen(argv[1],"w");
if(fp == NULL) {
return 1;
}


printf("終了は空白行入力\n");
do {
printf(": ");
gets(str);
if(*str != '\n') {
fputs(str,fp);
}
}while(*str != '\n');
fclose(fp);
return 0;
}


ちょっと書き換えてみました。でもファイル名の入力とかまでいかないでイッキにプログラムの最後まで行って
しまいます。出力されるのは、errorだけです。なぜでしょうか?


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

Name: 組木紙織  ..初心者(8,166ポイント)   Date: 2007/03/27(火) 09:30   No:6152     
Title: Re:ファイル入出力    
独習Cのp200のあたりを見直してください。
main関数の引数を注意深くみてください。


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

Name: のん  ..ぴよぴよ(673ポイント)   Date: 2007/03/27(火) 09:36   No:6153     
Title: Re:ファイル入出力    
組木紙織 さんも独習もってるのですか?全部理解できます?ループなんかすごく分かりにくい書き方してる
感じなんですけど。


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

Name: のん  ..かけだし(1,143ポイント)   Date: 2007/03/27(火) 09:40   No:6154     
Title: Re:ファイル入出力    

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

int main(int argc, char argv[]) {
FILE *fp;
char str[80];

if(argc !=2) {
printf("ふぁいる名を指定\n");
return 1;
}

if((fp =fopen(argv[1],"w")) == NULL) {
printf("ファイルを開けません\n");
return 1;
}

printf("終了するには空白行入力\n");
do{
printf(": ");
gets(str);
if(*str !='\n'){
fputs(str,fp);
}
}while(*str !='\n');

fclose(fp);

return 0;
}

テキストのコードそのままかきました。警告がでるのですが。

vc\P_test1\ex01.c(14) : warning C4047: 'function' : 間接参照のレベルが 'const char *' と 'char ' で異なっています。
C:\vc\P_test1\ex01.c(14) : warning C4024: 'fopen' : の型が 1 の仮引数および実引数と異なります。
C:\vc\P_test1\ex01.c(22) : warning C4020: 'gets' : 実引数が多すぎます。
リンク中...

ex01.exe - エラー 0、警告 3


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

Name: 組木紙織  ..初心者(8,261ポイント)   Date: 2007/03/27(火) 09:44   No:6155     
Title: Re:ファイル入出力    
ファイル入出力の部分のループですか?
一通り全部読んで理解はしましたが、分かりにくい部分もありますね。

コードを書いて、コンパイルして、改変をして、見直して、
というのを繰り返せばそのうち理解できるとおもいます。


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

Name: 組木紙織  ..初心者(8,297ポイント)   Date: 2007/03/27(火) 09:46   No:6156     
Title: Re:ファイル入出力    
int main(int argc, char * argv[])

を忘れています。


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

Name: のん  ..かけだし(1,313ポイント)   Date: 2007/03/27(火) 09:49   No:6157     
Title: Re:ファイル入出力    
if(argc !=2) {
printf("ふぁいる名を指定\n");
return 1;
}

とコマンドライン引数がよくわからないですね。フルグラムの名前ってなんですか?ソースファイル名のこと?


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

Name: のん  ..かけだし(1,390ポイント)   Date: 2007/03/27(火) 09:53   No:6159     
Title: Re:ファイル入出力    
組木紙織さんありがとうございます。警告でなくなりましたが、実行すると、やはり


    if(argc !=2) {
printf("ふぁいる名を指定\n");
return 1;

のところのreturn 1;に行ってプログラムが終わってしまいます。


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

Name: なぎ  ..中級者(14,086ポイント)   Date: 2007/03/27(火) 09:56   No:6160     
Title: Re:ファイル入出力    
最初の2つの警告は、
int main(int argc, char argv[])
の行が間違っているためです。確認してみてください。
最後の警告は、このソースでは出ないはずですが?



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

Name: miyaza  ..初心者(7,176ポイント)   Date: 2007/03/27(火) 09:58   No:6161     
Title: Re:ファイル入出力    
コマンドライン引数を指定していますか?
コマンドライン引数はmain()関数に渡せる引数です。
実行するときどのようにしているのでしょうか?


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

Name: なぎ  ..中級者(14,178ポイント)   Date: 2007/03/27(火) 09:59   No:6162     
Title: Re:ファイル入出力    
警告については、既に回答がついた後でしたね。

> のところのreturn 1;に行ってプログラムが終わってしまいます。

それは、実行時に、ファイル名を指定していないからでは?
プログラムの名前の後ろに、(スペース明けて)ファイル名を指定してください。

ex01 test.txt

こんな感じ。


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

Name: miyaza  ..初心者(7,304ポイント)   Date: 2007/03/27(火) 10:07   No:6163     
Title: Re:ファイル入出力    
if(argc !=2) {
printf("ふぁいる名を指定\n");
return 1;
}
ここの部分argcの中には、コマンドライン引数の総数が入ります。総数には実行ファイル名も含まれます。

たとえば

a.exe test.txt

としたときargcには2が入ります。上のコードの判定部分では、引数の数を調べることによってファイル名が入力されたかを調べています。


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

Name: のん  ..かけだし(1,446ポイント)   Date: 2007/03/27(火) 10:12   No:6165     
Title: Re:ファイル入出力    
コンソールから実行ファイル名とか入力するのですよね?
私の場合なぜか、何も文字が打てないのですけど。
Visual Stdio 6.0をつかってるのですが・・・・。


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

Name: miyaza  ..初心者(7,329ポイント)   Date: 2007/03/27(火) 10:14   No:6166     
Title: Re:ファイル入出力    
実行時にコマンドプロントまたはDOSプロントから実行して下さい。


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

Name: バグ  ..プログラマー(33,299ポイント)   Date: 2007/03/27(火) 10:16   No:6167     
Title: Re:ファイル入出力    
コマンドプロンプトからファイル名を指定して実行していますか?
VC++6.0から直接実行していては、コマンドライン引数を指定する事は出来ないと思います。


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

Name: のん  ..かけだし(1,413ポイント)   Date: 2007/03/27(火) 10:18   No:6168     
Title: Re:ファイル入出力    
コマンドプロンプトから実行ってことはファイルがあるところまで移動してからでうしょね?

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

Name: miyaza  ..初心者(7,379ポイント)   Date: 2007/03/27(火) 10:20   No:6170     
Title: Re:ファイル入出力    
>コマンドプロンプトから実行ってことはファイルがあるところまで移動してからでうしょね?
そうです。


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

Name: のん  ..かけだし(1,451ポイント)   Date: 2007/03/27(火) 10:23   No:6171     
Title: Re:ファイル入出力    
ソースファイル名ex01.cの場合プロンプトから、ex01.exe test.txtとしましたが、ダメでした。

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

Name: miyaza  ..初心者(7,390ポイント)   Date: 2007/03/27(火) 10:26   No:6172     
Title: Re:ファイル入出力    
> ソースファイル名ex01.cの場合プロンプトから、ex01.exe test.txtとしましたが、ダメでした。
具体的にどうなりましたか?


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

Name: のん  ..かけだし(1,550ポイント)   Date: 2007/03/27(火) 10:30   No:6174     
Title: Re:ファイル入出力    
バッチファイルとして認識していないとでました。

ディレクトリは、vcというものの中にP_test1というフォルダを作りそのなかにex01.cというソースファイル
があります。

プロンプトからvcまでは移動できるのですが、P_test1までは移動できないですね??


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

Name: miyaza  ..初心者(7,415ポイント)   Date: 2007/03/27(火) 10:33   No:6175     
Title: Re:ファイル入出力    
ex01.exeはその中に存在していますか?
ex01.exeがないと実行できませんよ。


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

Name: のん  ..かけだし(1,627ポイント)   Date: 2007/03/27(火) 10:35   No:6176     
Title: Re:ファイル入出力    
P_test1フォルダまで移動できました!!が、ex01.exe test.txtとすると内部コマンドまたは外部コナンドとして操作可能なプログラム、バッチファイルとして認識していないとでます。

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

Name: miyaza  ..初心者(7,518ポイント)   Date: 2007/03/27(火) 10:39   No:6177     
Title: Re:ファイル入出力    
'ex01.exe'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とでたらex01.exeが無いようなものだとおもうのですが?
本当にex01.exeのあるフォルダにいますか?


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

Name: のん  ..かけだし(1,843ポイント)   Date: 2007/03/27(火) 10:40   No:6178     
Title: Re:ファイル入出力    
実行できました!!が、プログラムが終わらないのですが・・・。コードは


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

int main(int argc, char *argv[]) {
FILE *fp;
char str[80];

if(argc !=2) {
printf("ふぁいる名を指定\n");
return 1;
}

if((fp =fopen(argv[1],"w")) == NULL) {
printf("ファイルを開けません\n");
return 1;
}

printf("終了するには空白行入力\n");
do{
printf(": ");
gets(str);
if(*str !='\n'){
fputs(str,fp);
}
}while(*str !='\n');

fclose(fp);

return 0;
}

いきなり、終了するには空白行入力とでて、適当にaaaと入力してENTERをおしたのですが、入力がつづきますね。どういうことでしょう?


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

Name: のん  ..かけだし(1,873ポイント)   Date: 2007/03/27(火) 10:41   No:6179     
Title: Re:ファイル入出力    
テキストファイルはできているのですが、何も書き込まれていませんでした。

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

Name: miyaza  ..初心者(7,536ポイント)   Date: 2007/03/27(火) 10:43   No:6180     
Title: Re:ファイル入出力    
> いきなり、終了するには空白行入力とでて、適当にaaaと入力してENTERをおしたのですが、入力がつづきますね。
何も入力しないでENTERを押して下さい。


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

Name: miyaza  ..初心者(7,600ポイント)   Date: 2007/03/27(火) 10:46   No:6181     
Title: Re:ファイル入出力    
このプログラムは何も入力されていない行が出るまで繰り返されます。
だからaaaといれてENTERをおしても終了しません。終了するにはもう一度何も入力しないでENTERを押して下さい。


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

Name: のん  ..かけだし(1,955ポイント)   Date: 2007/03/27(火) 10:48   No:6182     
Title: Re:ファイル入出力    
>何も入力しないでENTERを押して下さい。

やってみました。が : がでてくるだけで終わらないですね。

そもそもこのコードだとファイル名の指定ってでてこなくていいのですか?

ファイル名の指定→終了には空白行入力→文字入力してENTERだと思うのですが。
どこかコードがおかしいのかな?


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

Name: のん  ..かけだし(2,173ポイント)   Date: 2007/03/27(火) 10:51   No:6184     
Title: Re:ファイル入出力    
>このプログラムは何も入力されていない行が出るまで繰り返されます。
>だからaaaといれてENTERをおしても終了しません。終了するにはもう一度何も入力しないでENTERを押して下>さい。

なにも入力しないでENTERを押しても:がでてきて終わらないです。


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

Name: miyaza  ..初心者(7,662ポイント)   Date: 2007/03/27(火) 10:56   No:6185     
Title: Re:ファイル入出力    
2007/03/26(月) 20:26 のコードと変わっていないと勝手に勘違いしました。すいません。
2007/03/26(月) 20:26 のコードみたいにstrcat(str, "\n");をgets(str)の下に追加すれば大丈夫です。


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

Name: のん  ..かけだし(2,221ポイント)   Date: 2007/03/27(火) 10:59   No:6186     
Title: Re:ファイル入出力    
できました!!
strcat(str, "\n");はなんで'\n'にしないのですかね??


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

Name: miyaza  ..初心者(7,669ポイント)   Date: 2007/03/27(火) 11:02   No:6187     
Title: Re:ファイル入出力    

strcat(char *s1, const char *s2);
と定義されており、文字列1に文字列2を連結します。あくまで文字列です。だから"\n"とします。'\n'だと文字コードです。

gets()というのは一行読み取り末尾の改行文字を'\0'に置き換えます。だから改行が読み取れず無限ループに陥ってしまったわけです。


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

Name: のん  ..かけだし(2,140ポイント)   Date: 2007/03/27(火) 11:04   No:6190     
Title: Re:ファイル入出力    
miyaza さんありごあとうございます!!

ところでまったく違う質問なのですが、miyazaさんはC言語勉強して結構長いのですか?また、仕事などでやっていたのですか? 差し支えなければお聞かせください。


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

Name: miyaza  ..初心者(7,740ポイント)   Date: 2007/03/27(火) 11:07   No:6192     
Title: Re:ファイル入出力    
>ところでまったく違う質問なのですが、miyazaさんはC言語勉強して結構長いのですか?また、仕事などでやっていたのですか? 差し支えなければお聞かせください。

そんなに長くありませんね。仕事はしていませんね、というかまだ高校生です。


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

Name: のん  ..かけだし(2,261ポイント)   Date: 2007/03/27(火) 11:12   No:6194     
Title: Re:ファイル入出力    
そんなに長くありませんね。仕事はしていませんね、というかまだ高校生です。

ウソ!!!!なんでそんなに理解してるの?ちょ〜頭いいですね?
私なんか1ヶ月やってても理解してるのかしてないのかというところです・・・。

具体的に良い勉強方法などありますか?


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

Name: miyaza  ..初心者(7,810ポイント)   Date: 2007/03/27(火) 11:21   No:6197     
Title: Re:ファイル入出力    
>具体的に良い勉強方法などありますか?
良い勉強方法は分かりません。ごめんなさい。

アドバイスでなくて申し訳ないんですが、私はあまり本を読んでいません。基本的にHPを見て学んでいます。
そこに書いてあることを片っ端からやっていくだけです。


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

Name: のん  ..かけだし(2,307ポイント)   Date: 2007/03/27(火) 11:23   No:6198     
Title: Re:ファイル入出力    
miyazaさんすごいですね!!やっぱり頭がいいんだ!!

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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +