C言語何でも質問掲示板


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

規約と使い方

 
   インプットの制限につ ....   
     ・[5369] box 
     ・[5370] むつ 
     ・[5371] 緋闇 
     ・[5372] 緋闇 
     ・[5374] みるみる 
     ・[5377] むつ 
     ・[5380] 緋闇 
   windowsとstlの文字列 ....   
     ・[5268] Justy 
     ・[5271] 組木紙織 
     ・[5272] box 
     ・[5273] 組木紙織 
     ・[5274] Justy 
     ・[5275] 組木紙織 
     ・[5276] Justy 
     ・[5277] 組木紙織 
     ・[5279] 組木紙織 
     ・[5281] Justy 
     ・[5308] 組木紙織 
     ・[5315] Justy 
     ・[5320] 組木紙織 
     ・[5325] Justy 
     ・[5327] 組木紙織 
     ・[5329] Justy 
     ・[5348] Blue 
     ・[5359] 組木紙織 
   C言語のプログラムの作 ....   
     ・[5323] バグ 
     ・[5326] ゆかり 
     ・[5328] バグ 
   二次創作について   
     ・[5151] ぽん太 
     ・[5153] 管理人 
     ・[5155] ぽん太 
     ・[5156] しぐ 
     ・[5157] 管理人 
     ・[5158] しぐ 
     ・[5161] 管理人 
     ・[5162] ぽん太 
     ・[5163] 管理人 
     ・[5164] ぽん太 
     ・[5165] 管理人 
     ・[5166] Justy 
     ・[5167] ぽん太 
     ・[5168] 管理人 
     ・[5169] ぽん太 
     ・[5170] ぽん太 
     ・[5171] 管理人 
     ・[5172] ぽん太 
     ・[5174] ま〜く 
     ・[5177] 管理人 
     ・[5178] 管理人 
     ・[5179] Justy 
     ・[5186] 管理人 
     ・[5193] Justy 
     ・[5206] 管理人 
     ・[5210] Justy 
     ・[5213] ま〜く 
     ・[5216] 管理人 
     ・[5217] ま〜く 
     ・[5218] 管理人 
     ・[5222] Justy 
     ・[5223] 管理人 
     ・[5224] Justy 
     ・[5230] ま〜く 
     ・[5236] 管理人 
     ・[5243] Justy 
     ・[5244] ま〜く 
     ・[5246] 管理人 
     ・[5253] Justy 
     ・[5255] 管理人 
     ・[5256] ま〜く 
     ・[5260] Justy 
     ・[5265] 管理人 
   ファイル処理   
     ・[5241] box 
     ・[5245] 管理人 
     ・[5261] 夏天 
     ・[5264] 管理人 
   WinSockによる複数パケ ....   
     ・[5254] 管理人 
     ・[5262] Yuki 
   配列の構造体について ....   
     ・[5258] keichan 
   無題   
     ・[5187] box 
     ・[5192] 名無し 
     ・[5194] 名無し 
     ・[5202] box 
     ・[5237] 名無し 
     ・[5238] バグ 
     ・[5240] box 
     ・[5251] 名無し 
     ・[5252] box 
   文字列コピー   
     ・[5183] ふぐお 
     ・[5188] 管理人 
     ・[5190] box 
     ・[5191] 管理人 
     ・[5205] 管理人 
     ・[5225] フグオ 
     ・[5234] 管理人 
     ・[5247] ふぐお 
     ・[5248] keichan 
     ・[5250] ふぐお 
   文字列   
     ・[5227] バグ 
     ・[5228] box 
     ・[5242] ふぐお 
   処理が重い・・・。   
     ・[5181] GPGA 
     ・[5184] むつ 
     ・[5189] 管理人 
     ・[5219] こる 
     ・[5220] 管理人 
     ・[5221] 管理人 
     ・[5229] こる 
     ・[5235] 管理人 
   ハノイの搭のプログラ ....   
     ・[5232] box 
     ・[5233] madou(超初心者) 
   コンパイルエラー   
     ・[5198] 夏天 
     ・[5199] めちゃ初心者 
     ・[5200] ぽん太 
     ・[5201] GPGA 
     ・[5203] GPGA 
     ・[5208] 管理人 
     ・[5214] めちゃ初心者 
     ・[5215] 管理人 
   テキストにて   
     ・[5207] 管理人 
     ・[5212] 夏天 
   変数について   
     ・[5204] Yuki 
     ・[5209] 管理人 
     ・[5211] 大工 
   線形リストの逆表示   
     ・[5175] box 
     ・[5176] 管理人 
   利用規約について   
     ・[5113] Justy 
     ・[5126] 管理人 
     ・[5137] Hermit 
     ・[5138] バグ 
     ・[5139] 管理人 
     ・[5141] むつ 
     ・[5142] Yuki 
     ・[5144] 管理人 
     ・[5145] 管理人 
     ・[5146] keichan 
     ・[5147] 管理人 
     ・[5148] Hermit 
     ・[5150] 管理人 
     ・[5152] Hermit 
     ・[5154] 管理人 
   ゲームプログラミング ....   
     ・[5129] 管理人 
     ・[5130] Justy 
     ・[5131] 管理人 
     ・[5132] 管理人 
     ・[5133] 管理人 
     ・[5135] Justy 
     ・[5136] 管理人 
     ・[5140] 黒猫 
     ・[5143] 管理人 
   関数化と変数の有効範 ....   
     ・[5085] バグ 
     ・[5086] 管理人 
     ・[5087] 管理人 
     ・[5088] 管理人 
     ・[5091] 管理人 
     ・[5114] Justy 
     ・[5117] りむ 
     ・[5118] むつ 
     ・[5119] 管理人 
     ・[5120] サイモン 
     ・[5121] 管理人 
     ・[5122] 管理人 
     ・[5123] 管理人 
     ・[5124] 管理人 
     ・[5134] りむ 
   一時停止をうまく使い ....   
     ・[5108] 管理人 
     ・[5109] 管理人 
     ・[5128] holmes 
   リンク   
     ・[5125] 管理人 
   アクションRPGを作 ....   
     ・[4428] バグ 
     ・[4429] Justy 
     ・[4432] 管理人 
     ・[4433] 管理人 
     ・[4434] りむ 
     ・[4436] 管理人 
     ・[4437] 管理人 
     ・[4438] Justy 
     ・[4439] りむ 
     ・[4440] 管理人 
     ・[4441] 管理人 
     ・[4449] りむ 
     ・[4450] 管理人 
     ・[4451] 管理人 
     ・[4472] Justy 
     ・[4474] りむ 
     ・[4475] バグ 
     ・[4491] 管理人 
     ・[4502] りむ 
     ・[4510] 管理人 
     ・[4511] バグ 
     ・[4539] Justy 
     ・[4546] 管理人 
     ・[4548] Justy 
     ・[4551] 管理人 
     ・[4552] りむ 
     ・[4725] りむ 
     ・[4726] りむ 
     ・[4738] Justy 
     ・[4765] りむ 
     ・[4767] Justy 
     ・[4768] りむ 
     ・[4773] keichan 
     ・[4776] りむ 
     ・[4777] keichan 
     ・[4794] りむ 
     ・[4800] りむ 
     ・[4805] keichan 
     ・[4812] GPGA 
     ・[4823] Justy 
     ・[4872] りむ 
     ・[4873] Justy 
     ・[4875] りむ 
     ・[4877] Justy 
     ・[4879] りむ 
     ・[4890] Justy 
     ・[4959] りむ 
     ・[4973] 管理人 
     ・[5089] 管理人 
     ・[5116] りむ 

Name: 緋闇  ..ぴよぴよ(136ポイント)   Date: 2007/03/12(月) 23:22   No:5368       
Title: インプットの制限について質問です。    
初めまして。学校でプログラミングを習い始めたばかりの緋闇と申します。
レベル2+くらいです。

入力された2進法の数字を足し算するプログラム作成、という宿題が出ました。
インプットが2進法数字以外ならエラーメッセージを表示するように書いてあるのですが、
どのように入力制限すればいいのかわかりません。
どなたか教えてください。お願いします。


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


Name: box  ..熟練のプログラマー(55,229ポイント)   Date: 2007/03/12(月) 23:49   No:5369     
Title: Re:インプットの制限について質問です。    
> インプットが2進法数字以外ならエラーメッセージを表示する

入力をいったん文字列として受けます。
その文字列を先頭から1文字ずつチェックし、
2進数を構成する'0'や'1'以外の文字が見つかったら
エラーにすればよいと思います。


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

Name: むつ  ..入門者(4,135ポイント)   Date: 2007/03/13(火) 00:01   No:5370     
Title: Re:インプットの制限について質問です。    
数(10進数)の範囲やマイナスの扱いはどのようにせよとありますか。

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

Name: 緋闇  ..ぴよぴよ(183ポイント)   Date: 2007/03/13(火) 00:07   No:5371     
Title: Re:インプットの制限について質問です。    
> > インプットが2進法数字以外ならエラーメッセージを表示する
>
> 入力をいったん文字列として受けます。
> その文字列を先頭から1文字ずつチェックし、
> 2進数を構成する'0'や'1'以外の文字が見つかったら
> エラーにすればよいと思います。

回答ありがとうございます。
文字列を一文字ずつチェックする、というのはどうしたらいいのでしょうか・・・。
全然わからなくて・・・すみません。


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

Name: 緋闇  ..ぴよぴよ(206ポイント)   Date: 2007/03/13(火) 00:09   No:5372     
Title: Re:インプットの制限について質問です。    
> 数(10進数)の範囲やマイナスの扱いはどのようにせよとありますか。

それについては特には何も書いてありませんでした。


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

Name: みるみる  ..ぴよぴよ(51ポイント)   Date: 2007/03/13(火) 01:34   No:5374     
Title: Re:インプットの制限について質問です。    
文字列を1文字づつチェックする方法。
例えば文字列をstrとすると。。
for()文でまわしながら、if()文で
if(str[i] != '0' && str[i] != '1'){
/* 0でも1でもないとここが実行されます */
}
↑こんな感じでしらべてはどうでしょうか?



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

Name: むつ  ..入門者(4,482ポイント)   Date: 2007/03/13(火) 08:25   No:5377     
Title: Re:インプットの制限について質問です。    
どこまで出来ているのかわかりませんが、
入力文字の各桁を切り分けるには、文字数を確認しないといけないですよね。
@〜Dの虫食いを埋めると、文字サイズと切り分けられた文字が表示されます。
※Cには同じ文字が入ります。

ソースを掲載する際には以下のようにしてください。
< pre>
ソースをここに記述する
< /pre>
※pre,/preの前の空白は削除してください


#include <@>
#include <A>
int main( void )
{
unsigned char unx[ 256 ];
unsigned int i;
fgets( unx, B( unx ), stdin );
printf( "入力文字の長さは %d\n", C( unx ) );
for( i = 0; i < C( unx ); i++ )
printf( "%d番目 %c\n", i + 1, unx[ D ] );
return 0;
}


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

Name: 緋闇  ..ぴよぴよ(261ポイント)   Date: 2007/03/13(火) 10:29   No:5380 解決!     
Title: Re:インプットの制限について質問です。    
>↑こんな感じでしらべてはどうでしょうか?
試してみて成功しました。ありがとうございます。


> 入力文字の各桁を切り分けるには、文字数を確認しないといけないですよね。
参考にさせて頂きました。ありがとうございます。


無事に作り終えました。
お答えくださった方々、本当にありがとうございました!


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



Name: 組木紙織  ..ぴよぴよ(709ポイント)   Date: 2007/03/09(金) 22:28   No:5267       
Title: windowsとstlの文字列操作    
現在windowsのTextOut()で、stringで用意した文字列をどうにかして使えないかと。試行錯誤しています。
例えば、
string str = "sample sample";
TCHAR ch[30];
/*
ここで色々な操作をする
*/
TextOut(hdc, 10,10, ch, lstrlen);//画面上にsample sampleと表示される。

というような操作をしたいです。

条件としてはcスタイルのキャストは使えないものとします。
OSはwindowsXPを使用しています。
コンパイラは
Microsoft Visual Studio 2005
インストールされている Edition: VC Express

となります。
解決策を知っている方がおられたら、コメントをお願いします。


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


Name: Justy  ..比類無きプログラマー(65,700ポイント)   Date: 2007/03/09(金) 23:34   No:5268     
Title: Re:windowsとstlの文字列操作    
 stringクラスが、std::stringのことだったとして、
CStringにクラスに変換して、それをそのまま APIに突っ込むってのはどうでしょう。

    const std::string str = "sample sample"; 

const CString cstr(str.c_str());
TextOut(hdc, 10,10, cstr, cstr.GetLength());



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

Name: 組木紙織  ..かけだし(1,038ポイント)   Date: 2007/03/10(土) 08:42   No:5271     
Title: Re:windowsとstlの文字列操作    
以下のようにすると次のようなエラーが出ました。
///////////
エラー 1 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません d:\tet\project\win1\s2\p1.cpp 23
////////////
#include<windows.h>
#include<string>
//ソースの一部

case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
const std::string str = "sample sample";
const CString cstr(str.c_str());
TextOut(hdc, 10,10, cstr, cstr.GetLength());
EndPaint(hWnd , &ps);
return 0;

CStringはMFCとかATLのクラスのようなので新しくヘッダーファイルを
インクルードしないといけないのかなとおもってmsdnのリファレンスで調べてみたのだが良くわかりませんでした。
まだまだ始めたばかりなので、良くわからないことばかりで大変です。
msdnのリファレンスも読みにくいし分かりにくいし。


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

Name: box  ..熟練のプログラマー(54,561ポイント)   Date: 2007/03/10(土) 08:55   No:5272     
Title: Re:windowsとstlの文字列操作    
> エラー 1 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません d:\tet\project\win1\s2\p1.cpp 23

p1.cppの23行目は、どういう内容ですか?
投稿されたソースの一部に含まれていますか?


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

Name: 組木紙織  ..ぴよぴよ(973ポイント)   Date: 2007/03/10(土) 09:15   No:5273     
Title: Re:windowsとstlの文字列操作    
すみません。ちょうどそのところを出していたのですが。
上のソースの
>const CString cstr(str.c_str());
の部分に当たります。


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

Name: Justy  ..比類無きプログラマー(65,755ポイント)   Date: 2007/03/10(土) 14:14   No:5274     
Title: Re:windowsとstlの文字列操作    
 CStringが定義された atlstr.hヘッダはインクルードされていますか?
 されていなければしてみて下さい。


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

Name: 組木紙織  ..ぴよぴよ(995ポイント)   Date: 2007/03/10(土) 14:42   No:5275     
Title: Re:windowsとstlの文字列操作    
インクルードできないようです。
ファイルが見つからないとのエラーが出ます。


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

Name: Justy  ..比類無きプログラマー(65,897ポイント)   Date: 2007/03/10(土) 15:36   No:5276     
Title: Re:windowsとstlの文字列操作    
 ひょっとして PlatformSDKが入っていないんでしょうか。

http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
 入っていなければ入れてみて下さい。



# std::stringを使わないで
typedef std::basic_string<TCHAR> tstring;
を定義した上で、tstringクラスをを使うってのではだめですかね。

 これなら
    const tstring tc(_TEXT("sample")); 

TextOut(hdc, 10, 10, tc.c_str(), tc.size());
 で済みます。


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

Name: 組木紙織  ..かけだし(1,076ポイント)   Date: 2007/03/10(土) 16:15   No:5277     
Title: Re:windowsとstlの文字列操作    
win32アプリケーションを作るために入れたはずなんですが、インクルードできないということは
設定が完了していないということですよね。
パスをちょっと調べてみます。
で、出来なかったら再インストールで入れなおしてみます。



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

Name: 組木紙織  ..かけだし(1,172ポイント)   Date: 2007/03/10(土) 16:52   No:5279     
Title: Re:windowsとstlの文字列操作    
flatformSDKの設定は以前にしてありました。パスも確認してみましたが、間違ってはいなかったです。
atlstr.hのファイルが存在するかどうか検索をかけたところ、何処にも存在しないようです。


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

Name: Justy  ..比類無きプログラマー(65,956ポイント)   Date: 2007/03/10(土) 17:16   No:5281     
Title: Re:windowsとstlの文字列操作    
 うちのバージョンなら "atlstr.h"があるのですが、
"atlmisc.h"かもしれません。
 もし "atlmisc.h"あったら、それをインクルードしてみて下さい。


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

Name: 組木紙織  ..かけだし(1,231ポイント)   Date: 2007/03/11(日) 17:08   No:5308     
Title: Re:windowsとstlの文字列操作    
platformSDKをcompleteで再インストールしてみましたが、状況に何も変化がありません。
ヘッダーファイルも検索をかけて入っているか確認してみたのですが、どちらも存在しませんでした。

あきらめたほうがいいのかな。


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

Name: Justy  ..比類無きプログラマー(65,972ポイント)   Date: 2007/03/11(日) 19:25   No:5315     
Title: Re:windowsとstlの文字列操作    
 では afx.hはどうでしょう。


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

Name: 組木紙織  ..かけだし(1,368ポイント)   Date: 2007/03/11(日) 20:16   No:5320     
Title: Re:windowsとstlの文字列操作    
afx.hのヘッダーはありましたが、なんだか変なエラーが出ます。

/*file afx.h******/

#include <afxver_.h> // Target version control
/****************/
エラー 1 fatal error C1083: include ファイルを開けません。'afxver_.h': No such file or directory c:\program files\microsoft platform sdk\include\mfc\afx.h 27




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

Name: Justy  ..比類無きプログラマー(66,037ポイント)   Date: 2007/03/11(日) 21:56   No:5325     
Title: Re:windowsとstlの文字列操作    
 afxver_.hがコンパイラから見えていないようです。
 まずそのファイルがあるかどうかを探して、
見つかったらそのディレクトリにパスが通っているか確認してみて下さい。


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

Name: 組木紙織  ..かけだし(1,676ポイント)   Date: 2007/03/11(日) 22:20   No:5327     
Title: Re:windowsとstlの文字列操作    
#inclde <>は再帰的な検索をしていないようなので、platformSDK\includeの下部のフォルダにpathを通してコンパイルしたところ、またエラーがでてきました。

エラー 1 fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h> c:\program files\microsoft platform sdk\include\mfc\afxv_w32.h 14

/**file afxv_w32.h ************/
/*line 13*/#ifdef _WINDOWS_
/*line 14*/ #error WINDOWS.H already included. MFC apps must not #include <windows.h>
/*line 15*/#endif
/****************************/


次に#include<windows.h>をはずしてコンパイルかけたところ

エラー 1 fatal error LNK1104: ファイル 'uafxcwd.lib' を開くことができません。 revers

のエラーがでました。
uafxcwd.libを検索すると
C:\Program Files\Microsoft Platform SDK\Lib\AMD64\atlmfc
C:\Program Files\Microsoft Platform SDK\Lib\IA64\mfc

と2つ出てきたのでそれぞれ個別にpathを通してコンパイルをかけたところ
どっちも同じエラーが出ました

エラー 1 fatal error LNK1112: モジュールのコンピュータの種類 'IA64' は対象コンピュータの種類 'X86' と競合しています。 uafxcwd.lib

ここまでしました。
後はどのようにして解決を試みればいいでしょうか?





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

Name: Justy  ..比類無きプログラマー(66,250ポイント)   Date: 2007/03/12(月) 01:39   No:5329     
Title: Re:windowsとstlの文字列操作    
 代替案を。
 これはこちらのページにある strcnv.hppを使用した例です。

    std::locale::global(std::locale("japanese"));

typedef std::basic_string<TCHAR> tstring;

tstring tstr;
const std::string str("テスト123");
MBCStoWCS(tstr, str);
TextOut(hdc, 10, 10, tstr.c_str(), tstr.size());


 TCHARがワイド文字だとして、stringクラスが持っているマルチバイト文字列をワイド文字列に変換しています。


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

Name: Blue  ..ぴよぴよ(135ポイント)   Date: 2007/03/12(月) 13:18   No:5348     
Title: Re:windowsとstlの文字列操作    
> Microsoft Visual Studio 2005
> インストールされている Edition: VC Express
ではATL、MFCのライブラリを使うことはできませんよ。
(Platform SDKにあるのは古いもので、さらに〜.libもx86版もなかったような)

std::stringを使うのであれば、明にTextOutAをつかうとか。
もしくは、comdef.hの_bstr_tクラスを介するとか。


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

Name: 組木紙織  ..かけだし(1,691ポイント)   Date: 2007/03/12(月) 19:23   No:5359 解決!     
Title: Re:windowsとstlの文字列操作    
>std::stringを使うのであれば、明にTextOutAをつかうとか。

を使って成功しました。
ありがとうございます。

>(Platform SDKにあるのは古いもので、さらに〜.libもx86版もなかったような)
確かにライブラリにx86と書いてあるフォルダは入っていませんでした。
前のはエラーの出力をそのまま出しただけなので細かい部分までは知らないので今のところ
実行ファイルが作れて、きちんと動けば問題はないです。
(仕事にすると、もっと詳しくバージョンのことについても知っておく必要があるかと思いますが、)


>ではATL、MFCのライブラリを使うことはできませんよ
こんな高機能な統合環境が無料であることには驚いていたんですが、無料であるにはそんな理由があったのですね。

コメントと書いてくださったお二人、ありがとうございました。
また分からないことがあったら宜しくお願いします。


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



Name: 由香里  ..ぴよぴよ(99ポイント)   Date: 2007/03/11(日) 21:10   No:5322       
Title: C言語のプログラムの作成    
はじめまして、こんばんは。
↓のように動作するC言語のプログラムの作成なのですが、お手上げでした

原点復帰
(a)ロータリースイッチを0にセットする。

(b)スタートスイッチSW1を押す。

(c)可動フレームがモータ側(以下左側)に移動を始め、リミットスイッチに達した時点で右側に反転する。

(d)可動フレームが原点に到達し、フォンセンサがONになった時点で停止する。

原点からの移動確認

(a)ロータリースイッチを4にセットする。

(b)スタートスイッチSW1を押す。

(c)可動フレームが右側に移動を始め、4っ目のスリッド(原点のスリッドは含まない)に達し、フォンセンサがONになった時点で停止する。

すみませんが、どなたか分かる方教えていただけると助かります。よろしくお願いします。


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


