C言語何でも質問掲示板


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

規約と使い方

 
   教えてください   
     ・[15314] オプーナを買う権利を授けよう 
     ・[15331] いせはら 
   変数の使い方。宣言の ....   
     ・[15304] やそ 
     ・[15305] 由良 
     ・[15306] box 
     ・[15307] やそ 
     ・[15309] 管理人 
     ・[15312] 由良 
     ・[15318] 由良 
     ・[15321] 由良 
     ・[15322] 由良 
     ・[15325] やそ 
     ・[15326] 由良 
   スタート画面を作って ....   
     ・[15276] 管理人 
     ・[15284] 名無し 
     ・[15287] 管理人 
     ・[15296] 名無し 
     ・[15297] 管理人 
     ・[15317] 名無し 
   はじめして   
     ・[15308] 管理人 
     ・[15310] やそ 
     ・[15311] 管理人 
     ・[15315] 七草堂ひろきち 
   低速移動について   
     ・[15118] 管理人 
     ・[15127] <kor 
     ・[15129] バグ 
     ・[15130] <kor 
     ・[15138] tny 
     ・[15140] 水孤 
     ・[15141] <kor 
     ・[15145] 管理人 
     ・[15150] 木霊 
     ・[15151] 木霊 
     ・[15300] <kor 
   ゲームプログラミング ....   
     ・[15285] 管理人 
     ・[15295] fffff 
   公開には何が必要か   
     ・[15231] tkmakwins15 
     ・[15232] シュバ 
     ・[15234] 通りすがり 
     ・[15235] シュバ 
     ・[15236] 管理人 
     ・[15294] piyo 
   「管理人様の日記」へ ....   
     ・[15246] 管理人 
     ・[15248] 管理人 
     ・[15291] 木霊 
     ・[15292] 管理人 
     ・[15293] 木霊 
   Hallo Worldプログラム ....   
     ・[15213] フリオ 
     ・[15214] 組木紙織 
     ・[15215] GPGA 
     ・[15217] 通りすがり 
     ・[15218] tkmakwins15 
     ・[15219] tkmakwins15 
     ・[15221] たかぎ 
     ・[15222] 組木紙織 
     ・[15223] tkmakwins15 
     ・[15224] tkmakwins15 
     ・[15225] hoge 
     ・[15229] たかぎ 
     ・[15233] tkmakwins15 
     ・[15238] TT414 
     ・[15239] tkmakwins15 
     ・[15240] たかぎ 
     ・[15241] tkmakwins15 
     ・[15251] TT414 
     ・[15252] tkmakwins15 
     ・[15282] Sleepy 
     ・[15286] tkmakwins15 
     ・[15288] のどが痛い 
     ・[15289] tkmakwins15 
   シューティングゲーム ....   
     ・[15254] 管理人 
     ・[15260] com 
     ・[15265] com 
     ・[15266] 管理人 
     ・[15267] 管理人 
     ・[15268] com 
     ・[15269] com 
     ・[15270] 管理人 
     ・[15271] 管理人 
     ・[15272] com 
     ・[15274] 管理人 
     ・[15275] com 
     ・[15277] com 
     ・[15278] 管理人 
     ・[15279] 管理人 
     ・[15280] com 
   いつも勉強させてもら ....   
     ・[15264] 管理人 
   ゲームプログラミング ....   
     ・[15250] 管理人 
     ・[15263] fffff 
   シューティングゲーム ....   
     ・[15259] 管理人 
     ・[15262] 水孤 
   ChangeWindowModeにつ ....   
     ・[15257] 管理人 
     ・[15258] がまぐち 
   初心者なんですが   
     ・[15243] tkmakwins15 
     ・[15244] 管理人 
   string型はprintfで出 ....   
     ・[15227] tkmakwins15 
     ・[15228] kz 
   透過処理のpngファイル ....   
     ・[15186] 管理人 
     ・[15220] 南 
   曜日のズレ   
     ・[15192] box 
     ・[15195] マルチポスト 
     ・[15199] やそ 
     ・[15201] box 
     ・[15202] あきら 
     ・[15204] Mist 
     ・[15205] やそ 
     ・[15206] box 
     ・[15207] 通りすがり 
     ・[15208] マルチ 
     ・[15209] カル 
     ・[15210] 管理人 
     ・[15211] あきら 
     ・[15216] カル 
   ウィンドウが表示され ....   
     ・[15181] やそ 
     ・[15182] k.a 
     ・[15183] 管理人 
     ・[15187] k.a 
     ・[15188] tkmakwins15 
     ・[15189] 管理人 
     ・[15193] k.a 
     ・[15194] Mist 
     ・[15196] k.a 
     ・[15197] バグ 
     ・[15198] 管理人 
     ・[15200] Mist 
     ・[15203] k.a 
   フローチャート   
     ・[14961] あきら 
     ・[14969] やそ 
     ・[14993] カル 
     ・[14994] あきら 
     ・[15004] やそ 
     ・[15016] カル 
     ・[15017] カル 
     ・[15053] カル 
     ・[15060] あきら 
     ・[15091] カル 
     ・[15097] あきら 
     ・[15110] やそ 
     ・[15119] カル 
     ・[15120] あきら 
     ・[15124] カル 
     ・[15126] やそ 
     ・[15142] カル 
     ・[15190] カル 
   フォントハンドル値   
     ・[15157] やそ 
     ・[15159] 管理人 
     ・[15166] kazuoni 
     ・[15168] 管理人 
     ・[15174] kazuoni 
     ・[15175] 管理人 
     ・[15177] kazuoni 
     ・[15178] 管理人 
     ・[15179] kazuoni 
     ・[15184] 管理人 
   四聖龍神録をプレイし ....   
     ・[15149] 管理人 
     ・[15170] オプーナを買う権利を授けよう 
     ・[15172] やそ 
     ・[15176] 管理人 
   thread   
     ・[15158] やそ 
     ・[15160] ggg 
     ・[15161] ggg 
     ・[15162] tkmakwins15 
     ・[15163] たかぎ 
     ・[15164] やそ 
     ・[15173] ggg 
   C言語について学ぶにあ ....   
     ・[15100] 管理人 
     ・[15102] 内田 
     ・[15103] 組木紙織 
     ・[15104] 管理人 
     ・[15108] tkmakwins15 
     ・[15109] たかぎ 
     ・[15169] オプーナを買う権利を授けよう 
     ・[15171] やそ 
   弾の発射のフラグにつ ....   
     ・[15146] 管理人 
     ・[15167] ぬっち 
   テンプレートの制限   
     ・[15077] Justy 
     ・[15082] ibis 
     ・[15083] Justy 
     ・[15086] tkmakwins15 
     ・[15087] たかぎ 
     ・[15153] ibis 
     ・[15154] たかぎ 
     ・[15165] ibis 
   入力候補表示を自動で ....   
     ・[15144] tkmakwins15 
     ・[15147] GPGA 
     ・[15152] tny 
   『1. (導入)必要な画像 ....   
     ・[15137] fffff 
   VC マインスイーパー   
     ・[15132] tkmakwins15 
     ・[15133] joy 
     ・[15134] バグ 
     ・[15135] やそ 
   ポインタのポインタの ....   
     ・[15122] box 
     ・[15123] バグ 
     ・[15128] kz 
   Visual C++ 2008 Expr ....   
     ・[15106] toyo 
     ・[15107] tkmakwins15 
     ・[15115] keichan 
     ・[15125] bogo- 
   FINAL STORYでのキャラ ....   
     ・[15105] megmilk 
     ・[15116] kazuoni 
   vc++で<iostream.h ....   
     ・[15112] 雷 
     ・[15113] Blue 
     ・[15114] kz 
   DXライブラリは将来の ....   
     ・[15064] 管理人 
     ・[15067] ウォビワン 
     ・[15070] バグ 
     ・[15071] 管理人 
     ・[15098] ウォビワン 
   exeで画像の表示   
     ・[15093] tkmakwins15 
     ・[15094] 管理人 
     ・[15095] オプーナを買う権利を授けよう 
     ・[15096] tkmakwins15 
   メイン文以外での強制 ....   
     ・[15065] バグ 
     ・[15073] kazuoni 
     ・[15088] kazuoni 
     ・[15089] tkmakwins15 
     ・[15090] kazuoni 
   自作のスマートポイン ....   
     ・[15013] Justy 
     ・[15014] Justy 
     ・[15020] 組木紙織 
     ・[15021] tkmakwins15 
     ・[15022] tkmakwins15 
     ・[15027] 組木紙織 
     ・[15028] Justy 
     ・[15035] tkmakwins15 
     ・[15040] YuO 
     ・[15042] tkmakwins15 
     ・[15043] Justy 
     ・[15044] YuO 
     ・[15045] tkmakwins15 
     ・[15046] Justy 
     ・[15051] tkmakwins15 
     ・[15055] Justy 
     ・[15056] tkmakwins15 
     ・[15057] Justy 
     ・[15061] tkmakwins15 
     ・[15075] Justy 
     ・[15080] tkmakwins15 
     ・[15084] Justy 
     ・[15085] tkmakwins15 
   ゲーム制作について   
     ・[14997] やそ 
     ・[15018] 管理人 
     ・[15030] やそ 
     ・[15037] 新米 
     ・[15039] 管理人 
     ・[15054] 新米 
     ・[15058] 管理人 
     ・[15081] 新米 

Name: いせはら  ..ぴよぴよ(51ポイント)   Date: 2008/04/03(木) 00:28   No:15313       
Title: 教えてください    
こんばんわ。

早速ですが質問です。
VC++2008を使っていて「サンプルプログラム実行用フォルダ」内の「DxLib.sin」を開き、コンパイルをした所、「rc.exe' の起動中にエラーが発生しました。」と表示され、画面が切り替わりません。

どうすればいいのでしょうか?当方初心者なので、全く分かりません。

どなたかアドバイスをお願いします。


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


Name: オプーナを買う権利を授けよう  ..ぴよぴよ(208ポイント)   Date: 2008/04/03(木) 01:13   No:15314     
Title: Re:教えてください    
多分ですが
ttp://homepage2.nifty.com/natupaji/DxLib/dxuse.html
この設定は試してみましたか?


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

Name: いせはら  ..ぴよぴよ(70ポイント)   Date: 2008/04/03(木) 22:19   No:15331     
Title: Re:教えてください    
設定をもういちど確認しましたが、やはりエラーが出てしまいます。

どうすればいいでしょうか?


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



Name: 由良  ..ぴよぴよ(392ポイント)   Date: 2008/04/02(水) 17:15   No:15303       
Title: 変数の使い方。宣言の仕方。    
今晩和。以前一度質問したことのある由良です。
また皆様に教えていただきたい事があって投稿いたしました。

B.cppというファイルで宣言した変数「xxx」を
A.cppというファイルで使用したいのですが、
どうすれば宜しいのでしょうか?
A.cpp中で

DrawGraph( 1 , 280 , xxx , TRUE ) ;

と宣言すると
「error C2065: 'xxx' : 定義されていない識別子です。」
と出てきてしまいます。

変数「xxx」は多用する予定の変数なのでいちいち宣言すると
面倒だと思って他の場所に宣言したのですが、
面倒でもいちいち宣言しないといけないのでしょうか?
是非教えてください。


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


Name: やそ  ..プログラマー(36,703ポイント)   Date: 2008/04/02(水) 17:30   No:15304     
Title: Re:変数の使い方。宣言の仕方。    
http://dixq.net/s/5.html
を参照するといいよ。


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

Name: 由良  ..ぴよぴよ(482ポイント)   Date: 2008/04/02(水) 17:50   No:15305     
Title: Re:変数の使い方。宣言の仕方。    
お返事ありがとうございます。
えっと、一応extern宣言をつかったのですが・・・出来ませんでした。
↓の書き方が不味かったんでしょうか・・・??

******************* A.cpp *******************
#include "DxLib.h"
extern void B();

void A(){
DrawGraph( x座標, y座標, xxx, TRUE);
}
*********************************************

******************* B.cpp *******************
#include "DxLib.h"
int xxx;

void A(){
xxx = LoadGraph("Failname");
}
*********************************************


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

Name: box  ..ハッカー(108,996ポイント)   Date: 2008/04/02(水) 18:01   No:15306     
Title: Re:変数の使い方。宣言の仕方。    
何をしたときに、どううまくいかなかったかを
具体的に書いてください。

A.cppで使っている変数xxxの実体は、
B.cppで定義していますね。

その、「どこか別のファイルで定義した変数」を
利用するときに、externを使います。

ところで、A関数の定義が重複していますが、
よいのでしょうか?


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

Name: やそ  ..プログラマー(36,752ポイント)   Date: 2008/04/02(水) 18:41   No:15307     
Title: Re:変数の使い方。宣言の仕方。    
残念!extern命令の使用方法をちょっと勘違いしているようです。
由良さんは関数の宣言をexternで宣言されましたが、肝心の?変数xxxのextern宣言をされていないようです。

B.cppで定義した変数xxxをA.cppで使いたいわけですよね。
ならばA.cppで変数xxxについてextern宣言をしてあげればいいんじゃないでしょうか?

>ところで、A関数の定義が重複していますが、
>よいのでしょうか?
まあ、深読みしてあげれば・・・


******************* B.cpp *******************
#include "DxLib.h"
int xxx;

void B(){
xxx = LoadGraph("Failname");
}
*********************************************


ということでしょうね^^

管理人さんの書いたサンプルプログラムではtest.cppとtest2.cppで変数のexternと関数のexternをお互いに宣言しあう極端な例ですよね。それで、関数のextern宣言をすればその宣言された関数で使用している変数も同様に使用できると勘違いされてしまったのでしょうか???

それともexternの宣言対象を勘違いして”B.cpp"のBだと思ってしまったとか?


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

Name: 管理人 [URL]  ..伝説のハッカー(548,449ポイント)   Date: 2008/04/02(水) 18:56   No:15309     
Title: Re:変数の使い方。宣言の仕方。    
まず、一つずつ書いた例を示すべきでしたかね・・。

extern宣言したファイルで使いたいものは関数ではなく、xxxという変数ですよね?

xxxをextern宣言すると「xxxという変数がどこかで宣言してあるから探してね!」って意味になるので、xxxが使えるようになるのです。
だから、xxxを使いたいのだから

extern int xxx;

を書いて下さい。


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

Name: 由良  ..ぴよぴよ(594ポイント)   Date: 2008/04/02(水) 19:44   No:15312     
Title: わかりました!    
今日は現在環境がないので、
明日早速皆さんがいうとおりに
変えてやってみます!

ご丁寧な回答ありがとうございました!


一応明日結果報告致しますので
もうしばらく「質問」のままで
いさせてください。


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

Name: 由良  ..ぴよぴよ(638ポイント)   Date: 2008/04/03(木) 08:36   No:15318 解決!     
Title: できました。    
皆さんの言うとおりに直したらちゃんと動きました!
ありがとうございました!
また何かあったときは宜しくお願い致します。


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

Name: 由良  ..ぴよぴよ(728ポイント)   Date: 2008/04/03(木) 14:45   No:15321     
Title: 何度もすみません。    
度々申し訳ありません。
似たような内容なので一度「解決!」にした場所に
投稿させていただきます。

読み込んだ画像が上手く表示されたりされなかったり
するのですが、何故でしょうか?
「右上の状態??っぽいのをあらわす板用」の部分は
きちんと出ます。が、噴出し、ミニキャラ、表情が
表示されません。


あと、実行するとキーが何も利かなくなってしまい、
「中止」ボタンをクリックして止めないとフリーズ
するエラーが出てしまうのですがそれは何処が問題
なのでしょうか?
以下がソースです。
ご指導、宜しくお願い致します。

**********************main.cpp***************************
#include "DxLib.h"

extern void IhoIho_Atrie();
extern void zyoutai_disp();

int tail,tail2,zyuutan1,zyuutan2,zyuutan3,tana; //背景
int i,j; //その他変数

char KeyBuf[ 256 ] , Key[256];

int hantei[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,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,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,4,0,0,0,0,0,0,2,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,0,0,0,3,6,0,0,0,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,5,5,5,5,5,5,5,5,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,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};

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

/* 家背景 */
tail = LoadGraph("tail.PNG");
tail2 = LoadGraph("tail2.PNG");
zyuutan1 = LoadGraph("zyuutan1.PNG");
zyuutan2 = LoadGraph("zyuutan2.PNG");
zyuutan3 = LoadGraph("zyuutan3.PNG");
tana = LoadGraph("tana.PNG");

SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
/*白い壁を描画*/
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(hantei[i][j]==1)
DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(255,255,255),TRUE);
/*床を描画*/
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(hantei[i][j]==0)
DrawGraph(j*32,i*32,tail,TRUE);
/*床を描画2*/
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(hantei[i][j]==5)
DrawGraph(j*32,i*32,tail2,TRUE);
DrawGraph(185,50,tana,TRUE);
DrawGraph(312,50,tana,TRUE);
/*絨毯を描画1*/
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(hantei[i][j]==2)
DrawGraph(j*32,i*32,zyuutan1,TRUE);
/*絨毯を描画2*/
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(hantei[i][j]==3)
DrawGraph(j*32,i*32,zyuutan2,TRUE);
/*絨毯を描画3*/
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(hantei[i][j]==4)
DrawGraph(j*32,i*32,zyuutan3,TRUE);
zyoutai_disp(); // 文字を描画

IhoIho_Atrie();//いほいほがアトリエにいる。
}

}
*********************************************************



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

Name: 由良  ..かけだし(1,677ポイント)   Date: 2008/04/03(木) 14:46   No:15322     
Title: Re:何度もすみません。    
続きです。
*********************zyoutai_disp.cpp********************
#include "DxLib.h"

int ita,money,yousei,nakama,irai;//板用
int kane=3000,yousei_ninzu=7,boukensya_ninzu=2,irai_su=0;//板
extern int moji;

void zyoutai_disp(){
/* 右上の状態??っぽいのをあらわす板用 */
ita = LoadGraph("ita.png");
irai = LoadGraph("irai.png");
nakama = LoadGraph("nakama.png");
yousei = LoadGraph("yousei.PNG");
money = LoadGraph("money.png");

DrawGraph(430,20, ita , TRUE ) ; //画像を表示
DrawGraph(450,40, money , TRUE ) ;
DrawFormatString(490,40,moji,"%dG",kane);
DrawGraph(460,80, yousei , TRUE ) ;
DrawFormatString(490,80,moji,"%d",yousei_ninzu);
DrawGraph(510,80, nakama , TRUE ) ;
DrawFormatString(540,80,moji,"%d",boukensya_ninzu);
DrawGraph(560,80, irai , TRUE ) ;
DrawFormatString(590,80,moji,"%d",irai_su);
}
*********************************************************

*********************IhoIho_Atrie.cpp********************
#include "DxLib.h"

extern void IhoIho_card();
extern void IhoIho_Attention1();
extern void IhoIho_Attention2();

int IhoIho_fg=2;//イベントフラグ

void IhoIho_Atrie(){
switch(IhoIho_fg){
// case 1://イベント1
// IhoIho_event1();
// break;
case 2://イベント2
IhoIho_event2();
break;
// case 3://3イベント
// IhoIho_event3();
// break;
default:
break;
}
return ;
}
*********************************************************

******************IhoIho_event2.cpp**********************
#include "DxLib.h"

extern char KeyBuf[ 256 ] , Key[256];//読み込み
extern int counter,moji;//読み込み
extern int MYuri[16]; //主人公ミニキャラ読み込み
extern int Yuri[4],IhoIho[4]; //主人公といほいほ表情読み込み
extern int hukidashi; //読み込み

