|
Name: 空 ..ぴよぴよ(611ポイント)
Date: 2008/08/04(月) 07:23
No:19591
|
|
Title: 龍神録の館の4章で…。
|
|
初めまして。
まだC言語始めたばかりでよくわからないので質問させて頂きます。
龍神録の館の4章で
typedef struct を使って新しい型を作りますよね?
それでmain.cppでch_t ch; とキャラクターデータ宣言してるところがあるのですが、
宣言の構文エラーと出てしまいます…
どうしたらいいでしょうか?
使ってるのはBCCdeveloperです。
これが悪いのかな?
簡単な質問すいません;;
154ポイント を手に入れた。
|
|
|
|
Name: kazuoni ..上級者(20,444ポイント)
Date: 2008/08/04(月) 10:46
No:19599
|
|
Title: Re:龍神録の館の4章で…。
|
|
アンダーバー違いとかなんだか簡単な記述ミスな感じがします。
コードを見せてもらえますか?
その際<pre></pre>(<>は半角)でくくってくださいね。規約参照してください。
56ポイント を手に入れた。
|
|
|
|
|
Name: 空 ..ぴよぴよ(758ポイント)
Date: 2008/08/04(月) 15:29
No:19621
| 解決!
|
Title: Re:龍神録の館の4章で…。
|
|
管理人さんありがとうございます^^
一応エラーは消えたみたいです。
(なぜかdefine.hが空になっていたみたいです)
ですがvistaのせいか知りませんが画像が表示されないので
環境設定をちゃんとやりなおしてから続きをやりますね。
ありがとうございました!
kazuoniさんもご足労ありがとうございました^^;
147ポイント を手に入れた。
|
|
|
|
Name: J ..初心者(5,763ポイント)
Date: 2008/08/03(日) 21:45
No:19537
|
|
Title: キーコンフィグについて
|
|
こんばんわ。ただいまキーコンについて考えているのですが・・・
キーコンを保存してそれを読み出して・・・アレ?
その読み出したデータをどうすればいいのか分かりません。。
今、考えているのは、もし保存されているデータがAならば〜とif文の連続を考えています。
それよりも効率的な方法がありましたら、どなたか知恵をください。
DXライブラリのBCC、C++です。
155ポイント を手に入れた。
|
|
|
|
Name: J ..初心者(5,555ポイント)
Date: 2008/08/03(日) 22:01
No:19543
|
|
Title: Re:キーコンフィグについて
|
|
おお!そういえば、龍神録Plusの中にありましたね!
あれも解説してるんですか!ありがたいです。
ちょっと見てきます。
ついでですが、龍神録Plusプレイしてみましたよ。
スペルが楽しみだったのでスペルプラクティスしかしてませんが、すっごく面白いです。
それと同時に管理人さんの技術に圧倒されました。これからも是非ともがんばってくださいね。
平凡なことしか言えませんでしたが、応援しています。
p.s. 没スペルは不可能ですw
208ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(667,933ポイント)
Date: 2008/08/03(日) 22:08
No:19546
|
|
Title: Re:キーコンフィグについて
|
|
遊んで頂きありがとうございます。
スペルプラクティスしか遊んでいないと言う事ですが、
ボツの2つの弾幕以外
ストーリーモードで一度でも見たスペルじゃないと遊べないと思うのですが、
遊ばれたのはその2つのことでしょうか??
ファンタズムは初めから遊べるのでよければ是非時間のあるときにでも遊んでみて下さいm(_ _)m。
コンフィグの件ですが
void first_ini(){
configpad.down=0;
configpad.left=1;
configpad.right=2;
configpad.up=3;
configpad.bom=4;
configpad.shot=5;
configpad.slow=11;
configpad.start=13;
configpad.change=6;
}
こんな風に初期化していると思いますが、この右の数値をファイルなどに記憶しておけばいいでしょう。
365ポイント を手に入れた。
|
|
|
|
|
Name: J ..初心者(6,041ポイント)
Date: 2008/08/04(月) 06:44
No:19590
|
|
Title: Re:キーコンフィグについて
|
|
見ていて分からない箇所があったので質問させていただきます。
//パッドとキーボードの両方の入力をチェックする関数
void GetHitPadStateAll(){
int i,PadInput,mul=1;
PadInput = GetJoypadInputState( DX_INPUT_PAD1 );//パッドの入力状態を取得
for(i=0;i<16;i++){
if(PadInput & mul) pad.key[i]++;
else pad.key[i]=0;
mul*=2;
}
input_pad_or_key(&pad.key[configpad.left] ,CheckStateKey(KEY_INPUT_LEFT ));
input_pad_or_key(&pad.key[configpad.up] ,CheckStateKey(KEY_INPUT_UP ));
input_pad_or_key(&pad.key[configpad.right] ,CheckStateKey(KEY_INPUT_RIGHT ));
input_pad_or_key(&pad.key[configpad.down] ,CheckStateKey(KEY_INPUT_DOWN ));
input_pad_or_key(&pad.key[configpad.shot] ,CheckStateKey(KEY_INPUT_Z ));
input_pad_or_key(&pad.key[configpad.bom] ,CheckStateKey(KEY_INPUT_X ));
input_pad_or_key(&pad.key[configpad.slow] ,CheckStateKey(KEY_INPUT_LSHIFT ));
input_pad_or_key(&pad.key[configpad.start] ,CheckStateKey(KEY_INPUT_ESCAPE ));
input_pad_or_key(&pad.key[configpad.change] ,CheckStateKey(KEY_INPUT_LCONTROL));
}
の部分で
if(PadInput & mul)
とあるじゃないですか。
その&とはどういうものなんでしょうか?
今まで一度もif文の中で演算子として使われているのを見たことがありません。
回答よろしくお願いします。
486ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(670,481ポイント)
Date: 2008/08/04(月) 13:21
No:19612
|
|
Title: Re:キーコンフィグについて
|
|
mul*=2;
と書いた方が逆に解りにくかったでしょうか^^;
ビットを一つシフトしているのです。
まずGetJoypadInputStateの関数の性質について理解する必要があると思いますので、
バグさんの仰ったリンク先をご覧の上、
本家リファレンスのGetJoypadInputStateの説明部分をお読み下さい。
82ポイント を手に入れた。
|
|
|
|
Name: conio ..ぴよぴよ(130ポイント)
Date: 2008/08/03(日) 22:41
No:19552
|
|
Title: ランダム部屋作成プログラム
|
|
現在、部屋をランダムに作るプログラムを作成しています。
(入るたびに部屋の位置や形が変わるダンジョンを作成する)
【WindowsXP:Visual C++ 2008 Express Edition】
大まかな流れとしては、
@フィールドを分割し、複数の領域を作り、領域の情報を格納する(境界線も1マス分使用)
A格納された領域情報を元に、部屋を作る
B作成された部屋から境界線まで、道を作る
C境界線で不要な部分(道以外の部分)を削除
という様になっているのですが、
一番左上に部屋が作られた場合、なぜか部屋の左上の頂点が欠けてしまう場合があります。
この原因が分からないので、もし分かる方が居れば教えてもらいたいです。
C言語歴は、まだ3ヶ月位です。
※このプログラムは部屋を表示するだけなので、キャラクタの移動機能はありません
130ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(669,385ポイント)
Date: 2008/08/04(月) 03:35
No:19584
|
|
Title: Re:ランダム部屋作成プログラム
|
|
4x4や5x5や6x6で確認したところ、
いつも
void connect(void)
{
int w,i;
for(w=0;w < z-1;w++){
if(a[w].flag < 2){
for(i=a[w].top; i<=a[w].bottom; i++){
if(field[ i ][ a[w].c ] == 4)
break;
field[i][a[w].c]=0;
ここに捕まっていました。
3は正常に代入されていましたが、ここで0が代入された為空白になっているようでした。
0がどこかで代入しなおされているのなら、0がどこかで代入されていないかブレイクポイントなどを
使って確認していくのがバグ取りの基本かと思います。
ここの判定式や条件式を見直されたらよいかと思います。
200ポイント を手に入れた。
|
|
|
|
|
Name: conio ..ぴよぴよ(224ポイント)
Date: 2008/08/04(月) 06:32
No:19589
| 解決!
|
Title: ありがとうございます
|
|
返答ありがとう御座います
もう一度条件式や選択処理を見直してみます
ここのサイトを見て、自分でもゲームを作成してみたいと思ったので、
完成するまで頑張ります
(余談ですが、ニコニコ動画で東方みたいなゲームを〜という動画を見て、ここのサイトを知りました)
94ポイント を手に入れた。
|
|
|
|
Name: ツリー ..ぴよぴよ(158ポイント)
Date: 2008/08/04(月) 00:28
No:19571
|
|
Title: 指定した部分だけ輝度を設定するやり方
|
|
こんにちは。ゲームプログラミングの館をいつも拝見させてもらってます。
独学でゲーム作成をがんばってるんですが、分からない所があるので教えてください。
ゲーム基本編の35章で「画面を段々暗く & 段々明るく」
するやり方が書いてありますが、(SetDrawBrightを使用)これだと、画面全体が指定されてしまいます。
左側は普通通りの輝度で、右側だけ段々暗く or 段々明るくするのをやりたいのですが、
どうすれば、出来ますか?分かる方ご教授お願いします。では、よろしくお願いします。
158ポイント を手に入れた。
|
|
|
|
Name: array ..中級者(10,671ポイント)
Date: 2008/08/04(月) 00:35
No:19572
|
|
Title: Re:指定した部分だけ輝度を設定するやり方
|
|
SetDrawArea( int x1 , int y1 , int x2 , int y2 ) ;
で描画可能領域のセットしてあげれば良いです。処理した後は、可能領域を元に戻します。
SetDrawArea( 0 , 0 , 640 , 480 ) ;
68ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(102,652ポイント)
Date: 2008/08/04(月) 00:36
No:19574
|
|
Title: Re:指定した部分だけ輝度を設定するやり方
|
|
マスク画像を用意して、アルファブレンドすればいいんではないでしょうか?
38ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(668,442ポイント)
Date: 2008/08/04(月) 00:37
No:19575
|
|
Title: Re:指定した部分だけ輝度を設定するやり方
|
|
SetDrawBrightを指定してから描画した画像のみその輝度になります。
つまり以下簡略化してかくと
DrawGraph(1);
SetDrawBright(128,128,128);
DrawGraph(2);
SetDrawBright(255,255,255);
DrawGraph(3);
とかけば、2の画像のみ半分の明るさになります。
また同じ一つの画像を半分にわけて処理したい時は、
左半分を一度描画して、輝度を設定後、右半分を描画するとよいでしょう。
描画範囲を設定する関数は
SetDrawArea()
です。詳しい使い方はリファレンスをご覧下さい。
もしそれでもわからなければサンプルプログラムをお作りします。
250ポイント を手に入れた。
|
|
|
|
|
Name: ツリー ..ぴよぴよ(727ポイント)
Date: 2008/08/04(月) 01:18
No:19581
|
|
Title: もう一回質問お願いします。
|
|
皆さんご指導ありがとうございます。
管理人さん
>SetDrawBrightを指定してから描画した画像のみその輝度になります。
管理人さんに教えてもらった通りにプログラムを作ってみたのですが、
どうしても全体の輝度が変わってしまいます。プログラムのミスを見てもらえませんか?
『エンドロールを作成したくて、
「左側に流れてくる文字。右側に画像が表示され、文字が一定の位置に来ると画像が消えていく。」ようにした
プログラムのつもりですが・・・。』
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定
x+=2;
i+=2;
{
ClearDrawScreen(); // 裏画面のデータを全て削除
DrawStringToHandle(80,i, "GAME CLEAR" , Black,FH);//文字列表示
DrawStringToHandle(50,x, "MP3やMIDIをお借りしたサイト" , Black,FH);//文字列表示
if(x>=0 && x<400) //cが0~256の時
SetDrawBright(255-aaa,255-aaa,255-aaa);
DrawGraph( 380 , 140 , TOPA , FALSE ) ;
aaa+=1;
if(x>470)
function_status=10;
ScreenFlip() ; // 裏画面データを表画面へ反映
569ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(669,175ポイント)
Date: 2008/08/04(月) 01:34
No:19582
|
|
Title: Re:もう一回質問お願いします。
|
|
こんな風に描画範囲を分けて描画してみてはどうでしょうか。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; //ウィンドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定
while( 1 ){
ClearDrawScreen(); // 裏画面のデータを全て削除
SetDrawBright( 128 , 128 , 128 );//半分の輝度
SetDrawArea(0,0,320,480);
DrawString(210,100,"DxライブラリDxライブラリ",GetColor(255,255,255));
DrawString(280,150,"DxライブラリDxライブラリ",GetColor(255,255,255));
SetDrawBright( 255 , 255 , 255 );//明るさ通常
SetDrawArea(320,0,640,480);
DrawString(210,100,"DxライブラリDxライブラリ",GetColor(255,255,255));
DrawString(280,150,"DxライブラリDxライブラリ",GetColor(255,255,255));
if( ProcessMessage() == -1 ) break ; //エラーが起きたら終了
ScreenFlip() ; // 裏画面データを表画面へ反映
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
677ポイント を手に入れた。
|
|
|
|
|
Name: ツリー ..かけだし(1,176ポイント)
Date: 2008/08/04(月) 03:48
No:19585
| 解決!
|
Title: 解決しました。
|
|
管理人さん
>こんな風に描画範囲を分けて描画してみてはどうでしょうか。
やってみたところ、成功しました。ありがとうございました。
たぶんこのエンドロールを作る作業に4.5時間は費やしたと思いますが、やっとやり方がわかったので
先が見えました。ありがとうございます。
というか、3時間前にarrayさんが「描画可能領域のセット」のやり方を教えてくれてますね。
アフォですいません。
>あと、消えていく演出は輝度の設定ではなく、αブレンドになると思うのですが
調べてみたところ、確かに消えていく演出はαブレンドでした。
ではなぜなるんだろう?と今、ふと考えてみた所、
背景が真っ黒なんで、輝度の設定でも消えていく演出の様に見えていたんですね。
背景が黒じゃなかったら、黒く塗りつぶされてただけなんですねw
ゲーム基本編のαブレンド〜透けてる感じを表現〜に透けて行く感じのやり方まんま書いてありますね。うわっ恥ずかしい・・・・。重ね重ねすみません。今日はわざわざありがとうございました。
449ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(669,532ポイント)
Date: 2008/08/04(月) 04:35
No:19587
|
|
Title: Re:解決しました。
|
|
エンドロールは今まで作ってきたゲームをココで感動させれるかどうかのかかった部分ですから
こりたいですよね。
私もかなり時間をかけて作っている部分です。
シューティングプログラムに浸りすぎた私は、スタッフロールの字幕すら
シューティングプログラムで書いています。
字幕発射→登録、計算、そして描画という流れは扱いやすいんですよね。
館はゴミゴミして解りにくいと思うのでまた何かあればお気軽にお聞き下さいm(_ _)m
147ポイント を手に入れた。
|
|
|
|
Name: cleria ..ぴよぴよ(7ポイント)
Date: 2008/08/03(日) 23:18
No:19557
|
|
Title: 龍神録プログラミングの館12章あたりで・・
|
|
初めて書かせていただきますcleriaと申します。
C言語はかじった程度ですが、ゲームプログラミングをしてみたいと思い、
龍神録プログラミングの館で地道に勉強させていただいています。
なんとか12章の「たくさんの敵の行動パターンを作ってみよう」までいったのですが、
実際にビルドしたところ、画面が出た直後、左上に設定上存在しないはずの敵が現れて、
行動パターン0の動きをして去っていく、という現象が起こりました。
enemy_enter関数の中で
if(enemy_order[t].cnt==stage_count && stage_count!=0)
という風に試しに書き換えると出なくなったところを見ると、なぜかstage_countが0のときに
敵が出現することになってしまっているようなのですが・・・。
なにぶん知識不足で原因をつきとめることができませんでした。
なぜこのようなことが起きるのでしょうか?
7ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(667,850ポイント)
Date: 2008/08/03(日) 23:30
No:19561
|
|
Title: Re:龍神録プログラミングの館12章あたりで・・
|
|
stage_countはini関数で初期化として1を入れていると思いますがいかがでしょうか?
敵の出現データは格納されていないものは全て0になっているので、
stage_countが0から始まると格納されていない配列要素のデータが大量に登録されてしまうので、
1から始まるようにしてあります。
また、12章のcsvデータは特別なのでそれようのエクセルデータを読み込むため
サンプルプロジェクトではエクセルデータの読み込みに
char fname[32]={"../dat/csv/12章/storyH0.csv"};
と書いていますがそうなっていますか?
228ポイント を手に入れた。
|
|
|
|
|
Name: cleria ..ぴよぴよ(282ポイント)
Date: 2008/08/04(月) 00:00
No:19568
|
|
Title: Re:龍神録プログラミングの館12章あたりで・・
|
|
すばやいお返事ありがとうございます。
今、龍神録プログラミングの館で確認してきました。
以下10章より引用させていただきます。
--ini.cppを変更--
#include "../include/GV.h"
//一番最初の初期化
void first_ini(){
configpad.down=0;
configpad.left=1;
configpad.right=2;
configpad.up=3;
configpad.bom=4;
configpad.shot=5;
configpad.slow=11;
configpad.start=13;
configpad.change=6;
}
//ゲームの初期化
void ini(){
stage_count=0;
memset(&ch,0,sizeof(ch_t));//自機データの初期化
ch.x=FIELD_MAX_X/2;
ch.y=FIELD_MAX_Y*3/4;
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);//敵データの初期化
}
これ以降12章までstage_countに関する変更が見当たらないので0なのかと思っていたのですが・・・。
どういうことなのでしょう・・?
エクセルデータの読み込みのほうはちゃんとなってるので大丈夫そうです。
275ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(668,192ポイント)
Date: 2008/08/04(月) 00:27
No:19570
|
|
Title: Re:龍神録プログラミングの館12章あたりで・・
|
|
う、ごめんなさい、stege_count=1が正しいです。
もしもサンプルプロジェクトのコードとウェブのコードが違っている場合は
サンプルプロジェクトのコードが正しいです。
さっそく書き直しておきます。
ご報告ありがとうございます。
今後も何かミスがありましたら教えていただけると幸いです。
また、後の章になってくると細かい変更点が多くなってきますので、
全ての変更点については書いていない場合がありますので、
その時はプロジェクトの方で確認していただければと思います。
238ポイント を手に入れた。
|
|
|
|
|
Name: cleria ..ぴよぴよ(445ポイント)
Date: 2008/08/04(月) 00:42
No:19577
|
|
Title: Re:龍神録プログラミングの館12章あたりで・・
|
|
なるほど、わかりました。
これからはわからなければ、まずプロジェクトを落としてから確認してみることにします。
またこの掲示板で質問させていただくこともあるかもしれませんが、その時はまたよろしくお願いします^^
あ、あと全然関係ないんですがこの掲示板の「規約と使い方」の中にある義務行為に関する記述で、
「・・・公の場です。マザーを守った発言をしましょう。」
というところでちょっと笑ってしまいました。
ここも修正箇所として挙げておきます(笑)
では、本当にありがとうございました。
これからも体に気をつけて頑張ってください。
163ポイント を手に入れた。
|
|
|
|
Name: array ..中級者(9,907ポイント)
Date: 2008/08/03(日) 20:54
No:19528
|
|
Title: 宣言の型について
|
|
他スレを見てたら、気になったので質問させてもらいます。
私は、情報系じゃないけど授業で半年ほど上っ面だけ習いました。
その時、int型は整数、double型は少数だ!
int a=1.0;
or
a = 1/2;
double b=1;
b = 2/1;
なんてしたら絶対だめだぞ!
int a=1;○
a = 2/1;ok
double b=1.0;○
b = 2.0/1.0;○
動くけどたまたま動作してるだけだ!、予想しない不具合につながるぞ!といわれたのですが
要するに、型たいして対応してない書き方をしちゃダメだよ。って事なんだと思いますが
そう言ってたので、実際もそうなんでしょうが・・・・
龍神録の館では、スピードや角度計算に、普通に整数使っていたので・・・。
最近ではdoubleでも気にしないで、1とか整数を書いていますが、やはりこれからは意識して1.0と書いた方がいいのかと思い質問しましたm(_ _)m
394ポイント を手に入れた。
|
|
|
|
Name: array ..中級者(9,940ポイント)
Date: 2008/08/03(日) 21:00
No:19529
|
|
Title: Re:宣言の型について
|
|
ちょっと他にも気になる間違い例を上げておきます
//宣言部
int a,b;
double c,d;
/-中略何があったとしても-/
a = 60*c;
a = 60+c;
b = a+c;
d = a+c;
他にも間違いを作る組み合わせはあると思うのですが、『いや、その書き方あってるよ』ってのはありますか?
33ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(119,946ポイント)
Date: 2008/08/03(日) 21:17
No:19532
|
|
Title: Re:宣言の型について
|
|
> その時、int型は整数、double型は少数だ!
少数ではなくて小数です。
> int a=1.0;
問題ありません。コンパイル時に警告が出るかもしれませんけれど。
> a = 1/2;
問題ありません。aにはゼロが入ります。意図と同じかどうかは別として。
> double b=1;
問題ありません。bには1.0が入ります。
> b = 2/1;
問題ありません。bには2.0が入ります。
> なんてしたら絶対だめだぞ!
というわけで、絶対ダメだというわけではありません。
速度が気になるのであれば、例えば上記の
b = 2 / 1;
と、
b = 2.0 / 1.0;
とを、それぞれ1億回くらい繰り返すようなループを作って、
各々の実行時間がどれくらい違うのかを確認してみればよいと思います。
210ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(120,052ポイント)
Date: 2008/08/03(日) 21:20
No:19533
|
|
Title: Re:宣言の型について
|
|
> //宣言部
> int a,b;
> double c,d;
>
> /-中略何があったとしても-/
>
> a = 60*c;
右辺を計算するときに整数の60をdoubleに格上げして、double型で計算します。
その結果をint型のaに代入するときに、小数点以下を切り捨てるだけです。
そういう仕組みをわかった上で書いているのであれば、間違いではありません。
他の例も同様です。
106ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(52,646ポイント)
Date: 2008/08/03(日) 21:27
No:19534
|
|
Title: Re:宣言の型について
|
|
> とを、それぞれ1億回くらい繰り返すようなループを作って、
> 各々の実行時間がどれくらい違うのかを確認してみればよいと思います。
インタープリタのような処理系を除けば、定数式になるので何回繰り返しても同じです。
また、インタープリタの場合でも、少なくともCINTではバイトコードにコンパイルするのでやはり何回繰り返しても同じです。
ただし、状況によっては、バイトコードにならないことがあるので、その場合には影響が出るでしょう。
いずれにせよ、予測しない不具合につながることはありません。
90ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(10,316ポイント)
Date: 2008/08/03(日) 21:35
No:19535
|
|
Title: Re:宣言の型について
|
|
参考書なんかにdouble型に対してなんかに1が使われてたりすると、これ間違いだよ1.0ね。と言ってたので。
ちょっと過剰に書いてしまいましたが、問題ないのであれば良かったです。
速度というのは処理速度ではなく、整数を使ってるよという事だけの話でした><
今日、弾幕計算やってた時に以下の様な現象があったで・・・自分が理解していない上で書いてたのでboxさんとたかぎさんの回答をもとに考察してみます。
#include <stdio.h>
int main(void)
{
int n;
double i;
printf("%f\n", i);
for(n=0; n<10000; n++)
i += 1/6;
printf("%f\n",i);
return 0;
}
##実行結果
0.000000
0.000000
テスト2
#include <stdio.h>
int main(void)
{
int n;
double i;
printf("%f\n", i);
for(n=0; n<10000; n++)
i += 1.0/6.0;
printf("%f\n",i);
return 0;
}
##実行結果
0.000000
1666.666667
376ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(10,369ポイント)
Date: 2008/08/03(日) 21:39
No:19536
| 解決!
|
Title: Re:宣言の型について
|
|
> 右辺を計算するときに整数の60をdoubleに格上げして、double型で計算します。
> その結果をint型のaに代入するときに、小数点以下を切り捨てるだけです。
> そういう仕組みをわかった上で書いているのであれば、間違いではありません。
> 他の例も同様です。
>
1/6だからintで計算して切り捨てて0になったのをdoubleに入れるから予想しない結果になったんですね><;
勉強になりました。
53ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(10,474ポイント)
Date: 2008/08/03(日) 21:56
No:19540
|
|
Title: Re:宣言の型について
|
|
とりあえず、1.0/6や1/6.0、1/2や9/10を試してみました所、計算部にdoubleがあると他はintは格上げされ、int型のみだと切り捨てされる事が分りました^^
これからちゃんとした使い分けができそうです。
それとバイトコードというのが分からなかったので調べてみましたが、簡単にはわかりそうになかったので諦めました。
皆さん回答ありがとうございます^^
105ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(667,568ポイント)
Date: 2008/08/03(日) 22:04
No:19544
|
|
Title: Re:宣言の型について
|
|
>>その時、int型は整数、double型は少数だ!
>少数ではなくて小数です。
もっと突っ込むと実数ですね(小数が扱えるという表現が適切でしょうか)
余談ですが、
1.0f
と書くとfloatを意味します。
1.0
と書くとdoubleを意味します。
だから
float a;
a= 2/3.0f;
では警告は出ませんが、
a=2/3.0;
だと警告が出ると思います。
int型とdouble型を計算するとdoubleになり、
floatとdoubleを計算するとdoubleになり、
intにdoubleを代入すると整数になる、
とかさえ覚えておけば、計算の過程で何の値がどうなっているのか確認できると思います。
65ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(120,057ポイント)
Date: 2008/08/03(日) 22:06
No:19545
|
|
Title: Re:宣言の型について
|
|
> double i;
>
> printf("%f\n", i);
0.000000
と出力したのは「偶然」です。定義しただけで初期化していない
変数の値は、不定です。
5ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(10,542ポイント)
Date: 2008/08/03(日) 22:12
No:19547
|
|
Title: Re:宣言の型について
|
|
たしかに警告を出していました。似た経験で以前に
int i;
i++;
とした時にエラー起こしてました。最初から0が入ってるわけではないんですね。
68ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(10,603ポイント)
Date: 2008/08/03(日) 23:15
No:19555
|
|
Title: Re:宣言の型について
|
|
他にもif()内での計算やら・・・色々やってみて大体どんな値になるか分りました。
参考書なんかには書いてない事が聞けて勉強になりました^^
61ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(53,576ポイント)
Date: 2008/08/03(日) 23:56
No:19567
|
|
Title: Re:宣言の型について
|
|
> もっと突っ込むと実数ですね(小数が扱えるという表現が適切でしょうか)
いや、実数というのは「虚数」に対しての「実数」です。
実際、Cの規格にも「実数型」というのが出てきて、それは、整数型と実浮動小数点型の総称ということになっています。
虚数型というのは、double _Complexとかdouble _Imaginaryとかのことで、doubleなどの実浮動小数点型と虚数型をあわせたものが「浮動小数点型」です。
2倍のポイントを手に入れた! 284ポイント を手に入れた。
|
|
|
|
Name: こめかみ ..入門者(3,987ポイント)
Date: 2008/08/03(日) 20:02
No:19517
|
|
Title: 竜神録四章と七章について
|
|
四章のgraph.cppで
void graph_ch(){
DrawRotaGraphF(ch.x,ch.y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}
は、
void graph_ch(){
DrawRotaGraph(ch.x,ch.y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}
ですよね、Fが余分です。
あと七章のgraph.cppの
void graph_board(){
DrawGraph( 0, 0,img_board[10],FALSE);
DrawGraph( 0, 16,img_board[11],FALSE);
DrawGraph( 0,464,img_board[12],FALSE);
DrawGraph(416, 0,img_board[20],FALSE);
}
この変数のずれはなんなんでしょうか。
void graph_board(){
DrawGraph( 0, 0,img_board[10],FALSE);
DrawGraph( 0, 16,img_board[11],FALSE);
DrawGraph( 0,464,img_board[12],FALSE);
DrawGraph(416, 0,img_board[20],FALSE);
}
こっちのほうが良くないですかってああ!
Visual C++からコピペするとずれるんですね、なんか一人で納得しました。
アイコンの件アリガトウございます。早速使ってみますよ。
いやー仕事早いッすね、早速使ってみますよ。
489ポイント を手に入れた。
|
|
|
|
Name: array ..中級者(9,513ポイント)
Date: 2008/08/03(日) 20:07
No:19519
|
|
Title: Re:竜神録四章と七章について
|
|
DrawRotaGraphFは隠し関数なのか詳しくは知りませんが、XとYをフロートで記入できるみたいです。
なのでch.xはdouble型なのでフロート対応の方が良いのではないでしょうか。
間違ってたらすみません><
84ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(667,501ポイント)
Date: 2008/08/03(日) 20:09
No:19520
|
|
Title: Re:竜神録四章と七章について
|
|
FがついているのはFloat型を受け付ける関数だからです。
DrawRotaGraphはint型の座標しか受け付けない関数であるのに対し、
DrawRotaGraphFはfloat型の座標を受け付ける関数です。
直線に近い角度で弾を発射するとその違いがはっきりわかると思います。
もし関数名の間違いがあればコンパイルエラーになるはずですので。
後、スペース数のずれは直しておきます。
ありがとうございます。
108ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..入門者(4,010ポイント)
Date: 2008/08/03(日) 20:19
No:19521
|
|
Title: Re:竜神録四章と七章について
|
|
お疲れ様です。
>直線に近い角度で弾を発射するとその違いがはっきりわかると思います。
早く弾幕講座までたどりつきたいです。
9ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(667,651ポイント)
Date: 2008/08/03(日) 20:19
No:19523
|
|
Title: Re:竜神録四章と七章について
|
|
遅かった・・w
arrayさんありがとうございます。
仰るとおりです。
今現在のままではdoubleからfloatの変換なので警告が出ますが、
問題ありません。
この警告は後々消そうと思っています。
また、intとfloatを使うそれぞれの関数を使った違いは、
floatは小数点を受け付けるので傾きのある直線をスムーズに進むのに対し、
int型しか受け付けない直線は
この青のように進むので、カクカクしてしまうわけです。
1ピクセル以内の出来事ですから、斜め45°に近い傾きではあまり感じられませんが
直線に近い傾きではそれが実感できるはずです。
150ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..入門者(4,074ポイント)
Date: 2008/08/03(日) 20:21
No:19524
|
|
Title: Re:竜神録四章と七章について
|
|
まだまだ知らない高度なテクがあるのですね。
勉強になります。
思ったことガンガン書き込んでいくので見当はずれなこともあるかと思いますがよろしくお願いしますねarray管理人さん。
64ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..入門者(4,134ポイント)
Date: 2008/08/03(日) 20:26
No:19525
|
|
Title: Re:竜神録四章と七章について
|
|
うおー返事書いてるうちにレスされちゃうのはどうにかならないものでしょうかねー
レスしてくれてる様子が見えればいいのに。
>この青のように進むので、カクカクしてしまうわけです。
カクカク弾幕ってのも面白そうですね。
60ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..入門者(4,159ポイント)
Date: 2008/08/03(日) 20:28
No:19526
|
|
Title: Re:竜神録四章と七章について
|
|
arrayさんに管理人さんでした。
すみません、もっと落ち着いて書き込もうと思います。
25ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(667,735ポイント)
Date: 2008/08/03(日) 20:45
No:19527
|
|
Title: Re:竜神録四章と七章について
|
|
1ピクセル内の出来事なので、不快なカクカクさでしかない為、
わざとカクカクした弾幕が作りたいなら弾の軌道を20ピクセルごとに変更するなど、
意図的に実装したカクカクさが必要かとは思います。
レスの様子は他のタブに掲示板のトップを表示しておいて、投稿する前にF5を押して
確認してから投稿するとかでどうでしょうか。
84ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..入門者(4,258ポイント)
Date: 2008/08/03(日) 21:06
No:19530
|
|
Title: Re:竜神録四章と七章について
|
|
レスのアドバイスありがとうございます、気をつけます。
不快なカクカクですか、それは逆に興味が沸きます。
自分の目で確かめるしかないですね。
あとそのDrawRotaGraphF関数って本家リファレンスに無いんですけどどうやって知ったんですか?
"真・リファレンス"みたいなのがあるのなら今後報告するときに先に確認しておきたいのですが。
99ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(667,465ポイント)
Date: 2008/08/03(日) 21:54
No:19539
|
|
Title: Re:竜神録四章と七章について
|
|
基本DXライブラリ愛好家の皆さんはリファレンス無しでヘッダファイルを見て利用されるようです。
DXライブラリをインクルードするヘッダファイルがありますよね、
あそこに沢山関数の宣言と少しの注釈があります。
賢い人はその関数名と引数名みただけで利用方法がわかるそうです。
とりあえず類似関数で何か違う機能のものが無いか探したかったら関数名で検索すれば
隣に近い名前の関数があると思うので確認してみて下さい。
それでもわからなければ、製作者様に掲示板で聞いてみるのがいいと思います。
3D表示のビューポイントの変更などは非公開関数で、私もよくわからなかったので、
本家掲示板で聞いて使えるようになりました。
270ポイント を落としてしまった。
|
|
|
|
|
Name: こめかみ ..入門者(4,420ポイント)
Date: 2008/08/03(日) 23:55
No:19566
| 解決!
|
Title: Re:竜神録四章と七章について
|
|
ヘッダファイルですか。
以前みたときはちんぷんかんぷんでしたが。
今見てみたらなんとなく意味がありそうに見えてきました。
>賢い人はその関数名と引数名みただけで利用方法がわかるそうです。
賢い人すげー。
ありがとうございました、関数名は誤字を疑わずに検索ですね。
2倍のポイントを手に入れた! 162ポイント を手に入れた。
|
|
|
|
Name: デンマーク ..ぴよぴよ(258ポイント)
Date: 2008/08/01(金) 08:11
No:19316
|
|
Title: リングバッファについて
|
|
リングバッファを作成しています。上書きの部分とかいろいろ考えてようやく正常に動くところまで、できました。自分としては大丈夫だと考えていますが、何かここが変だぞという箇所があったら指摘をいただきたいです。
ご存知だと思いますが
リングバッファとは配列にデータを格納していき、
最大格納数に達したら古いデータから上書きしていくというものです。
data_set[SIZE]; // 大きさが SIZE の配列を宣
言
long data_head; // データ先頭位置を表す変数
long data_number; // 総データ数
long data_new; // 最新のデータ位置を表す変数
}DATA; // データ型の宣言
DATA data_data;//変数を使うために宣言 DATAは型でdata_data
は変数
void data_set( long data )
{
2
data_data.data_set[data_new] = data; //データを保存
していく
5 2
if( data_number <= SIZE - 1 ) //データ個数がSIZE以下の
時
{ 3
data_number ++; //データ個数が増えていくが「head」は動
かない
3 3
data_new = data_number ; //最新のデータ位置がずれて
いく
3 2
if(data_new > SIZE - 1) //最新データ位置が配列数をこえ
たら
{ 0
data_new = 0; //最新データ位置を配列の最初に戻す
}
}
else //データ個数がSIZEより大きい時
{
0 5 3
data_new = (data_number + 1) % SIZE;
3
data_head++; //古い位置をインクリメント
6
data_number++; //データ総数は増えていく…
3 2
if( data_head > SIZE - 1 ) //古いデータ位置が配列より
大きくなったら
{
0
data_head = 0; // 0に戻す
}
}
258ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(119,398ポイント)
Date: 2008/08/01(金) 08:51
No:19317
|
|
Title: Re:リングバッファについて
|
|
DATAの定義の先頭部分にあるはずのstructが抜けていたり、
インクルードしているはずのヘッダーファイルがなかったり、
コンパイルするにはmain関数などの定義が抜けていたり、
コードの途中に意味のわからない数字が紛れ込んでいたり、
preタグと/preタグによる字下げを行なっていなかったりしていますので、
お書きになったコード全体を正確に載せていただけますか?
14ポイント を落としてしまった。
|
|
|
|
|
Name: バグ ..ハッカー(100,529ポイント)
Date: 2008/08/01(金) 09:25
No:19318
|
|
Title: Re:リングバッファについて
|
|
リスト構造にしてしまえばいいのではないでしょうか?
とはいうものの、私自身この辺のことはSTL任せでほとんど勉強していなかったので、試しに書いてみました。
あ、main関数は省いてあり、リングバッファに関する部分のみ載せています。
本来は利便性を考えれば、双方向リストにすべきなんでしょうが、今回はスレ主さんの仕様に沿ってみました。
ツッコミよろしくお願いします(^_^;)
#define SIZE 10
/* リスト構造体 */
struct list
{
int data;
struct list* next;
};
/* リングバッファ構造体 */
struct ring
{
struct list buffer[SIZE];
struct list* set_pos;
};
/* リングバッファの初期化 */
void initialize(struct ring* r)
{
for (int i = 0; i < SIZE; i++)
{
r->buffer[i].data = 0;
if (i + 1 >= SIZE)
{
r->buffer[i].next = &r->buffer[0];
}
else
{
r->buffer[i].next = &r->buffer[i + 1];
}
}
r->set_pos = &r->buffer[0];
}
/* リングバッファへ新しいデータをセットする */
void set(struct ring* r, int data)
{
r->set_pos->data = data;
r->set_pos = r->set_pos->next;
}
409ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(119,581ポイント)
Date: 2008/08/01(金) 11:03
No:19319
|
|
Title: Re:リングバッファについて
|
|
>デンマークさん
リングバッファーを実装するには、少なくとも
・データの先頭位置(次にそこから取り出す)
・データの末尾位置(次にそこに挿入する)
・バッファーが空っぽかどうかの判定(空っぽならば、取り出そうとしてもできない)
・バッファーが満杯かどうかの判定(満杯ならば、挿入しようとしてもできない)
といったようなことを管理できる必要があります。
183ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(52,435ポイント)
Date: 2008/08/02(土) 13:39
No:19379
|
|
Title: Re:リングバッファについて
|
|
古いものを上書きするということなので...
> ・バッファーが空っぽかどうかの判定(空っぽならば、取り出そうとしてもできない)
> ・バッファーが満杯かどうかの判定(満杯ならば、挿入しようとしてもできない)
すくなくとも、上の二つは不要です。
ちょっと私も作ってみましたが、至って簡単です(テスト用のmainは手抜きです)。
#include <stdio.h>
#include <errno.h>
#define N 4
long data[N];
size_t size = 0;
void data_set(long value)
{
data[size++ % N] = value;
}
int main(void)
{
long value;
size_t start;
size_t n;
size_t i;
while (scanf(" %ld", &value) == 1)
{
data_set(value);
}
if (size < N)
{
start = 0;
n = size;
}
else
{
start = size % N;
n = N;
}
for (i = 0; i < n; i++)
{
printf("%ld\n", data[(start + i) % N]);
}
return 0;
}
データの取り出し部分は専用の関数にしてもよい気がしますが、まあこれでも十分でしょう。
途中でデータを取り出すのであれば、取り出し位置の管理が別途必要になります。
239ポイント を手に入れた。
|
|
|
|
|
Name: デンマーク ..ぴよぴよ(470ポイント)
Date: 2008/08/02(土) 14:31
No:19383
|
|
Title: Re:リングバッファについて
|
|
みなさま、ご意見ありがとうございます。
main関数仕様にして、取り出し関数も追加したものを
添付しましたがコンパイルするとエラーがでてしまいます。
「未定義のシンボルがそうたら」とでています。
その原因を教えて頂けたらと思います。
あと取り出し関数で errorを返す時に
値は何を返したらいいでしょうか?
型が long なので値がかぶらないものを考えています。
説明が雑で申し訳ありませんが宜しくお願いします。
212ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(102,174ポイント)
Date: 2008/08/02(土) 21:59
No:19393
|
|
Title: Re:リングバッファについて
|
|
>>あと取り出し関数で errorを返す時に
>>値は何を返したらいいでしょうか?
>>型がlong なので値がかぶらないものを考えています。
絶対にかぶらない値というのは無いのではないでしょうか?
ですので、関数の戻り値で成否を判定し、データの格納は変数のアドレスを渡してあげることで解決してみてはいかがでしょうか?
それから、デンマークさんのソースで気になったのは構造体のメンバ変数にアクセスするのにドットではなくカンマを使用している点ですね。これではコンパイルすら通らなかったのではないでしょうか?
下記のソースは、できるだけデンマークさんのやりたかったであろう流れを推測して残しつつ、0から書き直してみました。グローバル変数は使わずにポインタを利用しています。
総データ数や、データ取り出し回数などのオーバーフロウを起こしそうな箇所も対策をしておきました(とはいえ、SIZEの値がintで表現できる値を超えてしまうとこのソースでもオーバフロウをおこしてしまう可能性はあります)ので、参考になればよいのですが…
#include <stdio.h>
#define SIZE 10
struct DATA
{
long data[SIZE]; // データ格納用の配列
int new_pos; // 最新データのインデックス
int first_pos; // 最も古いデータのインデックス
int last_pos; // 最後に取得したデータのインデックス
int count_check; // データ数がSIZEを超えたら1、そうでない場合は0
int get_check; // 一度でもデータの取得を行ったら1、そうでない場合は0
};
// プロトタイプ宣言
void init(struct DATA* data);
void set(struct DATA* data, long value);
int first(struct DATA* data, long* buffer);
int next(struct DATA* data, long* buffer);
int main(void)
{
int i, j;
long buf = 0;
DATA data;
// 初期化
init(&data);
// エラーテスト
if (first(&data, &buf) == 0)
{
printf("first関数が実行されましたが、データがありません\n");
}
if (next(&data, &buf) == 0)
{
printf("next関数が実行されましたが、データがありません\n");
}
// リングバッファに代入されるデータの動きを見るテスト
for (i = 0; i < 33; i++)
{
// データをセットする
set(&data, i);
// メンバ変数であるdata配列の値を全て表示する
for (j = 0; j < SIZE; j++)
{
printf("%02d ", data.data[j]);
}
// 最も古いデータのインデックスを表示する
printf("first index = %d\n", data.first_pos);
}
// データ取得テスト
if (first(&data, &buf) == 0)
{
printf("first関数が実行されましたが、データがありません\n");
}
else
{
printf("first value = %d\n", buf);
}
if (next(&data, &buf) == 0)
{
printf("next関数が実行されましたが、データがありません\n");
}
else
{
printf("next value = %d\n", buf);
}
return 0;
}
void init(struct DATA* data)
{
int i;
for (i = 0; i < SIZE; i++)
{
data->data[i] = 0;
}
data->new_pos = 0;
data->first_pos = 0;
data->last_pos = 0;
data->count_check = 0;
data->get_check = 0;
}
void set(struct DATA* data, long value)
{
// 最新データのインデックスが指し示す場所へ値を代入する
data->data[data->new_pos] = value;
// チェックが1の場合は最も古いデータのインデックスを更新する
if (data->count_check == 1)
{
data->first_pos++;
// 更新された値が配列の要素数を超えた場合は0にする
if (data->first_pos >= SIZE)
{
data->first_pos = 0;
}
}
// 最新データのインデックスを更新する
data->new_pos++;
// 更新された値が配列の要素数を超えた場合は0にする
if (data->new_pos >= SIZE)
{
data->new_pos = 0;
// ここを通るということはデータ総数がSIZEを超えたという事なので、checkを1にする
data->count_check = 1;
}
}
int first(struct DATA* data, long* buffer)
{
// 最新データのインデックスが0で、なおかつチェックが0の場合はデータ無しとみなす
if (data->new_pos == 0 && data->count_check == 0)
{
// エラー値を返す
return 0;
}
// 最後に取得したデータのインデックスを更新する
data->last_pos = data->first_pos;
// データ取得フラグをたてる
data->get_check = 1;
// バッファにデータを代入する
*buffer = data->data[data->first_pos];
// 正常終了
return 1;
}
int next(struct DATA* data, long* buffer)
{
// 最新データのインデックスが0で、なおかつチェックが0の場合はデータ無しとみなす
if (data->new_pos == 0 && data->count_check == 0)
{
// エラー値を返す
return 0;
}
// 一度もデータ取得が行われていない場合はエラー値を返す
if (data->get_check == 0)
{
return 0;
}
// 最後に取得したデータのインデックスを更新する
data->last_pos++;
// 更新された値が配列の要素数を超えた場合は0にする
if (data->last_pos >= SIZE)
{
data->last_pos = 0;
}
// データ取得フラグをたてる
data->get_check = 1;
// バッファにデータを代入する
*buffer = data->data[data->last_pos];
// 正常終了
return 1;
}
1,592ポイント を手に入れた。
|
|
|
|
|
Name: デンマーク ..ぴよぴよ(573ポイント)
Date: 2008/08/03(日) 22:57
No:19554
|
|
Title: Re:リングバッファについて
|
|
>バグ ..神 さん
ソースありがとうございます。
大変参考になります。
なんと言っていいかわかりませんが、人のソースを
見てこんなに自分の考えが見透かされる(笑)?感じは
初めてです。。
今のソースに改良を加えていますので、
終わったら見て下さい。
103ポイント を手に入れた。
|
|
|
|
Name: ユーリ ..ぴよぴよ(103ポイント)
Date: 2008/08/03(日) 13:11
No:19465
|
|
Title: お願いします
|
|
100個の要素数を持つ整数型配列Aには、ランダムな値が入っている。
最大値を出力するプログラムそ作成せよ。
という問題です。
どなたか教えてください。お願いします。
あとNを入力し、Nより大きい数値がいくつか出力するプログラムという問題もお願いします。
103ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(665,735ポイント)
Date: 2008/08/03(日) 13:17
No:19469
|
|
Title: Re:お願いします
|
|
まず規約をお読みいただけましたでしょうか?
ここは宿題の問題を書いて「誰か解いて下さい」という掲示板ではなく、
わからない部分のアドバイスを貰う場です。
また、プログラムは少しずつ解いていけばやる気さえあれば必ずわかりますから、頑張ってみましょう。
では少しずつ進めていきましょう。
まず、今どれ位理解していますか?(配列はわかるとか、ループ処理はわかるとか)
コードはどの辺まで今出来ていますか?
どこが解らずに躓いていますか?
201ポイント を手に入れた。
|
|
|
|
|
Name: ユーリ ..ぴよぴよ(169ポイント)
Date: 2008/08/03(日) 18:34
No:19502
|
|
Title: Re:お願いします
|
|
私はまったくの初心者なので本などを見てやってるんですが、なかなか進まないんです。
配列やループ処理はだいたい理解しております。
上記の質問にできるだけの支援をお願いします。
46ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(9,258ポイント)
Date: 2008/08/03(日) 18:41
No:19505
|
|
Title: Re:お願いします
|
|
とりあえず、 tkmakwins15さんのヒントは分かったのでしょうか。分かっていないのなら、頑張り度が足りない気がします。とりあえず、プログラム内に上のヒントをコピーして貼り付けてみてはどうでしょうか^^;
>あとNを入力し、Nより大きい数値がいくつか出力するプログラムという問題もお願いします。
丸投げになると規約に反するので・・・・scanf()という関数でキーボードからNの値を入力してあげてることができます。
それをmaxに入れてあげれば良いです。
ピンとこないようなら、少し省略した、プログラムも書いてみます^^
頑張ってくださいね
268ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(9,393ポイント)
Date: 2008/08/03(日) 18:51
No:19507
|
|
Title: Re:お願いします
|
|
> それをmaxに入れてあげれば良いです。
思いっきり間違ってました。ifでmaxと配列内データを比較してifの処理内が実行された回数を出力すればいいんですね^^;
#include<stdio.h>
int main()
{
int A[100];
int i;
int N,cont=0;
scanf("%d", &N);
/*省略されています。*/for(i=0;i<100;i++)
{
/*省略されています。*/if(N < A[i])cont++;
}
printf("Nより大きい値は%d個です",cont);
return 0;
}
こんな感じですかね、もしかしたらscanfの使い方間違ってるかも知れませんのでご了承を。
---追記
また間違ってたので修正しておきました^^;申し訳ないです。コンパイルが通るか確認していないのでご了承を><;
tkmakwins15さんと同じ方式で書かせてもらいました。
---追記2
もういろんな意味でおかしいですね・・・contって・・・countの方が良いのかな・・・でも実行結果は同じになりますので。他にも勘違いしてる部分あるかもしれませんが、これから気を付けます。
135ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(667,171ポイント)
Date: 2008/08/03(日) 18:55
No:19508
|
|
Title: Re:お願いします
|
|
まず、先ほど3つ質問させていただいたと思います。
・まず、今どれ位理解していますか?
・コードはどの辺まで今出来ていますか?
・どこが解らずに躓いていますか?
1つ目はご回答頂きましたが、後2つはどうでしょうか?
最低限でいいので今出来ているコードを提示してみて下さい。
後、ランダムな数値が入っているということですが、
どうやって格納しているのですか?
一つ一つ手入力ですか?
乱数で入力ですか?
ファイルから入力ですか?
それから以下の問題を解いてみて下さい。
1、
int型で変数aとbを宣言し、適当な数値を代入するプログラムを書きましょう。
2、
さらにmaxを宣言し、a,bの大きな方を変数maxに代入し、maxの値をprintfで表示するプログラムを書きましょう
193ポイント を手に入れた。
|
|
|
|
|
Name: ユーリ ..ぴよぴよ(221ポイント)
Date: 2008/08/03(日) 21:10
No:19531
| 解決!
|
Title: Re:お願いします
|
|
皆さんありがとうございました!これならなんとか行けそうです!
後は本などを参考にして頑張ってみます!
52ポイント を手に入れた。
|
|
|
|
Name: erin ..ぴよぴよ(64ポイント)
Date: 2008/08/03(日) 18:36
No:19504
|
|
Title: c++での文字列の扱いについて
|
|
はじめまして。
最近c++をはじめたのですが、過去にやっていたperlでは
普通に変数に文字列を代入することができていました。
( a = "あいうえお" のように)
自分で調べたところ、文字列を代入するにはchar型の変数を作り
strcpy( a , "あいうえお");
とやれば代入できるというところまではわかったのですが、
intのaとbという変数に数値が入っているとして、
「aの値,bの値」というようにaとbの間にコンマをはさんで変数に入れるにはどうすればいいのでしょうか?
64ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(667,385ポイント)
Date: 2008/08/03(日) 19:05
No:19510
|
|
Title: Re:c++での文字列の扱いについて
|
|
コンマを挟んで変数に入れる?
文字列の話と最後の話は直接関係無いんですしょうか?
int a = 10 , b = 20;
とか
int a,b;
a = 10 , b = 20;
とか
int a,b;
a=10; b= 20;
とか色々かけると思いますが、こういう意味ではないのでしょうか?
2倍のポイントを手に入れた! 232ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(119,736ポイント)
Date: 2008/08/03(日) 19:27
No:19513
|
|
Title: Re:c++での文字列の扱いについて
|
|
int a = 10;
int b = 20;
であるとして、
"10,20"
という文字列を組み立てたい、ということですか?
もしそういうことでしたら、
char s[80]; // 80は結果を格納するのにじゅうぶんな大きさであること
sprintf(s, "%d,%d", a, b);
とすれば、配列sの中身が 10,20 となります。
別の話でしたらフォローしてください。
155ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(52,556ポイント)
Date: 2008/08/03(日) 19:40
No:19516
|
|
Title: Re:c++での文字列の扱いについて
|
|
C++では、普通に変数に文字列を代入できますよ。
std::string a;
a = "あいうえお";
コンマを挟んで云々については、いくつか方法がありますが...
int a = 123;
int b = 456;
std::string c;
std::ostringstream oss;
oss << a << ',' << b;
c = oss.str();
というのが最も一般的な方法です。
ほかには、
int a = 123;
int b = 456;
std::string c;
c = boost::str(boost::format("%d,%d") % a % b);
といった方法もあります。
他にも方法がありますが、もっと面倒になりますね。
# 例外安全のことまで考えると、必ずしも面倒になるとはいえませんが...
39ポイント を手に入れた。
|
|
|
|
|
Name: erin ..ぴよぴよ(76ポイント)
Date: 2008/08/03(日) 20:19
No:19522
| 解決!
|
Title: Re:c++での文字列の扱いについて
|
|
書き方が悪かったですね、すみません。
boxさんの言っているように"10,20"という風にしたいということでした。
お三方とも返信ありがとうございます。
sprintfが一番簡単そうなのでそれを使ってみようと思います。
たかぎさんの方法も、今後使うことがでてきそうなので覚えておくことにします。
ありがとうございました。
12ポイント を手に入れた。
|
|
|
|
Name: koi ..ぴよぴよ(28ポイント)
Date: 2008/08/02(土) 16:10
No:19385
|
|
Title: 龍神録プログラミングの館8章について
|
|
勉強さしてもらってます。
//パッドとキーボードの両方の入力をチェックする関数
で配列とポインタを使ってかいてみたのですが短くなっている気がしません。
プログラムは初心者です。どこを直せばもっと短く、きれいになるか教えてください。
void GetHitPadStateAll(){
int i,PadInput,mul=1,*p;
PadInput = GetJoypadInputState( DX_INPUT_PAD1 );//パッドの入力状態を取得
for(i=0;i<16;i++){
if(PadInput & mul) pad.key[i]++;
else pad.key[i]=0;
mul*=2;
}
int q[]={configpad.left,configpad.up,configpad.right,configpad.down,
configpad.shot,configpad.bom,configpad.slow,configpad.start,
configpad.change};
p=&q[0];
int s[]={KEY_INPUT_LEFT,KEY_INPUT_UP,KEY_INPUT_RIGHT,KEY_INPUT_DOWN,KEY_INPUT_Z,
KEY_INPUT_X,KEY_INPUT_LSHIFT,KEY_INPUT_ESCAPE,KEY_INPUT_LCONTROL};
for(int i=0;i<9;i++)
input_pad_or_key(&pad.key[*(p+i)] ,CheckStateKey(s[i]));
}
28ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(213,044ポイント)
Date: 2008/08/02(土) 23:20
No:19400
|
|
Title: Re:龍神録プログラミングの館8章について
|
|
利用規約を読んで、preタグを忘れずに。
>どこを直せばもっと短く、きれいになるか教えてください
プログラムは初心者です、という割には十分綺麗に短くまとまっていると思います。
それでも更に短く綺麗にということであれば。
・ int iの宣言位置
関数冒頭で iを宣言しているのに、2つ目の for文の中でも iを宣言しています。
間違いではないですが、紛らわしいので、for文の中だけで宣言するか、外で1つ
宣言して使い回すかした方がいいでしょう。
・ 変数 mul
この変数は PadInputとのビット演算を行う為の変数なのでmul *= 2は
mul <<= 1とした方が適切ではないでしょうか。
でも、そうすると今度は if(PadInput & mul)の部分が if(PadInput & (1 << i))とも
書けることになるので、mul変数そのものが不要になりますね。
・ 変数 p。
使い方は合っていますが、あまり存在の意味がないです。
pは使わず普通に q[i]でいいかと。
・ 配列 q
配列 qは今のような形(関数が呼ばれるたびに配列を作り直す)であれば
configpad.XXXの変数を入れる配列ではなく、&pad.key[configpad.XXX]を
入れる変数の方がいいのかも。
・ 配列 s。
配列 sの使用用途は CheckStateKey()の引数の為ですよね?
CheckStateKeyの引数は unsigned charです。
なので、unsigned charの配列にした方がいいでしょう。
とりあえずといったあたりを改善してみてはどうでしょうか。
1,023ポイント を手に入れた。
|
|
|
|
|
Name: koi ..ぴよぴよ(875ポイント)
Date: 2008/08/03(日) 08:04
No:19443
|
|
Title: Re:龍神録プログラミングの館8章について
|
|
回答ありがとうございます。
すいません。投稿した直後にpreタグつけ忘れていることに気付きました。
書き直しました。
//============key.cpp================
void GetHitPadStateAll(){
int i,PadInput,mul=1;
int *q[]={ &pad.key[configpad.left],
&pad.key[configpad.up],
&pad.key[configpad.right],
&pad.key[configpad.down],
&pad.key[configpad.shot],
&pad.key[configpad.bom],
&pad.key[configpad.slow],
&pad.key[configpad.start],
&pad.key[configpad.up]
};
unsigned char s[]={KEY_INPUT_LEFT,KEY_INPUT_UP,KEY_INPUT_RIGHT,KEY_INPUT_DOWN,KEY_INPUT_Z,
KEY_INPUT_X,KEY_INPUT_LSHIFT,KEY_INPUT_ESCAPE,KEY_INPUT_LCONTROL};
PadInput = GetJoypadInputState( DX_INPUT_PAD1 );//パッドの入力状態を取得
for(i=0;i<16;i++){
if(PadInput & (1<<i)) pad.key[i]++;
else pad.key[i]=0;
}
for(i=0;i<9;i++)
input_pad_or_key(q[i],CheckStateKey(s[i]));
}
なんだか初期化の部分が長くなってしまいましたが、構造体部分を書きなおせばもっと短くなるんでしょうか?
//=============struct.cpp=============
//コンフィグに関する構造体
typedef struct{
int left,up,right,down,shot,bom,slow,start,change;
}configpad_t;
//==============GV.h==================
extern configpad_t configpad;
>配列 qは今のような形(関数が呼ばれるたびに配列を作り直す)であれば
他にも書き方があるという意味ですよね。どのような書き方なのか知りたいです。
よろしくおねがいします。
847ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(665,224ポイント)
Date: 2008/08/03(日) 13:08
No:19462
|
|
Title: Re:龍神録プログラミングの館8章について
|
|
十分綺麗だと思いますが、初期化をもっと短くかきたいのなら、
構造体の中身のアドレスは連続している事を用いればポインタでループして初期化できると思います。
例えば
typedef struct{
int left,up,right,down,shot,bom,slow,start,change;
}configpad_t;
においてleft+1のアドレスがupになるわけですね。
173ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(212,667ポイント)
Date: 2008/08/03(日) 18:32
No:19501
|
|
Title: Re:龍神録プログラミングの館8章について
|
|
書き方がいろいろあって、さらに話が分岐してたりするので、
ちょっとややこしくなりつつありますね。
>なんだか初期化の部分が長くなってしまいましたが
あー、改行を入れると長くなりますね。
ただ、input_pad_or_keyの行がわかりやすくなります。
短きに重きをおくか、わかりやすさに重きをおくかってところでしょうか。
>構造体部分を書きなおせばもっと短くなるんでしょうか
そこに手を付けていいのであれば、たしかに短くスマートになりそうです。
ただ、この関数の外に修正範囲が及ぶので、どうしたものか・・・と。
さわりだけ説明しておきますと、
typedef enum configpad_index_t
{
configpad_index_left,
configpad_index_up,
configpad_index_right,
configpad_index_down,
configpad_index_shot,
configpad_index_bom,
configpad_index_slow,
configpad_index_start,
configpad_index_change,
configpad_index_max
} configpad_index;
typedef struct{
int pad[configpad_index_max];
}configpad_t;
こんな感じの configpad_tに変えると configpad.shotは configpad.pad[configpad_index_shot]と書くことになりますが、
配列 qが必要なくなり、
for(int i = 0; i < configpad_index_max; i++)
input_pad_or_key(&pad.key[configpad.pad[i]], CheckStateKey(s[i]));
と書けるようになります。
反面、configpad_tのメンバが変わっているので、あちこちで修正が必要になりますが・・・。
>においてleft+1のアドレスがupになるわけですね
管理人さんのこの方法でもいいと思います。
ただ、configpad_tの先頭のメンバが leftで、ラストが change、
その間にいくつメンバがある(ループする数)のかをある程度自動的に
判定して処理できるようにしておかないと、今後のメンテナンスに問題が残りそうです。
そのあたりを考えてコーディングしなければいけない、かなぁと思います。
(決めうちで数を決めたりすると、後でメンバが増えた時(bom2とか)に
関数側の変更を忘れかねないですから)
1,126ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..ハッカー(213,627ポイント)
Date: 2008/08/03(日) 18:36
No:19503
|
|
Title: Re:龍神録プログラミングの館8章について
|
|
>他にも書き方があるという意味ですよね。どのような書き方なのか知りたいです
これは別にコードが短くなるということではないのですが、
配列を毎回作らないという方法があります。
今回のようなケース、特に sの方は毎回関数が呼ばれる度に全く同じ配列を作成しています。
呼ばれる度に同じ配列を作るのはある意味無駄ではないでしょうか。
そこで、配列の頭に static constをつけると静的な変数になるので関数が実行される度に配列を
作る、ということがなくなります(一度作ったらそれっきり、constがついているので変更もできません)。
配列 sの方はそのまま static constをつけるだけでOKです。
配列 qの方はそのままではだめで、configpad.XXXへのポインタの配列にする必要があります。
というのも、configpad.XXXの変数の値は呼ばれる度に異なる可能性があるからです。
そのポインタという形にしておけば作り直す必要はなくなります。
で、ここで sと q両方が static const化できたのなら、
元々関数の中に配列がある必要がないので、さくっと関数の外に出してしまえば、関数の中はそれなりに短くなります。
本当を言ってしまえば、こういう配列が複数あるなら sと qは構造体に
1つにまとめてしてしまい、その配列を作った方が短くなるというよりかは綺麗になります。
なぜなら、ミスで sと qの要素数が異なる、ということもなくなりますし、
対応する内容の確認もしやすくなりますから。
こんな感じでしょうか。
static const struct consfig_pad_check_list
{
int * pad;
unsigned char keyboard;
}
check_list[] =
{
{ &configpad.left, KEY_INPUT_LEFT },
{ &configpad.right, KEY_INPUT_RIGHT },
{ &configpad.up, KEY_INPUT_UP },
{ &configpad.down, KEY_INPUT_DOWN },
{ &configpad.shot, KEY_INPUT_Z },
{ &configpad.bom, KEY_INPUT_X },
{ &configpad.slow, KEY_INPUT_LSHIFT },
{ &configpad.start, KEY_INPUT_ESCAPE },
{ &configpad.change, KEY_INPUT_LCONTROL },
};
void GetHitPadStateAll(){
int pad_state = GetJoypadInputState( DX_INPUT_PAD1 );
for(int i=0;i<16;i++)
pad.key[i] = (pad_state & (1 << i))? pad.key[i]+1: 0;
for(int i = 0; i < sizeof(check_list)/sizeof(check_list[0]); i++)
input_pad_or_key(&pad.key[*check_list[i].pad], CheckStateKey(check_list[i].keyboard));
}
配列テーブルを外に出してしまうことで、GetHitPadStateAll()は随分すっきりします。
(input_pad_or_keyの行がごちゃっとしている感はありますが・・・)
960ポイント を手に入れた。
|
|
|
|
|
Name: koi ..かけだし(1,113ポイント)
Date: 2008/08/03(日) 19:30
No:19514
| 解決!
|
Title: Re:龍神録プログラミングの館8章について
|
|
できました。
int i,PadInput,mul=1,*q[9];
int* p= (int*)(&configpad);
for(i=0;i<9;i++)
q[i]=&pad.key[p[i]];
ですね
かなり短くなりました。ありがとうございました。
2倍のポイントを手に入れた! 238ポイント を手に入れた。
|
|
|
|
Name: C勉強者 ..ぴよぴよ(237ポイント)
Date: 2008/08/02(土) 23:36
No:19404
|
|
Title: フォントハンドル値が異常です と出ます・・・
|
|
初めまして。
最近DXライブラリを使い始めた者なのですが、うまくいきません。
一応、エラーはないので実行はできますが・・・(WinMain関数の内容のみ)
環境は
OS : Windows Vista
コンパイラ : VC++
です。コードは、
//WinMain関数//
{
ChangeWindowMode(TRUE);
SetGraphMode(800,600,16);
//宣言等は省略します。//
minntyo = CreateFontToHandle("明朝体",40,3,DX_FONTTYPE_ANTIALIASING);//文字のセット用
DrawStringToHandle(MENUX , MENUY + SMALL ,"ゲームスタート", white , minntyo );
DrawStringToHandle(MENUX + StrLen[1] + (SPACE * 3) , MENUY + SMALL,"ゲーム終了",white ,minntyo );
//上の場合、y400の位置にゲームスタートなどが描写されます
menu(・・・省略)//ここでmenu関数へ行きます "minntyo"は渡していません
DxLib_End();
return 0;
}
int menu(…省略)
{
int minntyo , b_minntyo;
minntyo = CreateFontToHandle("明朝体" , 20 , 2 , DX_FONTTYPE_ANTIALIASING);
b_minntyo = CreateFontToHandle("明朝体" , 30 , 2 , DX_FONTTYPE_ANTIALIASING);
//1//
//ここでバイナリファイルを扱います
DrawStringToHandle( SPACE2 + sizex + SPACE3 + STRINGSPACE ,
SPACE2 + STRINGSPACE , "データ2" , white , b_minntyo);
DrawStringToHandle( SPACE2 + STRINGSPACE , (SPACE2 * 2) + sizey + STRINGSPACE + SPACE3 ,
"データ消去" , white , minntyo );
//上の場合だと何故か描写されない・・
//省略//
return 0;
}
こんな感じです。マクロ定義は問題ないので気にしないでください。
WinMain関数でDrawStringToHandle関数を使用しても問題はなかったのですが、
menu関数で使用すると 出力 の所に"フォントハンドル値は異常です"と出てしまい、
何も画面に表示されません。それどころか画像等も表示されません。
また、DrawStringTo...を呼んだ回数だけ出力に表示されています。
それと、//1//の部分で、
if(minntyo == -1 || b_minntyo == -1)
printfDx("フォントが作成できません。");
と、実行もしているのですが問題ないようです。
ちなみに、バイナリファイルを扱う前はmenu関数のDrawStringTo...もちゃんと機能していました。
原因が分かる方、お願いします。
237ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(213,097ポイント)
Date: 2008/08/03(日) 00:38
No:19408
|
|
Title: Re:フォントハンドル値が異常です と出ます・・・
|
|
>原因が分かる方、お願いします
再現できるコードとデータがあればベストなのですが、話を伺った限りで
真っ先に思い浮かぶ原因は、そのバイナリというのを扱った際にスタックを破壊してしまった為に
minntyo / b_minntyoのどちらか、或いは両方の値が変化してしまい、
DrawStringToHandle()内部で異常を検知した、ということはないでしょうか。
試しに、CreateFontToHandle()直後の minntyo / b_minntyoの値と
DrawStringToHandle()の直前の minntyo / b_minntyoの値が同一かどうか
(できればデバッガ上で)調べてみて下さい。
53ポイント を手に入れた。
|
|
|
|
|
Name: C勉強者 ..ぴよぴよ(620ポイント)
Date: 2008/08/03(日) 08:58
No:19445
|
|
Title: Re:フォントハンドル値が異常です と出ます・・・
|
|
>試しに、CreateFontToHandle()直後の minntyo / b_minntyoの値と
>DrawStringToHandle()の直前の minntyo / b_minntyoの値が同一かどうか
>(できればデバッガ上で)調べてみて下さい。
minntyo = CreateFontToHandle("明朝体" , 20 , 2 , DX_FONTTYPE_ANTIALIASING);
b_minntyo = CreateFontToHandle("明朝体" , 30 , 2 , DX_FONTTYPE_ANTIALIASING);
printfDx("minntyo = %d\n",minntyo);
printfDx("b_minntyo = %d\n\n",b_minntyo);//2回改行
ScreenFlip();
WaitKey();
//バイナリを扱います
printfDx(" minntyo = %d\n",minntyo);
printfDx("b_minntyo = %d\n",b_minntyo);
ScreenFlip();
WaitKey();
DrawStringToHandle(SPACE2 + STRINGSPACE , SPACE2 + STRINGSPACE , "データ1" , white , b_minntyo);
このようなプログラムを埋め込んだところ、
minntyo = 537067523
b_minntyo = 537133060
minntyo = -858993460
b_minntyo = -858993460
とおかしな値が出ました・・・これが原因ですね。
>そのバイナリというのを扱った際にスタックを破壊してしまった為に...
バイナリファイルを扱ったところに原因がある、ということでしょうか。
バイナリファイルを扱ったところを調べてみます。
383ポイント を手に入れた。
|
|
|
|
|
Name: C勉強者 ..ぴよぴよ(712ポイント)
Date: 2008/08/03(日) 16:35
No:19496
| 解決!
|
Title: Re:フォントハンドル値が異常です と出ます・・・
|
|
すいません・・・バイナリファイルを別関数で扱ったところ、
正常に動作いたしました。
>>Justyさん
ご迷惑かけて申し訳ありません・・・・
バイナリファイルが原因だったようです。
ご回答ありがとうございました。
92ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(213,837ポイント)
Date: 2008/08/03(日) 19:09
No:19512
|
|
Title: Re:フォントハンドル値が異常です と出ます・・・
|
|
>バイナリファイルを別関数で扱ったところ正常に動作いたしました
それはよかったです。
でも、原因がバイナリデータを扱ったことによるスタックの破壊にあるのだとしたら、
別関数にしただけでは(DrawStringToHandleに影響がないだけで)まだ何かしら問題が起きる
可能性があります。
もし、どこに問題があったのかを突き止めていないようでしたら、
念の為今の内に調べておいた方がいいかもしれません。
210ポイント を手に入れた。
|
|
|
|
Name: クロウ ..ぴよぴよ(820ポイント)
Date: 2008/08/02(土) 18:16
No:19387
|
|
Title: ショットの描画について
|
|
龍神録プログラミングの館をもとにシューティングを作っているのですが、ショットを撃つ角度に合わせて弾の角度を変えて描画するようにしたところ、すでに撃たれたショットまで今のショット角度で描画されてしまいます。
void graph_cshot(){
double canon[CSHOT_MAX];//そのときの弾の角度を記憶する用
for(int i=0;i<CSHOT_MAX;i++){
canon[i] = ch.Canon_Angle;//弾の角度を記憶
if(cshot[i].flag>0){
DrawRotaGraphF(cshot[i].x+FIELD_X,cshot[i].y+FIELD_Y,1,canon[i],img_cshot[cshot[i].knd],TRUE);
}
}
}
自分では撃たれた直後のショットの角度を記憶してその角度で描画する。次のショットが撃たれたらその角度を記憶してその角度で描画するようにしたつもりです。
すでに撃たれたショットの角度を描画したのちはその角度を固定して飛んでいき、次に撃たれたショットの角度に影響されずに描画する方法がありましたらお願いします。
233ポイント を手に入れた。
|
|
|
|
Name: array ..初心者(7,582ポイント)
Date: 2008/08/02(土) 18:35
No:19388
|
|
Title: Re:ショットの描画について
|
|
//通常ショット登録
void ch0_shot_pattern(){
int k;
for(int i=0;i<cshot0num[ch.power<200?0:1];i++){
if((k=serch_cshot())!=-1){
cshot[k].flag=1;
cshot[k].cnt=0;
cshot[k].angle=-PI/2;
cshot[k].spd=20;
cshot[k].x=ch.x+cshot0pos_x[i];
cshot[k].y=ch.y+cshot0pos_y[i];
cshot[k].power=23;
cshot[k].knd=0;
}
}
se_flag[2]=1;//発射音オン
}
//低速通常ショット登録
void ch1_shot_pattern(){
int k;
for(int i=0;i<cshot0num[ch.power<200?0:1];i++){
if((k=serch_cshot())!=-1){
cshot[k].flag=1;
cshot[k].cnt=0;
cshot[k].angle=-PI/2;
cshot[k].spd=20;
cshot[k].x=ch.x+cshot0pos_x[i]/3;//低速中なら位置を中心側へ
cshot[k].y=ch.y+cshot0pos_y[i]/2;
cshot[k].power=23;
cshot[k].knd=0;
}
}
se_flag[2]=1;
}
//自機ショット描画
void graph_cshot(){
for(int i=0;i<CSHOT_MAX;i++){
if(cshot[i].flag>0){
DrawRotaGraphF(cshot[i].x+FX+dn.x,cshot[i].y+FY+dn.y,1,cshot[i].angle,img_cshot[cshot[i].knd],TRUE);
}
}
}
ウイルスバスターの弊害で、シフトが反応しないので確認できないのですが
いじるなら赤の部分だと思いますけど、どうだろ。頑張ってみてください^^
補足−−−−−−−−−−−−−−−−
上記の内容をみるとch.Canon_Angleにすでに角度が用意されてるみたいなので
cshot[k].angle=-PI/2;
を
cshot[k].angle = ch.Canon_Angle;
にしても良いかも知れません。
ch.Canon_Angleの内容が分からないので何とも言えませんが。
668ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(8,099ポイント)
Date: 2008/08/02(土) 19:09
No:19389
|
|
Title: Re:ショットの描画について
|
|
cshot.cpp --------
の3行目くらいに
int cshot0pos_x[4]={-10, 10,-30, 30};
int cshot0pos_y[4]={-30,-30,-10,-10};
があったので
int cshot0pos_x[4]={-10, 10,-30, 30};
int cshot0pos_y[4]={-30,-30,-10,-10};
int cshot0pos_angle[4]={-10,10,-20,20};
を作ってあげて、
//通常ショット登録
cshot[k].angle=-PI/2+PI/180*cshot0pos_angle[i];
//低速通常ショット登録
cshot[k].angle=-PI/2;//(そのまま)
とすれば大丈夫じゃないですか?
低速ショットは試せませんが、通常ショットなら想定の角度をつけて飛んで行きましたよ。
低速通常ショットは、直線で飛ぶイメージなのですがどうでしょうか。
その他の変更点------
graph.cpp --------
//自機ショット描画
DrawRotaGraphF(cshot[i].x+FX+dn.x,cshot[i].y+FY+dn.y,1,cshot[i].angle+PI/2,img_cshot[cshot[i].knd],TRUE);
517ポイント を手に入れた。
|
|
|
|
|
Name: クロウ ..かけだし(1,205ポイント)
Date: 2008/08/03(日) 16:30
No:19494
|
|
Title: Re:Re:ショットについて
|
|
早速の返信ありがとうございます。
試してみたところ、うまくいきました。低速移動は作っているシューティングでは使わないので大丈夫です。
ch.Canon_Angleというのはバルカンの角度で、自機が上下するとバルカンが傾いて発射角度も変わるというものです。例を挙げるとメタルスラッグのスラグフライヤーという戦闘機のような感じです。
別スレを立てた方がいいのかもしれないのですが、規約の方に「一スレにつき質問は一つ」という項目はなかったようですので、再び質問させていただきます。
arrayさんのコードですと、今のところ4発は同時に発射されています。
これをバルカンに近くするために、発射のテンポを少しずらすようにしたいのです。
つまり、一発目が発射されたら少し遅れて2発目を少し角度をずらして発射、少し遅れて3発目、4発目、そして元の角度で1発目と繰り返すように発射です。
cshot[k].angle=-PI/2+PI/180*cshot0pos_angle[i]; の部分を
k%4の条件でifで区切ったらどうなのかと試しましたが、それでも駄目でやはり4発が同時に発射されてしまいます。
どうすればタイミングをずらして発射させることができるのかお願いします。
385ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(8,990ポイント)
Date: 2008/08/03(日) 17:46
No:19499
|
|
Title: Re:ショットについて
|
|
> どうすればタイミングをずらして発射させることができるのかお願いします。
-cshot.cpp//ショット登録部
void enter_shot(){
//ショットボタンが押されていたら
if(CheckStatePad(configpad.shot)>0){
ch.shot_cnt++;
if(ch.shot_cnt%3==0){//3カウントに1回
if(CheckStatePad(configpad.slow)>0)//低速移動中なら
ch1_shot_pattern();
else
ch0_shot_pattern();
}
}
else
ch.shot_cnt=0;
}
でどうでしょうか。
ペースについては、バルカンの角度の変化速度が分からないので言いようがないです。
ちなみに前のスレでgifアニメあげてたあれですよね。まぁなんにしろ角度の変化量を計算して発射ペースをキッチリ合わすなり、適当な値に変えてそれっぽく動作させてみてはどうでしょうか。
203ポイント を手に入れた。
|
|
|
|
|
Name: クロウ
Date: 2008/08/07(木) 19:34
No:193871218105246
|
|
Title: Re:ショットについて
|
|
返信が遅れてしまいすみません。
現在のショット部分のコードはこうなっています。
//自機ショットの登録可能番号を返す
int serch_cshot(){
for(int i=0;i<CSHOT_MAX;i++){//画面内に繰り出せるショットの個数より少ない
if(cshot[i].flag==0)//ショットフラグが立つ
return i;
}
return -1;
}
//通常ショット登録
void ch0_shot_pattern(){
int k;
for(int i=0;i<cshot0num[ch.power<200?0:1];i++){
if((k=serch_cshot())!=-1){
cshot[k].flag=1;
cshot[k].cnt=0;
//3発ごとに角度が違う
switch(k%3){
case 0:
cshot[k].angle=-PI/2+ch.Canon_Angle;//発射角度
break;
case 1:
cshot[k].angle=-PI/2-0.05+ch.Canon_Angle;//少し傾ける
break;
case 2:
cshot[k].angle=-PI/2+0.05+ch.Canon_Angle;
break;
}
cshot[k].spd=20;
cshot[k].x=ch.x+cshot0pos_x[i]+55;
cshot[k].y=18+ch.y+cshot0pos_y[i]+tan(ch.Canon_Angle)*30;
cshot[k].power=1;//ショットの攻撃力
cshot[k].knd=0;//ショットの種類
}
}
se_flag[2]=1;//発射音オン
}
//ショット登録部
void enter_shot(){
//ショットボタンが押されていたら
if(CheckStatePad(configpad.shot) > 0 ){
ch.shot_cnt++;
if(ch.shot_cnt%3==0){//3カウントに1回
ch0_shot_pattern();
}
}
else
ch.shot_cnt=0;
}
//ショットの移動計算
void calc_cshot(){
for(int i=0;i<CSHOT_MAX;i++){
if(cshot[i].flag==1){
int dranx=cshot[i].spd+11/2,drany=cshot[i].spd+55/2;
cshot[i].y+=cos(cshot[i].angle)*cshot[i].spd;
cshot[i].x-=sin(cshot[i].angle)*cshot[i].spd;
cshot[i].cnt++;
if(cshot[i].x<-dranx || cshot[i].x>FIELD_MAX_X+dranx ||
cshot[i].y<-drany || cshot[i].y>FIELD_MAX_Y+drany)//画面から外れたら
cshot[i].flag=0;
}
}
}
この状態で、3発が同時に発射されています。
|
|
|
|
Name: アクニム ..ぴよぴよ(777ポイント)
Date: 2008/08/02(土) 21:52
No:19392
|
|
Title: DXライブラリでの画像表示について
|
|
今DXライブラリを使って画像を表示するということをやろうとしているのですが
ウインドウが表示されても画像が表示されません。
そして、なぜかウインドウを閉じるとその瞬間だけ画像が表示されます。
普通に表示させるにはどうすればいいのでしょうか?
あと、互換性がないとも表示されたんですが何か関係があるのでしょうか?
コードは↓です。
#include"DxLib.h"
int WINAPI WinMain(HINSTANCE hI,HINSTANCE hP,LPSTR lpC,int nC)
{
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1)return(-1);
int ghandle=LoadGraph("media\\test_jiki.bmp");
DrawGraph(296,224,ghandle,TRUE);
WaitKey();
DxLib_End();
return(0);
}
293ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(102,215ポイント)
Date: 2008/08/02(土) 22:04
No:19395
|
|
Title: Re:DXライブラリでの画像表示について
|
|
DrawGraph関数の後にProcessMessage関数を実行してみてください。
指定された箇所に画像ファイルがあるのならば、表示されると思います。
41ポイント を手に入れた。
|
|
|
|
|
Name: BCI-3e ..中級者(11,806ポイント)
Date: 2008/08/02(土) 22:12
No:19396
|
|
Title: Re:DXライブラリでの画像表示について
|
|
利用規約はごらんになられましたか?また、
C言語〜ゲームプログラミングの館〜はごらんになられましたでしょうか?
始めに、コンパイラ、PC環境を提示しておいてください。
私が見るからに何も間違っていないように見えます。
間違いがあるのであれば画像ファイルの種類が違うか
アドレスを間違っているかのどちらかです。
131ポイント を手に入れた。
|
|
|
|
|
Name: アクニム ..ぴよぴよ(821ポイント)
Date: 2008/08/02(土) 22:14
No:19397
|
|
Title: Re:DXライブラリでの画像表示について
|
|
すいません・・。
ProcessMessage関数とは何ですか?
それを実行するにはどうすればいいのでしょうか?
できれば追加説明お願いします。
44ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(102,252ポイント)
Date: 2008/08/02(土) 22:41
No:19399
|
|
Title: Re:DXライブラリでの画像表示について
|
|
DrawGraph関数の後に1行追加して…
ProcessMessage();
と追記してみてください。
37ポイント を手に入れた。
|
|
|
|
|
Name: アクニム ..ぴよぴよ(980ポイント)
Date: 2008/08/03(日) 00:36
No:19406
|
|
Title: Re:DXライブラリでの画像表示について
|
|
>利用規約はごらんになられましたか?また、
>C言語〜ゲームプログラミングの館〜はごらんになられましたでしょうか?
すいません。
検索して直にここに来たもので・・・。見ていません。
ただちに確認してきます。
遅れましたが、
コンパイラは、Borland C++ コンパイラで、
PCは Windows Vista です。
画像ファイルとアドレスも確認してみましたが、
間違いはないみたいです
>ProcessMessage();
>と追記してみてください。
追加説明ありがとうございます。
やってみましたが、結果は、閉じるときに画像が表示されなくなっただけでした。
159ポイント を手に入れた。
|
|
|
|
|
Name: アクニム ..かけだし(1,066ポイント)
Date: 2008/08/03(日) 00:46
No:19412
|
|
Title: Re:DXライブラリでの画像表示について
|
|
本の流れ通りにやっていただけなので、分かりません。
でも、まだ説明段階なので後でその説明があるかもしれません。
>ゲームプログラミングの館の13章まで進めてもらえたらうまく行くと思います。
分かりました。とりあえず行ってみることにします。
86ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(659,450ポイント)
Date: 2008/08/03(日) 01:15
No:19415
|
|
Title: Re:DXライブラリでの画像表示について
|
|
>arrayさん
ありがとうございます。
>アクニムさん
もし上と同じかたでしたら、ここは相互リンクした場合のみマルチポスト可能です。
詳しくは規約をご覧下さい。
また、マルチポストする場合は、もう片方の掲示板で許可されている事をご確認下さい。
とりあえず表示はされたんでしょうか?
パスが違ったら一瞬たりとも表示されないと思うのですが・・。
6ポイント を手に入れた。
|
|
|
|
|
Name: アクニム ..かけだし(1,197ポイント)
Date: 2008/08/03(日) 01:45
No:19418
|
|
Title: Re:DXライブラリでの画像表示について
|
|
arrayさん、全く同じ例だったので参考になりました。
でも、アドレスを変更したんですが、やはり表示されませんでした。
元に戻しても、ウインドウが消える時だけに、
ウインドウの下になっていた部分に一瞬だけ表示されるだけでした
BCC Developer を使っているんですが、これも何か関係あるのでしょうか?
ちなみに、ゲームプログラミングの館の1章の、文字の表示をやってみたところ
英字の方は表示されたのですが、日本語の方は表示されませんでした。
何かの参考になるかもしれないので、他の物も試してみます。
131ポイント を手に入れた。
|
|
|
|
|
Name: BCI-3e ..中級者(11,394ポイント)
Date: 2008/08/03(日) 02:15
No:19422
|
|
Title: Re:DXライブラリでの画像表示について
|
|
vistaなら、適合性の問題の可能性が大です。
もしや、コンパイラ起動時に管理者として実行していますか?
インストールから管理者で実行しないとだめな場合があります。
または互換性を合わせるために起動状況を変更できるはず。
いま、vistaで一番の適合性と言えばMicrosoftが出しているVisual C++ 2008です。
私は、他のコンパイラに比べて適合性の説明を見て使うことを判断しました。
もし、DirectXライブラリを再インストールして互換性を変更、コンパイラを変えてだめな
場合もう一度訪れてください。
オンラインゲームなどでは辞書登録した絵文字が使えなかったり
互換性を変更しなければ起動しないソフトもあります。
また、ソースの空白部分が全角だった場合、エラーかプログラムが正常に行われません。
その部分を理解しておいてくださいね。
あと、マルチに関してですが謝るぐらいの事をしましょうね。
それがオトナの礼儀と言うものですよ。
ついでに解決しているみたいですしね;
本当に気おつけ無いとレスの回答者がいなくなります。
とりあえず最後にコンパイラのアドレスを表記しておきます。
無料登録していれば1年間無料で使えます。
機能もそれほどゲーム製作とかには影響無いでしょう。
http://www.microsoft.com/japan/msdn/vstudio/express/default.aspx#install
567ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(659,763ポイント)
Date: 2008/08/03(日) 02:51
No:19425
|
|
Title: Re:DXライブラリでの画像表示について
|
|
>BCI-3eさん
アクニムさんが
>arrayさん、全く同じ例だったので参考になりました。
と書かれているので、どこかのサイトに書かれているサンプルコードを
全く関係ないお二人が見て、疑問に思われた可能性もあるのではないでしょうか。
そこはアクニムさんに聞いてみないとよくわかりませんが・・。
109ポイント を落としてしまった。
|
|
|
|
|
Name: BCI-3e ..中級者(12,317ポイント)
Date: 2008/08/03(日) 04:19
No:19429
|
|
Title: Re:DXライブラリでの画像表示について
|
|
もしかして、過去ログで質問された方の事かもしれませんね;
でも、この掲示板は1回来て立ち去る人もいますから全部は覚えられませんよね^^
とりあえずは互換性上の問題だと私は思います。実際に私も同じ経験があるので;
回線ISDNでコンパイラをダウンロードしなおすのは痛かったです。
最初からMicrosoftのを使っとけばと思いましたね、本当に;
起動すらしなかったんですから、他のコンパイラは><
そうそう、DirectXライブラリをお使いなのであれば最初にサンプルコードが書かれていたはずです。
それを起動して見ましたでしょうか?確か、かわいい女の子がフルスクリーンで写った記憶があります。
それが最初にできていたならプログラムの不備。そうで無ければコンパイラの不備だと思います。
それから、
>多分同一人物で解決してるみたいです。
それを聞いてマルチだと勘違いしてました。ごめんなさい。
最近マルチする人が多いので。以後気おつけます。
254ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(663,229ポイント)
Date: 2008/08/03(日) 05:20
No:19433
|
|
Title: Re:DXライブラリでの画像表示について
|
|
>アクニムさん
英語が表示できて日本語が出来ないなんておかしいですね・・。
日本語未対応のフォントがデフォルトになってるとも考えられませんし、
わざわざフォント指定もしていませんよね・・。
後はデフォルトになっているフォントデータを自分で消したとかしか考えられない・・。
とりあえずゲーム製作では13章のようなプログラムしか使いませんから
13章がうまくいけば問題ないと思います・・・(という無理やりな解決)。
118ポイント を手に入れた。
|
|
|
|
|
Name: アクニム ..かけだし(1,673ポイント)
Date: 2008/08/03(日) 08:46
No:19444
|
|
Title: Re:DXライブラリでの画像表示について
|
|
管理人さん、すいません
前の投稿の後に画面を更新しないで再投稿したので
管理人さんの書き込みが上にあったのを見てびっくりしました。
ちなみに、arrayさんの見つけた投稿者は私ではありません
arrayさんの見つけた投稿のコードが私の投稿とまったく同じなのは
同じ本を使っているからだと思います。
ちなみに書名は「14歳から始めるわくわくC言語プログラミング」です
管理人さん、互換性の変更なんですが、具体的にどうやればいいか教えてください。
昨日は投稿の後、遅くなったので寝てしまい返答が遅れました。すいません。
BCI-3eさんの言う通り、サンプルコードを試してみたいと思います。
全角の空白が入っている可能性もあるのでそこも確認してみます。
2倍のポイントを手に入れた! 476ポイント を手に入れた。
|
|
|
|
|
Name: アクニム ..かけだし(1,729ポイント)
Date: 2008/08/03(日) 09:00
No:19446
|
|
Title: Re:DXライブラリでの画像表示について
|
|
サンプルを実行してみましたがやはり同じ結果でした
(何も表示されず、閉じるときに一瞬だけ表示される)
DXライブラリの再インストールとコンパイラの変更も試してみます
56ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(8,361ポイント)
Date: 2008/08/03(日) 11:12
No:19451
|
|
Title: Re:DXライブラリでの画像表示について
|
|
> ちなみに、arrayさんの見つけた投稿者は私ではありません
> arrayさんの見つけた投稿のコードが私の投稿とまったく同じなのは
> 同じ本を使っているからだと思います。
> ちなみに書名は「14歳から始めるわくわくC言語プログラミング」です
なるほど、すみませんでした。よく見れば投稿時間も離れてますしね。ただ\\という記述の間違いがあまりにも稀な間違いなので同一人物ではないかと勘違いしてしまいました。再度お詫び申し上げますm(_ _)m
ちなみにこのスレでの質問事項は画像がウィンドウを閉じる瞬間に一瞬しか表示されないので、普通に表示したいとの事ですよね。
管理人さんのいうとおり画像へのパスが間違っていたら一瞬でも表示されないと思いますが。画像の入ってるフォルダを教えてください。
とりあえず、私の知識では
int ghandle=LoadGraph("media\\test_jiki.bmp");
これは間違いだと思われます。(あちらの掲示板でも言ってますけど)
あちらの掲示板では既に解決されてるので参考というのではなく解決の直結すると思います。
言われてる様に、同じ資料を使われているのなら
int ghandle=LoadGraph("".\debug\media\test_jiki.bmp
");
というのを試してみてはどうでしょうか。もし、それでも上手くいかないようなら、画像の入っているフォルダの位置を公開してみてはどうでしょうか?
212ポイント を手に入れた。
|
|
|
|
|
Name: アクニム ..かけだし(1,977ポイント)
Date: 2008/08/03(日) 12:35
No:19453
|
|
Title: Re:DXライブラリでの画像表示について
|
|
こんな偶然なんて自分でも信じられませんでしたから…。別に気にしてはいません。
むしろ、最善の流れで誤解が解けてよかったと安心しています。
ただ、本に記載されているコードをまる写した結果の間違いなので今後は注意して読んでみたいと思います。
本には\\はエスケープシーケンスと書いてあったのですが、この場合は違う入力の方がいいのでしょうか?
ちなみに、フォルダの位置は、あちらの掲示板の通さんが言っていたのと同じで、
[project]
+hogehoge.exe
+[Debug]
+[media]
+test_jiki.bmp
です。
前回のarrayさんの投稿の時も試してみたんですが、再度試してみてもやはり失敗でした。
また、他の例で、
DrawBox(0,0,120,120,65535,TRUE);
というものでも同じ結果になってしまいました。
248ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..入門者(4,873ポイント)
Date: 2008/08/03(日) 12:39
No:19454
|
|
Title: Re:DXライブラリでの画像表示について
|
|
ひとつ質問なのですが、¥って何をあらわしているんでしょうか?
たぶん画像のアドレスかな〜って思ってるんですが、プログラミン
グ館は/を使ってますし;なんか初歩的な質問、しかも割り込みでごめんなさい。
新しいスレを立てるよりココで聞いたほうがいいと思いまして。
63ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(664,219ポイント)
Date: 2008/08/03(日) 12:45
No:19455
|
|
Title: Re:DXライブラリでの画像表示について
|
|
アクニムさん
そうでしたか、みんなして誤解してしまいすみません。
最近規約に沿わない投稿が沢山あって困っていたので、
過敏になってしまっていたのだと思います。
後、C言語でパスを書く時エスケープシーケンス一つじゃうまく行かないと思うのですが・・。
C言語において\は特別な意味を持つので、この記号をあらわすには\\と書かないといけないはずだと思います。
しかしDXライブラリの掲示板ではこれで解決しているようですね・・。
私は/で書いているのですが、こちらの表記方法で試してみて下さい。
なお、私はその本を読んだことが無いので、今後のことを含めフォルダ構成等
どうなっているのか存じないので互換性は持たせられませんが、
ゲームプログラミングの館のサンプルを見ていっていただければ作っていけると思います。
また、コンパイラはVisualStudio2008ExpressEditionがオススメです。
館で紹介しているプロジェクトのサンプルも全てこちらのコンパイラで実行できるものですし。
とりあえずゲームプログラミングの館用のプロジェクトと本のサンプルを試すようのプロジェクトを2つ
お作りになる事をお勧めします。
311ポイント を手に入れた。
|
|
|
|
|
Name: BCI-3e ..中級者(13,373ポイント)
Date: 2008/08/03(日) 12:50
No:19456
|
|
Title: Re:DXライブラリでの画像表示について
|
|
とりあえず、エスケープシーケンスがどのような役割を果たすかご存知でしょうか?
確か標準入出力関数です。私も、そこまで詳しくわ勉強していないのですがアクニムさんが
まだC始めたばかりで、ただ単に画像表記ができないのであれば使わない方がいいのかもしれません。
使わない場合は/を使って試して見てください。詳細はゲーム館を見るべし。
でも、その本も少しへんですよね?いきなりエスケープシーケンスが出てくるなんて;
私なんか文字表記に使う程度でほとんど触っていませんが;
177ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(664,785ポイント)
Date: 2008/08/03(日) 12:58
No:19458
|
|
Title: Re:DXライブラリでの画像表示について
|
|
>DrawBox(0,0,120,120,65535,TRUE);
この書き方は良くないですねぇ・・。
画面の表示色によっても数は変わるはずですし、
こんな書き方が通用するのはごく一部です。
それに初心者に完全にわかりやすさを無視した書き方ですね・・。
きっと白を表したいんでしょうが、
ここは65535はGetColor(255,255,255)と書くべきだと思います。
その本の事は良く知りませんが、ゲームプログラミングの館で十分勉強できますよ^^;
ある程度掴んでから本を参考にしてみてはどうでしょうか。
その方が私もアドバイスしやすいですし・・。
228ポイント を手に入れた。
|
|
|
|
|
Name: BCI-3e ..中級者(13,579ポイント)
Date: 2008/08/03(日) 12:59
No:19459
|
|
Title: Re:DXライブラリでの画像表示について
|
|
管理人様、キー打つの早い^^;
考えながら解答してたんでは追いつかないですよ。完敗です><
互換性の変更はコンパイラ本体を右クリック→プロパティイ→互換性→管理者として実行や
互換モードで実行するなどいろいろ工夫してみてください。
私がvistaであきれ返ったのは互換モード変換で起動しなかったの640×480にチェックを入れて起動
終了後640×480のチャックをはずし再度起動しないと使えない3D描画ソフトがあったことです。
はっきり言って訳わかりません。そんな不備が多々あるのがvistaです。いったいいつになったら
vistaが世の中でいっぱしに使えるようになるのやら;
206ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(665,051ポイント)
Date: 2008/08/03(日) 13:02
No:19460
|
|
Title: Re:DXライブラリでの画像表示について
|
|
>ROLさん
C言語において\を1つ書くと、後ろに何か文字をあわせて特殊記号を表します。
\n
は改行を表します
\0
は文字列の終端を表します。
\t
はタブを表します。
他にも色々あります。
なのでこの文字1文字だとそれらと見分けが付かないのでこの文字そのものを表したい場合は
\\と連続で書く必要があります。
パスの中で使う場合はフォルダ構造を表します。
..
は「一つ上の階層」を意味します。
/や\
は「そのフォルダの中」を意味します。
だから
../dat/sample/test.cpp
と書くと、
「一つ上のフォルダにあるdatフォルダの中のsampleフォルダの中のtest.cpp」
と言う意味になります。
こんな説明でいいでしょうか?
266ポイント を手に入れた。
|
|
|
|
|
Name: BCI-3e ..中級者(13,739ポイント)
Date: 2008/08/03(日) 13:05
No:19461
|
|
Title: Re:DXライブラリでの画像表示について
|
|
管理人様の言う通りです。
私も初めてC学んだのは、ゲーム館ですから。
関数や、ポインタ・構造体などの意味を他サイトで調べながらゲーム館で
少しずつ意味を吸収して行きました。最初は関数なんかを紙に書いて意味を
確認しながら自分でサンプルソースを少し工夫、アレンジして作ったものです。
なので、その本はDirectXライブラリの本家が出していますが、気にしない方
がいいかも知れません。とりあえず、管理人様のゲーム館で勉強あれ。
それからシューティングを作って見てください。
160ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..入門者(4,967ポイント)
Date: 2008/08/03(日) 13:09
No:19463
|
|
Title: Re:DXライブラリでの画像表示について
|
|
管理人様、
ありがとうございます。標準入出力関数 C言語でググッた結果意味がわかりましたが
パスの中で使う場合にアドレスの役割を果たすとは知りませんでした。丁寧に教えていただき
ありがとうございました。
94ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(8,670ポイント)
Date: 2008/08/03(日) 13:09
No:19464
|
|
Title: Re:DXライブラリでの画像表示について
|
|
>再度試してみてもやはり失敗でした。
私もVistaを使っているのですが、もしかしすると書籍にはいってたインストールCDのBorland C++が古くてVistaに対応してなかったりするのかもしれません。最新版があってもしかするとVista対応になってたりとか・・・(Borlandは全然わからないので無責任な事言ってます^^;)
ちなみに私は管理人さんお勧め(?)を使ってます。
http://dixq.net/g/donyu.html
Visual C++ 2005 じゃなくてVisual C++ 2008を使ってます。
他には私はウイルスバスターを入れてるのですがデバッグするたびに不正な変更を防ぎましたとかで余計な事をしてくれますw
そのお陰でシフトキーやらが反応しない不具合が起きてます。
こんな感じで、他に起動しているアプリケーションが処理の邪魔をしているのかもしれませんよ。
ROLさん
>¥って何をあらわしているんでしょうか?
自己解釈で説明するので間違ってたらすみません。それはフォルダの階層を表すために用いてるんだと思います。なら/となにが違うのかというと、同じだと思います。
ただ、ケースバイケースで判断すれば良いんじゃないかと・・・
http://dixq.net/board/index.html
はboardというフォルダ中のindex.htmlというファイルを呼び出しています。
これは管理人さんのPCでは
〜\board\index.html
という場所にあると言う事だとおもいます。
XPなんかではフォルダを開いて上に表示されてるアドレスと同じです。
ちゃんとした使い分ける理由があるんでしょうけど。
私は感覚で使い分けてます(>_<)
496ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(8,724ポイント)
Date: 2008/08/03(日) 13:13
No:19466
|
|
Title: Re:DXライブラリでの画像表示について
|
|
>¥って何をあらわしているんでしょうか?
先に管理人さんが詳しく説明してますね^^
>管理人様、キー打つの早い^^;
確かにw文章やプログラムを組むスピードも桁違いですよね(T-T)
54ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(665,534ポイント)
Date: 2008/08/03(日) 13:14
No:19467
|
|
Title: Re:DXライブラリでの画像表示について
|
|
なんか自分のサイトを押し売りしてるみたいですが^^;
DXライブラリ愛好家としてはDXライブラリに関する本は持っておかないといけませんね。
今度書店で探してみますm(_ _)m
>キー打つの早い
大学入ってからネットゲーばっかやってた時代があったので、
朝から晩までチャットしてる間に慣れたりしました^^;
多分あれはどんなタイピングソフトで練習するよりも練習になると思いますw
だからといってオススメはしませんw
時間を無駄にしたと後悔しています^^;
ビスタはよくわかりませんねぇ・・。
なのでXP使っています。きっとXPを使い続けてる人多いのでは。
ビスタ買ったけどXPにバージョンダウンしたと言う話もよく聞きます。
310ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..初心者(5,057ポイント)
Date: 2008/08/03(日) 13:15
No:19468
|
|
Title: Re:DXライブラリでの画像表示について
|
|
なるほど!
arrayさんにまで解答いただけるなんてうれしい限りです。
完璧に実用方法がわかったのでちゃんと使えそうです。
それから、管理人様。間違って解決にチェック入れてしまいまして;
ついでに消去キー入力忘れてしまったので、変更が^^;;;;;;
お手数かけますが、変更の方よろしくお願いします。ゴメンナサイ><
90ポイント を手に入れた。
|
|
|
|
|
Name: BCI-3e ..中級者(13,987ポイント)
Date: 2008/08/03(日) 13:29
No:19472
|
|
Title: Re:DXライブラリでの画像表示について
|
|
わっちもオンラインで2ヶ月間、朝から晩までやってました。
しかも結構なムードメーカーでゲームよりチャット優先ぐらいでした。
にもかかわらず遅い;キーの指配置を正確に1から学んだ方がいいのかもしれませんね;
それから、バージョンダウンの件なのですが、そんなことできるのでしょうか?
聞いたこと無いですが、vistaをバージョンダウンしても意味無いのでは?
もしかして、XP用のインストールディスクをvistaに?なんだかもったいないで
すよね〜せっかく買ったのに。Microsoftがすべての責任を負って全vistaの持ち主に
無料でディスクを提供すべきだwww
とこれはさておき。
/
を使って画像表記はできましたでしょうか?
できなければコンパイラ自身を変える必用があると思います。
何せ未知のプログラム隊vista軍団ですから。バグの数は計り知れません。
USB端子を差したまま電源入れると反応しないとか;
スキャナーのドライバ、インストール時に動作がとまるとか。
管理者実行に異様に時間がかかると思ったら結局無反応とか;
Visual C++ 2008が今のところMicrosoftがバグの発生もなく使用できると
どこかに書いてありました。また、Microsoftは自社の製品が売れればいいので
「他社の互換性なんぞ知らん」とふてくされてるような感じもしますけどね;
248ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(8,767ポイント)
Date: 2008/08/03(日) 13:32
No:19473
|
|
Title: Re:DXライブラリでの画像表示について
|
|
> >キー打つの早い
>
> 大学入ってからネットゲーばっかやってた時代があったので、
> 朝から晩までチャットしてる間に慣れたりしました^^;
> 多分あれはどんなタイピングソフトで練習するよりも練習になると思いますw
私もチャットなんかを楽しめば一番タイピングが速くなるきっかけになると思います。最初の頃は不器用ながらタイピングをしてて無情にも会話はどんどん流れていくというのが懐かしいです(^-^)
> ビスタはよくわかりませんねぇ・・。
> なのでXP使っています。きっとXPを使い続けてる人多いのでは。
> ビスタ買ったけどXPにバージョンダウンしたと言う話もよく聞きます。
私はビスタを使ってて不満に思ってるくちです。ビスタはメモリ容量を大量に消費してますし。なんかエアロとかいうのが容量を消費するらしく。たしかに3Dは綺麗だし、3D描画も早いとか聞きましたし透明感あふれててカッコイイとも思うのですが、最初だけです。
もう飽きたからXPが良いって感じですね。私はメモリ1Gなのですが、1GもあればXPは快適なのに対して、Vistaは2Gぐらいないと快適に動作しないみたいですし。
オンラインゲームするにも不具合があるし・・・・。アプリケーションとの互換性も低い気がする。XPで使えてたものが使えなくなったりと。
そしてVistaはセキュリティーがウザイ(ぇ ・・・アプリケーションを起動するたんびに許可を求められたりとか・・・・。その際、画面がブラックアウトりたりするので最初の頃は何事かと思います。
※Vista馬鹿にしてごめんなさい。もちろん上記のとおり良い点もあります。そのセキュリティーもXPとは比べ物にならないくらい強化されてるみたいですし(実感はできないけど)
43ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(666,127ポイント)
Date: 2008/08/03(日) 13:41
No:19474
|
|
Title: Re:DXライブラリでの画像表示について
|
|
>vistaをバージョンダウンしても意味無いのでは?
vistaを完全に消してXPを入れるという意味です。
もちろん無料で出来るわけじゃなく、XPを買って、ビスタを消してインストールしなおすんです。
そしてビスタのディスクはもったいないけど放置と・・。
私も当時ノーパソにビスタを入れましたが、消してXPを買いなおして入れなおしました。
使いにくすぎです・・。
まずこの世に沢山ある便利なフリーソフトで使えないものが沢山あるというだけで使いたくないです・・。
またセキュリティ面もうるさすぎ・・。
エアロとか要らないし、Tab + ALTで十分だと思ってます^^;
タブレットとか使いやすくなったりムービーメーカーも使いやすくなったりといい事もあるんですけどねぇ、
天秤にかけたとき圧倒的にXPに軍配があがると私は個人的に思っています・・。
ただ両方の環境が欲しいので、今日デュアルブートする為に機能HDDを買ってきました。
500Gが6千円で買えるなんて安くなりましたよねぇ。
今日からビスタとXPを両方使うつもりですb
249ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(8,853ポイント)
Date: 2008/08/03(日) 13:42
No:19475
|
|
Title: Re:DXライブラリでの画像表示について
|
|
> それから、バージョンダウンの件なのですが、そんなことできるのでしょうか?
> 聞いたこと無いですが、vistaをバージョンダウンしても意味無いのでは?
> もしかして、XP用のインストールディスクをvistaに?なんだかもったいないで
> すよね〜せっかく買ったのに。Microsoftがすべての責任を負って全vistaの持ち主に
> 無料でディスクを提供すべきだwww
>
前調べたときに、グレードダウンはできないと言ってました。XPのOSをパッケージ(?)で持ってる人はインストールし直したり、ダブルブート(?)ってので解決したみたいです。
他にWindows Vista Ultimateという企業向けのはマイクロソフトが公式でXPにグレードダウンできるようにしたらしいです。(そんな記事を見たような見なかったようなw)
86ポイント を手に入れた。
|
|
|
|
|
Name: アクニム ..かけだし(2,455ポイント)
Date: 2008/08/03(日) 13:45
No:19477
| 解決!
|
Title: Re:DXライブラリでの画像表示について
|
|
皆さんいろいろアドバイスありがとうございます。
実は前に、Javaを勉強していた時にも同じ著者の本を使っていたのですが、
その時も色々と問題が起きていたことがありました。
(本に載っているコードが間違っていたり・・・)
でも、ついつい分かりやすそうな本を買ってしまい同じ目に…。
ここは、初心にかえってまた最初からやり直したいと思います。
(と言ってもほとんど進んでいませんが・・。)
ということで、ある意味で解決!!
皆さんいろいろとアドバイスありがとうございました。
次回もアドバイスよろしくお願いします。
2倍のポイントを手に入れた! 478ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(8,894ポイント)
Date: 2008/08/03(日) 13:46
No:19478
|
|
Title: Re:DXライブラリでの画像表示について
|
|
企業が買って使い物にならないんじゃ仕事できないだろ!って文句言って、マイクロソフトが折れたんじゃないですか?(笑)
41ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(666,581ポイント)
Date: 2008/08/03(日) 13:50
No:19479
|
|
Title: Re:DXライブラリでの画像表示について
|
|
私は最初の頃本をほとんど読みませんでした。ウェブでかなり勉強できますし。
なので、特に基本的な部分に限っては書籍に頼らなくても十分やっていけると思います。
また、解らないことがあったら聞ける環境って
あるかないかで随分壁にあたった時が違うと思います。
基本的な事はこちらで聞いてもらったらいいですし、
DXライブラリの技術的な処理については製作者様に聞いていただければ
あの方は細かく丁寧に回答して下さいます。
とりあえずうちのサイトの質問でしたら答えられると思いますm(_ _)m
2倍のポイントを手に入れた! 434ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(8,787ポイント)
Date: 2008/08/03(日) 13:53
No:19483
|
|
Title: Re:DXライブラリでの画像表示について
|
|
> 企業が買って使い物にならないんじゃ仕事できないだろ!って文句言って、マイクロソフトが折れたんじゃないですか?(笑)
本当に仕事できないと困りますしね・・・。
>アクニムさん
関係ない雑談に逸れててごめんなさい。まだ解決できてないのなら私も考えてみますが、どうでしょうか。
といっても、上記のとおり、Vistaはマイクロ社を除く他との互換性が低い気がするので、とりあえず
Visual C++ 2008を使う事をお勧めします。
107ポイント を落としてしまった。
|
|
|
|
|
Name: BCI-3e ..中級者(14,398ポイント)
Date: 2008/08/03(日) 14:00
No:19484
|
|
Title: Re:DXライブラリでの画像表示について
|
|
私たちが雑談しているせいで迷惑かけちゃいましたかね^^;
>14歳から始めるわくわくC言語
まぁ、私も同じ物を買おうと思ったのですが本屋さんで見てびっくり。
わかりにくい、間違いが多い、教えている順番が難しいところから。
といやな参考書NO1でした。なので、他のを買うことをお勧めします。
また、参考書を買わなくても今の段階であればココで十分勉強できます。
>企業が買って使い物にならないんじゃ仕事できないだろ!って文句言って、
>マイクロソフトが折れたんじゃないですか?(笑)
ならこんな想像も。
社長が業務のためにvistaを使用。
企業には到底販売できないとアセアセ;;;した結果
行きついたのがバージョンダウン。そして社長は考えた。
vistaの互換性を格段に落とす。そしてvistaを買った人は
必ずXPにダウンする。だから倍お金が会社にはいる。
なんか社長室の片隅で電卓使って税金の計算しながら笑ってそう^^
収める税金が多い=会社が大きな利益を上げているんですから。
411ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(666,891ポイント)
Date: 2008/08/03(日) 14:20
No:19488
|
|
Title: Re:DXライブラリでの画像表示について
|
|
あの本が出る前からその話をちょくちょくDXライブラリ掲示板でみかけましたが、
著者欄にDXライブラリ製作者様のお名前が無いので、直接関わっていらっしゃらないのですね。
どんな本なのか一度見てみます。
なんかゲームの館をきちんと整理して私も本出してみたくなりました^^;
STGの話なら余計に・・。 いや、しませんけどw
しかしwindowsが齎す影響って絶大ですよね〜。
新しいOSが発売されるだけでパソコン業界は潤うという・・。
153ポイント を手に入れた。
|
|
|
|
|
Name: アクニム ..入門者(2,645ポイント)
Date: 2008/08/03(日) 17:45
No:19498
|
|
Title: Re:DXライブラリでの画像表示について
|
|
解決の後にもかかわらずアドバイスありがとうございます。
/でも試してみましたがやはりだめでした。
Visual C++ 2008をインストールしたので、ここで勉強させてもらうことにします。
また分からないことがあったら質問に来ると思いますので、
その時はまたアドバイスお願いします。
2倍のポイントを手に入れた! 190ポイント を手に入れた。
|
|
|
|
Name: Amethyst ..ぴよぴよ(146ポイント)
Date: 2008/08/03(日) 16:34
No:19495
|
|
Title: 14歳からはじめるC言語を見て
|
|
Error: 外部シンボル 'JicharaMove()' が未解決
プログラムをメイクしても実行が出来なくなり上記のエラーが出るようになりました。
3度も初めからプログラムを変えたのにもかかわらず
未だにエラーが検出されるので皆さんのお力をお貸しください。
ちなみに14歳からはじめるC言語プログラミング教室のP131のプログラムです。
#include "spgame.h"
//グローバル変数
struct CharaData jikidata;
struct CharaData jitama[3];
int trigger = 0;
struct CharaData tekidata[50];
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
ChangeWindowMode(TRUE); //窓起動
if(DxLib_Init() == -1) return(-1); //DxLib初期化
JicharaLoad();
TekiLoad();
JicharaInit();
TekiInit();
SetDrawScreen(DX_SCREEN_BACK);
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
ClsDrawScreen();
JicharaMove();
JitamaMove();
TekiMove();
if(AtariHantei() == 1) break;
ScreenFlip();
}
DxLib_End();
return(0);
}
146ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(102,354ポイント)
Date: 2008/08/03(日) 17:22
No:19497
|
|
Title: Re:14歳からはじめるC言語を見て
|
|
たまたま、その本が手元にあったので、ちょっと書き込みを…
このプログラムは、これ単体では動きません。
その項以前に作成してある『jichara.cpp』、『tekichara.cpp』というファイルがあるはずです。
それらを同じプロジェクト内に追加してビルドしてみてください。
102ポイント を手に入れた。
|
|
|
|
Name: ツリー ..ぴよぴよ(18ポイント)
Date: 2008/07/30(水) 03:17
No:19208
|
|
Title: midが聞こえなくなりました。
|
|
Visual C++を使っています。
数週間前に、作りかけで一時止めていたゲーム製作を再び始めたのですが、
以前と同じ、ソースでやっているのに、midの音が聞こえなくなりました。
以前と同じソースなので、間違いは無いはずですが、絶対と言うのはないので、
ためしに、簡単にmidの音が出ると言うだけのソースを作ったのですが、やはりなりません。
どなたか分かる方原因を教えてください。
onngakuというファイルに入ったOPのmidを鳴らす。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウィンドウモード
if( DxLib_Init() == -1 ) return -1; // 初期化
PlayMusic( "onngaku/OP.mid" , DX_PLAYTYPE_BACK ) ; // test.midのバックグラウンド演奏
WaitKey() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
18ポイント を手に入れた。
|
|
|
|
Name: J ..初心者(5,608ポイント)
Date: 2008/07/30(水) 04:37
No:19209
|
|
Title: Re:midが聞こえなくなりました。
|
|
”以前と同じ”ソースなら鳴らないはずはありません。プログラムで開くのではなく、自分でmidファイルを再生してみてください。再生されないようであれば、パソコンの問題です。再生されれば、プログラム側の問題です。DXライブラリを入れなおすとかしてみると直るかもしれません(こちらは詳しくはわかりません。)
原因として考えられるのは、ボリュームコントロールの設定でmidi音源のがミュートまたは0になっているか、サウンドデバイスがおかしくなっているかです。前者はコントロールパネルかタスクバーの「音量」から開けるボリュームコントロールのSW Synthの音量を試しに最大にして再生してみてください。後者は再起動すると直ることがあります。
そして最悪場合、ファイルが破損してしまっていることも考えられます。
304ポイント を手に入れた。
|
|
|
|
|
Name: ツリー ..ぴよぴよ(0ポイント)
Date: 2008/07/30(水) 12:21
No:19215
| 解決!
|
Title: Re:midが聞こえなくなりました。
|
|
返信ありがとうございます。
試してみたところ。
いついじったのかわかりませんが、SWシンセサイザの音量が0になってました。
ばかばかしい質問すいませんでした。
SWシンセサイザをいじったらMP3とかの音楽はなるけどmidは再生されないのかな?
勉強になりました。
117ポイント を落としてしまった。
|
|
|
|
|
Name: おっちゃん1号 ..ぴよぴよ(163ポイント)
Date: 2008/08/03(日) 13:52
No:19481
|
|
Title: Re:midが聞こえなくなりました。
|
|
もう遅いかな?助言を。
SWシンセサイザは何もしていなくても勝手に0になったり、
ほかのユーザーがログイン状態だとMIDIが再生されなかったりと
なにかと意味のわからない設定項目なので、
どうしても再生させたいときに最終的には再起動しないといけなくなったり…
>SWシンセサイザをいじったらMP3とかの音楽はなるけどmidは再生されないのかな?
そうですね、SWシンセサイザはMIDI音源にしか適用されないようです。
163ポイント を手に入れた。
|
|
|
|
Name: こめかみ ..入門者(3,137ポイント)
Date: 2008/08/03(日) 05:17
No:19432
|
|
Title: 龍神録の館5章function.hの内容について
|
|
お世話になっております。
解説によると
「条件わけしたGV.hの中にあるfunction.hに上記同様にGLOBALと書いて宣言してみます。」
、とあるのですが。
--function.h変更--
//graph.cpp
//描画メイン
extern void graph_main();
//key.cpp
//現在のキー入力処理を行う
extern int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
extern int CheckStateKey(unsigned char Handle);
//laod.cpp
//データのロード
extern void load();
が
--function.h変更--
//graph.cpp
//描画メイン
GLOBAL void graph_main();
//key.cpp
//現在のキー入力処理を行う
GLOBAL int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
GLOBAL int CheckStateKey(unsigned char Handle);
//laod.cpp
//データのロード
GLOBAL void load();
だということでしょうか。
どちらでもコンパイルは成功するのですが、
文章がちょっとよく分からないです。
481ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(663,651ポイント)
Date: 2008/08/03(日) 05:26
No:19434
|
|
Title: Re:龍神録の館5章function.hの内容について
|
|
main.cppからも他のファイルからも同じファイルを呼びます。
しかしmain.cppから呼ばれたときは宣言をし、
他のファイルから呼ばれたときはextern宣言をしたいのです。
つまりmainから呼ばれたときはGLOBALを空白に置き換え、
他から呼ばれたときはGLOBALをexternに置き換えることで、
GLOBALと書いた部分を条件わけして宣言できるのです。
よって上にかかれた両者は同じではありません。
今は、
#ifdef _GLOBAL_INSTANCE_
#define GLOBAL
#include "function.h"
#else
#define GLOBAL extern
#endif
この部分でfunction.hはmainから呼ばれたときしか呼ばれていないのでexternにしても問題ないのですが、
他から呼ぶとき問題になります。
6章からこの部分は変わっていると思いますのでご確認下さい。
2倍のポイントを手に入れた! 422ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..入門者(3,141ポイント)
Date: 2008/08/03(日) 05:43
No:19436
|
|
Title: Re:龍神録の館5章function.hの内容について
|
|
あのーすいません解説の意味の質問ではなく文脈の質問なんです。
「条件わけしたGV.hの中にあるfunction.hに上記同様にGLOBALと書いて宣言してみます。」
、とあるのに
解説のfunction.hには"GLOBAL"ってないじゃないですか
だから文章かソースコードが違うのかなってお話です。
わかりにくい文章ですみません。
80ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..入門者(3,240ポイント)
Date: 2008/08/03(日) 05:56
No:19439
|
|
Title: Re:龍神録の館5章function.hの内容について
|
|
わーいはじめて貢献できたよ。
いやー初心者ゆえに理解力不足なのか誤字なのか判断がつかず。
タイトルもどんなのにすればいいのか迷うんですよー
こーいう時ってどんなタイトルにすればいいんですかねぇ
99ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(663,908ポイント)
Date: 2008/08/03(日) 06:02
No:19440
|
|
Title: Re:龍神録の館5章function.hの内容について
|
|
ありがとうございます。
修正しなおしました。もしよければご確認下さい。
参考文献(サイト?)に絶対的な信用が無いというのは非常に頼りないですよねorz
専門書読んでても誤字が多いと頼りなさそうに見えるし;
特にこれ作った時は寝る間も惜しんで作ったので、誤字が多いかもしれませんので、
また何かあればご報告下さいm(_ _)m
とりあえず全プロジェクトはエラーなしにコンパイル出来ることは確認済みです・・。
タイトルは適切だと思いますよ。
もし面倒なら「龍神録の館の○章について」だけでも特に問題はないかと思います。
237ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..入門者(3,498ポイント)
Date: 2008/08/03(日) 06:55
No:19442
|
|
Title: Re:龍神録の館5章function.hの内容について
|
|
確認しました!
今後出てくるfunction.h内の関数は全部この形ですか?
だったら今見てる6章に出てくるのも直したほうがいいと思うんですけど。
>特にこれ作った時は寝る間も惜しんで作ったので
ものすごい速度で作られていましたよねー、戦慄してました。
誤字はシューティングゲームの館のころも結構見かけました。
文脈でわかるので報告するまでもないかなーとスルーしてたんですが、
報告したほうがいいんですよね。
プログラムの質問が多い中で誤字の指摘ってなんか気が引けるんですよねー
投稿時のアイコンに誤字の報告用のものとかつくれませんか?
質問とも雑談とも違う気がするのでそこでも迷うんです。
258ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(665,878ポイント)
Date: 2008/08/03(日) 13:23
No:19471
|
|
Title: Re:龍神録の館5章function.hの内容について
|
|
そうですね、今見てみると8章から突然書き方かわってますね。
統一しようと思います。
アイコンの件了解しました。増やしておきます。
誤字の件は明らかに問題の無いようなものまで全てにおいて修正したいので、
どうぞお気軽に^^;
98ポイント を手に入れた。
|
|
|
|
Name: リマー ..ぴよぴよ(426ポイント)
Date: 2008/08/03(日) 00:52
No:19413
|
|
Title: グラフィックの許容量(?)について
|
|
キー入力があるまでClearDrawScreenとDrawGraphをwhileで繰り返している部分で、
しばらく(40秒くらい)じっといていると、
「グラフィックの数が許容量を越えました終了します」
とVCの出力ウインドウに表示され、自動的にゲームが終了してしまいます。
こんな短時間で勝手に終了してしまってはゲームになりません…。
どうすればいいのか、誰か教えてください。
なお、Visual C++ 2008 Express Edition を使ってます。
94ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(659,838ポイント)
Date: 2008/08/03(日) 01:17
No:19416
|
|
Title: Re:グラフィックの許容量(?)について
|
|
LoadGraphをループで繰り返していませんか?
恐らくそれだとメモリ使用量が恐ろしく増大していっていると思います。
LoadGraphで検索してみて、きちんと関数が適切な場所で呼ばれているか確認して下さい。
それでもよくわからない場合は、タスクマネージャーのパフォーマンスなどで
メモリ使用量を確認して下さい。
何もしてないのにドンドンメモリ使用量が上がっていたりすると、連続して無駄なロードが行われている可能性があります。
2倍のポイントを手に入れた! 388ポイント を手に入れた。
|
|
|
|
|
Name: リマー ..ぴよぴよ(487ポイント)
Date: 2008/08/03(日) 10:35
No:19448
| 解決!
|
Title: Re:グラフィックの許容量(?)について
|
|
なるほどたしかに、ループの中にLoadGraphが含まれていました。
具体的にはLoadDivGraphが含まれていました。
これではメモリが破裂するのも無理はありません(汗
ありがとうございました。
61ポイント を手に入れた。
|
|
|
|
Name: たか ..かけだし(2,293ポイント)
Date: 2008/08/02(土) 09:45
No:19370
|
|
Title: 実行速度の違いについて
|
|
C言語を初めて三ヶ月のたかと申します。
現在、テキストファイルから文字列を読み込んで表示する。
というプログラムを作っています。
文字列の部分ではなく実行速度について質問があります。
添付したソースファイルではif文かswitch文、どちらが早いのでしょうか?
プロセッサ時間を取得して計算してみましたが、短い処理なので上手くいきませんでした。
よろしくお願いします。
また、プログラムにミスがあればご指摘おねがいします。
開発環境
Visual C++ 2008 Express Edition
197ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(52,196ポイント)
Date: 2008/08/02(土) 13:12
No:19376
|
|
Title: Re:実行速度の違いについて
|
|
最適化次第かと思います。
最適化がまったく働かなければ、ifの方が遅くなります(一般論ではなく、今回の場合の話です)。
なぜなら、buf[count]の評価回数が増えるからです。
普通に最適化すれば、どちらも優位な差は出ないでしょう。
可読性を考えると、switchの方が若干ましな気もするので、最適化なしの場合でも効率がよいことですし、switchにしておけばよい気がします。
133ポイント を手に入れた。
|
|
|
|
|
Name: たか ..かけだし(2,412ポイント)
Date: 2008/08/02(土) 13:26
No:19378
| 解決!
|
Title: Re:実行速度の違いについて
|
|
最適化がなしの状態では、switchの方が早いのですね。
評価回数が増える・・というのは、
switch文のように直接飛ばずにひとつづつif文で処理しているということ、ですよね?
case EOF:
case '\n':
case ',':
switch文で上のようにしているので無駄があるかなとか思っていました。
ありがとうございました。
119ポイント を手に入れた。
|
|
|
|
|
Name: たか ..かけだし(2,389ポイント)
Date: 2008/08/03(日) 05:46
No:19438
| 解決!
|
Title: Re:実行速度の違いについて
|
|
丁寧にありがとうございます。
リンク先のページでしっかり理解できました。
23ポイント を落としてしまった。
|
|
|
|
Name: type_white ..ぴよぴよ(112ポイント)
Date: 2008/08/03(日) 01:49
No:19419
|
|
Title: 36. ソースを短く書く(その1)で
|
|
どうもこんにちは。昨日からゲームプログラミングの館を読ませてもらっているものです。
気づいた事があったので些細なことなのですが報告。
ゲームプログラミングの館 の
36. ソースを短く書く(その1)
のソースに GetHitKeyStateAll( Key ) があるのですがKeyが宣言されていないのでこのままデバッグするとエラーになってしまいます。
他の章に合わせると
char Key[256];
をグローバルで宣言しておいた方がよいかと思います。
普通はデバッグしたりしない章なので訂正しなくても問題ないのですが気になったので一応報告させてもらいましたです^;
112ポイント を手に入れた。
|
|
|
|
Name: type_white ..ぴよぴよ(268ポイント)
Date: 2008/08/03(日) 02:22
No:19423
|
|
Title: Re:36. ソースを短く書く(その1)で
|
|
どもです。
現在形で読み進めているのでまた気づいたのですが、
39. αブレンド(その2) にて、
SetDrawBright ( count , count , count ) ; //半分の明るさにセット
SetDrawBlendMode( DX_BLENDMODE_ALPHA , count ) ; //以後半分の明るさでαブレンドする
の二箇所がcountによって値が変化するようになったにも関わらず
128で固定だった 38. αブレンド(その1) のコメントのままになっていますです。
こんどこそ完璧にエラーさえでない些細な事ですがまた報告しときますですょ
156ポイント を手に入れた。
|
|
|
|
Name: とーる ..かけだし(1,494ポイント)
Date: 2008/07/31(木) 17:25
No:19276
|
|
Title: クイックソート
|
|
#include <stdio.h>
#define ARRAY_SIZE (10)
/* プロトタイプ宣言 */
void quick_sort(int array[], int begin, int end);
void print_array(int array[], int size);
int main(void)
{
int data[ARRAY_SIZE] = { 30, 20, 60, 50, 90, 0, 40, 10, 70, 80 };
print_array( data, ARRAY_SIZE ); /* ソート前の配列を出力 */
quick_sort( data, 0, ARRAY_SIZE-1 ); /* クイックソート実行 */
print_array( data, ARRAY_SIZE ); /* ソート前の配列を出力 */
return 0;
}
/*
昇順になるようにクイックソートを行う。
引数 array:ソート対象の配列。
begin:ソート範囲の先頭の添字。
end:ソート範囲の末尾の添字。
*/
void quick_sort(int array[], int begin, int end)
{
int i, j;
int pivot; /* 枢軸 */
int work;
pivot = array[ ( begin + end ) / 2 ]; /* 範囲の中央にある要素を枢軸とする */
i = begin;
j = end;
while( 1 )
{
while( array[i] < pivot ){ ++i; } /* 枢軸以上の値が見つかるまで右方向へ進めていく */
while( array[j] > pivot ){ --j; } /* 枢軸以下の値が見つかるまで左方向へ進めていく */
if( i >= j ){ break; } /* 左右から進めてきたiとjがぶつかったらループを終える */
/* 要素を交換する */
work = array[i];
array[i] = array[j];
array[j] = work;
}
/* 枢軸の左側に要素が2つ以上あれば、その部分についてクイックソートを再帰させる */
if( begin < i - 1 ){
quick_sort( array, begin, i - 1 );
}
/* 枢軸の右側に要素が2つ以上あれば、その部分についてクイックソートを再帰させる */
if( j + 1 < end ){
quick_sort( array, j + 1, end );
}
}
/*
配列の要素を出力。
引数 array:出力する配列。
size:配列の要素数。
*/
void print_array(int array[], int size)
{
int i;
int *p = &array[0];
for( i = 0; i < size; ++i )
{
printf( "%d ", *p );
++p;
}
printf( "\n\n" );
}
クイックソートに関しての質問なのですけど自分でいろいろ考えてたのですが
上の if( i >= j ){ break; } なんですが if( i == j ){ break; } でも、いいんですよね。
くだらない質問なんですが答えてもらえると助かります。お願いします。
開発環境はVisual C++です。
769ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(655,600ポイント)
Date: 2008/07/31(木) 17:57
No:19283
|
|
Title: Re:クイックソート
|
|
いや、i==jではだめです。
何故かというと、1回ずつ比較しているとは限らないからです。
今一番左が0で一番右が10だとしましょう。(以下番号は左から数えた要素番号です
0から探索していって、4でとまったとします。
10から探索していって、6でとまったとします。
これは正常に交換が出来ます、しかし、次、
左からの探索で5でとまり、右からの探索で4で止まったとすると、
i==jではぶつかったことが判定出来ませんよね。
この件は文字では中々わかりにくいです。
そのために、アニメーションで解説したソフトを作りましたので、
よければそちらを参考にして下さい。
http://dixq.net/sort.html
226ポイント を手に入れた。
|
|
|
|
|
Name: array ..ぴよぴよ(588ポイント)
Date: 2008/07/31(木) 18:17
No:19285
|
|
Title: Re:クイックソート
|
|
クイックソートとかまったく知らない素人ですが。管理人さんがめっちゃ得意そうw(クイックソート解説アプリというのを自作しているので)
data[ ]の配列の中心の値を基準、たぶんdata[5](かdata[4])を基準に判定してるみたいなので、
>while( array[i] < pivot ){ ++i; } //ここでiを決定
ここでdata[0] < data[5]なら iを+1し
もし data[1] > data[5] なら処理を終了し次の処理へ
この場合i = 1
>while( array[j] > pivot ){ --j; } //ここでj決定
ここでdata[9] > data[5]なら jを-1し
もし data[8] < data[5] なら処理を終了し次の処理へ
この場合j = 8
>work = array[i]; //ここで要素の置き換え
>array[i] = array[j];
>array[j] = work;
data[i = 1]はdata[5]より大きい値
data[j = 8]はdata[5]より小さい値
が入っておりdata[1]⇔data[8]を入れ替えているので
data[1] < data[8] な値になるので・・・。
まぁこれだけ言えばどこを書き換えれば良いか分る筈です
237ポイント を手に入れた。
|
|
|
|
|
Name: とーる ..かけだし(1,602ポイント)
Date: 2008/08/02(土) 22:03
No:19394
| 解決!
|
Title: Re:クイックソート
|
|
すいません、返事が遅くなりました。
まず、始めに管理人様、array様ありがとうございます。
一番上のコードだと,クイックソート自体が間違っていましたね。
また質問などが、ありましたらよろしくお願いします。
2倍のポイントを手に入れた! 108ポイント を手に入れた。
|
|
|
|
Name: 名無し ..入門者(4,500ポイント)
Date: 2008/08/02(土) 08:21
No:19362
|
|
Title: 無題
|
|
すいませんが質問です。
課題製作の為に龍神録プログラミングの館を見させてもらってます。
そして敵にショットを撃たせてみようのところで例えばナイフなどの場合、
方向に合わせて画像の向きが変わりますよね?
あの仕組みが分からないのでご教授願えないでしょうか。
125ポイント を落としてしまった。
|
|
|
|
Name: 名無し ..入門者(4,446ポイント)
Date: 2008/08/02(土) 10:04
No:19371
|
|
Title: Re:無題
|
|
なるほど、そういう関数があるんですね。
ちなみにDXライブラリを使ってない場合は他にこのような関数がありますかね?
54ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..ハッカー(212,021ポイント)
Date: 2008/08/02(土) 10:38
No:19372
|
|
Title: Re:無題
|
|
>ちなみにDXライブラリを使ってない場合は他にこのような関数がありますかね?
あるかもしれませんし、ないかもしれません。
ない場合は、4隅の頂点を指定して表示するタイプの関数があるかもしれません。
これがあれば、4隅の頂点それぞれについて任意の角度で回転させた後の座標を
自分で計算して指定することで表示できると思います。
210ポイント を手に入れた。
|
|
|
|
Name: RIN ..ぴよぴよ(49ポイント)
Date: 2008/08/01(金) 14:47
No:19328
|
|
Title: 3Dの当たり判定
|
|
2Dのゲームはできるようになってきたので、
3Dを作ろうかと考えています。
そこでなのですがボックス同士の当たり判定のやり方が全く想像できないのですが
どうやればいいのか教えていただけないでしょうか?
手とり足とりになってしまいこの板の規約に反してしまうかもしれませんが教えていただけないでしょうか?
よろしくお願いします。
49ポイント を手に入れた。
|
|
|
|
Name: BCI-3e ..中級者(11,193ポイント)
Date: 2008/08/01(金) 14:57
No:19329
|
|
Title: Re:3Dの当たり判定
|
|
私も3Dに関してはあまり詳しくありませんが、ボックスと言う考えは違うと思います。
2DのRPGなどは四角を1マスとしますが3Dの場合、円柱を使っています。
その円柱に当たったか当たって無いかで判定になると思います。なのでアクションRPGなどの、
当たり判定原理がお分かりであれば少し応用してできるのでは無いでしょうか。
どんなゲームを作りたいかによって少しではありますが考え方が違ってきます。
それを質問に明記した方がボーゼンとした質問でも多少答えやすくなります。
あまりお役に立てなくて申し訳ないのですが、私の知っている知識が少しでもヒントになればと
思い、投稿しました。それでは、失礼いたします。
246ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがり ..中級者(10,547ポイント)
Date: 2008/08/01(金) 16:04
No:19330
|
|
Title: 無題
|
|
「3Dでは円柱を使っています」というのは何かの本で読んだんですか?
自分で経験してみたことですか?
では、立方体の判定はどうするんでしょう?
3Dでの判定の仕方にはいろんなものがありますよ。
34ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(51,974ポイント)
Date: 2008/08/01(金) 16:13
No:19331
|
|
Title: Re:3Dの当たり判定
|
|
3Dの当たり判定は主に、
- 境界球を用いる方法
- 境界ボックスを用いる方法
- 変位ベクトルを用いる方法
の三種類になるかと思います。
ですので、ボックス同士の当たり判定というのは考え方としては間違っていません。
境界球や境界ボックスを用いる方法は、いずれにしても大雑把な判定でしかありませんので、あまり難しく考えないことです。
境界ボックスの各辺は、X, Y, Z軸のいずれかと平行になるようにします。
つまり、境界ボックス自体を複雑に回転させるのではなく、元の物体が回転すれば、それを包含するように伸縮させることで対応します。
あとは、2Dで矩形同士の当たり判定ができるのであれば、同じように行うだけです。
具体的には、境界ボックスAの8個の頂点が、境界ボックスBの内部にあるかどうかを調べることになります。
222ポイント を手に入れた。
|
|
|
|
Name: array ..入門者(3,933ポイント)
Date: 2008/08/01(金) 22:39
No:19341
|
|
Title: 弾幕のアイディア及びその考察
|
|
近日管理人さんは3Dに手を出してるみたいですが、私はSTGの館をベースに書いてたプログラムを龍神録の館と互換性あるものに書き換えるのに必死でした。
そしてほぼ完成したので、とりあえあず敵の弾幕から作成しています。14章の様な弾幕をベースに色々考えてみましたが、いまいち綺麗なアイディアが思い浮かびません。そこで・・・
==============================================
14章の発展、ボスレベルじゃない小規模な弾幕のアイディアに対し⇒実際にプログラムを書き⇒そのプログラムはこう書いた方が良いよ(この方が効率的など)。という流れで進めていきたいのですがどうでしょうか。
※アイディアだけでも良いです。(可能範囲)
※アイディアに対しプログラムが無ければ私が考えようと思います。(他者が考えてくれても助かります)
※プログラムが書かれたらそのプログラムを評価(考察)してほしいです。
※プログラムは 書き手の考えを分かってもらえる様に できるだけコメントを書きます。
3ポイント を手に入れた。
|
|
|
|
Name: array ..入門者(4,332ポイント)
Date: 2008/08/01(金) 22:45
No:19343
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
さっそく、龍神録本編の1ステージの敵の弾幕をまねてみました。そこは、どうなってるの?そこはこうした方が読み手にも分かりやすい、などご意見お願いします。
//×ショット
void shot_bullet_H000(int n){
int t=shot[n].cnt;
int k;
if(t%30 == 0 && t >= 0 && t< 60){
for(int j=0; j<15; j++){
if(shot[n].flag!=2 && (k=shot_serch(n))!=-1){
shot[n].bullet[k].knd =enemy[shot[n].num].blknd2;
shot[n].bullet[k].angle =shotatan2(n) + PI*30/2/180*(t == 30 ? 1 : -1);
//shotatan2(n)に対し、t=0なら-30度、t=30なら+30度
shot[n].bullet[k].flag =1;
shot[n].bullet[k].x
=enemy[shot[n].num].x + cos(shot[n].bullet[k].angle+PI/2)*(10*(j-7));
// │(縦)状態をPI/2で機体に対し―(横)にする
shot[n].bullet[k].y
=enemy[shot[n].num].y + sin(shot[n].bullet[k].angle+PI/2)*(10*(j-7));
// 初期位置は10*(j-7)辺り、jによって位置を変える。
shot[n].bullet[k].col =enemy[shot[n].num].col;
shot[n].bullet[k].cnt = -j*10-(t == 30 ? -t : 0);
//カウントを(-j*10)で初期設定。t=30目のショットならカウントを-30する
shot[n].bullet[k].spd =0;//最初は止まってる
se_flag[0]=1;
}
}
}
for(int i=0;i<SHOT_BULLET_MAX;i++){
if(shot[n].bullet[i].flag == 1 && shot[n].bullet[i].cnt >= 60){
shot[n].bullet[i].spd = 3;
shot[n].bullet[i].angle += PI*20/180/60; //60カウントかけて20度回す
}
}
}
399ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(657,294ポイント)
Date: 2008/08/01(金) 22:49
No:19344
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
とりあえず提示されたプログラムを添削・アドバイスすればいいのですね?
まぁアイディアがあっても、こういう弾幕のプログラムとかは言葉じゃ多分伝えられないと思います^^;
既存の東方の弾幕とかで「○○みたいな弾幕」という感じじゃないと中々伝えられないかと・・。
しかし綺麗なアイディアが浮かばないということは、東方にも龍神録にもない弾幕が作りたいわけですよね?
質問の前半はアイディアが浮かばない事を悩んでいらっしゃるように感じますが、後半はプログラムの添削をしてほしいという
感じに思われますが、どちらでしょう?
両方でしょうか?
まぁ前者の場合は、もし案が浮かばないのなら兎に角真似する事ですよ。
最初は何でも真似からはじまると思います。
東方にある敵の弾幕を端から真似して実装してみてください。
実装も容易に出来るようになりますし、自然と自分なりの案が浮かんでくると思います。
後者の場合は、提示していただければ私のわかる範囲でアドバイスしますm(_ _)m
403ポイント を手に入れた。
|
|
|
|
|
Name: array ..入門者(4,187ポイント)
Date: 2008/08/01(金) 22:55
No:19346
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
×ショットとか変な名前書いててごめんなさいw
一応動作の要素が一番詰まってると思われるスクリーンショットを撮ったのですが、やっぱり動画か、実際に実行させるかしないと、どういう動きをしてるのか分りませんね^^;
一応テスト動作に使用したエクセルデータも上げておきます。(同じ内容が永遠と続いてるだけですけど)
145ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(657,432ポイント)
Date: 2008/08/01(金) 23:14
No:19348
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
まぁ自分の思い通りになったのなら、それはそれでいいとは思いますが、
細かいところをいうと、
(t == 30 ? 1 : -1)
だと、tが0か30の時にしか適応出来ませんが
(t%60 == 30 ? 1 : -1)
とやっておけば、tがいくら増えても
例えば
if(t%30 == 0 && t >= 0 && t< 60){
が
if(t%30 == 0 && t >= 0 && t<120){
とかになっても同じようにX字になってくれます。
(t%60 == 30 ? -t : 0)も同様
まぁこれは今後拡張するつもりがなければ必要ないことですし
後は
shot[n].bullet[i].spd = 3;
を代入するのは1回でいいとかホントに細かいところはありますが、
別に特に言うこと無いと思いますよ。
78ポイント を手に入れた。
|
|
|
|
|
Name: array ..入門者(4,836ポイント)
Date: 2008/08/01(金) 23:34
No:19350
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
たしかに片っぱしから真似をするのは大事だと思います。私は龍神録及び、動画を見て作れそうなのは試行錯誤しながら色々真似てみました。
実は今日も見てたんですけど、やっぱり龍神録のラストステージの弾幕とかみてると感動しつつレベルの差を感じますねwあれは無理ですw文字弾幕も前に少し解説してましたが、私は まだそのレベルに達していない事は分かってますので手を付けてません。(分からないしw)
>アイディアについて
アイディアや(プログラムを書いてみた)などを出してくれれば、私は考えてみますし(他者が考えてもらってもかまいません)プログラムを添削します(私で良ければ)。
アイディアやプログラムがでなければ、私が書いたプログラムを書きますので、評価や添削してもらえると嬉しいです。
※暇つぶしの雑談ができればという趣旨で立たスレッドなので時間がある時に、気軽に考えて気軽に書き込んでもらえたらと思います。
>龍神録はトントントンと3回発射されるのに対してこれが2回なのは、それはいいんですか?
多分2個を3個に増やす分には同じような事をすれば良いのである程度気軽にできると思います。
私が書いてて不安だったのが、カウントの初期定義。初期座標の定義です。これはもっと良い書き方があるのではと思っているのですが、たぶんこの書き方だと。あとから見たときに『なんじゃこりゃ』となりかねないと思います。
とか文章を考えてるうちに管理人さんが頑張ってくれていたので追記(私は文章能力が無く時間をかけてもこの程度の文章能力なのでご了承を)
>(t == 30 ? 1 : -1)
>だと、tが0か30の時にしか適応出来ませんが
>(t%60 == 30 ? 1 : -1)
とても参考になります。
?(演算子)を使うのが初めてで、不器用に考えてたら t == 30としてました。
ほかの改善点も改善して改善後のプログラムも載せておきますね。
>横に長くなりすぎる時は代入を改行するとか、注釈を違う行にするとかして
改善してみます。
649ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(657,572ポイント)
Date: 2008/08/01(金) 23:58
No:19351
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
なるほど、雑談トピということでしたか、では、私も何か面白そうな話題があったら提供します。
あ、じゃ私から一つお願いが。
永夜抄の弾幕結界作って下さい(ノ▽`)ノ
色んなものを真似してて思いますけど、既存のものに近い弾幕は作れますが、遜色無しに瓜二つにするって
すごく難しい事じゃないですか?
多分弾幕結界をどんな東方マニアもそっくりだと言わせるほど似せるのは至難のわざかと・・。
ちなみに私は諦めました^^;
>龍神録のラストステージの弾幕とかみてると感動しつつ
おぉ、ありがとうございます!
TrueLastの弾幕とか上の方でごにょごにょ演出してるんですが、
絶対誰も見てないですよね〜^^;
緑と赤のナイフがゴニョゴニョ動いてるの結構工夫したんですがw
なので、気づいてもらえる人がいると嬉しいです。
文字弾幕は作成用のツールを他に作らないととても無理だと思います^^;
色々手の込んだ事しようとするとツールが必要になるんですよねぇ。
36ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(100,582ポイント)
Date: 2008/08/02(土) 00:15
No:19352
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
そういや、会社にある画像処理の本を読んでたら、細線化の方法が詳しく解説されていました。
これを実装すれば、文字弾幕の作成が楽になるかもしれません…
53ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(5,764ポイント)
Date: 2008/08/02(土) 00:16
No:19353
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
以下が上記の修正版です。
void shot_bullet_H000(int n){
int t = shot[n].cnt;
int k;
//弾を表示。最初は止まっている
if(t%30 == 0 && t >= 0 && t< 60){
for(int j=0; j<15; j++){
if(shot[n].flag!=2 && (k=shot_serch(n))!=-1){
shot[n].bullet[k].knd = enemy[shot[n].num].blknd2;
shot[n].bullet[k].angle = shotatan2(n) + PI*30/2/180*(t%60 == 30 ? 1 : -1);
shot[n].bullet[k].flag = 1;
shot[n].bullet[k].x = enemy[shot[n].num].x
+ cos(shot[n].bullet[k].angle+PI/2)*(10*(j-7));
shot[n].bullet[k].y = enemy[shot[n].num].y
+ sin(shot[n].bullet[k].angle+PI/2)*(10*(j-7));
shot[n].bullet[k].col = enemy[shot[n].num].col;
shot[n].bullet[k].cnt = -j*10-(t%60 == 30 ? -t : 0);
shot[n].bullet[k].spd = 0;
se_flag[0]=1;
}
}
}
//各弾を動かすタイミングの処理
for(int i=0;i<SHOT_BULLET_MAX;i++){
if(shot[n].bullet[i].flag == 1 && shot[n].bullet[i].cnt >= 60){
if(shot[n].bullet[i].cnt == 60)
shot[n].bullet[i].spd = 3;
shot[n].bullet[i].angle += PI*20/180/60;
}
}
}
気になったのですが
if(shot[n].bullet[i].cnt == 60)
shot[n].bullet[i].spd = 3;
はifで書き込み処理を飛ばす処理に対して
ifを消して
shot[n].bullet[i].spd = 3;
と書き込む処理、どちらが早いんでしょうか。
ifで判断して書き込むか書きこまないか判断している分 修正後の方が処理が遅くなると思うのですが。
以後処理を追加する時の為(スピード変化など)に
shot[n].bullet[i].spd = 3;
は1度の書き込みにしておいた方が良いのでしょうか?
928ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(6,151ポイント)
Date: 2008/08/02(土) 00:28
No:19354
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
タブを消して半角スペース3個にしました。これでも長いですけど。
そういえば東方は龍神録より前から知ってはいたのですが、やったことがないです。(プレイ動画でしか知りません)
なので、スペカとかも実は知りません。なにそれって感じです。(最近分かってきた)
>永夜抄の弾幕結界作って下さい(ノ▽`)ノ
調べてみますが、いきなりBOSS レベルとか止めてくださいよ?(>_<)
簡単そうだったら、寝たいので明日頑張ってみます。
>そういや、会社にある画像処理の本を読んでたら、細線化の方法が詳しく解説されていました。
>これを実装すれば、文字弾幕の作成が楽になるかもしれません…
画像を細線化というのがあまりにもイメージできないので。私は今のところ手を出す気になりません((((((^_^;)
でもいつかはやってみたいですね^^ちなみにどういったタイトルの本なんですか?
387ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(657,797ポイント)
Date: 2008/08/02(土) 02:15
No:19356
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
>どちらが早いんでしょうか。
比較と書き込みなら比較の方が早いと思いますよ。
この辺まで気にする事はないかもしれませんが・・。
まぁスピードは変わらずとも無駄な事してるとちょっと気持ち悪いですよね。
>無理ではなさそうだし、せっかくの初お題なので頑張ってみますね
おぉホントですか!!
冗談で言ったつもりだったんですが^^;
実装楽しみにしています♪
私は難しすぎて断念しました・・。
おそらく東方の数百種類ある弾幕の中で一番似せるのが難しい弾幕だと思います。
きっとこの無数に出てくる弾1つ、1度でも角度違ったら避けれなくなる場合がありますし。
でも完成できたのは是非みてみたいので楽しみにしています〜♪
225ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(6,338ポイント)
Date: 2008/08/02(土) 02:59
No:19358
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
寝ようと思ってPCいったん落としたのですが目を瞑っても、イメージがでてきて寝れなく
実際に計算通りの動作をするか気になったのでPC起動しちゃいました(^o^)
最初の部分は計算イメージが沸くのですが後半・・・見てて混乱しますよね。(にしてもこのプレイヤーさん操作性半端じゃないですね)
それと動画じゃ確認しようがないのですが、弾幕の角度なんかはプレイヤー依存ですか?
にしても見れば見るほど再現不可能ですねw
112ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(6,785ポイント)
Date: 2008/08/02(土) 05:57
No:19360
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
ふう・・・なんとか『回りの奴』が想定の計算通りに動くようになりました。まだ本物には似ても似つかずな状態ですが、こういのを考えると思う事が、本家のZUNさんもこんなにち密な計算をしてるんだと思うと凄いと実感させられます。しかもオリジナルですからね。
まぁ・・・ある程度考えてから動きは失敗したがなんか良い動きだなぁーってのが多々あったりするので、そういのから来てるのかもしれませんが。
ちゃんと計算して最初からあの動きを目的として考えてたら改めて尊敬しますw
―
とりあえず、まわりに回ってるそれっぽいの『物』を作り、その回ってるの『物』も座標をもってるのでその座標から発射させてみました。そしてスピードをONにしたりOFFにしたりしてみました。
あとは調整しつつ外向きに『ミシャグジさま弾幕』っぽいのも確認したのでそれも・・・。
コードは寝ぼけながら書いたので汚いです。このコードで良ければすでに挫折しぎみな状態なので、綺麗に書き直して、とりあえず公開してみたいです。
―
ここまでのプログラムを書いて不安というか無理だと思った事が・・・ち密に計算された動きを動画の動きから計算式を再現するのは、ほぼ不可能ですねw
447ポイント を手に入れた。
|
|
|
|
|
Name: array ..初心者(6,856ポイント)
Date: 2008/08/02(土) 06:02
No:19361
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
上のコードでそのまま放置した状況です。
ちょっと寝ぼけてるので感性がおかしいのかもしれませんが、良い感じじゃないかなと思ったので・・・内側へ向かうのとボスを素通りして外側に向かうのがあります。
71ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(658,135ポイント)
Date: 2008/08/02(土) 09:26
No:19364
|
|
Title: Re:弾幕のアイディア及びその考察
|
|
おはようございます。
今日は出かけるので珍しく朝早くおきてみました(これでもいつも8時に寝る私にとっては早い方)
おぉっ!なんかそれっぽくてwktk♪
多分今はじめてみた弾幕だから余計難しいんでしょうね^^;
ZUNさんは恐らくある程度計算通りなんじゃないでしょうか。
96年からゲーム作ってる方ですし、本物のゲームプログラマーですし・・。
慣れてらっしゃる可能性が・・。
そりゃ確かにtry and errorで作ってる部分も多いでしょうけどね。
ちなみに私はほとんどが適当に考えてからみながら調整ですw
コリャ私も時間があるときトライしてみなくちゃかな^^
189ポイント を手に入れた。
|
|
|
|
Name: ROL ..ぴよぴよ(145ポイント)
Date: 2008/07/30(水) 10:44
No:19213
|
|
Title: 始めまして
|
|
みなさん、こんにちは。C言語暦1週間のROLと申します。将来は3DアクションRPGを作れたらと思って
勉強し始めたのですが、勉強方法で迷っています。
管理人様が製作している龍神録プログラミングの館を勉強してから普通のRPGが作れるぐらいの知識が身
につくのかどうなのか?それとも、初めから自分で悩んでRPGをつくればいいのかどうか。
どちらが近道なのでしょうか?
一応、ゲーム館のプログラムは実行しました(自分で考えたものも)
ただ、ゲーム製作に直結した部分が見当たらなかったのでどうした物かと;
とにかくゲームの原理をC言語に置き換える機転を身につける方法があれば
教えてください。よろしくお願いします。
145ポイント を手に入れた。
|
|
|
|
Name: 経歴2ヶ月 ..入門者(2,987ポイント)
Date: 2008/07/30(水) 12:07
No:19214
|
|
Title: Re:始めまして
|
|
はじめまして。
私の意見としては、自分が興味があればなにから始めてもかまわないと思います。
3DRPGを作るにしても実際に作ろうとしてみるのは大切です。
というのも実際に作ってみようとすると、どうすれば良いか分らない事が出てきます。興味があれば分らない事でも意欲的に解決していこうとするので、辛いながらも楽しくやっていけると思います。
まあ、龍神録プログラミングの館をちゃんと勉強すれば、『構造体、空き配列の検索、関数、キャラ(敵)描画方法、当り判定、キャラ動作の理論』・・・ざっと思い浮かべるだけでこれだけの事を学べると思います。
なんにせよ、これだけ学べば不器用ながらいくらでも応用できるようになります。
244ポイント を手に入れた。
|
|
|
|
|
Name: ランド ..入門者(3,125ポイント)
Date: 2008/07/30(水) 12:27
No:19216
|
|
Title: Re:始めまして
|
|
こんにちはー。私的な意見を。
龍神録プログラミングの館はあくまでシューティングゲームの話ですが、
アクションRPG製作に直結して役立つかというと、十分役立つことが多いと思います。
シューティングもアクション的な要素は多いですからねー。
また、基本的なアクションRPGならゲーム館のみでも十分作れますー。
ですが、3Dを作るのならば、ここの学習だけでは(少なくとも私では)不可能です。
3D解説サイトは調べたら出てくると思いますので、そこで学習してみてください。
私が今作ってるゲームを作り終えたら勉強しようと思ってる3D参考ページを載せておきます。
http://www.plustarnet.com/aspil/Programming/
わかりやすいかはまだ読んでないのでわかりません。ご了承下さい。
263ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(648,308ポイント)
Date: 2008/07/30(水) 12:55
No:19217
|
|
Title: Re:始めまして
|
|
>龍神録プログラミングの館を勉強してから普通のRPGが作れるぐらいの知識が身につくのかどうなのか?
普通のRPGに比べたら龍神録プログラミングの館にかいてあることの方がよっぽど難しいです。
私が初めて作ったゲームはFF1のようなゲームでした。
コレくらいのゲームなら館で勉強したら作れるようになると思います。
0と1を配列にいれることで移動制御出来るようにする方法とかさえわかれば、後はマップつくっていったりすればいいだけですね。
戦闘シーンとかは、私なら試行錯誤で勉強します。
参考書を読む事は勉強になると思いますが、私は趣味で楽しみに作るのなら、
億劫な参考書の熟読より、自分で楽しみながら作っていけばいいじゃないかというスタンスです。
人それぞれやり方は色々でしょうけど、まず小さいゲームを一つ作ってみて、それから広げていくのが一番だと思いますよ。
最初はジャンケンをさせるゲームだけでも十分だと思います。
計算部や描画部などにきっちり関数をわけないと効率的ではないことがわかってくるでしょうし、
まずは自分の興味のある小規模なゲームを作ってみて下さい。
ここのHPで紹介しているビシバシチャンプ的ゲームがありますが、
演出などに凝らなければやり方さえわかれば2時間位で作れると思います。
何を作ればいいかわからなければまず、こういうのを作ってみてはいかがでしょう。
419ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..かけだし(1,570ポイント)
Date: 2008/07/30(水) 16:52
No:19228
|
|
Title: Re:始めまして
|
|
少し部屋の掃除をしてる間にこんなにも多くのコメントが・・・・・(涙
みなさん、ありがとうございます。本当にココはアットホームで楽しいですね^^
経歴2ヶ月さん、
それは本当に私もそう思います。自分は数学・物理・生物系に進んでいるのでわからなくてもそれ
を追求して行くことが大好きなのでがんばれそうです。それに、当たり判定とかも3Dアクションな
ら必用ですもんね。めげない、あきらめない、辛抱強くをモットーにがんばります。
ランドさん、
サイトには行ったのですが、カメラの回転と動作、CTextureクラス(動画関係の事なのかな)が載
ってるぐらいでした。いまは、呆然と考えているだけなのですが、疑問があります。あるフリーの
3Dゲームのグラフィックファイルを製作ソフトで起動したところ壁と地面が別々のファイルとして
ありました。そこで、壁や地面のあるか無いかの判定は3D自体に名前をつけてそれを壁としている
のか。それとも2Dと同じように座標で判定しているのか。その判定部分がボーゼンとしてます><
でもそのサイトの説明で、自分で作ったキャラクターが動いたのは感動的でした。教えていただき
感謝です。
管理人様、
RPGよりシューティングの方が難しいんですか?ゲーム館は読みましたが、いまいちRPGがどのように
なっているのか仕組み事態がわかっていないんです。
>私が初めて作ったゲームはFF1のようなゲームでした。
FF1って何でしょう?平成生まれでごめんなさい(苦笑
戦闘シーンは判定方法がわかれば作れると思います。ざっと今考えて見ると2Dのアクションとかは四角
で判定。3Dは円柱で判定ですよね。敵との距離を計算してあるところまで近づきボタンが押され動画を
スタート。少し難しいかもしれませんがボタンが押された後、動画と当たり判定がマッチするように時
間計算をしてダメージを与える。つまり、仮にボタンが押されて1秒後に攻撃があたってるように見えた
らボタンが押されて1秒後にダメージを与える、見たいな感じでしょうかね?
(生意気に聞こえたらごめんなさい。ゲームの考えがこれでいいのかもわからないもので;)
>最初はジャンケンをさせるゲームだけでも十分だと思います。
じゃんけんゲームですか。たとえばA・B・Cを順にグー・チョキ・パーとし値を1・2・3とした場合、自分
が出す値を決めてEnterキーで勝負、相手は乱数を使ってその出た値によって出すものを決める。両方の値
を比較して勝敗を決める。自分の値をX敵の値をYと仮定した場合X-Yの値によって判定。
(x=1-Y=1)=0だから0は引き分け (x=1-y=2)=-1だから-1は勝ち (x=1-y=3)=-2だから-2は負け この計算
結果をif文で分けて行き勝敗を表示する。こんな考え方でいいのかな;;;自身無いです><
>まずは自分の興味のある小規模なゲームを作ってみて下さい。
てくてくピクミンってご存知ですか?あれ作れたらものすごくうれしいんですけどね〜^^
小学生のときにゲームキューブは持っていたんですがアドバンス持ってなくてできなかった
つらい思い出があるので。任天堂のバカヤロー><(雑談すみません)
>ビシバシチャンプ的ゲーム
ゲーム名を表記してください><
管理人様のおちゃめな発言、過去ログ見ていてものすごくかわいぃ〜のですが、わかりづらいですorz
なんかグダグダと長い文章でごめんなさい。でも、皆さんに早く追いついていろんな事をおしゃべりしたいと
思っています。掲示板の質問とかにも出てくる問題は結構勉強になりそうですしね^^
私は、末永く管理人様について行きます(え!(・_・;)
1,425ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..入門者(4,879ポイント)
Date: 2008/07/30(水) 17:19
No:19229
|
|
Title: Re:始めまして
|
|
はじめまして^^
私はこのサイトを知ったことがゲームを作り出すきっかけになったのですが、私の意見としては、プログラミングはやってて損はしないので、まず様々なゲームを(易しいものから難しいものという流れで)作成していくのが良いかと思います。(私は単純な2D迷路ゲームから始まり、今は2DSTGを作っています。)
私が、このサイトを知ったときは龍神録のプログラミングの館がなくて、シューティングの館までだったので、「自機当たり判定」、「アイテムの落とし方」、「ステージ移行」などさまざまなシステムを追加するのに苦労しましたが、実現した時の喜びは今でも忘れられません^^;
逆にこの苦労があったおかげで、今では、システム面で悩むことがなくなりつつあります。
なので、プログラミングをやることは、形がどんなであれ、必ず役に立つと思いますので、まったりと自分が出来そうなところからはじめてはいかがでしょうか。
181ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(649,188ポイント)
Date: 2008/07/30(水) 17:44
No:19230
|
|
Title: Re:始めまして
|
|
>RPGよりシューティングの方が難しいんですか?
う〜ん、まぁどんなRPGを想像していらっしゃるかわかりませんが、
FF1のようなRPGに比べたら龍神録の方が難しいと思います。
FF1というのはFinalFantasyIのことです。
今FinalFantasy12まで出ていると思いますが、その1作目です。
私も発売当時にやったわけじゃないので、ゲームボーイや携帯とかでやりましたが・・。
ただ難しい種類が違うのであんまり比べられないですね。
RPGはフラグ管理とかの勉強になるでしょう。
あの膨大なセリフや状態フラグをどうやって管理するかがミソになるのではないかと思います。
また、RPGはダメージ計算式をどう作るかが面白さのポイントになりそうです。
戦闘シーンも、どんな戦闘かによりますよね。
リアルタイムバトルなのか、そうではないのか。
敵が攻撃している時にこっちが攻撃できるのか出来ないのかなど。
リアルタイムじゃなく、攻撃は1人ずつしか出来ない戦闘が一番簡単だと思います。
私なら「行動」の入れ物にすべき行動をスタックしておき、
その行動がとれるようになったら行動するような感じでプログラム書いていきますかね。
ちょっと字じゃ説明しにくいです。
私がいつも書くプログラムは基本「登録」「計算」「描画」の3本柱からなっています。
作り方は別に決まってるわけじゃないので、とにかくそれっぽくなるように
試行錯誤していってみてはどうでしょう。
ジャンケンについてはだいたいそんな感じですね。
3で割ったあまりで計算するほうがしやすいので、実際には0,1,2に対応したほうがやりやすいと思います。
てくてくピクミンは存じませんが、パズルゲーかカードゲーでしょうか?
相手の人工知能を考えなくていいのならわりと簡単に出来るのでは無いでしょうか。
そういう意味ではテトリスはプログラマーの勉強の為に作られたものですし、
そういうのでアルゴリズムの勉強をしてもいいかもしれません。
ビシバシチャンプは作品紹介
http://dixq.net/sakuhin.html
で紹介しているところにかいてある「サイコロコロコロ」と「カラフルドロップ」です。
パスワードとか、演出とか考えてたので製作時間少しかかっていますが、
本体だけならわりとサクッと作れると思います。
880ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..かけだし(2,107ポイント)
Date: 2008/07/30(水) 19:04
No:19233
|
|
Title: Re:始めまして
|
|
管理人様、
やはり経験の差が考え方に出てしまうんですね。(数学ばかりやってるから頭が固いんですかね;)
ゲーム館でも割ったあまりが大切と書いてあったのに><
私が考えてるRPGと言うのはツクールで作られたような感じの物です。
テクテクピクミンの事なのですが、全部RPGのようなマスで構成されていてゴールと自機と敵機があります。
障害物などのマスを1度入れ替えると、自機はゴールへ、敵機は自機へ1マスずつ進みます。それを繰り返し
自機がゴールに到着すれば終わり。敵機が自機に当たればEND。味方は3種類で赤・青・黄です。赤は火青は水、黄色は電気を通れます。赤が水、電気のマスを通ってもEND。ゴール、自機、敵機、一度入れ替えたマスは
その1ステージでは二度と入れ替えられません。
ちょっと考えただけで頭が混乱しそうです;;;;
まずは入れ替えの選択枠。次に自機の移動。敵機の移動。マスの上下左右の壁があるか無いか。マスのスワ
ップ。マスの属性。当たり判定。・・・・・・こんな感じで作って行けばいいのかな・・・・・・・・・・
あと入れ替えたマスの記憶と当たり判定。マスは2次元配列でそれぞれ番号をつけて処理・・・・・・・・・
はぁ・・・まずはじゃんけんゲームから作ります。到底私なんかに作れそうもなさそう;
管理人様が本当に神に見えてきました。あんなゲームを一人で作ってしまうなんて・・・・・・
ほんとにお友達からでもいいので、付き合ってください。
得意料理はローストビーフとかビーフシチューとか!Σ( ̄□ ̄;)
ランドさん、
なんかすごそうなサイトですね。やっぱり3Dも座標でしたか・・・・・・
でもあれを使えばもっと幅が広がりますね。ありがとうございます。
3次元の座標ってどうやって表現するんでしょうね^^;
2次元は表記で来ても3次元は文字に置き換えられないような。
また、全体をわったひとつを座標とするのでしょうか?
アクションRPGとかバイオハザードとかはとてつもなく遠い夢!?
!!!!!3Dでもバイオハザードはほぼ2次元でできてる?壁判定とか^^;
追伸
この掲示板、荒れることが無いのがものすごく不思議です。
私も以前、イラストサイトを作ったのですが2CHの住人にあらされてしまいました。
どうやってこのような状況を維持できるのでしょうか?教えてください。
537ポイント を手に入れた。
|
|
|
|
|
Name: KEV ..かけだし(1,215ポイント)
Date: 2008/07/30(水) 20:11
No:19234
|
|
Title: Re:始めまして
|
|
この掲示板が荒れないのは、数多くの人に支えられているからだと思います。
明らかに宿題を貼り付けただけのスレッドにも時には力を貸すし、
難しいプログラムに答えられる技術がある人が集まってるし。
いい人ばかりです…。
私は去年プログラマとして就職して、まだまだ未熟者なんですが
自分でも答えられる質問があれば頑張ってみたりしてます。
質問に答えるのってすごい実力付きますよ。お礼言われたりしたら嬉しいし!
ROLさんも今後ぜひチャレンジしてみてはいかがでしょうか。
それに、なによりもこの掲示板が維持できているのは
ここの雰囲気を苦労して作り上げた
管理人Dixq氏の努力があってこそなんでしょう。
>テクテクピクミン
元ネタ知らないのですが面白そうですね。
リアルタイムでピクミンが勝手に動いたらもっと楽しそう。そして作るの難しそうw
205ポイント を落としてしまった。
|
|
|
|
|
Name: 経歴2ヶ月 ..入門者(3,407ポイント)
Date: 2008/07/30(水) 21:16
No:19235
|
|
Title: Re:始めまして
|
|
>テクテクピクミン
私はピクミンといわれたら、あのCMしか思い浮かばないですけど・・・w
>3Dゲームについて
3Dの辺り判定は物体がもつ中心座標からX(横)、Y(縦)、Z(高)座標が範囲内にあるかを判定して、空中に浮いてる物体なんかの辺り判定もできるものだと思います。
>はぁ・・・まずはじゃんけんゲームから作ります。
私は工業系の高校へ行きポケコンなる白物でベーシック言語(簡単(IF、GOTO、PRINT、INPUTだけ)なやつ)を使い ジャンケンゲームを組んだ事があるのですが、確かに 勝敗などの判定をどうするればいいのか・・・などで悩めます。
ただ同じC言語初心者としては、興味があれば是非、旧シューティングの館からでも(プログラムの書き方がやさしい(と感じる))勉強して欲しいと思います。
私がつまずいたのは、構造体と、配列、『敵、自機、ショット』の把握です。で・・・一番難しいのが他人のプログラムを読む事です。始まりから終わりまで全部の動作を理解できるまで読み解いた頃には、プログラムの書き方で良いなぁと思った事は、活用できるようになってるし、とっても勉強になります。
>私も以前、イラストサイトを作ったのですが2CHの住人にあらされてしまいました。
言い方が悪く安易な意見ですけど、お絵かき系は誰でも評価できるので荒れやすいジャンルじゃないかなと思います。
これ以上書くとめちゃめちゃ長くなるので・・・本当にプログラムの勉強頑張ってください^^
制作状況なんかを雑談したり、完成した作品なんかを上げたりすると こっちも楽しいと思います。
420ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(649,641ポイント)
Date: 2008/07/30(水) 21:30
No:19236
|
|
Title: Re:始めまして
|
|
初めて製作されるようなので、ちょっとサンプルを書いてみますね。
DXライブラリの経験がなければ、まずコンソール画面で作ってみましょう。
以下ジャンケンのプログラムを書いてみました。
コンソール用のプロジェクトで実行してみて下さい。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void){
int player, com;
char str[3][7]={{"グー"},{"チョキ"},{"パー"}};
srand((unsigned)time(NULL));//乱数初期化
printf("ジャンケン・・・\n0:グー 1:チョキ 2:パー\n");
while(1){
scanf("%d",&player); //入力させる
com=rand()%3; //相手の手を決める
printf("自分:%s\n",str[player]);
printf("相手:%s\n",str[com]);
if(player==com){//お互いが同じなら
printf("アイコで・・・\n0:グー 1:チョキ 2:パー\n");
continue;
}
else//違うなら勝負が付いた
break;
}
if(player == (com+1)%3)
printf("あなたの負けです\n");
else
printf("あなたの勝ちです\n");
return(0);
}
実行結果
ジャンケン・・・
0:グー 1:チョキ 2:パー
1
自分:チョキ
相手:チョキ
アイコで・・・
0:グー 1:チョキ 2:パー
2
自分:パー
相手:パー
アイコで・・・
0:グー 1:チョキ 2:パー
0
自分:グー
相手:チョキ
あなたの勝ちです
これをDXライブラリでかいてみましょう。
453ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..入門者(2,612ポイント)
Date: 2008/07/30(水) 22:27
No:19238
|
|
Title: Re:始めまして
|
|
なるほどです。本当に管理人様の苦労が・・・・・。・°°・(;>_<;)・°°・。(号泣)
それを支えている皆さんの雰囲気で荒れたりしないんですね。
KEVさんは去年、プログラマーになったんですよね?なら、高校、大学は物理系情報みたいな感じで
勉強したんでしょうか?興味があるので、教えていただければうれしいです^^
宿題の質問とかも答えないでも見るだけ、解答を理解するだけでも勉強になりますもんね。
答えれる問題でも先輩方と自分との考え方、機転の利き方を比較できる。自分で考え答えを
導き出せるので一石二鳥ですね。
>>テクテクピクミン
>元ネタ知らないのですが面白そうですね。
もともと任天堂がピクミン・ピクミン2のオマケとして作ったパズルゲームのようです。
私も実際にはやった事が無いのですがピクミン2の初回生産得点でカードと説明書だけ
ついてきたと言う><
どこかでプレイ動画を見つけたらまたお知らせします。
管理人様、
わざわざソースを書いていただきありがとうございます。
ですが、コンソール画面?コンパイラの事でしょうか?
またソースの始めに
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
とありますが意味がぜんぜんわかりません><
あと
char str[3][7]={{"グー"},{"チョキ"},{"パー"}};
の[3][7]の部分もです。
わからないのはそこだけでソースは面白いぐらいにわかります。
まず、キー入力は数字。
手、結果を文字で表記している。
while(1)なのでループは一回。
分岐はif文で値が同じならアイコ
そうで無ければループを抜ける・・・・・・あれループが一回では無い^^;
あ、break;だから終了になるんですね。
理解できたのでがんばって書いて見ます。
505ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(651,162ポイント)
Date: 2008/07/30(水) 22:32
No:19239
|
|
Title: Re:始めまして
|
|
DXライブラリでサンプル作ってみました。
#include "include/DxLib.h"
int img[3],sound[5];//画像、音楽
int Key[256];//キー
int player,com,state;//プレイやー、コンピュータ、状態
int sound_flag[5],sound_state;//再生フラグ、再生状態
//入力処理
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}
//最初の初期化
void first_ini(){
player =-1;
com =-1;
state =-1;
sound_state=0;//未再生
SetFontSize(20);
}
//フラグの初期化
void ini(){
memset(sound_flag,0,sizeof(int)*5);
}
//リセット
void reset(){
//再生フラグがオフなら
if(sound_state==0){
sound_flag[0]=1;//ジャンケン・・
sound_state=1;//再生した状態に変更
}
if(Key[KEY_INPUT_RETURN]==2)//エンターが押されていたら
first_ini();//最初の初期化
}
//ロード
void load(){
img[0]=LoadGraph("dat/0.PNG");
img[1]=LoadGraph("dat/1.PNG");
img[2]=LoadGraph("dat/2.PNG");
sound[0]=LoadSoundMem("dat/ジャンケン.wav");
sound[1]=LoadSoundMem("dat/あいこで.wav");
sound[2]=LoadSoundMem("dat/やったね.wav");
sound[3]=LoadSoundMem("dat/ポコ.wav");
}
//ジャンケン処理
void calc_janken(){
if(player!=com){
if(player == (com+1)%3){
state=1;//負け状態
sound_flag[3]=1;
}
else{
state=2;//勝ち状態
sound_flag[2]=1;
}
}
else{
state=0;//あいこ状態
sound_flag[1]=1;
}
}
//入力処理
void input_janken(){
if(!(state==-1 || state==0))//まだ未入力か、あいこじゃないなら処理しない
return ;
//何か入力があれば
if(Key[KEY_INPUT_0]==2 || Key[KEY_INPUT_1]==2 || Key[KEY_INPUT_2]==2){
if(Key[KEY_INPUT_0]==2)//グーなら
player=0;
if(Key[KEY_INPUT_1]==2)//チョキなら
player=1;
if(Key[KEY_INPUT_2]==2)//パーなら
player=2;
com=GetRand(2);//コンピュータの入力
calc_janken();//ジャンケン処理
}
}
//描画
void graph_janken(){
DrawFormatString( 0, 0,GetColor(255,255,255),
"%s","Enterキーでリセット 0:グー 1:チョキ 2:パー");
if(state==-1)
DrawFormatString(150,50,GetColor(255,255,255),"%s","ジャンケン・・・");
else if(state==0)
DrawFormatString(150,50,GetColor(255,255,255),"%s","あいこで・・・・");
else if(state==1)
DrawFormatString(150,50,GetColor(255,255,255),"%s","******ポコ******");
else
DrawFormatString(150,50,GetColor(255,255,255),"%s","***やったね!***");
DrawFormatString(150,130,GetColor(255,255,255),"%s","相手:");
DrawFormatString(150,310,GetColor(255,255,255),"%s","自分:");
if(0<=player && player<=2)
DrawGraph(320,100,img[com],TRUE);
if(0<=com && com<=2)
DrawGraph(320,280,img[player] ,TRUE);
}
//音楽再生
void play_sound(){
for(int i=0;i<5;i++){
if(sound_flag[i]==1){
PlaySoundMem(sound[i],DX_PLAYTYPE_BACK);
}
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
first_ini();//初期化
load();//画像ロード
while(ProcessMessage()==0 && ClearDrawScreen()==0 &&
//↑メッセージ処理 ↑画面をクリア
GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑入力状態を保存 ↑ESCが押されていない
ini();//初期化
reset();//リセット
input_janken();//入力させる
graph_janken();//描画
play_sound();//音楽再生
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了
return 0;
}
こちらにプロジェクトごと置いておきました。
VisualStudio2005か2008ならそのまま実行できます。
http://dixq.net/zip/janken.zip
1,521ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(652,068ポイント)
Date: 2008/07/30(水) 22:56
No:19240
|
|
Title: Re:始めまして
|
|
>数学ばかりやってるから頭が固いんですかね;
おー数学がお好きなんですね。
弾幕作ってると結構数学使うので、もし数学お好きなら
数学の知識使って特殊な動きをする弾幕作られてみては(ノ▽`)ノ
>得意料理はローストビーフとかビーフシチューとか!Σ( ̄□ ̄;)
www
私が得意な料理はから揚げの香味ソースですね〜♪
大学の学食の香味ソースがホントオイシイんで、真似して作ってるうちに得意料理になりました^^
(((そういえばKEVが香味ソース好きだった
>3次元の座標ってどうやって表現するんでしょうね^^;
>2次元は表記で来ても3次元は文字に置き換えられないような。
2次元を文字に置き換えるとはどういうことでしょう?
数学がお得意ならベクトルとかで出てくると思いますが、普通に3次元はx,y,zで表しますよ。
計算には高3位で習う行列計算がいやというほど出てきます。
3Dアクションはかなり難しいと思います。
独学のみで一人で本格3Dアクションを作っている人は日本中探してもそんなにいないと思います。
(「そんなに」の解釈によって語弊があるかもしれませんが)
販売したり、分担してサークル活動で取り組んだり、仕事だったりしてる人は沢山いるでしょうけどね。
>3Dでもバイオハザードはほぼ2次元でできてる?壁判定とか^^;
いや、そんな事は無いでしょう・・。
>この掲示板、荒れることが無いのがものすごく不思議です。
>どうやってこのような状況を維持できるのでしょうか?教えてください。
ここに来てくださっている方がとても良い方ばかりだという事が最も大きな要因です。
そして、元々私がこのサイトを作ったのは、掲示板で昔いやな思い出があり、
初心者でも叩かれない、暖かい掲示板が作りたいなと思って作り始めたので、
皆さんにその思いを伝える事が出来たということもあるかもしれません。
どうやって維持するのか・・・ですが、
規約を充実させて、もし違反者がいる時はそれを示して理解を促すようにすれば説得力が出来、
管理や運営もしやすいんじゃないでしょうか。
酷い中傷カキコとかがあったことは一度も無いですが、
普段からそういう雰囲気を作らなければ荒らしも来ないんじゃないでしょうか?
それから、おかしな訪問者がいた時には、こちらが腹を立てないことです。
荒らししに来た人ではなくても、話してるうちに少しでも嫌味を言われたら荒らしに豹変する人も
いると思います。
そこは優しく対応し、理解を促すようにしています。
しかし、ここの管理人である以上、規約違反をしている人をいつまでも優しく見守る事は出来ないので、
どうしても自分の行動を改めない人がいたら注意をする事はあります。
以前常連の方に
http://www.play21.jp/board/formz.cgi?action=res&resno=17467&page=&id=dixq&lognum=56
こんなトピを作っていただいたことがありますし、こういう機会を通じて、
私の思いが回答者の皆様にお伝えできているのではないかと思っています。
掲示板の常連者の方々が皆同じ思いでいてくだされば、
一人だけ違う行動をしている人がいても浮くだけだと思います。
とりあえず、ここの掲示板がこうして暖かい掲示板であり続けられるのは皆様のおかげです。
本当に感謝しています。
>コンソール画面?コンパイラの事でしょうか?
C言語を勉強する時はまず、真っ黒の画面にprintfで出力するところから始まると思います。
その黒い画面です。
マンドプロンプトとかDos画面とかも言います。
>#include<stdio.h>
>#include<stdlib.h>
>#include<time.h>
>とありますが意味がぜんぜんわかりません><
stdio.hはわかりますよね?
C言語を勉強して一番最初に習うのがhellow worldだと思いますが、
そこにも上にかいてあるかと思います。
これは標準関数のインクルードで、使いたい関数を使えるようにするものです。
time.hをインクルードすると、時間に関する関数が使えるようになります。
stdlib.hは乱数を使う為にインクルードしています。
乱数は初期化しないといつも同じ値が出てしまうためです。
サンプルでは時間で初期化しています。
標準関数についてはわかりますか?
strcpyとかって使えるでしょうか?
>char str[3][7]={{"グー"},{"チョキ"},{"パー"}};
これは文字列を代入しています。
str[0]がグーで
str[1]がチョキで
str[2]がパーです。
一次元配列ならわかりますか?
char st[10]="わかる?";
とかいてあればわかりますか?
>KEV
>管理人Dixq氏の努力があってこそなんでしょう。
ケブちんにDixq氏とか言われると抵抗がある・・w
906ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..入門者(3,152ポイント)
Date: 2008/07/31(木) 00:35
No:19242
|
|
Title: Re:始めまして
|
|
はにゃ〜〜〜(=´∇`=)
スレッド長いですね〜(oつ゜∀`o)
特にあらゆる掲示板にコピペはいけないと言う部分はよくわかります。
以前私の掲示板で、この絵を改善してほしいと言う依頼がありました。
がんばって個性を残したままラインの太さやバランスを微調整。バック
までつけて送ったんですが、一切応答なし。投稿者名を検索したらいろんな
サイトにコピペしてたんですよね;しかもその絵が流出して私が文句言われました
何でって感じです^^;
ソースの事ですがやっと理解できました。DirectXを最初に言われたのでなぜかDirectXに関連付けて
一人で「なんで?」って思ってました。やっぱり頭が固いのが問題ですかね^^;
私は、ココで初めてC言語と言うものを知ったのでDirectX以外の物はほとんど知識がなくて^^;
ループとか乱数とか文字の描画とかのint main(void){以降のソースしか見たことなかったです;
真剣にソースを見て見るとPNGファイルの描画と音楽が出てきますね。がんばって作らないと・・・・
DirectXのソースまで書いていただき感謝です。音楽の再生方法まで書かれているし^^
関数全部の説明が(´д`、)ウウウ ほんとにこんな優しい人に会ったことが無いです。
これでC言語をやめるわけには行かなくなりました。どうやっても管理人様にテクテクピクミン
遊んでほしいから〜^^
3Dアクションと言うよりただ単にピクミンの続編が作りたいと言うのが本音です。(任天堂様に怒られそう;)
なぜかチビロボとかファミコンウォーズに製作転換してしまったんですよね><
行列計算?3年後にそんな事習うんですね〜。中高一貫でよかった^^;
ネットで調べて先に勉強しとくのもいいかもですね。
今回は何から何までありがとうございました。
これからも優しく、元気な管理人様でいてくださいね〜^^
管理人様に I love me (゜ロ゜) え!!!!
540ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(652,486ポイント)
Date: 2008/07/31(木) 05:43
No:19246
|
|
Title: Re:始めまして
|
|
マルチスレッドは質問してる側からするとあまり悪いことには思わないんですよね〜。
回答者の側になってみると何が悪いのか初めてわかりますよね。
自分が親切に答えていても、他の掲示板で既に解決してたりしたら・・、
しかもそれが宿題の答え目当ての質問だったりすると特にガッカリ・・。
>DirectXを最初に言われたのでなぜかDirectXに関連付けて一人で「なんで?」って思ってました。
あれ?誰かにDirectXのこと何か言われました?
しかしコンソール画面でプログラムを組んだことが無いのですか・・。
DXライブラリはC言語歴1ヶ月でも出来るとは書いていますが、
全くなしからだと少し辛いのではないかと思います・・。
インクルードの意味、配列、条件分岐、基本構文、関数の自作、ポインタや構造体などは最低限理解しないと
ちゃんとしたゲームは作れないと思います。
目指すところが3Dアクションだったりと志も高いので余計に基礎からきっちりやっていかないと
途中で無理が来ると思いますので、
もうちょっと着実にまずは基礎を固めてみてはどうでしょうか?
まぁDXライブラリを使いながらCを覚える事ももちろん出来ますから、
こっちの方が自分のスタンスにあってる!ともしお感じでしたらそれでもいいと思いますが。
あと、コンパイル環境は何ですか?
341ポイント を手に入れた。
|
|
|
|
|
Name: KEV ..かけだし(1,458ポイント)
Date: 2008/07/31(木) 10:15
No:19249
|
|
Title: Re:始めまして
|
|
>3次元の座標ってどうやって表現するんでしょうね^^;
>2次元は表記で来ても3次元は文字に置き換えられないような。
2次元で座標を文字で表現〜というのは
もしかしたらゲーム中で'0'と'1'でマップを表現したことをいっているのかも?
2次元にしろ3次元にしろ、xy(z)平面にて座標を表現するのは変わりません。
けれど、たとえば3次元なんかはデータ量が膨大になり、
そのままするとすさまじく処理が遅くなったりします。
なので、最近出ている3D描写ソフトなんかは処理を軽くする工夫がしてあるはずです。
3Dを使ってゲームを作るなら専門書を買って読むことをお勧めしますよ。
>>管理人Dixq氏の努力があってこそなんでしょう。
>ケブちんにDixq氏とか言われると抵抗がある・・w
呼び捨てだと気になる人もいるかと思って、一応ねw
Dixqは大学の同級生だったりします。
他にも書きたいことがあるけれど、
仕事の休憩時間が終わっちゃったので途中で失礼します。後で書こう…
243ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..入門者(4,225ポイント)
Date: 2008/07/31(木) 12:26
No:19258
|
|
Title: Re:始めまして
|
|
え、大学の同級生!!!!!(@_@)
いや〜まさかそんな・・・・・○×□△☆
KEVさん言う通り2次元の話は0と1で表記されている2次元配列です。
3D描画ソフトっていろいろ出ていますがほとんどフリー素材です;
親が持ってるMetasequoiaLE R2.4ぐらいですかね。
あとはRIOSとかMicrosoftのフリーのやつとかでがんばってみようかと思っています。
3Dの専門書は難しいのと描画ソフトが一致しているのがあればいいのですが;
良書があれば教えてください。
管理人様、
いつ寝てるんでしょう。1:06 5:43 間隔がこんなに短いのが信じられません。超人なんですか?
DirectXの話なんですがC言語=DirectXライブライと言う観念がどこからともなくやってきて頭に定着。
というより、最初にゲーム館を訪れたのがキッカケなので頭にそれ以外の事が入ってなかったのか
もしれませんね。
ログなんかを探ってC言語を勉強できるサイトを見つけたのでそこでも勉強してきます。
基礎は重要ですもんね^^
配列、条件分岐、基本構文、構造体は死ぬほど説明文を読んで何とか理解できました。
RPGの場合、構造体なしではキャラクターのHP・MP管理、不可能ですもんね^^;;
今、勉強中なのはポインタです。関数の自作はメイン関数の内容の自作と言うことですよね?
それとも他に何かあるのかな?
そうそう、プログラムを作るときの中心はメイン関数ですよね?
例としてテクテクピクミンを作る場合に選択枠の移動と自機、敵機の移動の計算はメイン関数を
を2つ使って分けたほうがいいのでしょうか?それともメイン関数の中にメイン関数を入れればいいのかな?
どちらが作りやすく、見やすいソースになるのでしょう?呆然とした質問ですみません。
コンバイルの環境を最初に明記するの忘れていました。
Microsoftが出してるC++2008です。OSはvista。メモリは446MB。CPUは4CPU 3GHz。
32ビットオペレーティング。DirectXのバージョンは10。ビデオカードはVIA Chrome9 HC IGP かな?
これぐらいでいいでしょうか?
一番の問題はメモリですが、これから徐々に増設したいと思っています。その前にお金が必要なのですが;
サバの負担がかかるんですよねZIPファイル載せていると・・・・申し訳ないです;
わざわざじゃんけんゲームを作っていただいてありがとうございました。助かりました。
バックアップも取らせていただいたので消しても大丈夫ですよ^^
これでif文などの実用性や、大体の流れがわかったと思います。管理人様のゲームソースを
見ていると今までやった事のあるゲームの構造が面白いように見えてきます。
よし、できるだけがんばってマップとキャラクター移動まで作れるように試行錯誤して見ます。
1,073ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(652,637ポイント)
Date: 2008/07/31(木) 16:12
No:19266
|
|
Title: Re:始めまして
|
|
>たかぎさん
う、眠くて何かいてるのか解らなくなってたようです^^;
ご指摘ありがとうございますm(_ _)m
>ROLさん
寝てるのはだいたい午前8:00〜午前11:00位でしょうか。
やっと忙しい論文〆切が済んだ所なのに先生のOKが貰えず、
またやり直しなんで、また忙しくなります・・orz
>DirectXの件
うちのゲームの館で紹介しているライブラリはDXライブラリといって、DirectXではないんです。
DXライブラリの中身はDirectXなんですが、DirectXを勉強しているんだ、というと間違いです。
DirectXはC歴0日から始められるライブラリではないと思います・・(_ _;)
C言語の参考サイトは「C言語 入門」でググると沢山出てくるのでオススメです。
最近は参考書を買わなくても十分勉強できますし、充実してますよね。
>選択枠の移動と自機、敵機の移動の計算はメイン関数をを2つ使って分けたほうが
>いいのでしょうか?それともメイン関数の中にメイン関数を入れればいいのかな?
メイン関数の中にメイン関数?
先ほど私が計算や、描画などにきっちりわけたサンプルをお見せしたと思いますが、
そうではない何か方法を考えていらっしゃるのでしょうか?
最も私のサンプルが一番いい方法ではないと思いますし、
ご自分なりに作っていただければいいと思いますが、
メイン関数の中にメイン関数は作れません。
メイン関数は一つしかありません。
恐らくC言語の基本を上記のようなサイトで勉強されたらこの疑問も晴れるのではないかと思います。
このような疑問を無くしていただこうとサンプルを作った次第ですので、
その辺は読んで参考にしていただければと思います。
ポインタ辺りはまぁ後回しでもいいと思いますが、
とりあえず関数の自作までは勉強してから作った方が効率がいいと思います。例えば
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
ここでいうなら、1,2,3,4,7章は熟読し、自分でコンパイルしながら勉強し、
身につけて下さい。
では勉強・製作頑張って下さいm(_ _)m
151ポイント を手に入れた。
|
|
|
|
|
Name: BCI-3e ..中級者(10,947ポイント)
Date: 2008/07/31(木) 17:38
No:19280
| 解決!
|
Title: Re:始めまして
|
|
あ・・・・・私は何を寝ぼけているのでしょう?
メイン関数の中にプログラムを収めるのが普通なのに^^;
関数の自作と言うのはvoidの後部分ですよね。違うにしても、もう一度
勉強しなおしてきます。
追伸
とにかく無理はしないでくださいね。
管理人様のような優しい方に倒れられたら世界が滅びます(苦笑
論文を出すと言うことは大学生なんですね^^
私も大学に行けるようにがんばって勉強してC言語の力も管理人様に
追いつけるように努力します。
ではでは、論文、アルバイト、ゲーム製作など多忙でしょうけれど
がんばってください。私は今から徹夜でC言語と格闘してきます。
146ポイント を手に入れた。
|
|
|
|
|
Name: KEV ..かけだし(2,098ポイント)
Date: 2008/07/31(木) 18:10
No:19284
|
|
Title: Re:始めまして
|
|
>ROLさん
楽しく学べているようで何よりです。
>KEVさんは去年、プログラマーになったんですよね?
私がプログラムに始めて触れたのは大学1年生です。
情報系のとこにいたんですが、
学生のときはプログラムが全然書けませんでした。
多分宿題が出ても難しかったらコピペしてからでしょうね…。昔の自分を蹴りたいですね。
で、なんだかんだで就職したんですが、配属先がソフトウェア開発課になって
プログラミングを一人でやらざるを得ない状況にり、
そこからやっとマジメにやり始めました。
何でもそうですが、何かを学ぶには動機がしっかりしていることが大事かと。
>3Dの専門書は難しいのと描画ソフトが一致しているのがあればいいのですが;
>良書があれば教えてください。
あまり良書とか詳しくないのですが、
描画ソフト名でググってみたりAmazonで探したりしてみてはいかがでしょうか。
それで、気になった本があればその場で買わずに、
大きめの本屋で一度探して立ち読みしてみるといいです。
やっぱり自分で一度見て納得したものを買うほうがいいと思います。
あと、ネットの普及で簡単に情報が手に入る世の中ですけど、
個人的にはやっぱり本は買うべき(身銭は切るべき)だと思います。
「この本を買わなかったらチキン香味ソースが食堂で食べれたのに…!」とか思うと
もったいなくて本を読まざるを得なくなります。
私は3D関連でいうとOpenGLを使っています。
ゲーム作り…じゃなくて実は仕事で使用してたり。
640ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(656,512ポイント)
Date: 2008/08/01(金) 04:22
No:19313
|
|
Title: Re:始めまして
|
|
>>ROLさん
お名前ROLさんでいいのでしょうか?
>大学生なんですね
一応大学6年生です。
いやはや小1>小6と同じだけ大学にいたとは信じられない気がします・・。
「始めまして」という題名は誤字だと思って「初めまして」に修正しておいたんですが、
後から調べてみるとこれどっちでもいいんですね・・。
元に戻しておきましたm(_ _)m
>>KEVちん
笑うww
いや〜あそこのチキン香味ソースは神デスネb
卒業するまでに悔いの無いように食っておこう♪
161ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..ぴよぴよ(430ポイント)
Date: 2008/08/01(金) 13:00
No:19321
|
|
Title: Re:始めまして
|
|
あれれ、昨日の夜に投稿してから寝たのに。載ってませんね^^;
>あら、ROLさんはBCI-3eさんだったんですか?
私は、ちゃんとROLと名前の欄に入力したのですがバグなのでしょうか?
開示版機能の「名前などを保存する」が使えないようなので毎回ROLと入力しています。
KEVさん、
楽しく勉強していますよ〜^^
大学生のとき、初めて触れたプログラミング。その道に進もうと決めたKEVさんが
とても輝いて見えます。カッコイイ^^
良書は、本屋さんに聞くのが一番ですよね。
あるいは、立ち読みで少しずつ内容を頭に入れて盗むのもいいかも(冗談;)
とりあえずは、2Dゲームが作れるようにがんばって行こうと思います。
いろいろ教えていただきありがとうございました。
管理人様、
>お名前ROLさんでいいのでしょうか?
私がゲーム製作に興味を持ってココまで来れたのはThe Ruins Of The Lost Kingdom
通称ROLと言うフリーゲームのおかげです。灯という3人グループが作っている3Dアクションです。
アドレス記載しておきますのでダウンロードして遊んで見てください。感動しますよ。
http://www.tomoshibi.net/main.html (灯のメインページ)
http://www.tomoshibi.net//guide/rol.html (ROLのダウンロードページ)
無許可でROLと言う名前を使っているのですが、少しでも宣伝になればと;
なので、私はこの掲示板でROLと言う名前以外、使う気はありません。
名前が違うのは何かのミスでしょう。
管理人様は大学生なのですね〜
私も大学は8年ぐらいいてもいいと思います。
たぶんそれだけいても、必要な知識がまだ残っていてもったいないような気もしますが。
誤字の訂正、ありがとうございます。語学上はどちらでもいいみたいなのですが、世間
一般では「始めまして」ですよね。以後気おつけたいと思います。
チキン香味ソース・・・・・・・どうしても食べて見たいです。
どこの大学か教えてください。食べに行きます。( ̄¬ ̄) ジュル・・・
卒業する前に、厨房のソース調合表でもコピってもらってください。できればですが;
できなければ、私が学食のおばちゃんにしがみついてでも教えてもらいに行きます(笑
と言うわけで、今日も一日C言語とにらめっこしたいと思います。^^ノシ
430ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(656,534ポイント)
Date: 2008/08/01(金) 16:50
No:19334
|
|
Title: Re:始めまして
|
|
>バグなのでしょうか?
以前にBCI-3eさんのお名前で投稿されてるので、クッキーに残ってたのでしょう。
BCI-3eさんは以前からおこしいただいていると思いますが、
「始めまして」ということで新しい名前で投稿されたのは何故なのでしょう?
もし同じ方ならお名前はどちらかに統一していただけるとありがたいです。
146ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..入門者(4,732ポイント)
Date: 2008/08/01(金) 20:33
No:19335
|
|
Title: Re:始めまして
|
|
あ、そっか・・・・・・・
私は、昼間に学校からこの掲示板を見ていることがあります。
私の学校にもミュージシャン的プログラマーがいます。
最近ではC言語の話をきっかけにおしゃべりするようになったのですがその方に教わって
この掲示板に来れたんです。ですが学校のパソコン。
いろいろソフトを入れたら怒られるんですよね。なので図書館の一番端、一台だけにコン
パイラをインストールする許可をもらい、学校にいるときはそこでプログラムの考えなど
をその方に教わったりしています。掲示板などもそこで見るのでたまたまクッキー保存さ
れていたんですかね?ちょっと確認のメールを送って見ます。もしその方がBCI−3eさんならば
筋道が通りますもんね?それに、なぜか親近感が沸きますし。
>以前にBCI-3eさんのお名前で投稿されてるので、クッキーに残ってたのでしょう。
>BCI-3eさんは以前からおこしいただいていると思いますが、
>「始めまして」ということで新しい名前で投稿されたのは何故なのでしょう?
>お名前はどちらかに統一していただけるとありがたいです。
これって警告なのでしょうか?でしたら、私に警告されても^^;
統一って、、、、、、二人の人間がばらばらの質問する事になっちゃいませんか?
私がBCI-3eさんの名前で投稿してカリスマ(その方のあだ名)がBCI-3eさんで答え
たら知らない人はものすごく混乱すると思います。;;;;その辺理解していただ
きたいんですが、無理でしょうか?
507ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..入門者(4,810ポイント)
Date: 2008/08/01(金) 20:43
No:19336
|
|
Title: Re:始めまして
|
|
やはり、カリスマが、BCI-3eさんでした。お騒がせしてごめんなさい。
唯一証明できるとすれば、学生証明書を送る事ぐらいですかね^^;
それでも信じていただけ無いのであればどうしようもないです(πーπ)
78ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(656,488ポイント)
Date: 2008/08/01(金) 22:33
No:19340
|
|
Title: Re:始めまして
|
|
いえいえ、何か嘘を仰っているとかそういうことではありません。
19280の投稿を見るとBCI-3eさんのお名前で回答がありましたので、
同じ方なのかと思ったのです。
もしかしたらROLさんが知らない間にBCI-3eさんのお名前で投稿されていたのかもしれません。
19280の投稿で何か誤解が生まれている可能性があるので、一度ご確認下さい。
つまりBCI-3eさんとROLさんは学校のお友達で、同じPCから投稿されていたということですね。
わかりました。
また、お名前はもちろんそのままお使い下さい。
144ポイント を落としてしまった。
|
|
|
|
|