Name: バグ  ..プログラマー(30,712ポイント)   Date: 2007/03/11(日) 21:31   No:5323     
Title: Re:C言語のプログラムの作成    
たったこれだけの情報では、どうしようもありませんよ…(;^_^A

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

Name: ゆかり  ..ぴよぴよ(40ポイント)   Date: 2007/03/11(日) 22:08   No:5326     
Title: Re:C言語のプログラムの作成    
これが、わたしが考えたプログラムです。もっと簡単で単純にしたプログラムを教えていただきたいです。
よろしくお願いします


#include<16f873a.h>
#fuses HS,NOWDT,NOPROTECT,PUT<BROWNOUT,NOLVP
#use delay(CLOCK=20000000)

#byte porta=5
#byte porta=6
#byte porta=7
#byte porta=8
#byte porta=9

void main()
{
int sw,led,i=0;//
int bcd=0;

output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);

output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);
while(1)
{
if(input(PIN_C1)==0)//push_sw ON
{
for(;input(PIN_C5)==1;)//リミットスイッチを感知するまで左回転
{
//モーター左回転
output_c(0x11);//00000001
delay_ms(5);
output_c(0x22);//00000010
delay_ms(5);
output_c(0x44);//00000100
delay_ms(5);
output_c(0x88);//00001000
delay_ms(5);
}
for(;input(PIN_C4)==1;)//フォトセンサの最初まで右回転
{
//モーター右回転
output_c(0x88);//00001000
delay_ms(5);
output_c(0x44);//00000100
delay_ms(5);
output_c(0x22);//00000010
delay_ms(5);
output_c(0x11);//00000001
delay_ms(5);
}
}
}
}






#include<16f873a.h>
#fuses HS,NOWDT,NOPROTECT,PUT<BROWNOUT,NOLVP
#use delay(CLOCK=20000000)

#byte porta=5
#byte porta=6
#byte porta=7
#byte porta=8
#byte porta=9

void main()
{
int sw,led,i=0;//
int bcd=0;

output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);

output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);
while(1)
{
sw=input_b()&0x0f;
output_a()sw;//ポートbの値をLED(ポートB)に出力
}
}


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

Name: バグ  ..プログラマー(31,312ポイント)   Date: 2007/03/11(日) 23:44   No:5328     
Title: Re:C言語のプログラムの作成    
今の情報だけでは、同じ表記をしている場所を関数化すること位しか思いつかないです。
以下のソースは由香里さんのプログラムが正しいのを前提に書かれていますので、コンパイルすらしていません。『私ならばこう記述する』程度のものですので、あまり参考にならないかもしれないことを了承したうえで見ていただけたらと思います。とりあえず、原点復帰の部分だけです(^_^;)


// 原点復帰

#include <16f873a.h>
#fuses HS,NOWDT,NOPROTECT,PUT<BROWNOUT,NOLVP
#use delay( CLOCK = 20000000 )

#byte porta = 5
#byte porta = 6
#byte porta = 7
#byte porta = 8
#byte porta = 9

// プロトタイプ宣言
void Initialize()
void MotorMoveLeft()
void MotorMoveRight()

// メイン関数
void main()
{
Initialize();

while( 1 )
{
if( input( PIN_C1 ) == 0 ) //push_sw ON
{
while( input( PIN_C5 ) == 1 ) //リミットスイッチを感知するまで左回転
{
MotorMoveLeft();
}

while( input( PIN_C4 ) == 1 ) //フォトセンサの最初まで右回転
{
MotorMoveRight();
}
}
}
}

// ボードの初期化???
void Initialize()
{
int i;

for( i = 0 ; i < 2 ; i++ )
{
output_a( 0xFF );
delay_ms( 500 );
output_a( 0x00 );
delay_ms( 500 );
}
}

// モーター左回転
void MotorMoveLeft()
{
int nBit;

for( nBit = 0x11 ; nBit <= 0x88 ; nBit = nBit << 1 )
{
output_c( nBit );
delay_ms( 5 );
}
}

// モーター右回転
void MotorMoveRight()
{
int nBit;

for( nBit = 0x88 ; nBit >= 0x11 ; nBit = nBit >> 1 )
{
output_c( nBit );
delay_ms( 5 );
}
}


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



Name: 管理人 [URL]  ..ハッカー(226,637ポイント)   Date: 2007/03/02(金) 22:02   No:5149       
Title: 二次創作について    

春休みになり、質問も落ち着いて静かになったので、雑談でも。

皆さんは二次創作した経験がおありでしょうか?
二次創作っていうのは、どこまで著作権に問題が出てくるんでしょう?

画像や音声を全部自分で作ったとしてもそのゲームシステムに著作権があるとしたら似たゲームは作れないし、
しかしそんな事を言い始めたらキリが無いし・・。