/* 台詞 */
char disp1[36]="",disp2[48]="",disp3[48]="";
char name[14]="いほいほ :";
char speach1[2][36] = {"あああ。",
"うううううううううううううううう"};
char speach2[2][48] = {"いいいいいいいいいいいい。",
"ええええええええええええええええええええええ。"};
char speach3[2][48] = {"",
"おおおおおおおおおおおお?"};

int a=36,b=48; //文字数

typedef struct{ //キャラクターの座標、向き等を各キャラ毎に指定する。
int x,y,img,muki;
}Yuri_t;

void Inglid_Attention1(){

Yuri_t yuri;

yuri.x = 384;
yuri.y = 224;
yuri.muki = 1;
yuri.img = MYuri[12];

counter = 0;

DrawGraph( yuri.x , yuri.y , yuri.img , TRUE ) ;//画像を描画

DrawGraph( 1 , 280 , hukidashi , TRUE ) ; //噴出しを表示

DrawGraph(44,315,IhoIho[1],TRUE);//いほいほの表情。
DrawFormatString(180,330,moji,"%s",name);//disp配列の文字データを表示

while(counter < 2){
if(Key[KEY_INPUT_RETURN]==2){ // 前回押されてなくて、今回押されていたら
counter++;
}

strncpy(disp1,speach1[counter],a);// aバイトまでの配列要素をdisp1配列にコピー?
strncpy(disp2,speach2[counter],b);// bバイトまでの配列要素をdisp2配列にコピー?
strncpy(disp3,speach3[counter],b);// bバイトまでの配列要素をdisp3配列にコピー?

DrawFormatString(282,330,moji,"%s",disp1);
DrawFormatString(180,350,moji,"%s",disp2);
DrawFormatString(180,370,moji,"%s",disp3);

ScreenFlip() ;
}

return ;
}
*********************************************************

********************Declaration.cpp**********************
#include "DxLib.h"

int MYuri[16]; //主人公ミニキャラ
int Yuri[4]; //主人公表情
int IhoIho[4]; //その他関係者
int counter; //カウンター
int moji;
int hukidashi;//噴出し


void Declaration(){
moji = GetColor( 0 , 0 , 0 ) ; //色の取得

/* 噴出し */
hukidashi = LoadGraph("hukidashi.PNG");

/* ミニキャラ画像 */
LoadDivGraph( "MYuri.png" , 16 , 4 , 4 , 32 , 32 , MYuri ) ;//画像を分割してMYuri配列に保存

/* キャラ「普喜怒哀」表情画像 */
LoadDivGraph( "IhoIho001.png" ,4,4,1,113,121,IhoIho) ;//いほいほ
LoadDivGraph("Yuria001.png",4,4,1,113,121,Yuri);//主人公
}
*********************************************************


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

Name: やそ  ..プログラマー(37,738ポイント)   Date: 2008/04/03(木) 15:37   No:15325     
Title: Re:何度もすみません。    
イベントフラグに2をセットして判定され、

case 2://イベント2
IhoIho_event2();
break;
となっていますが、
IhoIho_event2()関数はどこにあるのでしょう?
IhoIho_event2.cppはあくまでソースファイルであって関数ではありません。
void Inglid_Attention1()を呼びたいのかな?
Declaration()関数も呼ばれてなさそう・・・。

ということで、関数などの相関関係を把握し切れていない可能性があります。
一度、関数の相関図やフローチャートを”紙”に書き出して把握するのがよろしいかと^^

また、
/*白い壁を描画*/ ,/*床を描画*/ などのMAP描画は纏められるでしょう。
種類ごとにMAPの配列を全て読み直すのは処理の無駄ですよね。
それならループは1回に纏めましょう!


for(i=0;i<15;i++){
for(j=0;j<20;j++){
switch(hantei[i][j]){
case 1:
/*白い壁を描画*/
  break;
case 0:
/*床を描画*/
break;



default:
break;
}
}
}


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

Name: 由良  ..かけだし(1,710ポイント)   Date: 2008/04/03(木) 15:43   No:15326 解決!     
Title: Re:何度もすみません。    
わかりました。やってみます!
いつも素早いご返答ありがとうございます!

また何かあったときは宜しくお願い致します(礼)


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



Name: 名無し  ..かけだし(1,924ポイント)   Date: 2008/03/31(月) 18:51   No:15273       
Title: スタート画面を作っているのですが・・・    
スタート画面を作っているのですが、スタート画面でcontinueを選んで、
enterを押すとロード画面に行くようにしているのですが、enterを二回押さないと
ロード画面に行きません。なぜなのでしょうか?お願いします。以下ソースです。

-----start.cpp--------

#include"DxLib.h"

void choice(int y,int str1,int str2)
{
LoadGraphScreen(215,y,"hagure.bmp",TRUE);
DrawFormatStringToHandle(220,120,GetColor(255,255,255),str1,"UNTITLED");
DrawFormatStringToHandle(250,260,GetColor(255,255,255),str2,"START");
DrawFormatStringToHandle(250,280,GetColor(255,255,255),str2,"CONTINUE");
}

void ContinueScreen(int str1)
{
ClearDrawScreen();
DrawFormatStringToHandle(220,120,GetColor(255,255,255),str1,"ロード画面");
WaitKey();
}



void start(void)
{
int str1,str2,y=260;
int DownOshita=0,NewDown=0,OldDown=0,DownPusingCounter=0;
int UpOshita=0,NewUp=0,OldUp=0,UpPushingCounter=0;
char keybuf[256];

str1=CreateFontToHandle("MS 明朝",40,5,DX_FONTTYPE_NORMAL);
str2=CreateFontToHandle("MS 明朝",20,3,DX_FONTTYPE_NORMAL);

SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定

while(1){
ClearDrawScreen(); // 裏画面のデータを全て削除
GetHitKeyStateAll( keybuf ) ; // すべてのキーの状態を得る
if( keybuf[ KEY_INPUT_ESCAPE ] == 1 ) exit(1); // Escapeが押されたら終了

choice(y,str1,str2);

/*下キー判定*/
if( keybuf[ KEY_INPUT_DOWN ] == 1 ) // 下キーが押されたら
NewDown=1; // 今押されている状態に
else // 押されていなかったら
NewDown=0; // 今押されていない状態に

if( OldDown==0 && NewDown==1 ) // 前回押されてなく、今回押されていたら
DownOshita=1; // たった今押された状態に
else // それ以外なら
DownOshita=0; // たったいま押されていない状態に

if( OldDown==1 && NewDown==1 ) // 前回も押され、今回も押されていたら
DownPusingCounter++; // 押しっぱなしカウンターを増加
else
DownPusingCounter=0;

if( DownOshita==1 || DownPusingCounter>30){ // たった今押したか、30カウンター以上押しっぱなしなら
if(DownPusingCounter>30) // 30カウンター以上押しっぱなしならカウンターを27へ
DownPusingCounter=27; // オートの場合4回に1回下に下がる。
if(y==260)y=280;
else // y座標が280なら(選択が一番下なら)
y=260; // 選択座標を一番上に
}
OldDown=NewDown;

/*上キー判定*/
if(keybuf[KEY_INPUT_UP]==1) NewUp=1;
else NewUp=0;

if(OldUp==0 && NewUp==1) UpOshita=1;
else UpOshita=0;

if(OldUp==1 && NewUp==1) UpPushingCounter++;
else UpPushingCounter=0;

if(UpOshita==1 || UpPushingCounter>30){
if(UpPushingCounter>30) UpPushingCounter=27;

if(y==280) y=260;
else y=280;
}
OldUp=NewUp;

if(keybuf[KEY_INPUT_RETURN]==1 && y==280)
ContinueScreen(str1);


if( ProcessMessage() == -1 ) break ; //エラーが起きたら終了
ScreenFlip() ; // 裏画面データを表画面へ反映
}

}


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


Name: 管理人 [URL]  ..伝説のハッカー(545,963ポイント)   Date: 2008/03/31(月) 19:17   No:15276     
Title: Re:スタート画面を作っているのですが・・・    
このままだと汎用性が無いですし、とても見にくいコードになっていますので、
キーの入力状態を格納する関数key_checkを作ってみました。
十字キーの「下キー」を押したり、押しっぱなしにしたりしてみてください。



GetHitKeyStateAll( now_key );//キー入力状態をnow_keyに格納

だけでは、0か1しかはいりませんから、今入力されたのか、どれ位押しっぱなしだったのかわかりません。
そこで、int keybuf[256]を用意し押されたカウントだけカウント数を格納する関数を作ってみます。

以下実装してみましたので、よければお使い下さい。
これを使って作り直したほうがずっと見やすくなると思います。
重複しますが、keybufに入っている数字は押しっぱなしにしたカウント数です。
0だと押されていません。60Hzのモニタなら、keybuf[KEY_INPUT_DOWN]==60ならば1秒間押しっぱなしにしたことになります。


#include "DxLib.h"

void key_check(int key[]){
int i;
char now_key[256];

GetHitKeyStateAll( now_key );//キー入力状態をnow_keyに格納

for(i=0;i<256;i++){
if(now_key[i]==1)//押されていたら
key[i]++;//カウントアップ
else//押されていなければ
key[i]=0;//0に
}
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int keybuf[256]={},y=100;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
SetDrawScreen( DX_SCREEN_BACK ); //裏画面に設定

while(!ProcessMessage() && !ClearDrawScreen() && !keybuf[KEY_INPUT_ESCAPE]){

key_check(keybuf);//キーの入力状態チェック

if(keybuf[KEY_INPUT_DOWN]==1)//たった今入力されたら
y+=20;
if(keybuf[KEY_INPUT_DOWN]>40)//40カウント以上押し続けたら
y+=20;
if(y>380)
y=100;

DrawCircle(100,y,5,GetColor(255,255,255),TRUE);//円を描画

ScreenFlip();//裏画面反映
}

DxLib_End();
return 0;
}


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

Name: 名無し  ..入門者(3,029ポイント)   Date: 2008/03/31(月) 22:44   No:15284 解決!     
Title: Re:スタート画面を作っているのですが・・・    
管理人さんのを使わせてもらったらうまく行きました!
ありがとうございました。

一応ソースを

#include"DxLib.h"

void choice(int y,int str1,int str2)
{
LoadGraphScreen(215,y,"hagure.bmp",TRUE);
DrawFormatStringToHandle(220,120,GetColor(255,255,255),str1,"UNTITLED");
DrawFormatStringToHandle(250,260,GetColor(255,255,255),str2,"START");
DrawFormatStringToHandle(250,280,GetColor(255,255,255),str2,"CONTINUE");
}

void key_check(int key[]){
int i;
char now_key[256];

GetHitKeyStateAll( now_key );//キー入力状態をnow_keyに格納

for(i=0;i<256;i++){
if(now_key[i]==1)//押されていたら
key[i]++;//カウントアップ
else//押されていなければ
key[i]=0;//0に
}
}


void ContinueScreen(int str1)
{
while(!ProcessMessage() && !ClearDrawScreen() && !CheckHitKey(KEY_INPUT_ESCAPE) && !CheckHitKey(KEY_INPUT_BACK)){
DrawFormatStringToHandle(220,120,GetColor(255,255,255),str1,"ロード画面");
ScreenFlip();
}
}



void start(void)
{
int str1,str2,y=260;
int keybuf[256];

str1=CreateFontToHandle("MS 明朝",40,5,DX_FONTTYPE_NORMAL);
str2=CreateFontToHandle("MS 明朝",20,3,DX_FONTTYPE_NORMAL);

SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定

while(!ProcessMessage() && !ClearDrawScreen() && !keybuf[KEY_INPUT_ESCAPE]){
key_check(keybuf);

/*下キー判定*/
if(keybuf[KEY_INPUT_DOWN]==1) //たった今入力されたら
y+=20;
if(keybuf[KEY_INPUT_DOWN]>40) //40カウント以上押し続けたら
y+=20;
if(y>280) y=260;

/*上キー判定*/
if(keybuf[KEY_INPUT_UP]==1)
y-=20;
if(keybuf[KEY_INPUT_UP]>40)
y-=20;
if(y<260) y=280;

choice(y,str1,str2);

if(keybuf[KEY_INPUT_RETURN]==1 || keybuf[KEY_INPUT_RETURN]>40){
if(y==280)
ContinueScreen(str1);
}

ScreenFlip() ; // 裏画面データを表画面へ反映
}

}


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

Name: 管理人 [URL]  ..伝説のハッカー(546,995ポイント)   Date: 2008/03/31(月) 23:18   No:15287     
Title: Re:スタート画面を作っているのですが・・・    
while(!ProcessMessage() && !ClearDrawScreen() && !CheckHitKey(KEY_INPUT_ESCAPE) && !CheckHitKey(KEY_INPUT_BACK)){

このループはあちこちに書くものではないです。
WinMainなり、どこでもいいので、必ず一度返って来る関数を作ったほうがよりキレイになると思います。

ProcessMessage()やClearDrawScreen()はプログラムコードのどこか1箇所にだけかけばよく、
ずっと処理の返ってこないループがあちこちにあるとデバッグもやりにくくなりますし、
あちこちに同じ処理を書かないといけなくなるので非効率です。

ゲームプログラミングの館に「メイン関数の書き方」を紹介していますので、よければ参考にして下さい。

また

if(keybuf[KEY_INPUT_RETURN]==1 || keybuf[KEY_INPUT_RETURN]>40){

この>40の方の判定分は必要ですか?
40カウント以上エンターが押しっぱなしである必要は無いのではないでしょうか?


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

Name: 名無し  ..入門者(3,118ポイント)   Date: 2008/04/01(火) 22:42   No:15296     
Title: Re:スタート画面を作っているのですが・・・    
すみません、こういう大きいプログラムを組むのは初めてなもので・・・
えっと、理解の仕方としては、WinMain関数にループを作り、グローバル変数で
いろいろな関数に行くように管理して、WinMain関数以外の他の関数のループから
他の関数のループはあまりよくないということなのでしょうか?


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

Name: 管理人 [URL]  ..伝説のハッカー(547,777ポイント)   Date: 2008/04/01(火) 23:08   No:15297     
Title: Re:スタート画面を作っているのですが・・・    
WinMainじゃなくてもいいと思いますが、あちこちに

while(!ProcessMessage() && !ClearDrawScreen() && !CheckHitKey(KEY_INPUT_ESCAPE) ・・・

のループを書くのはちょっと効率悪いですよね。
最初のうちは、メイン関数にだけ画面クリアや反映関数を書いておき、絶対ここに1周に一度返って来るようにプログラムを組んだほうがいいと思います。
自分なりの方法はそれを理解したうえで行った方がいいと思います。

誤解しないで貰いたいのが、for文やループ文を他の関数で使うなと言うことではありません。
色んなところに同じような機能を持ったプログラムを書くことが非効率的なので、
そのような重複は省きましょうということです。
とりあえず

ProcessMessage()
ClearDrawScreen()
ScreenFlip()

は、メイン関数で一度だけ書くようにしてプログラムを書いてみて下さい。


プログラムを書いていけば解るのですが、グローバル変数は多用しない方が関数が汎用的になります。
例えば先ほどのようなキーチェック関数など、自作した関数はいちいちコピペしなくても、自作ヘッダファイルを作ることで、その関数が利用できるようにすれば効率的ですよね。

先ほどの関数をkey.hみたいなファイルに保存しておき、#include "key.h"としてその関数をよんでやったりすれば、どんなプログラムからでも同じように使えるわけです。

しかし、そのプログラムによって変数名がかわり、その変数名ではないと機能しないような関数では、他で利用も出来ませんし、保守的な意味でもよくないです。なのでグローバル変数は必要最小限にした方がいいと思います。


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

Name: 名無し  ..入門者(3,757ポイント)   Date: 2008/04/03(木) 04:05   No:15317     
Title: Re:スタート画面を作っているのですが・・・    
管理人さんのを参考にして改善しました。
すごくすっきりしてデバッグもしやすいです。
ありがとうございます。



---main.cpp---
#include "DxLib.h"
#include"global_define.h"
#include"Extern_etc.h"
#include"function.h"
#include"start.cpp"

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

white=GetColor(255,255,255);
str1=CreateFontToHandle("MS 明朝",40,5,DX_FONTTYPE_NORMAL);
str2=CreateFontToHandle("MS 明朝",20,3,DX_FONTTYPE_NORMAL);

while(!ProcessMessage() && !ClearDrawScreen() && !keybuf[KEY_INPUT_ESCAPE]){
key_check(keybuf);
switch(scene){
case 0:
start();
break;
case 1:
ContinueScreen();
break;
default:
DxLib_End() ; // DXライブラリ使用の終了処理
return 0;
break;
}

ScreenFlip() ;
}
WaitKey();
DxLib_End();
return 0;
}

---start.cpp---

#include"DxLib.h"
#include"Extern_etc.h"

void ContinueScreen()
{
DrawFormatStringToHandle(220,120,white,str1,"ロード画面");
if(keybuf[KEY_INPUT_BACK]==1) scene=0;
}



void start(void)
{

LoadGraphScreen(215,y,"hagure.bmp",TRUE);
DrawFormatStringToHandle(220,120,white,str1,"UNTITLED");
DrawFormatStringToHandle(250,260,white,str2,"START");
DrawFormatStringToHandle(250,280,white,str2,"CONTINUE");

/*下キー判定*/
if(keybuf[KEY_INPUT_DOWN]==1) //たった今入力されたら
y+=20;
if(keybuf[KEY_INPUT_DOWN]>40) //40カウント以上押し続けたら
y+=20;
if(y>280) y=260;

/*上キー判定*/
if(keybuf[KEY_INPUT_UP]==1)
y-=20;
if(keybuf[KEY_INPUT_UP]>40)
y-=20;
if(y<260) y=280;


if(keybuf[KEY_INPUT_RETURN]==1 ){
if(y==280)
scene=1;
}


}



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



Name: 七草堂ひろきち [URL]  ..ぴよぴよ(106ポイント)   Date: 2008/04/02(水) 14:23   No:15301       
Title: はじめして    
こちらでは初めまして。DXライブラリを最近学び始めたひろきちと申します。

早速で恐縮なのですが、教えていただきたいことがあります。
動画を拝見させていただいた中の未公開ゲーム「Curse'sSoul(仮名)」で、
自分含むキャラ達が地形に沿って走っておりますが、

あの微妙な傾きの地形に沿ってキャラクターを移動させるにはどういうプログラムを組めば良いのでしょうか。
よろしければ是非、ご教授ください。




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


Name: 管理人 [URL]  ..伝説のハッカー(548,311ポイント)   Date: 2008/04/02(水) 18:52   No:15308     
Title: Re:はじめして    
アクションゲームについては詳しくないので、すみません、参考になるお答えが出来ないです。
私の方法は全部我流なので、それでよければお答えします。

私は地面を全て一次関数の直線で表しています。
地面を沢山の座標で表しています。定義域にわけて座標を渡せば地面が出来上がるような関数を作りました。
例えば
(0,0)と(10,5)の座標を渡せばxが0〜10の間はy=0.5*xの直線が地面になるわけです。こんな風に
(0,0),(100,50),(200,130),(230,100),,,と最後まで座標を渡していけば最後まで地面が出来ます。
でもホントこれメンドクサイので実際にはツールか何かで作られてるんじゃないかと思います。
本格的にゲームを作るときは自分でまずツールを作るほうが結局早いですね。

道中にあるオブジェクトは普通に、中心から例えばyに100,xに50の長方形区間は進入禁止になるようにし、好きなところにポコポコ置いています。
恐らく全てをオブジェクトの集合にした方が作りやすいんだと思います。
時間があるときアクションゲームの作り方についても学んでみたいと思っている今日この頃です。
それようの書籍があるかどうかわかりませんが、本屋さんを回ってみてはどうでしょうか?

もしなければ私のように力ずくで汚いながらも何とか作ることもできますしねw


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

Name: やそ  ..プログラマー(36,872ポイント)   Date: 2008/04/02(水) 19:12   No:15310     
Title: Re:はじめして    
それっぽい本は探せばすぐに見つかりますよ〜^^

ttp://kougaku.blog28.fc2.com/blog-entry-236.html





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

Name: 管理人 [URL]  ..伝説のハッカー(548,463ポイント)   Date: 2008/04/02(水) 19:18   No:15311     
Title: Re:はじめして    
おー面白そうですね、今度書店で探してみます!

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

Name: 七草堂ひろきち  ..ぴよぴよ(280ポイント)   Date: 2008/04/03(木) 02:21   No:15315 解決!     
Title: Re:はじめして    
>管理人さま、はじめまして。
マップチップ方式ではなく、地面のこうばいを計算して高さを決めてたのですね。
お答えいただいてありがとうございました。参考にさせていただきます。

>やそさま
参考資料ありがとうございます。おぉ!実は買っていました。
その本は良いものです。
今作った撃つゲームもそのアルゴリズムを参考にいたしました。
こうばいについては・・残念ながらありませんでした。
しかし、管理人さんの方法も参考にし、色々試行錯誤してゆこうと思います。




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



Name: <kor  ..かけだし(1,828ポイント)   Date: 2008/03/24(月) 22:32   No:15117       
Title: 低速移動について    
いつもお世話になってます。どこにでも居るゆとりの<korです。
今STGを作成中でどうにかシューティングゲームの館の7章までいったのですが、
あそこに書いてある通常移動は理解できました。しかし、あれに加えて『左SHIFT+方向キー』で
通常移動の半分の速度で動く低速移動をつけたいのですが、どうすればいいのでしょうか?


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


Name: 管理人 [URL]  ..伝説のハッカー(539,180ポイント)   Date: 2008/03/25(火) 00:26   No:15118     
Title: Re:低速移動について    
移動する前に一旦変数に値を入れたらいいですよ。
移動分なる変数を用意したとします。
では今移動が3.0だったとし、低速移動はその半分の1.5だとしましょう。


移動分=3.0;
if(シフトが押されていたら){
移動分/=2;
}
if(移動キーが押されていたら){
if(キャラクタ座標と移動分を足した座標が移動可能領域内なら){
キャラクタ座標+=移動分;
}
}

 
こんな感じでどうでしょうか?
もちろん4方向必要になります。
ちなみに、キャラクタの座標はdouble型であることを前提としています。
龍神録では3.9に設定し、低速移動はその1/3にしています。


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

Name: <kor  ..かけだし(2,006ポイント)   Date: 2008/03/25(火) 12:16   No:15127     
Title: Re:低速移動について    
移動分というのは、 Player.x-=4.0f;  のことでしょうか?
if(Key[KEY_INPUT_LSHIFT]){
Player.x-=4.0f/=2;
}
if(Key[KEY_INPUT_LEFT]==1){
Player.x-=4.0f;
if(Player.x<10.0)
Player.x=10.0;
}
とやると”error C2106: '/=' : 左のオペランドが、左辺値になっていません。”となってしまうのですが・・・


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

Name: バグ  ..比類無きプログラマー(79,256ポイント)   Date: 2008/03/25(火) 12:57   No:15129     
Title: Re:低速移動について    
× Player.x-=4.0f/=2;

○ Player.x -= 4.0f / 2.0f;


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

Name: <kor  ..かけだし(2,133ポイント)   Date: 2008/03/25(火) 13:22   No:15130     
Title: Re:低速移動について    
低速移動を実行できたのですが、

if(Key[KEY_INPUT_LSHIFT]){
Player.x -=4.0f / 2.0f;
}
if(Key[KEY_INPUT_LEFT]==1){
Player.x-=4.0f;
if(Player.x<10.0)
Player.x=10.0;
}
と書くと、左shiftを押すだけで左に移動してしまうのですが、どこを直せばshiftと左キー同時押しで低速移動になるのですか?


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

Name: tny  ..ぴよぴよ(960ポイント)   Date: 2008/03/25(火) 21:41   No:15138     
Title: Re:低速移動について    
double move_value = 4.0f; // 移動力(標準が4.0)

// Shiftを押している間は、移動力を半分に
if(Key[KEY_INPUT_LSHIFT]){
move_value /= 2;
}

// 上下左右の移動
if(Key[KEY_INPUT_LEFT]==1){
Player.x-=move_value;
if(Player.x<10.0)
Player.x=10.0;
}
  (以下、上下と右について同様)

 このような感じでどうでしょうか。


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

Name: 水孤  ..ぴよぴよ(277ポイント)   Date: 2008/03/25(火) 21:58   No:15140     
Title: Re:低速移動について    
はじめまして、自分もこのサイトを見ながらSTGを作っていますが、そのプログラムの

if(Key[KEY_INPUT_LSHIFT]){
Player.x -=4.0f / 2.0f;
}
の部分ですが、これだと左シフトを押したとき 2.0fづつPlayer.xが減少して行きます。
上の管理人さんの返信のやり方だと、一旦どこかで変数を宣言しそれに通常時の移動速度を代入し、左シフトを押したときその変数が低速時の移動速度になるようにし(上のものだと 移動分/=2; がそれに該当します)その状態で左キーが押されるとPlayer.xからその変数が引かれていく、ということを書いていくと良いと思います。

最悪このことがわからなければ、変数のことを考えずに

if(Key[KEY_INPUT_LSHIFT]){
if(Key[KEY_INPUT_LEFT]==1){
Player.x-=2.0f;
if(Player.x<10.0)
Player.x=10.0;
}

という感じで4方向に設定していけば希望どうりに動くと思います。


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

Name: <kor  ..かけだし(2,146ポイント)   Date: 2008/03/25(火) 22:02   No:15141 解決!     
Title: Re:低速移動について    
ありがとうございます!できました。
これからがんばって作成します。


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

Name: 管理人  ..伝説のハッカー(539,310ポイント)   Date: 2008/03/26(水) 02:14   No:15145     
Title: Re:低速移動について    
わかりやすく
if(キャラクタ座標と移動分を足した座標が移動可能領域内なら){
とかきましたが、移動領域外であり、かつ、移動領域の端では無い場合は、移動領域の端まで移動させて下さい。
なお、単純に横と縦に同じように移動させると、ルート2倍の速さになってしまうので、
斜めに進むときは1/1.41421356倍にして下さい。
sqrt(2.0)を使うと正確ですが、この関数は計算に時間がかかるので、上のようにかいたほうがいいでしょう。


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

Name: 木霊  ..初心者(7,132ポイント)   Date: 2008/03/26(水) 03:13   No:15150     
Title: Re:低速移動について    
 自分はこんな感じでやっています。
 どうせ敵弾で三角関数を使いまくっているので1回ぐらい計算が増えてもいいだろう、的な考えです。

#include "DxLib.h"

#include "math.h"

// ---- 関数の仮宣言
double Get_Angle ( int Input_Direction );
void Move ( double &Temp_X, double &Temp_Y, double Temp_Angle, double Temp_SPD );
void Renge_Check ( double &Temp_Shaft, double Temp_Min, double Temp_Max, double Temp_Size );
// -------- メイン関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow ) {
if ( DxLib_Init () == -1 ) { return -1; }// DXライブラリの初期化
SetDrawScreen ( DX_SCREEN_BACK );
ClearDrawScreen ();
// ---- 変数の宣言
int Input_Pad = 0;
double X = 320.0, Y = 240.0, Angle = 0, SPD = 4.0, SPD_Correct = 1.0;
// -------- ループ開始
while ( ProcessMessage () == 0 ) {
Input_Pad = GetJoypadInputState ( DX_INPUT_PAD1 );
Angle = Get_Angle ( Input_Pad );
SPD_Correct = ( ( Input_Pad & 16 ) >> 4 ) +1;// 低速ボタン(半分の速度に補正)
if ( Angle != -1.0 ) { Move ( X, Y, Angle, SPD /SPD_Correct ); }
// ↑角度が-1の時(どの方向も押されていない)は何もしない
DrawCircle ( X, Y, 20, GetColor ( 255, 255, 255), TRUE );
Renge_Check ( X, 0, 640, 20 );// X方向の表示範囲
Renge_Check ( Y, 0, 480, 20 );// Y方向の表示範囲
ScreenFlip ();
ClearDrawScreen ();
if ( CheckHitKey ( KEY_INPUT_F12 ) == 1 ) { break; }
}
DxLib_End ();
return 0;
}
// ---- 関数の実体
double Get_Angle ( int Input_Direction )// 押されているボタンから角度を返す
{
double Angle = -1.0;
switch ( Input_Direction & 1
+( Input_Direction & 2 )
+( Input_Direction & 4 )
+( Input_Direction & 8 ) ) {
case 1:Angle = 90.0;
break;
case 2:Angle = 180.0;
break;
case 3:Angle = 135.0;
break;
case 4:Angle = 0.0;
break;
case 5:Angle = 45.0;
break;
case 8:Angle = 270.0;
break;
case 10:Angle = 225.0;
break;
case 12:Angle = 315.0;
break;
default:Angle = -1.0;// どの方向も押されていない
break;
}
return Angle;
}
void Move ( double &Temp_X, double &Temp_Y, double Temp_Angle, double Temp_SPD )
{
Temp_X += cos ( Temp_Angle /180.0 *3.14159265358979323846 ) *Temp_SPD;// 度をラジアンに
Temp_Y += sin ( Temp_Angle /180.0 *3.14159265358979323846 ) *Temp_SPD;
return;
}
void Renge_Check ( double &Temp_Shaft, double Temp_Min, double Temp_Max, double Temp_Size )
{
if ( Temp_Shaft < ( Temp_Min +Temp_Size ) ) { Temp_Shaft = Temp_Min +Temp_Size; }
if ( Temp_Shaft > ( Temp_Max -Temp_Size ) ) { Temp_Shaft = Temp_Max -Temp_Size; }
return;
}


コピペで使えます(BCCで作成)


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

Name: 木霊  ..初心者(7,264ポイント)   Date: 2008/03/26(水) 03:34   No:15151     
Title: Re:低速移動について    
すみません、説明がほとんどありませんでした。


要は、
Get_Angle関数で、押してるボタンから角度を求め(8方向)、
Move関数で、その方向にSPDの値だけ進む。
ただし△ボタン(PSパッドで)押下中は半分の速度になり、
(SPD_Correct = ( ( Input_Pad & 16 ) >> 4 ) +1; の部分)
Check_Range関数で画面端でのストップ、
となっています。
 ちなみに表示されている円が画面端を少し行き過ぎて見えるのは、
円の描画の仕様(指定した半径通りの描画が行われていない為)です。


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

Name: <kor  ..かけだし(2,170ポイント)   Date: 2008/04/02(水) 11:09   No:15300 解決!     
Title: Re:低速移動について    
ありがとうございます。無事に低速移動させることができました。

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



Name: fffff  ..かけだし(1,022ポイント)   Date: 2008/03/31(月) 22:26   No:15283       
Title: ゲームプログラミングの館、23節に関する質問    
 こんばんわ。
 今朝質問に応答していただいたばかりでお恥ずかしい限りなのですが、
 読み返していて曖昧なまま理解していたつもりになっていた箇所を発見したので、
 早くも新たに質問を投稿させていただきました。

 ゲームプログラミングの館・23節「行けない所を作る。〜1D〜」の箇所に関する質問です。

――――――――――――――――――――――――――――――――――――――――――――――
int can_or_cannot(int x,int y,int muki){
  if(muki==1)
    if(hantei[x/32+1]==1)
      return 1;
  if(muki==3)
    if(hantei[x/32-1]==1)
      return 1;
  return 0;
}
――――――――――――――――――――――――――――――――――――――――――――――

 ここの hantei 関数の箇所にある [x/32+1] と [x/32-1] なんですが、
 これはどうしてそれぞれ +1,-1 と定義されているのでしょうか?
 x が既に hantei として「20個」定義されているので、x を32で割った箇所に該当する値が 1 かどうかをチェックする、
 というところまでは理解できています。
 ただ、この後ろについている +1,-1 がどういうことなのかが分かっていませんでした。

 申し訳ありませんが、どなたかご教授願えますでしょうか?


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


Name: 管理人 [URL]  ..伝説のハッカー(546,762ポイント)   Date: 2008/03/31(月) 22:51   No:15285     
Title: Re:ゲームプログラミングの館、23節に関する質問    
渡されるxはx/32が用意した領域内にあること前提です。


32ピクセルを一つとして考えた時、座標10は0番目の要素に属しますね?
36や40は1番目の要素に属します。
つまり座標を32で割れば属する要素になるわけです。int型において
10/32=0
36/32=1
40/32=1
ですよね。
つまり今自分がいる要素の右隣を調べたければx/32+1となりますし、左隣ならx/32-1となります。

mukiが1の時は右、3の時は左と定義しているのでそうなっているわけです。


if(muki==1)//左向きなら
if(hantei[x/32-1]==1)//通れないなら
return 1;//エラー
if(muki==3)//右向きなら
if(hantei[x/32+1]==1)//通れないなら
return 1;//エラー


 
色付きの部分が逆な気がしますけど、定義を変えればいいのでどちらでもいいです。


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

Name: fffff  ..かけだし(1,185ポイント)   Date: 2008/04/01(火) 21:57   No:15295 解決!     
Title: ありがとうございます    
 管理人様、度々ありがとうございます。
 要するに、ここで言う +1,-1 とは、
 それぞれの要素の「右隣の要素」と「左隣の要素」であることを現していたんですね。

 C言語はゼロから数えるということをちゃんと認識できていなかったようです……
 もっと精進して、いつか自分でゲームが作成できるように頑張りたいと思っています。
 今後ともよろしくお願いいたします。

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

 


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



Name: piyo  ..ぴよぴよ(26ポイント)   Date: 2008/03/29(土) 21:47   No:15230 解決!       
Title: 公開には何が必要か    
始めまして。

自分は、cの「はじめて」とか「簡単」等とタイトルにある参考書に書いてある程度の
基礎のプログラムは、大体作れるようになった者です。
最近、このサイトを見てゲームを作る勉強させてもらっています。

質問なのですが、作ったEXEファイルを他人に見てもらうには、EXEファイルの他に何が必要でしょうか?
Exeファイルだけ入れたCDを友人に渡したところ、
「メモ帳が出るだけで、見ることが出来ない」との事でした。
例えば、stdio.h等は同フォルダ内に必要なのですか?

宜しくお願いします。


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


Name: tkmakwins15 [URL]  ..比類無きプログラマー(65,076ポイント)   Date: 2008/03/29(土) 23:03   No:15231     
Title: Re:公開には何が必要か    
メモ帳でどのような表示があったか聞いてみてください。

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

Name: シュバ  ..入門者(3,409ポイント)   Date: 2008/03/29(土) 23:05   No:15232     
Title: Re:公開には何が必要か    
Releaseで作成したEXEファイルを渡したのでしょうか?

Debugで作成したものだと色々ファイルが必要になるのでReleaseで作成して渡す事をお勧め致します。

EXEファイルの他に音源や画像ファイルをEXEと同じ場所に入れておけばそれだけで起動すると思います。

検討違いのレスでしたら申し訳ありません。


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

Name: 通りすがり  ..初心者(7,339ポイント)   Date: 2008/03/29(土) 23:09   No:15234     
Title: Re:公開には何が必要か    
誤 検討違い
正 見当違い

正しい日本語を使いましょう。


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

Name: シュバ  ..入門者(3,430ポイント)   Date: 2008/03/29(土) 23:14   No:15235     
Title: Re:公開には何が必要か    
今、気がつきました。

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


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

Name: 管理人 [URL]  ..伝説のハッカー(542,362ポイント)   Date: 2008/03/29(土) 23:21   No:15236     
Title: Re:公開には何が必要か    
メモ帳が出るのは何かの間違いでは・・。

DXライブラリを使っているのだとして、
データはdatフォルダに入っているものと仮定します。
つまり、

LoadGraph("dat/image.png");

こんな風にプログラムで使用している場合です。
このように、データをdatフォルダに入れているのならdatフォルダも一緒に入れて下さい。
exeがある階層と同じ階層にして下さい。
無いとは思いますが、もし絶対パスで書いたりしている場合は(例えば[C:\Documents and Settings\sec\デスクトップ\新しいフォルダ\プログラム\ゲーム\dat])自分のPCじゃないと動かないので相対パスにして下さい。


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

Name: piyo  ..ぴよぴよ(294ポイント)   Date: 2008/04/01(火) 19:38   No:15294     
Title: Re:公開には何が必要か    
皆様ありがとうございます。分かりました。
プログラム内で、画像などのパスを使った文がある時だけ、
ファイルに入れれば良いのですね。

ちなみに、メモ帳には何が書いてあったかを聞いたら、

「K7AntiVirus detected a suspicious attachment(○.zip)
 and has Quarantined the attachment」
だそうでした。
ウイルスセキリュティに引っかかったみたいです・・・
それでもどうも、セキリュティを無効にしてみても、再度メモ帳が出てしまうみたいなのですが、
c言語とは関係ない分野なので、
自力で頑張ってみます。

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





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



Name: 木霊  ..初心者(7,341ポイント)   Date: 2008/03/31(月) 02:57   No:15245       
Title: 「管理人様の日記」へのレス(雑談)    
 2008年3月30日の管理人様の日記を読んだのですが、

どこに書きこめばいいか分からないのでここに書かせていただきます

http://pokegame.cool.ne.jp/free/_stg.html
の「HELLBOUND」(上の方)と「弾幕姉妹〜だんまくスール〜」(下の方)

http://www.freem.ne.jp/game/win/g00880.html

辺りが個人的にお勧めです

 ただ、「HELLBOUND」はエログロ、「弾幕姉妹〜だんまくスール〜」は二次創作物のマウスSTG
ですので、管理人様の趣味に合うかは(特に前者)分かりません
 また「Eden’s Edge」は「BLUE WISH RESURRECTION PLUS」と同作者です


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


Name: 管理人 [URL]  ..伝説のハッカー(542,783ポイント)   Date: 2008/03/31(月) 03:45   No:15246     
Title: Re:「管理人様の日記」へのレス(雑談)    
木霊さん、
ご紹介ありがとうございます^^

確かにエログロですよねw
初めて見たときはなんだこれ、と思いましたけど、結構遊べますね。
アイテムの吸い込みって出来ないのでしょうか?
アイテムがほとんど回収できない上に移動速度が遅いので何とかならないかな・・と。
ゲーム自体は面白いのですが、アイテムが取れないのと移動スピードが遅すぎるのがちょっとストレスたまるかもしれません・・。

x.xさん作製のシリーズはやはり二次創作だったんですか。
何となく怒首領蜂に似てるな〜と思っていましたが、関係あります?
x.xさんの作品は昔から最新作までピンクの弾しか出てきませんよね、何かこだわりがあるのでしょうかw
そしてDXライブラリで作られているんですね。

ご紹介ありがとうございます!製作の糧にしようと思います!
ちなみに、ブログの方は「コメント」でコメント残せますよっ☆


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

Name: 管理人 [URL]  ..伝説のハッカー(542,859ポイント)   Date: 2008/03/31(月) 03:51   No:15248     
Title: Re:「管理人様の日記」へのレス(雑談)    
最近初めて黄昏酒場をやってみたんですが、これ難しいですね〜・・。
コンテニューが無いっていうのが泣ける^^;
ヘタクソなので全然最後まで行けません;


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

Name: 木霊  ..初心者(7,516ポイント)   Date: 2008/04/01(火) 04:05   No:15291     
Title: Re:「管理人様の日記」へのレス(雑談)    
 わかりにくい書き方をしてすいません


一つ目のアドレスのページの「上の方」に「HELLBOUND」、
同じページの「下の方」に「弾幕姉妹」というゲームがあります、
という意味でした

 二次創作なのはこの「弾幕姉妹」の方です

 x.xさんのゲームは多分オリジナルですが、確かに怒首領蜂を思い出してしまいますね
基本構造が似通ってるからでしょうか?

 ところで「黄昏酒場」は会話の流れ的にSTGですよね?
 よろしければDL先等教えてもらえませんか?
 最近、欲しいと思うPS2、PS3のソフトが全く無いので・・・(年内だと音ゲーと「P4」だけ)


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

Name: 管理人 [URL]  ..伝説のハッカー(547,204ポイント)   Date: 2008/04/01(火) 04:17   No:15292     
Title: Re:「管理人様の日記」へのレス(雑談)    
あ、なるほど、弾幕姉妹見逃してました^^;
マウスシューティングとは新しい!(・・と思ってるのは私だけ?)
これ移動スピードによるストレスも無くていいですね!
アイテム吸収があったらもっといいのに・・。

いや〜色んなSTGの中でもジャンルをプレイすると刺激になりますね!ありがとうございます。

黄昏酒場はググって出てきません??
http://www.google.co.jp/search?hl=ja&q=%E9%BB%84%E6%98%8F%E9%85%92%E5%A0%B4&lr=

一番上のサイトからDL出来ますし、2番目で動画も見れますよ!
黄昏フロンティアだけあって、背景キレイですし、システムもしっかりしてます。
いや〜負けたっ。2で頑張りますw


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

Name: 木霊  ..初心者(7,643ポイント)   Date: 2008/04/01(火) 04:41   No:15293     
Title: Re:「管理人様の日記」へのレス(雑談)    
 あ、そうですね、ググれば大抵見つかりますよね
こんな時間なんでそこまで頭が回ってないですorz

明日にでもDLします。ありがとうございます


「弾幕姉妹」の場合、「弾幕を掻い潜りながらのアイテム回収」がスコアになるシステムですからね・・・
「HELLBOUND」の移動速度の遅さは仰る通りですけど


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



Name: tkmakwins15 [URL]  ..比類無きプログラマー(63,724ポイント)   Date: 2008/03/29(土) 00:19   No:15212       
Title: Hallo Worldプログラム    
雑談です。

プログラミングの1番始めの基礎の基礎であるHallo worldプログラムですが、一体どのくらいの数の違った数の実装が存在するのでしょうか?
という疑問を持ったので、Hallo Worldプログラムをたくさん集めてみようと思います。ですので、思いっきり滅茶苦茶なのでもいいので、いろいろな実装をお待ちしています。

条件
1:言語はC/C++/Javaのいずれか、規格を問いません。
2:空白は全て無視します(つまり見た目だけが異なるコードは同じとします)
3:環境依存のコードもその環境を明記の上OKですが、次の条件を満たすようにしてください。
  ・その環境でコンパイルして動く事。
  ・CUIであること。
4:出力結果は以下のようにしてください。

Hallo world!





まず自分から出します。言語はC++です。

#include<cstdio>
#include<vector>
using namespace std;

int main()
{
vector<char>hallostring;
hallostring.push_back('h');
hallostring.push_back('a');
hallostring.push_back('l');
hallostring.push_back('l');
hallostring.push_back('o');
hallostring.push_back(' ');
hallostring.push_back('w');
hallostring.push_back('o');
hallostring.push_back('r');
hallostring.push_back('l');
hallostring.push_back('d');
hallostring.push_back('!');

vector<char>::iterator itr=hallostring.begin();
for(;itr!=hallostring.end();itr++){
putchar(*itr);
}
return 0;
}

よろしくお願いします。


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


Name: フリオ  ..上級者(22,099ポイント)   Date: 2008/03/29(土) 00:37   No:15213     
Title: Re:Hallo Worldプログラム    
 Cで、

#include<stdio.h>

char *s = "Hello World!";

int main(void)
{
if(!*s) return 0;
fputc(*s ++, stdout);
main();
return 0;
}


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

Name: 組木紙織  ..熟練のプログラマー(45,371ポイント)   Date: 2008/03/29(土) 00:39   No:15214     
Title: Re:Hallo Worldプログラム    
では基本的なものを
言語はcです。
<code>

#include<stdio.h>
int main(void){printf("Hallo world!\n");return0;}
</code>


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

Name: GPGA  ..熟練のプログラマー(43,693ポイント)   Date: 2008/03/29(土) 01:02   No:15215     
Title: Re:Hallo Worldプログラム    
苦しんで覚えるC言語掲示板に昔投稿されたものです
http://hpcgi3.nifty.com/mmgames/patio/patio.cgi?mode=past&no=369


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

Name: 通りすがり  ..初心者(7,330ポイント)   Date: 2008/03/29(土) 01:43   No:15217     
Title: Re:Hallo Worldプログラム    
上記リンク先のようなコードが出ては後に続く投稿がなくなりそうです(w

IOCCC(International Obfuscated C Code Competetion)
http://www.ioccc.org/
1987年の優勝作品でこんなものがあるようです。
 

#include <stdio.h>
#define unix 1
main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}

hello worldじゃなくてすみません。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(64,061ポイント)   Date: 2008/03/29(土) 02:10   No:15218     
Title: Re:Hallo Worldプログラム    
>フリオさん

メイン関数の再帰呼び出しですか、これは思いつきませんでした。
ある意味でCとC++で互換性が無い部分をHalloWorldプログラムで提示しているということにもなってますね。

>組木紙織さん

たぶん最も本やHPに書いてあるパターンですね。

>GPGAさん

かなりすごいのが一つありましたけど…
苦しんで覚えるC言語」は約1年前にCやり始めたときに勉強していたページです。

ここで一つ思いついたので書いてみます。


#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<set>
using namespace std;

struct Check{
bool operator()(char a,char b){
return (bool)(rand()/(double)RAND_MAX+1);
}
Check(){}
};

int main()
{
multiset<char,Check>hallo;
for(const char *p="hallo world!";*p;p++){
hallo.insert(*p);
}
multiset<char,Check>::iterator itr=hallo.begin();
for(;itr!=hallo.end();itr++){
putc(*itr,stdout);
}
return 0;
}

もうすでにsetの使い方を明らかに逸脱していますが。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(64,129ポイント)   Date: 2008/03/29(土) 02:15   No:15219     
Title: Re:Hallo Worldプログラム    
>通りすがりさん

確かに何やってるか分からないですね。IOCCC…、Wikipediaで見たことはあるのですが…
確か目的は、皮肉的にプログラミング作法を伝えるなど…、でしたっけ?


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

Name: たかぎ [URL]  ..プログラマー(36,741ポイント)   Date: 2008/03/29(土) 13:58   No:15221     
Title: Re:Hallo Worldプログラム    
C言語で出来るだけ多くの関数を使うというのは、以前「苦C」で書きましたし、それは既に紹介されているようなので...

というわけで、C++で簡単なものから書いてみます。
#include <iostream>


// HelloではなくHalloなのは仕様
bool f = std::cout << "Hallo world!" << std::endl;

int main() {}


一ひねりだけしてあります。


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

Name: 組木紙織  ..熟練のプログラマー(45,834ポイント)   Date: 2008/03/29(土) 15:48   No:15222     
Title: Re:Hallo Worldプログラム    
コンストラクタとデストラクタを使った簡単なものです。
ちょっと長いけど。


#include <iostream>
#include <exception>
class A
{
public:
A(){std::cout<<'H';}
~A(){std::cout<<'!';throw std::exception();}
};

class B
{
private:
A a;
public:
B(){std::cout<<'a';}
~B(){std::cout<<'d';}
};

class C
{
private:
B b;
public:
C(){std::cout<<'l';}
~C(){std::cout<<'l';}
};

class D
{
private:
C c;
public:
D(){std::cout<<'l';}
~D(){std::cout<<'r';}
};

class E
{
private:
D d;
public:
E(){std::cout<<'o';}
~E(){std::cout<<'o';}
};

class F
{
private:
E e;
public:
F(){std::cout<<' ';}
~F(){std::cout<<'W';}
};



int main()
{
try{
F f;
}catch(...)
{
}
return 0;
}



#テンプレート使ったのも考えてみたいな。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(64,657ポイント)   Date: 2008/03/29(土) 15:56   No:15223     
Title: Re:Hallo Worldプログラム    
>たかぎさん

あっ、「ハロー」のつづり間違ってました。でもそれは気にしないでください。

>通りすがりさん

追記ですが、
>上記リンク先のようなコードが出ては後に続く投稿がなくなりそうです(w

今回の目的は、「とことんまでにHello Worldプログラムを無茶苦茶な実装をするとどうなるか」がテーマではなく、「とことんな数のHello Worldプログラムの実装を集める」ということがテーマなので、難しいということは考えなくてもよさそうです。
簡単なものでも難しいものでも、そこから学び取れるものは大きいと思うので、さまざまなコードからさまざまな事を学んでいこうと思ってこのトピを立てました。
※ネタが尽きると難しい方向に持っていかざるを得ないようには思いますが。

一度初心に戻って…

#include<iostream>

int main()
{
std::cout<<"Hallo World"<<std::endl;
return 0;
}

言語はC++です。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(65,021ポイント)   Date: 2008/03/29(土) 16:18   No:15224     
Title: Re:Hallo Worldプログラム    
>組木紙織さん

コンストラクタとデストラクタの呼び出しの順番を考慮して呼び出されるわけですね。

「苦C」でのたかぎさんのプログラムをちょこっとだけ参考にして…

#include<iostream>
#include<typeinfo>
#include<string>
using namespace std;

struct Hallo{
string operator()(){
return string(typeid(*this).name());
}
Hallo(){}
};

struct World{
string operator()(){
return string(typeid(*this).name());
}
World(){}
};

template<typename T>
void OutPut(T obj)
{
cout<<obj();
}

int main()
{
OutPut(Hallo());
cout<<' ';
OutPut(World());
cout<<'!'<<endl;
return 0;
}

templateとRTTIも投入してみました。


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

Name: hoge  ..かけだし(2,097ポイント)   Date: 2008/03/29(土) 17:02   No:15225     
Title: Re:Hallo Worldプログラム    
C++の次期規格で採用される可変長templateを使って書いてみました。


#include <iostream>
#include <iterator>

template <char... C>
class hallo;

template <char C>
class hallo<C>
{
public:
hallo()
{
*std::ostream_iterator<char>(std::cout) = C;
}
};
template <char C, char... X>
class hallo<C,X...>:public hallo<C>,public hallo<X...>{};

hallo<'H','a','l','l','o',' ','W','o','r','l','d','!','\n'> X;

int main(){}


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

Name: たかぎ [URL]  ..プログラマー(36,885ポイント)   Date: 2008/03/29(土) 18:06   No:15229     
Title: Re:Hallo Worldプログラム    
比較的簡単なもので、応用価値があるものだと、
#include <iostream>

#include <iterator>
#include <algorithm>

int main()
{
const char str[] = "Hallo world!\n";
std::copy(str + 0, str + sizeof(str), std::ostream_iterator<char>(std::cout));
return 0;
}


とか。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(65,490ポイント)   Date: 2008/03/29(土) 23:07   No:15233     
Title: Re:Hallo Worldプログラム    
>たかぎさん

ostream_iteratorは使い方が未だ良く分からないのですが、これはOutPutIteratorとして考えてもいいのでしょうか?

少々ググって調べてみたのですが、これでもHallo World!って表示されるようですね。

#include<stdio.h>

int main()
{
unsigned char sbyte[1000]={0};
unsigned char*byte=sbyte;

(*byte)+=9;

while(*byte){
byte++;
(*byte)+=8;
byte++;
(*byte)+=11;
byte++;
(*byte)+=5;
byte-=3;
(*byte)--;
}
byte++;
putchar(*byte);
byte++;
(*byte)-=2;
putchar(*byte);
(*byte)+=4;
(*byte)+=7;
putchar(*byte);
putchar(*byte);
(*byte)+=3;
putchar(*byte);
byte++;
(*byte)--;
(*byte)-=12;
putchar(*byte);
byte--;
(*byte)+=8;
putchar(*byte);
(*byte)-=8;
putchar(*byte);
(*byte)+=3;
putchar(*byte);
(*byte)-=6;
putchar(*byte);
(*byte)-=8;
putchar(*byte);
byte++;
(*byte)++;
putchar(*byte);
return 0;
}

一応文字コードがASCIIの状況でのみ有効なコードです。


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

Name: TT414  ..ぴよぴよ(742ポイント)   Date: 2008/03/30(日) 13:01   No:15238     
Title: Re:Hallo Worldプログラム    
int main ( void ) {
static char H[4], a[4], l[4], o[4], sp[4], w[4], r[4], d[4], em[4];
printf ( "%*s%n%*s%n%*s%n%*s%n%*s%n%*s%n%*s%n%*s%n%*s%n\n%c%c%c%c%c%c%c%c%c%c%c%c\n",' ',"",sp,'!'-' ',"",em,'H'-'!',"",H,'a'-'H',"",a,'d'-'a',"",d,'l'-'d',"",l,'o'-'l',"",o,'r'-'o',"",r,'w'-'r',"",w,H,a,l,l,o,sp,w,o,r,l,d,em);
return 0;
}


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(65,521ポイント)   Date: 2008/03/30(日) 15:04   No:15239     
Title: Re:Hallo Worldプログラム    
>TT414さん

このコードをコンパイルして実行してもわけのわからない出力がされてしまいます。
なぜでしょうか?


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

Name: たかぎ [URL]  ..プログラマー(36,894ポイント)   Date: 2008/03/30(日) 17:49   No:15240     
Title: Re:Hallo Worldプログラム    
> ostream_iteratorは使い方が未だ良く分からないのですが、これはOutPutIteratorとして考えてもいいのでしょうか?

はい。大丈夫です。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(65,729ポイント)   Date: 2008/03/30(日) 18:37   No:15241     
Title: Re:Hallo Worldプログラム    
>たかぎさん

ありがとうございます。最近になってやっとSTLの仕組みやRTTIが分かってきたので、一応質問しておこうと思いまして。


一つ出しときます。

#include<cstdio>
#include<string>
#include<algorithm>

int main()
{
std::string s="Hallo World!";
std::for_each(s.begin(),s.end(),std::putchar);
return 0;
}

関数オブジェクトの使い方間違ってるような気もしますが…


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

Name: TT414  ..ぴよぴよ(999ポイント)   Date: 2008/03/31(月) 10:41   No:15251     
Title: Re:Hallo Worldプログラム    
>tkmakwins15さん
しつれいしました。

int main ( void ) {
static char H[4], a[4], l[4], o[4], sp[4], w[4], r[4], d[4], em[4];
printf ( "%*s%n%*s%n%*s%n%*s%n%*s%n%*s%n%*s%n%*s%n%*s%n\n%s%s%s%s%s%s%s%s%s%s%s%s\n",' ',"",sp,'!'-' ',"",em,'H'-'!',"",H,'a'-'H',"",a,'d'-'a',"",d,'l'-'d',"",l,'o'-'l',"",o,'r'-'o',"",r,'w'-'r',"",w,H,a,l,l,o,sp,w,o,r,l,d,em);
return 0;
}

でした


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(65,823ポイント)   Date: 2008/03/31(月) 12:04   No:15252     
Title: Re:Hallo Worldプログラム    
>TT414さん

確かに表示されました。でもどういうからくりなのでしょうか?


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

Name: Sleepy  ..かけだし(2,379ポイント)   Date: 2008/03/31(月) 22:04   No:15282     
Title: Re:Hallo Worldプログラム    
文字列の定義を外出ししてみました。


#include "stdio.h"

int main(int argc, char **argv)
{
if(argc > 1)
{
puts(argv[1]);
}
return 0;
}



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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(66,118ポイント)   Date: 2008/03/31(月) 23:14   No:15286     
Title: Re:Hallo Worldプログラム    
>Sleepyさん

確かにコマンドラインにHallo Worldと渡せば表示はされますね。

世の中にはC/C++/JavaではありませんがこれでHello World!って出力されるプログラミング言語があるようです。

H
↑ソースコードです。
Cに戻って…、例えばこんなのもありかな…

#include<stdio.h>

int rand(void);

int main(void)
{
int i;
for(i=0;i<12;i++){
putchar(*("w!olloH dlra"+rand()));
}
return 0;
}

int rand(void)
{
static int random=1;
random=(random*13+5)%12;
return random;
}

言語はCです。C++でもコンパイルはできますが…


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

Name: のどが痛い  ..ぴよぴよ(63ポイント)   Date: 2008/04/01(火) 00:16   No:15288     
Title: Re:Hallo Worldプログラム    
>tkmakwins15さん
最初の%*sの最小フィールド幅は' 'の値になります。
sには""が対応するので結局%nまでの文字数=' 'の値になります。
%nまでの文字数がsp[0]に入るので結果' 'の値を入れることになります。
他の文字も同様です。

手ぶらではあれなので一応私も載せておきます。

#include<stdio.h>
int main ( void ) {
int i;
for(i=0;i<12;i++) printf("%c","Hallo World!"[i]);
return 0;
}


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(66,262ポイント)   Date: 2008/04/01(火) 00:29   No:15289     
Title: Re:Hallo Worldプログラム    
>のどが痛いさん

あっ、なるほど、%nの使い方がポイントなわけですね。

一応C++で…

#include<iostream>
#include<sstream>
#include<string>
using namespace std;

int main()
{
ostringstream str;
str<<"Hallo World!"<<ends;
cout<<str.str()<<endl;
return 0;
}


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



Name: com  ..ぴよぴよ(684ポイント)   Date: 2008/03/31(月) 13:50   No:15253       
Title: シューティングゲームの館での    
4.基本的な関数を作る。
のプログラムを自分のやりやすいように変えてやってみると
実行結果のようにはいかず
また、プログラムソースを丸写しでも実行結果と同じようになりませんでした。

やってみた結果はFPSだけが表示されあとは真っ暗なままでした。

解決法はあるでしょうか?
それとも私だけでしょうか?


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


Name: 管理人 [URL]  ..伝説のハッカー(543,676ポイント)   Date: 2008/03/31(月) 14:40   No:15254     
Title: Re:シューティングゲームの館での    
コンパイラはBorlandでしょうか?
もしそうなら、

void img_sound_load()関数内でロードしているデータは

Debugフォルダに入れなければならないのを入れていないのではないでしょうか。
ゲームプログラミングの館の方ではうまくいきましたか?


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

Name: com  ..ぴよぴよ(739ポイント)   Date: 2008/03/31(月) 16:18   No:15260 解決!     
Title: Re:シューティングゲームの館での    
素材ファイルの位置がおかしかったようです。

VusualC++を使用していますがご指摘で気づきました。

簡単なミスで申し訳ないです。

ありがとうございます。


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

Name: com  ..ぴよぴよ(949ポイント)   Date: 2008/03/31(月) 18:15   No:15265     
Title: Re:シューティングゲームの館での    
続けて質問すみません。
使用はVusualC++です。

5節の分割コンパイルについてですが
同じように組んでいても
error C2039: 'status' : 'CharaData' のメンバではありません。
error C2146: 構文エラー : ';' が、識別子 'status' の前に必要です。



このほかにも(似たようなエラーを)60ぐらいのを吐き出します。
メンバに関してもちゃんと入っているのにこのようなエラーが出て
構文エラーに関しては間違っていないのにこのようなエラーがでます。

他のプログラムの本でも毎回分割コンパイルでつんでしまいます。

どなたか教えてください。


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

Name: 管理人 [URL]  ..伝説のハッカー(544,519ポイント)   Date: 2008/03/31(月) 18:16   No:15266     
Title: Re:シューティングゲームの館での    
簡単な分割コンパイルなら出来ます?


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

Name: 管理人 [URL]  ..伝説のハッカー(544,878ポイント)   Date: 2008/03/31(月) 18:26   No:15267     
Title: Re:シューティングゲームの館での    
簡単な分割コンパイルについてやってみましょう。
まず、ゲームプログラミングの館の5節で紹介しているコードを用います。
これです。


#include "DxLib.h"

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


int White,Red,G_Blue;

White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
Red = GetColor( 255 , 0 , 0 ) ; // 赤色の値を取得
G_Blue = GetColor( 0 , 255 , 255 ) ; // 緑と青の混合色の値を取得

DrawLine ( 10 , 10 , 630 , 10 , White ) ; // 線を描画
DrawBox ( 10 , 50 , 310 , 100 , G_Blue , FALSE) ; // 四角形を描画
DrawBox ( 10 , 150 , 310 , 200 , G_Blue , TRUE ) ; // 四角形を描画(塗りつぶし)
DrawCircle( 500 , 300 , 100 , Red , TRUE) ; // 円を描画(塗りつぶし)


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

 
DXライブラリのサンプル実行用フォルダにあるプロジェクトでいいので、これをコピペしてください。
これを分けてみますね。
真ん中の部分を抜き取って、draw_graph()という関数


void draw_graph(){
int White,Red,G_Blue;

White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
Red = GetColor( 255 , 0 , 0 ) ; // 赤色の値を取得
G_Blue = GetColor( 0 , 255 , 255 ) ; // 緑と青の混合色の値を取得

DrawLine ( 10 , 10 , 630 , 10 , White ) ; // 線を描画
DrawBox ( 10 , 50 , 310 , 100 , G_Blue , FALSE) ; // 四角形を描画
DrawBox ( 10 , 150 , 310 , 200 , G_Blue , TRUE ) ; // 四角形を描画(塗りつぶし)
DrawCircle( 500 , 300 , 100 , Red , TRUE) ; // 円を描画(塗りつぶし)
}


を作り、他のファイルに移してみましょう。
まず、ソリューションエクスプローラーの
「DxLib_VC2005用」上で右クリックし「追加」>「新しい項目」を選びます。
左側で[コード]が選択されていることを確認し、右側でc++を選択し、名前は適当にtest2とでもしましょう。

出てきたtest2.cppの画面に、先ほど作った関数を書いてみます。
DxLib.hのインクルードはDXライブラリの関数を使うファイルでは全て呼ぶ必要があるので、
test2.cppとtest.cppの記述は以下のようになります。

--------------------test2.cpp--------------------

#include "DxLib.h"

void draw_graph(){
int White,Red,G_Blue;

White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
Red = GetColor( 255 , 0 , 0 ) ; // 赤色の値を取得
G_Blue = GetColor( 0 , 255 , 255 ) ; // 緑と青の混合色の値を取得

DrawLine ( 10 , 10 , 630 , 10 , White ) ; // 線を描画
DrawBox ( 10 , 50 , 310 , 100 , G_Blue , FALSE) ; // 四角形を描画
DrawBox ( 10 , 150 , 310 , 200 , G_Blue , TRUE ) ; // 四角形を描画(塗りつぶし)
DrawCircle( 500 , 300 , 100 , Red , TRUE) ; // 円を描画(塗りつぶし)
}


--------------------------test.cpp-----------------------------------


#include "DxLib.h"

extern void draw_graph();

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


draw_graph();


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


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

 
うまくいきました?

ちなみに、test.cppで書いている
extern void draw_graph();
はエクスターン宣言といって、違いファイルにある関数を違うファイルで呼ぶときに、
「どっかのファイルにこの関数がありますよ」と言うことを示すものです。
関数を呼ぶほうのファイルに書いてください。


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

Name: com  ..ぴよぴよ(986ポイント)   Date: 2008/03/31(月) 18:29   No:15268 解決!     
Title: Re:シューティングゲームの館での    
もういちど5節の最初の簡単な分割をやってみましたが
できませんでした。;;;

なぜでしょうか?


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

Name: com  ..ぴよぴよ(988ポイント)   Date: 2008/03/31(月) 18:31   No:15269     
Title: Re:シューティングゲームの館での    
上に書き込まれたものを試して見ます。
わざわざすみません。


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

Name: 管理人 [URL]  ..伝説のハッカー(544,932ポイント)   Date: 2008/03/31(月) 18:31   No:15270     
Title: Re:シューティングゲームの館での    
むむむ・・。

上記の手順でどこで躓きます?
上のサンプルを実行したときどんなエラーが出ますか?


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

Name: 管理人 [URL]  ..伝説のハッカー(545,376ポイント)   Date: 2008/03/31(月) 18:38   No:15271     
Title: Re:シューティングゲームの館での    
なお、
5節では、たったこれだけしか書いていないので



/*test.cpp*/

#include <stdio.h>

char a[30]="hello";

extern void disp();

void main(){

disp();

}

/* test2.cpp */

#include <stdio.h>

extern char a[30];

void disp(){

printf("%s",a);

}

 
error C2039: 'status' : 'CharaData' のメンバではありません。
error C2146: 構文エラー : ';' が、識別子 'status' の前に必要です。

のようなエラーが出るのはおかしいです。このような変数は使っていません。
きっと、プロジェクトではない、別のファイルか何かに書き込んでいるのではないでしょうか?

なお、DXライブラリのプロジェクトはコンソールのプロジェクトではないので、
5節はサンプルプログラム実行用フォルダにあるプロジェクトではコンパイル出来ません。
5節をコンパイルするときは、コンソール用のプロジェクトで行ってください。
6節からはDXライブラリ用のプロジェクトでコンパイル可能です。


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

Name: com  ..かけだし(1,026ポイント)   Date: 2008/03/31(月) 18:42   No:15272     
Title: Re:シューティングゲームの館での    
先ほどのサンプルプログラム試してきました。
どうやらうまくいったようです!

error C2039: 'status' : 'CharaData' のメンバではありません。
error C2146: 構文エラー : ';' が、識別子 'status' の前に必要です。
を書き込んだプログラムは5節ではなく6節のものでした。

となると何がおかしかったのでしょうか?
ライブラリ使用前の設定でしょうか・・・?


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

Name: 管理人 [URL]  ..伝説のハッカー(545,424ポイント)   Date: 2008/03/31(月) 18:52   No:15274     
Title: Re:シューティングゲームの館での    
うーん、そもそもCharaDataなんて変数は無いと思うのですが・・。
どこかに

CharaData.status

みたいな記述があるんですよね?
どこにCharaDataが書いてありますか?
Ctrl+FでCharaDataで検索すれば見つかります。

最悪の場合
ソースとプロジェクトのダウンロード
で完成したプロジェクトがダウンロードできますので、そちらご利用下さい。


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

Name: com  ..かけだし(1,173ポイント)   Date: 2008/03/31(月) 19:02   No:15275     
Title: Re:シューティングゲームの館での    
typedef struct{
   double x,y;
   int status,counter;
   int shot [11][15];
} BODY_player_t;

extern BODY_player_t Player;



typedef struct{
  double x,y;
  int status,counter;
  int shot [11][15];
} CharaData;

extern CharaData Player;
に変えています。


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

Name: com  ..ぴよぴよ(975ポイント)   Date: 2008/03/31(月) 19:21   No:15277     
Title: Re:シューティングゲームの館での    
しつこいようですみません。

先ほどの何も変えずにそのまま入れたら成功しました。

どういうことでしょうか?
typedef struct{
   double x,y;
   int status,counter;
   int shot [11][15];
} BODY_player_t;

extern BODY_player_t Player;

の[BODY_player_t;]というのは[CharaData]に置き換えることはできないのでしょうか?
含めて[extern BODY_player_t Player;]というのを[CharaData Player;]に変えることがなぜできないのでしょうか?


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

Name: 管理人 [URL]  ..伝説のハッカー(546,250ポイント)   Date: 2008/03/31(月) 19:31   No:15278     
Title: Re:シューティングゲームの館での    
2つ上の投稿の内容がただしければそれは出来ます。
名前が変わっただけなので。

しかし[extern BODY_player_t Player;]というのを[CharaData Player;]という変更は出来ません。
先ほども書きましたとおり、extern宣言というのは、同一ファイル内で宣言していないものを他のファイルで使用するとき「どっかのファイルに定義があるから探してね」という意味なので、
定義するファイルでは

CharaData Player;

と書きますが、それを利用するほかのファイルでは

extern CharaData Player;

と書かなければいけません。
名前を変えることは出来ます。CharaDataという名前でもかまいません。


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

Name: 管理人 [URL]  ..伝説のハッカー(546,316ポイント)   Date: 2008/03/31(月) 19:33   No:15279     
Title: Re:シューティングゲームの館での    
また、タグの名前は、他の変数名と混合しないよう、後ろに_tをつけるのが一般的なようです。
別に義務ではないですが、パッとみてすぐタグ名だとわかるので、_tをつけるのがおススメです。


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

Name: com  ..ぴよぴよ(984ポイント)   Date: 2008/03/31(月) 19:36   No:15280 解決!     
Title: Re:シューティングゲームの館での    
なるほど。こんな質問に時間をかけてしまいすみませんでした。

また何かあったら質問させていただきますがそのときは
よろしくお願いします。

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


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



Name: pocjhi  ..ぴよぴよ(109ポイント)   Date: 2008/03/31(月) 16:53   No:15261       
Title: いつも勉強させてもらっています。    
はじめまして。といっても名前変えて何回か掲示板にコメント
書いてますが・・。いやーすごいですね。このサイト。すごく
勉強になります。C++始めたばかりなんでわからないこと
だらけなのです。みたところ管理人さんは学生さんのようで
すが相当頭のよい方だとびっくりしています。プログラム
関係のHPの中ではこのサイトはピカイチだと思っています。
わたしもはやく管理人さんのようなプログラム組めるように
がんばりたいと思います。応援しています!!


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


Name: 管理人 [URL]  ..伝説のハッカー(544,502ポイント)   Date: 2008/03/31(月) 18:04   No:15264     
Title: Re:いつも勉強させてもらっています。    
>pocjhiさん

ありがとうございます^^
また、サイトをほめて頂き恐縮です。

ただ、頭がいいなんて事は全くないです。
私自身大学2年生までC言語というものを書いたことすらなく、
大学3年のC言語の授業の宿題は友達のコピーを提出していた始末でした。
3年生の頃、C関係のサイトを回ってみても、いまいちよく解らず、
質問掲示板で質問すれば、質問の仕方が悪いと叩かれると、そんな感じでした。

そういう経験があるので、よりわかり易く説明を書こう、とか、
初心者で質問の仕方もわからない質問者でも叩かれないような掲示板を作ろうと思ったんです。
私自身、Cに自身があったり、知識を提供したりする為にサイトを作ったわけではなく、
以前、嫌な経験があったので、そんな思いをしなくて済むサイトが作りたかったんです。

ここで回答されていらっしゃる方の多くはプロのプログラマーであったり、熟練のプログラマーの方が多いので、
こんなCの入門者の端くれがサイトを作るのは片身が狭いですけど、入門者なりに頑張っていきます(_ _)

私がCに目覚めたのは大学3年の終わりで、自分でゲームが作れることに楽しみを感じてからです。
なので、まだC歴は2年なのですが、Cを学ぶことが「勉強」から「趣味」に変わってからは全く世界がかわりました。
まだ「上手」と呼べるには程遠いですが、「好きこそものの上手なれ」という言葉はその通りだと思います。
好きなら休憩も入らないし、意欲的に勉強できますしね。
長期休暇中は1日15時間プログラミングを2週間休み無しで続けたりしました。
(単なるヒっキーだと言われたらそれまでですが^^;)

私が思うに、プログラミングの上達は「面白い」と感じられるかどうかにかかっていると思います。
pocjhiさんも、ご自分の興味のある分野で面白いとお感じになれば、グッっと成長されると思います。頑張ってください。


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



Name: fffff  ..ぴよぴよ(796ポイント)   Date: 2008/03/31(月) 03:52   No:15249       
Title: ゲームプログラミングの館、24節に関する質問    
 こんばんわ。ゲームプログラミングの館にて、ありがたく勉強をさせていただいております。
 最近ではプログラムの解読がようやく、少しずつ出来るようになってきた次第です。
 ですが、24節「行けない所を作る。〜2D〜」のプログラム部分にて、理解できない部分があったので、
 恐れ多くも再度こちらに質問を投稿させていただきました。

――――――――――――――――――――――――――――――――――――――――――――――
/*白い壁を描画*/
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(hantei[i][j]==1)
DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(255,255,255),TRUE);
――――――――――――――――――――――――――――――――――――――――――――――

 質問なのは、一番最後の行の「DrawBox」内のものです。
 J*32、i*32、GetColor〜は意味が何となく分かるのですが、

 その後の (j+1)*32,(i+1)*32, が何を意味しているのかが分からず、頭を抱えています。
 この部分を消してしまうとエラーが出てしまいますし、どんな役割を担っているのかが分かりません……。

 申し訳ありませんが、どなたかご教授いただけないでしょうか?


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


Name: 管理人 [URL]  ..伝説のハッカー(543,552ポイント)   Date: 2008/03/31(月) 04:09   No:15250     
Title: Re:ゲームプログラミングの館、24節に関する質問    

こんにちは。
「なんとなく」ではなく、しっかりと理解出来るまで突き詰めたほうが後々楽なので、
是非しっかり勉強して力にして下さい。

DrawBoxは左上のx,y座標(x1,y1)と右下のx,y座標(x2,y2)を渡せば
そこに四角形を書いてくれる関数ですよね。
つまり

DrawBox(x1,y1,x2,y2,略,略);

ですから、10,20から120x120のサイズの四角形を書きたければ

DrawBox(10,20,130,140,略,略);

となるわけです。
ここで、30x30の四角形を横に5個書くにはどうしたらいいでしょうか。
一番左の四角形は

DrawBox(0,0,30,30,略,略);

ですね?同じ意味ですが、違う書き方をして見ましょう。

DrawBox(30*0,30*0,30*1,30*1,略,略);

コレおなじことですね。じゃ横に5個書いて見ましょう。

DrawBox(30*0,30*0,30*1,30*1,略,略);
DrawBox(30*1,30*0,30*2,30*1,略,略);
DrawBox(30*2,30*0,30*3,30*1,略,略);
DrawBox(30*3,30*0,30*4,30*1,略,略);
DrawBox(30*4,30*0,30*5,30*1,略,略);

こうなりますよね?これfor文で書くと

for(i=0;i<5;i++)
DrawBox(30*i,30*0,30*(i+1),30*1,略,略);

こういうことですよね。
これを縦方向にも5つ書き、計25個書くと

for(i=0;i<5;i++)
for(j=0;j<5;j++)
DrawBox(30*i,30*j,30*(i+1),30*(j+1),略,略);

こうなるわけです。左側の「略」は色を指定する部分です。
GetColor関数に0〜255の色情報を渡せばその色の値が返ってきます。
光の3原色は全てあわせると白になりますから、

GetColor(赤,緑,青)としてGetColor(255,255,255)を渡すのです。するとシロになります。

最後の略にはTRUEかFALSEが入ります。
TRUEにすると、塗りつぶし、FALSEにすると外枠だけになります。
今は塗りつぶしたいのでTRUEにしています。
こうして

for(i=0;i<5;i++)
for(j=0;j<5;j++)
DrawBox(30*i,30*j,30*(i+1),30*(j+1),GetColor(255,255,255),TRUE);

となるわけです。
お解かりいただけたでしょうか?

「何となく解ったから次に行こう」

を繰り返していくと、「あれ?最後まで読んだのに全然わからない」ということに
なりかねませんので、是非着実に進めて下さい。

解らない事があったらご質問下さい。
 
 


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

Name: fffff  ..ぴよぴよ(588ポイント)   Date: 2008/03/31(月) 17:19   No:15263 解決!     
Title: どうもありがとうございます    
なるほど。
DrawBox内の箇所はそれぞれの「始点」と「終点」を意味していたんですね。
それだけではなく、ちゃんと For 文の箇所も分かり安く説明していただけて、大変助かりました。
特に「同じ意味だけど違う書き方」という表現がプログラミングにはあるということを忘れていたので、
今更ながら自分の学力不足を思い知らされました。

関数の説明を表記しているサイトがあることも思い出しましたし、
次はもう少し自力で進めてから質問してみるようにします。

どうもありがとうございました。
今後もまた分からないところで行き詰ると思いますが、そのときはまたよろしくお願いします。
ありがとうございました。


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



Name: 水孤  ..ぴよぴよ(381ポイント)   Date: 2008/03/31(月) 15:38   No:15256       
Title: シューティングゲームの館にて    
現在、このサイトをみてプログラムの勉強をさせてもらっています。一通りC言語の知識はついています。
今のところ、シューティングゲームの館の32. ボスの弾幕1までいっています。
そこの弾が分裂し方向転換した後の処理がどういう流れで動いているのかはわかるのですが、具体的に何をしているのかがわかりません。

自分なりに解釈しようとしましたが、今ひとつピンときません。
まだプログラミングに慣れていない者なので、誰か教えてくれるとありがたいです。






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


Name: 管理人 [URL]  ..伝説のハッカー(543,862ポイント)   Date: 2008/03/31(月) 16:03   No:15259     
Title: Re:シューティングゲームの館にて    
最後の処理はあまり意味の無い事をしています。
複雑な軌道を描いた時や、移動しているのとは違う方向に弾を表示させたい時の為に、実際に移動する角度と表示する弾の角度は別に変数を用意してあります。
今は単純な起動しか描かないので表示する弾の角度をいちいち計算する必要は特にないです。

実際に移動した方向から表示すべき角度を計算しています。
その際一緒に実際に移動する計算と、角度を変更する計算を一緒にやっています。
実際はこの計算部分は別の関数でするべきですが・・。


注釈を少し書いたので添付します。


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

Name: 水孤  ..ぴよぴよ(442ポイント)   Date: 2008/03/31(月) 17:12   No:15262 解決!     
Title: Re:シューティングゲームの館にて    
すばやい回答ありがとうございます。
おかげで、ひっかかっていた部分がすっきりしました。
これからも何度か質問させてもらうこともあると思いますがよろしくお願いします。


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



Name: がまぐち  ..ぴよぴよ(168ポイント)   Date: 2008/03/31(月) 14:54   No:15255       
Title: ChangeWindowModeについて    
VisualC++2005とDXライブラリを使ってゲームを作っているものです。
ChangeWindowModeについて質問させてください。
ChangeWindowModeを使用するとウィンドウモードに切り替えられますが、
そのウィンドウのサイズは640×480だと思います。
ウィンドウのサイズをもう少し大きく、もしくは小さくする場合には
どうすれば良いでしょうか?

よろしくお願いしますm(__)m


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


Name: 管理人 [URL]  ..伝説のハッカー(543,766ポイント)   Date: 2008/03/31(月) 15:47   No:15257     
Title: Re:ChangeWindowModeについて    
SetGraphModeという関数を使います。
例えば

SetGraphMode(800,600,32);

にすると、800x600のサイズで32bitで表示されます。

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

こちらをご覧下さい。


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

Name: がまぐち  ..ぴよぴよ(280ポイント)   Date: 2008/03/31(月) 15:55   No:15258 解決!     
Title: Re:ChangeWindowModeについて    
わざわざお忙しい中ありがとうございます。無事解決しました。
分からないところがあれば、今後もよろしくお願いします。


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



Name: 暗い  ..ぴよぴよ(12ポイント)   Date: 2008/03/31(月) 00:42   No:15242       
Title: 初心者なんですが    
初心者質問ですが
borlandの方でプログラミングやってるんですけど
#include "DxLib.h"

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


LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;


WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}


このプログラム実行した後に

LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;の上行に

LoadGraphScreen( 0 , 0 , "back.bmp" , FALSE ) ;このプログラムを追加して実行しても一切実行結果が反映されず

#include "DxLib.h"

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


LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;


WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
なぜかこの変更前のプログラムの結果のみ表示されます
エラーは一切出てないのですが全く反映されないのは明らかにおかしいです。
直し方教えてください。
お願いします


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


Name: tkmakwins15 [URL]  ..比類無きプログラマー(65,803ポイント)   Date: 2008/03/31(月) 01:00   No:15243     
Title: Re:初心者なんですが    
書き換えたらしっかりとコンパイルしないといけませんよ。

もしくは、back.bmpファイルがEXEのあるフォルダに無いのでしょう。
たぶんDxLibを解凍したフォルダの、「サンプルプログラム実行用」フォルダ→「Debug」フォルダの順に見ていけばあるはずです。


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

Name: 管理人 [URL]  ..伝説のハッカー(542,550ポイント)   Date: 2008/03/31(月) 01:09   No:15244     
Title: Re:初心者なんですが    
画像ファイルがちゃんとあるかどうか確認して、それでもよくわからなければ、関数の返り値を調べたらいいですよ。

int error;

error=DrawGraph(x,y,Image_Hangle,TRUE);
printfDx("%d",error);

こんな感じで描画した値を表示させてみて下さい。きっと-1と表示されるでしょう。
関数の返り値による状態の違いはリファレンスページをご覧下さい。

恐らくDebugフォルダに画像が入ってないだけだと思います。


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



Name: kz  ..かけだし(1,358ポイント)   Date: 2008/03/29(土) 17:37   No:15226       
Title: string型はprintfで出力できますか?    
タイトルどおりなのですが、string型で宣言した文字列をprintf文で出力しようと%sで出力しようとしたのですが、結果がnullになってしまいました。
ですのでstring型をprintfで出力する方法はあるのでしょうか?


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


Name: tkmakwins15 [URL]  ..比類無きプログラマー(65,058ポイント)   Date: 2008/03/29(土) 17:44   No:15227     
Title: Re:string型はprintfで出力できますか?    
これでいいはずです。
std::string str="Hello";
std::printf("%s",str.c_str());


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

Name: kz  ..かけだし(1,380ポイント)   Date: 2008/03/29(土) 18:05   No:15228 解決!     
Title: Re:string型はprintfで出力できますか?    
tkmakwins15さんありがとうございました。無事出力できました!

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



Name:  ..ぴよぴよ(180ポイント)   Date: 2008/03/27(木) 21:55   No:15185       
Title: 透過処理のpngファイルについて・・・    
bmpファイルを透過処理して表示していたのですが、容量が大きいため
bmpファイルをペイントで読み込んで、pngファイルとして保存し
プログラムで透過処理のTRUEを入れ表示しました
ところが、黒い部分が透過処理されずそのままの形で表示されますorz
ペイントで変換したpngファイルとかはダメなんですか?
確認したところ黒の色はr=0,g=0,b=0,色合い160(変えられない),鮮やかさ0,明るさ0でした
これじゃ透過されないのでしょうか?
助言お願いしますorz


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


Name: 管理人 [URL]  ..伝説のハッカー(542,031ポイント)   Date: 2008/03/27(木) 22:50   No:15186     
Title: Re:透過処理のpngファイルについて・・・    
ペイントでは透過処理出来ないと思います。
あのチェック項目は操作しても何故か反映されないので、GIMPやフォトショップのような高機能画像ソフトを使って下さい。
ちなみに、「真っ黒」なら透過出来ます。少しでも黒でなかったら透過されないので、真っ黒であることを確認してください。
DrawGraph等関数の透過フラグをTRUEにして表示して下さい。


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

Name:  ..ぴよぴよ(195ポイント)   Date: 2008/03/29(土) 02:22   No:15220 解決!     
Title: Re:透過処理のpngファイルについて・・・    
実際やってみたところできました。
ありがとうございます。


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



Name: カル  ..初心者(5,484ポイント)   Date: 2008/03/28(金) 08:13   No:15191       
Title: 曜日のズレ    
また同じような質問ですいません・・・
以前みなさんにアドバイスをもらって作ったソースでなんとか表示させることはできました
今回はそれとは別で(少し手を加えた程度なのですが)作ってみたんですけど
曜日がずれてしまって困っています。
何かアドバイスなどあればよろしくおねがいします




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


Name: box  ..ハッカー(108,757ポイント)   Date: 2008/03/28(金) 08:50   No:15192     
Title: Re:曜日のズレ    
変数sumの意味合いがいまひとつよくわかりません。

今回のようなケースの定番である
「Zellerの公式」または「ツェラーの公式」について
調べてみるとよいでしょう。


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

Name: マルチポスト  ..ぴよぴよ(65ポイント)   Date: 2008/03/28(金) 10:44   No:15195     
Title: Re:曜日のズレ    
http://oshiete1.goo.ne.jp/qa3900603.html

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

Name: やそ  ..プログラマー(36,544ポイント)   Date: 2008/03/28(金) 13:55   No:15199     
Title: Re:曜日のズレ    
1.うるう年判定のfor文の閉じかっこの位置がおかしくないですか?

2.if文の中にi++があるのはなぜ?

3.前月までの日数の計算でまたiを使っていますね。混乱する元になるので、他の変数を用意するべきでしょう。
jとかでいいんじゃないかな。

4.
year--
year++
がありますが、その2命令の間でyearは使われていないので、意味がなさそうです。

おもに1と2が原因でsumの計算がおかしくなっています。


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

Name: box  ..ハッカー(108,785ポイント)   Date: 2008/03/28(金) 15:11   No:15201     
Title: Re:曜日のズレ    
そもそも、変数sumの値を構成する要素に
「うるう年の回数」を含めることによって
何がしたいのでしょうか?


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

Name: あきら  ..初心者(7,338ポイント)   Date: 2008/03/28(金) 15:22   No:15202     
Title: Re:曜日のズレ    
カル様

少し本題からずれるかもしれませんが,質問があります。

マルチポスト様が投稿なさったURLのリンク先にある記事は,カル様が書かれたものでしょうか?


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

Name: Mist  ..ぴよぴよ(974ポイント)   Date: 2008/03/28(金) 17:16   No:15204     
Title: Re:曜日のズレ    
http://oshiete1.goo.ne.jp/qa3881382.html

同一人物だとするとフローチャートのころからマルチしてるね。


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

Name: やそ  ..プログラマー(36,684ポイント)   Date: 2008/03/28(金) 18:00   No:15205     
Title: Re:曜日のズレ    
box様へ

うるう年の回数をsumに足しているのは1/1/1からの日数を数えるためですね。
で総日数を出して、7で割った余りを元に曜日を算出したいと言う処理です。

でもグレゴリウス暦って、15xx年の暦の改定時に調整用の空白の10日間があった気がするんですよね・・・。
その辺もきっと調整しないといけないよねぇ・・・。


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

Name: box  ..ハッカー(108,862ポイント)   Date: 2008/03/28(金) 18:32   No:15206     
Title: Re:曜日のズレ    
平年は365日ですので、7で割ると1余りますね。
毎年少なくとも1日分ずつ(うるう年の場合は2日分)、
前年同月同日の曜日とずれていきますね。

というわけで、sumを求めるときにうるう年の回数を計上するのでは、
具合が悪いです。
きちんと、日数をカウントしないとまずいでしょうね。


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

Name: 通りすがり  ..初心者(7,178ポイント)   Date: 2008/03/28(金) 20:57   No:15207     
Title: Re:曜日のズレ    
マルチポストは規約違反なので、皆さんとりあえず、回答を待ってはいかがでしょうか?
規約違反をしているのに、回答を進めると、皆で規約違反を許している事に繋がると思いますし。


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

Name: マルチ  ..ぴよぴよ(53ポイント)   Date: 2008/03/28(金) 21:12   No:15208     
Title: Re:曜日のズレ    
いや、もっと前からですよ。知ってる限りでは1月位。
いつもマルチポストをしているようです。
http://www.play21.jp/board/formz.cgi?action=res&resno=13556&page=&id=dixq&lognum=43
たかぎさんが「でもよく似た質問をされている方がいます」と言っているのは他でもないCARUCARUさんですし、
またあたらに他にもマルチポストされてますが、そちらでは注意されて閉じているようです。


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

Name: カル  ..初心者(5,539ポイント)   Date: 2008/03/28(金) 22:34   No:15209     
Title: Re:曜日のズレ    
携帯から失礼します
皆さんのおっしゃる通りマルチしていました。不快な思いをさせてしまい申し訳ありませんでした。


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

Name: 管理人 [URL]  ..伝説のハッカー(542,361ポイント)   Date: 2008/03/28(金) 22:55   No:15210     
Title: Re:曜日のズレ    
マルチポストというのは、質問する立場の人間からしてみたら、さほど悪いことのように思わないと思いますが、回答する側にとっては気分を害す場合がよくあります。

また、質問掲示板で回答されていらっしゃる方の多くは複数の掲示板を同時に見ていらっしゃる事が多いようです。
せっかく回答しても、回答した後で、他の掲示板でもう解決済みだったりするのを見つけると、なんだ答えなくて良かったのかと思ったりすることもあるんです。

私自身、「答えではなく、答えが自力で導けるように工夫して回答した」のに、他の掲示板でもう答えそのものが載っていたりして、かなりガッカリしたことがあります。
その人は答えが欲しかったらしく、もうそれっきりだったので、余計にガッカリしたのですが。

また、同じ人達が同時に見ているので、両方で質問したからと言って、回答が早く得られる事はあまりないように思います。

どこかの質問掲示板に絞って常連になったほうが回答する側もスキルにあった回答がしやすいので、
カルさんの気に入った掲示板に絞って常連になっていただけたらいいのではないかと思います。


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

Name: あきら  ..初心者(7,638ポイント)   Date: 2008/03/28(金) 22:56   No:15211     
Title: Re:曜日のズレ    
カル様

はるか昔になりますが,私も初めて掲示板を利用した時は,ルールも何もしらずそういった事を行った事があります。
わからない事があると先にステップアップしたい気持ちが先走り,答えを求めたくなりますよね。

特に熱が入っている事であればなおの事。

でも,回答される方の気持ちも同じだと思います。

掲示板をチェックしたり,回答を準備してあげたい気持ちがあっても,どうしても様々な諸事情が重なってしまい,返事が遅れがちになったりしてしまいます。

また,憶測ですが,回答されている方の中には答えではなく答えに導くけるような回答をされている方もいらっしゃると思います。

与えられたものに対して教えてもらうだけでは,考える力が伸びないためです。

そういった方たちもいるという事を理解した上で,今後気をつけていけばよいと思うのですが,いかがでしょうか。


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

Name: カル  ..初心者(5,647ポイント)   Date: 2008/03/29(土) 01:20   No:15216     
Title: Re:曜日のズレ    
短い文章ですがまず謝罪させてください
管理人さんスイマセンでした、
あきらさん、私としては今後もこの掲示板を利用していきたいとおもっているのですが
もう少し気持ちを整理させたいので・・・・。整理できたらまた来ようかと思います
ご迷惑をおかけしました。



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



Name: k.a  ..ぴよぴよ(178ポイント)   Date: 2008/03/27(木) 16:59   No:15180       
Title: ウィンドウが表示されない原因    
今、シューティングゲームを作っています。
自機を動かすことができて、次は自機を狙う弾のプログラム書こうと思いそのためのプログラムを書き、
正常に動くか確かめるためにさっそく実行したのですが、なぜか、ウィンドウが表示されません。
プログラムを書き直して再度実行しても表示されず、いったい何が原因なのかまったくわかりません。
どのようにすれば、ウィンドウが表示されるのでしょうか?

使用しているコンパイルはBorland C++ Compiler 5.5でBCC Developerを使っていて、OSはWindows XPです。





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


Name: やそ  ..プログラマー(36,487ポイント)   Date: 2008/03/27(木) 17:29   No:15181     
Title: Re:ウィンドウが表示されない原因    
自機を動かしたときのソース(もちろん画面表示されたもの)と今回作った表示されないソースを見比べるしかないんじゃないでしょうか?
k.a さんの書き方では、全ての回答は推測の域をでませんよ^^;

現象の再現できる最小構成のプログラムを晒せますか?

もしくは、自機を動かした時のソースとそこからどこをどのように修正したのか分かるソース。

自機を狙う弾をどのように管理&表示しようとしたのでしょうか?

エラーを吐くんじゃなくて、何も表示されない状態なのでしょうか?

有用な回答を得るためにはもう少し情報提供する努力をしてみましょう^^


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

Name: k.a  ..ぴよぴよ(903ポイント)   Date: 2008/03/27(木) 19:26   No:15182     
Title: Re:ウィンドウが表示されない原因    
すばやい回答ありがとうございます。
情報が少なかったことは、本当にごめんなさい。これからはいい情報提供ができるように努力します。

>現象の再現できる最小構成のプログラムを晒せますか?
  ソースが83行あり、掲示してもいいのか悩んだので自機を狙う弾と構造体だけ掲示します。

struct CharaData{
float x, y; //左上座標
int ghandle; //画像
int life;     //ライフ プラグ
float vx, vy; //速度
};
//グローバル変数
struct CharaData tama[10];
int tama_g = LoadGraph("media\\tama.bmp");

//自機を狙う弾の関数  
void TamaInit(){
   //弾の初期化
for(int i; i<10; i++){
if(tama[i].life == 0){
tama[i].life = 1;
tama[i].x = 350;
tama[i].y = 350;
//自機と弾の距離を求める
float dx = jiki.x - tama[i].x;
float dy = jiki.y - tama[i].y;
float d = sqrt(dx * dx + dy * dy);
//tama[i]の速度を求める
tama[i].vx = (jiki.x - tama[i].x) / d * 50.0;
tama[i].vy = (jiki.y - tama[i].y) / d * 50.0;
break;
}
}
//弾の移動
for(int i=0; i<10; i++){
if(tama[i].life > 0){
tama[i].x += tama[i].vx;
tama[i].y += tama[i].vy;
 //弾の消去 TRUEなら消しFALSEなら表示する。
  if(tama[i].x < 0 || tama[i].x > 650 || tama[i].y < 0 || tama[i].y > 490){
tama[i].life = 0;
}else{
DrawGraph(tama[i].x, tama[i].y, tama_g, TRUE);
}
}
}
}

正常に自機を動かせた時のソースに↑のソースを書き加えました。

>自機を狙う弾をどのように管理&表示しようとしたのでしょうか?
  for文とif文で各弾をチェックしてtama[i].lifeが0なら初期化をして0以上なら移動させます。

  弾の移動処理の最後のif文は画面外に出たならtama[i].lifeに0を代入し、出ていなかったら
  表示するようになっていると思います。
                (まだ一度も正常に動いていないので本当にそうなるかわかりません。)

>エラーを吐くんじゃなくて、何も表示されない状態なのでしょうか?
  はい、全く何も表示されませんしそれどころか、ウィンドウ自体が開きません。


わかりやすく書いたつもりですが、何かわからないことがありましたら容赦なく言ってください。
  




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

Name: 管理人 [URL]  ..伝説のハッカー(541,561ポイント)   Date: 2008/03/27(木) 19:33   No:15183     
Title: Re:ウィンドウが表示されない原因    
ザッと見ただけなのですが、
「画像が表示されない」のではなく、「ウィンドウ自体が表示されない」でいいですか?

上のプログラムでは画像は表示されないと思います。
というのも、DXライブラリの初期化関数の前に、グラフィックのロードを行っているので、
初期化関数を読んだ時点でクリアされてしまいます。

int tama_g = LoadGraph("media\\tama.bmp");

このように、宣言と同時に格納するのではなく、グラフィックをロードする関数を別に作り、
初期化関数を呼んだあとで、この関数を呼びましょう。

ウィンドウ自体が表示されない場合は、メイン文を見る必要があるかもしれないので、
コードすべてを投稿していただいたほうが早いかもしれません。
「参照」からソースコードを添付できます。


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

Name: k.a  ..ぴよぴよ(306ポイント)   Date: 2008/03/27(木) 23:25   No:15187 解決!     
Title: Re:ウィンドウが表示されない原因    
アドバイスありがとうございます。
けど少し言いずらいのですが、なぜか正常動きました。

こうなった経緯を説明すると・・・
管理人さんが言ったとおりにソースを添付しようとした時、
もしかして添付したら自分の実名がでてしまうのじゃないかと考え(ファイル名に本名を使っているので)、
ファイルの名前を変えたのです。すると今度はコンパイルができなくなり、パニックを起こしてしまって
(ファイル名を変えたのがいけなかったようです。)そのときに誤って正常に動かないソースが入っている
ファイルを削除してしまいました。          
しまったと思い、慌てて予備としてとっていた正常に動くソースを正常に動かないソースに書き換えました。
で、一度コンパイルして「動くかな?」と軽い気持ちで実行したところ正常に動いたというわけです。

実は前にもこのようなことがあり、そのときはソースを一旦すべて消しまた書き直したら正常に動きました。
この時、このようなことはもう起きないと高をくくっていたのですが、また起きてしまい「もしかして、
こんなことがこれからも続くのかな。」と考えて原因知るためにこのトピックを投稿したのですが、
とんだお騒がせしました。
こんなトピックに回答してくださったやそさん、管理人さんアドバイス本当にありがとうございます。
また、わからないことができたら質問をしに来ますので、そのときはお願いします。

あ、あと今回正常に動かなかったソースは添付しておきます。
本当にありがとうございました。



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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(63,122ポイント)   Date: 2008/03/28(金) 00:18   No:15188     
Title: Re:ウィンドウが表示されない原因    
たぶん、ファイル名に日本語(半角英数字以外)が使われていたのが原因ではないでしょうか?
BCCは半角英数字以外のファイル名は使えませんから…


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

Name: 管理人 [URL]  ..伝説のハッカー(542,061ポイント)   Date: 2008/03/28(金) 01:19   No:15189     
Title: Re:ウィンドウが表示されない原因    
しかしそうだとすると、ウィンドウが表示できなかったのではなく、コンパイル自体できなかったのでは・・。

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

Name: k.a  ..ぴよぴよ(255ポイント)   Date: 2008/03/28(金) 09:11   No:15193     
Title: Re:ウィンドウが表示されない原因    
回答ありがとうございます。

>たぶん、ファイル名に日本語(半角英数字以外)が使われていたのが原因ではないでしょうか?
>ウィンドウが表示できなかったのではなく、コンパイル自体できなかったのでは・・。
  ファイル名はすべて英語で書いていて、コンパイルもできました。
  ただ、正常に動かないソースを実行したあと、書き直してコンパイルをするとエラーで、
  <program still running?>とでてコンパイルができませんでした。


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

Name: Mist  ..ぴよぴよ(877ポイント)   Date: 2008/03/28(金) 09:44   No:15194     
Title: Re:ウィンドウが表示されない原因    
> ただ、正常に動かないソースを実行したあと、書き直してコンパイルをするとエラーで、
>  <program still running?>とでてコンパイルができませんでした。
正常に動かないソースで作ったexeがきちんと終了していない(動いたまま)からではないですか?

「<program still running?>」=「exeが実行中で更新できませんよ」


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

Name: k.a  ..かけだし(1,111ポイント)   Date: 2008/03/28(金) 11:24   No:15196     
Title: Re:ウィンドウが表示されない原因    
回答ありがとうございます。

それならば、正常に動かないソースで作ったexeが実行しているのに、
なぜウィンドウが開かないのでしょうか?
自分で考えれる原因は、
   ・プログラム自体が重かったから。
   ・管理人さんが指摘したとおりメイン文に問題があったから。
   ・同じく管理人さんが指摘した変数の宣言と同時に画像データを格納したから。(これはないか?)
   ・パソコンの寿命が近いから。(4年間使い続けているノートパソコンです。)
ぐらいです。
この中でプログラム自体が重かったとパソコンの寿命が近いは考えずらいですし、
メイン文に問題があったからが一番考えられますが、そのソースは上で書いたとおり削除してしまったので
確かめれません。(誤解を招く文だったので書きますが、添付したソースは書き直したものです。)
それに、メイン文は本を見て正確に写しそれを使い自機を正常に動かせたので間違いはないと思います。
(正常に動かないソースをもとのソースに書き直すと、正常に動きましたし。)



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

Name: バグ  ..比類無きプログラマー(79,371ポイント)   Date: 2008/03/28(金) 12:06   No:15197     
Title: Re:ウィンドウが表示されない原因    
私もBCCを使っていた時に同じ現象が起こった事がありました。どういう訳かexeファイルが終了されない事があるんですよね。右上の×ボタンで終了させた時によく起こったように思います。

タスクマネージャーでexeファイルを終了させてからビルドするといいですよ。


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

Name: 管理人 [URL]  ..伝説のハッカー(542,219ポイント)   Date: 2008/03/28(金) 13:36   No:15198     
Title: Re:ウィンドウが表示されない原因    
バグさんと被りますが、DxLibで作っていると時々きちんと終了しない事があります。
DXライブラリの終了関数を呼んでから終わらなかった時になるのかもしれません。
そんなときはタスクマネージャーの「プロセス」から(デフォルトなら)「DxLib.exe」を終了させて下さい。
もし自分でプロジェクトを作っているならそのプロジェクト名.exeになっていると思います。


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

Name: Mist  ..かけだし(1,007ポイント)   Date: 2008/03/28(金) 14:13   No:15200     
Title: Re:ウィンドウが表示されない原因    
> なぜウィンドウが開かないのでしょうか?
普通に考えれば、プログラム自体に問題があるのだと思います。
例えば、バッファオーバーランとかしてしまっている場合、思いもよらぬところに影響が出たりしますね。
「ウィンドウが開く=exeが実行されている」、「ウィンドウが開かない=exeは実行されていない(もしくは終了している)」という考えはちょっと違うかと思います。
「ウィンドウが開かない=プログラムがバグっている」ぐらいかな。


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

Name: k.a  ..かけだし(1,270ポイント)   Date: 2008/03/28(金) 15:32   No:15203     
Title: Re:ウィンドウが表示されない原因    
回答ありがとうございます。
タスクマネージャの事を知らなくて調べてみたら、こんなものがあるんだと関心しました。
やっぱり、コンピュータについて詳しくないと問題が発生した時の対処に困りますね。
コンピュータについて勉強しないと・・・

これからは、プログラミングしていて問題が発生した時、ソースとにらめっこをし
頑張ってその問題を解決したいと思います。

回答してくださったやそさん、管理人さん、tkmakwins15さん、Mistさん、本当にありがとうございます。



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



Name: カル  ..入門者(3,660ポイント)   Date: 2008/03/18(火) 08:03   No:14960       
Title: フローチャート    
今フローチャートについて勉強中なのですが
ソースを作る前にフローチャート(設計書?みたいなもの)
を作っておくと全体の流れがわかるよといわれました
ネットで色々と見てみたのですがよくわかりません
どんな感じで作ればいいのでしょうか?


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


Name: あきら  ..ぴよぴよ(893ポイント)   Date: 2008/03/18(火) 10:08   No:14961     
Title: Re:フローチャート    
カル様 こんにちは

私もまだ勉強し始めの段階なので,質問に対する答えが一致しているかはわかりませんが。

下記のリンクのようなものを指しているのではないかと思いますが,いかがでしょうか。

http://ja.wikipedia.org/wiki/%E3%83%95%E3%83%AD%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88

http://www2.ee.knct.ac.jp/el/E2/L210/algorism/flowchart1.html



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

Name: やそ  ..プログラマー(28,151ポイント)   Date: 2008/03/18(火) 12:24   No:14969     
Title: Re:フローチャート    
要は「やりたいこと」を順に書き出していくこと。です。

それを見た目に分かりやすくするために、図表(チャート)で表したものです。

たとえばとあるゲームの開始の流れ図は・・・

   ゲーム開始
    ↓
 −→↓
 ↑  ↓
 ↑ タイトル画面表示
 ↑  ↓
 ↑ 最初から? −−−→オープニング表示 →ゲーム開始画面へ
 ↑  ↓     YES
 ↑  ↓NO
 ↑ つづきから?−−−→ロード画面表示  →ゲーム開始画面へ
 ↑  ↓     YES
 ↑  ↓NO
 ↑←←


こんな風に表現できるでしょう。コレも流れ図(フローチャート)です。
(※ループ端子を使うともっとスッキリしますが)
段階的に掘り下げていけば、C言語の命令1語に対して1項目の段階まで流れ図を書くことが出来ると思います。

この、流れ図は書かなくてももちろんプログラムを組むことは可能ですが、
書いておくと論理エラー(バグ)の検出やプログラムを追わなくても、処理の流れが把握しやすくなるので
書くクセをつけると良いでしょう^^



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

Name: カル  ..入門者(3,839ポイント)   Date: 2008/03/19(水) 08:11   No:14993     
Title: Re:フローチャート    
>あきらさん
サイトの方見てみました。他のサイトでも似たような事が書いてありましたが
ちょっと掴めそうな感じがしました、ありがとうございます

>やそさん
やりたい事を順に・・・なるほど、そーゆーことだったんですねw

例えば(だいぶ前にお世話になったC言語カレンダー表示とか)でやっても
同じ考えなんでしょうか?今それをやってみようかなと思っているのですが・・・
どう書いたらいいのかわからなくて・・・


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

Name: あきら  ..初心者(5,172ポイント)   Date: 2008/03/19(水) 10:04   No:14994     
Title: Re:フローチャート    
カル様

見ている方は一人ではないと思いますので,カレンダーを作成した時のスレッドのURLを掲載してみてはいかがでしょうか。
そのほうが,もっと多くの方から意見をもらえるのではないかと思います。
フローチャートが無くてもプログラムは書けるのではないかと思います。
やそ様が仰られているように,やりたい事を書き出す事で後で見直す上で便利ですし,他の人からも様々な意見がもらえるのではないでしょうか。

肝心のフローチャートの書き方ですが,どういった記号を使うかはJIS企画で決まっていた(はず)と思いますので,それを覚える必要があります。
それからまずは最初に“何をどのようにやりたいのか”という事をメモして考えていく必要があると思います。

例えば,自動販売機で150円のジュースを買う場合。
100円で押しボタンにランプがついてしまった日には自動販売機のメーカーさんは大損です。
そこで,
・150円以上でランプがつき,150円未満ではランプがつかないという指示を与える。
・投入した金額から,購入した金額を差し引いた時にプラスであれば,その額をおつりとして出す。
・ただし,1つ購入した後に,150円未満ならお釣りを出し,150円以上ならお釣りは出さずにランプはついたままという指示を与える。
といった事を書き出したら,次は記号に変換しフローチャートを書くという手順になるのではないかと推測しています。


研修が始まり中々忙しいかとは思いますが,時間がある時にCD-ROM付の入門書を手に入れてみてはいかがでしょうか。
私も初心者なのでわからない事だらけですが,google,wikipedia,入門書などを利用するといったツールを用い勉強中です。


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

Name: やそ  ..プログラマー(32,932ポイント)   Date: 2008/03/19(水) 17:21   No:15004     
Title: Re:フローチャート    
カルさんへ

以前のカレンダー表示プログラムももちろんフローチャートで表すことが出来ます。
また、フローチャートを先に作っておけばプログラムはもっと楽に作れたのではないかと思います。

もちろんフローチャート自体が間違っている場合もありますが^^;(バグといいます)

あきらさんへ
自販機の購入プログラム。そういえば新入社員の研修の時に作らされました。
お金投入から品物(結果)を出すまでのフローチャートを詳細に書け!
といわれましたね。
お金は1円、5円ははじき、10円、50円、100円、500円、1000円、5000円、1万円を使え、
おつりも最小枚数で出す。
品物は100円、150円と種類がある。
1品購入毎に全て清算。

今となっては懐かしい思い出です(笑)
(自販機で1万円なんて使わないって)
フローチャート用の定規やシートは(製図用品を取り扱っている)大きめの文具屋さんなら置いてあると思います。(使わず、フリーハンドで十分とも言いますが)




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

Name: カル  ..入門者(4,131ポイント)   Date: 2008/03/19(水) 23:00   No:15016     
Title: Re:フローチャート    
>あきら様
スイマセン、作成したスレッドは見つかったのですがURLの表示の仕方がよくわかりませんでした
(過去ログ43のグレゴリウス暦で見つけました)
その時のソースです

#include<stdio.h>

int main() {

int iyear,imonths,iday;
int sum,i;
int m_array[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
char*cweek[7] = {"日","月","火","水","木","金","土"};

sum =0;
printf ("input (e.g. ****/**/**)\n>>");
scanf ("%d/%d/%d",&iyear,&imonths,&iday);
/*閏年の判定*/
if ((imonths >2) && ((iyear % 4 == 0) && ((iyear % 100 !=0) || (iyear % 400 == 0)))) {
sum++;
}
/*前月までの日数*/
for (i =0; i < imonths-1; i++) {
sum += m_array[i];
}

iyear--;
/*前月と前年度と今月の日数の合計*/
sum = sum + iyear * 365 + (((iyear / 4)-(iyear / 100))+(iyear / 400))+iday;
printf("%s曜日",cweek[sum%7]);
return 0;

}




こんな感じです、今日帰りに「猫でもわかるC言語」を買いました。わかりやすいとの評判みたいなので。


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

Name: カル  ..入門者(4,202ポイント)   Date: 2008/03/19(水) 23:15   No:15017     
Title: Re:フローチャート    
連投スイマセン
>やそさん
そうですね、先に作っておいたほうが楽かもしれませんね
ネットでもそんあ感じに書かれてました。
記号はなんとなくわかったんですけど実際に考えて作ってみると・・・
どう分類?して書いていけばいいのかとか・・
言われたのが「細かく書くんじゃなくて、わかりやすく書けばいい」
今の私の考えは  開始→年月日(宣言)→閏年計算→総日数を出す→7で割る→曜日を出す
→出力→終了 かなり雑ですがこんな流れなのかなと思っています。


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

Name: カル  ..入門者(4,366ポイント)   Date: 2008/03/21(金) 00:47   No:15053     
Title: Re:フローチャート    
少し直してみました。
年 月 日の宣言と初期化

月の末日配列の宣言と初期化
曜日の配列宣言と初期化

閏年の判定

前月までの日数

前月と前年度
今月の日数の合計

曜日計算
(総日数から7で割った余り)

出力

終了
これでもまだダメなんでしょうか?
全体的に明確にした方がいいと思うのですが今一ピンときません
アドバイスなどあればよろしくお願いします。


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

Name: あきら  ..初心者(6,444ポイント)   Date: 2008/03/21(金) 09:40   No:15060     
Title: Re:フローチャート    
カル様

質問に対する答えが遅れがちになっておりますが。

話に出ている過去ログらしきものを発見しました。

こちらでよろしいでしょうか?

http://www.play21.jp/board/nextz.cgi?id=dixq&lognum=44&dispnum=13709


フローチャートの内容はまた吟味したいと思います。

ところで,このカレンダープログラムはすでに完成していますか?


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

Name: カル  ..入門者(4,519ポイント)   Date: 2008/03/22(土) 17:43   No:15091     
Title: Re:フローチャート    
あきら様
あ、それですね、ありがとうございます、わざわざスイマセン。
カレンダー表示(1〜12までの表示)はまだ完成していません
今は入力された年、月、日が何曜日?と表示されるとこまでできてます。(上の方に私が貼ったソース)
とりあえずこの状態でフローチャートを作成するとどんな感じになるのかなといった状態です






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

Name: あきら  ..初心者(7,557ポイント)   Date: 2008/03/23(日) 13:13   No:15097     
Title: Re:フローチャート    
カル様

C言語におけるフローチャートとは,プログラムを書くための設計図にあたります。

設計図はより正確,かつ分かりやすいものである必要があります。

そして一番重要なのは,C言語におけるフローチャートの書式にそって作成する必要性があります。

それは,自分が上達した後で見返すときに間違いが発見しやすい。

と同時に,他の人からもアドバイスをもらいやすいという利点があります。

仕事であれ,こういった場であれC言語についてふれる場合は,合っているか間違っているか以前に書式通りに書く必要があります。

そして,プログラムは設計図をもとに作成されるので,設計図があっていればプログラムも正しいものとなります。
ですので,先に示したいただいたフローチャートをC言語向けのフローチャートにアレンジしてみてください。

掲示板でフローチャートを書くというのは紙に書くのと違い難しいものがありますが,やそ様が素晴らしい書き方をされているので,それを参考にするとよいでしょう。

また,Googleなどで検索すれば文字や記号を使っての上手な書き方をしている人が多々おりますので,そういった方の書き方を調べてみるとよいかと思います。

紙に書く場合は,下記のリンク先のような書き方になると思います。

http://ja.wikipedia.org/wiki/%E3%83%95%E3%83%AD%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88

どういった時に,どういった囲みを用いるかはお手元の本に示されているのではないかと思います。

カレンダーを作成するまでの道のりが長いかとは思いますが少しづつ頑張っていきましょう。


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

Name: やそ  ..プログラマー(34,403ポイント)   Date: 2008/03/24(月) 14:51   No:15110     
Title: Re:フローチャート    

#include<stdio.h>

int main() {

int iyear,imonths,iday;
int sum,i;
int m_array[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
char*cweek[7] = {"日","月","火","水","木","金","土"};

sum =0;
printf ("input (e.g. ****/**/**)\n>>");
scanf ("%d/%d/%d",&iyear,&imonths,&iday);
/*閏年の判定*/
if ((imonths >2) && ((iyear % 4 == 0) && ((iyear % 100 !=0) || (iyear % 400 == 0)))) {
sum++;
}
/*前月までの日数*/
for (i =0; i < imonths-1; i++) {
sum += m_array[i];
}

iyear--;
/*前月と前年度と今月の日数の合計*/
sum = sum + iyear * 365 + (((iyear / 4)-(iyear / 100))+(iyear / 400))+iday;
printf("%s曜日",cweek[sum%7]);
return 0;

}


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

フローチャート

開始

使用する変数の宣言&初期化

年月日入力※@

うるう年判定※A

入力年の入力月の前月までの日数計算
(2000/12/25なら2000/1/1から2000/11/30までの日数)

1/1/1からの総日数計算

答え(曜日)の出力

終了

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

フローチャート@

開始

入力を促すメッセージを出力

入力(年→iyear、月→imonths、日→iday)

終了
-----------------------

フローチャートA

開始

月>2 かつ
(年(iyear)%4(4で割った余り)==0 かつ
↓ (年%100 ==0 または
   年%400 ==0)

↓→→→→→合計日数(sum)にうるう年分の1を足す。→↓
↓  yes                               ↓
↓                                   ↓
↓no                                  ↓
↓                                   ↓
↓←←←←←←←←←←←←←←←←←←←←←←←←


終了

とこんな感じで書いていくことが出来るはず。

実際にはifの端子はひし形なのでもっと見た目がスッキリすると思いますよ。

このつづきはカルさん自身で作ってみるといい勉強になりますよ^^

実際にプログラムするときは、処理の先頭などにこのフローチャートの文言を
コメントで入れておくと後で見返しやすくなります^^

PS.
わたしも

「猫でもわかるC言語プログラミング」
「猫でもわかるゲームプログラミング」
「猫でもわかるWindowsプログラミング」

を持っていますよ^^


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

Name: カル  ..初心者(5,049ポイント)   Date: 2008/03/25(火) 00:27   No:15119     
Title: Re:フローチャート    
>あきら様
はい、そうですね、わかりやすく・・・・まずこれが大事ですね
今日1日ネットで色々と検索をしてみたのですが
なかなか難しいものですね。
でも少しは進歩したと思っています
あきら様が貼ってくださったURLもとても参考になりました
ありがとうございます。

>やそさん
わかりすい説明ありがとうございます
わざわざ作ってくださって・・・めんどくさかったですよね?

ところで合計日数に閏年分の1を足すの「1」ってどーゆー意味んでしょうか?
自分でももう頭の中がグチャグチャになってしまってもう何がなにやら・・・自分でコード書いといて
分からないなんて・・・自分の無力さに凹みます。

一応今の段階でのフローチャートを表示しておきます
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6172.txt
あと一歩ってところなんですけどねぇ・・・。







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

Name: あきら  ..初心者(7,283ポイント)   Date: 2008/03/25(火) 00:41   No:15120     
Title: Re:フローチャート    
カル様

色々な事で頭がいっぱいになる事は,私もよく経験します。

頭がいっぱいになった時は,メモをとり,今何について考えているのか,何について考えないといけないのかを整理して優先順位をつけるとよいかと思います。

メモをとる事で暗記力が落ちるというデメリットもありますが,私の場合最近物忘れが前よりひどくなってきたので,メモをとる習慣はかかせません。

ヒント
閏年で1を足すのがどういう意味かは,閏年とはどういうものかを国語辞典,百科事典で調べるとその答えがのっているので,すぐにわかりますよ。

せっかくご呈示いただいた進行段階のフローチャートですが,閲覧することができませんでした。

私だけでしょうか?


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

Name: カル  ..初心者(5,157ポイント)   Date: 2008/03/25(火) 10:39   No:15124     
Title: Re:フローチャート    
メモって何気に重要なんですね
今何を優先すべきか、仕事をする上で大切なことなんですね
実感しました。

フローチャートの方なんですが私のミスで失敗したようです(初めてなもので・・)



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

Name: やそ  ..プログラマー(35,104ポイント)   Date: 2008/03/25(火) 12:01   No:15126     
Title: Re:フローチャート    
(あ、カルさんに先の投稿されてしまった。ま、いいか^^;)
カルさんへ

>わざわざ作ってくださって・・・めんどくさかったですよね?

もちろん、面倒くさいです(笑)
いやあ、ワードあたりで図を使って・・・なら幾分楽なのでしょうけど、
掲示板にテキストで書くのは非常にメンドイです^^;

>ところで合計日数に閏年分の1を足すの「1」ってどーゆー意味んでしょうか?
>自分でももう頭の中がグチャグチャになってしまってもう何がなにやら・・・自分でコード書いといて
>分からないなんて・・・自分の無力さに凹みます。

頭の中がグチャグチャ・・・にならないようにするためのフローチャート作成のはずが・・・
まあ、最初はそんなもんですので、あせらず行きましょう。

カルさんはうるう年と聞いて何を想像されますか?
一般的には
「2月がいつもの28日までじゃなくて1日増えて29日まである年のこと」
という認識なのではないでしょうか?

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

たとえば2000/12/25
を計算するとき、

1.その年に限って、日数を計算する(2000/1/1〜2000/12/25)
  (1)各月の日数は基本的に固定(m_array[12]で定義している)ので、
     1月1日から前月末までの日数を計算する(sum)
     (こういうこと)sum=31+28+31+30+31+30+31+31+30+31+30
  (2)日の日数を足す(2000/12/1〜200012/25)
     sum=sum+24

2.その年(2000年)がうるう年かどうか判定する
  うるう年の条件
   4の倍数の年はうるう年。
   ただし、100の倍数の年はうるう年じゃない。
   でも、やっぱり400の倍数の年はうるう年。

   結果うるう年であれば2/29が増えるので"1"を足す。
   sum=sum+1
3.(グレゴリウス暦)1/1/1〜1999/12/31(前年)までの総日数を計算する。
  1年は基本的に365日なので
  ベースは365×1999で計算される。
  そこにうるう年の回数分"1"を足すことで正確な日数が計算できる。

4.1から3で求めた日数を全て足す
  その結果、(1/1/1〜)2000/12/25の日数が算出される。

5.曜日は日曜日から土曜日まで7種類存在する。
  4で求められた結果を7で割った余りを求めることで曜日(0から6)が判定できる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

1から3はどの順番で求めても問題ないと思います。
これを図で表せばフローチャートの出来上がりです。


カルさんが作ったフローチャート、多分パーミッションの設定が悪いのかな?
私も見ることが出来ませんでした。
→新たにupしたフロー、見ておきます^^


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

Name: カル  ..初心者(5,321ポイント)   Date: 2008/03/25(火) 22:25   No:15142     
Title: Re:フローチャート    
>やそさん
丁寧に教えてくださってありがとうございます
参考というかもう完全に正解みたいな感じですねw

>カルさんはうるう年と聞いて何を想像されますか?
>一般的には
>「2月がいつもの28日までじゃなくて1日増えて29日まである年のこと」
>という認識なのではないでしょうか?

まさにその通りですw
私の理解不足でした・・・・・・・
やそさんのおかげでとても勉強になりました。
あ、前回のフローを修正しましたのでよかったら見てやってください。



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

Name: カル  ..初心者(5,342ポイント)   Date: 2008/03/28(金) 08:03   No:15190 解決!     
Title: Re:フローチャート    
みなさん、アドバイスありがとうございました!

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



Name: kazuoni  ..初心者(6,069ポイント)   Date: 2008/03/26(水) 14:41   No:15155       
Title: フォントハンドル値    
お邪魔します。
実行中に「フォントハンドル値が異常です」と出力されるのは、例えば、
int char = CreateFontToHandle( "MS 明朝" , 22 , 2 , DX_FONTTYPE_NORMAL );

と定義していれば、この一行からの戻り値が異常だといっているのですか?
ちなみにヘッダーでは、

#include "DxLib.h"
...
#ifdef _GLOBAL_INSTANCE_
...
int state_menu_font = CreateFontToHandle( "MS 明朝" , 22 , 2 , DX_FONTTYPE_NORMAL );
...
#else
...
extern int state_menu_font;
...
#endif /* _GLOBAL_INSTANCE_ */

この定義の仕方には間違いはないですか?よろしくお願いします。


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


Name: やそ  ..プログラマー(35,208ポイント)   Date: 2008/03/26(水) 15:24   No:15157     
Title: Re:フォントハンドル値    
intもcharも型をあらわす予約語だからじゃないですか?
DXライブラリ本家のリファレンスページを参照してみると良いですよ。


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

Name: 管理人 [URL]  ..伝説のハッカー(540,290ポイント)   Date: 2008/03/26(水) 15:30   No:15159     
Title: Re:フォントハンドル値    
charが予約語である事に付け加え、DXライブラリの初期化関数を呼ぶ前にフォントハンドルの生成関数を呼んでいるのでよくないです。


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

 
これを書いた後にフォントハンドルの生成を行って下さい。
宣言と同時に代入じゃなく、フォントハンドルを代入する関数を作り、そこを通したほうがいいと思います。


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

Name: kazuoni  ..初心者(6,229ポイント)   Date: 2008/03/26(水) 21:08   No:15166 解決!     
Title: Re:フォントハンドル値    
やそさん、管理人さん、お早い返事ありがとうございます!!

お二人の言うとおりでした。。ここで関数を作るという考えが出てこなかった自分にがっかりです(泣)
自分・・・質問しすぎですかね。。もっと自力でやるべきって思っても、詰まって、一時間ぐらい悩むと深みにはまっていってここにたどり着いてしまうのですが。。本当にお世話になります。

ありがとうございました!またよろしくお願いします。


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

Name: 管理人 [URL]  ..伝説のハッカー(540,629ポイント)   Date: 2008/03/27(木) 01:08   No:15168     
Title: Re:フォントハンドル値    
考えてドツボにはまったら中々抜け出せませんからねw
考えてもよくわからなければいつでもご質問下さい。
「自分でものすごく考えて考えて、苦労して実装しても、実は関数一つで解決できた」
なんてことも時々あるので。
まぁその苦労は無駄にはなりませんけどね。
例えば私の経験談で言うと、龍神録のようなシューティングって細かい表示や動作制御が必要になるので、ピクセル以下の単位の表示が重要になるんです。
でも、DrawGraphはint型しか渡せないので、「x=35.5に表示」なんてのは出来ません。
でもy=20xみたいな傾きの大きい直線上を移動させると軌跡がカクカクしてしまう・・。
そういうわけで、画像の端っこを何とかαブレンドしてみたり、微妙に縮小してみたり試行錯誤していました。
結局1ピクセル間をじわじわ移動させることは出来なかったわけですが、
DXライブラリ製作者様に聞くと、DrawGraphFという小数点以下を受け付けて表示してくれる関数があったらしく、
一瞬で解決しました・・。
調べる事ももちろん重要ですが、それを一通りした上で、聞く事ってそれも大事だと思います。

一人で何回も質問するのが嫌だから、と、名前を質問するたびに変えて投稿する人がいますが、
何度投稿されても、「また質問か」なんて言う人いませんから、気軽に質問して下さい!


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

Name: kazuoni  ..初心者(6,358ポイント)   Date: 2008/03/27(木) 13:23   No:15174     
Title: Re:フォントハンドル値    
そう言っていただけるとちょっとほっとしますw
いずれか知識が増え、深まったら、回答側にいきます。恩を返す意味でも。(まぁいつになることかは分かりませんが・・・w)

あと、クイックソート解説アプリ最高でした。目に見える形なんですんなり理解できました^^(まぁ、使いこなせるかどうかは別ですが。。)ありがとうございました!<!--13-->


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

Name: 管理人 [URL]  ..伝説のハッカー(540,751ポイント)   Date: 2008/03/27(木) 14:46   No:15175     
Title: Re:フォントハンドル値    
クイックソート解説アプリ、久しぶりに自分で見てみたら、どっちみち難しそうに見えますね^^;
うーん、どうやったらわかりやすく解説できるものか・・。
しかもボイス無いのにスタッフにボイス役の名前が^^;
それに今転送制限かけられてるからDLに時間かかったのではないでしょうか;


これからも暇があれば色んなもの作っていこうとおもいますm(_ _)m


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

Name: kazuoni  ..初心者(6,475ポイント)   Date: 2008/03/27(木) 15:56   No:15177     
Title: Re:フォントハンドル値    
いや、かなりノー知識の人でも理解できましたよっ!バブルソートやったことあるからかもしれませんけど^^;アプリの中で使っているエルが1に見えるのが少し見づらい気がしました。あとは簡単に指定したページに戻る機能があると便利かなーって思いました。50回ぐらい連打するのはちょっと疲れますw

転送は・・・確かに結構時間かかっていた気がします。



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

Name: 管理人 [URL]  ..伝説のハッカー(541,341ポイント)   Date: 2008/03/27(木) 16:27   No:15178     
Title: Re:フォントハンドル値    
>50回ぐらい連打するのはちょっと疲れますw

確かに^^;
ただあのアプリを作ったプログラムがどこかに行ってしまったので永久にあのままの仕様の予感・・。
誤字も直せないし、実行ファイルからプログラムコードが作れるソフトがあったらいいのにな〜・・・っと、それはそれで困るかなw

>エルが1に見えるのが少し見づらい気がしました

あ〜なるほど。
640x480の中に図もセリフもプログラムも収めるにはかなり苦労したんですが、
条件文の有効範囲とかの意味でコードはみにくかったですよね〜;
うーむ、構造体やポインタの解説も含め、将来一つのC言語教育ソフトみたいなものができたらいいなと思ってます。
思っているだけで結局龍神録ばかり作ると思いますがw
シューティングの館も早いところ改装しなくては(>_<


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

Name: kazuoni  ..初心者(6,648ポイント)   Date: 2008/03/27(木) 16:48   No:15179     
Title: Re:フォントハンドル値    
> うーむ、構造体やポインタの解説も含め、将来一つのC言語教育ソフトみたいなものができたらいいなと思ってます。

ぜひ期待してますwwあ、意見番の一人として自分を採用してくださいね。(ぇっ)
それにしても・・・四聖龍神録はすごいっです。自分はあまりシューティングやらないんですけど、それでも感動しました^^フリーでどこまでやるのか・・・楽しみですww

絵を変えてくれる人がいることが本当にうらやましいです^^;RPG作ってて、確かにいろいろなサイトで手に入れれるんですけど・・・なんかうまくいかないんですよね。。せめてドット絵がかければ・・・なんて思うんですけどね^^;美術センス0以下ですんで・・・w


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

Name: 管理人 [URL]  ..伝説のハッカー(541,924ポイント)   Date: 2008/03/27(木) 19:38   No:15184     
Title: Re:フォントハンドル値    
いえ、是非参考にさせていただきます!
・・しかしやりたいことばかり増える一方で時間は限られているのが現状なんですよね^^;
私も絵師はずっと探してたのですが、手伝ってもらったのは龍神録で初めてです。
それまでは地道に書いていました。
だからDixqはパクリばかりなんだと言われそうですけど、最初はパクリから入るのはいい方法だと思います。
何でも参考から、ですし。
例えばボンバーマンのキャラを見ながら自分でフォトショで書いてみる、とか。
全く絵を描いたことがない人が突然きれいな絵をかけるわけないと思うので(少なくとも私はそうだったので)なんでもまず参考にしながら書いてみてはどうでしょうか。
私だって、ミミズがはったような絵しかかけませんでしたけど、何度も書いて(特に龍神録の背景は10回位ボツにしながら試行錯誤してかきました)なんとか背景を完成させました。試行錯誤って結構勉強になるのではないかと思いますよっ!と言いながら言ってる本人があの程度じゃ説得力無いですが^^;


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



Name: S.Y  ..ぴよぴよ(29ポイント)   Date: 2008/03/26(水) 02:30   No:15148       
Title: 四聖龍神録をプレイした感想    
敵の弾の動きが条件反射だけでは対処できません
ITEMと弾がカラフル過ぎて区別しにくいです
でも、フリーでこれだけ遊べるのは嬉しいです
なんか「ゲームを創るのが好きだ!」って感じが伝わってきます
ありがとうございました


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


Name: 管理人  ..伝説のハッカー(540,119ポイント)   Date: 2008/03/26(水) 03:01   No:15149     
Title: Re:感想    
四聖龍神録の件ですね?
遊んで頂きありがとう御座います。

確かに初見殺しが多いのは少し問題で、初心者に取っ付き難いのも事実ですね。
背景、アイテム、弾の色の相性をもう少し考えて今後改善していこうとおもいます。

>なんか「ゲームを創るのが好きだ!」って感じが伝わってきます

ありがとうございます。ホントにゲームを作るのがすきで、暇さえあれば作っています。
龍神録を作り始めたきっかけも、自分の腕試しから始まったもので
本当に単なる趣味なので、余計そういう感じがゲームに篭っているのかもしれません。
ご感想ありがとうございました。


トピックの題名はよりわかり易い題名にしておきました。ご了承下さい。


C言語何でも質問サイト と 四聖龍神録HP は一応分けているつもりで、
四聖龍神録専用の掲示板も設けておりますので
http://www.style-21.jp/bbs/SRJR/index.html
よければこちらをご利用下さい。


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

Name: オプーナを買う権利を授けよう  ..ぴよぴよ(207ポイント)   Date: 2008/03/27(木) 01:58   No:15170     
Title: Re:感想    
やっぱり自分で作るならFC時代の神ゲー(クソゲー)クラスのを作りたいですよねっ
トランスフォーまーコンボイの謎やらスペランカーやらボンバーキングやら
あの発想はすごいと思います


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

Name: やそ  ..プログラマー(36,334ポイント)   Date: 2008/03/27(木) 09:18   No:15172     
Title: Re:感想    
スペランカー?!
いいですね〜あの・・・

史上最弱の主人公!!

忠実に再現できたら神ゲー(超クソゲー)時代復活です(笑)


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

Name: 管理人 [URL]  ..伝説のハッカー(541,038ポイント)   Date: 2008/03/27(木) 14:50   No:15176     
Title: Re:感想    
すぺらんかーって、あのちょっと高い所から飛び降りたりするだけで死んでしまう奴ですよね。
やったこと無いですけど、あちこちで見かけますw
今でこそクソゲー扱いですが、あらゆるジャンルにおいて初めて作った人って言うのはホントすごいと思います。
今まで見たことも無い、かつ、それでいて面白いものを作り出すって相当なことだなーといつも思います。
まぁ一日中何か面白いゲームは無いかと考えまくっているゲームクリエーターが星の数ほどいる現在、ちょっと考えた位で画期的なものは考え出せないと思いますが、
何か画期的なゲームを作りたいですねw
いつかニコニコにウェブカメラで操作するマリオがありましたが、今までに無いインターフェイスを使うってのも一つの手ですね。


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



Name: ggg  ..ぴよぴよ(28ポイント)   Date: 2008/03/26(水) 14:43   No:15156       
Title: thread    
スレッドの使い方を教えてください。
スレッドの概要はなんとなくわかりました、しかしサンプルソース
などをみてもぜんぜんわかりませんでした。
簡単なサンプルソースなどいただけないでしょうか?


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


Name: やそ  ..プログラマー(35,212ポイント)   Date: 2008/03/26(水) 15:27   No:15158     
Title: Re:thread    
猫でもわかるプログラミングのHPの
Windows SDK編 第1部

にソース付きで解説されていますよ。


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

Name: ggg  ..ぴよぴよ(10ポイント)   Date: 2008/03/26(水) 15:32   No:15160     
Title: Re:thread    
動かそうとしたらエラーがでるのですが。。。

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

Name: ggg  ..ぴよぴよ(4ポイント)   Date: 2008/03/26(水) 15:34   No:15161     
Title: Re:thread    
VCではなくC言語でやりたいのですが。。。



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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(63,083ポイント)   Date: 2008/03/26(水) 15:51   No:15162     
Title: Re:thread    
VCはC/C++のコンパイラの事です。ですので、VCを使えば、C言語を使えます。

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

Name: たかぎ [URL]  ..プログラマー(36,570ポイント)   Date: 2008/03/26(水) 16:06   No:15163     
Title: Re:thread    
> スレッドの概要はなんとなくわかりました

では、分かったことを自分の言葉で説明してみてください。
そうすれば、どの部分の理解が足りないのかがよく分かりますので、アドバイスもしやすくなります。


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

Name: やそ  ..プログラマー(35,476ポイント)   Date: 2008/03/26(水) 16:07   No:15164     
Title: Re:thread    
えーと・・・

コピペしてコンパイルしたらエラーというのは自分の開発環境とあっていなければ当然ですよね^^;
「猫でも〜」VCでもBCCでも使えるように環境設定の解説もあったと思いますよ。

ただ、解説&ソースを読めば作り方や注意点などは把握できると思うのですが・・・

それに・・・
yahooあたりの検索で 「C言語 マルチスレッド」
をキーワードに検索すればどっさり表示されませんか?
http://www.ncad.co.jp/~komata/c-kouza28.htm
とかがソースを載せて解説されています。

もっと探し方を工夫すればたくさん見つかると思いますよ。


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

Name: ggg  ..ぴよぴよ(220ポイント)   Date: 2008/03/27(木) 11:52   No:15173 解決!     
Title: Re:thread    
昨日一日かけてスレッドを勉強してました。
私なりの考えでは、同時処理をさせるときなどに使う機能のようです、
今ソケットについても勉強中なんですが、
ひとつは受信用に動かしつずける(無限ループで常に受信状態にしてて)
もうひとつの関数で他の処理をするなどをやっています。

こぴぺで動かなかったのはプロジェクトの設定を変えないといけないのですね。。
もう少し勉強が必要みたいです>>>


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



Name: 内田  ..ぴよぴよ(523ポイント)   Date: 2008/03/23(日) 19:10   No:15099       
Title: C言語について学ぶにあたって、今後の方向性    
こんにちは。内田と申します。

現在、私は高校1年生です。
学校の授業でC言語の基礎について学び、それからプログラミングに興味が湧きました。

そんななか、C言語の質問に答えてくれる素晴らしいサイト様を見つけました。

今回の質問内容は「今後C言語を学ぶにあたって」です。
私は今、C言語の基礎(printf,for,while関数)を学び、四則演算のプログラムをつくることができるようになった程度です。

C言語を学ぼうとしているのですが、C言語つかってどういったことができるのでしょうか?
検索しているのですが、ゲームを作ったり、人の役立つようなプログラムとありますが
それは具体的にどういったことが可能なのでしょうか?

高校卒業までにはフリーソフトを作ったり、簡易的なゲームを作れるようになりたいのですが
これを達成するためにいまからすべきことや、オススメの学習方法などありますか?

今使っているパソコンはwindowsXPでVisualC++2008を導入ずみです。
この環境のもと、学習をしていきたいと思っております。

また、私は将来はweb関係の職に就きたいと思っています。PHPやPerl、ASPなど
各種言語も今後は学習していきたいです。だから、C言語はしっかり学んでおきたいと思います。

ご回答・アドバイスなどいただけると嬉しいです。
ご多忙化と思いますが、よろしくおねがいします。


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


Name: 管理人 [URL]  ..伝説のハッカー(538,429ポイント)   Date: 2008/03/23(日) 20:49   No:15100     
Title: Re:C言語について学ぶにあたって、今後の方向性    
>C言語つかってどういったことができるのでしょうか?

私も同じ事を最初思いました。
最初黒い画面に計算結果だけ表示されるこのプログラム、一体何の役に立つのか?と。
でも、何でも出来るんです。
恐らく質問者さんが今まで見てきたソフトはほぼ全てのものが作れるでしょう。
時間的、技術的な話はともかく、WindowsのようなOSも作ることが出来ます。
(実際にその本機で動かせるかどうかは別として)X-BoxやPS3のような本格3Dゲームも作れますし、ワードやエクセルみたいなソフトも作れます。
オンラインゲームも作れますし、何でも作れますよ。
ご覧頂いたかどうかわかりませんが、現在公開中の四聖龍神録もまたC言語で作りました。
実際に企業に入って開発するときはC++になると思いますが、最初はC言語で十分だと思います。

もしWeb関係の仕事に就くのならCよりJAVAをやったほうがいいかもしれませんが、今Cに興味があるのなら、Cを勉強してからでもいいと思います。
CとJAVAは他の言語に比べてそっくりなので、すぐに勉強できるでしょう。
PHPやパールは触り程度しかやってないので詳しく言えませんが、
高校のうちは自分の好きな興味の沸くことだけやっていればいいと思います。

なので、今興味のあるものを沢山作ってみて下さい。
今どんなものに興味があるのでしょう?
2Dゲーム、3Dゲーム、ワードのようなウィンドウズソフト、各種ツールなど何でもあると思いますが、
基本的なCの知識が付いたら、次は自分の好きなものを沢山作っていけばいいと思います。


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

Name: 内田  ..ぴよぴよ(812ポイント)   Date: 2008/03/23(日) 22:56   No:15102     
Title: Re:C言語について学ぶにあたって、今後の方向性    
管理人さんへ。

お忙しいところ、ご丁寧なご回答、本当にありがとうございます。

どのC言語解説サイトへいっても「C言語でできること」が莫大で
把握しきれてなかったのですが、身の回りの製品やソフトはCによるプログラミングで
成り立っていることを知り、驚きが隠せません!

JAVAにも興味がありますが、今後は学校の授業でCがメインとなるので
その予習としてCを学んでいきたいと思います。

高校卒業までにはwebページを製作する上で便利なフリーソフト(エディタなど)を作れたらと思います。
これが最終的な目標になりますが、ゲームをつくるという経験も活かして力をつけていきたいです。

今からCの基礎を復習し、どんどん作っていきたいと思います。
そして各種言語の学習にも力をいれ、夢を実現させたいです。

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