絵と音楽が自作ならゲームシステムが全く同じでも公開して問題ないんでしょうか(?_?

  ブログ  にも書いたんですけど、現在二次創作しています。

どこまで変化をさせれば、公開してよいものかと思いまして・・。
別に料金取るわけではないですけど。

現在、実際にダウンロード出来る大したゲームをここで公開していないので、
公開して「ゲームプログラミングの館を勉強したらこんなゲームが作れるんだ」って事知って欲しいんですよね。

全くDXライブラリを知らない人が、ここに来た時、どんなゲームが作れるのかサンプルが無ければDXライブラリの魅力がよくわからないと思うんですよね。


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


Name: ぽん太  ..中級者(11,873ポイント)   Date: 2007/03/02(金) 22:14   No:5151     
Title: Re:二次創作について    
二次創作に関して著作権についてはわからないですが
SuperBomManを公開することはとてもいいことだと思います。
賛成です!
無料とは・・・さすが師匠です。


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

Name: 管理人 [URL]  ..ハッカー(226,642ポイント)   Date: 2007/03/02(金) 22:26   No:5153     
Title: Re:二次創作について    
SuperBombarManがSuperBomManになっている事をいち早く気づいてくださったぽん太さん、ありがとうございますw

サーバー使って、ま〜くさんのおっしゃってた256人同時プレイを実現させます!(笑
・・・が、スクロール式にするとしても、1面に256人もプレイヤーがいたら鬱陶しいだろうな〜^^;
まぁ256人もプレイヤーが集まる可能性は限りなく0ですがw
しかしボンバーマンをスクロール式にするのは問題がありますね・・。

スクロールで見えない所に玉があると、見えないところから炎がボガーンと( ̄  ̄;)
そういうのは違う一つの面とするとか、エリア移動ホールを作るとか考えないといけませんね。

しかしサンプルとして紹介するのにDXライブラリでは出来ない事をしてはいけないかな^^;
とりあえずオフラインで一人でちまちま遊べるゲームを作ります〜♪

親が「長期休みなのになんで帰ってこないんだ!(怒」とそろそろしびれ切らしているんで、
親が切れないうちに早く完成させないと(笑


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

Name: ぽん太  ..中級者(11,940ポイント)   Date: 2007/03/02(金) 22:32   No:5155     
Title: Re:二次創作について    
256人同時プレイ?!
ワクワクしますねw
いやぁ かなり面白そうですよ
爆弾の雨あられですね 恐ろしい・・・
親御さんもそりゃ心配ですよ〜
完成を祈っています☆
あ、あと蹴ったボムは途中で止めれるんですか??


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

Name: しぐ  ..ぴよぴよ(363ポイント)   Date: 2007/03/02(金) 22:39   No:5156     
Title: Re:二次創作について    
こんにちは。

雑談のスレお邪魔します。
ブログの動画見ました!これ本物のボンバーマンじゃなくて、管理人さんが作ったものですよね??
これDXライブラリで作ったんですか?!
もはや私の想像力では、想像出来ません!
これ本物だって言っても信じる人いると思いますよ。
管理人様のおかげでDXライブラリを重宝させてもらっていますが、尊敬です(>_<)
私もこんなすごいゲームが作れたらいいのですが・・。


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

Name: 管理人 [URL]  ..ハッカー(226,949ポイント)   Date: 2007/03/02(金) 22:54   No:5157     
Title: Re:二次創作について    
>ぽん太さん、
はい、止められますよ^^
ジョイパッドが使えるようにしてあるんですけど、
どのボタンでとめたらいいか迷ってるんですよ。
ハドソンのボンバーマンってどのボタンでキックがとまりますっけ?

>しぐさん、
読んでいただいて、ありがとうございます^^
ここにいらっしゃっている回答者の方々はプロの方や、携帯ゲームの製作者の方がいらっしゃいますから、
「しょぼい・・」と思われてしまいそうですが、恥ずかしくないように頑張って作るつもりです^^;
一応爆発モーションや消滅モーションはポリゴンで書いていますので、
時間的な画像の変更によってモーションを作っているスーファミ版よりは「モーションだけ」キレイなはずです(笑
プレステ版に3Dのボンバーマンありますけど、ボンバーマンが3Dになってもねぇ^^;


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

Name: しぐ  ..ぴよぴよ(458ポイント)   Date: 2007/03/02(金) 23:02   No:5158     
Title: Re:二次創作について    
私からみたらすごいとしか言いようがないのですが・・。

私もよくスーファミでボンバーマンやりました。
キックは、どのボタンでしょうね?

オンラインになるのでしたら、上の画像の下の部分は何か文字が出る仕様なのでしょうか?


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

Name: 管理人 [URL]  ..ハッカー(227,093ポイント)   Date: 2007/03/02(金) 23:15   No:5161     
Title: Re:二次創作について    


↑クリックで画像拡大↑

ハイ、そうです^^
下の部分はチャットの文字が表示される部分です☆
説明は画像の中に書いたんでご覧下さいw


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

Name: ぽん太  ..中級者(11,748ポイント)   Date: 2007/03/02(金) 23:23   No:5162     
Title: Re:二次創作について    
ハドソンのボンバーマンはGBとファミコンでしかやったことないので
ちょっとわかりません>_<
クリボーみたいな敵キャラの頭のテカリやボムマンの頭の陰までの
表現されていたのですね うひひ〜

高2あたりからいきなりゲームが嫌いになったのですが
かなりこのゲームやってみたい!と思いました。
これ販売できますよ マジで・・・。
やっぱり自分で作ったゲームをやるのと買ったゲームとでは
全然違いますよね☆


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

Name: 管理人 [URL]  ..ハッカー(226,697ポイント)   Date: 2007/03/02(金) 23:29   No:5163     
Title: Re:二次創作について    
>クリボーみたいな敵キャラの頭のテカリやボムマンの頭の陰までの表現されていたのですね

おぉ、小さいところまで見ていただいてありがとうございます^^
しかし、光の向きがゲーム中に変わるわけではないので、実はフォトショで影付ければいいだけなんですよねw

>高2あたりからいきなりゲームが嫌いになったのですが

何があったんです?!

>これ販売できますよ

ハドソンが許してくれたら販売したいですね(笑


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

Name: ぽん太  ..中級者(11,981ポイント)   Date: 2007/03/02(金) 23:41   No:5164     
Title: Re:二次創作について    
ボムマンやクリボーらしき敵キャラCG使ってるんですか??
すごいですw

あ、なんかXBOXを買ったあたりから何故かゲームへの意欲が・・・・。
多分マイ○ロソフトがいいソフトを出してくれなかったことが原因だと思います。
いや、ビル○イツ君は好きなんですけどね・・・。
それと、急激な視力低下でゲームやってると目が疲れて頭が痛くなってしまうのです ガーン・・・。

あ、ゲームあまり詳しくないのですが最初のオープニングの映像とかあるんですか??
ファミコンのボンバーマンのオープニングは面白かったです。
黒ボンバーマンが警察に追いかけられていたり・・・ ぷっ(笑)



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

Name: 管理人 [URL]  ..ハッカー(227,074ポイント)   Date: 2007/03/03(土) 00:13   No:5165     
Title: Re:二次創作について    
残念ながら敵キャラはただの画像です^^;

3Dの知識付けるだけでずいぶん見栄えするプログラムがかけそうなんですけどねぇ。
Direct3D勉強しなければ。

Xboxですかぁ、、
確かに私もPS2から全然ゲームをしなくなりました。
唯一しているのはFFだけで・・。
FF12もとうとう最後までやりませんでした><;

ここ2年間ほとんどゲームしてない気がします。
作るのは好きなんですけどねぇ・・。

オープニング映像ですか、う〜ん、今のとこ考えてないですねぇ><;
FINAL STORYの時はオープニング作ってたんですけど、
オープニングつくるだけでも結構な時間がかかりそうなんで、
そこに時間かけるならゲームシステムにかけようかと。

ファミコンのやつでそんなのあるんですねw
ボンバーマンの詳細な題名なんですか?
ファミコン版なら1と2やったことあります。


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

Name: Justy  ..比類無きプログラマー(62,412ポイント)   Date: 2007/03/03(土) 00:33   No:5166     
Title: Re:二次創作について    
二次創作っていうのは、どこまで著作権に問題が出てくるんでしょう
 そりゃ、世の中の二次創作なんてもうどこ叩いても埃が・・・ってな具合で、範囲は広いです。
 ただ、著作権自体は親告罪なので、被害者が突っ込まない限り問題はない、という実に曖昧なものなので、
どこぞの企業のように躍起になって叩き潰すようなことは企業以外を相手にはあまりしません。

 ゲームを作る上で意外に軽視されやすいのがフォントです。
 これも著作権があり、私的な範囲を超えて利用できないものが多いです。
 安いフォントは大抵商用利用できませんし、フリーのものでも、
商用利用できないものが多いのではないでしょうか。
(ライセンス料払えば別ですが)

 あってもグラフィックに変換して、フォトショなどで編集する権利もあるかどうかも
フォントによって違います。

 MSゴシックなどの標準で入っているフォントは Windows上で APIを通じて
表示させる分には問題なかったと思いますが、Windowの外での商用利用
・・・例えば印刷物にしたり・・・やグラフィック化して加工したりは
OUTだったと記憶しています。
(企業ロゴとかにでも使わない限りそうそうMSも文句は言わないと思いますが)


ゲームシステムに著作権
 ゲームシステムとかだと著作権より特許の方がひっかかりそうですが、
今回のケースですとやっぱりキャラがそっくりなのは気になるところです。


どこまで変化をさせれば、公開してよいものかと思いまして・
 んー、専門家ってわけではないので、確かなことは言えませんが
実際に収益を上げたりするわけではないので、あからさまに類似したデザインを
直した上でなら、ほぼ問題はないかと。

 どうしてもご心配であればハドソンの法務部に相談してみるのが一番です。
 デザイン面はイメージキャラでもあるので許してくれないでしょうが、
特許面は許してくれる可能性がないわけでもないかな、と。


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

Name: ぽん太  ..中級者(12,010ポイント)   Date: 2007/03/03(土) 00:44   No:5167     
Title: Re:二次創作について    
FFと言えば友達のを借りパクしてしまいました(笑)
いやぁ、あいついい奴なんですよ・・・。

えっと、これです!
ファミコンの接続端子がなくなったので映像は無理でした。
さらに思い違いかもしれません(汗)


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

Name: 管理人 [URL]  ..ハッカー(227,106ポイント)   Date: 2007/03/03(土) 00:49   No:5168     
Title: Re:二次創作について    
あぁ、黒ボンバーマンが白ボンバーマンのとこに金おいて逃げるやつですね^^;

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

Name: ぽん太  ..中級者(12,061ポイント)   Date: 2007/03/03(土) 00:50   No:5169     
Title: Re:二次創作について    
あ〜、そうですそうです!
思い出しましたw
いやぁ懐かしいw(TT)
やりたいのにできない・・・。くそぉ


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

Name: ぽん太  ..中級者(12,086ポイント)   Date: 2007/03/03(土) 00:55   No:5170     
Title: Re:二次創作について    
あれ? よく見たら任天堂って書いてある。
よくわかんないや^^;


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

Name: 管理人 [URL]  ..ハッカー(227,167ポイント)   Date: 2007/03/03(土) 00:57   No:5171     
Title: Re:二次創作について    
ぽん太さん、メール送りましたので見てください^^

任天堂ってファミコンが任天堂だからじゃないですか?
違うのかな??


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

Name: ぽん太  ..中級者(12,114ポイント)   Date: 2007/03/03(土) 01:31   No:5172     
Title: Re:二次創作について    
あ、そうですね だから任天堂なんだ^^

師匠、ラジャーです ニヤリ☆ 

返信送っておきましたw


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

Name: ま〜く  ..かけだし(1,219ポイント)   Date: 2007/03/03(土) 02:42   No:5174     
Title: Re:二次創作について    
うぉぅ☆
チャットの発言者が「ま〜く」になってるww

>しかしボンバーマンをスクロール式にするのは問題がありますね・・。

確かにそうですね〜。いきなり画面外から炎が来てもかわせないしw

256人と言うのは冗談だったのですが^^;
でもゲームシステムを上手く考えれば結構面白いかもしれませんね♪

ファーストパーソン・シューティングゲームなんかみたいにステージはずっと時間が流れていてプレイヤーは途中からいつでも参加できるようなゲームモードなら大勢居てもゲーム開始に手間取らなくていいし。
あとは、フラッグ戦とか陣取り戦などのモードも入れても面白いかも^^



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

Name: 管理人 [URL]  ..ハッカー(227,483ポイント)   Date: 2007/03/04(日) 00:27   No:5177     
Title: Re:二次創作について    
あら、さすがに本人に突っ込まれたw
いや〜以前ま〜くさんとオンライン形式にするという話してたじゃないですか。
2台のパソコン使って、実際にチャットが出来るか試してみたんですけど、
その時付ける名前に迷ってとりあえず、ま〜くさんの名前を使わせてもらったんですが、
あれからチャット機能を一時的に外したので、名前の入力部がなくなって、名前は固定に成り、
昔使った名前がそのまま残ってしまったのですw

>256人と言うのは冗談だったのですが^^;

頭で想像しても、256人はちょと多すぎですねw
しかし最高50人位が複数のエリアに同時に出入りしていても面白いかも?!
しかしスクロール形式にするには今のプログラムをかなりかえないといけないので、
やはりその面ごとになるかと思います・・・
(あぁスクロールもおもしろそうだったなぁ・・。

>フラッグ戦とか陣取り戦などのモードも入れても面白いかも^^

いや〜いいですね〜ホントそんなのおもしろそう・・。
いいな〜早く実現したい(´〜`)
って夢ばかり膨らむ一方、とても一人でそれだけ作るの大変なんですが(笑


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

Name: 管理人 [URL]  ..ハッカー(227,528ポイント)   Date: 2007/03/04(日) 00:42   No:5178     
Title: Re:二次創作について    
あぅ、Justyさん、すみません、見落としていました(>_<

>ゲームを作る上で意外に軽視されやすいのがフォントです。

そうだったんですか〜!
MSゴシックにまでそのような問題が付きまとうとは知りませんでした><;
なるほど、フォントにも気をつけないといけませんね。

>ゲームシステムとかだと著作権より特許の方がひっかかりそうですが、
>今回のケースですとやっぱりキャラがそっくりなのは気になるところです。

特許ですか、なるほど。参考になります!
キャラはもちろん、アイテムの画像も自分で書き直すつもりです☆
おそらく全く違う画像になるはずです。
フリーのRPGのキャラチップのようなものを用いてもいいと思いますし。

>どうしてもご心配であればハドソンの法務部に相談してみるのが一番です。

そうですね、それが一番ですね。
とりあえず、完成させてそのゲームシステムがまだそっくりだったり、気になるところがあれば聞いてみることにします^^
ありがとうございました☆


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

Name: Justy  ..比類無きプログラマー(62,868ポイント)   Date: 2007/03/04(日) 04:34   No:5179     
Title: Re:二次創作について    
 ブログの動画拝見しました。
 いやぁ、なかなかのクォリティですね。
 結構小気味良く動いていますし、個々のオブジェクトもアニメーションしていて良い感じです。
 公開されたら是非プレイさせて頂きたいと思います。


3Dの知識付けるだけでずいぶん見栄えするプログラムがかけそうなんですけどねぇ
 そうですね。3Dだと、いろいろ面白い演出が出来ますね。
 その分いろいろ大変ですが・・・。

 実は今年から DirextXの勉強を始めることにしました。
 シーケンス制御、タスク、汎用エフェクト、物理計算、カメラ、2D・3D各種描画周りなど
ようやく基本となるフレームワークがある程度形になった段階です。
 といっても全然まだ不満点が多いので、まだまだ拡張が必要な段階です。

 別にゲームとか作ろうとは思ってはいませんが、まぁなんとなくグラフィックスを扱うのは
楽しいので始めてみました。
 シェーダ周りとかっていろいろ可能性がありそうで、結構面白いです。

 仕事で帰りが遅いのであまり進みは早くないのですが、地道にやっていこうと思っています。


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

Name: 管理人 [URL]  ..ハッカー(227,733ポイント)   Date: 2007/03/04(日) 23:29   No:5186     
Title: Re:二次創作について    
>公開されたら是非プレイさせて頂きたいと思います。

そういっていただけると作成意欲がわきます^^

>実は今年から DirextXの勉強を始めることにしました。

おぉ、そうなんですか、私も今日京都まで足を伸ばして大きな本屋で
色々DirectX系の本を探しました。
DXライブラリはDirect7で出来ているようですが、
本は全てDirect9しかありませんでした。
Direct7で作られているDXライブラリと一緒に使うにはどうしたらいいのでしょう?



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

Name: Justy  ..比類無きプログラマー(63,455ポイント)   Date: 2007/03/05(月) 00:52   No:5193     
Title: Re:二次創作について    
DXライブラリはDirect7で出来ているようですが
 あ、ほんとですね。
 ちょっとびっくり。てっきり9だと思っていました。


Direct7で作られているDXライブラリと
一緒に使うにはどうしたらいいのでしょう?
 DirectX7を使用して使う分には併用できます。
 DirectX SDKは下位互換を持っているので使用する SDKは 7以上・・・ 9.0cとかで大丈夫です。
 DXライブラリの GetUseD3DDevObj()で、7用のデバイスが取得できるので、
それを経由して DirectXにアクセスできます。

 ただ、使用できる機能は 7のものに限られるので、9系用の資料が
どれくらい役立つかは微妙です。

 7系ですと3Dは一応問題なくできるはずですが、シェーダもないですし、
将来性もちょっと・・・。

 今後も2D系をメインにやられるようでしたらいいのですが、
3Dや Vistaを含めた将来を視野に入れるようでしたらやはり 9系は欠かせません。
 となると

・ Dxライブラリを DirectX9でビルドし直す
・ 他のライブラリ・・・CrystalSpaceとかirrlichtとか OGREとかLunaとか ・・・に乗り換える
・ 全部自分で書く

 のどれかになります。

※ 楽観的ですが、(APIや定義、ヘッダの統廃合で最初は苦労しますが)
一番最初の DirectX9でビルドしなおす、が一番楽かもしれません。


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

Name: 管理人 [URL]  ..ハッカー(228,448ポイント)   Date: 2007/03/05(月) 08:53   No:5206     
Title: Re:二次創作について    
>Dxライブラリを DirectX9でビルドし直す

あぁ、なるほど、思いつきませんでした。
・・と言う事は9でビルドしなおせばDXライブラリの関数は普通に使え、かつ9にしかない関数も使用できる
ということですね?
それならかなり楽になります。


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

Name: Justy  ..比類無きプログラマー(63,588ポイント)   Date: 2007/03/05(月) 10:41   No:5210     
Title: Re:二次創作について    
>・・と言う事は9でビルドしなおせばDXライブラリの関数は普通に使え、
>かつ9にしかない関数も使用できる ということですね?

 そういうことです。

 ちなみに9でビルドし直すというのは、そのままビルドするだけではだめです。
 そのままビルドしても7のままなので。
 IDirect3DDevice7の代わりに IDirect3DDevice9を使う、
などソースの何カ所か修正が必要になると思います。


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

Name: ま〜く  ..かけだし(1,258ポイント)   Date: 2007/03/05(月) 15:14   No:5213     
Title: Re:二次創作について    
>いいな〜早く実現したい(´〜`)
>って夢ばかり膨らむ一方、とても一人でそれだけ作るの大変なんですが(笑

うむーそうですねー><

いっそのことSourceForgeとかでソースを共有してみんなで開発したらどうでしょう。
・・・ってここまで管理人さんが作ったのを出すのはイヤかな^^;

ちなみに、「DXライブラリを全部自分で書く」は無しですか?
ここまで立派なサイトだからこのサイト独自のが有ってもいい気がします★


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

Name: 管理人 [URL]  ..ハッカー(229,552ポイント)   Date: 2007/03/05(月) 17:03   No:5216     
Title: Re:二次創作について    
>Justyさん
>ちなみに9でビルドし直すというのは、そのままビルドするだけではだめです。

そうですね、色々いじくったり変更すべき点を調べたりしてみます。
DXライブラリ製作者様に以前からお聞きしているので(現在DXライブラリ製作者様は風邪をひいていらっしゃるようで^^;)、そちらでも聞いてみます。

>ま〜くさん
>いっそのことSourceForgeとかでソースを共有してみんなで開発したらどうでしょう。

ハイ、無理です!
なぜならこんな汚いコードは2つの意味で人に見せられないからです(笑
1 ハジ
2 人が読めない(笑

私にキレイに書く実力があればそうしたいですけどね^^;
でも、ここまで作ったならやはり自分で仕上げたい気持ちもあります^^

>ちなみに、「DXライブラリを全部自分で書く」は無しですか?

それはDXライブラリを改造するってことですか?
それともDXライブラリのようなライブラリを1から作るってことですか?
DXライブラリに3D機能があれば完璧なんだけどなぁ・・。とよく思うので
DXライブラリを1から作ってみたい気もするんですよね><;

製作者様が3D機能を付けてくださればいいのに。。と他力本願な願望も抱きつつw


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

Name: ま〜く  ..かけだし(1,510ポイント)   Date: 2007/03/05(月) 18:58   No:5217     
Title: Re:二次創作について    
あはは

>ハイ、無理です!
>なぜならこんな汚いコードは2つの意味で人に見せられないからです(笑
>1 ハジ
>2 人が読めない(笑

ぼくも未だに汚いコード書いていて恥ずかしいですが・・でも慣れました^^;

>それはDXライブラリを改造するってことですか?
>それともDXライブラリのようなライブラリを1から作るってことですか?

後者です。
DirectXに関わるライブラリ+ゲームでよく使うライブラリとか有ると便利ですよね。



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

Name: 管理人 [URL]  ..ハッカー(229,601ポイント)   Date: 2007/03/05(月) 18:59   No:5218     
Title: Re:二次創作について    
なるほど〜、とりあえずDirectXを熟知しないことには始まりませんね^^;

しかし、それも面白いと思います。
是非将来作っていこうと思います♪


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

Name: Justy  ..比類無きプログラマー(64,090ポイント)   Date: 2007/03/05(月) 23:51   No:5222     
Title: Re:二次創作について    
>>いっそのことSourceForgeとかでソースを共有してみんなで開発したらどうでしょう
>なぜならこんな汚いコードは2つの意味で人に見せられないからです
 いやまぁ、作られているゲームを、というより、その課程で生み出された
再利用できそうなパーツを、としたらどうでしょうか。

 2Dゲームでざっと思いつく再利用できそうな汎用システムですと
・ スプライト
 アニメーション、座標・スケールなどのパラメータの保持
・ 衝突検知
 衝突を検知し、ぶつかったオブジェクトに状況を通知する
・ エフェクト
 エミッタから放出されるパーティクル制御
・ 描画レイヤー
 描画順番の動的な管理
・ カメラ
 実際に表示したい場所をカメラを通じて指定して描画する仕組み
・ 数学系
 各種補完とか
・ (非C言語なら)コンテナとアルゴリズム
・ スクリプト
 テキスト構文解析と実行
・ マルチスレッド対応
 更新と描画を同時に行う為の仕組み(2Dなら必要ないような気も・・・)

 とか、他にもあるでしょうが、ゲームに限らずアプリを1つ作ると
何かしら再利用できそうなパーツは多数出てきます。

 そういう部品をこれからゲームを作ろうとしている人たちに向けて
提供し、又使った人からのフィードバックを受けて皆で育てていくというのは、
とても有意義な感じがします。

 まぁ、上記にあげたようなのだと既に世の中にはあったりするわけですが、
DXライブラリ並みに誰でも使えるくらい敷居の低い物ではなかったりして、
初心者でも使えるようなものを、というコンセプトで
作るのは面白いかもしれません。


>ゲームでよく使うライブラリとか有ると便利ですよね
 まさにこれですね。


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

Name: 管理人 [URL]  ..ハッカー(229,399ポイント)   Date: 2007/03/05(月) 23:57   No:5223     
Title: Re:二次創作について    
>そういう部品をこれからゲームを作ろうとしている人たちに向けて
提供し、又使った人からのフィードバックを受けて皆で育てていくというのは、
とても有意義な感じがします。

なるほど、そういうことですね。
ぶつかり判定とか関数1つで出来たら便利ですね。
既にある関数を使えるようにしたらゲームプログラムのコードも随分すくなくなるかも。

私は毎回1から全部書いていっているので、、だから大変なんですねぇ><;
汎用性のある関数を作って後々使えるようにするほうが随分楽なのに何故そうしてこなかったのでしょう(?_?

参考になります☆


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

Name: Justy  ..比類無きプログラマー(64,396ポイント)   Date: 2007/03/06(火) 00:39   No:5224     
Title: Re:二次創作について    
ぶつかり判定とか関数1つで出来たら便利
 頭の中で想像してみましたが、出来そうな感じがしますね。

 構造体に現在位置、1フレーム前の位置、大きさ、形状、重さ、
衝突時の情報通達先関数などを指定して、衝突検知関数を使って
それをシステムに登録、全オブジェクトの登録が終わったところで
一斉に衝突チェック。
 ぶつかっていたらコールバックを使って各オブジェクトに
衝突位置やら衝突後の向きとかを通知し、その情報を元に
座標を補正したりエフェクト出したり、って流れでしょうか。

 あ、オブジェクトのタイプも必要でしょうか。
 特定のタイプとは衝突検知の必要がないものとかもありますから。


 何にせよどんなパーツでも、そこそこ簡単に使えて拡張性もそこそこあるって
ものができれば、みんなハッピーかな、と。


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

Name: ま〜く  ..かけだし(1,558ポイント)   Date: 2007/03/06(火) 12:39   No:5230     
Title: Re:二次創作について    
>初心者でも使えるようなものを、というコンセプトで
>作るのは面白いかもしれません。

これいいですね!このサイトの方針?にも合致するし。

座標(幾何学)計算とかもライブラリにしたいですね。
あーでもこういうの考えるとどうしてもC++のオペレーターとか有ると便利と思っちゃうんですけど初心者向きじゃないですかね・・・^^;


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

Name: 管理人 [URL]  ..ハッカー(229,672ポイント)   Date: 2007/03/06(火) 18:50   No:5236     
Title: Re:二次創作について    
う〜ん、色々やりたい事は沢山あるんですけど、ありすぎて時間がない(/~\)

おとといの朝からずっとぶっ通しでボンバーマンのプログラム書いてるんですけど、
そろそろふらふらになってきました(_ _||)

物理のページも作らなきゃならないし、実家にも帰らないと親がカンカンだし、1日30時間ほしいです(´ `A;)


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

Name: Justy  ..比類無きプログラマー(64,711ポイント)   Date: 2007/03/07(水) 02:53   No:5243     
Title: Re:二次創作について    
@ま〜くさん
これいいですね!このサイトの方針?にも合致するし
 ですよね。


座標(幾何学)計算とかもライブラリにしたいですね
 座標計算っていうと、例えばどんなのでしょう。
 衝突検知系でしょうか(立方体と球の衝突とか)?


C++のオペレーターとか有ると便利と思っちゃうんですけど初心者向き>。
 どこで線引きするか、ですよね。
 そもそも C++を有りにするか Cオンリーにするかという問題もありますし。
 でも C++が有りならオペレータを使うことで直感的に扱えるなら有りだと思います。


@管理人さん
>おとといの朝からずっとぶっ通しでボンバーマンのプログラム書いてるんですけど
 ちょっとがんばり過ぎです!
 最近暖かかったり寒かったりと気温の差が結構あるので、お体にお気をつけ下さい。



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

Name: ま〜く  ..かけだし(1,934ポイント)   Date: 2007/03/07(水) 12:15   No:5244     
Title: Re:二次創作について    
Justyさん

>座標計算っていうと、例えばどんなのでしょう。
>衝突検知系でしょうか(立方体と球の衝突とか)?

衝突というのも含まれると思います。例えば、矩形の中にある点が含まれるかどうかの単純な判定〜ポリゴン内外判定、線分や折れ線との交差判定などなどです。
あと単純なところですと、ベクトル同士の合成や内積、外積計算などなどその場で計算しようとすれば出来るけどいちいち書いていると面倒なものすべてですね〜
二次元、三次元系とうまく連携取れる形で作れれば、かなり計算が楽になる場面があるとおもいます。

例えば、平面的に動く敵の動きがあった場合、それを二次元的に定義するのはしやすいですが、それを3Dシューティングなどに適用したい場合、任意の平面にその動きを投影?(適用?)するのが簡単になりそうですし。

>どこで線引きするか、ですよね。
>そもそも C++を有りにするか Cオンリーにするかという問題もありますし。
>でも C++が有りならオペレータを使うことで直感的に扱えるなら有りだと思います。

ですよね・・・
上にあげたようなライブラリを作るとなるともちろんCでも実装可能ですが、確実にC++のほうがライブラリを使う側としては楽なんですよね。
そう「直感的」でいいんですよね〜




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

Name: 管理人 [URL]  ..ハッカー(230,090ポイント)   Date: 2007/03/07(水) 16:56   No:5246     
Title: Re:二次創作について    
ずっと、パソコン見続けてそのまま寝たんですが、
今日は朝からずっとモニタに焦点が合わない・・・。

目がホントにおかしくなってしまった;
遠い山も焦点が合わなくて気持ち悪い:;

お返事また今度書きます^^;


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

Name: Justy  ..比類無きプログラマー(65,027ポイント)   Date: 2007/03/08(木) 01:31   No:5253     
Title: Re:二次創作について    
衝突というのも含まれると思います
 なるほど。諸々込みってことですね。


ベクトル同士の合成や内積、外積計算などなどその場で計算しようとすれば
 そういうのはベクトルクラスに入れてしまいたいですね。


二次元、三次元系とうまく連携取れる形で作れれば
平面的に動く敵の動きがあった場合〜にその動きを投影するのが簡単になりそうですし
 2Dのゲームであっても、ゲージとかの2D座標じゃないと位置を合わせづらい部分を除いて
全て内部的には3Dで作ってしまえば、全て丸く収まりそうです。
 行列で回すだけですから。
 でもそこを行列とか3Dとか意識させないで出来るライブラリになるなら、
初心者でも扱いやすくなりそうです(出来るのか??)。


確実にC++のほうがライブラリを使う側としては楽なんですよね
 私も Cより C++の方が好きです。
 デストラクタとテンプレートなしではいろいろきついですから。


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

Name: 管理人 [URL]  ..ハッカー(230,336ポイント)   Date: 2007/03/08(木) 14:41   No:5255     
Title: Re:二次創作について    
昨日は目の焦点が合わなくて困りました(_ _|||)
目は使いすぎるとよくないですね。

ゲーム作ってると加速度の計算が結構鬱陶しいんですよねぇ。
そういうのを計算してくれる関数があれば、楽かもと思います。
私は普段加速度や自由落下の計算式は現実世界で起こりうる数値で計算式を書いてみてから実装しているので
ゲームプログラミングの館の物理入門で紹介している通り、
現実世界の1mはモニタで言う何ピクセルなのか、何ピクセルをどれだけの長さとして世界を作るのか、
2Dではそういう計算もいるんですよね。
加速度の計算とモニタのピクセル位置をイチイチ計算するのは結構鬱陶しくて。
そういうの計算してくれる関数が実装してみたら結構使いにくかった・・とかなりそうな嫌な予感もしますが^^;



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

Name: ま〜く  ..かけだし(2,184ポイント)   Date: 2007/03/08(木) 15:08   No:5256     
Title: Re:二次創作について    
>デストラクタとテンプレートなしではいろいろきついですから。

ぼくも一緒です^^

>でもそこを行列とか3Dとか意識させないで出来るライブラリになるなら、
>初心者でも扱いやすくなりそうです(出来るのか??)。

う〜む。確かに・・・
3Dを扱うのに行列意識させないでできるかな^^;


>現実世界の1mはモニタで言う何ピクセルなのか、何ピクセルをどれだけの長さとして世界を作るのか、
>2Dではそういう計算もいるんですよね。

ふむふむ。座標変換も楽に記述できればいいですね〜
普段の計算のときはm単位ですべて計算して、描画タイミングでピクセル単位に変換する感じですね。


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

Name: Justy  ..比類無きプログラマー(65,559ポイント)   Date: 2007/03/08(木) 20:46   No:5260     
Title: Re:二次創作について    
@ま〜くさん
3Dを扱うのに行列意識させないでできるかな^^;
 うーん、完全に意識させないで、ってのは無理ですかねぇ。
 行列を「姿勢」とか別の用語に言い換えて、制御関数も数を絞って、
複雑なことをさせないようにすれば・・・。


普段の計算のときは1m単位ですべて計算して、
描画タイミングでピクセル単位に変換する感じですね
 3Dの時と同じような仕組みですね。


@管理人さん
現実世界の1mはモニタで言う何ピクセルなのか、何ピクセルをどれだけの長さとして世界を作るのか、
2Dではそういう計算もいるんですよね。
そういうの計算してくれる関数が実装してみたら結構使いにくかった
 関数でも十分楽を出来そうですが、システムとして作った方が
より楽かもしれません。

 関数だと自分で関数を使って計算して、その結果を基に描画して、
ってのをオブジェクト毎(種類毎)にしないといけないですが、
システムなら自分の管理上の座標とかの情報をシステムに投げれば後は
勝手に計算して表示してくれることもできると思います。


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

Name: 管理人 [URL]  ..ハッカー(230,603ポイント)   Date: 2007/03/09(金) 16:24   No:5265     
Title: Re:二次創作について    
なるほど。。特に難しく言わなくても座標変換と言えばいいんですね^^;
いつも私は趣味で作る範囲しかプログラムをやったことがないので、知識が発展しません;

>システムなら自分の管理上の座標とかの情報をシステムに投げれば後は
勝手に計算して表示してくれることもできると思います。

なるほど、そうですね。
色々プログラムを作っていると、あれば便利だなってもの色々思いつきますよね。
そのつど作っていけばいいものが出来そう☆


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



Name: 夏天 [URL]  ..ぴよぴよ(615ポイント)   Date: 2007/03/06(火) 22:09   No:5239       
Title: ファイル処理    
#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int FileHandle ;
char String[256] ;

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

// test.cpp ファイルを開く
FileHandle = FileRead_open( "test.cpp" ) ;

// 一行読む
FileRead_getc( FileHandle ) ;

// 画面に描画
DrawString( 0, 0, String, GetColor( 255,255,255 ) ) ;

// キー入力を待つ
WaitKey() ;

// ファイルを閉じる
FileRead_close( FileHandle ) ;

// DXライブラリの後始末
DxLib_End() ;

return 0 ;
}

これをコンパイルすると横1行にフフフフフフフフフフフフフフフフフフフ・・・・・・・(以下略)
と出てきます。
ちなみにtest.cppを変更しても同じ結果が出てきてしまいます
どうしたらよいのでしょうか


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


Name: box  ..熟練のプログラマー(54,376ポイント)   Date: 2007/03/06(火) 22:29   No:5241     
Title: Re:ファイル処理    

> // 一行読む
> FileRead_getc( FileHandle ) ;
>
> // 画面に描画
> DrawString( 0, 0, String, GetColor( 255,255,255 ) ) ;

ファイルから読んだ内容をStringにセットしていないように見えるのですけれど…。
念のためご確認ください。


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

Name: 管理人 [URL]  ..ハッカー(229,981ポイント)   Date: 2007/03/07(水) 16:54   No:5245     
Title: Re:ファイル処理    
DXライブラリの関数説明をよく読んでみてください。

宣言 int FileRead_getc( int FileHandle ) ;



概略  ファイルから一文字読み出す


引数 int FileHandle : ファイルハンドル


戻り値  −1以外:読み出した文字コード
  −1:エラー発生



この関数は1文字読み込む関数です。
しかも使い方が間違っています。
関数から文字データが返って来ているのに、どこにも受け取っていません。

char ch;
ch = 関数;

といったように、かえってきたものを受け取ってください。

それに1バイト文字つまり半角英数しか使用できません。

1行読み込むんでしたら


宣言 int FileRead_gets( char *Buffer, int Num, int FileHandle ) ;


概略  ファイルから一行読み出す


引数 char *Buffer : 読み出した文字列を格納するメモリ領域の先頭アドレス
int Num : 文字列を格納するメモリ領域のサイズ
int FileHandle : ファイルハンドル


戻り値  −1以外:読み出した文字列の長さ
  −1:エラー発生



こちらを使ってください。


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

Name: 夏天 [URL]  ..ぴよぴよ(647ポイント)   Date: 2007/03/08(木) 21:49   No:5261 解決!     
Title: Re:ファイル処理    
恥ずかしながらよく考えるとこの関数は自分のプログラムに使わない関数でした^^;
どうもお騒がせしました・・・


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

Name: 管理人 [URL]  ..ハッカー(230,541ポイント)   Date: 2007/03/09(金) 16:22   No:5264     
Title: Re:ファイル処理    
まぁ、この処理はCの標準関数で出来ますからDXライブラリ独自のものをつかわなくてもいいですしね^^

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



Name: Andy  ..ぴよぴよ(147ポイント)   Date: 2007/03/07(水) 18:07   No:5249       
Title: WinSockによる複数パケット送受信について    
はじめまして。Andyと言います。
今、WinSockを用いてパケット送信ソフトと受信ソフトを作成しています。
開発ツールは、VC++です。

プロトコルは、UDPです。


送信側で、パケットを1000個送信する場合、
for()ループでsendto()を回せばいいのでしょうか?
それともその他の方法でしょうか?

受信側で、パケットを受信する場合recvfrom()を使うと思いますが、
受信側でパケットの数を把握することは出来ますか?


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


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


Name: 管理人 [URL]  ..ハッカー(230,124ポイント)   Date: 2007/03/08(木) 14:33   No:5254     
Title: Re:WinSockによる複数パケット送受信について    
すみません、Winsockは使ったこと無いのでお答えできません><;
力不足でごめんなさい(_ _||)


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

Name: Yuki  ..上級者(16,547ポイント)   Date: 2007/03/09(金) 08:19   No:5262     
Title: Re:WinSockによる複数パケット送受信について    
UDPだと送信するパケットが必ずしも相手に届く保障がありません。
順番も入れ替わる可能性があります。

sendto()を使って1000個送ることは可能ですが、
recvfrom()で全て受信できる保障がないということです。

UNIXになってしまいますが、UDPとTCPについて書かれたサイトがありました。
http://x68000.q-e-d.net/~68user/net/udp-1.html
参考にどうぞ。


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



Name: のぶ  ..ぴよぴよ(155ポイント)   Date: 2007/03/08(木) 16:58   No:5257       
Title: 配列の構造体についての質問    
質問です。
構造体の中に配列を宣言してプログラムを行っているのですが、
コンパイルは通ってもリンクが通らないという事態に陥ってしまいました。
リンクエラーメッセージは Symbol "_LED_YKK_AIRSHIP_P1_n" size mismatch.
です。
プログラムは以下のとおりです。

struct LED_normal{
const short frame;
const unsigned char speed;
unsigned char dat[][40];
};

struct LED_normal LED_YKK_AIRSHIP_P1_n = {
70,
2,
{
{255,255,255,255,255,255,255,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//1
{242,242,242,242,242,242,242,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,},//2
{229,229,229,229,229,229,229,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//3
   ・
   ・
   ・
};

どなたかいい方法をお教えくださいませんか。


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


Name: keichan  ..上級者(16,981ポイント)   Date: 2007/03/08(木) 17:24   No:5258     
Title: Re:配列の構造体についての質問    
構造体メンバに不確定のサイズを指定することはできません。
(コンパイル時にサイズが確定できない為)


struct LED_normal{
const short frame;
const unsigned char speed;
unsigned int dat_size;
unsigned char** dat;
};

として動的に値を入れていくしかありません。

int main()
{
const int n = 10; // データサイズ
const unsigned char data[n][40] = {
{255,255,255,255,255,255,255,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//1
{242,242,242,242,242,242,242,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,},//2
{229,229,229,229,229,229,229,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//3



};
struct LED_normal LED_YKK_AIRSHIP_P1_n = {
70,
2,
n,
NULL,
};
LED_YKK_AIRSHIP_P1_n.dat = (unsigned char**)malloc(sizeof(unsigned char*) * LED_YKK_AIRSHIP_P1_n.data_size);
for( int i = 0; i<LED_YKK_AIRSHIP_P1_n.data_size; i++ ) {
LED_YKK_AIRSHIP_P1_n.dat[i] = (unsigned char*)malloc(sizeof(unsigned char)*40);
memcpy(LED_YKK_AIRSHIP_P1_n.dat[i], data[i], sizeof(unsigned char)*40);
}


// 終了処理
for( int i = 0; i<LED_YKK_AIRSHIP_P1_n.data_size; i++ ) {
free(LED_YKK_AIRSHIP_P1_n.dat[i]);
}
free(LED_YKK_AIRSHIP_P1_n.dat);
return 0;
}



提示されたデータ構造にしなければいけない背景を提示頂ければ違うアプローチでもっと簡単に記述できる
アドバイスができるかもしれません。


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



Name: 名無し  ..ぴよぴよ(0ポイント)   Date: 2007/03/04(日) 23:24   No:5185       
Title: 無題    
> c:\borland\bcc55\Bin\make.exe -fDebug\test.mak TARGET
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -eDebug\test.exe Debug\DrawPixel.obj
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル 'WinMain' が未解決(C:\BORLAND\BCC55\LIB\C0W32.OBJ が参照)

** error 1 ** deleting Debug\test.exe

Make End !! (Elapsed time 0:01.552)

メイクするとこうなります


ちなみにボーランドの使ってます


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


Name: box  ..熟練のプログラマー(53,569ポイント)   Date: 2007/03/04(日) 23:37   No:5187     
Title: Re:無題    
> bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -eDebug\test.exe Debug\DrawPixel.obj
> Error: 外部シンボル 'WinMain' が未解決(C:\BORLAND\BCC55\LIB\C0W32.OBJ が参照)

コンパイル・オプションの -W は、Windowsアプリケーションを作成するためのものです。
その場合、WinMain関数が必要ですが、リンク時に見つからなかったためにエラーが発生しています。

もし、作成するプログラムがコンソール・アプリケーションでしたら、
コンパイル・オプションを -W から -WC に切り替えてください。


Name: 名無し  ..ぴよぴよ(1ポイント)   Date: 2007/03/05(月) 00:47   No:5192     
Title: Re:無題    
すいませんそれってどうやって設定するんですか?

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

Name: 名無し  ..ぴよぴよ(34ポイント)   Date: 2007/03/05(月) 00:54   No:5194     
Title: Re:無題    
変える方法はわかって
変えたんですがまだエラーでます
何ででしょう?


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

Name: box  ..熟練のプログラマー(53,684ポイント)   Date: 2007/03/05(月) 06:18   No:5202     
Title: Re:無題    
それでは、ソースコードとエラーメッセージを見せてください。

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

Name: 名無し  ..ぴよぴよ(417ポイント)   Date: 2007/03/06(火) 21:53   No:5237     
Title: Re:無題    
> c:\borland\bcc55\Bin\make.exe -fRelease\test.mak -B TARGET
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -WC -3 -O2 -w- -AT -pc -H- -k -b -nRelease -c "C:\Documents and Settings\Owner\デスクトップ\test\DrawPixel.cpp"
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
C:\Documents and Settings\Owner\デスクトップ\test\DrawPixel.cpp:
brc32 -r -foRelease\test.res "C:\Documents and Settings\Owner\デスクトップ\test\test.rc"
Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.
bcc32 -WC -3 -O2 -w- -AT -pc -H- -k -b -eRelease\test.exe Release\DrawPixel.obj
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)

** error 1 ** deleting Release\test.exe

Make End !! (Elapsed time 0:01.072)

これがエラーメッセージです


お願いします


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

Name: バグ  ..プログラマー(29,039ポイント)   Date: 2007/03/06(火) 22:08   No:5238     
Title: Re:無題    
main関数はありますか?

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

Name: box  ..熟練のプログラマー(54,315ポイント)   Date: 2007/03/06(火) 22:25   No:5240     
Title: Re:無題    
> これがエラーメッセージです

ソースコードも見せてください、とお願いしておりました。
その願いがかなえば、一発で解決するように思いますのに、ちょっと残念…。

ところで、brc32も使っているということは、作成しようとしているのは
Windowsアプリケーションですか?
もし、そうだとすると、コンパイル・オプションは -W に戻して、
「WinMain」という関数がソースコードにあるかどうかを確認してください。
大文字・小文字を含めて、正確にこの名前の関数です。


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

Name: 名無し  ..ぴよぴよ(453ポイント)   Date: 2007/03/07(水) 21:16   No:5251     
Title: Re:無題    
すいませんソースコードって何ですか?
それとどうやって確認するんですか?


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

Name: box  ..熟練のプログラマー(54,536ポイント)   Date: 2007/03/07(水) 22:34   No:5252     
Title: Re:無題    
> すいませんソースコードって何ですか?

今回の場合でいうと、
C:\Documents and Settings\Owner\デスクトップ\test\DrawPixel.cpp
というソースファイル(exeファイルを作る元になるファイル)の中身のことです。

> それとどうやって確認するんですか?

BCC Developerという開発支援ソフトウェアをお使いであるように
見えますが、そのとおりですか?
だとすると、以前に投稿されたエラーメッセージを表示するウィンドウの
すぐ上にあるのが、ソースコードを表示するウィンドウです。
エラーメッセージのときと同じ方法で、ソースコードを貼り付けてください。


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



Name: ふぐお  ..入門者(3,088ポイント)   Date: 2007/03/04(日) 23:05   No:5182       
Title: 文字列コピー    
文字列をコピーするプログラムです。
<per>#include <stdio.h>
void st(char *,char *);
int main(void)
{
char c[256],h[]="Hello";

st(c,h);
printf("%s\n",c);
return 0;
}

void st(char *c,char *a)
{
int i;
for(i=0;*(a);i++){
c[i]=a[i];
}
c[i1]='\0';
}</per>
コピーした文字列が表示されません。
どこがおかしいか教えてください


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


Name: ふぐお  ..入門者(3,103ポイント)   Date: 2007/03/04(日) 23:08   No:5183     
Title: Re:文字列コピー    
すいません
c[i1]='\0';は
c[]i='\0';です


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

Name: 管理人 [URL]  ..ハッカー(227,825ポイント)   Date: 2007/03/04(日) 23:39   No:5188     
Title: Re:文字列コピー    
>c[]i='\0';です

ということですが、このような書き方は出来ません、どのようなことがここでさせたいのでしょうか?
格納した文字列の最後に終端記号を入れたいのでしょうか?
それでしたら
c[i]にいれないといけませんが。


そこを直せば後は悪くないはずです。
なお、タグは
<per>ではなく、<pre>です。


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

Name: box  ..熟練のプログラマー(53,656ポイント)   Date: 2007/03/04(日) 23:43   No:5190     
Title: Re:文字列コピー    
> for(i=0;*(a);i++){

*(a) が正しくありません。
*(a) もしくは *a は、aが指している1文字のことです。
それが '\0' でない間ループを回り続けますので、
状況によっては無限ループに陥ってしまうと思います。

*(a)
のかわりに
a[i] != '\0'
と書けば、うまくいくと思います。


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

Name: 管理人 [URL]  ..ハッカー(228,077ポイント)   Date: 2007/03/05(月) 00:04   No:5191     
Title: Re:文字列コピー    
あら、そのように書かれていたとは、すみません^^;

しかし無限ループにはならず、257回ループしたところで毎回breakされるのですが、
これは*aの内容がcの256バイトを超えてc[i]に書き込んだことで変更されたことにより
breakされたんでしょうか?
つまりたまたまa[256]が\0であり、c[256]はたまたまその\0がはいったんでしょうか?
aは6バイトのはずですからa[6]~a[256]は何が入っているかわからないですね。

確認したプログラムはこちらで


#include <stdio.h>
void st(char *c,char *a){
int i;
for(i=0;*a;i++){
c[i]=a[i];
printf("%c\n",*a);
}
printf("%dでbreak\n",i);
c[i]='\0';
return ;
}
int main(void){
char c[256],h[]="Hello";
st(c,h);
printf("%s\n",c);
return 0;
}


実行結果

H
H
H
H
....(略  256回分)
H
H
H
H
H
  ←i==256でこの部分*aが\0に書き換えられた?
257でbreak
Hello


このようになりました。
*aがi==256の時\0に書き換えられたのでしょうかね。


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

Name: 管理人 [URL]  ..ハッカー(228,354ポイント)   Date: 2007/03/05(月) 08:50   No:5205     
Title: Re:文字列コピー    
やはりそのようです。

c[256]は*aと同じアドレスですね。



#include <stdio.h>
void st(char *c,char *a){
int i;
for(i=0;*a;i++){
c[i]=a[i];
}
for(i=0;i<256;i++)
printf("&c[%d]=%d\n",i,&c[i]);
for(i=0;i<6;i++)
printf("&a[%d]=%d\n",i,&a[i]);
c[i]='\0';
return ;
}
int main(void){
int i;
char c[256],h[]="Hello";
st(c,h);
printf("%s\n",c);
return 0;
}

実行結果

・・(略
&c[251]=1242047
&c[252]=1242048
&c[253]=1242049
&c[254]=1242050
&c[255]=1242051
&a[0]=1242052
&a[1]=1242053
&a[2]=1242054
&a[3]=1242055
&a[4]=1242056
&a[5]=1242057
Hello



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

Name: フグオ  ..ぴよぴよ(42ポイント)   Date: 2007/03/06(火) 01:17   No:5225     
Title: Re:文字列コピー    
できました。
ありがとうございました!
ところで最初のプログラムの256回目でbreakする理由ですが、
偶然にa[256]に0が入っていたってことですかね?


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

Name: 管理人 [URL]  ..ハッカー(229,472ポイント)   Date: 2007/03/06(火) 18:46   No:5234     
Title: Re:文字列コピー    
そもそもaは6バイトしか用意していませんから7バイト目からこの時はずっと0だったのでしょう。
for文の継続可能条件が*aですからc[256]を書き換えた時a[0]が書き換わったのでループを抜けたと思われます。


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

Name: ふぐお  ..入門者(3,555ポイント)   Date: 2007/03/07(水) 17:20   No:5247     
Title: Re:文字列コピー    
ごめんなさいよくわかりませんでした

こういうことではないのですか?
&c[256]==&a[0]で
   
c[256]=a[256]とゆうことは
   
a[0]==a[256]
ということでa[256]=0だったということではないのですか?


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

Name: keichan  ..上級者(16,231ポイント)   Date: 2007/03/07(水) 18:04   No:5248     
Title: Re:文字列コピー    
その通りです。
a[256]がたまたま0であったために、
a[0]=0になったということです。



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

Name: ふぐお  ..入門者(3,567ポイント)   Date: 2007/03/07(水) 20:41   No:5250 解決!     
Title: Re:文字列コピー    
ありがとうございます!!
すっきりしました


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



Name: ふぐお  ..入門者(3,444ポイント)   Date: 2007/03/06(火) 01:28   No:5226       
Title: 文字列    
#include<stdio.h>

#pragma warning(disable:4244)

unsigned long len(char *);
char *cat(char *,char *);
int main(void)
{
unsigned long l;
char c[256],a[256];
gets(c);
gets(a);
cat(c,a);
printf("%s",c);
return 0;
}

unsigned long len(char *c)
{
char *p;
for(p=c;*p;p++);
return (p-c);
}

char *cat(char *c,char *a)
{
char *p=(c+len(c));
while(*p++=*a++);
return c;
}

をコンパイルすると
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.c:
警告 W8060 test.c 27: おそらく不正な代入(関数 cat )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
と言う警告が出ます
理由を教えてください


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


Name: バグ  ..プログラマー(29,030ポイント)   Date: 2007/03/06(火) 08:07   No:5227     
Title: Re:文字列    
while(*p++=*a++);

これが原因です。条件ループをさせたいのならば、代入ではなく、判別式でなければいけません。

a = b
bの値をaに代入する。

a == b
aとbが等しい場合に真となる。


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

Name: box  ..熟練のプログラマー(54,014ポイント)   Date: 2007/03/06(火) 09:42   No:5228     
Title: Re:文字列    

while(*p++=*a++);

は、次の書き方と等価です。

while ((*p = *a) != '\0') {
p++;
a++;
}

こちらの書き方では、
・*pに*aを代入し、結果を評価する。
・評価した結果(つまり*pの内容)が'\0'でない間、ループする。
ということを簡略化せずに書いています。
これを少しだけ簡略化すると

while (*p = *a) {
p++;
a++;
}

となります。この時点で、コンパイル時に同じ警告が出ます。
「while文の中が条件式でなくて代入式になっていますが、本当にいいですか?」
という意味です。

もっと簡略化すると、お書きになったとおりとなります。
というわけで、「今回の場合は」警告を無視してかまわないです。


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

Name: ふぐお  ..入門者(3,489ポイント)   Date: 2007/03/06(火) 23:04   No:5242 解決!     
Title: Re:文字列    
とても分かりやすっかたです。ありがとうございました
これからもよろしくお願いします


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



Name: こる  ..ぴよぴよ(329ポイント)   Date: 2007/03/04(日) 19:01   No:5180       
Title: 処理が重い・・・。    
こんにちは。初めて質問させていただきます。
ここのサイトをみつつサンプルプログラム実行したとき、
かなり処理が遅いです;;

最初のほうのキャラクターを歩かせるプログラムを実行するだけで遅くなってしまいます。
VisualC++を使ってるんですが、よく見ると下の方に「〜〜TrendMicro〜〜シンボルを読み込んでいます」とかでまくってて、そのときに遅くなってるんです。

たしかにウイルス対策ソフトを入れてると遅いとか聞いたことありますが、そのソフトを終了しても遅いまんま・・・。アンインストールしたらよくなるとは思いますが、買ったばっかりでそんなのしたくないし・・。
どうすればいいのかわかりません;;
経験豊富な先輩方、誰か助けてください!.・゜・(ノД`)・゜・.


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


Name: GPGA  ..上級者(19,330ポイント)   Date: 2007/03/04(日) 19:51   No:5181     
Title: Re:処理が重い・・・。    
処理が重いのは、大抵PCのスペックが足りていないのが原因ですので
PCのスペックを記載してください。

記述物
OS、CPU、メモリ、グラフィックカード、Cドライブの全体容量と空き容量


記述例
OS:Windows XP
CPU:Pentium4 2.8GHz
メモリ;2GB
グラフィックカード:GeForce 6600GT
Cドライブ全体容量:40GB
Cドライブ空き容量:20GB
 
もし、PCのスペックがわからないのであれば画面左下のスタートから
「ファイル名を指定して実行」を選択し、そこに「dxdiag」と記述して
OKを押してください。
PCのスペックが表示されます。

もし、それでもわからなければ、PCの型番を記載してください。


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

Name: むつ  ..入門者(2,983ポイント)   Date: 2007/03/04(日) 23:15   No:5184     
Title: Re:処理が重い・・・。    
もし、「TMAS_OEHook.dll」であれば、
Outlookアドイン「迷惑メール対策ツールバー」が悪さをしているようです。
コレを無効にしてみてはいかがでしょうか。

ttp://www.red.oit-net.jp/tatsuya/pc/process.htm


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

Name: 管理人 [URL]  ..ハッカー(227,843ポイント)   Date: 2007/03/04(日) 23:41   No:5189     
Title: Re:処理が重い・・・。    
まず、GPGAさんのおっしゃるとおり、PCのスペックを教えてください。

処理はグラフィックボードを用いますのでそこそこ古くないグラフィックボードをつんでいる必要がありますが、
グラフィックボード上で計算しない設定にも出来ますし、いろいろスペックしだいで変更する事になると思いますから一度スペックを教えてください。


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

Name: こる  ..ぴよぴよ(448ポイント)   Date: 2007/03/05(月) 19:48   No:5219     
Title: Re:処理が重い・・・。    
えーと、こんな仕様っぽいです。

OS: Windows XP
CPU: Intel(R) Core(TM)2 CPU 2.4GHz(2 CPUs)
メモリ: 2GB
グラフィックカード: GeForce 7900 GS
Cドライブ全体容量: 250GB
Cドライブ空き容量: 218GB

なるほど、迷惑メール対策ツールバーですか!
それが悪さしてる可能性があるのですね!調べてみます!
ありがとうございます!


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

Name: 管理人 [URL]  ..ハッカー(229,738ポイント)   Date: 2007/03/05(月) 23:02   No:5220     
Title: Re:処理が重い・・・。    
いや〜素晴らしいハイスペックですねぇ、、これで動かなかったら日本にある大半のパソコンは動かないでしょう・・。

おかしいですね、スペックは十分ですけど、処理が重くなる・・ウィルスには感染してないですか?
・CPUの稼働率が何もしていないのに10%超えたりしていませんか?
・ウィルスソフトははいっていますか?最近スキャンしてみましたか?
よければそちらもチェックしてみてください。


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

Name: 管理人 [URL]  ..ハッカー(229,213ポイント)   Date: 2007/03/05(月) 23:45   No:5221     
Title: Re:処理が重い・・・。    
どうでしょう?
処理速度を計測するプログラムを作ってみました。

Z,X,Cキーをそれぞれ任意に押してみてください。

[[ ]]に書かれている数字がFPSです。

普通60以上になります。この数字がZ,X,Cどのキーを押しても60以上がたもてていたら問題ありません。



#include "DxLib.h"

void graph(int states){
int i,j;
switch(states){
case 0:
DrawString(0,20,"現在1フレームに0個の四角形を描画しています。",GetColor(255,255,255));
break;
case 1:
DrawString(0,20,"現在1フレームに100個の四角形を描画しています。",GetColor(255,255,255));
for(i=0;i<100;i++)
DrawBox(i,100,i+300,400,GetColor(GetRand(255),GetRand(255),GetRand(255)),TRUE);
break;
case 2:
DrawString(0,20,"現在1フレームに10000個の四角形を描画しています。",GetColor(255,255,255));
for(j=0;j<100;j++)
for(i=0;i<100;i++)
DrawBox(i,100,i+300,400,GetColor(GetRand(255),GetRand(255),GetRand(255)),TRUE);
break;
default:
break;
}
return;
}

void fps(int count , int wait , int states){
int i;
static int ave=0,f[60];
f[count%60]=wait;
if(count%60==59){
ave=0;
for(i=0;i<60;i++)
ave+=f[i];
ave/=60;
}
if(ave!=0)
DrawFormatString(0,0,GetColor(255,255,255),"[[%.1f]] 現在%d Zキー:0 Xキー:1 Cキー:2",1000.0/(double)ave,states);
return;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

int wait=0,count=0,t=0,states=0;
char Key[256];

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;

SetDrawScreen( DX_SCREEN_BACK );

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && Key[KEY_INPUT_ESCAPE]==0){
if (Key[KEY_INPUT_Z]==1) states=0;
else if(Key[KEY_INPUT_X]==1) states=1;
else if(Key[KEY_INPUT_C]==1) states=2;

graph(states);
wait = GetNowCount()-t;
t=GetNowCount();
fps(count,wait,states);
count++;
ScreenFlip();
}
DxLib_End();
return 0;
}


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

Name: こる  ..ぴよぴよ(954ポイント)   Date: 2007/03/06(火) 12:20   No:5229 解決!     
Title: Re:処理が重い・・・。    
おおおおおおお!!
むつさんのおっしゃる通り、迷惑メール対策ツールバーを無効にしたらめちゃ快適に動作するようになりました!
解決にご協力いただいた皆様、本当にありがとうございました!!
あぁ、感謝してもしきれません;;

それにしても、管理人さんのような「いろいろ聞いてください」という困っているひとを助ける考え方でサイトを運営するところをとても尊敬しています。

私も管理人さんのような人間になれるようがんばります!
これからも応援しています^^学会での発表、がんばってください!!w


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

Name: 管理人 [URL]  ..ハッカー(229,560ポイント)   Date: 2007/03/06(火) 18:48   No:5235     
Title: Re:処理が重い・・・。    
全然むつさんのおっしゃる回答が思いつきませんでした・・力及ばずすみません(_ _|||)

色々HPを見ていただいているようでありがとうございます^^
嬉しいお言葉、励みになります☆

またお気軽にお越し下さい♪


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



Name: madou(超初心者)  ..ぴよぴよ(334ポイント)   Date: 2007/03/06(火) 14:49   No:5231       
Title: ハノイの搭のプログラムの解釈について    
突然ですいません、独学で勉強してるんですが、本に余り詳しく載ってなかったので

質問させてもらいます。
#include<stdio.h> //再帰関数の使い方
#include<stdlib.h>
void hanoi(int n,int a,int b,int c);
int main(void){
hanoi(3,'a','b','c');
return(EXIT_SUCCESS);
}
void hanoi(int n,int a,int b,int c){//一番小さい1〜nまでのn枚:開始棒:目的棒:作業棒
if(n==1){//一番小さい円盤しかないのなら
printf("1の円盤を %c から %c に移す\n",a,b);
}else{
hanoi(n-1,a,c,b);
printf("%dの円盤を %c から %c に移す\n",n,a,b);
hanoi(n-1,c,b,a);
}
}
以上の途中にあるハノイ移動の
最初の引数の解釈“//一番小さい1〜nまでのn枚”で合ってるでしょうか?


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


Name: box  ..熟練のプログラマー(54,142ポイント)   Date: 2007/03/06(火) 15:19   No:5232     
Title: Re:ハノイの搭のプログラムの解釈について    

> 最初の引数の解釈“//一番小さい1〜nまでのn枚”で合ってるでしょうか?

正しいです。
なお、再帰の本体部分である

> hanoi(n-1,a,c,b);
> printf("%dの円盤を %c から %c に移す\n",n,a,b);
> hanoi(n-1,c,b,a);

は、こんな風に解釈するとわかりやすいかもしれません。
・aにある上からn-1枚を、cへ移す。bを作業用に使う。
・aに残っているいちばん大きい円盤を、bへ移す。
・cに移しておいたn-1枚を、bへ移す。aを作業用に使う。
・完成


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

Name: madou(超初心者)  ..ぴよぴよ(209ポイント)   Date: 2007/03/06(火) 15:34   No:5233 解決!     
Title: Re:ハノイの搭のプログラムの解釈について    
諸事情により,大変失礼ですが,中傷が来そうで怖いので,名前変えてるんですが、
とても分かりやすい説明ありがとうございます。
これで納得して、次に進めそうです。
毎回ありがとうございます。
独学の身としては感謝しきれないほど、感謝(重宝)してます。


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



Name: めちゃ初心者  ..ぴよぴよ(217ポイント)   Date: 2007/03/05(月) 02:23   No:5196       
Title: コンパイルエラー    
はじめまして、C言語を今日からはじめました。
書店にて購入した本の付属品でインストールをしてそこに書いてある
ソースプログラムを本体にコピーして(プログラムは間違っていない)
コンパイルしてもどうしてもコンパイルできません。
Cの世界に入ろうとしていて、初歩の初歩で申し訳ありません。
以下のようなメッセージがでるのですが教えていただけますでしょうか?

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
sample1.c:
エラー E2209 sample1.c 1: インクルードファイル 'stdio.h' をオープンできない


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


Name: 夏天 [URL]  ..ぴよぴよ(290ポイント)   Date: 2007/03/05(月) 03:16   No:5198     
Title: Re:コンパイルエラー    
まず最初に
新規作成で
#include <stdio.h>
int main()
{
printf("まっふぉ〜ん\n");
return 0;
}

と打って実行画面がまっふぉ〜んって出てくるのを確認してみてはいかがでしょうか

それでも、表示されない場合は今の情報ではわかりません
ソースを貼り付けてみればなんとなく答えやすいと思います

と初心者の自分が答えてみました


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

Name: めちゃ初心者  ..ぴよぴよ(0ポイント)   Date: 2007/03/05(月) 03:39   No:5199     
Title: Re:コンパイルエラー    
ありがとうございます。
#include<stdio.h>

int main()
{
printf("まっふぉ〜ん\n");
return 0;
}
と打ってもコンパイルできないのです。
ほかに原因は考えられますでしょうか?
ちなみにコンパイルを実行すると
C:\>bcc32
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Syntax is: BCC32 [ options ] file[s] * = default; -x- = turn switch x off
-3 * 80386 Instructions -4 80486 Instructions
-5 Pentium Instructions -6 Pentium Pro Instructions
-Ax Disable extensions -B Compile via assembly
-C Allow nested comments -Dxxx Define macro
-Exxx Alternate Assembler name -Hxxx Use pre-compiled headers
-Ixxx Include files directory -K Default char is unsigned
-Lxxx Libraries directory -M Generate link map
-N Check stack overflow -Ox Optimizations
-P Force C++ compile -R Produce browser info
-RT * Generate RTTI -S Produce assembly output
-Txxx Set assembler option -Uxxx Undefine macro
-Vx Virtual table control -X Suppress autodep. output
-aN Align on N bytes -b * Treat enums as integers
-c Compile only -d Merge duplicate strings
-exxx Executable file name -fxx Floating point options
-gN Stop after N warnings -iN Max. identifier length
-jN Stop after N errors -k * Standard stack frame
-lx Set linker option -nxxx Output file directory
-oxxx Object file name -p Pascal calls
-tWxxx Create Windows app -u * Underscores on externs
-v Source level debugging -wxxx Warning control
-xxxx Exception handling -y Produce line number info
-zxxx Set segment names
と表示されます。
上記の意味は全くわかりません。


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

Name: ぽん太  ..中級者(12,164ポイント)   Date: 2007/03/05(月) 05:45   No:5200     
Title: Re:コンパイルエラー    
あらら720pも落としてしまいましたね^^;
というか0に・・・。

えっと、ちゃんとパス通してますよね?
おかしいですねぇ。


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

Name: GPGA  ..上級者(19,488ポイント)   Date: 2007/03/05(月) 05:51   No:5201     
Title: Re:コンパイルエラー    
おそらく環境設定ファイルが用意されていないのでしょう。
bcc32.exeが入っているフォルダに環境設定ファイルを置く必要があります。
デフォルトのインストールであるなら、おそらく C:\borland\bcc55\Bin に bcc32.exe あると思います。

テキストエディタを開き

-IC:\borland\bcc55\Include
-LC:\borland\bcc55\Lib
 
と記述し、ファイル名を「bcc32.cfg」という名前で保存します。
この、「bcc32.cfg」が環境設定ファイルなので、このファイルを
C:\borland\bcc55\Bin におけば問題なく動作すると思います。


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

Name: GPGA  ..上級者(19,622ポイント)   Date: 2007/03/05(月) 07:01   No:5203     
Title: Re:コンパイルエラー    
> C:\>bcc32
> Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
> Syntax is: BCC32 [ options ] file[s] * = default; -x- = turn switch x off
> -3 * 80386 Instructions -4 80486 Instructions
> -5 Pentium Instructions -6 Pentium Pro Instructions
> 以下略
上記に関しては、bcc32.exeに使用できるオプションとその説明になります。
きちんと説明すると、結構長くなってしまうので内容の説明はしません。
これがわからなくても、短くて半年は普通にプログラムが組めると思うので
特に気にしなくていいでしょう。

どうしても知りたい場合は、BCCのヘルプファイルが C:\borland\bcc55\Help(デフォルト)
にありますので、こちらを参照してください。
bcc32.exeのコンパイラのコマンドラインオプションのところにその説明が載っています。


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

Name: 管理人 [URL]  ..ハッカー(228,914ポイント)   Date: 2007/03/05(月) 09:13   No:5208     
Title: Re:コンパイルエラー    
それは「コンパイラはここにいるよ」と教えてくれるファイルを用意していない時になる症状だと思います。

コンパイラを用意しただけでは直接bcc32とうっても、コンピュータはコンパイラがどこにあるかわからないので、
環境設定が必要です。
GPGAさんのおっしゃる内容をもっと詳しく知りたければこちらのサイトを参考にしてください。

http://homepage3.nifty.com/norinoyama/c_lang/c_lang_setup_bcc.html

また、コンパイラオプションの意味はこの辺に書いてあります。
http://www.geocities.co.jp/bleis_tift/cpp/option.html



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

Name: めちゃ初心者  ..ぴよぴよ(74ポイント)   Date: 2007/03/05(月) 16:54   No:5214 解決!     
Title: Re:コンパイルエラー    
コンパイル出来ました!!
bcc32.cfg ファイルも作成し、
ilink32.cfgファイルも作成していたのですが
保存する時に自動的に拡張子を.txtに読み替えていたみたいです。
大変助かりました。
ありがとうございました。
これで初めての実行結果が 
まっふぉ〜ん
となりました(笑)


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

Name: 管理人 [URL]  ..ハッカー(229,039ポイント)   Date: 2007/03/05(月) 16:57   No:5215     
Title: Re:コンパイルエラー    
おめでとうございます☆
自分のパソコンに実行環境を整えたら、C言語を踏み出す第一歩が確立できましたね♪

Hello World
ならぬ
まっふぉ〜ん
は新たな入門のキーワードですね(笑


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



Name: 夏天 [URL]  ..ぴよぴよ(166ポイント)   Date: 2007/03/05(月) 02:57   No:5197       
Title: テキストにて    
DXライブラリのノベルのテキスト表示をするとき
文字数を多くするとウィンドウからはみ出てしまいます
右端までテキストが行ったら折り返す(メモ帳の書式の右端で折り返すにチェック入れた状態)ように表示させるにはどうしたらよいのでしょうか


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


Name: 管理人 [URL]  ..ハッカー(228,898ポイント)   Date: 2007/03/05(月) 09:05   No:5207     
Title: Re:テキストにて    
ゲームプログラミングの館の「サウンドノベル風文字列表示法2」にまさにその方法を書こうとしていたところだったのですが、
まず、文字列を表示した時のモニタ上の長さを取得する関数があります。

こちらの関数です。
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html#R17N2

この関数を使って表示すべき範囲を超えたと判断したら
折り返しましょう。
もしフォントサイズが変わらないのでしたら、何文字で何ドット分の領域をとるかは
事前にわかるので、何文字になったら折り返すとプログラムを書いてもいいかもしれません。

また、具体的には、表示させるべき文字列を2つにわけて、DrawFormatString関数を2つ使って表示させると簡単です。

表示させたい時にst1,st2にそれぞれ文字列を1文字ずつ入れてやることで、
2行に渡って表示できます。

char st[][256]={

{"今日はDXライブラリの"},
{"勉強をします。"},
{"その中でもサウンドノベル風文字列表示の仕方を"},
{"勉強をしています。"}
};
char st1[256],st2[256];

・ウィンドウに収まるだけst1に文字を1文字ずつコピー
・1行に収まらないならあふれる分だけst2にコピー ・

if(st1[0]!='\0')
DrawFormatString(x,y ,col, "%s" ,st1);
if(st2[0]!='\0')
DrawFormatString(x,y+20,col, "%s" ,st2);


雰囲気としてはこんな感じでしょうか。


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

Name: 夏天 [URL]  ..ぴよぴよ(355ポイント)   Date: 2007/03/05(月) 13:03   No:5212 解決!     
Title: Re:テキストにて    
そういうやり方があったのですか
ためになりました
ありがとうございます。
またわからないところは聞きにくるのでそのときもお願いします


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



Name: 大工  ..中級者(12,279ポイント)   Date: 2007/03/05(月) 01:07   No:5195       
Title: 変数について    
少し気になることがありますので投稿させて下さい。

int a; という感じに定義しますが、状況によってint student; といった感じにする場合があるじゃないですか?(この場合は生徒数についてです)

C++では上記よりもう少しルールのある変数名(doubleだったら d変数名 といった感じでしょうか?詳細はあまり知りませんが)
をつけると聞きました。このルールに乗っ取ればC言語でも見やすいプログラムが書ける気がします
ですのでC++のルール(?)について知っている方は強力して下さい。


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


Name: Yuki  ..上級者(16,444ポイント)   Date: 2007/03/05(月) 07:48   No:5204     
Title: Re:変数について    
今はあまり推奨されていないようですが、ハンガリアン記法というものがあります。


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

Name: 管理人 [URL]  ..ハッカー(228,980ポイント)   Date: 2007/03/05(月) 09:28   No:5209     
Title: Re:変数について    
ハンガリアン記法についてはそのままググれば出てきます。

何故使用が推奨されていないかは

http://www.google.co.jp/search?hl=ja&q=%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%AA%E3%82%A2%E3%83%B3%E8%A8%98%E6%B3%95%E3%80%80%E6%8E%A8%E5%A5%A8&lr=

こんな風にググれば解決するでしょう。

http://tontokaimo-lab.cocolog-nifty.com/strayinglynx/2005/02/post_2.html

後こことか。

変数名は誰かに見せるプログラムだったり、共同制作するシステムだったりしないのなら特に企業にでもはいって何かの規則に従わされるまでは気にしなくてもいいような気がします。
今せっかく慣れても、企業に入ってから使うなと言われてもあれですし。


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

Name: 大工  ..中級者(12,313ポイント)   Date: 2007/03/05(月) 12:49   No:5211     
Title: Re:変数について    
回答ありがとうございます。

今はあまり気にせずプログラムを組んでいこうかと思います。


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



Name: 生まれ変わった初心者  ..ぴよぴよ(695ポイント)   Date: 2007/03/03(土) 02:30   No:5173       
Title: 線形リストの逆表示    
はじめまして。
よろしくお願いします。

線形リストのCプログラムを完成させる問題です。
プログラム実行後、いくつかの数値の入力していき、線形リストを生成し、リスト作成後、入力された数値を逆順に表示するプログラムをつくらなければなりません。

データ15,33,57,88,-1と5つの数値を入力していくとノードの前にノードを追加する形でリストを生成する。

データが終了したら、リストの先頭からノードをたどって、次のノードを示すポインタがNULLになるまで表示する。
先ほど、入力したデータであれば、88,57,33,15と開業して表示する。

ちなみに、虫食いです。
#include<stdio.h>

struct node{
int key;
struct node *next;
}

main()
{
int n;
struct node *st, *p, *q, *malloc();
st = NULL;
[ @ ]
while([ A ])
{
q = [ B ];
q->next = st;
q->key = n;
[ C ];
     [ D ];
}
p = st;
while([ E ]);
{
printf("%d \n",p->key);
[ F ];
}
}

1年前まではc言語習ってたので、出来たんでしょうけど・・・
インターネットで調べてもわかりませんでした・・・
scanfとかも久しぶりに見た気がします・・・。
もちろん、答えを聞くだけでなく、答えを聞いた後は処理の流れを確認し、勉強したいとおもいます。
力を貸してください(・д・;)


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


Name: box  ..熟練のプログラマー(53,569ポイント)   Date: 2007/03/03(土) 06:33   No:5175     
Title: Re:線形リストの逆表示    

> インターネットで調べてもわかりませんでした・・・

1箇所もおわかりになりませんか?

・データの入力(@)
・入力データが所定の条件を満たしている間、繰り返す
   「所定の条件」とは何か?(A)
   何を繰り返すか?
     ノードのための領域の割り当て(B)
     線形リストへの追加(C)
     次のデータの入力(D)
・データの出力
   線形リストの先頭から始めて
   ノードがある間(E)
     そのノードの値を出力
     次のノードへ進む(F)
・おしまい



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

Name: 管理人 [URL]  ..ハッカー(227,214ポイント)   Date: 2007/03/04(日) 00:21   No:5176     
Title: Re:線形リストの逆表示    
boxさんのおっしゃる方法で解決されましたでしょうか?

線形リストについてネットで調べてもわからなかったとおっしゃいましたが

http://www.google.co.jp/search?hl=ja&q=%E7%B7%9A%E5%BD%A2%E3%83%AA%E3%82%B9%E3%83%88&lr=

このように検索するとかなり沢山わかりやすいサイトが出てきますよ。
それでもわからなければ
「C言語 入門」などと検索して入門サイトでわからないところがあれば、戻りながら解説を読んでみるとよりわかりやすいかもしれません。


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



Name: 管理人 [URL]  ..ハッカー(220,840ポイント)   Date: 2007/02/28(水) 22:13   No:5106       
Title: 利用規約について    
違う名前で課題の質問をいくつもする人やマルチポストを行う人がいたり、
課題も丸投げ状態で質問する人などがいます。

他の掲示板から「ここ丸投げでも教えてくれますよ」みたいにここが紹介されているものをみかけますので、
そういう経路をたどってこられた人が丸投げしている可能性が高く仕方ない部分もある気がするんですが。。

そこで、規約をもっとわかりやすく書いたり、項目の変更をしたりしようかと思っています。

皆さんが思う

「こんな規約を増やした方がいい」「こんな項目を追加してほしい」という要望がありましたら是非お聞かせ下さい。

規約もダラダラ長かったらいちいち全部読みたくなくなるでしょうから書き方も改善する必要があるように思います。
現在は「→規約と使い方」というリンクで掲示板上での直接の記述は省略していますが、
最低限の規約はリンク先ではなく、掲示板上に書く必要があるかもしれませんし、
普段見ている人からしたらいつも規約が見えていると使い勝手が悪いかもしれません。

そういう事も含めて色々書き方、項目などについてご意見お寄せくだされば光栄です。


p.s.関係ない話ですが、実は「→規約と使い方」の上に黒い背景に黒い文字で「C言語何でも質問掲示板」って書いてあるんですよね(笑


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


Name: Justy  ..比類無きプログラマー(61,496ポイント)   Date: 2007/03/01(木) 01:21   No:5113     
Title: Re:利用規約について    
 そうですねぇ。

・ 過去ログをチェックする
・ 開発環境と実行環境をバージョンも含めて書く

 基本的にはそれくらいでしょうか。


 理想を言えば
http://www.hyuki.com/writing/techask.html#template

 これくらいの文章で質問してもらえると回答者にとっても
状況を確認するための無駄な対話が減って助かるかと。


 これをどう規約化するか、ってのは難しいところですが・・・。


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

Name: 管理人 [URL]  ..ハッカー(224,021ポイント)   Date: 2007/03/01(木) 13:08   No:5126     
Title: Re:利用規約について    
テンプレートを用意するのはいい考えですね。
参考にしてみます。
ありがとうございました。


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

Name: Hermit  ..ぴよぴよ(817ポイント)   Date: 2007/03/01(木) 21:11   No:5137     
Title: Re:利用規約について    
個人的には、
丸投げOK、マルチポストOK、としておけば、
ほとんど、文句がでることは無いと思いますが。
質問する側は、切羽詰ってるだろうから、そんな事まで気にしないと思いますが。

回答する側に制約をして、のらりくらりとよさげな方向に導いていくのがベストな気がします。


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

Name: バグ  ..プログラマー(28,937ポイント)   Date: 2007/03/01(木) 23:25   No:5138     
Title: Re:利用規約について    
丸投げはまだしも、マルチポストはダメじゃないかと…

回答者側に規制…というと、『答えを教えない』の1つで万事OKな気がしますね(^-^)


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

Name: 管理人 [URL]  ..ハッカー(224,860ポイント)   Date: 2007/03/02(金) 00:37   No:5139     
Title: Re:利用規約について    
>Hermitさん、

そうですよねぇ、課題を聞いてくる人は切羽詰って期限に間に合わそうと急いでいる人が多いでしょうから
なかなかのんびり規約を読んでから投稿はしないでしょうね。
まぁしっかりと規約に項目が書いてあれば、「規約違反ですよ」とはっきり言えそうではありますが。
あんまり常識のない質問者を叩くような事はしたくないので、自然によい方向に導きたいものです。
私のような者が一人こんな考えを持っても仕方ないと思いますが、
ちょっと外れた質問者をキツイ物言いで叩けば、誤解して質問者が回答者の立場になった時、同じ事を繰り返すでしょうから・・。
悪循環ですね。
誠実に事を伝えればその人も回答者となったとき質問者に誠実に伝える事をしてくれるかもしれません。
さり気なく伝えていくと言うご意見参考に致します。

>バグさん、

マルチポストはちょっと回答する気も減ってしまいますよね;
しかもマルチポストの人はたいていたいした返事も無しに答えだけ聞いて(読んでないかも)放置が多いですし。。
質問者の立場として、沢山の場所で聞けば誰かいい意見を言ってくれるとか、誰か早く答えてくれるとかいう期待を持つのでしょうね。
回答者が、そうして規約を質問者に守ってもらうようにしてもらうのも手ですね><


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

Name: むつ  ..入門者(2,960ポイント)   Date: 2007/03/02(金) 08:24   No:5141     
Title: Re:利用規約について    
>なかなかのんびり規約を読んでから投稿はしないでしょうね。
 異論はあるでしょうが、ユーザ登録制以外に効果的な方法は思い付きません。

 利用規約に同意し、使用環境や関心事を入力した上で投稿できるようにすれば、
いくら急いでいても規約を知らないという事は無いのでは?

 そしてユーザページを設け、ソース公開等出来る様にもなれば、
「質問」だけでなく「ディスカッション」の場ともなりうるのではないでしょうか。
これで管理人さんの負担も軽減・・!?

 もしユーザ登録制を検討されるようでしたら、何らかの形でお手伝い出来ればと思います。


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

Name: Yuki  ..上級者(16,422ポイント)   Date: 2007/03/02(金) 09:38   No:5142     
Title: Re:利用規約について    
ちょっと文章にまとめる時間が無いので、箇条書きで失礼します。

○管理者さんのスタンスを見る限り、「初心者にやさしい掲示板」を
目指していると思いますので、そのためには回答者の方々に
一歩譲った態度でお願いしたらいがかでしょうか。

○質問者に規約を作るよりも、回答者に規約を作る。
例)
・丸投げの質問を見たら、どこがわからないのかを聞く。
・マルチポストを見かけたら、(あらかじめマルチポストの説明のページを
用意しておき)これを参照するように言う。
http://www.ippo.ne.jp/g/53.html
こちらでも良いかもしれません。

○さまざまな掲示板を見ていて思ったのですが、
「ヒトコト注意だけの回答は禁止。」
という規約はいかがでしょう。
#環境等は聞かないとわからないので、対象外。

○「丸投げ禁止」とか「マルチポスト (URL)」だけのようなレスを
よく見かけたりしますが、それらをしている質問者本人は何のことだか
わからずに、そのままだったりするのではないでしょうか。
#「丸投げ」はわかるとは思いますが。

管理人さんの、どんな質問にも丁寧にお答えしている姿勢を見ると頭がさがります。
何でも相談できる、居心地の良い掲示板作りのお手伝いができれば光栄です。




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

Name: 管理人 [URL]  ..ハッカー(225,994ポイント)   Date: 2007/03/02(金) 14:50   No:5144     
Title: Re:利用規約について    
>むつさん、

>そしてユーザページを設け、ソース公開等出来る様にもなれば、 「質問」だけでなく「ディスカッション」の場ともなりうるのではないでしょうか。

なるほど、一種のコミュニティサイトのようにするという事ですね?
面白そうですね、しかし私にはcgiの知識が無いもので検討が付きません><;
登録制はいいですね、登録するとなると、初めて訪れた人が投稿する確率が減るでしょうから
1度トピを作るのは登録無しでもOK,2回目以降にトピを作る時は登録が必要・・・
なんてすればいいかもしれませんね。
(なんか、最初は無料、次から金いる怪しい業者のよう・・w)
しかし日を改めて訪れたIPアドレスの変わってしまった人が同じ人物だと判定できるんでしょうか(?_?
リモートホストである程度絞れると思いますが、そういうのって完全に判断できるものなんですかね?


>Yukiさん、

そうですね、初めて来た質問者のことばかり考えずに、回答してくださる方は常連様が多いと思うので、回答者さまにお願いするという方法も有効ですね。

>「ヒトコト注意だけの回答は禁止。」という規約はいかがでしょう。

おぉ、それ頂きます。そうなんですよねぇ〜、そういう投稿って感じ悪いですし、
荒れてしまう元になるんですよね。。
この掲示板もなるべく事が荒立たないようにしているのですが、
過去に一度だけ、質問者さんと回答者さんであれにあれてしまったことがあるんです。
何故か私に矛先が向けられ直メールで「民事訴訟起こします」とかそういう類のメールが何通も寄せられ・・( ̄  ̄;)
あんな掲示板での言い争いを見るのはホントいやですねぇ〜><;
荒れる元は「ヒトコト注意」って事は確かに感じます。
しかし、注意すべき点をどこまで注意したらいいか、注意することが規約違反なのか、よくわからなくなってしまうと投稿文書がなかなか思うように書けなくなってしまう可能性もあり、なかなか難しいですね(_ _||)

規約違反をしている投稿者を見かけたら「こちらの規約内容を見て、改めて投稿してください」のように、参照リンク先を用意しておくのがいいかもしれませんね。

マルチポストに関して確かにちょっと前までその単語は私自身しりませんでした。
それに、「何でわるいんだ?」と思う人もいるでしょうから紹介されたリンク先のような内容で説明するのもいいですね。

>管理人さんの、どんな質問にも丁寧にお答えしている姿勢を・・・

自分が前までとんでもなく怠け者だったので、質問者の立場がよくわかります^^;
プログラムの知識をある程度つけて、「調べたらわかる」という事が常識になり、
調べ方も熟知した状態になると、
初心者の時のあのプログラムに躓いた時どうしようもなく混乱してしまうあの苦労した思いを忘れてしまうと思うんですよね。
調べて解った経験が沢山あるから、「よし調べよう」という気になりますが、
解らない事だらけの人間で、わかった経験がほとんどない人は「どうせ調べてもわからない・・」と
成ってしまうと思います。
「ちょっとつまずいただけでわけわかんなくなる」「調べようにも調べ方がわからない」「どうしようもない・・」と私はよく苦労していました^^;
大学に入ってからパソコンを始めて触った私にとって、大学1年の時は、すぐ調べたらわかるであろう内容も調べ方が解らず、
調べたら解るような内容を質問して、エライ酷い事非難されたことがあります。。
プログラムを勉強してもそれこそ「どうせ調べてもわからない・・」状態でした^^;
しかし、そんな私でもプログラムに魅力を持つ事が出来ました。
好きになれば、意欲的にドンドン調べるはずですし、どうしようもない質問者を見かけると「こんな奴、勉強しても先がしれてるな・・」と思わず、自然にイイ方向に導きたいものです><

とりあえず質問者は「どうせ調べてもわからない・・」「どうせ考えても課題は解けない・・」と思って質問してくる人が多いです。
しかし、プログラムってご存知の通り、難しい課題でも最初からわかるとこから順々にやっていけば、全然難しい事じゃないですよね。
アドバイスから「なんだ!自分でも出来る、わかるじゃん!」って気持ちを掴んでもらえたらその人は次の課題から取り組み方がかなり変わると思います。
そういう風に導いてあげたいですね><


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

Name: 管理人 [URL]  ..ハッカー(226,082ポイント)   Date: 2007/03/02(金) 14:56   No:5145     
Title: Re:利用規約について    
しかし、学期末はエライ質問が多く、1ページ20個位「New!」のマークが付いていましたが、
春休みに入ってずいぶん質問が減りましたねw

学校の課題を学期末にせっぱつまってやってる人が多いということですかね^^;


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

Name: keichan  ..上級者(16,215ポイント)   Date: 2007/03/02(金) 17:56   No:5146     
Title: Re:利用規約について    
なるほど。世間は春休みなんですか。
ここ数日活気が収まったのはそのせいだったんですね。

>「ヒトコト注意だけの回答は禁止。」
これは結構私やってそうな感じがしますので次回以降気を付けます。


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

Name: 管理人 [URL]  ..ハッカー(226,224ポイント)   Date: 2007/03/02(金) 21:05   No:5147     
Title: Re:利用規約について    
大学生は暢気ですから、一生懸命働いていらっしゃる方には何か申し訳ないですね^^;

>これは結構私やってそうな感じがしますので次回以降気を付けます。

とりあえず、あまり意識しすぎても、自由な投稿が出来なくなると思いますから、
そんなに気を使わないで自分の思うように投稿・回答お願いします。

あまり窮屈な掲示板にもしたくないですしね。
keichanさんをはじめ、現在回答してくださっている方々は皆誠意的な回答をしてくださっていますし、
現在いらっしゃる回答者様は今のスタンスで大丈夫ですので。

これからも末永くよろしくお願いします(_ _)


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

Name: Hermit  ..かけだし(1,182ポイント)   Date: 2007/03/02(金) 21:38   No:5148     
Title: Re:利用規約について    
>マルチポストに関して確かにちょっと前までその単語は私自身しりませんでした。
20年位前から有りますが・・・昔は、同じ書き込みを何度も読み込んだら、
電話代と課金が上がるというのが最初の頃の理由だったんですけどね・・・
または、あちこちで同じ質問を見るのが鬱陶しいって。

>それに、「何でわるいんだ?」と思う人もいるでしょうから紹介されたリンク先のような内容で説明するのもいいですね。
一般の会社であれば、多くの意見を聞いて完全を期す事や、早く回答を得る努力は普通なんですけどね・・・
相手が人間だと・・・


マルチポストと、丸投げを、禁止項目にするのは止めておいたほうがいいと思います。
それがあると、鬼の首取った様に質問者を責める人が必ず出て来てきていたので。
>掲示板の向こうに居るのは人間です。自分が同じようにされたらどう思うか、想像力を働かせましょう。
掲示板の向こうに居る質問者も人間です。自分が同じようにされたらどう思うか、想像力を働かせましょう。
何度、そういう質問者が掲示板荒らしに走ったか見ていると・・・やはりね・・・


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

Name: 管理人 [URL]  ..ハッカー(226,351ポイント)   Date: 2007/03/02(金) 22:11   No:5150     
Title: Re:利用規約について    
>20年位前から有りますが・・・

そうなんですか^^;
私が赤ちゃんの頃ですね・・。
そんな頃我が家にはパソコンのパの字も無かった事でしょう^^;

>マルチポストと、丸投げを、禁止項目にするのは止めておいたほうがいいと思います。

そうですかぁ、確かに、禁止行為をしているぞって事になったら激しく責め込む方もいらっしゃるかもしれませんね。
現在の回答者さん達のように、これからの回答者さんも皆良識ある方ばかりだといいのですが・・。
しかし規約にないとずっと回答者さんが毎回変わる新しく質問してくる質問者に同じ忠告を何度も何度もしなければならなくなるという問題もあり、、、
色々考え物ですね><;


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

Name: Hermit  ..かけだし(1,204ポイント)   Date: 2007/03/02(金) 22:25   No:5152     
Title: Re:利用規約について    
やってみて、変になればまた変えるってのも手かも(^^;

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

Name: 管理人 [URL]  ..ハッカー(226,598ポイント)   Date: 2007/03/02(金) 22:30   No:5154     
Title: Re:利用規約について    
そうですね〜、あれこれ要求して窮屈な掲示板にもしたくないですし、とりあえず現在質問はかなり少ないんで、様子みて少しずつかえていってもいいですね><

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



Name: 管理人 [URL]  ..ハッカー(224,440ポイント)   Date: 2007/03/01(木) 13:17   No:5127       
Title: ゲームプログラミングの館    
ゲームプログラミングの館を新しくしました。

35節までしかありませんでしたが、他にも色々増やしました。
文型のための物理の解説も新設しました。


http://dixq.net/g/


ちょっと1ページに書く内容としては長すぎるかな?とも思いますが、
DXライブラリのリファレンスマニュアルのように
メニューが同じページで解説も同じページにあるほうが全体的に読みやすいかと思ったので、こうしました。
低スペックのPCだとつらいかもしれませんね。

分けた方がいいんでしょうか・・。

以下私から質問なのですが、

動画で解説したいところをデスクトップ動画キャプチャーなどで実行ファイルの実行状態を撮影したいのですが
なかなかいいソフトが見つかりません。

全てbmpでいったん保存してaviにするソフトは容量がとんでもない重さになってしまうので、MPEGに変換するにしても膨大な時間がかかってしまいます。
色々試しましたが
撮影スピードにむらがあってカクカクしてしまうソフトや、
設定をどんなにあげても1秒で3フレーム位しか撮影できないソフトなど、
どのソフトもスムーズに撮影できません。
800x600ピクセルで10fps以上で撮影することは無理なんでしょうか?

OS:XP pro の CPUはCore2Duo E6700です。

どなたかデスクトップの実行状態を撮影するソフトでいいソフトご存知でしたら教えてください。

最悪モニタをビデオカメラで撮影しようかとか考えていますが、それはちょっとダサイんで^^;


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


Name: 管理人 [URL]  ..ハッカー(224,391ポイント)   Date: 2007/03/01(木) 15:22   No:5129     
Title: Re:ゲームプログラミングの館    
10種類位のソフトを試してみて15fps位でまでは撮影できたんですが、やはりそれでもぎこちないですね〜><
モニタのリフレッシュレートと同じ速さでキャプチャーするなんて無理なのかな・・。


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

Name: Justy  ..比類無きプログラマー(61,961ポイント)   Date: 2007/03/01(木) 16:13   No:5130     
Title: Re:ゲームプログラミングの館    
>10種類位のソフトを試してみて15fps位でまでは撮影できたんですが
 2つ考えられます。

・ 無圧縮AVIの再生が追いつかない。
 キャプチャした動画が AVIの場合、無圧縮である可能性が高いです。
 だとすると、VGAサイズ以上で 30fps以上の動画だと
再エンコードして圧縮しないと、まともに再生するのは
難しいと思います。

・ 非無圧縮AVIでキャプチャ
 エンコードしながらキャプチャした為、フレームレートがおいついていない
可能性があります。



 このソフトは試しました?
DxRec
http://www.hdbench.net/software/dxrec/index.html



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

Name: 管理人 [URL]  ..ハッカー(224,451ポイント)   Date: 2007/03/01(木) 16:45   No:5131     
Title: Re:ゲームプログラミングの館    
おぉ!すごい!これはすごい♪
何でいつもJustyさんのように探し物が探せないんでしょうね〜私は><;

もうライセンスキー取得する勢いで気に入りましたw
ありがとうございます〜^^


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

Name: 管理人 [URL]  ..ハッカー(224,507ポイント)   Date: 2007/03/01(木) 17:15   No:5132     
Title: Re:ゲームプログラミングの館    
このソフト画質 高 設定だと5、6秒以上取ると生成されたファイルが再生できません(T_T
中にしても、容量が100メガ位超えるとファイルが再生出来ません・・。
何故なのでしょう(T_T


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

Name: 管理人 [URL]  ..ハッカー(224,545ポイント)   Date: 2007/03/01(木) 17:37   No:5133     
Title: Re:ゲームプログラミングの館    
再生中もエラーによくなるし、エンコードもエラーになる・・。
生成しているファイルに問題があるんでしょうかね(T_T


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

Name: Justy  ..比類無きプログラマー(61,891ポイント)   Date: 2007/03/01(木) 18:49   No:5135     
Title: Re:ゲームプログラミングの館    
 再生できないと言うのはどういう状態でしょうか。
 今のところうちでは高でも、ファイルサイズが巨大でも問題はないようです。

 DxRecを終了した状態でムービーを編集していますか?
 それとも起動したままですか?
 もし起動したままでしたら、終了した状態ではどうでしょうか。


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

Name: 管理人  ..ハッカー(224,578ポイント)   Date: 2007/03/01(木) 20:39   No:5136     
Title: Re:ゲームプログラミングの館    
あれ、そうなんですか。
じゃソフトに問題があるわけじゃ無いんですね。
明日違うパソコンでも試してみます(>_<)


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

Name: 黒猫  ..ぴよぴよ(480ポイント)   Date: 2007/03/02(金) 06:54   No:5140     
Title: Re:ゲームプログラミングの館    
「物理入門」拝見しました。

管理人さんのわかりやすい説明、感謝です感謝です!!

私は今海外に住んでいて日本の本がすぐに手に入らないので、

とりあえず今はネットで勉強してます。

「物理入門」、更新楽しみにしてますのでがんばってください!!







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

Name: 管理人 [URL]  ..ハッカー(224,944ポイント)   Date: 2007/03/02(金) 14:18   No:5143     
Title: Re:ゲームプログラミングの館    
うはぁ、、徹夜で作ったから「速さ」と言ったり「早さ」といったりしている><;
誤字修正しておきます(_ _||)

黒猫さん、海外にお住みなんですかぁ、すごいですね〜、う〜、私も英語圏にいって英語の勉強がしたい><


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



Name: りむ  ..中級者(12,477ポイント)   Date: 2007/02/28(水) 17:22   No:5084       
Title: 関数化と変数の有効範囲    
こんばんは。りむです。
着々と進んでいます。アクションの部分は、坂・ジャンプで登る時に下からすり抜ける足場…等、地形関係の部分は、まだ手をつけていませんが。。。

→or←…左右移動(二度押しでダッシュ)
↑…ジャンプ(ジャンプ量は調節可)
Z…防御
Z&(向いてる方向のキー)…プッシュガード(敵を押せる)
Z&(背中の方向のキー)…バックステップ(素早く後ろへ小さくジャンプ)
Z&↓…エフェクトつき防御(中身はまだ無し)

C…中段攻撃
C&↓…下段攻撃
C&←or→…上段攻撃
(ジャンプ中に)C…空中攻撃

こんなかんじになっています。細かい仕様をあげて言ったらきりがありませんけれど…。

まあ、こんなかんじで、次は敵を出現させる段階まできました。
現段階では、自由に移動するのみでAIも全くない状態ですが、
プレイヤーが重なろうとすると重なり防止のため押し戻されたりそれ以上進めなくなったりと存在感を出してあったり、
攻撃するとちゃんと当たったらダメージ受けて、仰け反ります。(HP設定とかはまだですが)
とりあえず、「敵がいる」状態にまではしました。

ここからが問題なのです。
敵というのは、同じマップに敵が何匹もいたり、同じ敵が2匹3匹といる場合が多いです。
その場合に、逐一敵の処理や情報を書いていたのではソースが超大ボリュームになるだけでなく、
把握も大変な上に同じ敵を出すとなるとまた同じソースをコピー添付しないといけなくなってしまいます。

なので、大した考えもなしにですが、
まず敵の情報に関するものをほとんど集めて構造体として、さらにその構造体を配列で定義してみました。

typedef struct enemy_data{
int enemy_id;
double x;
int y;
double vx;
double vy;
int muki;
int enemy_hp;
....
}enemy_data;

enemy_data en[100];


のような感じです。
各要素を使う時はen[0].vx*=0.9;のようにして、敵100体までを配列で扱えるようにしてみたのですが、
この場合もやはり全ての敵に関して処理をコピーあるいは作成していく必要があり、
さらにその時に同じ種類の出現位置以外は全くデータが同じの敵を作る場合に、
ソースが重複する部分が大量に出てきてしまい、とても勿体無くなってしまいます。

最低、敵の種類分だけのソースは用意して、同じ種類の敵が複数出た場合は、同じ処理を再利用できるようにしたいのですが…
こんな場合、どうしたらうまく処理することが出来るでしょうか…?


また、私の場合ほとんど自作関数を作ることをしない性質でして、
WinMain関数の中に処理をずらずらずらずらと書き記していってます。
今のところ、使っているのはマップとの衝突判定、敵[0]のマップとの衝突判定、プレイヤーの攻撃と敵との当たり判定(バウンディングボックスとか言うもの)をするものぐらいです。

自作関数での変数や処理の扱いがよくわからないせいですが…。
・自作関数では引数に指定した変数しか、WinMain関数の中の変数は扱えない?
・自作関数で行った処理で、どこまでが反映されるのかわからない。
 (自作関数で他の関数を呼び出したり、画面表示等の処理をさせたり…の実行可能範囲がわからない)
・自作関数で得た結果をWinMain関数に反映したい時、複数の結果を戻したい
・そもそもどれぐらいの処理を関数にすると良いのか

…など、今までプログラミングで習ってはいても、いまいち手がおぼつかないといいますか、手が出ないと言いますか…どうしても積極的に使おう、と思うことが出来ません。ちなみに、今は

変数宣言→マップ・画像や音楽のメモリ読み込み→(ここからループ開始)→プレイヤー移動処理→着地や慣性等の処理→防御関係の処理→攻撃関係の処理→ジャンプの処理→敵の処理(移動処理からダメージ処理まで多数)→画像の表示等→(デバッグ用の変数表示処理)→(ループ最初へ戻る)

のような一連の流れになっています。コメントアウトやデバッグ用数値表示機能を入れると、今では1800行ぐらいです。インテンドや改行は教科書みたいに整えてあります。
…なので、と言うか…、自作関数に関して説明していただけるか、もしくはわかりやすい解説ページなどの紹介をお願いしたいのです。
よろしくおねがいします><


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


Name: バグ  ..プログラマー(28,887ポイント)   Date: 2007/02/28(水) 17:23   No:5085     
Title: 無題    
同じ処理を繰り返すならば、関数化すべきです。
C++ならば、敵に関する情報全てをクラス化してしまうのもいいかと思いますよ。
構造体を引数で関数に渡す事は可能です。また、関数内でその構造体の中身を書き替えたい場合にはポインタを利用する事で可能になります。
今回の場合でしたら、メンバ変数に1つ変数(仮にMove_Eとします)を追加してもらって、敵の動きの種類を決定するルーチンのところで…

switch( Move_E )
{
case 1:
MoveEnemy1();
break;
case 2:
MoveEnemy2();
break;
}

みたいな感じにしてはいかがでしょうか?


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

Name: 管理人 [URL]  ..ハッカー(219,145ポイント)   Date: 2007/02/28(水) 17:24   No:5086     
Title: Re:無題    
私が初めてゲームを作ったときも、どこまで関数化すればよいのかわからず、またダラダラと直線型プログラムを書いていました。
一直線な処理しかしないプログラムなので、一度に敵はいったいしか動きません。
関数化していないので、同じような処理でもまた新たにコピーしてソースをかかなければならないので、
ダラダラながくなりコードは1万行以上になりました。

何度か苦労しているうちに、もっとスマートにかけないのか?もっと処理に汎用性を持たせられないのか?
などと考えるようになりました。

いきついた答えは「とにかく細かく関数化した方がいい」ということです。
プログラミング手法にとにかく細かく関数化するという手法がありますが、たった1行しかない処理でも関数化したりします。
現に私も2〜3行しかないものでも関数化したりします。
何でも関数化することで、汎用性が広がるんですよね。

例えば


void 入力を受け付ける関数(){


}

void 自分の動きを制御する関数(){


}

void 敵1の動きを制御をする関数(){


}

void 敵2の動きを制御する関数(){


}

void 描画する関数(){


}


WinMain(){

while(1){
入力を受け付ける関数();
自分の動きを制御する関数();
敵1の動きを制御する関数();
敵2の動きを制御する関数();
描画する関数();
}

}



このように書いてみましょう。全てWinMainにダラダラかくより、WinMainを見ただけで、
どのような処理が行われているか把握しやすいですね。

自分の動きを制御する関数();
敵1の動きを制御する関数();
敵2の動きを制御する関数();

という似たような関数が3つありますね。
敵が1種類、2種類のうちはいいですが、30種類も40種類もあれば、このようにかけなくなってきます。
そんな時、関数ポインタを用いればとてもスムーズにかけます。
関数を呼び出すための配列を用意して、

[0]に自分の動きを制御する関数のポインタ
[1]に敵1の動きを制御する関数のポインタ
[2]に敵2の動きを制御する関数のポインタ

を持たせれば、これら全てを実行するときにfor文でたった1行で実行できますね。

関数ポインタについても、ゲームプログラミングの館で解説していますから、
参考にしてください。

http://dixq.net/g/index2.html#1

では、実際にコードを次に書いてみます。




・・・自作関数をあまり使用しないなら、
関数間の値受け渡しや、アドレス渡しをしても、意味がよくわかりませんか?

それならそちらからまず説明したほうがいいかと思いまして


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

Name: 管理人 [URL]  ..ハッカー(220,967ポイント)   Date: 2007/02/28(水) 17:24   No:5087     
Title: Re:無題    
****自作関数について****

まず、@とAは同じ処理結果を示します。


@

#include <stdio.h>

int main(){
int a;
a=10;
printf("%d",a);
return 0;
}



A

#include <stdio.h>

void graph(int a){
printf("%d",a);
return ;
}

int main(){
int a;
a=10;
graph(a);
return 0;
}


main内でaを引数に持たせて処理をgraph関数に渡します。
graph関数では、渡されたaを自分の関数内で宣言したint aにコピーします。
そして、表示して処理をmainに返しています。


B

#include <stdio.h>

void graph(int a){
printf("%d",a);
a=20;
return ;
}

int main(){
int a;
a=10;
graph(a);
printf("%d",a);
return 0;
}

実行結果
10


graph関数内でaの値を変更しても、main関数内でのaは変化しません。
何故ならgraph関数へコピーしたaはコピーしたものであって、それそのものではありませn。
コピー先のデータをいくらいじっても、コピー元のデータは変化しないのです。
その証拠に、graph関数内のaとmain関数内のaではアドレスが違いいます。


C

#include <stdio.h>

void graph(int b){
printf("%d",b);
return ;
}

int main(){
int a;
a=10;
graph(a);
return 0;
}

実行結果
10


引数にする変数名と受け取る変数名は異なっていてもかまいません。
何故ならgraph関数で受け取るbはコピー先のデータであって、それそのものではないから
コピー先のデータ変数名はなんでもいいのです。



D

#include <stdio.h>

int graph(){
return 20;
}

int main(){
int a;
a=10;
a=graph();
printf("%d",a);
return 0;

}

実行結果
20



関数はreturn の値によって値を返すことが出来ます。
graph関数の最後にreturnした値は、main関数内で受け取ることが出来ます。

関数が値を返さない場合はvoid型、returnも値を書きません。
void graph(){

return ;
}


関数が値を返す場合は、その返す値の型を関数名の前に書き、returnに返す値を書きます。

int graph(){

return 10;
}


double graph(){

return 10.0;
}


では、次に、以前graph関数内でのbはコピー先のデータであって、本体ではないから変更しても
本体に影響しないといいました。
変数に変化をもたらしたいときは、以下のようにします。


E

#include <stdio.h>

void graph(int *b){
printf("%d\n",*b);
*b=20;
return ;
}

int main(){
int a;
a=10;
graph(&a);
printf("%d\n",a);
return 0;
}

実行結果
10
20



graph関数内のbとmain関数内のaではアドレスが違うから値を変化させても、影響しないといいました。
それならアドレスを同じにして、示している先のデータの格納場所を同じにしてやれば、
値を変更して影響させることが出来ます。

では、アドレスを渡してみましょう。
graph(&a);

このように書けばaのアドレスが渡せますね。
void graph(int *b){
このように渡されたアドレスはポインタで受け取ります。
ポインタで受け取った*bはa本体と同じデータ先を示します。
ですから
*b=20;
などとしれやればaの値も変わります。


F

#include <stdio.h>

void graph(int b[ ]){
printf("%d %d\n",b[0],b[1]);
b[1]=30;
return ;
}

int main(){
int a[2];
a[0]=10; a[1]=20;
graph(a);
printf("%d %d\n",a[0],a[1]);
return 0;
}

実行結果
10 20
10 30


配列を渡してやるときは、&や*をつけなくてもいいです。
何故なら、a[]はaと書くとそれ自体がアドレスを示すためです。
配列を使う場合は普段と変わりなく使用するだけで、値は変更できます。

これは構造体であっても、利用できます。


G

#include <stdio.h>

typedef struct{
int x,y;
}enemy_t;

void graph(enemy_t enemy){
enemy.x=200;
enemy.y=150;
return ;
}

int main(){
enemy_t enemy;
enemy.x=100;
enemy.y=50;
graph(enemy);
printf("%d %d\n",enemy.x,enemy.y);
return 0;
}

実行結果
100 50



以前と同じように、コピー先で値を変更しても、main内で変数の中身は変わりません。
また、enemy_t型の型はmain内で宣言してはいけません、両方の関数がこの型の種類を知っている必要があるので、
#include
の直下に書きましょう。


H

#include <stdio.h>

typedef struct{
int x,y;
}enemy_t;

void graph(enemy_t *enemy){
enemy->x=200;
enemy->y=150;
return ;
}

int main(){
enemy_t enemy;
enemy.x=100;
enemy.y=50;
graph(&enemy);
printf("%d %d\n",enemy.x,enemy.y);
return 0;
}

実行結果
200 150


構造体のコピー先では、アロー演算子「->」を使って参照します。
以前と同様にコピー先とコピー元の示しているアドレスを同じにしたので変更が可能になりました。


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

Name: 管理人 [URL]  ..ハッカー(221,182ポイント)   Date: 2007/02/28(水) 17:24   No:5088     
Title: Re:無題    
****変数の有効範囲について****

変数の有効範囲についてですが、基本的に「括弧から括弧まで」です。
基本的にプログラムは全て括弧で始まり括弧で終わります。

特に意味のない括弧を途中で書いてもかまいません。
括弧は好きなところにかけます。


#include <stdio.h>

int a; a
a
void graph(int b){ ab
b=1; ab
{ ab
int c; abc
c=10; abc
abc
} abc
ab
b=2; ab
return ; ab
} a
a
int main(){ a
int d; a d
d=1; a d
graph(d); a d
return 0; a d
} a



変数の有効範囲はプログラムの右部分に書いておきました。

aのように全ての領域で使える変数をグローバル変数
b,c,dのように一部の関数内でしか使用できない変数をローカル変数といいます。


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

Name: 管理人 [URL]  ..ハッカー(218,650ポイント)   Date: 2007/02/28(水) 17:48   No:5091     
Title: Re:無題    
え〜とどうしましょう。
よりよいゲームプログラムの書き方・・という事でアドバイスをお書きしていたつもりだったんですが、
自作関数の説明と、変数の有効範囲の説明だけでこんなに長くなってしまいました^^;

あまり長くなると読むほうも億劫になるでしょうから、とりあえず、この辺でやめておきますね。
後他に聞きたいことがあればお聞きください☆

なお、「説明してくれ」という質問だと、回答に限界がありますので、
一応googleなどで検索し、解説サイトを読んで学んでくださいね。
これだけ詳しく書いても、まだ全部解説できたわけではありません。
関数に関しては色んな性質がありますから、その全てについてここでタイピングした文字によって解説する事は出来ません。
googleは賢いもので、人気のあるサイト、みんながわかりやすくてイイと思っているサイト順に表示されます。
ですから、たいていgoogleで検索すればわかりやすいサイトが上の方に出てきます。
上から20件〜30件も調べてばだいたい把握できるでしょう。

わからない関数名があれば、その関数名を、
自作関数について解らなければ「C言語 入門」とでも
関数の値受け渡しについてわからないければ「関数の値受け渡し」とでも
検索すれば出てきます。

「どのようなキーワードで入力すれば自分の思うサイトが見つけられるか」

を検索していくうちに身に付けるのもプログラミングのスキルの一つだと思うので、色々頑張ってください☆


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

Name: Justy  ..比類無きプログラマー(61,772ポイント)   Date: 2007/03/01(木) 01:32   No:5114     
Title: Re:無題    
WinMain関数の中に処理をずらずらずらずらと書き記していってます それは・・・マズイですね。
 1関数が 1800行にもなると、そろそろ変数が大量になってたり、
同じような処理が複数あって管理しきれなくなったりして
破綻の兆しがあちこちに見えかけているかと思います。

 まずはゲーム制作の手を止めてでも、関数を使った小さなテストプログラムを
いくつか書いて動作をテストしながら関数についてしっかり学ぶことをお勧めします。

 
そもそもどれぐらいの処理を関数にすると良いのか
 http://www.play21.jp/board/formz.cgi?action=res&resno=3767&page=&lognum=12&id=dixq&rln=3784


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

Name: りむ  ..中級者(11,417ポイント)   Date: 2007/03/01(木) 06:20   No:5117     
Title: Re:無題    
出かけていて返事が遅くなりました><;
回答ありがとうございます。

>管理人さん
E以外は、全て調べて理解はしていたのですが、Eは今回説明していただいたことで理解できました^^
変数の有効範囲も、今まで多少あいまいだったのが、きちんと理解できました。ご丁寧にありがとうございます。

ですが、説明の内容は、知りたい内容ぜんぶってわけではなかったみたいで…
私の説明がわかりにくかったですかね…。
私が一番知りたかったのは、
自作関数内でDXライブラリのリファレンスに載っている関数や、元からあるprintfやfopen等の処理を実行した際に、その関数の影響が自作関数の外…メイン関数やそれ以外の関数にも適用されるのか…みたいな感じです。
例として、メインで自作関数を呼んで、その中でグラフィックをメモリに読んでそのハンドルを指定したら、メイン関数でもそれが使えるようになるのかどうか…
もしくは、画像の表示という処理が自作関数で行われた場合、それがメイン関数に戻っても表示されたままなのかどうなのか… 
…のような感じみたいなものです。(なんだか自分でもよくわかんなくなってきましたが…)
…つまり、関数化する際にマズイ処理があるとイヤだなと思っての質問です><;
(それゆえに私は関数を作りたがらないようで…)
まあ、変数の有効範囲の説明のおかげで半分近くはどうなるかわかりましたが^^;

まあ、それも確かに、Justyさんが言われた、
>数を使った小さなテストプログラムをいくつか書いて動作をテストしながら
のように、使う際に一回一回調べていけばいいのですけどね…><;


>一応googleなどで検索し、解説サイトを読んで学んでくださいね。
…すみません。ですが、実は私、わからないことがあったら、仰るとおりすぐにGoogle先生のお世話になっているのです。
もちろん今回の質問も調べに調べてみたのですが、
苦しんで覚えるC言語と言うサイト等を見つけては読んでいきましたが、必要な情報、説明が無い、と言う状態になったのです。(理解不足もあるかもしれませんが…)
こちらの掲示板で質問させていただく場合は、必ずそういった自力では理解や解決できない、と言う時に、最終手段…と言ったら大げさですが、そのように思った時に、させていただいてます。
その説明を最初にしておくべきでしたね。すみませんでした。


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

Name: むつ  ..入門者(3,126ポイント)   Date: 2007/03/01(木) 07:30   No:5118     
Title: Re:無題    
 スコープ(有効範囲)は理解しているけど、
どのようにメモリ上に展開されているか視覚的に分からないと不安という事でしょうか。
 デバッガを利用してみてはいかがでしょうか。

参考:http://altair.toc.cs.hiroshima-cu.ac.jp/~ryo-f/lecture/progex3/


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

Name: 管理人 [URL]  ..ハッカー(222,242ポイント)   Date: 2007/03/01(木) 10:36   No:5119     
Title: Re:無題    
なんとなくおっしゃっている意味がわかりました。

では、「これなら大丈夫かな?」「これなら影響を及ぼすのかな?」など様々な思いつくパターンを全て実行してみたらすっきりするんじゃないかと思います。

私は何が疑問があったら全てのパターンについて実行してみないと気がスミマセン。
ですので普段作っているプロジェクト以外に「テスト」という名の上記のような実行をするためだけのプロジェクトも作っています。

例えば上で説明した関数間の値受け渡しだとすると、

・変数単体ではどうなるのか
・配列ではどうなるのか
・配列要素だけではどうなるのか
・構造体ではどうなるのか
・構造体の一部だとどうなるのか

など、1通りだけわかったのでは理解出来ないような事がありますね。
そういう事は考えられる全てのパターンについてソースを書き、実行します。

プログラムは自分であれこれやって実際に見て身に付けるものですから、これが一番早いです。
分割コンパイルに関しても、私は当初分割コンパイルの方法を知りませんで、ネットで探しても特に丁寧に説明してあるところが見つからなかったので色々試しまくりました。
externという書き方を知らなかったのでとても苦労しましたが、自分で見つけた方法はやはり定着が早いです。
人に聞いた方法だとすぐ忘れます。

テストプロジェクトは「解らない事が特に無い」時にも良く使います。
例えば画像を回転描画させる時、500個位のグラデーションをある時間である円周率の変化をさせながら自分の思う通りに画像が演出できるか試したとします。
実行結果も自分の思うとおりになったとします。
しかし500個もの画像を表示していますから円周率の変化率を変えたり変化速度を変更したりすると
違った演出が発見できるかもしれません。
そんな時は、特に解らない事があるわけでなくとも、円周率の変化率を変えたり、変化速度を変更したりあらゆるパターンについていじくり倒します。
そこで新たな発見があるかもしれませんからね。

やはりここで、人に言われて作った演出方法より自分で考え出した演出方法の方がよく覚えていますし、そこからの応用もでき拡張性も高いです。

でも、「色々実行しろといっても、どう実行したらいいかわからない」という場合でしたら、私が推測する疑問をお持ちになるであろうコードを書きますので、実行してみてください。
りむさんが疑問をお持ちになる全てのパターンについて私が上げる事は無理ですし、わかっているのに私が挙げるかもしれませんからやはりご自分で色々コードを書いてみるのが一番です。
以下のサンプルを実行したら自分で色々いじくってみてください。

そして「いじくる用のプロジェクト」もう用意しておいたほうがいいですよ。


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

Name: サイモン  ..ぴよぴよ(10ポイント)   Date: 2007/03/01(木) 10:47   No:5120     
Title: Re:無題    
質問者は、「自分で調べたらわかるけど、調べるのがめんどくさいから教えてくれ」と言っているように聞こえるのは気のせい?

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

Name: 管理人 [URL]  ..ハッカー(222,853ポイント)   Date: 2007/03/01(木) 10:54   No:5121     
Title: Re:無題    
ではまず、コンパイルする環境を整えてください。
今使用しているであろうプロジェクトは使えませんから「いじくる用」とでもフォルダに名前をつくって
新たにDXライブラリの実行環境を作ってください。

ゲームプログラミングの館で使用している画像をサンプルで使用します。

では、始めます。

他でロードした画像を他で描画した時どのように影響が出るか?について。
また、その変数の有効範囲についての確認の意味もこめて以下のサンプルを書きました。

変数はグローバル変数を使用しているのでどこの関数でも使えます。
エンターを入力しているときだけ他の画像も表示されます。

これを見ても分かるとおり、関数を使用することで何か特別な場所を呼び起こしたわけではなく、結局メイン関数に処理を書いているのとかわらないことがわかります。

つまり今までメイン関数で処理を書いていた

@
A
B

という流れを

A

@
B

という順番に書き換えただけであり、処理の進む流れはまったく同じです。


#include "DxLib.h"

int image[24];
char Key[256];

void graph(){
if(Key[KEY_INPUT_RETURN]==1)//エンター入力中なら
DrawGraph(0,0,image[6],FALSE);
return;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
LoadDivGraph( "char.png" , 24 , 6 , 4 , 24 , 32 , image ) ;

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && Key[KEY_INPUT_ESCAPE]==0){

DrawGraph(200,0,image[9],FALSE);

graph();

ScreenFlip();
}
DxLib_End();
return 0;
}



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

Name: 管理人 [URL]  ..ハッカー(223,180ポイント)   Date: 2007/03/01(木) 10:59   No:5122     
Title: Re:無題    
次は標準関数を含め、違う関数で格納した変数の中身を違う関数で描画しています。

先ほどのサンプルに付け加える形で書いています。


#include "DxLib.h"

int image[24];
char Key[256],str1[128];

void string_copy(){
char st[128]={"今日はDXライブラリのお勉強をしています。"};
strcpy(str1,st);
return;
}

void graph(){
if(Key[KEY_INPUT_RETURN]==1)//エンター入力中なら
DrawGraph(0,0,image[6],FALSE);
DrawFormatString(0,50,GetColor(255,255,255),"%s",str1);
return;
}

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

LoadDivGraph( "char.png" , 24 , 6 , 4 , 24 , 32 , image ) ;

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && Key[KEY_INPUT_ESCAPE]==0){

string_copy();

DrawGraph(200,0,image[9],FALSE);

graph();

ScreenFlip();
}
DxLib_End();
return 0;
}



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

Name: 管理人 [URL]  ..ハッカー(223,531ポイント)   Date: 2007/03/01(木) 11:03   No:5123     
Title: Re:無題    
他の関数で画像を読み込んでもメインで描画できるのか?についての疑問を晴らすプログラムです。

先ほどのプログラムに付け加える形でかいています。


#include "DxLib.h"

int image[24];
char Key[256],str1[128];

void load_graph(){//画像をロードする関数
LoadDivGraph( "char.png" , 24 , 6 , 4 , 24 , 32 , image ) ;
return;
}


void string_copy(){
char st[128]={"今日はDXライブラリのお勉強をしています。"};
strcpy(str1,st);
return;
}

void graph(){
if(Key[KEY_INPUT_RETURN]==1)//エンター入力中なら
DrawGraph(0,0,image[6],FALSE);
DrawFormatString(0,50,GetColor(255,255,255),"%s",str1);
return;
}

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

load_graph();
string_copy();

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && Key[KEY_INPUT_ESCAPE]==0){

DrawGraph(200,0,image[9],FALSE);

graph();

ScreenFlip();
}
DxLib_End();
return 0;
}



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

Name: 管理人 [URL]  ..ハッカー(223,951ポイント)   Date: 2007/03/01(木) 11:12   No:5124     
Title: Re:無題    
↑クリックで画像拡大↑

プログラムは長くなっていくと1つのファイルでは収まりきらなくなります。
数千ものコードをスクロールするのは大変だし、どこに何の関数があったかわけがわからなくなります。

ですから「分割コンパイル」してみましょう。

定義文章をまとめたヘッダファイル
define.h

画像のロードを行うファイル
load.cpp

メイン関数のあるファイル
main.cpp

の3種類に先ほどのファイルをわけてみます。
写真にある「SorceFiles」を右クリックして「新しい項目を追加」から新しくファイルを追加します。

新しいファイルを作ったらそれぞれのファイルに以下の通り貼り付けてください。



***********define.h**********

#define IMAGE_X 24
#define IMAGE_Y 32

*****************************




**********load.cpp***********

#include "DxLib.h"
#include "define.h"

extern int image[24];

void load_graph(){//画像をロードする関数
LoadDivGraph( "char.png" , 24 , 6 , 4 , IMAGE_X , IMAGE_Y , image ) ;
return;
}

*****************************




**********main.cpp***********

#include "DxLib.h"
#include "define.h"

int image[24],ch_x=0;
char Key[256],str1[128];

extern void load_graph();

void string_copy(){
char st[128]={"今日はDXライブラリのお勉強をしています。"};
strcpy(str1,st);
return;
}

void graph(){
if(Key[KEY_INPUT_RETURN]==1)//エンター入力中なら
DrawGraph(0,0,image[6],FALSE);
DrawFormatString(0,50,GetColor(255,255,255),"%s",str1);
return;
}

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

load_graph();
string_copy();

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && Key[KEY_INPUT_ESCAPE]==0){

DrawGraph(IMAGE_X,IMAGE_Y,image[9],FALSE);

graph();

ScreenFlip();
}
DxLib_End();
return 0;
}

*******************************


まず、他のファイルで宣言した変数や関数を違うファイルで使用するためには
extern宣言が必要です。
「どこか他の場所で既にこの変数が宣言してありますよ」
という意味です。
extern宣言されると、その変数や関数をみつけてきてくれるので、使用できるようになります。
この使用範囲もカッコからカッコまでです。
グローバル変数の宣言位置にかけば、そのファイル内ではどこでも使えるようになります。

定義関係の項目を書いたdefine.hは、両方のファイルでincludeしましょう。

#include "○○"

は、○○のファイルの中身をファイルのグローバル変数の宣言位置に書いたのと同じ意味になります。
定義は両方のファイルでする必要があるので、両方のファイルで定義しましょう。

なお、既に宣言しているファイル内でextern宣言をするとエラーになってしまうので、
ヘッダファイルの中にはextern宣言をかかないようにしましょう。

define.h
には「定義」と「構造体の形」のみ書きましょう。


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

Name: りむ  ..中級者(12,046ポイント)   Date: 2007/03/01(木) 18:22   No:5134 解決!     
Title: Re:無題    
回答ありがとうございます。

詳しい説明をわざわざありがとうございます。わかりやすくて大変助かります。
あれから私も、実際に同じように小さなテストプログラムを作っては調べてみました。
本来、私のプログラムの書き方もちょこっと書いては試して試して…っていう「自分で試す」やり方のクセに、Justyさんに言われるまで、自分でテストプログラム作って試すってことを思いつかなかった私はどうかしてました><;


void damage_divide_digit(int damage[] ,int damage_value[], int j){
int i;
for(i=0;i<4;i++){
damage_value[i+j*4]=damage[j];
}
damage_value[j*4]/=1000;
damage_value[j*4+1]/=100;
damage_value[j*4+2]/=10;
for(i=0;i<4;i++){
damage_value[i+j*4]%=10;
}
return;
}

typedef struct enemy_data{
int damage_value[16];
int damage[4];
}enemy_data;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
enemy_data en[100];
int damage[4]={0,},damage_value[16]={0,};

(中略)
for(i=0;i<4;i++){
damage_divide_digit(en[0].damage,en[0].damage_value,i);
damage_divide_digit(damage,damage_value,i);
}
return 0;
}

調べた&説明を読んだ結果、↑のように、敵味方どちらでも使える関数を作ることができました。
これから関数化したほうがよさそうな処理は、関数にしてみようと頑張ってみることにします><


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



Name: holmes  ..かけだし(1,181ポイント)   Date: 2007/02/28(水) 23:03   No:5107       
Title: 一時停止をうまく使いたい。    
getchar();のような一時停止をすることのできる関数を使って、プログラムを作りたいと思っています。
たとえば、 1+1= と表示し、エンターキーなどのキー入力があった時点で、 = の隣に 2 という答えを表示したいです。このようにプログラムすることはできますか??
よろしくお願いします。


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


Name: 管理人 [URL]  ..ハッカー(220,947ポイント)   Date: 2007/02/28(水) 23:13   No:5108     
Title: Re:一時停止をうまく使いたい。    
新しく質問をする前に
「二分木で簡易人工知能??」のトピを「解決」にして、回答してくださったYukiさんに
回答の返事・またはお礼を言ってください。
この掲示板がいつまでも良質な掲示板であるよう、ご協力お願いします。


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

Name: 管理人 [URL]  ..ハッカー(221,121ポイント)   Date: 2007/02/28(水) 23:17   No:5109     
Title: Re:一時停止をうまく使いたい。    
一時停止をすることはあらゆる方法で可能ですが、
「処理が返って来ない状態」で待機させるのはあまり得策ではありません。
例えばSleep関数などで処理を止めるとその間に何か起こってもプログラムを終了させる事が出来ません。

ですので、エンターが押されるまで無駄なループをさせるといった処理をさせてはいかがでしょうか?

while(1){
  if(エンターキーが入力された)
    break;
}

こんな感じです。こうすればこのwhile内で他の処理を書くことも出来ます。
他の条件でbreakする事も出来ます。
例えば30秒以上何の入力も無い時にはエンターが押されていなくてもbreakするなどです。


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

Name: holmes  ..かけだし(1,274ポイント)   Date: 2007/03/01(木) 14:07   No:5128 解決!     
Title: Re:一時停止をうまく使いたい。    
管理人さん、ありがとうございます。
管理人さんが言うとおり、無駄なループをさせることにしました。
ありがとうございました


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



Name: チョッピー [URL]  ..ぴよぴよ(34ポイント)   Date: 2007/03/01(木) 02:40   No:5115       
Title: リンク    
メールにも書きましたが

リンクさせてもらいました!!これからも末永くよろしくお願いしますね!!


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


Name: 管理人 [URL]  ..ハッカー(223,977ポイント)   Date: 2007/03/01(木) 11:25   No:5125     
Title: Re:リンク    
HPのリンク張っていただきありがとうございます。

これからもよろしくお願いします。


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



Name: りむ  ..ぴよぴよ(267ポイント)   Date: 2007/02/12(月) 22:16   No:4427       
Title: アクションRPGを作るには。    
こんにちは、初めまして。りむと申します。
今、私は、Win32API関数のみを用いた簡単なゲーム作りの次のステップとして、
以前から作りたかったアクションRPGの製作をしようとしています。
そのため、こちらのサイトを参考にさせていただきたいと思っています。

構想の上での特徴としましては、
・マリオのような2Dマップで、攻撃や防御で敵を倒したりアイテムをつかったりして進んでゆく
・攻撃は数値でダメージを表示して倒すアクションRPG風
・ジャンプも出来て段差や高い位置の足場…というように、動きはまさにマリオ風

というものを作りたいのです。

その最初の足がかりとして、マリオの2Dマップを再現しようと、
ゲームプログラミングの館にあるサンプルを参考に
左右移動とその場でジャンプ、までは出来そうです。
ですが、それからの処理がよくわかりません。
「ジャンプして、高い位置の足場に乗る」
「歩いていて段差から落ちて低い位置の地面に降り立つ」
「画面の常時スクロール(自キャラを中心とした画面の位置調整)」
というものが、イメージは出来ても実際の処理、プログラムが想像つきません。。。

よろしかったらアドバイス等お願いします。


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


Name: バグ  ..プログラマー(27,660ポイント)   Date: 2007/02/12(月) 22:35   No:4428     
Title: Re:アクションRPGを作るには。    
足元に床が有るか無いかの判定をするには、常に見続けていなければいけませんよね。
マリオなんかだと、画面の背景を16×16ドットで構成されたパーツを並べて作っているので、自キャラが表示されている座標と、乗る事の出来るパーツの座標を比較して判断しているんじゃないかと思います。
しかし、いきなりアクションRPGですか…なかなかハードルが高いかもしれませんよ(;^_^A


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

Name: Justy  ..熟練のプログラマー(54,791ポイント)   Date: 2007/02/12(月) 23:18   No:4429     
Title: Re:アクションRPGを作るには。    
@りむさん

 いきなりARPGですか。結構大変だと思いますが、頑張って下さい。


ジャンプして、高い位置の足場に乗る
 これにはまず実際のマップのに関する属性のデータが必要になります。
 属性というのは例えば、プレイヤーがその領域に進入不可能かどうか、破壊可能かどうか、触れるとダメージを受けるかどうか、などの情報です。
 これらの情報とプレイヤーの位置を照らし合わせて、プレイヤーが通過不可能であれば、プレイヤーがその先に進めないようにします。
(属性のデータはバグさんの書かれているとおり、ある程度の領域(例えば 16x16とか 32x32)をブロック化してもっておくといいと思います)

 足場に乗るという処理もこの延長線上にあり、まずプレイヤーに対して常に下向きの「重力」をかけておきます。
 そうするとジャンプした時最初はジャンプによる加速度が重力より高いので、上に飛び上がりますが、直に上向きの加速度が重力によって打ち消され落下を始めるので、落下した先が通過不可能な場所であれば、その上に乗ることができます。


歩いていて段差から落ちて低い位置の地面に降り立つ
 これも同じです。
 常に下向きの重力がかかっていれば、進入不可能な足下の地面がなくなれば、自動的に下に落ちていきます。
 落ちた先が進入不可能な地面なら、その場で落下は止まり立てるはずです。


画面の常時スクロール
 プレイヤーやマップの位置を管理を通常であれば絶対座標系で管理していると思います。
 右へ移動すればX方向が変化し、上下に移動すればY方向が変化するような。

 プレイヤーを画面の中央に配置するには、その絶対座標をプレイヤー中心の相対座標系で考える必要があります。

 といっても2Dなのでさほど難しくはありません。
 プレイヤーがそのマップ上で (5120, 600)の位置にいるのなら、マップはその位置が画面の中央になるように配置すればいいのです。
 画面のサイズが 640x480だとするなら、画面にマップは
(5120 - 640 / 2, 600 - 480 / 2)から (5120 + 640 / 2, 600 + 480 / 2)の領域、つまり (4800, 360)から (5440, 840)のマップを表示すればOKです。


 高度な方法としてはこの処理をシステム化して「カメラ」という概念を取り入れて、カメラはプレイヤーを常に捉えるように動かします。
 で、全てのマップ上に配置されるオブジェクト(プレイヤー、エネミー、アイテムなど)はそのカメラを通して描画(カメラの座標を元に位置を計算)するようにすれば、いろいろと面白いことができると思います。

 カメラをプレイヤの数フレーム前の座標を狙うようにすればカメラがプレイヤーを少し遅れて追っかけるように見えますし、、ステージ開始時とかで、どこか別の場所を映してから素早くカメラがプレイヤーの元に移動するとかの演出などに使えるかと。


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

Name: 管理人 [URL]  ..ハッカー(186,567ポイント)   Date: 2007/02/13(火) 00:07   No:4432     
Title: Re:アクションRPGを作るには。    
これからゲーム作成ですか!わくわくしますね^^

しかし、いきなりアクションRPGですか、難しいでしょうけど、頑張ってください☆

えぇと、マリオとかの場合、1辺が16ピクセルの正方形の集合で出来ているように思います。
ゲームプログラミングの館で「行けない場所を作る」で説明しているとおり、
全ての世界を配列で表し、現在どの配列に属する場所にいるかで、次にいけるかいけないかを判定すればよいように思います。
文字で説明しても難しいと思うので、考え方はゲームプログラミングの館を参考にしてください。
しかし、あれは、1回入力で1区間ずつ歩くので実際あのプログラムのままではいけません。
概念を説明で理解して応用してみてください。

重力に関する事もゲームプログラミングの館に書いてありますので、参考にしてください。
しかしマリオの場合は、9.8m/S^2の重力加速度ではないようです。
ゲーム性に合わせて加速度を色々かえてみましょう。



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

Name: 管理人 [URL]  ..ハッカー(186,571ポイント)   Date: 2007/02/13(火) 00:08   No:4433     
Title: Re:アクションRPGを作るには。    
あ、3人で同じ事言ってしまってる部分ありましたね、よく読まずに書いてしまってごめんなさい^^;

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

Name: りむ  ..入門者(2,559ポイント)   Date: 2007/02/13(火) 00:12   No:4434     
Title: Re:アクションRPGを作るには。    
早速の返事ありがとうございます。
アクションRPGということですが、まずはアクションを作ってそれからRPG成分を付与していきたいと思っているので、まずはアクションを作成する、ということです。
とりあえず左右移動のみは作ることが出来ました。

>属性というのは例えば、プレイヤーがその領域に進入不可能かどうか、破壊可能かどうか、触れるとダメージを受けるかどうか、などの情報です。
これは、ゲーム基本編の第23・24節の行けない所を作る、の作り方と一緒と考えてよろしいですか?
それに常に「y += 0.98」のように毎フレーム加算するようにし、通行不可能のIDの時は加算されても変化しないようにする…でいいのでしょうか。
あと、属性を持たせる、ということですが、タイルセットの画像に「image[6]は通行不可だ」というような情報を付け加えて、それを背景としてならべればいいのでしょうか。
ただそうなると、画像を分割して読み込む方法でいいのか、その画像に対する情報はどう保持するのか、
いろいろと難しい問題がでてきますね…。

>プレイヤーがそのマップ上で (5120, 600)の位置にいるのなら....
その概念はわかりやすくて理解できました。ということは、マップは最初に画面に入りきらないところも含め全部を読み込んでおく必要がありますね。
となると凄く膨大な配列要素になりそうですね…。

ただその処理をシステム化するというのがよくわかりません。カメラというのはゲームをやる上でどういうものかわかるのですが、それをどう実現するか、なんていうのは、ちょこっとしたゲームしか作ったことのない私では全く想像もつきません。…大変ですね…。

あとひとつ質問したいのですが、Win32APIで作るときのように、
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
MSG msg;
BOOL bRet;

if (!InitApp(hCurInst))
return FALSE;
if (!InitInstance(hCurInst, nCmdShow))
return FALSE;
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) {
if (bRet == -1) {
break;
} else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int)msg.wParam;
}
として、実際の処理はウィンドウプロシージャで行う、と言う形にして、
switch (msg) {
case WM_TIMER:
.......
と言う形で処理を行うのは、DXライブラリを使用する上では、まずいのでしょうか。
個人的には先に学んでいる分、こちらのやり方のほうが慣れているのですが、
もし何か不都合や利点があるなら、こちらにするべきでしょうし…。
こちらも意見をお願いします。


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

Name: 管理人 [URL]  ..ハッカー(187,422ポイント)   Date: 2007/02/13(火) 00:26   No:4436     
Title: Re:アクションRPGを作るには。    
例えば
image[0]はマリオで言う、空の画像(通行可)
image[1]はマリオで言う、山の画像(通行可)
image[2]はマリオで言う、ドラム缶(通行不可)
・・・
などであったとしましょう。

int map[3][10]={
{0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,0,0,2,0},
{1,1,1,0,1,1,1,0,2,0}};

こんな風にマップの情報を作ったとしますね。
ドラム缶のとこだけ通行できないわけですから、
x%16==0の時、map[(x%16)-1][y%16]==2の時、左にはいけない
と言った感じにすればいいのではないでしょうか。
配列要素がマイナスにならないように注意です。
本当はものすごい量の配列になるはずです。マリオとか配列要素数は何百とかなんじゃないでしょうか(?_?


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

Name: 管理人 [URL]  ..ハッカー(187,925ポイント)   Date: 2007/02/13(火) 00:35   No:4437     
Title: Re:アクションRPGを作るには。    
>それに常に「y += 0.98」のように毎フレーム加算するようにし

これは、重力加速度ですか?
重力は「加速度」であって速度ではないので、常に変わる値なので、この計算方法ではよくないように思います><
これだと等速運動をしてしまうように思います。
まぁ、最初のうちは、簡単な計算式で作ってみるって手もありだとおもいますけど。

詳細の計算式については館をご覧下さい。

>マップは最初に画面に入りきらないところも含め全部を読み込んでおく

読み込んでおくという意味はいろいろにとれてしまう気がします。
読み込んでおくのは配列の情報だけであって、表示や計算は
実際に画面に表示する部分だけでOKです。
マップチップってご存知ですか?
16x16のチップを配列の画像マップ情報にしたがって張っていけばいいのです。

特定の常に変更するカメラ視点から見たゲームを作った事が無いのですが、
常に自分のいる位置を画面の中央か、どこかに固定して、背景や敵をスクロールさせて、
自分が進んでいるように見せればいいのではないでしょうか。
もしも画面の左最大・右最大まできたら、カメラを固定して、そこより左・右に行かないようにすればいいように思います。

もし突然アクションを作るのが難しければ、サウンドノベルゲームやのんびりしたRPGゲームから作って、
ゲームプログラムになれ、
弾の処理や常に動く座標の計算が必要になるシューティングを作ってから、アクションを作ればよりハードルが低いかもしれません。
ガッツでアクションを作る!というのでしたら、頑張ってください^^
マリオが出すファイヤはシューティングゲームの知識が必要ですね☆


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

Name: Justy  ..熟練のプログラマー(55,804ポイント)   Date: 2007/02/13(火) 01:14   No:4438     
Title: Re:アクションRPGを作るには。    
ゲーム基本編の第23・24節の行けない所を作る、の作り方と一緒と考えてよろしいですか?
 同じと考えていいです。
 上で管理人さんが書かれているような感じで。


行不可能のIDの時は加算されても変化しない
 どういうふうに作っているのかによってちょっと変わってきますが、基本的にはそうです。
 正確には「変化しない」ではなく、「めり込まないように」です。
 変化しないだと宙に浮いたり、透明壁にぶつかったかのようになってしまいますから。


画像を分割して読み込む方法でいいのか
 既に指摘されているようにマップチップを使う手もありますし、そうでないのなら数画面分だけメモリに読み込んで移動するたびに先のマップを動的に読み込んでいくという手もあります。


膨大な配列要素になりそうですね…
 どんな情報を持っておくかとか、どれだけデータを纏めるかとかによっても変わってきますけど、それなりに大きくなりますね。
 数Kバイトとか。

 規模が大きくなったらこういうのは手作業でコツコツと配列を作るようなことはしないで、マップの配置ツールをつくって、その上でマップの絵や属性を設定して事前にデータを出力しておいて、ゲーム本体ではそれを読み込んで使う、という方法が一般的です。
 そこまでやるかどうかは、データ量が手作業で準備できるかどうかにかかってきますが。


マップは最初に画面に入りきらないところも含め全部を読み込んでおく必要がありますね
 最初から全部読んでおく必要はないですよ。
 読み込んだマップデータをどこに配置するのかさえわかっていれば。

ただその処理をシステム化するというのがよくわかりません
 一番簡単な方法だと、単純に「オブジェクトの絶対座標と大きさの情報を与えたら、カメラ位置情報からそのオブジェクトがカメラに写っているかどうか(画面上にあるかどうか)、画面上にあるならその画面上の座標が返ってくる関数」を作れば事足りると思います。
 で、各オブジェクトは画面内にあると判定されたのなら取得した画面座標にオブジェクトを表示する、という感じで。


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

Name: りむ  ..かけだし(1,690ポイント)   Date: 2007/02/13(火) 01:20   No:4439     
Title: Re:アクションRPGを作るには。    
返信ありがとうございます。

>まぁ、最初のうちは、簡単な計算式で作ってみるって手もありだとおもいますけど。
仰るとおり、例として挙げただけの数値として読み飛ばしてしまってください^^;

>16x16のチップを配列の画像マップ情報にしたがって張っていけばいいのです。
RPGツクールは初代からXPまで全て触っているので、どういうものかはよくわかります。
それで作るマップチップ並べ、をプログラムで再現するということですよね?
となると、マップ配列情報map[10] = {0,1,0,2,0,1,3,1,0,0}のようになっていたら、

LoadDivGraph("bat_char_01_right.png", 64, 8, 8, 32, 32, image);

for(i=0;i<10;i++){
get_image = image[map[i]];
DrawGraph( x, y, graph_img, TRUE);
}
のように、分割画像と同じように表示してやればいいのでしょうか。
二次元配列の場合はfor文も二重ですね。

>常に自分のいる位置を画面の中央か、どこかに固定して、背景や敵をスクロールさせて
これぞマリオですね。となるとこれを実現するには、
左右キーを押したら動くものがたくさんになるので処理の把握が大変そうですね…。
敵のスクロールは敵の座標の変化で済むと思いますが、
マップのスクロールはJustyさんの言う
「プレイヤーがそのマップ上で (5120, 600)の位置にいるのなら、マップはその位置が画面の中央になるように配置すればいいのです。
 画面のサイズが 640x480だとするなら、画面にマップは
(5120 - 640 / 2, 600 - 480 / 2)から (5120 + 640 / 2, 600 + 480 / 2)の領域、つまり (4800, 360)から (5440, 840)のマップを表示すればOKです」
というように、プレイヤーの位置を(mx,my)としてそれからマップの表示領域を直接指定すればいいでしょうか?もっと良いやり方等あるでしょうか?

あとマップ情報の地面に関することですが、
int map[3][10]={
{0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,0,0,2,0},
{1,1,1,0,1,1,1,0,2,0}};
の2の上の0に居る場合も、map[x%16][(y%16)+1]==2の時、下には行けない、とすればいいのでしょうが、
下に向かって常に加速している、とすると、上の条件の場合、加算されないようにする…とすればいいのでしょうか。…うむむ、ちょっとこんがらがってきたので、もう少し考えてみます


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

Name: 管理人  ..ハッカー(188,052ポイント)   Date: 2007/02/13(火) 03:25   No:4440     
Title: Re:アクションRPGを作るには。    
現在携帯しかないので沢山かけませんが、ちょこっとだけ。

>map[x%16][(y%16)+1]==2の時、下には行けない、とすればいいのでしょうが、

そうなんですが斜めに移動している時は斜めもみる必要があると思いますし、
1フレームで16ピクセル以上移動する事があるならさらにとなりの配列要素もみてやる必要があります。
なかなか難しいですね。


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

Name: 管理人 [URL]  ..ハッカー(188,497ポイント)   Date: 2007/02/13(火) 03:40   No:4441     
Title: Re:アクションRPGを作るには。    
なお、なぜ私が
「map[(x%16)-1][y%16]==2の時、左にはいけない」
と書かずに
「x%16==0の時、map[(x%16)-1][y%16]==2の時、左にはいけない」
と書いたか、ですが、前者の条件式では、区間の中にいる時まですすめなくなってしまうからです。
もし座標が16の倍数をふまない時、例えば3ずつ座標がふえるような場合はこの条件式ではいけません。
意味がわかるでしょうか?
次の区間がすすめない区間だとしてもすすめる区間の端まではすすめないといけないわけですね。
私も現在、長期休みを利用してゲームを作っています。
今まで一人で遊ぶものばかり作ってたんでオンライン対戦できるボンバーマン作ってます☆
結局ボンバーマンでもいけるとこ、いけないとこの判定は配列で行っていますよ。
現在ボンバーマンのコンピュータの動きをどうプログラムしたらよいか試行錯誤していますw
いや〜昔からあるゲームで単純そうに見えるわりには私にはかなり難しいですf^_^;
コンピュータは完璧に絶対しなないように作れるんですが、それではおもしろくなくて、適度にアホな操作をさせる具合がなんとも難しいですw


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

Name: りむ  ..入門者(3,602ポイント)   Date: 2007/02/13(火) 15:54   No:4449     
Title: Re:アクションRPGを作るには。    
あれから試行錯誤して、基本的に左右移動・ジャンプ&自由落下まで出来ました。
高い足場を作るように、
int map[15][20] = {
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1 },
{ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 },
{ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};
として、1が下に来るときは下への加速度を0になるようにしました。

         if(flag == 2){ // 着地した後の硬直時間
t++;
if(muki==1){
graph_img=image[7];
}
if(muki==3){
graph_img=image3[4];
}
if(t>=20){
t=0;
flag = 0;
}
}

if(can_or_cannot(x,y,0,map)==1) vy=1; // 上の壁に当たったら落下開始

if(can_or_cannot(x,y,2,map)==1){
if(flag ==1){
flag = 2; //ジャンプフラグがあれば消去
}
vy = 0; //地面に着地したら速度0
}

if(flag ==0 && can_or_cannot(x,y,2,map)==1 && Key[ KEY_INPUT_UP ] == 1){
flag=1; //地面に着いていてフラグがなくキーが押されたらジャンプ
vy = -12;
}
if (can_or_cannot(x,y,2,map)!=1){
flag=1;
vy += 0.5; //常にジャンプor空中は速度に下向きの重力を加算
}
y += vy;

という感じです。マップの判定には24節の行けない所を作る、のをそのまま使用しています。ですが、
>斜めに移動している時は斜めもみる必要があると...
と言われているように、高いところからの落下したり、高い足場の下側の角に突撃するようにジャンプすると、足場にめり込んでしまいます。
…ううむ、これの回避はななめでみればいいのでしょうか。ただ斜めで見る場合はまた複雑になりますね…。
ちょっとその部分は思いつきませんでした。

あとマップの描画は
          for(j=0;j<15;j++){
for(i=0;i<20;i++){
map_img = image4[map[j][i]];
DrawGraph( i*32, j*32, map_img, TRUE);
}
}
で出来ました。あとはマップ情報の指定をうまくするだけですね。


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

Name: 管理人 [URL]  ..ハッカー(189,282ポイント)   Date: 2007/02/13(火) 16:57   No:4450     
Title: Re:アクションRPGを作るには。    
斜めの判定はどうすれば最善かわかりませんが、ちょろっと考えて出来そうな設定は

x方向に進んでいる向きをx_mukiとして、
xの正の方向に進んでいる時は1
xの負の方向に進んでいる時は-1
x方向にとまっている時は0

y方向に進んでいる向きをy_mukiとして、
yの正の方向に進んでいる時は1
yの負の方向に進んでいる時は-1
y方向にとまっている時は0

と設定します。

if(map[(y%16)+y_muki][x%16+x_muki]==いける場所)

とすれば、斜めの判定が出来るように思います。
他にいい方法はいくらでもあると思いますが・・。



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

Name: 管理人 [URL]  ..ハッカー(189,379ポイント)   Date: 2007/02/13(火) 17:02   No:4451     
Title: Re:アクションRPGを作るには。    
ちなみに、ウィンドウは上がy=0なので、
「yの正の向き」とは下方向の事です。お間違いの無いよう。

着々と出来ていますね、頑張ってください☆

私も私でコンピュータ対戦のアルゴリズムに試行錯誤中です(♉ฺ_ ♉ฺ )


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

Name: Justy  ..熟練のプログラマー(56,412ポイント)   Date: 2007/02/14(水) 00:37   No:4472     
Title: Re:アクションRPGを作るには。    
 えーと。今後のことも考えるとキャラクタが高速で移動した場合も考慮しないと
いけないかもしれません。

 16x16ピクセルを1つのセル(マップチップ)として属性データを構築していた場合、
1フレームに 16ピクセルより大きな速度でキャラクタが移動した場合、
属性データが進入不可能であっても、壁が壁抜け・地面抜けすることがあります。

 属性データを「分厚く」すればそれを避けることは出来ますが、限界がありますし、
自由なマップ配置が難しくなります。

 なので。
 プレイヤーの前の座標(移動前)を A、新しい座標(移動先)を Bとしたとき、
まずその Aと Bの間に線を引ます。
 Aの側からその線が通過する属性を順番に辿って進入可能かどうかをチェックして、
進めるところまで線を辿っていく、という方法がベストだと思います。

 図ですと、1から順番にヒットするかどうか調べていくと6で黒い進入不可能属性に
ぶつかるので、5まで移動できるということになります。


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

Name: りむ  ..入門者(4,089ポイント)   Date: 2007/02/14(水) 03:17   No:4474     
Title: Re:アクションRPGを作るには。    
>管理人さん
ボンバーマンですか〜。楽しいですよね。
友人の先輩もMMORPGを作ってました。まだまだまともなプレイができる段階にも至ってないようですが…。
AIはいずれ私も作らないといけなくなりますね。
敵キャラが出てきたらまた大変な作業になりそうです…。
頑張りましょう><;

斜め判定は右+上同時に判定、という感じってことですね?
その場合の判定式「if(map[(y%16)+y_muki][x%16+x_muki]==いける場所)」は、
従来の判定に追加する形ですか?
その場合は右下や左下の部分の判定の際、左右移動しているときも地面の部分に判定が引っかかりそうな気がするのですが…気のせいならいいのですが。。。


>Justyさん
>今後のことも考えるとキャラクタが高速で移動した場合も考慮しないと
いけないかもしれません。
ええ、すでにこの問題に直面しています…。地面に埋まる埋まる。
ダッシュ機能もつけたいので、早めに回避したいところです。

>プレイヤーの前の座標(移動前)を A、新しい座標(移動先)を Bとしたとき、
まずその Aと Bの間に線を引ます。
 Aの側からその線が通過する属性を順番に辿って進入可能かどうかをチェックして、
進めるところまで線を辿っていく
…理論はよーくわかりました。おっしゃりたい事も理解したのですが、
どうあの図の判定を書けばいいのか…。
上下左右に対して直線的に判定するのなら、ほんの少しイメージは出来るのですが…
よろしければもう少し助言をいただけませんか…?

ちなみにプレイヤーのキャラは64×64ピクセル、マップは32×32ピクセルという変なサイズを使ってます。
(RPGツクールのマップチップ素材がその規格なので)