|
Name: sood ..かけだし(1,040ポイント)
Date: 2009/04/16(木) 22:28
No:32349
|
|
Title: 弾の誘導について
|
|
敵から出す弾を
ある程度まっすぐ進んでから自キャラに方向転換(直角に誘導)
または曲がるように向きをけるにはどうしたらいいんですか?(よくあるゲームの誘導ミサイル)
自キャラに向かって弾を出すソースはコチラを使ってます。。
定義してる関数とか変数とかわからないと思いますが・・・
void ShootBullet07(Point2D pos){
for(int i=0; i<MAXBULLET; i++){
if (g_ebullets[i].used == FALSE ){
//敵から自キャラ方向へのベクトルを求めて正規化
Vector dist = SubVector(g_jikipos, pos);
dist = Normalize(dist);
dist.x *= E07BEAMSPEED;
dist.y *= E07BEAMSPEED;
g_ebullets[i].used = TRUE;
g_ebullets[i].bpos.position = pos;
g_ebullets[i].bpos.hankei = 24;
g_ebullets[i].distance = dist;
break;
}
}
}
357ポイント を手に入れた。
|
|
|
|
Name: あ〜る ..初心者(5,668ポイント)
Date: 2009/04/17(金) 08:09
No:32365
|
|
Title: Re:弾の誘導について
|
|
ソースを書いてないんで何とも言えないんですが、恐らく考え方的には
まず敵の情報の中にカウンタを用意し、敵が出現してから死ぬまで1フレームごとに1加算します
そうして敵が出現してから、若しくは敵が弾を撃ち始めてから何フレーム目で、敵の弾の情報を書き換えればいいんじゃないでしょうか?
ソースに書いてみてないんで間違ってるかも知れないですが、考え方的には多分これで実装できると思います
157ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..初心者(5,798ポイント)
Date: 2009/04/17(金) 17:42
No:32372
|
|
Title: Re:弾の誘導について
|
|
因みに毎フレーム…だとちょっと多いですが3〜4フレーム毎に自機への角度を入れ直したりすると、常に追い掛け続ける恐怖の誘導弾が出来たりします
カウンタを使えば弾速を変えたり突然止めたりとか簡単にできるはずです
こういう弾幕のネタは、このサイトとか、あとは本屋さんに置いてあるシューティングのアルゴリズムの本でも立ち読みすれば色々わかりますよ(^^)
130ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..初心者(5,859ポイント)
Date: 2009/04/17(金) 18:39
No:32375
|
|
Title: Re:弾の誘導について
|
|
あ、それ僕買いました(無論高校の入学祝いですが(笑))
初心者の僕にはちょっとソースが難解でしたが色々あって良かったですよ
東方みたいな変な弾幕じゃなくて基本的な動きの弾幕の作り方がのってるんで(洗濯機とか)結構オススメです
61ポイント を手に入れた。
|
|
|
|
Name: やまねこ ..ぴよぴよ(46ポイント)
Date: 2009/04/17(金) 04:09
No:32361
|
|
Title: ヘッダに関して
|
|
初歩的な質問ですいません
自分で作成したヘッダファイルは呼び出すときに<>ではなくて" "で呼び出さないといけないのでしょうか?
VC++ Express Editionです
46ポイント を手に入れた。
|
|
|
|
Name: MNS ..初心者(5,278ポイント)
Date: 2009/04/17(金) 05:52
No:32362
|
|
Title: Re:ヘッダに関して
|
|
標準ヘッダは<>で呼び出します
(標準ヘッダとは、C,C++に最初から用意されているヘッダです)
例えば、入出力を行う stdio.h は標準ヘッダです。
なので、#include <stdio.h> と呼び出します。
他、自分が作ったヘッダや、標準ヘッダではないヘッダは""で呼び出します。
DXライブラリなどは、自作のヘッダですので、
#include "DxLib.h" という形で呼び出します。
80ポイント を手に入れた。
|
|
|
|
|
Name: やまねこ ..ぴよぴよ(73ポイント)
Date: 2009/04/17(金) 06:02
No:32363
| 解決!
|
Title: Re:ヘッダに関して
|
|
助かりました
ずっとコンパイルできずにすごい困ってました
ありがとうございました〜
27ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(47,954ポイント)
Date: 2009/04/15(水) 22:39
No:32289
|
|
Title: Re:5章がよくわからないんですが…
|
|
「main.cpp」「graph.cpp」「load.cpp」のそれぞれにグローバル変数が宣言されていると思います。
その宣言を削除するといいです。
またexternで宣言されている部分もありますが、(正確には宣言ではないですが)
その箇所も同様に削除します。
同様に関数宣言も削除すればOKです。
具体的には、
main.cpp
//現在のキー入力処理を行う
extern int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
extern int CheckStateKey(unsigned char Handle);
//データのロード
extern void load();
//描画メイン
extern void graph_main();
int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
ch_t ch; //キャラクタデータ宣言
graph.cpp
extern ch_t ch;
extern int img_ch[2][12];
load.cpp
extern int img_ch[2][12];
ですね。
180ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(138,978ポイント)
Date: 2009/04/15(水) 23:03
No:32295
|
|
Title: Re:5章がよくわからないんですが…
|
|
> またexternで宣言されている部分もありますが、(正確には宣言ではないですが)
externは、「どこか別のファイルで定義してある変数をここで使います」という
「宣言」ではないのでしょうか。
変数の、
実体確保を伴うのが「定義」、
実体確保を伴わないのが「宣言」、
と理解していましたが、間違えているでしょうか。
14ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(48,051ポイント)
Date: 2009/04/16(木) 00:38
No:32303
|
|
Title: Re:5章がよくわからないんですが…
|
|
>>externは、「どこか別のファイルで定義してある変数をここで使います」という
>>「宣言」ではないのでしょうか。
少し前に別の掲示板で
externは別ファイルに定義してるから宣言ではない
と思いっきりたたかれたことがあったので、「宣言」とは別物という認識したのですが^^;
(↑あまりにもひどかったので正直へこみました)
実際のことろはどうなんでしょうか?
97ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(30,731ポイント)
Date: 2009/04/16(木) 14:42
No:32319
|
|
Title: Re:5章がよくわからないんですが…
|
|
自信はないですが
int A;
が変数の宣言および定義で
extern int A;
は変数の宣言のみだと思います
37ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(139,070ポイント)
Date: 2009/04/16(木) 23:00
No:32354
|
|
Title: Re:5章がよくわからないんですが…
|
|
>toyoさん
定義と宣言とを兼ねるということはないと思います。たぶん。おそらく。
変数については、定義するか宣言するかのいずれか一方だけが
できるのではないでしょうか。
2倍のポイントを手に入れた! 92ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..上級者(22,899ポイント)
Date: 2009/04/17(金) 00:50
No:32358
|
|
Title: Re:5章がよくわからないんですが…
|
|
> 定義と宣言とを兼ねるということはないと思います。たぶん。おそらく。
定義されたものは同時に宣言されています。
逆は成り立ちません。
toyoさんの言うとおり、変数宣言のみの記述を実現するにはexternを使用します。
実際には内部結合と外部結合の違いやCとC++でのグローバルオブジェクトの結合性とも関連するので、語弊があるかも知れません。
115ポイント を手に入れた。
|
|
|
|
Name: とりsan ..ぴよぴよ(210ポイント)
Date: 2009/04/16(木) 12:15
No:32316
|
|
Title: 時間
|
|
DXライブラリを使って、今シューティングを作っています。
n秒後にスクロールの移動量を変えたいのですが、どうもtimeGetTime関数でうまくいきません。
ご教授お願いいたします。
void BGI_scroll(){
int nowTime,beforeTime;
nowTime = GetNowCount(); //現在時間を取得
//横スクロール
rollX = (rollX - 3) % 640; //0〜680を繰り返す
DrawGraph(rollX+640, 0, backImg, true);
DrawGraph(rollX, 0, backImg, true);
if(スクロールを変える条件){
if(時間の差分 > n秒後){
rollX = スクロールを変える値;
}
}
な感じで書いています。
210ポイント を手に入れた。
|
|
|
|
Name: s-rush ..熟練のプログラマー(48,235ポイント)
Date: 2009/04/16(木) 12:34
No:32317
|
|
Title: Re:時間
|
|
GetNowCountはWindowsが起動してからの経過時間ですね。
なので、上記のプログラムだと、意図した時間を得ることができません。
時間の差分は
GetNowCount() - nowTime
で求めることができますよ。
したがって、2つ目のif文は
if( GetNowCount()-nowTime > n*1000 )
という感じでいいのではないですか??
1つ目のif文の条件は分からないのでスルー^^;
2倍のポイントを手に入れた! 184ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..比類無きプログラマー(81,730ポイント)
Date: 2009/04/16(木) 19:10
No:32337
|
|
Title: Re:時間
|
|
>GetNowCount()-nowTime
関数の呼び出し方、仕様がわからないので何とも言えませんが、
関数に入ったときからの差の時間ではないような気がします・・・。(あくまで予想です)
n秒後とはいつからのn秒後ですか?
あるイベントが起きてからn秒後なのか、
アプリ起動時からn秒後なのか、それこそ、Windowsが起動してからn秒後なのか・・・
そのあたりを明らかにする必要がある気がするのですが・・・?
111ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(48,497ポイント)
Date: 2009/04/16(木) 22:28
No:32351
|
|
Title: Re:時間
|
|
>>関数の呼び出し方、仕様がわからないので何とも言えませんが、
>>関数に入ったときからの差の時間ではないような気がします・・・。
単純に時間の差分を求めるという意味で回答したのですが^^;
確かにkazuoniさんのおっしゃる通り、仕様が不十分ですので何とも言えませんでしたね。
ただ、Windowsが起動してから、あるいはアプリが起動してからn秒後っていうのは
少し考えづらいです。(このような条件のSTGは見たことないです)
ステージが始まってからn秒後であるなら、
ステージの開始直後に
nowTime = GetNowCount();
を実行し、
if( GetNowCount()-nowTime > n*1000 )
で条件分岐をしてあげればいいと思います。
262ポイント を手に入れた。
|
|
|
|
Name: ひで ..かけだし(1,919ポイント)
Date: 2009/04/15(水) 14:26
No:32260
|
|
Title: 無題
|
|
暗号のプログラムを作っています。
かなり昔に使われていた暗号でいまはまったく使われていない暗号ですが
自分で作ってみたくてはじめした。
しかしいざ作ってみるとエラーだらけで・・・ww
コンパイルは成功なのですが実行で問題が発生して終了してしまいます。;;
どこがおかしいのでしょうか?
int main(void)
{
char a[1000];
scanf("%s",a);
printf("%s",apri_angou(a);
return 0;
}
int apri_angou(char *c)
{
char pc_form[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','aa','ab'};
int u_f=0;
int p_f=0;
int p_a=0;
char pc_answer[1000];
while(u_f != 1000)
{
while(c[u_f] != pc_form[p_f])
{
p_f++;
}
p_f = p_f +2;
pc_answer[p_a] = pc_form[p_f];
p_a++;
p_f = 0;
u_f++;
}
return *pc_answer;
}
includeはわざと書いてません。
318ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(80,532ポイント)
Date: 2009/04/15(水) 14:45
No:32261
|
|
Title: Re:無題
|
|
(上のコードで本当にコンパイルは通ったのでしょうか?)
コードを見たところ、以下のような問題があります。
・構文的な理由でコンパイルが通らない(printf に閉じ括弧が無い)
・pc_form[] 配列の最後の二つが不正(コンパイルは通るが、先頭の文字だけ使われる)
・apri_angou に渡される文字列 c に対し、不定状態の場所(入力した文字列以降の余った領域)も暗号化している
・a〜z以外の文字の検索でバッファオーバーフローする(pc_form[] 配列の範囲内で文字が一致しないため)
・printf で暗号化した文字列を出力しようしているが、apri_angou の戻り値は int で文字列ではない
・(文字列を返す場合)pc_answer はローカル変数なのでそのままでは返せない& NULL 終端文字が無い
208ポイント を手に入れた。
|
|
|
|
|
Name: TSP ..ぴよぴよ(3ポイント)
Date: 2009/04/15(水) 18:35
No:32264
|
|
Title: Re:無題
|
|
include を書かない理由がわかりません。
たかだか2〜3行を書く手間を省く意味が本当にあるのでしょうか?
3ポイント を手に入れた。
|
|
|
|
|
Name: ひで ..かけだし(2,001ポイント)
Date: 2009/04/16(木) 06:35
No:32310
|
|
Title: Re:無題
|
|
printfの')'はここでの入力ミスでソースにはしっかり入力されています。
その他はこれでコンパイルできました。・・・・
それなのに実行できません。
どこをどうすれば実行されるのでしょうか?
82ポイント を手に入れた。
|
|
|
|
|
Name: ひで ..かけだし(2,110ポイント)
Date: 2009/04/16(木) 16:16
No:32320
|
|
Title: Re:無題
|
|
とりあえず>>2さんの項目を見て自分のわかる範囲で修正してみましたが、これ以上わかりませんでした・・・
ソースファイルを載せたので申し訳ないのですが一回見てもらって間違ってるところを教えて頂けないでしょうか?・・・・
109ポイント を手に入れた。
|
|
|
|
|
Name: non ..熟練のプログラマー(40,016ポイント)
Date: 2009/04/16(木) 17:25
No:32325
|
|
Title: Re:無題
|
|
御津凪さんの補足をします。
>・apri_angou に渡される文字列 c に対し、不定状態の場所(入力した文字列以降の余った領域)も暗号化している
while(c[u_f] != '\0')のように文字列の最後には'\0'があるので活用します。
>・a〜z以外の文字の検索でバッファオーバーフローする(pc_form[] 配列の範囲内で文字が一致しないため)
万が一入力してはいけない文字がないかチェックしておかないと
while(c[u_f] != pc_form[p_f])で抜けなくなっちゃいます。
絶対にa-z以外は入力しないのなら、とりあえずはこのままで。
>・printf で暗号化した文字列を出力しようしているが、apri_angou の戻り値は int で文字列ではない
char * apri_angou(char *c)にしなくてはいけません。
ついでに
return pc_answer;ですね。
>・(文字列を返す場合)pc_answer はローカル変数なのでそのままでは返せない& NULL 終端文字が無い
方法はいろいろありますが、一番簡単な方法として、
char pc_answer[1000];を関数の外に出してみたらどうでしょうか?
また、NULL終端文字の件は
pc_answer[p_a]='\0';をreturnする前に行います。
323ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(30,574ポイント)
Date: 2009/04/16(木) 17:36
No:32327
|
|
Title: Re:無題
|
|
いろいろやり方はありますが
int main(void)
{
char user_form[1000];
char pc_answer[1000];
//
user_form,apri_angou(user_form, pc_answer);
//
printf("入力された文字「%s」を暗号すると「%s」になります。\n",user_form, pc_answer);
//
}
void apri_angou(char *c, char *pc_answer)
{
//
}
のようにmain( )側で暗号用の配列を用意しておく方法もあります。
157ポイント を落としてしまった。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(80,898ポイント)
Date: 2009/04/16(木) 18:07
No:32329
|
|
Title: Re:無題
|
|
non さん補足ありがとうございます。
添付されたコードでは、こちらで指摘している箇所ほぼ全てが原因でプログラムが落ちていますので、
non さんの補足を元にとりあえずは直せるだけ直してください。
ちなみに、
添付されたコードを元にちゃんと動く実行可能ファイルを作ってみました。
ついでにコードでは未実装になっている、
さらに複雑化した暗号を勝手ながらに実装してみました。
(その他はいじってません)
ソースの方も同梱していますが、
そのままでは正解コードになってしまうので、暗号化してあります。
文字コードを128ずらしているだけなので、
20数行程度のコードでこの暗号化したファイルを暗号解除するプログラムが出来るはずです。
あと、こちらのコンパイル環境は MinGW (gcc version 3.4.5) です。
※ちなみにひでさんの添付コードは VC++ では正しくコンパイルできないはずなので
回答者の方に注意しておきます。
関数宣言がないのと、最後の方にある関数がおかしいためです。
(そういえばひでさんはコンパイル環境を提示していませんね。)
366ポイント を手に入れた。
|
|
|
|
|
Name: ひで ..かけだし(2,149ポイント)
Date: 2009/04/16(木) 18:21
No:32330
|
|
Title: Re:無題
|
|
えっと・・・・
とりあえず助言いただいたことについては大方理解することができました。
ありがとうございます。
ただ・・・nonさんがおっしゃった
char pc_answer[1000];を関数の外に出してみたらどうでしょうか?
が理解できないのですが・・・・・
関数の外に出すとはどういうことでしょうか?
なんか無知の私がC言語に手を出してみなさんに迷惑掛けてしまい大変申し訳ないです・・;;
18ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(81,611ポイント)
Date: 2009/04/16(木) 18:41
No:32332
|
|
Title: Re:無題
|
|
たとえば、
char* get_pc_answer1( void ){
char pc_answer[1000];
return pc_answer;
}
このコードの場合、 get_pc_answer1 関数の中に pc_answer があります。
この関数の中にある変数 pc_answer は「ローカル変数」と呼ばれ、
関数から抜けると消滅します。
つまり、上の関数ではローカル変数 pc_answer を返していますが、
pc_answer が消滅するため、不正な値が返されてしまいます。
char pc_answer[1000];
char* get_pc_answer2( void ){
return pc_answer;
}
このコードの場合、 get_pc_answer2 関数の外に pc_answer があります。
この関数の外にある変数 pc_answer は「グローバル変数」と呼ばれ、
プログラムが実行されている間、ずっと存在します。
つまり、上の関数ではグローバル変数 pc_answer を返していますが、
pc_answer が消滅することはないため、正しい値が返されます。
ただし、どの関数からも変更を加えられることが出来るため、注意が必要です。
ちなみに、
char* get_pc_answer3( void ){
static char pc_answer[1000];
return pc_answer;
}
このコードのように static (静的を意味する単語)をつけることにより、
グローバル変数と似たような性質を持つローカル変数にすることが出来ます。
これは、ローカル変数のように関数の中でのみ操作でき、
グローバル変数のように消滅することのない特徴を持っています。
そのため、正しく pc_answer を返すことが出来ます。
コンパイル環境が VC++ なら、警告が出るような気もしますが、
自分で定義した関数は、できるだけコードの最初の方(この場合は main 関数の前)に
関数宣言しておいたほうが良いでしょう。
# コンパイル環境に誤字があるのはスルーします。
713ポイント を手に入れた。
|
|
|
|
|
Name: non ..熟練のプログラマー(40,072ポイント)
Date: 2009/04/16(木) 18:41
No:32333
|
|
Title: Re:無題
|
|
>char pc_answer[1000];を関数の外に出してみたらどうでしょうか?
グローバル変数にしてみたら?という意味です。
29ポイント を落としてしまった。
|
|
|
|
|
Name: ひで ..かけだし(2,398ポイント)
Date: 2009/04/16(木) 19:14
No:32338
|
|
Title: Re:無題
|
|
で・・・できました@@
なんかすっごい迷惑掛けたみたいで大変申し訳ありませんでした;;
みなさんはこのぐらいのプログラムは簡単に作れるんでしょうね・・・・
未記入になってる"更に複雑な暗号"も今回教えていただいたものを参考に作っていこうと思います。
私もみなさんのようなプログラマーになれるようにもっと勉強に励みます。
これからも質問させていただくことがあるかもしれません(というより絶対)が、そのときはよろしくお願いします。
ホントに助かりました。
185ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(81,987ポイント)
Date: 2009/04/16(木) 19:31
No:32342
|
|
Title: Re:無題
|
|
解決したということなので、
とりあえず上の方で添付している、
ソースを暗号化したプログラムコードを記載しておきますね。
#include <stdio.h>
int main( int argc, char* argv[] ){
int result = -1;
FILE* in;
FILE* out;
int ch;
if(argc < 3) return -1;
in = fopen(argv[1], "rb");
out = fopen(argv[2], "wb");
if(!in || !out) goto end;
while((ch = fgetc(in)) != EOF){
fputc((unsigned char)ch + 128, out);
}
result = 0;
end:
if(in) fclose(in);
if(out) fclose(out);
return result;
}
実はこのプログラムは暗号化したファイルを渡すことで、復号化することも出来ます。
この暗号処理は1バイトデータに 128 を足しただけのものだから、
128 + 128 = 256 でオーバーフローして元に戻るというトリックです。
376ポイント を手に入れた。
|
|
|
|
Name: 初心者 ..プログラマー(32,005ポイント)
Date: 2009/04/16(木) 16:37
No:32322
|
|
Title: dat,includeフォルダについて
|
|
現在(2009年04月16日)、一括ダウンのZIPにdatフォルダとincludeフォルダが含まれていません。
何方か、入手できるページを教えてください。
27ポイント を手に入れた。
|
|
|
|
Name: Mist ..熟練のプログラマー(59,303ポイント)
Date: 2009/04/16(木) 17:03
No:32323
|
|
Title: Re:dat,includeフォルダについて
|
|
ダウンロードに失敗しているものと思います。
私がダウンロードしたファイルでは問題ありませんでした。
IEではよく失敗するそうなので、何度かリトライするかFireFox等の非IEブラウザを使われてはいかがでしょうか。
77ポイント を落としてしまった。
|
|
|
|
Name: い ..ぴよぴよ(10ポイント)
Date: 2009/04/16(木) 17:11
No:32324
|
|
Title: 入門変のことで質問です
|
|
DxLib_VC2008_and_2005用.slnを起動してもVC++が立ち上がらないのですが
どうしたらいいですか?
10ポイント を手に入れた。
|
|
|
Name: リク ..入門者(3,191ポイント)
Date: 2009/04/15(水) 23:02
No:32294
|
|
Title: 秒をカウント
|
|
こんにちは〜。
秒をカウントするプログラムを作りたいと考えています。
画面の表示等は全て理解しました。
あとはDXライブラリを使って、正確に1秒間をカウントして
画面に表示していきたいのですが・・・
1秒間を正確にカウントする方法が分かりません。
DXライブラリで1秒間を正確にカウントすることはできますか?
ちなみにC言語は理解しているつもりです。
お返事お待ちしております。
135ポイント を手に入れた。
|
|
|
|
Name: リク ..入門者(3,357ポイント)
Date: 2009/04/16(木) 11:19
No:32314
| 解決!
|
Title: Re:秒をカウント
|
|
お返事ありがとうございます。
リファレンスページを見たら
GetNowCount()を使ってやっているのがありました。
一応これで出来ると思うので頑張ってみます。
本当にありがとうございました。
2倍のポイントを手に入れた! 166ポイント を手に入れた。
|
|
|
|
Name: dic ..上級者(18,684ポイント)
Date: 2009/04/15(水) 22:16
No:32288
|
|
Title: 指定した座標から指定した座標の角度の求め方
|
|
// ---------------------------------------------------------------
// Name: GetForPlayerAngle
// Desc: 指定した座標からプレイヤーの角度を求めます
//
double GetForPlayerAngle( double x, double y )
{
double pi = 3.14159265358979323846264338327950288419716939937510;
double a, b, c;
// gX, gY プレイヤーの座標
a = gX - x;
b = gY - y;
c = (a+b);
double s = b/c;
static bool bFlag = false;
static vector<double> vAngle;
// テーブルの初期化
if( !bFlag ) {
for( double j=0; j<=pi*2; j+=pi/180 )
{
vAngle.push_back(j);
bFlag = true;
}
}
// 近似値を求める
double angle = 0;
// 実数値 s
int i;
for( i=0; i<vAngle.size(); i++ )
{
if( s<vAngle.at(i) ){
angle = i;
break;
}
}
HDC hdc = GetDC( hwndApp );
MoveToEx( hdc, x, y, NULL );
LineTo( hdc, gX, gY );
ReleaseDC( hwndApp, hdc );
return angle;
}
現在指定した座標x,yからプレイヤーの座標gX,gYへの角度の求める関数を作成中です
そこで三角関数を使い sinの実数値を求め、初期化したテーブルに一番近い値を
角度として判定するものを作っていますが
どうにもうまくいきません
MoveToEx関数などで座標が間違っていないかを描画し確認しているのですが
問題はないようなので どこかで計算が間違っているとかし思えません
おおよそ検討できる場所としては s の計算方法が間違っているとしか
もう検討の余地がないのですが、
上のソースコードのどこが間違っているかを指摘してもらえると助かります
734ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(342,027ポイント)
Date: 2009/04/16(木) 01:21
No:32305
|
|
Title: Re:指定した座標から指定した座標の角度の求め方
|
|
>おおよそ検討できる場所としては s の計算方法が間違っているとしか
>もう検討の余地がないのですが
何を基準にした角度なのか(真上? 真横?)、sが何を意味しているのか、さっぱりですが、
アプローチが根本的におかしいです。
仮に sがラジアンだとしても、sとラジアンテーブルを比較して近ければカウンタ値を
角度(degree)とする、という方法もかなり乱暴です。
きちんと計算で求めるべきです。
この手の角度の求め方は
シューティングゲームの館
ttp://dixq.net/s/17.html
龍神録プログラミングの館
ttp://dixq.net/rp/13.html
などにも参考になるコードが載っていますし、「ベクトル なす角度」とか
「角度 ラジアン 変換」で検索すればいろいろ出てきます。
あと、作るときはどこを基準(0度)ととし、どちらの方向を正の方向とするかも考えないといけません。
参考までに、たとえば始点と終点を結ぶベクトルと真上[0, -1]のなす角度を、時計回りで表した計算は
以下のようになります。
#include <math.h>
#include <float.h>
const double PI = 3.14159265358979323846;
double GetVectorAngle(double fromX, double fromY, double toX, double toY)
{
double dx = toX - fromX;
double dy = toY - fromY;
double len2 = (dx * dx) + (dy * dy);
if(len2 <= DBL_EPSILON)
return 0;
double ang = acos(dy * (-1.0 / sqrt(len2)));
return -dx <= 0? ang: -ang;
}
760ポイント を手に入れた。
|
|
|
|
|
Name: dic ..上級者(18,730ポイント)
Date: 2009/04/16(木) 04:37
No:32308
| 解決!
|
Title: Re:指定した座標から指定した座標の角度の求め方
|
|
よくわかりませんでしたが
自力でなんとか解決できました
Justyさん ありがとうございました
46ポイント を手に入れた。
|
|
|
|
|
Name: dic ..上級者(19,281ポイント)
Date: 2009/04/16(木) 04:47
No:32309
|
|
Title: Re:指定した座標から指定した座標の角度の求め方
|
|
ラジアン角度はなんとなく理解できたのですが
習っていないものでして・・・
以下 sinの実数値から近い角度を求めるようにしてできました
c = a + b; でなく
c = sqrt(a*a+b*b);でしたね
double GetForPlayerAngle( double x, double y )
{
double pi = 3.14159265358979323846264338327950288419716939937510;
double a, b, c;
// gX, gY プレイヤーの座標
a = gX - x;
b = gY - y;
c = sqrt(a*a+b*b);
double s = b/c;
static bool bFlag = false;
static vector<double> vSin;
// テーブルの初期化
if( !bFlag ) {
for( double j=0; j<=pi*2; j+=pi/180 )
{
vSin.push_back( sin(j) );
}
bFlag = true;
}
// 近似値を求める
double angle = 0;
// 例外
if( -1 == s ) return 270;
if( 1 == s ) return 90;
if( 0 == s ){
if( gX>x ) return 0;
if( gX<x ) return 180;
}
if( s<0 ) s = -s;
// 実数値 s
int i;
for( i=0; i<vSin.size(); i++ )
{
if( s<vSin.at(i) ){
angle = i;
break;
}
}
if( (gX<x) && (gY>y) ) angle = 180 - angle;
if( (gX<x) && (gY<y) ) angle = 180 + angle;
if( (gX>x) && (gY<y) ) angle = 360 - angle;
HDC hdc = GetDC( hwndApp );
MoveToEx( hdc, x, y, NULL );
LineTo( hdc, gX, gY );
ReleaseDC( hwndApp, hdc );
return angle;
}
551ポイント を手に入れた。
|
|
|
|
Name: 初心者 ..プログラマー(31,785ポイント)
Date: 2009/04/15(水) 17:50
No:32262
|
|
Title: 順列
|
|
某書物から抜粋致しました。
コンパイルと実行はできます。
ですが・・・初心者ゆえにどこでどんなことをしているのか、詳しくわかりません(T_T)
よろしければどんなことが行われているのか教えてください。
よろしくお願いします。
#include <stdio.h>
#include <math.h>
#define N 20
int irnd(int);
void main(void)
{
int i,j,d,a[N+1];
for(i=1;i<=N;i++)
a[i]=i;
for(i=N;i>1;i--){
j=irnd(i-1);
d=a[i];a[i]=a[j];a[j]=d;
}
for(i=1;i<=N;i++)
printf("%d",a[i]);
}
int irnd(int n)
{
return((rand()/32767.1)*n+1);
}
229ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..比類無きプログラマー(81,205ポイント)
Date: 2009/04/15(水) 18:55
No:32267
|
|
Title: Re:順列
|
|
まずは規約を読んでくださいね。
コードを載せる際にはプレタグを使用してください。
簡単にコメントを入れました。
#include <stdio.h>
#include <stdlib.h>//これがないとコンパイルは通らない
#include <math.h>
#define N 20 //マクロ定義
int irnd(int); //プロトタイプ宣言
void main(void)
{
int i,j,d,a[N+1]; //変数宣言
for(i=1;i<=N;i++) //配列aのi番目に数値iを代入
a[i]=i;
for(i=N;i>1;i--)
{
j=irnd(i-1); //0〜20の乱数取得
d=a[i];a[i]=a[j];a[j]=d; //配列iと配列jの数値交換
}
for(i=1;i<=N;i++) //配列の中身を標準出力に出力
printf("%d\n",a[i]);
}
int irnd(int n) //乱数取得関数
{
return((rand()/32767.1)*n+1);
}
っという流れです。
結局は配列に0〜20の数値が順番に最初に入っているのをシャッフルしたって感じです。
randの上限は十進法で32767なのでrand()/32767.1は必ず1よりも小さいです。
なのでirnd()は20を超える数値を返却することはありません。
19:06
修正しました・・・(赤字)
359ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(138,911ポイント)
Date: 2009/04/15(水) 21:35
No:32281
|
|
Title: Re:順列
|
|
srandか何かで乱数を初期化していないため、
毎回同じ結果を得るという、
あまりおもしろみのないコードですね。>質問者さん or 書籍の著者さん
どうせ乱数を使うなら、実行のたびに結果が変わった方が
少しはおもしろいのではないかと思います。
ところで、タイトルの「順列」とそのコードとは必ずしも合致していません。
順列を求めるというのであれば、例えばNが3なら
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
の6とおりを出力する必要があります。
79ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..プログラマー(31,978ポイント)
Date: 2009/04/15(水) 23:35
No:32299
| 解決!
|
Title: Re:順列
|
|
kazuoniさん
すみません、タグは以後気をつけます。
また、コメントをつけてくださりありがとうございます。
とても理解しやすかったです(*^-^)
boxさん
確かに、毎回結果が同じなのでつまらないとは思いますが、初心者の私にはちょうど良いぐらいでした。
なるほど、全ての組み合わせを表示する必要があるのですね。
ありがとうございます。
お二人とも、ご丁寧にありがとうございました。
またわからないことがありましたら、ご投稿させていただこうと思います。
193ポイント を手に入れた。
|
|
|
|
Name: yuki ..ぴよぴよ(72ポイント)
Date: 2009/04/15(水) 01:13
No:32248
|
|
Title: 無題
|
|
今日この館を知りました。
手順に沿ってDXライヴラリの設定まではできたんですが
そのあと
DxLib_VC2008_and_2005用というファイルをクリックしても何も反応がありません
分かる方、もしくは同じ症状にあった方教えてください
72ポイント を手に入れた。
|
|
|
|
Name: toyo ..プログラマー(30,670ポイント)
Date: 2009/04/15(水) 11:20
No:32257
|
|
Title: Re:無題
|
|
一度スタートメニューからVisualC++を起動させると初回の設定が自動で行われます
それをすませると実行できるようになります
55ポイント を手に入れた。
|
|
|
|
|
Name: yuki ..ぴよぴよ(130ポイント)
Date: 2009/04/15(水) 17:53
No:32263
|
|
Title: Re:無題
|
|
スタートメニューからやっても初回の設定が自動で行われず、
そこでVisualC++を起動して
そのあとDxLib_VC2008_and_2005用を起動しようとしても何も反応がありませんでした。。。
なぜなのでしょうか・・
58ポイント を手に入れた。
|
|
|
|
|
Name: yuki ..ぴよぴよ(161ポイント)
Date: 2009/04/15(水) 22:42
No:32291
| 解決!
|
Title: Re:無題
|
|
すいません自己解決しました。
質問に答えてくれた方ありがとうございました!
31ポイント を手に入れた。
|
|
|
|
Name: あ〜る ..初心者(5,307ポイント)
Date: 2009/04/15(水) 20:34
No:32273
|
|
Title: またはっきりしないんですが…
|
|
最近質問多くてすいません、あ〜るです
自機に当たり判定を付けてみたところ、弾が当たってもないのに自機が被弾するという事が起こりました
どうやら、始まって、敵が弾を打ったあと動いていないと、明らかに弾とまだ距離があるのに被弾するようです(少しでも動けばOK、弾が打たれる前に動いても意味無し、被弾します)
自分でも弾の当たり判定が間違えてるのかと思い当たり判定を0,1にしたり、苦肉の策としてソースを丸ごとコピペしてみたんですけど駄目でした…
後々重大なバグに繋がったり、プレイ中に起こると困るので、なるべく早く直したいです
今回も、中々具体的な内容ではないんですが、何かこれじゃないかと思う所があれば教えて下さい。
46ポイント を手に入れた。
|
|
|
|
Name: nayo ..中級者(10,653ポイント)
Date: 2009/04/15(水) 20:39
No:32274
|
|
Title: Re:またはっきりしないんですが…
|
|
被弾時の処理部分にブレイクポイントを設置して、被弾したときの弾の位置などの値を見てみてはどうでしょうか
29ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..初心者(5,438ポイント)
Date: 2009/04/15(水) 20:52
No:32275
|
|
Title: Re:またはっきりしないんですが…
|
|
お早い助言ありがとうございます
やってみたところ座標的には被弾してるようです
でもやっぱり被弾してるようには見えません(家族にも見て貰ったんですけどみんな全会一致で当たってませんでした)
なので、描画したまま画面を止める処理みたいのがありましたら教えて下さい
もしあったらそれで止めて見てみます
131ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..初心者(5,198ポイント)
Date: 2009/04/15(水) 21:18
No:32276
|
|
Title: Re:またはっきりしないんですが…
|
|
コードを提示するのが最も早いのではないでしょうか?
ちなみに、プログラムのタイトル部分をドラッグすれば、プログラムは停止するはずです。
41ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..初心者(5,443ポイント)
Date: 2009/04/15(水) 21:23
No:32278
|
|
Title: Re:またはっきりしないんですが…
|
|
コードは龍神録の物と全く一緒です
何度見返しても間違いが見つからなかったので、細かい誤字だろうと思いコピペしました(結局治ってないんですが…)
敵の弾が当たった瞬間に止めたいので手動だとちょっと無理です…
5ポイント を手に入れた。
|
|
|
|
|
Name: 叉奈 ..かけだし(1,943ポイント)
Date: 2009/04/15(水) 21:36
No:32282
|
|
Title: Re:またはっきりしないんですが…
|
|
状況がよくわからないのですが
弾幕の形式の種類を変えたり、弾の画像を変えたりしましたか?
自作の弾幕を作った場合には弾が発射されたけど描画されてなかったりなんてこともよくあるので…
違ったらすいません;
2倍のポイントを手に入れた! 134ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..初心者(5,511ポイント)
Date: 2009/04/15(水) 21:49
No:32286
|
|
Title: Re:またはっきりしないんですが…
|
|
いろんな弾幕で試してみたところ普通に動きました
結局原因はわからなかったのでまだかなり不安ですが、とりあえずちゃんとなったのでまたならない事を祈ります
助言をして下さった皆様ありがとうございました!お騒がせしてすいませんでした
68ポイント を手に入れた。
|
|
|
|
Name: ざこ ..熟練のプログラマー(43,793ポイント)
Date: 2009/04/15(水) 21:38
No:32283
|
|
Title: MFCの参考書
|
|
仕事でMFCの勉強を今まで続けてきたのですが少しいきづまりまして質問させていただきました。
今持ってるのは超入門書が2冊。後は新VisualC++6.0入門 ビギナー編とシニア編です。
これだけである程度作れるようになったのですがこの先どの参考書使うか悩んでいます。
アドバイスください。
118ポイント を手に入れた。
|
|
|
Name: クロウ ..入門者(3,677ポイント)
Date: 2009/04/14(火) 21:50
No:32216
|
|
Title: クォータビューのマップ描画について
|
|
半年ぶりの投稿になります。
今、ゲームプログラミングの館を参考にさせていただいて作った歩くマインスイーパを
次はクォータービューにして作ろうとしています。
クォータービューのマップの配置で高さの違いを出そうとすると、描画位置がおかしくなったりしてうまくいきません。
まず一段目を全部描画して、次にmapHigh[][]の中の値が1以上のものを2段目として描画、その上から2以上のものを3段目、3以上を4段目・・・・としてやっているつもりです。
2段目までは微調整でうまくいったのですが、3段目からは微調整でうまくいきませんでした。
微調整をしないで、mapHigh[][]の中身を変えるだけで、マップチップを求めている段数を積んでくれるようにしたいのですがどのようにすればよいか教えてください。
ソースコードはこのようになっています。
コンパイラはVC2008でOSはvistaです。
#include "DxLib.h"
#define MAPSIZEMAX_X 4
#define MAPSIZEMAX_Y 3
int map[MAPSIZEMAX_Y][MAPSIZEMAX_X] = {//マップチップの種類
{0,1,0,1},
{0,1,0,1},
{0,1,0,1},
};
int mapHigh[MAPSIZEMAX_Y][MAPSIZEMAX_X] = {//高さ用の配列
{0,0,0,2},
{1,2,3,3},
{0,0,2,0},
};
int mapChip[20]; //クォーターマップチップ
typedef struct{
int field[MAPSIZEMAX_Y][MAPSIZEMAX_X];//マップのメイン
int fieldHigh[MAPSIZEMAX_Y][MAPSIZEMAX_X];//高さ用の配列
}mapData_t;
mapData_t mapData;
void mapLoad(){//読み込んだマップを一時配列に保存
for(int i = 0; i < MAPSIZEMAX_X ; i++){
for(int j = 0; j < MAPSIZEMAX_Y ; j++){
mapData.field[j][i] = map[j][i];//マップチップNo.
mapData.fieldHigh[j][i] = mapHigh[j][i];//高さ
}
}
}
void mapDraw(){//マップの描画
for(int i = 0; i <MAPSIZEMAX_X -1 ; i++){//マップチップNo.
for(int j = 0; j < MAPSIZEMAX_Y +1 ; j++){
switch(mapData.fieldHigh[i][j]){//高さによって同じ物を積み上げる
case 0:
DrawGraph(100 + (j * 2 - i)*32 -j*32 ,100 + (i * 2 + j)* 16 -i*16 ,mapChip[mapData.field[i][j]],TRUE);
break;
case 1:
DrawGraph(100 + (j * 2 - i)*32 -j*32 ,100 + (i * 2 + j)* 16 -i*16 ,mapChip[mapData.field[i][j]],TRUE);
DrawGraph(100 + (j * 2 - i)*32 -j*32 + mapData.fieldHigh[i][j]*4-4
, 100 + (i * 2 + j)* 16 -i*16 - mapData.fieldHigh[i][j]*16+2
,mapChip[mapData.field[i][j]],TRUE);
break;
case 2:
DrawGraph(100 + (j * 2 - i)*32 -j*32 ,100 + (i * 2 + j)* 16 -i*16 ,mapChip[mapData.field[i][j]],TRUE);
DrawGraph(100 + (j * 2 - i)*32 -j*32 + mapData.fieldHigh[i][j]*2-4
, 100 + (i * 2 + j)* 16 -i*16 - mapData.fieldHigh[i][j]*8+2
,mapChip[mapData.field[i][j]],TRUE);
DrawGraph(100 + (j * 2 - i)*32 -j*32 + mapData.fieldHigh[i][j]*2-4
, 100 + (i * 2 + j)* 16 -i*16 - mapData.fieldHigh[i][j]*16+2
,mapChip[mapData.field[i][j]],TRUE);
break;
case 3:
DrawGraph(100 + (j * 2 - i)*32 -j*32 ,100 + (i * 2 + j)* 16 -i*16 ,mapChip[mapData.field[i][j]],TRUE);
DrawGraph(100 + (j * 2 - i)*32 -j*32 + mapData.fieldHigh[i][j]*4-2
, 100 + (i * 2 + j)* 16 -i*16 - mapData.fieldHigh[i][j]*4+4
,mapChip[mapData.field[i][j]],TRUE);
DrawGraph(100 + (j * 2 - i)*32 -j*32 + mapData.fieldHigh[i][j]*4-2
, 100 + (i * 2 + j)* 16 -i*16 - mapData.fieldHigh[i][j]*8+4
,mapChip[mapData.field[i][j]],TRUE);
DrawGraph(100 + (j * 2 - i)*32 -j*32 + mapData.fieldHigh[i][j]*4-2
, 100 + (i * 2 + j)* 16 -i*16 - mapData.fieldHigh[i][j]*16+4
,mapChip[mapData.field[i][j]],TRUE);
break;
}
}
}
}
void mapMain(){//マップメイン
mapLoad();//マップデータの読み込み
mapDraw();//描画
}
////////////////////////////////////////////////////////////////////////////////////
unsigned int stateKey[256];
int GetHitKeyStateAll_2(){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) stateKey[i]++;
else stateKey[i]=0;
}
return 0;
}
int CheckStateKey(unsigned char Handle){
return stateKey[Handle];
}
//メインループで行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE );
if( DxLib_Init() == -1 ){ return -1;}
//初期化処理
SetOutApplicationLogValidFlag ( FALSE ); //ログ出力を行わない
SetDrawScreen( DX_SCREEN_BACK ) ;
//最初に描画先を裏画面に設定
LoadDivGraph("mapchip.png",4,4,1,64,48,mapChip);
while(ProcessLoop()==0){//メインループ
mapMain();
if(CheckStateKey(KEY_INPUT_ESCAPE) == 1){
break;//エスケープが入力されたらブレイク
}
ScreenFlip();//裏画面データを表画面へ反映する
}
DxLib_End();//Dxlibの終了
return 0; // ソフトの終了
}
2,472ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(341,094ポイント)
Date: 2009/04/14(火) 22:55
No:32235
|
|
Title: Re:クォータビューのマップ描画について
|
|
>mapHigh[][]の中身を変えるだけで、マップチップを求めている段数を積んでくれるようにしたい
同じような式がいっぱいあって、目がクラクラ・・・。
まずは、同じ式をまとめて、整理すると、
int x = 100 + (j * 2 - i) * 32 - j * 32;
int y = 100 + (i * 2 + j) * 16 - i * 16;
int height = mapData.fieldHigh[i][j];
int mapImage = mapChip[mapData.field[i][j]];
DrawGraph(x, y, mapImage, TRUE);
switch(height)
{
case 1:
DrawGraph(x + height * 4 - 4, y - height * 16 + 2, mapImage, TRUE);
break;
case 2:
DrawGraph(x + height * 2 - 4, y - height * 8 + 2, mapImage, TRUE);
DrawGraph(x + height * 2 - 4, y - height * 16 + 2, mapImage, TRUE);
break;
case 3:
DrawGraph(x + height * 4 - 2, y - height * 4 + 4, mapImage, TRUE);
DrawGraph(x + height * 4 - 2, y - height * 8 + 4, mapImage, TRUE);
DrawGraph(x + height * 4 - 2, y - height * 16 + 4, mapImage, TRUE);
break;
}
こうなります。
さて、ここでじっくり見ていくと不思議なことがいくつか見つかります。
・ なぜ高さが1や2の時は x方向は一切ずらしていない(1*4-4=0とか 2*2-4=0)のに、
3の時だけ 3*4-2=10ずらしているのか。
・ なぜ y方向のずらしが1の時は 18、2の時は 18と 34、3の時は 16, 28, 52と
まちまちなのか。
この点を改善すれば、うまくいくのではないでしょうか。
一応適当に直した(あんまりチェックしてない)コードを乗せておきますので、
参考にしてください。
void mapDraw()
{
for(int x = 0; x < MAPSIZEMAX_X - 1; x++)
{
for(int y = 0; y < MAPSIZEMAX_Y + 1; y++)
{
int pos_x = 100 + (y * 2 - x) * 32 - y * 32;
int pos_y = 100 + (x * 2 + y) * 16 - x * 16;
int height = mapData.fieldHigh[x][y];
int mapImage = mapChip[mapData.field[x][y]];
for(int n=0; n<=height; ++n)
DrawGraph(pos_x, pos_y - n * 16, mapImage, TRUE);
}
}
}
1,419ポイント を手に入れた。
|
|
|
|
|
Name: クロウ ..入門者(3,769ポイント)
Date: 2009/04/15(水) 21:23
No:32279
| 解決!
|
Title: Re:クォータビューのマップ描画について
|
|
うまく表示されました。
Justyさんありがとうございました。
(j*2-i)*32-j*32 → (j-i)*32
(i * 2 + j) * 16 - i * 16 → (i+j)*16
・・・実は無駄な計算をしていたようです。
92ポイント を手に入れた。
|
|
|
|
Name: 匿名 ..上級者(15,122ポイント)
Date: 2009/04/14(火) 21:42
No:32212
|
|
Title: 文字列のポインタ
|
|
引数に""で囲む部分がある関数ですが
LoadGraphScreen( 0 , 0 , "test.bmp" , TRUE );
などは"test.bmp"を変数とかに変えてもいいんでしょうか?
63ポイント を手に入れた。
|
|
|
|
Name: 匿名 ..上級者(15,155ポイント)
Date: 2009/04/14(火) 23:01
No:32236
|
|
Title: Re:文字列のポインタ
|
|
どうもありがとうございます。
ところで、char *型はchar型と何が違うんですか?
33ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..中級者(11,842ポイント)
Date: 2009/04/14(火) 23:06
No:32237
|
|
Title: Re:文字列のポインタ
|
|
char型だとtest.bmpのtの文字しか入りませんが
char *型だと、tから文字が始まりますって感じかな。
あとはメモリに順番に文字が入りここで文字終わりという情報も入るので
tの1文字でtest.bmpが分かるわけです。
50ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..上級者(15,235ポイント)
Date: 2009/04/15(水) 00:10
No:32244
|
|
Title: Re:文字列のポインタ
|
|
なるほど、よくわかりました。
でも""で囲まれている中には%dとか%sとかは使えるんでしょうか?
使えるとしたらどこに引数を入れればいいんでしょうか?
2倍のポイントを手に入れた! 80ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..中級者(11,910ポイント)
Date: 2009/04/15(水) 00:24
No:32245
|
|
Title: Re:文字列のポインタ
|
|
%dや%sはprintf ですね。
char *a = "test.bmp";
LoadGraphScreen( 0 , 0 , a , TRUE );
これでできませんか?
68ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(155,792ポイント)
Date: 2009/04/15(水) 10:35
No:32256
|
|
Title: Re:文字列のポインタ
|
|
>>でも""で囲まれている中には%dとか%sとかは使えるんでしょうか?
>>使えるとしたらどこに引数を入れればいいんでしょうか?
ひょっとして…
image01.bmp
image02.bmp
image03.bmp
image04.bmp
image05.bmp
image06.bmp
image07.bmp
みたいな事を想定されているのでしょうか?
もし、そうでしたら、sprintf関数を利用されると楽かと思います。
156ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..上級者(15,310ポイント)
Date: 2009/04/15(水) 18:43
No:32266
|
|
Title: Re:文字列のポインタ
|
|
そうです、そういう事を想定していました。
sprintf関数は確かに使えそうですね。
ところで
char *name = "score.dat";
とかでも使えるでしょうか?
あと変数名の前に*を付けると何が変わるんですか?
75ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(155,833ポイント)
Date: 2009/04/15(水) 19:12
No:32269
|
|
Title: Re:文字列のポインタ
|
|
文字と文字列の違いについて調べてみてください。
それから、配列とポインタの関係についても調べるといいと思いますよ。頑張って♪(o^-')b
41ポイント を手に入れた。
|
|
|
|
Name: kerotan0820 ..中級者(10,603ポイント)
Date: 2009/04/14(火) 21:31
No:32210
|
|
Title: ○○進数の意味がいまいちわかりません・・・
|
|
**学習単元**
ttp://www9.plala.or.jp/sgwr-t/
上記URLサイトの"データの扱い、定数"の欄です。
基礎中の基礎なので、本題の言いたいことはわかるのですが…
**質問**
・○○進数(8進数,10進数など)という文字が出てきたのですが、意味がわかりません
**自分で調べた結果**
8進数について調べたら以下のように表記されていました。
基数を8とした数値の表現方法。桁が一つ移動する毎に値の重みが8倍(1/8倍)になる。「0」から「7」までの8種類の数字を用いてすべての数を表現する。2進数での3桁をまとめて8進数として表すことがある。8進数の「537」は、10進数では 5×64 + 3×8 + 7×1 の351である。
基数という言葉の意味すらわからなかったので基数と調べたらこう表記されていました。
数値を表現する際に、各桁の重み付けの基本となる数。我々が普段している10進数では、10倍ごとに桁が上がっていくので、基数は10である。2進数、8進数、10進数、16進数の基数はそれぞれ2、8、10、16である。一般に、n進数では、ある位の1つ上の位の数はn倍の数を表す。例えば、10進数では右から順に「1の位」「10の位」「100の位」…のようになるが、これが16進数になると「1の位」「16の位」「256の位」…のようになる。
自分が思うにつまり、10進数の場合10を十倍すると100、100を十倍すると1000になる。
十倍の関係にあるから10進数? … 必死に考えてるのですがいまいち・・・;
これを8進数で表すと、8で数字が繰り上がるという考え方でいいのでしょうか。
1〜8の数字を扱って考えるということなのでしょうか。
どうか教えてくださると幸いです。お願いします
578ポイント を手に入れた。
|
|
|
|
Name: non ..プログラマー(39,506ポイント)
Date: 2009/04/14(火) 21:43
No:32213
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
>これを8進数で表すと、8で数字が繰り上がるという考え方でいいのでしょうか。
その考えであってます。
>1〜8の数字を扱って考えるということなのでしょうか。
0〜7です。
94ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(80,210ポイント)
Date: 2009/04/14(火) 21:51
No:32217
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
プログラムでよく扱う進数表記は 2, 8, 10, 16 です。
0〜16までの数値の各表記を下記に表で示してみます。
---------------------------
|2進数|8進数|10進数|16進数|
---------------------------
| 0| 0| 0| 0|
| 1| 1| 1| 1|
| 10| 2| 2| 2|
| 11| 3| 3| 3|
| 100| 4| 4| 4|
| 101| 5| 5| 5|
| 110| 6| 6| 6|
| 111| 7| 7| 7|
| 1000| 10| 8| 8|
| 1001| 11| 9| 9|
| 1010| 12| 10| A|
| 1011| 13| 11| B|
| 1100| 14| 12| C|
| 1101| 15| 13| D|
| 1110| 16| 14| E|
| 1111| 17| 15| F|
|10000| 20| 16| 10|
---------------------------
表を見ると分かるとおり、○○進数の○○の部分が、
一桁で表すことのできる数です。
※ちなみにですが、時計の時間の数え方は12(24)進数と60進数で表しています。
478ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..中級者(10,867ポイント)
Date: 2009/04/14(火) 22:03
No:32222
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
■non様
■御津凪様
なるほど!なんかわかった気がします。
確認のために御津凪様の書いてくださった8進数の数値の続きを書いて見ます。
20から書きます。
21
22
23
24
25
26
27
30
31
.
.
.
66
67(67から70になるのは、68の8は使えなくて、9も使えないから繰り上がるのですよね?
70
71
72
73
74
75
76
77
100(77から99まではいずれにしても十の位、一の位に8以上の値が入ってしまうた100
こんな考え方でよろしいでしょうか。
皆様詳しい説明有難うございます。さーっぱり理解できなかったのに理解できそうです^^
264ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..中級者(11,666ポイント)
Date: 2009/04/14(火) 22:12
No:32224
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
>こんな考え方でよろしいでしょうか。
考え方は少し違いますが合っていますよ。
8進数では8,9は使えないのではなく存在しないのです。
言いたいことほとんど書かれてしまいましたが
人間は指が10本だからか10進数ですが
コンピュータは2進数です。0と1しか分かりません。
8進数や16進数を使うのは2進数と相性がいいからです。
御津凪さんが書いてくださった
16進数、8進数と2進数の対応を見れば分かりますか?
正直使わなくてもなんとかなりますが、
マニアな方だと16進数でプログラムを書くので
それを読もうとするとさっぱりになります。
特にアセンブラのプログラムを書く人はそうですね。
追加。
8進数は2進数3つごと、16進数は4つごとになります。
コンピュータが
000101011111
と結果を出したら
8進数は
000 101 011 111 で
0537となります。
16進数は
0001 0101 1111 で
15Fとなります。
10進数は相性が悪いので計算が面倒ですが351ですね。
逆を言うと16進数や8進数で書けばメモリが無駄なく使えるってことですね。
Windowsならアクセサリにある電卓で表示・関数電卓を選ぶと
2進数、8進数、16進数が使えるので遊んでみると良いかも。
230ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..中級者(11,137ポイント)
Date: 2009/04/14(火) 22:24
No:32226
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
■hss12様
なるほど…
存在しないのですね… 片手で数字を数えようとしたら片手では5までしか考えられないから左手に1繰り上げるという考え方ですね。
8進数と16進数の相性がいいのはみてとれました^^
途中に16進数だと文字が使われているのがなぜかわかりませんが、数字がなんか相性がいいのはわかりました。
アンセンブラ… 懐かしいです;
僕が中学1年のときくらいにyah○o知恵袋というサイトで
「ゲームってどうやってできてるのですか? C言語だけでできてるのですか? 画像や音声の処理はどうやってるのでしょうか、プログラムで画像も作られてるのですか?」
とか馬鹿みたいなことを質問してたときにアンセンブラを進められたことがあります。
かなり多数の方がやりなといってましたがねw
あんせんぶら?!!!wwwwみたいになって結局C言語やってますがw
アンセンブラって今後にわたってお世話になるものなのでしょうかね?
270ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..初心者(5,157ポイント)
Date: 2009/04/14(火) 22:32
No:32228
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
語弊はあるかと思いますが、
アセンブラはC言語の元となっているような言語です。
コンパイルの段階で、C,C++のコードはアセンブラに訳されます。
アセンブラはかなり機械語に近い言語で、
言語の速度はC言語よりも速いです。
ただし、かなり難しい言語としても有名で、
効率の面から見ても、アセンブラがゲーム開発に使われることは少ないでしょう。
ただ、アセンブラは直接メモリを弄ることになるので、
アセンブラをやっていると、ポインタをすぐ理解できるといわれています。
その面から、アセンブラはやっておくべき言語なのかもしれません。
(間違っているかもしれないので、そのまま鵜呑みにしないほうがいいです)
159ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..中級者(11,792ポイント)
Date: 2009/04/14(火) 22:34
No:32229
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
追加したので見てください。
アセンブラを勉強するとプログラムの仕組みが良くわかるのでいいですよ。
最近はC++がほとんどだと思いますが
ファミコンのころはアセンブラで書いていたんじゃないですかね。
昔、少しやりましたが、計算結果が16進数で帰ってくるので苦労しました。
メモリを直接操作するので計算が無駄なくすごく速いです。
書くのは難しいですが、今でも軽さや処理速度を重視するときは使われていますね。
126ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..中級者(11,515ポイント)
Date: 2009/04/14(火) 22:35
No:32231
| 解決!
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
■MNS様
なるほど…
初めて知りました。
そしてアンセンブラをやらなくてよかったなとおもいました^^ww
C言語でもう十分すぎます…w
なるほどぉ… ポインタはC言語最大の難関ですからね;
それを理解しやすくなるのはうらやましいですがそれまでの道のりが大変そうですね^^;
時期にポインタの単元に突入するべくがんばりたいとおもいます
たくさんの回答有難うございました
2倍のポイントを手に入れた! 378ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(138,832ポイント)
Date: 2009/04/14(火) 22:38
No:32232
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
技術用語は正確に使いましょう。
○:アセンブラ、アセンブラー
×:アンセンブラ
英語のスペルは assembler です。
64ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(47,774ポイント)
Date: 2009/04/15(水) 00:36
No:32246
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
アセンブリ言語だと、(処理)スピード調整がしやすいですね。
というのもC言語はコンパイルにかけると機械語に翻訳されるのはご存知だと思いますが、
実はその間に「アセンブリ言語」に一度訳されていて、
それをもとに機械語に翻訳されています。
このとき、自分でアセンブリ言語には訳していませんよね?
コンパイラによって自動で訳されています。
なので、処理時間を調整することが難しいです。
まぁ、コンパイラで最適化はされていますが^^;
一方、アセンブリ言語は、メモリを直接操作して(?)、
実行する手順を完全に制御できたりと、リアルタイム処理には長けているそうです。
なので、リアルタイム処理が必要なもの、組み込み系にはまだアセンブリ言語で
プログラムを書かれていることあるです。
ですが、アセンブリ言語は難しい言語です。
理由は、機械語をシンボル化したようなものなので、
人間にとってはまだまだ分かりづらい言語だからです。
また、CやC++のような高級言語よりも書く量が半端じゃありません。
たとえば、1+2+3+…+10の計算をする処理を考えてみると、
C言語であればfor文で1発で書くことができます。
しかし、アセンブリ言語で書こうとするならば、
10行ほど必要になってきます。
このように一般的にはC言語の10倍書く量があります。(聞いた話なので定かではありません^^;
生産性を上げるためにほとんどはC言語のような高級言語が使用されています。
なので、アセンブリ言語はあまりお世話にならないかもしれませんね。
将来、組み込み系の仕事に就くのであれば、必要になってくるかもしれませんが、
最近のコンパイラでも処理時間が早くなるようになってきてるそうです。
間違っているかもしれないので、すべてを鵜呑みにしないでくださいね^^;
708ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..中級者(12,181ポイント)
Date: 2009/04/15(水) 01:29
No:32249
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
たしかにアセンブラにfor文はないですね。
>たとえば、1+2+3+…+10の計算をする処理を考えてみると
for(a=0, i=1; i=<10; i++) a+=i;
これをアセンブラ風にC言語で書くと
i=0;
j=0;
k=10;
LABEL1:
i++;
if (i>k) goto LABEL2;
j+=i;
goto LABEL1;
LABEL2:
a=j;
BASICみたいになってしまいましたが確かに10行くらいになりますね。
i=1なんてことはできなかったと思うので
たしかメモリを0にしてから1を足さないとダメだったはずです。
あとメモリとメモリの比較しかできないので
どこかのメモリに10をいれておかないとダメです。
計算用のメモリと保存用のメモリを分けないといけないので
最後にa=jとしないと消えてしまいます。
面倒ですね。
271ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(96,384ポイント)
Date: 2009/04/15(水) 07:57
No:32255
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
アーキテクチャにもよりますが...
> たしかメモリを0にしてから1を足さないとダメだったはずです。
そんなことはありません。
> あとメモリとメモリの比較しかできないので
そんなことはありません。
> 計算用のメモリと保存用のメモリを分けないといけないので
そんなことはありません。
> for(a=0, i=1; i=<10; i++) a+=i;
は、
a = 0
i = 0
goto L2
L1:
a += i
++i
L2:
if (i <= 10) goto L1
のようになります。1行に1命令しか書けないので行数は増えますが、大したことはありません。
なお、アセンブリ言語はそんなに難しい言語ではありません。
多くの場合、C言語より簡単です。
ただし、面倒です。
ところで、アセンブリ言語は将来にわたって使われなくなることはありません。
さすがにアセンブリ言語だけでプログラム全体を書くことはあまりなくなりました(4ビットマイコンやPICのようなローエンドの機種では、今でもアセンブリ言語だけで記述することがあるはずです)が、スタートアップやOSなどのコードを書くにはアセンブリ言語が必須です。
つまり、ある程度以上のレベルに達するには、アセンブリ言語のスキルは必須になります。
12ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..中級者(12,260ポイント)
Date: 2009/04/15(水) 20:22
No:32272
|
|
Title: Re:○○進数の意味がいまいちわかりません・・・
|
|
指摘補足ありがとうございます。
ぜんぜん理解していなかったみたいですね。
いいかげんなことは書くべきじゃないですね。
アセンブラまた勉強してみようかな。。。
79ポイント を手に入れた。
|
|
|
|
Name: tubo ..ぴよぴよ(109ポイント)
Date: 2009/04/15(水) 18:36
No:32265
|
|
Title: 龍神録プログラミングとエクセル
|
|
竜神録プログラミングで、背景を描く際、
エクセル2003を利用したいです。
具体的には、セルごとに数字を入れ、
1→緑,2→DrawGraph("honyarara.png")
という具合に描画したいのです。
(伝わったかな?)
どうすればいいですか。よろしくお願いします。
109ポイント を手に入れた。
|
|
|
Name: スー ..入門者(3,598ポイント)
Date: 2009/04/15(水) 02:54
No:32251
|
|
Title: WindowsAPIでデスクトップ画面を表示する方法
|
|
こんばんは。
私は今、WindowsAPIでスクリーンセーバーを作っています。
今回の目標はデスクトップの画面を表示しつつ、何かの画像を表示させることです。
WindowsVista付属のスクリーンセーバー「バブル」くらいを作れたらいいなぁと思っています。
デスクトップ画面を取得する関数を作ってみても、白い円しか表示されないです。
つまりデスクトップ画面の取得ができてないっぽいのですが、どこがおかしいかわかりません。
どうかおかしい点を教えてください。
よろしくお願いします。
環境は
VC++2005
windowsXP
です。
以下ソースです。
#include <windows.h>
#include <scrnsave.h>
//スクリーンセーバを作るためのライブラリ
#pragma comment(lib,"ScrnSave.lib")
#pragma comment(lib,"Comctl32.lib")
//タイマーのID
#define ID_TIMER 32767
//ウインドの縦幅、横幅
int wx,wy;
RECT rc;
HDC hdc;
void GetDeskTop(){
HWND DeskhWnd;
HDC Deskhdc;
//デスクトップのハンドルを取得
DeskhWnd = GetDesktopWindow();
//デスクトップのデバイスコンテキストのハンドルが取得
Deskhdc = GetDC(DeskhWnd);
//hdcへ転送
BitBlt(hdc,0,0,100,100, Deskhdc,0,0,SRCCOPY);
//解放
ReleaseDC(DeskhWnd,Deskhdc);
}
LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch(msg){
case WM_CREATE:
GetClientRect(hWnd,&rc);
//ウインドの縦幅、横幅取得
wx = rc.right-rc.left;
wy = rc.bottom-rc.top;
//タイマーセット
SetTimer(hWnd,ID_TIMER,16,NULL);
break;
case WM_TIMER:
hdc = GetDC(hWnd);
//デスクトップ画像を表示する関数
GetDeskTop();
//白い円を書いてみる
//予定ならデスクトップの画像+白い円が表示される
RoundRect(hdc , 100 , 100 , 120 , 120 , 60 , 60);
ReleaseDC(hWnd , hdc);
break;
case WM_DESTROY:
KillTimer(hWnd,ID_TIMER);
PostQuitMessage(0);
return 0;
default:
break;
}
return DefScreenSaverProc(hWnd, msg, wParam, lParam);
}
BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){
return TRUE;
}
BOOL WINAPI RegisterDialogClasses(HANDLE hInst){
return TRUE;
}
445ポイント を手に入れた。
|
|
|
|
Name: toyo ..プログラマー(30,615ポイント)
Date: 2009/04/15(水) 07:50
No:32254
|
|
Title: Re:WindowsAPIでデスクトップ画面を表示する方法
|
|
LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
に
case WM_ERASEBKGND:
return TRUE;
を入れないと背景が消されるので消されたデスクトップを取得しているのかも
63ポイント を手に入れた。
|
|
|
|
|
Name: スー ..入門者(3,657ポイント)
Date: 2009/04/15(水) 12:08
No:32258
| 解決!
|
Title: Re:WindowsAPIでデスクトップ画面を表示する方法
|
|
toyoさんありがとうございます。
>case WM_ERASEBKGND:
> return TRUE;
をswitch文の所にいれたら無事にデスクトップ画面を取得できました。
ありがとうございました。
59ポイント を手に入れた。
|
|
|
|
Name: あ〜る ..入門者(4,067ポイント)
Date: 2009/04/12(日) 11:59
No:32071
|
|
Title: DrawRotaGraphFについて
|
|
お久しぶりです。
早速なんですが、DrawRotaGraphFっていうのはどういう関数なのでしょうか?
ネットで調べてみたんですけど、このサイトばかりが出てきてしまい・・・
どなたか教えてください。
77ポイント を手に入れた。
|
|
|
|
Name: yu [URL] ..上級者(24,926ポイント)
Date: 2009/04/12(日) 12:36
No:32072
|
|
Title: Re:DrawRotaGraphFについて
|
|
すみません;
ちょっと変な事を書いたので編集させて頂きました。
DrawRotaGraph関数の座標値の引数がint型に対して、
DrawRotaGraphF関数は座標値の引数がfloat型ですね。
x=1.5とかでもしっかりとその場所に描画してくれるのかな?
すみません、詳しく分かりませんorz
137ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..入門者(4,095ポイント)
Date: 2009/04/12(日) 14:45
No:32082
|
|
Title: Re:DrawRotaGraphFについて
|
|
なるほど、それだけ違いだったのですか…
教えて頂きありがとうございました!
28ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..初心者(5,261ポイント)
Date: 2009/04/15(水) 07:31
No:32253
|
|
Title: Re:DrawRotaGraphFについて
|
|
すいません
これ携帯からだと解決が押せないんですよ…
25ポイント を手に入れた。
|
|
|
|
Name: ひよこ ..上級者(24,839ポイント)
Date: 2009/04/11(土) 16:19
No:32020
|
|
Title: STGの画像について
|
|
ひさしぶりです。ひよこです。
龍神録の館の「1面を作ってみよう」を自分なりに変えてみたのですが、
画像には自分で作った画像と龍神録の画像があるのですが、
どのようにRead Meには書けばよろしいのでしょうか?
73ポイント を手に入れた。
|
|
|
|
Name: ひよこ ..上級者(24,888ポイント)
Date: 2009/04/12(日) 11:14
No:32068
|
|
Title: Re:STGの画像について
|
|
わかりました。
じゃあ編集してアップしますね。
別件ですけどDixqさんにメール送ってませんでしたか?
49ポイント を手に入れた。
|
|
|
|
|
Name: 叉奈 ..かけだし(1,285ポイント)
Date: 2009/04/13(月) 20:51
No:32150
|
|
Title: Re:STGの画像について
|
|
自分はまだまだ作れませんが、STGをするのは大好きなので
本当に余計なことかも知れませんが感想を書かせていただきます。
<基礎部分について>
プレイヤーとしては、いきなりフルスクリーンで起動されるとビビります;
自分はvistaなのですが、フルスクリーンだとFPSが強制的に30になったりするので
最初はウインドウモードにしておくと良いと思います。
<ステージタイトルについて>
ステージ最初のステージタイトルに英数字を使うなら、横に書くほうが自然に見えると思います。
縦なら漢数字のほうが見栄えは良いかと…。
<自機ショットについて>
自機のショットが不透明なので、主にボス戦に入った時にボスの弾が物凄く見えづらく大変でした笑
それが仕様ならそれはそれで良いと思いますが、もともと画像を半透明にしておくなど
ショットを薄くしたほうがプレイヤーの眼のためかと…;
<キャラクターについて>
可愛いので、すごく和みました☆
久々にいいキャラを見た気がしますw
タイトルとのマッチ具合も良いと思いました。
<ボスについて>
ボスも和みましたw
周りをまわる球(でよいのでしょうか?;)や魔方陣(でよいのでしょうか?;)もいい感じだったと思います。
でも、ボスで使われている弾の種類が1つなのはちょっと面白くないかも…しれないです。
色を増やすだけでも…華やかになりますし…。
とりあえず気づいたことを書かせていただきました。
余計な事だったら本当にすいません。
これからのさらなる発展を楽しみにしています。
………自分も頑張らなくては;
444ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..上級者(24,981ポイント)
Date: 2009/04/14(火) 06:32
No:32185
|
|
Title: Re:STGの画像について
|
|
感想ありがとうございます。
>>いきなりフルスクリーンで起動されるとビビります
じゃ次のときはウィンドウモードとフルスクリーンモード作りますね。
>>弾の種類が1つなのはちょっと面白くないかも…
次はたくさんの種類を使ってみます。
いろいろコメントありがとうございます。
他の人の感想を待ってます。
159ポイント を手に入れた。
|
|
|
|
|
Name: situmon ..上級者(23,957ポイント)
Date: 2009/04/14(火) 17:45
No:32200
|
|
Title: Re:STGの画像について
|
|
クリア?させていただきました。
絵が可愛いですね!
ここが気になるなというところ、
全方向ショットを形としたもの(基準が難しいですが、ランダムで全方向にショットするだけ)が多くやっている時、もっと新しいタイプの弾幕があるといいなと思いました。
あと花ならばそれにあった色を使うときれいな弾幕になるのだろうと思いました。
いろいろいってすいません。
あとよかったところは、
主人公が星で銀河が背景なのもあっていたのと
宇宙にあった感じの敵がでてきてよかったです。
143ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..プログラマー(25,141ポイント)
Date: 2009/04/15(水) 05:23
No:32252
|
|
Title: Re:STGの画像について
|
|
situmonさん
感想ありがとうございます。
クリア?させていただきました。
>>最後がボスが倒れたままですみません。
もっと新しいタイプの弾幕があるといいなと思いました。
>>新しく作らせていただきます。
あと花ならばそれにあった色を使うときれいな弾幕になるのだろうと思いました。
>>それにあった色っていうのもけっこう選びにくいようながんばってみます。
いろいろ参考になる意見が多いので感想待ってます。
147ポイント を手に入れた。
|
|
|
|
Name: すこーる ..かけだし(1,257ポイント)
Date: 2009/04/14(火) 23:39
No:32242
|
|
Title: タイトルからの
|
|
説明が下手なので脳内変換して下さい
タイトルでゲームスタートを押した時
難易度選択の画面に行く為には
どうすればいいですか?
ifを使うのですか?
参考になるサイト、もしくは詳しく教えていただけるとうれしいです
よろしくお願いします
73ポイント を手に入れた。
|
|
|
|
Name: すこーる ..かけだし(1,297ポイント)
Date: 2009/04/14(火) 23:47
No:32243
|
|
Title: Re:タイトルからの
|
|
えーと概出でした・・・
少し勉強してきます
わからないことがあればここで質問させていただきます
40ポイント を手に入れた。
|
|
|
|
Name: けん ..ぴよぴよ(255ポイント)
Date: 2009/04/13(月) 20:34
No:32148
|
|
Title: カクカクしないで処理を一定にするには
|
|
どのような環境でも移動スピードを一定にしたいのですが
こちらのゲームプログラミングの宝館のサンプルで記載されている処理で
void wait_fanc(){
int term;
static int t=0;
term = GetNowCount()-t;
if(16-term>0)
Sleep(16-term);
t=GetNowCount();
return;
}
を追加すると、リフレッシュレートが高いほどカクカクしてしまいます。
四聖龍神録をプレイするとかなり滑らかに動いていますが
処理的にはどのようにしているのでしょうか?
初心者ですみません。
どうぞご教授ください。
255ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(79,122ポイント)
Date: 2009/04/13(月) 23:02
No:32177
|
|
Title: Re:カクカクしないで処理を一定にするには
|
|
> こちらのゲームプログラミングの宝館
ゲームプログラミングの館のことですか?
Sleep 関数は 100% 指定した通りの待ちをしません。
(PCにもよりますがだいたい 20ms ほどの誤差が出ます)
そのため、この方法ではカクカクすることがあります。
ここのサイトの龍神録プログラミングの館のソースを見てみたほうがいいかと思います。
123ポイント を手に入れた。
|
|
|
|
|
Name: けん ..ぴよぴよ(459ポイント)
Date: 2009/04/13(月) 23:46
No:32178
|
|
Title: Re:カクカクしないで処理を一定にするには
|
|
返信ありがとうございます。
龍神録プログラミングの館のソースでも試してみたところ
※wait_fps()?
やはり微妙にカクカクしました。
リフレッシュレート60では非常に滑らかですが
75に変更して試すと少しぶれがあります。
ウエイトをかけてFPSを保つ方法では限界があるのでしょうか?
> > こちらのゲームプログラミングの宝館
>
> ゲームプログラミングの館のことですか?
>
> Sleep 関数は 100% 指定した通りの待ちをしません。
> (PCにもよりますがだいたい 20ms ほどの誤差が出ます)
> そのため、この方法ではカクカクすることがあります。
>
> ここのサイトの龍神録プログラミングの館のソースを見てみたほうがいいかと思います。
2倍のポイントを手に入れた! 204ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(79,013ポイント)
Date: 2009/04/13(月) 23:54
No:32179
|
|
Title: Re:カクカクしないで処理を一定にするには
|
|
実は龍神録プログラミングの館のソースを見ていませんでしたが、
同じ処理内容でしたでしょうか?
wait_fanc 関数内に書かれている 16 とは、60Hz での1フレームの経過時間です。
正確には端数が出ます(1000.0 / 60.0 = 16.666666666666)がここでは省かれています。
75Hz で正しく処理するには、
(1000.0 / 75.0 = 13.333333333333)で、 16 を 13 に変更すれば、
リフレッシュレートが 75Hz の時に滑らかになると思います。
109ポイント を落としてしまった。
|
|
|
|
|
Name: けん ..かけだし(1,025ポイント)
Date: 2009/04/14(火) 09:19
No:32187
|
|
Title: Re:カクカクしないで処理を一定にするには
|
|
処理は微妙に違いましたが、基本的に16ms未満だった場合処理を待つような設計でした。
下記関数になります。
void fps_wait(){
int term,i,gnt;
static int t=0;
if(fps_count==0){//60フレームの1回目なら
if(t==0)//完全に最初ならまたない
term=0;
else//前回記録した時間を元に計算
term=count0t+1000-GetNowCount();
}
else //待つべき時間=現在あるべき時刻-現在の時刻
term = (int)(count0t+fps_count*(1000.0/FLAME))-GetNowCount();
if(term>0)//待つべき時間だけ待つ
Sleep(term);
gnt=GetNowCount();
if(fps_count==0)//60フレームに1度基準を作る
count0t=gnt;
f[fps_count]=gnt-t;//1周した時間を記録
t=gnt;
//平均計算
if(fps_count==FLAME-1){
ave=0;
for(i=0;i<FLAME;i++)
ave+=f[i];
ave/=FLAME;
}
fps_count = (++fps_count)%FLAME ;
}
75フレームのときおっしゃるとうりソースを書き換えれば滑らかに動きますが
事前にリフレッシュレートがわかっていないければ出来ないかと思います。
各環境で自動的にあわせて行きたいのですが現在のリフレッシュレートを算出する関数はdxlibに実装されていますでしょうか?
よろしくお願いします。
> 実は龍神録プログラミングの館のソースを見ていませんでしたが、
> 同じ処理内容でしたでしょうか?
>
> wait_fanc 関数内に書かれている 16 とは、60Hz での1フレームの経過時間です。
> 正確には端数が出ます(1000.0 / 60.0 = 16.666666666666)がここでは省かれています。
> 75Hz で正しく処理するには、
> (1000.0 / 75.0 = 13.333333333333)で、 16 を 13 に変更すれば、
> リフレッシュレートが 75Hz の時に滑らかになると思います。
566ポイント を手に入れた。
|
|
|
|
|
Name: けん ..かけだし(1,148ポイント)
Date: 2009/04/14(火) 09:53
No:32188
|
|
Title: Re:カクカクしないで処理を一定にするには
|
|
上で書いたことで間違えました。
リフレッシュレートを現在の環境にあわせていくだけでは実際の速度が変わってきてしまうので
意味のないことでした。
やはり60フレーム固定の状態で75フレームの状態でプレイするとぶれますね・・・。
少し頭がこんがらがってきました。
123ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(30,552ポイント)
Date: 2009/04/14(火) 10:41
No:32189
|
|
Title: Re:カクカクしないで処理を一定にするには
|
|
>現在のリフレッシュレートを算出する関数はdxlibに実装されていますでしょうか?
GetVSyncTime( )という関数で1フレームのミリ秒が得られます
60Hzの場合は16か17が返ります。
79ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(79,338ポイント)
Date: 2009/04/14(火) 14:59
No:32191
|
|
Title: Re:カクカクしないで処理を一定にするには
|
|
現在の状態だと、
描画間隔(60)=動作スピード(60)
なので、リフレッシュレートなどにより描画間隔が変われば動作スピードも変わります。
リフレッシュレートが 60 以外で、
描画間隔(75)≠動作スピード(60)
とするには、描画間隔で待たずに
移動処理の方に対して 60 フレーム間隔で処理すると良いでしょう。
ソースとしては、下記のような感じです。
#define FPS_FRAME 16 // 1フレームあたりの待ち時間
void mainloop( void ){
int t = GetNowCount();
int tmp = 0;
while(1){
tmp += GetNowCount() - t;
while(tmp >= FPS_FRAME){
move(); // 移動処理
tmp -= FPS_FRAME;
}
draw(); // 描画処理
}
}
ソースを見れば分かるようにそのまま使うと終了できなくなるので注意。
ちなみに VSync まで待たないようになると、ものすごい描画処理のループをするので注意。
325ポイント を手に入れた。
|
|
|
|
|
Name: けん ..かけだし(1,309ポイント)
Date: 2009/04/14(火) 20:35
No:32206
|
|
Title: Re:カクカクしないで処理を一定にするには
|
|
御津凪様、
返信ありがとうございます。
この処理ですが
VSyncをまたずに移動処理だけ60FPSで処理するということでしょうか?
そして描画処理についてはマシンパワーが許す限り実行すると。
龍神録さんのソースではそのような処置がしてないのですが
たとえばウインドウモードで75FPSで実行すると
少しぶれてますよね?
私の環境だけでしょうか・・・。
161ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(79,732ポイント)
Date: 2009/04/14(火) 21:04
No:32207
|
|
Title: Re:カクカクしないで処理を一定にするには
|
|
上のコードは VSync(垂直同期) を待っても待たなくても移動処理は 60FPS 間隔で動作します。
描画処理の方は VSync を待つならリフレッシュレートに応じた間隔で、
そうでなければマシンパワーの許す限り呼び出されます。
(ちなみに VSync を待つかどうかの処理は上のコードにはありませんよ。)
もし処理に時間がかかり、移動処理に遅れが出ると、遅れた分を取り戻すために
移動処理関数を複数回呼び出す仕組みになっています。
これは、フレームスキップという方法で、龍神録の方では使われていません。
理由は、フレームスキップによってスキップされた時の状態が描画されないため、
描画されていない(フレーム時)間がどのような状態になっているかを視認できないので、
シューティング(特に精密操作系ゲーム)には余り向かないためです。
(3フレーム分スキップしたら、その3フレームの状態が描画されないということ)
フレームスキップ法は、リフレッシュレートが違う場合でも必ずゲーム時間は一致しますが、
表示が(周期的に)ぶれたりカクつくことがあります。
こちらの方法も一長一短というわけです。
("フレームスキップ法"で検索してみると FPS 周りについて詳しく分かるかと思います)
394ポイント を手に入れた。
|
|
|
|
|
Name: けん ..かけだし(1,466ポイント)
Date: 2009/04/14(火) 23:15
No:32238
|
|
Title: Re:カクカクしないで処理を一定にするには
|
|
いろいろとご教授ありがとうございます。
ソースを参考にしたいと思います。
最後にひとつお聞きしたいのですが
DXLIBではフルスクリーンモードでは基本的に60FPSに固定されているようなのですが
ウインドウモードを切り捨てれば60FPS固定で開発しても支障はないということでしょうか?
よろしくお願いします。
157ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(80,324ポイント)
Date: 2009/04/14(火) 23:21
No:32241
|
|
Title: Re:カクカクしないで処理を一定にするには
|
|
> ウインドウモードを切り捨てれば60FPS固定で開発しても支障はないということでしょうか?
それは製作するゲームの仕様設定によります。
製作するゲームでフルスクリーン推薦とするのであればそれでかまわないかと思いますが、
ウインドウモードもきちんと対応しなければならないのであれば、対応するべきです。
57ポイント を手に入れた。
|
|
|
|
Name: 由佳 ..ぴよぴよ(94ポイント)
Date: 2009/04/14(火) 21:11
No:32209
|
|
Title: 初めまして。
|
|
いつもこのサイトにお世話になってる由佳です。
突然ですが、現在C++でRPGを作っています
背景などは出来たのですが文字の表示の
方法がいまいちよく分かりません。
単に文字だけを表示させるのは出来ますが
あのRPGの会話のときにでる文章の背景?
っぽいのを付けたいのですがどうすればよろしいですか?
困って居ます。宜しくお願いします!
94ポイント を手に入れた。
|
|
|
|
Name: Mikan [URL] ..初心者(8,434ポイント)
Date: 2009/04/14(火) 23:18
No:32240
|
|
Title: Re:初めまして。
|
|
推測ですが、
背景を描画
↓
会話ウィンドウを描画
↓
会話文字を描画
ということなのでしょうか?
簡単に言うと背景を描画したあとに、会話ウィンドウを描画して、その上に文字を描画すれば良いだけじゃないかと思います。
要するに、描画する順番が重要です。
意図しているところと違っていたらすみません
162ポイント を手に入れた。
|
|
|
|
Name: situmon ..上級者(23,746ポイント)
Date: 2009/04/14(火) 17:09
No:32197
|
|
Title: 構造体について
|
|
typedef struct{
double x,y;
int status,counter;
int shot [11][15];
} BODY_player_t;
BODY_player_t Player;
これと
typedef struct{
int x,y,img;
}ch_t;
はどう違うのでしょうか?
一つ目はなぜ上にはBODYがつくのか?
二つ目はなぜ下にBODY_player_t Player; という記述がしてあるのか?
です。
また上を
typedef struct{
double x,y;
int status,counter;
int shot [11][15];
} player_t;
だけにしてはいけないのでしょうか?
初歩的な質問ですが、これはC言語の本には書いてなかった気がしたので、
すいません・・・
2倍のポイントを手に入れた! 554ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(138,446ポイント)
Date: 2009/04/14(火) 17:17
No:32198
|
|
Title: Re:構造体について
|
|
> typedef struct{
> double x,y;
> int status,counter;
> int shot [11][15];
> } BODY_player_t;
>
> BODY_player_t Player;
ここまでの記述は、
double型のメンバーx,y
int型のメンバーstatus,counter,shot[11][15]
を持つ構造体に、
BODY_player_t
という別名を付けた。つまり、intやcharなどと同様に、
BODY_player_t
という型があるものとして扱える。
そして、
BODY_player_t型の変数Playerを定義した。
という意味を持ちます。
> typedef struct{
> int x,y,img;
> }ch_t;
この記述は、
int型のメンバーx,y,img
を持つ構造体に、
ch_t
という別名を付けた、というところまでです。
ch_t型の変数は、まだ定義していません。
> 一つ目はなぜ上にはBODYがつくのか?
そういう名前にした方がわかりやすい、と命名者が思ったからでありましょう。
> typedef struct{
> double x,y;
> int status,counter;
> int shot [11][15];
> } player_t;
> だけにしてはいけないのでしょうか?
問題ありません。名前の付け方だけの話です。
構造体の名前を付ける際、BODYを付けなければならないというような
決まりはありません。
プログラム全体で一意でありさえすれば、どういう名前でもかまいません。
272ポイント を手に入れた。
|
|
|
|
|
Name: situmon ..上級者(23,814ポイント)
Date: 2009/04/14(火) 17:36
No:32199
| 解決!
|
Title: Re:構造体について
|
|
どうもありがとうございました。
名前の問題だったんですね。
大文字で書いてあるとなんか不思議な感じがしたので、
もやもやが解決したのでうれしかったです。
boxさん、ありがとうございました!
68ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..上級者(17,015ポイント)
Date: 2009/04/14(火) 17:51
No:32201
|
|
Title: Re:構造体について
|
|
typedef struct{
double x,y;
int status,counter;
int shot [11][15];
} BODY_player_t;
BODY_player_t Player;
>一つ目はなぜ上にはBODYがつくのか?
BODY_player_tの部分は
タグ名と呼び、BODY_player_tという新しい型が定義されます。
タグの名称はプログラマーのセンスによって変わるので、
BODYという記述自体に特別な意味があるわけではありません。
(言葉の持つ意味としては Body:体、本体、メイン部分 )
>二つ目はなぜ下にBODY_player_t Player; という記述がしてあるのか?
構造体 Player を宣言しています。
BODY_player_tは型です。
例えば int Player; の int の部分に相当します。
ch_t型も別の場所でch_t型を使用するために宣言で使用されているはずですよ。
>また上を(略)だけにしてはいけないのでしょうか?
上の説明でもう解ると思いますが、
名称は個人のセンスで決まります。
プログラムを読みやすくするために、
タグ名とその変数だと区別できる
名称にしておくと良いですよ。
2倍のポイントを手に入れた! 742ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(39,599ポイント)
Date: 2009/04/14(火) 21:47
No:32214
|
|
Title: Re:構造体について
|
|
>BODY_player_tの部分は
>タグ名と呼び、BODY_player_tという新しい型が定義されます。
これも、タグ名って呼ぶのは間違いありませんか?
調べたけど、わからなかったので。。。
93ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(138,768ポイント)
Date: 2009/04/14(火) 22:34
No:32230
|
|
Title: Re:構造体について
|
|
> これも、タグ名って呼ぶのは間違いありませんか?
typedef名というのが正しいようです。
少なくともタグ名ではありません。
(構造体)タグとは、
struct XXX {
/* ここにメンバーを定義する */
} YYY;
や
typedef struct XXX {
/* ここにメンバーを定義する */
} ZZZ;
と書いたときの「XXX」のことです(省略可能)。
93ポイント を手に入れた。
|
|
|
|
Name: kerotan0820 ..初心者(6,514ポイント)
Date: 2009/04/12(日) 16:43
No:32089
|
|
Title: "時間を取得する"の単元で
|
|
時間を取得するの単元を実行しているのですが、いまいちプログラムの意味がわかりません。
以下のプログラムなのですがわからない点を挙げたいとおもいます。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; //ウィンドウモードにする。
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
int i,a=0,time,White;
White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
time = GetNowCount() ; // 現在経過時間を得る
DrawFormatString(0, 0, White , "立ち上がってから%dミリ秒", time);//文字列表示
for(i=0;i<100000;i++) //10万回a++;を実行
a++;
time = GetNowCount() - time; //現在の経過時間から先ほどの経過時間を引く
DrawFormatString(0,100, White , "計算時間%dミリ秒" , time);//文字列表示
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
**質問**
for(i=0;i<100000;i++) //10万回a++;を実行
a++;
この処理でなぜ10万回a++を実行できるのでしょうか
a++などはC言語でインクリメントなどという単元があった気がしますが関係あるのでしょうか。
728ポイント を手に入れた。
|
|
|
|
Name: たいちう ..プログラマー(26,261ポイント)
Date: 2009/04/12(日) 16:49
No:32090
|
|
Title: Re:
|
|
> この処理でなぜ10万回a++を実行できるのでしょうか
繰り返しを制御する、forループを理解していないということですよね。
ずいぶん基礎的なことで躓いているようですね。
DXライブラリを習得する前に、C言語を習得する方が先ではないかと。
せめて疑問に思った時点で、「forについても調べよう」と思えるようになってほしいな。
119ポイント を手に入れた。
|
|
|
|
|
Name: dic ..上級者(17,725ポイント)
Date: 2009/04/12(日) 16:59
No:32091
|
|
Title: Re:
|
|
"時間を取得する"の単元でとありますが
10万回インクリメントすることに疑問をもつことに意味はあるのですか?
52ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..プログラマー(26,289ポイント)
Date: 2009/04/12(日) 17:07
No:32093
|
|
Title: Re:
|
|
dicさん
> "時間を取得する"の単元でとありますが
> 10万回インクリメントすることに疑問をもつことに意味はあるのですか?
もしかして私に向けて書いてます?
それとも質問者に向けて書いてます?
いずれにしてもdicさんの書いていることが、私には理解できていません。
私に向けて書いているならば、補足いただけないでしょうか。お願いします。
28ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(95,619ポイント)
Date: 2009/04/12(日) 17:09
No:32094
|
|
Title: Re:
|
|
> for(i=0;i<100000;i++) //10万回a++;を実行
> a++;
> この処理でなぜ10万回a++を実行できるのでしょうか
質問の意図が何通りか考えられます。
1. コードの意味が理解できない。
2. aがオーバーフローして未定義の動作を引き起こすのでは?
3. 最適化によって a += 99999 になってしまうのでは?
追記:
すみません間違いました。
× 99999
○ 100000
1.だとすると、入門書で勉強してください。
2.だとすると、想定している処理系のint型が32ビットなので問題ありません。
3.だとすると、これは元のコードのバグです。iまたはaをvolatile修飾することで解決します。
152ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(6,099ポイント)
Date: 2009/04/12(日) 22:25
No:32103
|
|
Title: Re:
|
|
>>DXライブラリを習得する前に、C言語を習得する方が先ではないかと
サイトのTOPにC言語暦1ヶ月? 十分 とあったので僕でもいけるかなとおもいました。
>>せめて疑問に思った時点で、「forについても調べよう」と思えるようになってほしいな
すみません、調べようとおもうまでの思考も回らないほどさっぱりでした
>>ソースを添付する場合はpreタグを使用する掲示板の規約も守ってほしい
すみません、規約を見直してきます
>>10万回インクリメントすることに疑問をもつことに意味はあるのですか
すべての単元においてソースを理解するまでやっているので後々困らないように質問しようとおもいました。
>>質問の意図が何通りか考えられます。
>>1. コードの意味が理解できない。
>>2. aがオーバーフローして未定義の動作を引き起こすのでは?
>>3. 最適化によって a += 99999 になってしまうのでは?
1です
なんかすごい叩かれた気分ですが、結局僕はどうすればいいのでしょうか
サイトのTOPにC暦1ヶ月で十分とあったので僕は勉強して、わからない点があったから質問して、それに対してC言語を習得するべきとか言われましても…
僕は"for文"を勉強すればいいのですね?
415ポイント を落としてしまった。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(95,976ポイント)
Date: 2009/04/12(日) 22:45
No:32106
|
|
Title: Re:
|
|
> なんかすごい叩かれた気分ですが、結局僕はどうすればいいのでしょうか
まったく叩かれていないと思いますが...
これで「すごい叩かれた気分」といわれても、被害妄想としかいえません。
> サイトのTOPにC暦1ヶ月で十分とあったので僕は勉強して、わからない点があったから質問して、
単に1ヶ月が経過したというだけでは何も身に付きません。
1ヶ月もあれば、それなりの入門書を1冊以上読破し、そこに書かれていたことを実際に試してみるぐらいのことはできるはずです。
その状態であれば、for文を見て何をやっているのか分からないということはないでしょうし、少し怪しいようなら入門書を読み返せば解決するはずですね。
> それに対してC言語を習得するべきとか言われましても…
程度は低くても、先ほど書いたぐらいはC言語を習得してください。
まだそこに達していないなら、これから必要なことを習得するようにしてください。
ところで、C言語暦ではなく、C言語歴です。
304ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..プログラマー(26,545ポイント)
Date: 2009/04/12(日) 22:52
No:32107
|
|
Title: Re:
|
|
> 僕は"for文"を勉強すればいいのですね?
最終的に何をやりたいのか分かりませんが、
ソースコードを理解したいのなら、とりあえずはその通りです。
ひとそれぞれ、元になる知識も勉強の仕方も理解力も熱意も違います。
「一ヶ月間C言語を勉強した」と自称する人が、
皆同じレベルまでC言語を習得しているわけではありません。
「C歴一ヶ月」というのは、管理人さんが考えた目安でしょう。
forを理解できない、調べようとおもうまでの思考も回らない、
というのは、その目安から外れていたのです。
しかし、管理人さんは救済策を用意してくれていて、それがこの掲示板です。
分からないことがあれば質問すればよいのです。
叩かれた気分になってしまったようですが、(私のも含め)今回の回答は
それぞれの回答者なりに好意的なものだと思いますが。
掲示板でfor文についての説明することも可能ですが、
丁寧な説明のある本やサイトが山ほどあるのに、
そこを読まないのはもったいなくないですか?
204ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがり ..上級者(15,772ポイント)
Date: 2009/04/12(日) 23:06
No:32109
|
|
Title: Re:
|
|
どうも被害妄想が激しく気分の起伏が激しい人のようですね。
みんな好意的にアドバイスしてくれているのに
「なんかすごい叩かれた気分ですが」と返すのはとても失礼です。
こんなことなら、ブログの件もただの自分の被害妄想だろうと言われても仕方ないでしょう。
中学生だということなので、まだ常識がわからないのでしょうが、ネットではそんな事考慮してくれません。
調べられる事は調べ、
アドバイスを受けに来たのならそのアドバイスを真剣に聞き、自分の行動を改め、
その場にあった規則や規約を守って行動する
これだけは最低限行いましょう。
また、for文なんてのはC言語の基本中の基本です。
そんな状態で「1年間C言語を勉強した」なんて言えません。
1年間C言語を勉強したのと、1年間自分の机の上にC言語の本が置いてあったのは意味が違います。
ここのサンプルプログラムはC言語の基本を理解していることが前提です。
まずは参考サイトや参考書などで基本を勉強しましょう。
112ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(7,114ポイント)
Date: 2009/04/13(月) 00:40
No:32114
|
|
Title: Re:
|
|
>>単に1ヶ月が経過したというだけでは何も身に付きません。
>>1ヶ月もあれば、それなりの入門書を1冊以上読破し、そこに書かれていたことを実際に試してみるぐらいの
>>ことはできるはずです。
>>その状態であれば、for文を見て何をやっているのか分からないということはないでしょうし、少し怪しいよう
>>なら入門書を読み返せば解決するはずですね。
学生なのでC言語のみに打ち込める環境じゃないのでそれは不可能です。
読破は可能でも実行していたらまず無理です。
>>掲示板でfor文についての説明することも可能ですが、
>>丁寧な説明のある本やサイトが山ほどあるのに、
>>そこを読まないのはもったいなくないですか?
その通りですね; 僕自身よく考えたらC言語の本を2冊も持ち合わせていましたし、しかもC++の本までありました。使わないのはもったいないのはその通りですので学校などで暇を見つけて呼んでみたいとおもいます。
>>どうも被害妄想が激しく気分の起伏が激しい人のようですね。
>>みんな好意的にアドバイスしてくれているのに
>>「なんかすごい叩かれた気分ですが」と返すのはとても失礼です。
>>こんなことなら、ブログの件もただの自分の被害妄想だろうと言われても仕方ないでしょう。
確かに僕の言動は失礼でした。すみません。かといって"どうも被害妄想が激しくて気分の机上が激しい人のようですね。"のような言い方はどうかとおもいますが。その一言も一応利用方針(ここの)には従えてないですよ。
>>一応C言語の基本が学習できるサイトを紹介しておきます。
>>私の解釈ですが、このサイトの11章ぐらいまで理解しておかないと、C言語を用いて独自のプログラムが作れ
>>るレベルではないように思います。
有難うございます。ぜひ参考にさせて頂きます。
今回はお騒がせしました。今後ともよろしくお願いします
自分が持ち合わせている本や紹介してくださった本で基礎に目を通し、ある程度理解できてからまたこちらの作業に戻りたいとおもいます。
C言語を学習した上でわからないこと等あるとおもいますのでその際はよろしくお願いします。
891ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(46,757ポイント)
Date: 2009/04/13(月) 01:05
No:32115
|
|
Title: Re:
|
|
他の方々もおっしゃっていますが、私からも一言だけ言わせてもらいますね。
私の場合、C言語を勉強し始めたのは、高校1年後半くらいでした。
個人的な事情であったので、独学での勉強でした。
本格的に勉強をし始めたのは、大学に入ってからです。
なので、質問者様よりも少し遅めですね。
質問の方を拝見させていただいたところ、まだ基本が理解できていないと私には感じられます。
ソースの意味を知りたいだけでしたら、たいちうさんのおっしゃる通り
for文だけを勉強されれば充分です。
ですが、本気で勉強していこうという気があるのであれば、
これから先さまざまなソースを見ていくことになるでしょう。
となると、はっきり言ってfor文だけでは絶対に理解することはできません。
基本中の基本を理解できていなければ、他人の書かれたソースを読んでも無駄だと思います。
(少し大袈裟かもしれませんが)
掛け算を一切知らないのに、図形の面積を求めることなんてほぼできませんよね?
それと同じです。
C言語だと繰り返し処理、条件分岐は最低限必要な知識といえるでしょう。
他にも自作関数や構造体、ポインタ等もありますが^^;
これを聞いてさっぱりわからないよっていうのであれば、
DXライブラリの勉強をされるよりも、C言語の基礎を勉強することをお勧めします。
それなりの知識を得て、それらを使いこなすには私からすれば1か月では足らないと思いますね。
少なくとも私の場合、ポインタまである程度理解し、少しですが使えるようになるまで
1年近くかかってしまいました。(←かかりすぎかもしれませんが^^;
>>学生なのでC言語のみに打ち込める環境じゃないのでそれは不可能です。
>>読破は可能でも実行していたらまず無理です。
私も学生の身分ですが、その気になれば学校の勉強と同時並行でCの勉強を進めていくことはできますよ。
私は睡眠の時間を削ってでもC言語の勉強をしています。
というよりも、「○○なので〜できません」では社会では通用しませんよ。
それともう一言だけ
Cの参考書やサイトを見ただけではプログラムは書けるようにはなりません。
数学や英語と同じように、実際に自分でプログラムを作って実行していかなければ、
確かな実力は付いてこないと思います。
いろいろと大変かもしれませんが、頑張ってくださいね^^
587ポイント を手に入れた。
|
|
|
|
|
Name: ・・・・・・・ ..ぴよぴよ(64ポイント)
Date: 2009/04/13(月) 01:48
No:32116
|
|
Title: Re:
|
|
私の知人で、中学生からまともなプログラムができるやつは、
4人のうち2人は、有名高校、大学あたりで中退してるので、あまり頑張らない方がいい気が・・・
(その後音沙汰がないので皆今どうしているかは知らないが・・・)
皆本光一の様に成れるのは一部な気がします。
64ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..中級者(11,061ポイント)
Date: 2009/04/13(月) 02:10
No:32117
|
|
Title: Re:
|
|
C言語何でも質問掲示板なので質問に答えます。
正直、for文を分かりやすく説明しているサイトを見たことがありません。
わたしも最初何をしているのか分かりませんでした。
苦労して理解したので説明します。(間違っていたらすみません)
for(@; A; B){
C;
}
基本はこのように書くのですが
とりあえず繰り返す文はCになります。
ここで、繰り返す文が1つの場合は{}が省略できるので
for(@; A; B)
C;
と書くことができます。
質問されているのはこの状態ですね。
あてはめると
@は i=0
Aは i<100000
Bは i++
Cは a++
となります。
とりあえずこのままAの100000の数字の回数だけ
Cのa++を繰り返すと覚えてしまえばそのまま使えます。
これ以外でfor文を使うことはあまりないので仕組みを覚えてなくても
とりあえずなんとかなるのですがあえて説明します。
a++やi++は1たすということは分かりますか?
aが0のときa++を書くとaは1になります。
100000は説明が面倒なので5にさせてもらいます。
i<5はiが5より小さいかを判定します。iが5のときは含まれません。
この判定が成立していると繰り返しを実行します。
for(@; A; B)
C;
を
for(i=0; i<5; i++)
a++;
として説明すると
@ まずiの値が0になります。(i=0)
A iは0なので5より小さいので(i<5)
C a++が実行されます。
B 次にi++が実行されます。iは1になります。
A iは1なので5より小さいので(i<5)
C a++が実行されます。
B 次にi++が実行されます。iは2になります。
A iは2なので5より小さいので(i<5)
C a++が実行されます。
B 次にi++が実行されます。iは3になります。
A iは3なので5より小さいので(i<5)
C a++が実行されます。
B 次にi++が実行されます。iは4になります。
A iは4なので5より小さいので(i<5)
C a++が実行されます。
B 次にi++が実行されます。iは5になります。
A iは5なので5より小さくないので(i<5)
これで終わります。
数えてください。Cは5回実行されましたね。
@は1回しか実行されないことと
CBAの順番に実行されることを覚えれば
これでほぼマスターしたといってもいいでしょう。
初心者が良く間違えるのはCが実行された後に
BとAが実行されていることを忘れることです。
@とBは何も書かなくても大丈夫です。
ただし、Aは書かないといつまでたっても終わらないのでダメです。
i<5についてもっと詳しく書くと
i<5が成立しているときはi<5は1になります。
成立していないときは0になります。
つまりAの部分は1か0を書けばいいわけです。
(何も書かないと1が書いてあるとみなされるようです。)
for( ; 1; )
a++;
こんなことを書いてもいいわけですがこれだと永久にa++が実行されてしまいます。
(正確には永久ではないですが)
ちなみに@とBを省略するときはwhile文というのを使うことが多いです。
こう書きます。
while(A){
C;
}
for文と同じにしたいなら
@;
while(A){
C;
B;
}
と書けばいいですね。
for文は分かりましたか?これで分らなかったら私が落ち込みます。
あとはたくさん書いてみて実践あるのみです。
1,254ポイント を落としてしまった。
|
|
|
|
|
Name: dic ..上級者(17,931ポイント)
Date: 2009/04/13(月) 03:56
No:32119
|
|
Title: Re:
|
|
for( 式1; 条件; 式2 )
文
と書くとC言語の文法上では
最初に式1が一度だけ実行され
条件が真ならば次に進む
文が実行され
式2が実行される
そしてまた条件が真ならば
文が実行され
式2が実行される
そしてまた条件が真ならば
文が実行され
式2が実行される
...
......
..........
そして条件が偽ならば
forループを抜ける
となっています
// 0-9を表示する
int i;
for( i=0; i<10; i++ )
printf( "%d\n", i );
85ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(96,372ポイント)
Date: 2009/04/13(月) 08:01
No:32124
|
|
Title: Re:
|
|
> 学生なのでC言語のみに打ち込める環境じゃないのでそれは不可能です。
> 読破は可能でも実行していたらまず無理です。
不可能だとすると、考えられる理由は次のいずれかかと思います。
1. 自由に使えるPCがない
2. やる気がない
3. 重篤な心身障害等により、健常者と同等の効率は無理
4. 全寮制の学校等、やや特殊な環境のため、自由時間の制約が大きい
逆にいえば、それ以外であれば、不可能というのはないと思います(困難というなら分かります)。
また、本当に不可能なら、通常の何倍もの時間がかかるのはいたし方ありません。
ちなみに、中学生や高校生は(そして専門学校生も)「生徒」であって「学生」ではありません。
175ポイント を手に入れた。
|
|
|
|
|
Name: ROM ..ぴよぴよ(126ポイント)
Date: 2009/04/13(月) 12:59
No:32126
|
|
Title: Re:"時間を取得する"の単元で
|
|
>学生なのでC言語のみに打ち込める環境じゃないのでそれは不可能です。
>読破は可能でも実行していたらまず無理です。
甘えたこと言うな!
と言いたくなりますね。
じゃいつなら時間があるんでしょう。
勉強だけすればいい生活をしている身分で時間がないなんてね。
受験時期やバリバリの進学コースじゃなければ他の勉強出来る時間が生徒にないなんてことはまず無いですよね。
自分がやる気みせないで、楽に答えを得ようとする人間には人は集まりませんよ。
126ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(7,520ポイント)
Date: 2009/04/13(月) 19:11
No:32140
|
|
Title: Re:
|
|
ROMさんは結局何が言いたいのですか?
勉強だけすればいい生活をしているなんてあなたの解釈ですw
まぁ確かに僕は質問してる立場ですし僕の都合に無理に付き合わせようとした覚えはありませんよ。
勝手な妄想はやめてください。
>>自分がやる気みせないで、楽に答えを得ようとする人間には人は集まりませんよ。
やる気ありますのでごめんなさい。
別に楽に回答を求めようとした覚えはありません。
現に皆さんのおかげで何を調べればいいか、自分が何をすべきかもわかり、今それに向かってがんばっているところです、
というか空気呼んでください、コメントの流れ的にw そこつっこむところじゃないです。
(4/13 19:40 適切ではない表現が含まれていたので管理人によって文章が修正されました)
365ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(7,726ポイント)
Date: 2009/04/13(月) 19:17
No:32141
|
|
Title: Re:みなさまへ
|
|
たくさんの返信ありがとうございました。
僕の勝手で不愉快な思いをされた方、本当にすみませんでした。
今後ともよろしくお願いします。
C言語は努力してまず身につけたいとおもいます。本当に有難うございました。
for文についてはなんとか理解できました。昔僕はif(条件分岐)の少し先まで進めたのですが、覚えてないみたいなのでやり直します。またわからない点がありましたらよろしくお願いします。
(コメントはここで切らせていただきます)
206ポイント を手に入れた。
|
|
|
|
|
Name: やそ ..比類無きプログラマー(88,034ポイント)
Date: 2009/04/13(月) 19:32
No:32143
|
|
Title: Re:
|
|
青春だなぁ(謎)
たかぎさんのいうとおり
>ちなみに、中学生や高校生は(そして専門学校生も)「生徒」であって「学生」ではありません。
「学生」は女学生にのみ許されるのであ〜る!(嘘)
まあ、ゲーム製作に興味があってプログラミングも好きなら、「遊び」感覚でできるんじゃないかな?
時間がないといいますが・・・・
たしかに私も中高生の時は、友達と遊んだり、部活したり、バイトしたり、ゲームしたり、TV見たり、漫画読んだりと忙しかった(??)ので勉強する暇もないほどでした(アホ)
だけど、PC8801で始めたゲームやプログラムは時間を忘れて没頭していました。
トピ主さんの(生活)環境が分からないので一概に「お前のやる気がたらんのじゃ〜!」と決め付けるわけにはいきません。
私は一応自分の部屋もあり、パソコンも自由に触れる環境がありましたから、時間は比較的多めにひねり出すことが出来たほうだと思います。
このサイトは「宿題」の質問などもOKですので、提示されたコードの意味が分からないといった質問でも
もちろん受け付けておられます。
このサイトの「○○館」のプログラムをコピペしていろいろ遊んでみてください。
変数の値をいろいろいじってどう変化するか比較するのも面白いです。
入門書のプログラムを実際に打ち込んで試してみるのも良いでしょう。
実はC言語はベーシックやアセンブラ、パスカル、COBOLなどのほかの言語と比べ、「命令」は非常に少ないんです。ちょっとがんばればすぐに覚えられると思いますよ。
まあ、標準関数やDXライブラリなどの関数群は逆に非常にたくさん種類がありますが((((((^_^;)
その辺はいちいちマニュアル類(サイト)などを調べながらでもとりあえずはOKですよ。
使っているうちに覚えます^^
みなさんの回答は一つ一つとっても至極まともな意見で、2○hみたいな「叩き」の雰囲気は私には一切感じられませんでした。
まあそれぞれ個性が出ますから、冷たいと感じる回答があっても仕方ありませんね。
質問の仕方さえ的確であれば、的確に暖かい回答が得られます。
「ゲーム作りたいんだけど、どうやったらいい?」
とか、
「なんか思ったとおりに動いてくれないんだけど」
とか、
「エラーが出るんで直してください」
なんて質問は最悪です(-_-;)
そのあたりの質問の仕方も含めて規約に書いてありますので、まずはじっくりと読んで、
他のトピックも時間が許す限り読んで、「いい質問の仕方」、「悪い質問のしかた」
をじっくり観察してみてはいかがでしょう?
1,104ポイント を手に入れた。
|
|
|
|
|
Name: ROM ..ぴよぴよ(3ポイント)
Date: 2009/04/13(月) 19:46
No:32145
|
|
Title: Re:
|
|
ここに居る人達が皆いい人達ばかりだからと甘えてそんな言動繰り返すようなら
管理人さんに何か対策立ててもらわないといけませんね。
3ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..入門者(4,956ポイント)
Date: 2009/04/13(月) 20:11
No:32147
|
|
Title: Re:
|
|
煽るつもりはないのですけど、
kerotan0820さんは、C言語の勉強以前に、ネットマナーについて学んだほうが良いと思います。
規約に「アットホームで温かい」とあるように、ここの掲示板はとてもやさしい人が多いです。
そもそも、中学生と言うだけで相手にされない場合もあるので、この貴重な居場所を失わないほうが良いです。
全てのレスを見てきましたが、本当にkerotan0820さんのことを思っての書き込みが多く見られました。
ROMさんのレスも、このスレッドの書き込みの中では多少厳しい意見ではありますが、
通常であれば、このような言い方は極めて優しい言い方です。
私も中学生ですが、時間は見つければたくさんあります。
私は私立に通っていますが、家が離れている分、1時間ほど電車に乗らなければいけません。
まず、その1時間で私はプログラミング等の勉強をしています。(座れればの話ですけど)
kerotan0820さんが普通の中学に通っていて、本当にC言語を勉強したければ、
少々の早起きをして、勉強するのもありだと思います。
また、休日が丸一日潰れる、ということはないでしょう?
少なくとも、夜の1〜2時間は空くはずです。
その時間を活用すれば、勉強と両立したとしても、十分の時間があります。
やる気があるのなら、上で述べたようなことは出来るでしょう。
その点、時間がないというkerotan0820さんに対し、ROMさんは甘えるな、と言ったのだと思います。
掲示板では自分が投稿する内容をしっかり考えることが出来ます。
自分の好きな時間で書きたいことを考えることが出来るのです。
そのため、一時の感情でROMさんを貶すようなことを書かれていたのが残念でなりません。
No:32140 のような書き込みでは、
なぜ、自分に時間がないのか。
なぜ、自分が勉強だけしていればいい生活ではないのか。
なぜ、ROMさんの書き込みが流れに沿っていないのか。
のようなことが全くわかりません。
これでは、自分の考えが全く伝わらないでしょう。
私がkerotan0820さんに対し、意見を言える立場ではないとは思います。
ただ、このようなことでは、自分を貶めることになってしまいますよ。
875ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(8,351ポイント)
Date: 2009/04/13(月) 21:40
No:32156
|
|
Title: Re:
|
|
心を整理してみました
僕は初めてこのサイトを知り、わからない点があったため質問をしました。
初めての質問だったので丁寧に、PCの環境やら何やらをかたっぱしからわかりやすく丁寧に丁寧に書きました。
そこで帰ってきた回答はこんな頭の悪い僕でも簡単に理解できてしまうすばらしい回答ばかりでした。
それでもわからない点があってもわかるまでつきっきりで皆さんは付き合ってくださり、僕はこの掲示板はなくてはならないものとなっていました。
今回もいつもどおりわからない点があったから質問をしました。
そしたら帰ってきた一つ目の回答が、直接僕がおもっていた質問に対する回答ではなく、こうしたほうがいいという指摘で、実際はそれは今おもうと回答者様から僕に向けられたやさしさに感じました
ですが今までここであまりにもわかりやすい回答しか見ていなかったために、叩かれてるような感じがしていたのだとおもいます。
あくまで僕の被害妄想ですがね;
その後に続く回答も、直接答えにつながらず、一つ目のコメで多少いらいらしてしまっていたために、僕に対する批判コメに全部が見えてきてしまっていました…。
多少自己過剰なところがあって、ちょっとした言葉や周りの雰囲気を悪いほうに受け止めてしまう傾向があります… なんとか治して行きたいとおもいます。
++MNSさん++
中学生とは思えないご立派な文に唖然としました…
確かに今おもうと僕が忙しい忙しい言ってる原因がまったく記載されていませんでしたね・・・
原因を簡単に言いますと、結局僕の都合の塊なのですが
学校が終わります⇒部活があり終わって家に着くと7時を回っています⇒塾があります⇒家に9時30頃に着きます⇒進研ゼミがあります⇒学校の宿題があります⇒風呂、飯、その他学校の用意などさまざま⇒C言語
という日程を毎日繰り返しています。
ささっとすませば簡単に終わってしまいそうな日程なのですが、ゼミを不覚にもためてしまい終わらせなくてはいけないのです(他人からすれば知るかって話ですがね;
塾の宿題もそういえばあります。
C言語の時間は寝る時間を1時とするとがんばれば3時間はできます。
あぁ。。。 十分ですねww ごめんなさいw
ここまで文書いたけどなんかやっぱり十分時間ありますね
ということで風呂入って勉強に集中したいとおもいます。
でも、ひとつ。小学校、中学1年まで学校に行かずフィーバーしてた僕だったので今これでも相当な努力はしてるつもりです、なのでもっとがんばれるのようなコメントに対してできるか!見たいな事をおもってしまっていた気もします。僕の事情で。
本当に皆さんご迷惑をおかけしました。
皆さんからの回答をけなすような言動を行い本当に申し訳ないとおもっています。
今後ともよろしくお願いします。
608ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..中級者(11,436ポイント)
Date: 2009/04/14(火) 20:20
No:32205
|
|
Title: Re:
|
|
例えば、プログラムを数学に例えると
3Dのゲームが、高校の数学
このサイトが、小学校の算数を理解していれば
だとすれば、for文は
2 X 3 = 6
は、なぜ6になるのですか?
と質問しているような感じなんです。
かけざんを勉強してくださいと言いたくなります。
質問者さんは中学生だそうですが、
同級生に2 X 3はなぜ6になるんだと聞かれたら何と答えますか?
りんごを2つ持った人が3人いて・・・とまじめに答えますか?
答えが来なかったのはこんな経緯だと思います。
また、ゲームを作るのが中学の数学だとすると
まだ、小学校の算数も理解していないということで
ぜんぜん勉強が足りないってことですね。
読むことも大切ですが、入門書に載ってるサンプルをとにかく書くことです。
文字や数字を変えてみたり、わざとエラーになるようなことも書いてみると良いです。
ゲームを書くときに、この処理はあれが使えそうだなとか、このエラーはあの時見たな
など、将来役にたちます。
1日3時間も勉強しなくていいです。10分もあればサンプルの1つくらい書けませんか?
それで分からなかったらいくらでも質問すればいいんです。
私が高校のときはCじゃなくてBASICって言語でしたが
マイコンBASICマガジンって雑誌があってゲームのプログラムがたくさん載ってたんですが
休み前はよく徹夜で打ち込んでました。ぜんぜん理解してませんでしたが。
今はこんな便利な掲示板があるんですから、いくらでも質問すればいいと思いますよ。
まあ、質問する前に調べてからのほうが良いですね。
調べたけどこの部分が理解できなかったなど書けば、やさしい回答がくると思います。
375ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..中級者(10,025ポイント)
Date: 2009/04/14(火) 21:06
No:32208
|
|
Title: Re:
|
|
■hss12様
>>例えば、プログラムを数学に例えると
>>3Dのゲームが、高校の数学
>>このサイトが、小学校の算数を理解していれば
>>だとすれば、for文は
>>2 X 3 = 6
>>は、なぜ6になるのですか?
>>と質問しているような感じなんです。
>>かけざんを勉強してくださいと言いたくなります。
>>質問者さんは中学生だそうですが、
>>同級生に2 X 3はなぜ6になるんだと聞かれたら何と答えますか?
>>りんごを2つ持った人が3人いて・・・とまじめに答えますか?
>>答えが来なかったのはこんな経緯だと思います。
納得しました。もう少し実力をつけたいとおもいます。
>>読むことも大切ですが、入門書に載ってるサンプルをとにかく書くことです。
>>文字や数字を変えてみたり、わざとエラーになるようなことも書いてみると良いです。
>>ゲームを書くときに、この処理はあれが使えそうだなとか、このエラーはあの時見たな
>>など、将来役にたちます。
>>1日3時間も勉強しなくていいです。10分もあればサンプルの1つくらい書けませんか?
>>それで分からなかったらいくらでも質問すればいいんです。
僕が持ってる入門書には最初からエラーが起きるように組まれたプログラムが単元ごとに載っており、エラーが起きないように修正する作業があるのですが、それは使ったりしています。
入門書事態はなんか説明が難しいのでC言語の解説サイトを使っています。
確かに文字や数字を変えて、実行結果の違いを見比べたり、自分で意識してやると理解が深まるのはDXライブラリの図を表示する単元で実感しました。
C言語でもその方針でがんばりたいとおもいます
10分あればプログラムの1つ書けます・・・
まぁ正直3時間もC言語やる元気は僕ないのですけど、できるとしたら限界がそれくらいかなみたいな^^;
事実上長くても1時間30くらいしかやってませんw
勉強して、わからないことがあったらここで質問して、その間に別の用事を済ますみたいなことを繰り返してます。
>>私が高校のときはCじゃなくてBASICって言語でしたが
>>マイコンBASICマガジンって雑誌があってゲームのプログラムがたくさん載ってたんですが
>>休み前はよく徹夜で打ち込んでました。ぜんぜん理解してませんでしたが。
マイコンBASICマガジンはきいたことあります^^
技術科の担任は学生のころたしかそんな感じの本にゲーム投稿したりして遊んでいたそうです
僕も休みなどを利用してがんばってみたいとおもいます
641ポイント を手に入れた。
|
|
|
|
Name: kerotan0820 ..初心者(8,620ポイント)
Date: 2009/04/13(月) 21:50
No:32159
|
|
Title: C言語を勉強するためのVC++の設定がうまくいかない
|
|
■困っている点
・VC++でC言語をやる際の設定がわからない
■PC環境
システム:
Microsoft Windows XP
Home Edition
Version 2002
Service Pack 2
株式会社ソーテック
Intel(R)Celeron(R)CPU
430 @ 1.80GHz
1.80 GHz,896 MB RAM
物理アドレス拡張
システムのプロパティをとりあえず全部うつしました
■一言
僕がぐぐった際のタグの検索の仕方なのですが、何か問題があったら声をかけてくださるとうれしいです。
VC++ C言語
VC++ C言語 設定
C言語
などなど試してました。
設定の仕方のほうの説明よろしくお願いします。
269ポイント を手に入れた。
|
|
|
|
Name: MNS ..初心者(5,131ポイント)
Date: 2009/04/13(月) 21:55
No:32160
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
VC++とは、Visual C++ 2008 Express Edition でしょうか?
設定というのは、何の設定でしょうか。
DXライブラリの設定ですか?
それとも、cppファイルなどを作成する際のやり方でしょうか?
いまいちやりたいことがわかりません。
もう少し詳細を教えていただきたいです。
33ポイント を落としてしまった。
|
|
|
|
|
Name: やそ ..比類無きプログラマー(88,040ポイント)
Date: 2009/04/13(月) 21:57
No:32161
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
なにはなくともまずはインストールするところから始めましょう。
「ゲームプログラミングの館」の
0. (導入)DXライブラリを手に入れる。(全てはココから)
を閲覧くださいませ。
導入のページに「はじめての方のためのインストール方法」
というのもありますので、一読してみましょうよ^^
6ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(59,380ポイント)
Date: 2009/04/13(月) 21:58
No:32162
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
何がわからなくて、どこに躓いているのかさっぱりわかりませんが、超能力で推察するにファイルの拡張子をcにすればいいと思うよ。
DXライブラリを使用したプログラミングが出来る環境があるのに何がダメなんだろう?
87ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(47,066ポイント)
Date: 2009/04/13(月) 21:59
No:32163
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
設定の仕方といわれましても、単純にインストールするだけでしょうか?
それともDXライブラリを導入して、龍神録みたいなゲームを作る環境を整えたいのでしょうか?
もし、前者ならそれほど難しくはありません。
というよりも、言われたとおり進めていくだけでインストールはかんりょうしますよ。
後者であれば、パスの設定をする必要があります。
どちらもゲームプログラミングの館で設定方法が紹介されていますよ。
ttp://dixq.net/g/#0
もし上のサイトを読んでも分からなければ、また質問してください^^
#追記
皆さんと盛大にかぶってしまった^^;
182ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(8,321ポイント)
Date: 2009/04/13(月) 22:04
No:32164
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
■MNS様
回答ありがとうございます
>>VC++とは、Visual C++ 2008 Express Edition でしょうか?
はい、Visual C++ 2008です
>>設定というのは、何の設定でしょうか。
DXライブラリをやる際の設定はできるのですが…
そのcppとかの際の設定がわからないです。
DXライブラリの時にもcppファイルとかいろいろ選択して設定をしますが、その際にコード設定とか言語設定とかいろいろあるのですが、そこをどう設定すればいいのかがどうしてもわからないのです。
■やそ様
回答ありがとうございます
>>なにはなくともまずはインストールするところから始めましょう。
すみません、僕をはじめて見る方がいるというのを考慮していませんでした。
VC++でDXライブラリの初歩の初歩までは手を出したことがあるのでDXライブラリを学ぶ環境は整っているのです。
C言語を学ぶ際の環境がこのサイトには設定が載っていないため質問さしていただきました。
299ポイント を落としてしまった。
|
|
|
|
|
Name: MNS ..初心者(5,043ポイント)
Date: 2009/04/13(月) 22:10
No:32165
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
まだ、いまいちわかりません。
もうDXライブラリの設定は終了し、プログラムの実行は行える状況にあると考えてよいのでしょうか?
その状況下であれば、C言語の学習は行えますが・・・。
察するに、DXライブラリを使用しない、コンソールベースでのプログラミングをやりたいのでしょうか?
88ポイント を落としてしまった。
|
|
|
|
|
Name: kerotan0820 ..初心者(8,484ポイント)
Date: 2009/04/13(月) 22:17
No:32166
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
僕が回答者さまに返信してる間に2件も回答が^^;
本当にすみません、質問をもっと具体的に書くべきでした;
MMS様に対して回答したのと同様にわからない設定は
C言語のプログラムを書くまでのプログラムの作成や設定(cppとか言語設定とかコードとか)がわかりません。
僕がどうしてもわからないところのページの画像を載せます。
163ポイント を手に入れた。
|
|
|
|
|
Name: pooka ..ぴよぴよ(398ポイント)
Date: 2009/04/13(月) 22:19
No:32167
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
紹介サイトはVisual Studioですが
ttp://www.ced.is.utsunomiya-u.ac.jp/lecture/2006/common/vs2005/devstudio.php
48ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(8,693ポイント)
Date: 2009/04/13(月) 22:22
No:32168
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
■MSN様
回答ありがとうございます
>>もうDXライブラリの設定は終了し、プログラムの実行は行える状況にあると考えてよいのでしょうか?
>>その状況下であれば、C言語の学習は行えますが・・・。
DXライブラリの設定は終了していて、DXライブラリを利用したプログラムの実行は行える環境です。
>>察するに、DXライブラリを使用しない、コンソールベースでのプログラミングをやりたいのでしょうか?
はい、DXライブラリを使用せずやりたいとおもっています。
209ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(8,715ポイント)
Date: 2009/04/13(月) 22:23
No:32170
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
■pooka様
回答有難うございます
Visual StudioとVisual C++だと多少設定の仕方が変わってくるみたいです・・・
わざわざ調べてくださったのに申し訳ございません;
22ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..入門者(4,998ポイント)
Date: 2009/04/13(月) 22:25
No:32172
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
いえ、Visual Studioの中にVisual C++が入っていますので、設定は同じです、
pookaさんが提示されたページの3節から全く同じ様にやれば出来ると思います。
45ポイント を落としてしまった。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(78,934ポイント)
Date: 2009/04/13(月) 22:31
No:32173
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
> 名前は入力してるはずですが・・・
添付されている画像に、
<名前を入力してください>
と書かれている箇所があります。
SooA さんはそのことを指しているはずです。
あとは画像の通りであっているはずですよ。
71ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(8,816ポイント)
Date: 2009/04/13(月) 22:43
No:32174
| 解決!
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
■MSN様
回答ありがとうございます
ありがとうございます!なんどか失敗しましたが、成功しました!
設定のやり方も覚えました^^
ありがとうございます。
URLを教えてくださったpooka様、ありがとうございます
■御津風さま
回答ありがとうございます。
なるほど…
納得しました
ご指摘有難うございます。
66ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(8,919ポイント)
Date: 2009/04/13(月) 23:00
No:32176
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
■御津凪様
すみません; 先ほど僕も自分で、昇格のランクを眺めていたらあなたの名前らしき文字がありまして、あれ、俺漢字間違ってなかったかとかおもっていたところです。
本当に申し訳ございませんでした。
今後気をつけます。
103ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..上級者(16,132ポイント)
Date: 2009/04/14(火) 04:01
No:32184
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
> 名前は入力してるはずですが・・・
決定的に説明不足でしたね^^;
丁度友人からICQメッセージが来て
「キーワードでピンと来るだろう。」と
そのまま投稿して放置してしまいました。
御津凪さんフォローありがとうございます。
お手数おかけしました。m(_ _)m
ps.
kerotan0820さん
MNSさんの名前も間違えていますよ@@;
127ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(8,974ポイント)
Date: 2009/04/14(火) 15:51
No:32192
|
|
Title: Re:C言語を勉強するためのVC++の設定がうまくいかない
|
|
■SooA様
すみません; 自覚がなかったためにさっぱり気づきませんでした;
あ…
MNS様すみません…
友人にMSNという子がいましてw ついつい^^;
55ポイント を手に入れた。
|
|
|
|
Name: ポン ..ぴよぴよ(79ポイント)
Date: 2009/04/14(火) 00:06
No:32180
|
|
Title: 無題
|
|
SDLを使ってゲームを作成するという課題がでたのですが
参考になるサイト、書籍などはありますか?
あとプログラミングの勉強のやり方でいい方法があったら教えてください
79ポイント を手に入れた。
|
|
|
Name: 初心者 ..プログラマー(29,463ポイント)
Date: 2009/04/13(月) 07:00
No:32121
|
|
Title: ステータス異常のマークをつけるC言語関数を作りたいのですが
|
|
やりたい事は、例えば
Aさん[毒][麻痺]
Bさん[気絶][混乱][猛毒]
のように[]で囲まれたステータス異常をPOPして、ターン数内の場合表示を加えるという事です。
例えば、麻痺。効果ターン3とかにして、毎ターンに1ずつ減らし、ゼロになったら効果を説くやり方です。
二次配列を使いますstatsijou[kazu][shousai]のようにしてkazuはステータス異常の列、shousaiは異常名と効果ターンです。
二次配列にダブり効果なし、ターン数が切れたら異常名をなしにすると言った感じです。
statsijou[0][0] = 毒, statsijou[0][1] = 3みたいな感じで
どのようにやるか分かる方いますか?ご教授お願いします。
163ポイント を手に入れた。
|
|
|
|
Name: SooA [URL] ..上級者(15,470ポイント)
Date: 2009/04/13(月) 08:14
No:32125
|
|
Title: Re:ステータス異常のマークをつけるC言語関数を作りたいのですが
|
|
0 でステ異常無し、0 以外ターン数で表せます。
毒 2
猛毒 0
麻痺 0
混乱 1
気絶 0
文字列は strcat() を使えば"追加"することができます。
\0 文字で初期化した文字列に
毒、猛毒、麻痺と順番にチェックしてターン数が
0 以外の場合に対応する文字列を追加していく。
48ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..プログラマー(29,998ポイント)
Date: 2009/04/13(月) 15:23
No:32127
|
|
Title: Re:ステータス異常のマークをつけるC言語関数を作りたいのですが
|
|
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <string.h>
#include <SIOUX.h>
char *statsijou[128][128] = {
{"毒"},
{"猛毒"},
{"麻痺"},
{"混乱"},
{"気絶"},
};
char temp[128];
char *statsP[128][128] = {
{"毒"}, {"麻痺"},
};
void main()
{
int n, m;
char* l;
SIOUXSettings.fontid = 16400;
printf("%s\n", statsijou[0][0]);
printf("%s\n", statsijou[1][0]);
statsijou[0][1] = malloc(4);
strcpy(statsijou[0][1], "2");
statsijou[2][1] = malloc(4);
strcpy(statsijou[2][1], "3");
while(statsijou[0][0] != NULL){
printf("Aさん");
for(n = 0;statsijou[n][0] !=NULL;n++){
m = atoi(statsijou[n][1]);
if(m > 0) printf("[%s, %d]", statsijou[n][0], m);
m = m-1;
l = malloc(4);
sprintf(l, "%d", m);
strcpy(statsijou[n][1], l);
}
scanf("%s");
}
}
ここまで出来ました。この状態から、たとえば、scanfで「毒 3」と入力すると、statsijouの文字の中から、毒を選び、
効果ターン数を3に決定するには、どうすればいいのでしょうか?
あと、strcatの仕様が良く分からないのですが・・・どうか教えてください。
535ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(155,580ポイント)
Date: 2009/04/13(月) 17:01
No:32130
|
|
Title: Re:ステータス異常のマークをつけるC言語関数を作りたいのですが
|
|
>>scanfで「毒 3」と入力すると…
これは、スペースで区切っているという事ですか?
strcat関数は、第一引数の指す文字列の末尾へ、第二引数の指す文字列をコピーするというものです。
#include <stdio.h>
#include <string.h>
int main()
{
char sz[256] = {0};
// char型配列のszに"じゃんけん"という文字列をコピーする
strcpy(sz, "じゃんけん");
printf("%s\n", sz);
// szの指す文字列の末尾へ、"グー!!"という文字列をコピーする
strcat(sz, "グー!!");
printf("%s\n", sz);
return 0;
}
298ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..プログラマー(30,524ポイント)
Date: 2009/04/13(月) 17:24
No:32131
|
|
Title: Re:ステータス異常のマークをつけるC言語関数を作りたいのですが
|
|
そうです。今新しいの作りましたが、思うように動いてくれません。クラッシュしてしまいます。
strcpy(kata, temp);
for(atai = kata;*kata != '\0';kata++){
for(n = 0;*kata != ' ' && n < 10;) {n++;kata++;}
if(*kata == ' ') {*kata = '\0';
strncpy(namae, atai, n);*(namae+n) = '\0';
kata++;
}
}
atai = kata;
if(*kata == '\0') {strncpy(temp, atai, n);turn = atof(temp);
}//問題
//ステータス異常識別
m = 0;
printf("namae %s turn %g", namae, turna);
for(n = 0; n < 5;n++) {
pw = strcmp(statsijou[n][0], namae);
if(pw == 0) {
k = turn;
l = malloc(4);
sprintf(l, "%d", k);
strcpy(statsijou[n][1], l);
m++;
n=-1;
scanf("%s");
}
}
scanf("%s");
strcatの仕様は分かりましたありがとうございます。
このプログラムはポインターを移動して、「毒 3」の用にスペースで区切りポインターを移動して、スペースを検索し、
分割して変数に入れるというものなんですけど。
526ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(155,636ポイント)
Date: 2009/04/13(月) 18:00
No:32132
|
|
Title: Re:ステータス異常のマークをつけるC言語関数を作りたいのですが
|
|
scanf関数は文字列内にスペースを見つけたら来たら、処理を終了するんじゃなかったかと…
カンマとかで区切った方がいいんじゃないかな?
56ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..上級者(15,719ポイント)
Date: 2009/04/13(月) 18:10
No:32134
|
|
Title: Re:ステータス異常のマークをつけるC言語関数を作りたいのですが
|
|
ソースプログラムを貼る場合は、
規約を読んで<pre>ソース</pre>タグで囲んでください。
(<>は半角)
入力に関して、ゲーム中にステータスと異常ターンを
入力することは無いので今は書きません。
今回はソース中で用意したデータを使います。
#include "stdio.h"
#include "strings.h"
int main()
{
// ステータス名
char status_name[5][6] = { "毒[", "猛毒[", "麻痺[", "混乱[", "気絶[" } ;
// 表示用
char sta[17] ;
char pram[256] ;
// 状態管理変数 通常時 0 、0 以外でターン数
int status[5] = { 1, 0, 2, 0, 0 } ; // 毒、猛毒、麻痺、混乱、気絶
pram[0] = '\0' ;
for( int i=0; i<5; i++ )
if( status[i] != 0 )
{
// ステータス名を追加
strcat( pram, status_name[i] ) ;
// ターン数を文字列に変換
itoa( status[i], sta, 10 ) ;
// ターン数を追加
strcat( pram, sta ) ;
strcat( pram, "] " ) ;
}
// 結果表示
printf( "Aさんの状態\n" ) ;
printf( "%s", pram ) ;
return 0 ;
}
※ = が抜けてたりしてたので修正と追加を行いました。
249ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..プログラマー(31,556ポイント)
Date: 2009/04/13(月) 18:39
No:32137
|
|
Title: ありがとうございます出来ました。
|
|
指摘されたところを直し、ソースを参考にしたら見事に出来ました。
なにか、簡略化できるようでしたら教えて下さい。ソースです。
「毒,4」などと入力すると読み込める仕様になりました。ご指摘通り、スペースだと出来ませんでした。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <string.h>
#include <SIOUX.h>
char *statsijou[128][128] = {
{"毒"},
{"猛毒"},
{"麻痺"},
{"混乱"},
{"気絶"},
};
char temp[128];
char *kata, *atai;
char *statsP[128][128] = {
{"毒", "3"}, {"麻痺", "4"},
};
void main()
{
int n, m, pw, k;
char* l;
char *namae;
double turn;
SIOUXSettings.fontid = 16400;
printf("%s\n", statsijou[0][0]);
printf("%s\n", statsijou[1][0]);
statsijou[0][1] = malloc(4);
strcpy(statsijou[0][1], "2");
statsijou[2][1] = malloc(4);
strcpy(statsijou[2][1], "3");
while(1){
printf("Aさん");
for(n = 0;statsijou[n][0] !=NULL;n++){
m = atoi(statsijou[n][1]);
if(m > 0) printf("[%s, %d]", statsijou[n][0], m);
m--;
l = malloc(4);
sprintf(l, "%d", m);
strcpy(statsijou[n][1], l);
}
scanf("%s", temp);
pw = strcmp(temp, "def");
if(pw == 0) {
for(n = 0, m = 0; n < 5;n++) {
pw = strcmp(statsijou[n][0], statsP[m][0]);
if(pw == 0) {
k = atoi(statsP[m][1]);
l = malloc(4);
sprintf(l, "%d", k);
strcpy(statsijou[n][1], l);
m++;
n=-1;
}
}
}
//ステータス異常入力認識
kata = malloc(10);
strcpy(kata, temp);
atai = temp;
for(kata = temp;*kata != ',' && *kata != '\0' && n < 10; kata++) {n++;
}
namae = malloc(10);
*kata = '\0'; strncpy(namae, temp, n);
*(namae + n) = '\0';kata++;
atai = kata;
for(;*kata != '\0';kata++){
n++;
}
if(*kata == '\0') {*kata = '\0';strncpy(temp, atai, n);*(temp + n) = '\0';turn = atoi(temp);
}
//ステータス異常識別
m = 0;
for(n = 0; n < 5;n++) {
pw = strcmp(statsijou[n][0], namae);
if(pw == 0) {
k = turn;
l = malloc(4);
sprintf(l, "%d", k);
strcpy(statsijou[n][1], l);
}
m++;
}
}
}
1,032ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..上級者(15,951ポイント)
Date: 2009/04/14(火) 03:33
No:32181
|
|
Title: Re:ありがとうございます出来ました。
|
|
>ソースを参考にしたら見事に出来ました。
問題点を挙げておきます。
malloc が多用されていますが一度も開放されていません。
if(*kata == '\0')
↑こういった文字列のつもりで比較させることはできません。
エラーは出なくても結果は正しくありません。
文字列を比較させたい場合は strcmp を使用します。
if( strcmp( kata, "\0" ) == 0 )
最初にも書きましたが、ターン数を文字列で管理するのは
お勧めできません、ターンが進むたびに文字列を解析して
-1 するはめになります。
217ポイント を手に入れた。
|
|
|
|
Name: あ〜る ..入門者(4,777ポイント)
Date: 2009/04/12(日) 21:39
No:32102
|
|
Title: 抽象的ですいません…
|
|
こんばんは、あ〜るです
今、背景を付けるところで、無事背景を付けることは出来たんですけど、何故か画面の上(だいたい40〜50くらい)のところで、弾の画像と背景の画像が重なるとぶれるというか歪むというか、なんかその40〜50くらいの座標で横一直線に画像が変になります
凄く抽象的な表現しか出来なくて申し訳ございません
何か、これじゃないかな?と思う理由があったら教えて下さい
コンパイラはBCCでWindowsXPです
176ポイント を手に入れた。
|
|
|
|
Name: あ〜る ..入門者(4,725ポイント)
Date: 2009/04/12(日) 22:59
No:32108
|
|
Title: Re:抽象的ですいません…
|
|
あと、書き忘れたんですけど、画面が変になるのは弾の画像だけで自機の画像や敵の画像が、その変になるところにあっても、全く変化はありません
52ポイント を落としてしまった。
|
|
|
|
|
Name: dic ..上級者(17,846ポイント)
Date: 2009/04/13(月) 03:36
No:32118
|
|
Title: Re:抽象的ですいません…
|
|
変になるとは具体的に何がどうなるのでしょうか?
>何故か画面の上(だいたい40〜50くらい)のところで
とありますが40〜50とはいったい何の数値でしょうか?
47ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..プログラマー(25,740ポイント)
Date: 2009/04/13(月) 04:59
No:32120
|
|
Title: Re:抽象的ですいません…
|
|
>>あ〜るさん
確かにこの情報だけならどのような症状か見当がつかないので、
もし宜しければ、その症状が再現された画像を PrintScreen を使って掲示するか、
問題だと思われるソースを掲示してみては如何でしょうか。
66ポイント を手に入れた。
|
|
|
|
|
Name: Ma ..初心者(5,762ポイント)
Date: 2009/04/13(月) 07:16
No:32122
|
|
Title: Re:抽象的ですいません…
|
|
>とありますが40〜50とはいったい何の数値でしょうか?
恐らく画面上のy座標のことかと・・
私も、その異常をキャプチャするかソースを記するべきだと思いますよ。
54ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..初心者(5,120ポイント)
Date: 2009/04/13(月) 21:04
No:32151
|
|
Title: Re:抽象的ですいません…
|
|
皆さんに言われた通り、PrintScreenで画像を貼ろうとしたんですが、どうしても上手く変になってる画像が撮れませんでした
というか、弾が止まってる時は、特に異常がないみたいです
ALTキーを押すと、止まるじゃないですか?それで何度も止めて確かめてみたんですけど問題はありませんでした
また、敵や自機、敵の弾では変になることはありませんでした
それで考えたんですけど、もしかしたら高速で動く画像(だいたい背景は龍神録一面の10倍の速さでスクロール、弾の速さは30です)が重なったせいで画像に何か影響が出てるんじゃないかと思うんですけど、どうでしょうか?
ソースはこのサイトのものをそのままいじっていません
変になるっていうのは、画像にそのY座標40〜50ぐらいに横一直線にノイズが走るというか、画像がぶれるというか…上手く言えなくてすいません…
相変わらずはっきりしないんですけど、僕もどうすればいいかわからず、困っています
少しでも気になった事や気付いた事があれば教えて頂けると嬉しいです
395ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..初心者(5,293ポイント)
Date: 2009/04/13(月) 21:14
No:32152
|
|
Title: Re:抽象的ですいません…
|
|
試しに背景画像を消してみたところ、それでも変になったので、上で僕が書いたのは原因ではないようです
しかし、周りのフレーム部分(タイトルとか得点とかが入る部分)を消してみたところ、特に何も起きなくなりました
龍神録では周りのフレームを何枚かの画像に分割して描画していますが、僕は自作の絵で一枚だけで描画しています
もしかして、大きな画像を描画する事によって何か影響が出たりはしないでしょうか?
173ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..初心者(5,236ポイント)
Date: 2009/04/13(月) 21:50
No:32158
|
|
Title: Re:抽象的ですいません…
|
|
フルスクリーンにしたら問題無く動きました
ちょっと垂直動機について見てみます
ありがとうございました!
57ポイント を落としてしまった。
|
|
|
|
Name: taizyu ..ぴよぴよ(220ポイント)
Date: 2009/04/13(月) 19:48
No:32146
|
|
Title: DXライブラリの設定で・・・
|
|
VisualC++ 2008 Express Edition を使用した場合のDXライブラリの使い方
に書いてある通り設定を行いましたが(何回も確認してちゃんとやったつもりです)、プログラムを実行すると
ビルドエラーが発生しました。続行して、最後に成功したビルドを実行しますか?と出ます。
これを はい と答えると別に問題なくプログラムは実行できるのですがプログラムを実行すると毎回出るのでちょっと気になってます。これは無視してていいのでしょうか?
ビルドを行うと↓のようなエラーがでますが、どうすればいいのかわかりません。
error PRJ0003 : 'cmd.exe' の起動中にエラーが発生しました。
220ポイント を手に入れた。
|
|
|
|
Name: MNS ..入門者(4,992ポイント)
Date: 2009/04/13(月) 20:37
No:32149
|
|
Title: Re:DXライブラリの設定で・・・
|
|
憶測にすぎませんが、
プログラムを終了していない内に、再度実行している、ということはないでしょうか?
36ポイント を手に入れた。
|
|
|
|
|
Name: taizyu ..ぴよぴよ(284ポイント)
Date: 2009/04/13(月) 21:20
No:32153
|
|
Title: Re:DXライブラリの設定で・・・
|
|
MNSさんありがとうございます。
言われたことを注意して確認してみましたが、やっぱりエラーが発生しまいます。
64ポイント を手に入れた。
|
|
|
|
|
Name: taizyu ..ぴよぴよ(330ポイント)
Date: 2009/04/13(月) 21:41
No:32157
| 解決!
|
Title: Re:DXライブラリの設定で・・・
|
|
MNSさん
いえいえ答えてもらえただけでホントありがたいです。
サイトまで見つけてもらって、ありがとうございました。
がんばってみます。
追記
解決できました。ありがとうございました〜
46ポイント を手に入れた。
|
|
|
|
Name: sbc ..ぴよぴよ(531ポイント)
Date: 2009/04/13(月) 15:35
No:32128
|
|
Title: 敵画像を格納している二次元配列について
|
|
どうも初めまして、このサイトを読んでSTGを作り始めました。
STGとしての土台は概ね出来上がってきたあたりなのですが
どうしてもわからないことがあります。
第10章「敵を表示させてみよう」においてGV.hで
GLOBAL int img_enemy[3][9];//敵画像9枚分 X3体分
として敵(ザコ敵)の画像を格納する二次元配列を3体分宣言し、
load.cppのload()関数で
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
として画像を3*3に分割して敵1体あたり9枚の画像を
img_enemy[0]に読み込んでいるのですが
せっかくだから雑魚敵の種類をもっと増やそうと思い、
自前でドットを打って新しい雑魚敵の画像を数枚用意しました。
まずはGV.hを
GLOBAL int img_enemy[9][9];//敵画像9枚分 X3体分
と変更して、3体までしか用意していない敵画像格納用の配列を9体まで広げ、load()関数を
LoadDivGraph( "../dat/img/enemy/1.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[1] ) ;
LoadDivGraph( "../dat/img/enemy/2.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[2] ) ;
LoadDivGraph( "../dat/img/enemy/3.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[3] ) ;
(以下同様に続く)
というように行を追加していくことで
雑魚の種類を増やしていくことを試みたのですが
img_enemy[1]とimg_enemy[2]に新たに読み込んだ敵画像はきちんと表示されているのに
img_enemy[3]以降に読み込んだ敵画像が表示されません。
何もない空間から敵が弾を撃ってくるような感じになります。
用意した画像に問題があるのかもしれないと思い、試しにimg_enemy[3]に読み込んでいた画像を
img_enemy[2]に格納してみたところ、こちらは問題なく表示できました。
恐らく敵画像を格納する二次元配列まわりで何かミスや見落としをしているのではないかと思います。
このやり方で雑魚敵画像を増やしていくことは間違っているのでしょうか?
どなたか御教授をお願いします。
531ポイント を手に入れた。
|
|
|
|
Name: s-rush ..熟練のプログラマー(46,884ポイント)
Date: 2009/04/13(月) 15:50
No:32129
|
|
Title: Re:敵画像を格納している二次元配列について
|
|
>>用意した画像に問題があるのかもしれないと思い、試しにimg_enemy[3]に読み込んでいた画像を
>>img_enemy[2]に格納してみたところ、こちらは問題なく表示できました。
ということから、ロードする画像のパスは間違ってはいないようですね。
ちなみに敵を描画する関数は変更しましたか?
敵の描画にfor文を使っているようですが、その繰り返し処理を行う条件も変更する必要がありますよ。
defineでENEMY_MAXを定義しているので、その値を3から9に変更すれば、
追加分の敵も表示されると思います。
127ポイント を手に入れた。
|
|
|
|
|
Name: sbc ..ぴよぴよ(780ポイント)
Date: 2009/04/13(月) 18:07
No:32133
|
|
Title: Re:敵画像を格納している二次元配列について
|
|
>s-rushさん
せっかく回答を頂いたところを申し訳ありません。
今現在、敵を描画する関数graph_enemy()は一切変更しておらず
void graph_enemy(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy[i].flag==1){
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[enemy[i].knd][enemy[i].img],TRUE);
}
}
}
という状態ですが、define.hで定義され、敵描画のfor文条件にもなっているENEMY_MAXは
「画面に一度に出現できる敵の最大数」なので、
img_enemy[3]以降に格納されている画像を表示できないという問題に関係しているとは思えないのですが。
249ポイント を手に入れた。
|
|
|
|
|
Name: sbc ..ぴよぴよ(926ポイント)
Date: 2009/04/13(月) 18:15
No:32135
|
|
Title: Re:敵画像を格納している二次元配列について
|
|
追記:
<pre>を使うと自動的に字下げされると思って左寄せでコードを書いてしまいました。
読みにくいコードになってしまい申し訳ありません。
2倍のポイントを手に入れた! 146ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..プログラマー(25,920ポイント)
Date: 2009/04/13(月) 18:21
No:32136
|
|
Title: Re:敵画像を格納している二次元配列について
|
|
>>sbcさん
DrawRotaGraphFが何をする関数なのかはDxLib知らないのでよく解りませんが
画像を描画する関数だという前提で話を続けます。
>「画面に一度に出現できる敵の最大数」
と書かれていますが、
>for(i=0; i<ENEMY_MAX; i++)
>if(enemy[i].flag==1){
ここの処理を見てみるとENEMY_MAXが使われています。
s-rushさんも仰っていますが、ENEMY_MAXは「描画したい数の9」になっていますか?
ENEMY_MAXが3であれば繰り返し文であるforは三回ループするだけで
[0][1][2]までは表示されますが、[3]以降は表示されません。
180ポイント を手に入れた。
|
|
|
|
|
Name: sbc ..かけだし(1,277ポイント)
Date: 2009/04/13(月) 18:43
No:32138
|
|
Title: Re:敵画像を格納している二次元配列について
|
|
>BEMANIさん
今のソースではdefine.hではENEMY_MAXは
#define ENEMY_MAX 30
読み込んだ画像が表示されなくて苦労しているimg_enemy[9][9]という2次元配列は
敵1体1体の持つ「knd」というメンバと向いている方向などから決まる「img」という2つのメンバから
どの画像を敵の座標位置に表示するかを取ってくるための2次元配列です。
graph_enemy()において
>for(i=0; i<ENEMY_MAX; i++)
>if(enemy[i].flag==1){
となっているのは、今出現している敵すべてに対してフラグが立っているかをチェックし、
フラグが立っているのなら
img_enemy[enemy[i].knd][enemy[i].img]
をその敵の位置に表示する。
という処理のための条件分岐であり、用意されている敵画像の種類とは関係がないのでは?
と言いたかったのですが。
351ポイント を手に入れた。
|
|
|
|
|
Name: sbc ..かけだし(1,375ポイント)
Date: 2009/04/13(月) 19:02
No:32139
| 解決!
|
Title: Re:敵画像を格納している二次元配列について
|
|
すみません。いまだに何が原因なのかよくわからないのですが
解決法がわからないからと色々試行錯誤していたらimg_enemy[3]以降に格納された
画像を参照したときもきちんと表示されるようになりました。
表示できていなかったときと本当にソースは全くいじっていないはずなのですが…
ともかく無事解決できました。ご意見、ご回答を下さった方々ありがとうございました。
98ポイント を手に入れた。
|
|
|
|
Name: kerotan0820 ..初心者(5,659ポイント)
Date: 2009/04/12(日) 13:12
No:32076
|
|
Title: 変数の使い方について
|
|
”色を指定して線・円・四角形を表示する”という単元でひとつ気になったことがあります。
”White,Red,G_Blue”などを宣言する際に
int White,Red,G_Blue
とまとめて記述してありますが、このような形で今後も行っていっていいのでしょうか
というのは僕は今まで
int White
int Red
int G_Blue
などと分けて記述しないといけないとおもっていたので・・・
そのプログラムは以下のものです
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
int White,Red,G_Blue;
White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
Red = GetColor( 255 , 0 , 0 ) ; // 赤色の値を取得
G_Blue = GetColor( 0 , 255 , 255 ) ; // 緑と青の混合色の値を取得
DrawLine ( 10 , 10 , 630 , 10 , White ) ; // 線を描画
DrawBox ( 10 , 50 , 310 , 100 , G_Blue , FALSE) ; // 四角形を描画
DrawBox ( 10 , 150 , 310 , 200 , G_Blue , TRUE ) ; // 四角形を描画(塗りつぶし)
DrawCircle( 500 , 300 , 100 , Red , TRUE) ; // 円を描画(塗りつぶし)
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
697ポイント を手に入れた。
|
|
|
Name: kerotan0820 ..初心者(5,776ポイント)
Date: 2009/04/12(日) 13:43
No:32079
|
|
Title: ブログで書かれたコメントについての悩み
|
|
場違いですがもしよろしければ聞いてくださると幸いです。
僕のブログで、"お前みたいなのは失敗する""お前が1年かけて勉強した内容は職場で1ヶ月働いて覚える範囲と同じ、学校の勉強やってるほうが何倍もましだ"
などといわれとても傷ついています。
僕は地道に力をつければいずれその結果が見えるとおもってやってるのですが、上記のような意見が正しいのでしょうか。
確かに学力はほとんどなく、そちらを重視するべき環境に僕はいます。
ですが… このような作業も続けたい…
しかも上記の意見を僕に言ってきた方はSEの方みたいですしとてもなんか重みがありました。
よくお前みたいなのいるわ 転職するのが落ちみたいなことも言われました。
僕は今勉強しても無駄なのでしょうか(DXライブラリなど
(2009/4/12 タイトルを本文の内容が解るものに変更しました)
102ポイント を手に入れた。
|
|
|
|
Name: kerotan0820 ..初心者(5,786ポイント)
Date: 2009/04/12(日) 14:17
No:32081
| 解決!
|
Title: Re:相当場違いですが・・・
|
|
僕はやはりゲーム政策に向けた地道な勉強はやめない方針で行こうとおもっています
もちろん学校での勉強もやります
まだ初心者なのでこれから多数の質問をするかもしれませんがよろしくお願いします。
自分で調べたりは一応したりしてみます。
10ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,015,435ポイント)
Date: 2009/04/12(日) 14:57
No:32083
|
|
Title: Re:相当場違いですが・・・
|
|
まず、ネット上の書き込みは間に受けないことですよ^^
質問者さんは中学生ということですよね。中学生がプログラムをやっているというだけで一般的なプログラマーよりも数段進んでいますよ!
私なんてはじめたの大人になってからですから・・。
ネット上には色んな人がいます。
学校にも色んな人がいるんじゃないでしょうか?
・イジメっ子
・イジメられっ子
・いつも一人で行動する子
・目立とうとして場にそぐわない事をする子
・・・などなど
学校という領域を超えるともっと色んな人がいます。
日本人全員が人の事をきちんと考えて行動する人間ばかりのはずがありません。
むしろネットは「匿名」であることから、自分の思ったことを言いたい放題言って去るということができるので
心無い言葉が集まりがちです。
ですからネットの書き込みは自分が信用できると思った書き込み以外頭に入れないようにして下さい。
先ほども言いましたが、その年齢でプログラムを始める人は全体で見るとかなり少ないです。
中学のうちからプログラムを勉強して行けば将来相当なプログラマーになるでしょう。
重要なのは自分がそれを好きかどうかです。
私はkerotan0820さんの事をよく存じないのでいいアドバイスが出来ませんが、
何がお好きですか?
逆に学校の勉強で何が嫌いですか?
じゃたとえ話をする為にゲームAが好きで、学校では算数が嫌いだったとしましょう。
嫌いな算数は小学校から9年間も習っているのになっかなか頭に入ってこないと思います。
一方でゲームAは誰かに教えてもらったわけでもないのにドンドン知識が深くなっていったことでしょう。
「好きであること」は何より大事なことで、好きであればドンドン成長します。
それに中学・高校という時期は好きなことを好きなだけやって許される時期です。
せっかくお父さんやお母さんが働いて確保してくれているこの貴重な自由な時間です。
自分の思う存分好きなことに熱中して下さい。
ブログで書き込まれたようなことを真に受けないで、
自分が好きなことを好きなだけやり、楽しみながら成長し、
そんなつまらない書き込みをした奴を見返してやりましょう!
誰でも必ず成長します!
中学の頃から趣味でやり続けてきた知識は
就職して1カ月で越えられるなんて事はまずありません。
頑張って下さい^^
642ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..入門者(4,601ポイント)
Date: 2009/04/12(日) 15:14
No:32084
|
|
Title: Re:相当場違いですが・・・
|
|
僕も初心者ですけど、自分なりに今思ってる事を書いてみたり
因みに僕は最近高一になりました
個人的にこの年齢でC言語を勉強する事は、必ずしも無駄ではないと思っています
職場の一ヶ月と同じ?当たり前です
仕事として、一日中使って集中して勉強して、周りにはプロの人達がいっぱいいるのと、学生という身分で、スキマの時間を使って地道に勉強するのでは環境が違いすぎます(流石に一ヶ月はないと思いますが…)
しかし、その人は失敗すると言っていますが、僕の考えではプログラミングに限らず、自分の手で何かを作る事自体に意義があると思います
それは必ずしも技術の向上に繋がるとは言えないですけど、例えばゲームだったらゲームが動く一連の流れや、あとは、いかにゲームを作るのが大変か、などがわかると思います
そしてそれ以外に、自分の心、気持ちに何かしらの影響があると思います。
部活とかでも、大人になってから中学の時やっていた部活と関係ない仕事をやっているからといって、中学の時の部活が無駄になったと言えるでしょうか?きっと大多数の人がNOというと思います。
自分がやった事、特に若い頃にやった事はその後の自分の形成にとても関わってくると思います
なので、今kerotan0820さんがプログラミングをやりたいなら、僕はやればいいと思います
それがどうゆう結果を残すかなんて誰にもわからないのですから
それに、僕からすれば中2の頃からプログラミングの勉強を始められてるって事自体が羨ましいですし
あぁ僕ももっとはやく勉強し始めてれば…
長くなっちゃいましたが、こんな拙くて稚拙な文でも、少しでも助けになれば嬉しいです。
あ、あと勉強はしないと駄目ですよ(笑)
506ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..プログラマー(26,341ポイント)
Date: 2009/04/12(日) 17:45
No:32097
|
|
Title: Re:相当場違いですが・・・
|
|
件の書き込みを拝見しましたが、プロバイダに通報するような悪質なものでは
ないと、私は思います。ちょっと辛口の意見という程度で、特に辛辣でもない。
その書き込みのみから判断すると、目的は非難ではなくアドバイスであると思います。
批判を受けたくないのならば情報を発信してはいけません。
悪質な書き込みを削除したりスルーしたりするスキルも必要でしょう。
52ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがり ..上級者(15,660ポイント)
Date: 2009/04/12(日) 19:43
No:32099
|
|
Title: Re:相当場違いですが・・・
|
|
私も見てみましたが、大した批判コメントじゃないですね。
むしろあり難いアドバイスといった感じ。
ブログの内容がC言語の基本を全く理解していない状態で
「2週間アニメばかりみまくってます」
「3Dの勉強始めました」
「3Dの勉強やめました」
のような感じであれば辛口コメントも付いておかしくない。
たいちうさんが書かれている通り、自分が公の場に情報を発信しているからには、
何らかの刺激を受けるはず。それに耐えられないなら発信すべきではありません。
それに自分のブログにこちらのHPのソースコードをコピーしているようですが、
規約が守られていないようですね。
こちらの掲示板の利用の際も規約が守られていませんし、
PCの知識やC言語の知識を増やそうとする前に、常識的な行動が取れるようにすることが先です。
172ポイント を手に入れた。
|
|
|
|
|
Name: dic ..上級者(17,799ポイント)
Date: 2009/04/12(日) 20:17
No:32100
|
|
Title: Re:相当場違いですが・・・
|
|
勉強をしておいて不利になることはひとつもありません
センター試験
最後のたのみは自分自身のこれまでの努力の結果です
どうか くじけずに勉学に励んでください
70ポイント を手に入れた。
|
|
|
|
|
Name: conio [URL] ..中級者(14,085ポイント)
Date: 2009/04/12(日) 20:54
No:32101
|
|
Title: Re:相当場違いですが・・・
|
|
以前、そういうやりとりをいくつか見たことがあります。
状況にもよると思いますが、自分が見たのはこんな感じでした。
------------------------------------------------------------------------------
●東大を目指している人のブログ
勉強を殆どせず「東大へ行きたい」と理想のみを書いていたので
『そんな勉強方法じゃ無理』と批判のコメントが出る。
●他の質問サイトでの質問
「3年間、C言語について勉強してきました。」とは言うものの、
for文が分からない、while文が分からないと言っていたため、
『3年間勉強したとは思えない。一体何をやってきたのか』と同じように批判のコメント。
------------------------------------------------------------------------------
まぁ、批判があっても気にしない方が良いと思います。
自分は大学から勉強し始めましたので、時期的には早いと思いますよ。
逆に考えれば、「1ヶ月分は既に身についている」という事です。
318ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..初心者(6,192ポイント)
Date: 2009/04/12(日) 22:39
No:32105
| 解決!
|
Title: Re:相当場違いですが・・・
|
|
ありがとうございます…
確かにそう考えると事実上僕は1年前後やっていながらも1ヶ月範囲の実力しかついていないとなると一体何をやっていたのかという意見が出るのもわかる気がします。
1ヶ月分はすでに身についているという言葉でなんかすごい慰められました。
がんばりたいとおもいます。
有難うございました。
93ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(96,197ポイント)
Date: 2009/04/12(日) 23:17
No:32110
|
|
Title: Re:相当場違いですが・・・
|
|
職場で1ヶ月働くということは、残業無しとして単純計算すると160時間程度稼動するということです。
これに対して、週末に数時間勉強する程度であれば、1週間あたり3時間とすると...
3時間 × 52週 = 156時間
で、時間的には大体同じになります。
ただし、週に3時間程度だと、その都度忘れますので効率はあまりよくありません。
それに対して、仕事の場合は、C言語の勉強ばかりをやっているわけではないので、すべての時間をそれに当てるわけではありません。
そう考えると、同程度になるのも分かる気がします。
221ポイント を手に入れた。
|
|
|
|
Name: ヒロ ..入門者(3,555ポイント)
Date: 2009/04/12(日) 22:26
No:32104
|
|
Title: プロジェクト24章でエラー
|
|
前回はありがとうございました。
今回は24章でエラーが発生しました。
新しく追加したboss_shot.cppの112行目(下から5行目)の「boss_shot_bullet[boss.knd]();//弾幕関数へ」の行に「error C2064: 0 引数を取り込む関数には評価されません。」と表示されてしまいます。
基本的なところはいじってないつもりです。
VC2008を利用しています。
ご指導よろしくお願いします!
105ポイント を手に入れた。
|
|
|
Name: 雷公零 ..ぴよぴよ(354ポイント)
Date: 2009/04/11(土) 12:29
No:32006
|
|
Title: ポリゴンを表示したいのですが・・・・
|
|
ココで勉強させていただいております雷公零と申します。
今回は、このサイト以外での質問でまことに申し上げにくいのですが
DirectX SDKを使い、ポリゴンを描画したり動かしたりしたいと思って(DX3Dがなくなったので;)
いろいろ調べてみたら0からのゲームプログラミングに出会いました。
http://www.plustarnet.com/aspil/Programming/
ここで、スケルトンプログラムをDLして、サイトの説明どおりやったのですが
エラーが出てしまいました。
1>c:\users\sousi\desktop\skeletonprogram\skeleton\header\Music.h(18) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
1>ScreenInit.cpp
と言うものです。
コンパイラはMicrosoft Visual C++ 2008 Express Editionを使っています。
DirectX SDKのリンクが上記のサイトでは切れていたので
MicrosoftからDirectX SDK (November 2008) 公開中 (英語)
と言うのをDLしました。
原因がわかる方、宜しくお願いします
354ポイント を手に入れた。
|
|
|
|
Name: 雷公零 ..ぴよぴよ(874ポイント)
Date: 2009/04/11(土) 15:52
No:32019
|
|
Title: Re:ポリゴンを表示したいのですが・・・・
|
|
Mistさんの仰るとおりにしたら先に進んだのは進んだのですが・・・
作成時期が古いせいなのか、
1>c:\users\sousi\desktop\skeletonprogram\header\..\Skeleton\Header\DllMain.h(291) : error C2383: 'SkeletonPVertexSet' : 既定の引数をこのシンボルで使用できません。
このように表示されます。
調べたところ、
コンパイラ エラー C2383
エラー メッセージ
'symbol'' : 既定の引数をこのシンボルで使用できません。
C++ コンパイラでは、関数へのポインタに既定の引数は使用できません。
このコードは、以前のバージョンのコンパイラでは許容されましたが、現在はエラーになります。すべてのバージョンの Visual C++ で動作するコードを作成するには、関数へのポインタの引数に既定の値を代入しないでください。
との事なので、エラー数が150ほど出てしまい、使い物にならない状態でした。
0からのゲームプログラミング
のようにSDKを使ったゲーム作成方法を紹介しているサイトはご存じないでしょうか?
(SDKで3Dを描画、動かすだけでもいいので)
何度も申し訳ありません。
宜しくお願いいたします。
2倍のポイントを手に入れた! 520ポイント を手に入れた。
|
|
|
|
|
Name: Ma ..初心者(5,527ポイント)
Date: 2009/04/11(土) 22:46
No:32048
|
|
Title: Re:ポリゴンを表示したいのですが・・・・
|
|
良い機会なので、自分も挑戦してみましたが、(BCC Developer使用)
icrosoftからDirectX SDK (November 2008) 公開中 (英語)
をインストールして、指示通りに
スケルトンのソース、ヘッダすべて入れて、
プロジェクト設定で、コンパイル3にてインクルードパスに、SDKのInclude を指定して
いざ!
エラー E2209 Z:\forCuse\BCC55\Include\dmusicc.h 20: インクルードファイル 'dls1.h' をオープンできない
^^;
自分も無理でした。orz
質問者ではないですけど、自分もなんとか解決したいと思ってます。
>SooA 様
>http://rina.jpn.ph/~rance/
Xファイルからの3D描画って、どの章にありますか?
237ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..上級者(15,601ポイント)
Date: 2009/04/11(土) 23:10
No:32051
|
|
Title: Re:ポリゴンを表示したいのですが・・・・
|
|
> Xファイルからの3D描画って、どの章にありますか?
貼ってあるURL先は2Dベースです。
雷公零さんの場合が DirectX の組み込み問題でしたので
内容を理解しながら DirectX を組み込んでいって下さい。
といった意味で貼ってあります。
79ポイント を落としてしまった。
|
|
|
|
|
Name: 雷公零 ..ぴよぴよ(991ポイント)
Date: 2009/04/12(日) 00:25
No:32055
|
|
Title: Re:ポリゴンを表示したいのですが・・・・
|
|
やはり、DirectX SDKとかDirectXを理解していかないとゲームは作れないんですかね^^;
DXライブラリのように3Dを描画するライブラリが少ないのは単にSDK自体がライブラリだから
のようですね;
本を買っても無用のちょうぶつになりかねませんし、高いですし;
DXライブラリ以上のゴチャゴチャした者は見るだけでやる気無くすのが難点^^;
とりあえず今回のことを期にSooAさんに教わったサイトでDXライブラリを使わずなんとか
がんばっていこうと思います。
117ポイント を手に入れた。
|
|
|
|
|
Name: Ma ..初心者(5,708ポイント)
Date: 2009/04/12(日) 02:05
No:32058
|
|
Title: Re:ポリゴンを表示したいのですが・・・・
|
|
>雷公零さんの場合が DirectX の組み込み問題でしたので
>内容を理解しながら DirectX を組み込んでいって下さい。
>といった意味で貼ってあります。
勘違いでした。すみません。
>やはり、DirectX SDKとかDirectXを理解していかないとゲームは作れないんですかね^^;
他の3D系のライブラリを探してみたのですが、
SimpleX
http://www.geocities.jp/yuetake/index.html
すでにご存知ならすみません<(_ _)>
こちらのライブラリで、簡単に3Dゲームを作れるようです。
DirextX や SDK をまったく知らない自分でも、簡単に3Dゲームが作れました。
ただし細かい当たり判定など、複雑な事はできないようですが…
156ポイント を手に入れた。
|
|
|
|
|
Name: 雷公零 ..かけだし(1,251ポイント)
Date: 2009/04/12(日) 12:59
No:32075
| 解決!
|
Title: Re:ポリゴンを表示したいのですが・・・・
|
|
Maさん
わざわざ試してみてくださったんですね^^
けど、やはり古いのが原因かうまくいかないんですよね。
わざわざありがとうございました。
>他の3D系のライブラリを探してみたのですが、
>SimpleX
>http://www.geocities.jp/yuetake/index.html
>すでにご存知ならすみません<(_ _)>
サイトを少し見てきましたが、DX3Dに近いライブラリのようですね^^
あんだけ探したのに見つからなかった自分が情けない;
情報提供助かりました、ありがとうございました
SooAさん
サンプルや参考を教えていただきありがとうございました。
とてもありがたいです。
>その他
>DXライブラリ本家でも3Dライブラリの作成を
>進めている話が出ているので2Dで覚えつつ気長に待つ。
DXライブラリに3Dですか!
それは、初耳です。確かDXライブラリ3DはDXの作者と違うと
聞いたことはありますが・・・
楽しみですね^^
皆様、丁寧な回答ありがとうございました。
また、躓いた時に質問に来るかもしれませんがそのときは
宜しくお願いします^^
260ポイント を手に入れた。
|
|
|
|
|
Name: nayo ..中級者(10,624ポイント)
Date: 2009/04/12(日) 18:03
No:32098
|
|
Title: Re:ポリゴンを表示したいのですが・・・・
|
|
もう解決してますが私も同じ失敗がありましたね
DirectX SDKのAugust 2007より後のDirectX SDKだとdmusici.hが無いと聞いたことがありますね
もうすでに試したかもしれませんがこちらのAusust 2007をインストールした後、
Visual C++のインクルードファイル、ライブラリファイルそれぞれパスを通してみるとできるかもしれません
#追記
ああ、すでにMistさんが答えてましたね
申し訳ないです
DirectXをやろうと思うなら何か書籍を買うのが一番手っ取り早い気がします
また、やり方は一つだけではないので、はじめはいろんな方のDirectXのサンプルを見ながら気に入った物を
自分のプログラムに取り込んでいけばいいかな、と思います
3Dを動かすだけでいいならDirectX SDKにはじめからサンプルが入っているのでそのプログラムを実行してみるのも手かもしれません
119ポイント を手に入れた。
|
|
|
|
Name: tororo ..ぴよぴよ(927ポイント)
Date: 2009/04/12(日) 15:24
No:32085
|
|
Title: 画像表示
|
|
おひさしぶりですtororoです
さっそく質問なんですが
#include "DxLib.h"
int aaa = LoadGraph("JIKI.bmp");
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;
DrawGraph(200, 200, aaa, TRUE);
WaitKey();
DxLib_End();
return 0;
}
このコードで画像を表示しようとすると
ウィンドウは表示できても画像が表示できません
画像ファイルはソリューソンファイルと同じ所にあります
気になるのはlogテキストに1268: 周期的エフェクトの作成に失敗しました。と
書いてある事です
ご回答お願いします
372ポイント を手に入れた。
|
|
|
|
Name: Mist ..熟練のプログラマー(59,166ポイント)
Date: 2009/04/12(日) 15:36
No:32086
|
|
Title: Re:画像表示
|
|
> int aaa = LoadGraph("JIKI.bmp");
こんなことはできません。
LoadGraphはDxLib_Initの実行よりも後でないと正常に動作しません。
26ポイント を手に入れた。
|
|
|
|
Name: debt ..ぴよぴよ(34ポイント)
Date: 2009/04/11(土) 14:10
No:32010
|
|
Title: すいません
|
|
トップのメールフォームでメールを送信するとNot found
と出るのは、自分だけでしょうか?
違ったらすいません
34ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(339,675ポイント)
Date: 2009/04/11(土) 15:17
No:32013
|
|
Title: Re:すいません
|
|
使っているサービスがリニューアルして、終了してしまっているようですね。
多分そのせいではないかと。
旧 無料フォームメーラー サービス終了のお知らせ お知らせ
レンタルサーバー/ホスティングサービス フューチャースピリッツ
ttp://www.future-s.com/info/2008/12/post_12.html
142ポイント を手に入れた。
|
|
|
|
|
Name: debt ..ぴよぴよ(75ポイント)
Date: 2009/04/12(日) 08:42
No:32060
|
|
Title: Re:すいません
|
|
ありがとうございます
では、管理人さんにメールするにはどうしたらいいですか?
41ポイント を手に入れた。
|
|
|
|
|
Name: debt ..ぴよぴよ(114ポイント)
Date: 2009/04/12(日) 12:53
No:32074
| 解決!
|
Title: Re:すいません
|
|
新設置ありがとうございます
>>朽木さん
すいません、見落としてました^^;
39ポイント を手に入れた。
|
|
|
|
Name: FG ..ぴよぴよ(148ポイント)
Date: 2009/04/11(土) 21:56
No:32046
|
|
Title: 龍神録プログラミングの館 第二章について
|
|
第二章「まずは実行させてみよう」
にあるとおり、main.cppを変更したのですが、実行してもエラーが表示されて実行されません。
コピー&ペーストで変更したので、タイプミスなどは無いはずです。
出力を見てみると「fatal error C1083: include ファイルを開けません。'../../../include/DxLib.h': No such file or directory shot.cpp」という表記がありました。
これは何を意味しており、どのようにすると改善できるのでしょうか?
質問に不備等がありましたらご指摘ください。
169ポイント を落としてしまった。
|
|
|
|
Name: FG ..ぴよぴよ(330ポイント)
Date: 2009/04/12(日) 11:14
No:32069
|
|
Title: Re:龍神録プログラミングの館 第二章について
|
|
おかげ様で無事解決することができました
プロジェクトをダウンロードして解凍した際に「include」フォルダが生成されていなくて気づくことができませんでした
ありがとうございました
2倍のポイントを手に入れた! 182ポイント を手に入れた。
|
|
|
|
Name: TTR ..ぴよぴよ(103ポイント)
Date: 2009/04/09(木) 13:47
No:31933
|
|
Title: 龍神録の敵の当たり判定について
|
|
50章までのプログラムみたのですが
敵自体には当たり判定をつけないのが仕様なのでしょうか?
それと、龍神録本体もやってみたのですが
フルサイズじゃないときに右上の×を押しても
消えないのは仕様なのでしょうか?
ご面倒ですが教えていただけたら幸いです
(2009/4/12 10:00管理人によりタイトルが変更されました)
103ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,013,847ポイント)
Date: 2009/04/09(木) 19:21
No:31942
|
|
Title: Re:色々と
|
|
敵の当たり判定は18章で付けていますので、
18章以降のサンプルでは敵が消滅すると思います。
50章のプログラムをご覧いただけているようですので、
敵にショットを撃てば敵は消えると思います。
龍神録は×ボタンでは消えません。
終了はメニューから行うか、
強制終了の場合はALT+F4かF10ボタンで可能です。
125ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(24,617ポイント)
Date: 2009/04/09(木) 19:38
No:31943
|
|
Title: Re:色々と
|
|
>Dixq様
本当に唯の推測ですが、敵と自機の弾の当たり判定ではなくて
敵とプレイヤーの当たり判定のことかな?
間違っていたらすみません;
>仕様なのでしょうか?
龍神録プラスの方では当たり判定がありますが、
龍神録の館の方ではありませんね。
仕様だと思います。
109ポイント を落としてしまった。
|
|
|
|
|
Name: TTR ..ぴよぴよ(150ポイント)
Date: 2009/04/09(木) 23:56
No:31956
|
|
Title: Re:色々と
|
|
いえ、そのとおりです。言いたかったのはそれです。
敵とプレイヤーの当たり判定は作らなくてもいいのかなと思いまして・・・
47ポイント を手に入れた。
|
|
|
|
|
Name: TTR ..ぴよぴよ(194ポイント)
Date: 2009/04/11(土) 01:19
No:31996
|
|
Title: Re:色々と
|
|
出来れば・・・具体的に教えて頂けたらうれしいです・・
まだ、龍神録のプログラムがあまりよくわからないもので・・><
44ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,014,748ポイント)
Date: 2009/04/12(日) 10:26
No:32066
|
|
Title: Re:色々と
|
|
当たり判定の計算はout.cppで行われているので例えば18章をご覧下さい。
だいたいの流れがわかったら、21章をご覧下さい。
out_main関数から今から作る自作関数を呼びます。
例えば
敵と自機との接触判定()
という関数を作ったとしましょう。
総当りで敵と自機が接触しているかを調べます。
(敵の位置と自機の位置をピタゴラスの定理とかで判定すればいいだけです)
接触したら自機を死なせます。
自機を死なせる処理は21章のどこかにあるはずですよね?
それと全く同じ処理をしてやればOKです。
181ポイント を手に入れた。
|
|
|
|
Name: てぃっしゅ ..ぴよぴよ(11ポイント)
Date: 2009/04/11(土) 17:32
No:32027
|
|
Title: 龍神録をPSPに移して対戦は可能ですか?
|
|
初めまして、C言語のことじゃないですが・・・ 。
龍神禄をPSPに入れてやっているんですが、対戦機能って追加できませんかね?
(2009/4/12 10:00管理人によりタイトルが変更されました)
11ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(155,282ポイント)
Date: 2009/04/11(土) 18:52
No:32033
|
|
Title: Re:C言語のことじゃないですが・・・
|
|
努力してコードを解析して、自身で機能追加すれば、出来るんじゃないでしょうか?
頑張って♪(o^-')b
3ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,014,457ポイント)
Date: 2009/04/12(日) 10:18
No:32064
|
|
Title: Re:C言語のことじゃないですが・・・
|
|
>>てぃっしゅさん
龍神録で遊んで頂きありがとうございます。
そうですね〜、ステージの追加ならまだ可能性がありますが、
対戦機能を付けるとなるとかなりごっそりと機能を付けたさないといけないので、
今すぐにっていうのは難しいです。ごめんなさい。
ただ、ソースコードはオープンですし、C言語に興味がおありでしたら、
(こんな龍神録のようなコードでもよろしければ)改造されてみてはいかがでしょうか?
>>lbfuvabさん
ご配慮ありがとうございます^^
PSP版への移植や改造を今して頂いているようですが、私としては何か役に立ちたいと思っていますので
何でも気軽に質問していただけたらなと思っております。
コメントありがとうございました^^☆
306ポイント を手に入れた。
|
|
|
|
Name: bitter_orange ..ぴよぴよ(372ポイント)
Date: 2009/04/11(土) 21:26
No:32044
|
|
Title: DirectX9で2Dの質問です。
|
|
DirecX9.0cとC言語で現在シューティングゲームを制作しているのですが、画像が回転しません。
具体的には当たり判定を回転させたいと思っております。
D3DXMatrixRotationX()関数を使用しているのですが、画像が表示されなくなってしまいます。
D3DXMatrixRotationX()関数の部分をコメント分にすると、回転はしませんが表示されます。
OSは[Windows Vista]で開発環境は[Microsoft Visual C++ 2008 Express Edition]です。
プログラムは該当場所と思われる部分のプログラムのみです。
LPDIRECT3DDEVICE9 D3DDevice;
LPD3DXSPRITE D3DXSprite;
LPDIRECT3DTEXTURE9 tex;
とグローバルで定義してあり初期化等してあります。
VOID Render_T(VOID);
HRESULT Render_O(VOID)
{
// シーンの描画開始
if(SUCCEEDED(D3DDevice->BeginScene()))
{
// シーンの描画開始(スプライトの描画)
D3DXSprite->Begin(D3DXSPRITE_ALPHABLEND);
// 下の関数へ
Render_T();
// シーンの描画終了(スプライトの描画)
D3DXSprite->End();
// シーンの描画終了
D3DDevice->EndScene();
}
return D3DDevice->Present( NULL, NULL, NULL, NULL);
}
VOID Render_T(VOID)
{
D3DXMATRIX mr;
D3DXVECTOR3 pos(120.0F,410.0F,0.0F);
static FLOAT counter = 0;
FLOAT rot = counter * 3.14F / 180.0F;
counter += 1;
D3DXMatrixRotationY(&mr, D3DXToRadian(rot));
D3DXSprite->SetTransform(&mr);
D3DXSprite->Draw(tex, NULL, NULL, &pos, D3DCOLOR_XRGB(255,255,255));
}
とプログラミングしておりますがD3DXMatrixRotationY関数の使い方が間違っているのでしょうか?
それともこの部分以外が違っているのでしょうか?
何か他にもミスがあったらご指摘お願いします。
よろしくお願いします。
132ポイント を手に入れた。
|
|
|
|
Name: bitter_orange ..ぴよぴよ(582ポイント)
Date: 2009/04/11(土) 23:57
No:32054
|
|
Title: Re:DirectX9で2Dの質問です。
|
|
ご返信ありがとうございます。
3DXMatrixRotationXと3DXMatrixRotationYはタイプミスです。紛らわしいことをしてすみません。
D3DXToRadianは調べたら[3DXMatrixRotationZ(&... , D3DX_PI * x / 180)]で必要なかったですね。
プログラムですが、D3DXMatrixRotationZと_41及び_42(D3DXMatrixTranslation)を組み合わせることにより、
表示されるようになり回転もするようになりました。ありがとうございます。
しかし、テクスチャーの原点(左上)の座標を軸に回転してしまい、特定の位置で回転し続けるということができませんでした。
教えて頂いたサイトを見てもこれはよくわかりませんでした。
できれば、四聖龍神録Plusのあたり判定のように特定の位置で回転させたいのですがどのようにすればよいのでしょうか?
お願いします。
210ポイント を手に入れた。
|
|
|
|
|
Name: bitter_orange ..ぴよぴよ(587ポイント)
Date: 2009/04/12(日) 09:52
No:32062
| 解決!
|
Title: Re:DirectX9で2Dの質問です。
|
|
再びご返信ありがとうございます。
何度も試してみたら、画像のサイズを勘違いして中心のX,Y座標を違う場所にしているという単純なミスでした。
御津凪さん何度も本当にありがとうございました。
5ポイント を手に入れた。
|
|
|
|
Name: nayo ..中級者(10,392ポイント)
Date: 2009/04/11(土) 19:11
No:32035
|
|
Title: ヘッダファイルでの複数回定義の防止
|
|
パソコンが直ったのでまたゲーム製作を再開しようと思ったのですが
昔のプログラムを見てちょっと気になったので質問です
現在のプログラムではMyLib.hというヘッダファイル内で
#ifdef __MAIN__
MyLib mL;
#else
extern MyLib mL;
#endif と記述し、Main.cppというWinMain関数があるファイル内で
#define __MAIN__
として定義をし、そのあと
#include "MyLib.h"
とヘッダファイルをインクルード、
ほかのファイル内では__MAIN__を定義せず、ヘッダファイルをインクルード、
としているのですが、どのファイルでも
#include "MyLib.h"
の宣言だけで済ませてしまいたいな、と思いました
このようなことは可能なのでしょうか
些細なことですが何か方法があればをお教えいただけたら幸いです
264ポイント を手に入れた。
|
|
|
|
Name: SooA [URL] ..上級者(15,586ポイント)
Date: 2009/04/11(土) 19:23
No:32037
|
|
Title: Re:ヘッダファイルでの複数回定義の防止
|
|
> 龍神録プログラミングの館の5章で書いてくれています。
すみません。
書いてくれているのがそのやり方ですね。
最低限どの状態でアクセスされたか判別しなければ
いけないので、短く書くことはできても無くす方法は
ないと思います。
47ポイント を手に入れた。
|
|
|
|
|
Name: nayo ..中級者(10,453ポイント)
Date: 2009/04/11(土) 19:40
No:32039
| 解決!
|
Title: Re:ヘッダファイルでの複数回定義の防止
|
|
お早い回答ありがとうございます
>SooAさん
なるほど、やはり無理なのですね
勉強になりました
>御津凪さん
そのような方法があったのですか
ソースを公開するつもりがないなら便利そうですね
61ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(95,449ポイント)
Date: 2009/04/11(土) 22:07
No:32047
|
|
Title: Re:ヘッダファイルでの複数回定義の防止
|
|
解決になっているので、もう用なしかもしれませんが...
> どのファイルでも
> #include "MyLib.h"
> の宣言だけで済ませてしまいたいな、と思いました
> このようなことは可能なのでしょうか
可能です。
次のようにします。
inline MyLib& get_mL()
{
static MyLib mL;
return mL;
}
namespace
{
MyLib& mL = get_mL();
}
あとは、mLとして操作が可能になります。
58ポイント を手に入れた。
|
|
|
|
|
Name: nayo ..中級者(10,505ポイント)
Date: 2009/04/11(土) 23:16
No:32053
|
|
Title: Re:ヘッダファイルでの複数回定義の防止
|
|
>たかぎさん
おお、このような方法があるのですか
経験の差というか、プロと私のような素人の差を感じますね
遅くなりましたがどうもありがとうございます
52ポイント を手に入れた。
|
|
|
|
Name: 煌 ..ぴよぴよ(600ポイント)
Date: 2009/04/11(土) 19:55
No:32040
|
|
Title: GLOBAL_INSTANCEの意味は?
|
|
#define GLOBAL_INSTANCE
これの意味が知りたくてググってみた結果、「定数を定義するには、#define文を利用する。」、「定数とはGLOBAL_INSTANCEのことである」と考えました。
が、GLOBAL_INSTANCEという意味が分かりません。
どういう意味なのか教えてくださると幸いです。よろしくお願いします。
(2009/4/12 10:00管理人によりタイトルが変更されました)
2倍のポイントを手に入れた! 258ポイント を手に入れた。
|
|
|
|
Name: Ma ..初心者(5,552ポイント)
Date: 2009/04/11(土) 23:01
No:32049
|
|
Title: Re:時間のある方で結構なので回答願います。
|
|
>定数とはGLOBAL_INSTANCEのことである
正確には、定数の名前が GLOBAL_INSTANCE です。
#define <定数の名前> <定数の値>
この用に使いますが、
#define GLOBAL_INSTANCE
の場合、定数の値には何もありません。無です。
(ちなみに定数の値は、文字でも数字でも可)
つまり、コード中に この文字列「GLOBAL_INSTANCE」を見つけたら、その定義された値に入れ替える
という意味になるのですが、#define で定義した値は何もないので、実質 「GLOBAL_INSTANCE」を書かない状態と等しいです。
ですがもし、#define GLOBAL_INSTANCE extern
と定義しなおした場合、
「GLOBAL_INSTANCE」 は 「extern」 と書いた状態と等しい事になります。
ただ、 GLOBAL_INSTANCE の英語の意味を聞いていたのでしたらすいません。
25ポイント を手に入れた。
|
|
|
|
|
Name: 刻の旅人 ..ぴよぴよ(246ポイント)
Date: 2009/04/11(土) 23:09
No:32050
|
|
Title: Re:時間のある方で結構なので回答願います。
|
|
dicさんも書いていますが、性質は、どの関数の中からでもアクセスできる定数です。
#define 定数名 数値
という形式をとるわけですが、この”定数名”には具体的な(わかりやすい)名前をいれるはずです。
(例えば円周率であれば #define PI 3.1415 の "PI" みたいに)
その”具体的”というのが、INSTANCE の意味になります。
GLOBAL は、”全体的な”でいいと思います。
まぁ、要するに、”どこでも使える定数”です。
”NULL ”ってありますよね? あれを自分で作るようなものです。
246ポイント を手に入れた。
|
|
|
|
|
Name: 煌 ..ぴよぴよ(503ポイント)
Date: 2009/04/11(土) 23:14
No:32052
| 解決!
|
Title: Re:時間のある方で結構なので回答願います。
|
|
>dic様
サイトを拝見させていただきました。
こんなにいいサイトがあるとは、思っていませんでした。
お気に入りに追加させていただきました。ありがとうございます。
>Ma様
大変分かりやすい説明有難うございました。
これでやっとプログラミングに集中できそうです。
本当に有難うございました。
>刻の旅人様
さらに詳しい解説、貴重なアドバイス、有難うございました。
97ポイント を落としてしまった。
|
|
|
|
Name: kazuoni [URL] ..比類無きプログラマー(80,356ポイント)
Date: 2009/04/11(土) 01:40
No:31997
|
|
Title: フリーフォントについて
|
|
お邪魔します。
ゲームのロゴで以下のサイトにあるロゴを使いたいと考えているのですが、
.TTFを提供された側がそのフォントをインストールせずに、表示することは可能なのでしょうか?
例えば.TTFを同封して、その指定した文字をプログラムが読み込む
ッという感じなのですが・・・。
何か解決策はあるのでしょうか?
もしなければ、一文字ずつ画像として読み込み、
プログラムで自作関数を利用して文字描写をしようと思っていますが、
もし前者ができるならそれが一番いいなと思ったので、質問させていただきました。
あと、同封されていたReadMeには使用にあたっての規約がなく、
制作者のサイトも存在しませんでした。
これは最後の行にある
Copyright 1997 TiD
のみを自分は記述すればよいのでしょうか?
ttp://www.dafont.com/cube-toss.font
よろしくお願いします。
232ポイント を手に入れた。
|
|
|
|
Name: SooA [URL] ..中級者(14,529ポイント)
Date: 2009/04/11(土) 06:06
No:31998
|
|
Title: Re:フリーフォントについて
|
|
AddFontResourceExに関して
http://msdn.microsoft.com/ja-jp/library/cc428288.aspx
■サンプル
AddFontResourceEx( フォントファイル名, FR_PRIVATE, NULL );
int hf = CreateFontToHandle( フォント名, 48, 1, DX_FONTTYPE_NORMAL ) ;
DrawStringToHandle( 8 , 64, "あいうえお" , 0xffffff, hf ) ;
ScreenFlip() ;
// ソフトウェア終了時
RemoveFontResourceEx( フォントファイル名, FR_PRIVATE, NULL ) ;
>ttp://www.dafont.com/cube-toss.font
Download のところに Free となっているので、
著作権表示を行っておけば大丈夫だと思いますが、
DXライブラリからでは正常に表示させることができませんでした、
動作に関しては他の日本語フォントで試してみてください。
64ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(339,533ポイント)
Date: 2009/04/11(土) 12:07
No:32004
|
|
Title: Re:フリーフォントについて
|
|
>同封されていたReadMeには使用にあたっての規約がなく
これは曲者ですね。
サイトにフリーと書いてあっても、
・ 個人的にフォントをインストールしてそのまま使用する
・ 商用目的でフォントをインストールしてそのまま使用する
・ フォントデータを絵として取り出し、加工して使用する
・ フォントデータを改造し使用する
・ フォントを再配布する
・ フォントを改造して再配布する
など、どこまでの範囲がフリーなのかわからないですからねぇ。
>一文字ずつ画像として読み込み、
>プログラムで自作関数を利用して文字描写をしようと思っていますが、
>もし前者ができるならそれが一番いい
後者のような使い方、あるいは前者で不特定多数の配布を前提としない
個人使用の範囲であれば別段問題はないと思いますが、
そうでなければ作者を捕まえて訊いてみるのが一番だと思います。
(作者の名前で検索をかけたら、今でも使えるかどうかわからないですが
メールアドレスが出てきました)
あと、参考までに。
Design Source - デザインソース -: 巨大フォントライブラリー『dafont.com』
ttp://design-source.seesaa.net/article/36178884.html
#ほんとかどうか、今もそうなのかはわかりませんが、
ttp://www.ne.jp/asahi/kyakirun/kya/MAKUTSU/BakaFonts/nikki/2002/nikkiMar.HTM
この 2002年3月22日の記事が本当なら、本人の預かり知らないところで勝手に載せられて
しまうこともあるようです……。
□ SooAさん
>DXライブラリからでは正常に表示させることができませんでした
キャラクタセット(多分 DX_CHARSET_DEFAULT)を設定すれば、表示できるかもしれません。
661ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(30,473ポイント)
Date: 2009/04/11(土) 12:09
No:32005
|
|
Title: Re:フリーフォントについて
|
|
出来ました
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
if (DxLib_Init() == -1) return 1;
SetDrawScreen(DX_SCREEN_BACK);
AddFontResource(TEXT("CT.TTF"));
// 日本語を含まないフォントの場合はDX_CHARSET_DEFAULTを指定しないとだめ
int hf = CreateFontToHandle("Cube Toss", 48, 1, DX_FONTTYPE_NORMAL, DX_CHARSET_DEFAULT);
if (hf < 0)
{
RemoveFontResource(TEXT("CT.TTF"));
DxLib_End();
return 1;
}
DrawStringToHandle(8 , 64, "ABC" , 0xffffff, hf);
// ChangeFontでもできます
ChangeFont( "Cube Toss", DX_CHARSET_DEFAULT );
SetFontSize(60);
DrawString(8, 128, "XYZ", 0xff0000);
ScreenFlip();
WaitKey();
DeleteFontToHandle(hf);
RemoveFontResource(TEXT("CT.TTF"));
DxLib_End();
return 0;
}
335ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..比類無きプログラマー(80,500ポイント)
Date: 2009/04/11(土) 13:03
No:32007
| 解決!
|
Title: Re:フリーフォントについて
|
|
こんな関数があるんですね^^;
Windows GDI(?)っていうものを初めて知りました。。
いろいろ関数見てみると何やらいろいろありますね^^;
みごとにtoyoさんのコードでいけました!
が、著作権は厄介ですね。。
一応本人にメールを送ってみますが、
そこまでしないでもって気もしてきました。。
英語が通じるかどうか。。
今回はこれで解決とさせていただきます。
ご回答してくださった皆様、本当にありがとうございました。
またよろしくお願いします。
144ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..中級者(14,760ポイント)
Date: 2009/04/11(土) 15:22
No:32014
|
|
Title: Re:フリーフォントについて
|
|
Justyさん
> キャラクタセット
補足というか解決策ありがとうございます。
> kazuoniさん
toyoさんのサンプルでは AddFontResource を使っていますが、
AddFontResource ではプログラム実行中に他のプロセス、
例えばワード等でもそのフォントが利用可能な状態になります。
プログラムが終了すると使えなくなるフォントに
アクセスできるのはあまり望ましくないと思うので
AddFontResourceEx を使用したほうが良いかと思います。
著作権に関して私の文章は安易に考えていたようです。
フリーフォント関連のサイトを巡ってみましたが、
結構シビアなとこが多いですね^^;
使用フォントが単純な部類なのでDXライブラリでライン描画させるとか、
フォントを自作するというのもありかもしれません。
231ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..比類無きプログラマー(80,522ポイント)
Date: 2009/04/11(土) 15:49
No:32018
|
|
Title: Re:フリーフォントについて
|
|
>AddFontResourceEx を使用したほうが良いかと思います
了解しました^^ご丁寧にありがとうございます!
テトリスには持ってこいのフォントに見えたのですが、
作者がどこにもいませんww
メールも届かないっということで、今回は見送りました^^;
22ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..上級者(15,486ポイント)
Date: 2009/04/11(土) 17:10
No:32025
|
|
Title: Re:フリーフォントについて
|
|
似たような?フォントを表示するサンプルです。
char fontmap[8][8] = {
0,0,0,0,0,0,0,0,
0,0,0,1,0,0,0,0,
0,0,1,0,1,0,0,0,
0,1,0,0,0,1,0,0,
0,1,0,0,0,1,0,0,
0,1,1,1,1,1,0,0,
0,1,0,0,0,1,0,0,
0,1,0,0,0,1,0,0,
} ;
int x, y, sx, sy, ex, ey ;
// 表示位置とサイズと色
int hx=64, hy=64, hs=32, hc=0xbbffbb ;
for( sy=0; sy<8; sy++ )
for( sx=0; sx<8; sx++ )
if( fontmap[sy][sx] != 0 )
{
x = hx+sx*hs ;
y = hy+sy*hs ;
DrawBox( x, y, x+hs+1, y+hs+1, hc, FALSE ) ;
ex = x+hs/2 ;
ey = y-hs/2 ;
DrawBox( ex, ey, ex+hs+1, ey+hs+1, hc, FALSE ) ;
DrawLine( x, y, ex, ey, hc ) ;
DrawLine( x+hs, y+hs, ex+hs, ey+hs, hc ) ;
DrawLine( x, y+hs, ex, ey+hs, hc ) ;
DrawLine( x+hs, y, ex+hs, ey, hc ) ;
}
一文字だけ表示させていますが、
画像等からフォントデータを作ったり
関数化して文字列を表示できるように変更すれば良いかと。
2倍のポイントを手に入れた! 726ポイント を手に入れた。
|
|
|
|
Name: ひで ..かけだし(1,112ポイント)
Date: 2009/04/11(土) 10:36
No:31999
|
|
Title: エラーが出て困っています。
|
|
#include <stdio.h>
#include <conio.h>
int main(void)
{
char user_form[1000];
int user_sure=0;
printf("入力された文字を暗号化にします。\n");
printf("文字を入力してください。\n");
scanf("%s",user_form);
printf("入力された文字は「%s」です。\n",user_form);
printf("よろしければ「1」を、訂正する場合は「0」を入力してください。");
scanf("%d",user_sure);
if(user_sure == 0)
{
while(user_sure != 1)
{
printf("もう一度文字を入力してください。\n");
scanf("%s",user_form);
printf("入力された文字は%sです。",user_form);
printf("よろしければ「1」を、訂正する場合は「0」を入力してください。");
scanf("%d",user_sure);
}
}
getch();
return 0;
}
まだ作成段階でまだまだ長くなっていくのですが、もうすでにエラーです・・・wwww
コンパイルはエラーにならないのですが、実行すると「エラー送信しますか」という文字が出てきます。
VC++2008を使用しています。
なんで実行エラーになるのでしょうか?
(2009/4/12 10:00管理人によりタイトルが変更されました)
426ポイント を手に入れた。
|
|
|
|
Name: 山崎 ..初心者(6,637ポイント)
Date: 2009/04/11(土) 11:06
No:32000
|
|
Title: Re:えらー
|
|
どうもこんにちは。
scanfを使っている部分ですが、これは
scanf("%s",user_form) と scanf("%d",user_sure) を
scanf("%s",&user_form) と scanf("%d",&user_sure) に
しなければいけないですね。
scanf系の関数は、後ろの変数名の前に「&」をつけなければなりません。
私もこれを忘れて以前相当苦労しました・・・。
がんばってくださいね〜!
2倍のポイントを手に入れた! 236ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..入門者(4,542ポイント)
Date: 2009/04/11(土) 11:47
No:32002
|
|
Title: Re:えらー
|
|
>山崎さん
user_form の前の & は不要です。
配列名は、その配列の先頭要素のアドレスを示します。
37ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(30,138ポイント)
Date: 2009/04/11(土) 11:52
No:32003
|
|
Title: Re:えらー
|
|
%sでchar配列に入れる場合は&つけなくて
scanf("%s", user_form)
で大丈夫ですよ
scanf("%d",&user_sure)
は&が必要です
if(user_sure == 0)
{
}
は次のwhileで同じことを判定してるので不要です
113ポイント を手に入れた。
|
|
|
|
|
Name: ひで ..かけだし(1,213ポイント)
Date: 2009/04/11(土) 14:54
No:32011
| 解決!
|
Title: Re:えらー
|
|
みなさん、ありがとうございます。^^
やっと解決しました。
これからいろいろ作っていくので、またわからないことがあったら質問させていただくこともあると思いますがそのときはよろしくお願いします。
101ポイント を手に入れた。
|
|
|
|
|
Name: ひで ..かけだし(1,341ポイント)
Date: 2009/04/11(土) 15:04
No:32012
|
|
Title: Re:えらー
|
|
すみません。解決にしてしまいましたが、もう一つ質問がありました。
たとえば「こんにちは」と入力した場合、scanfでuser_formに入力された文字列はuser_form[0]に格納されると思うのですが、それを
[1]=こ
[2]=ん
[3]=に
[4]=ち
[5]=は
[6]=NULL
となるように格納することは出来ないのでしょうか?
128ポイント を手に入れた。
|
|
|
|
|
Name: dic ..上級者(17,560ポイント)
Date: 2009/04/11(土) 15:26
No:32015
|
|
Title: Re:えらー
|
|
char user_form[1000]
なので user_form[0] = "あ";
は型が合いませんので無理です
27ポイント を手に入れた。
|
|
|
|
|
Name: ひで ..かけだし(1,378ポイント)
Date: 2009/04/11(土) 15:37
No:32017
|
|
Title: Re:えらー
|
|
dicさん、ありがとうございます。
もしそのような処理をしたいならどのようにしてユーザーに入力させればいいのでしょうか?
37ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..上級者(20,199ポイント)
Date: 2009/04/11(土) 16:22
No:32021
|
|
Title: Re:えらー
|
|
ひらがなは基本的に2byte文字なので無理です。(少なくともVC++2008やVC++2005やBCCでは)
Shift-JIS環境では(WinXPなど)
char buf[5];
strcpy(buf,"あ");
とした場合
buf[0]=0x82
buf[1]=0x9e
buf[2]=0
と言う風に格納されます。(参考サイト)
146ポイント を手に入れた。
|
|
|
|
|
Name: ひで ..かけだし(1,453ポイント)
Date: 2009/04/11(土) 16:59
No:32023
|
|
Title: Re:えらー
|
|
でも、そうするとユーザーからの入力されないですよね?
2倍のポイントを手に入れた! 44ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(59,140ポイント)
Date: 2009/04/11(土) 17:09
No:32024
|
|
Title: Re:えらー
|
|
> ひらがなは基本的に2byte文字なので無理です。(少なくともVC++2008やVC++2005やBCCでは)
だから
> [1]=こ
> [2]=ん
> [3]=に
なんてことは出来ないってことだけど。
No:32021をよく読みましょう。
あと、文字列についてもうちょっと勉強するべきかも。
user_form[1]から格納する方法は
scanf("%s", &user_form[1]);
30ポイント を手に入れた。
|
|
|
|
|
Name: ひで ..かけだし(1,521ポイント)
Date: 2009/04/11(土) 17:32
No:32026
|
|
Title: Re:えらー
|
|
はい。
ひらがなでなくローマ字でいいので格納したいのです。
scanf("%s",user_form);
で
hello
と入力したら
[0]=h
[1]=e
[2]=l
[3]=l
[4]=o
[5]=NULL
と格納されるようにしたいのです・・・・
68ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(138,145ポイント)
Date: 2009/04/11(土) 17:37
No:32028
|
|
Title: Re:えらー
|
|
> scanf("%s",user_form);
> で
> hello
> と入力したら
> [0]=h
> [1]=e
> [2]=l
> [3]=l
> [4]=o
> [5]=NULL
> と格納されるようにしたいのです・・・・
そのように入ってます。
ただし、最後の[5]はNULLではなくて'\0'です。
18ポイント を手に入れた。
|
|
|
|
|
Name: ひで ..かけだし(1,552ポイント)
Date: 2009/04/11(土) 18:01
No:32030
|
|
Title: Re:えらー
|
|
そうだったのですか・・・
では、
printf("%s",user_form[0]);
としたら「h」が表示されるのですか?
31ポイント を手に入れた。
|
|
|
|
|
Name: ひで ..かけだし(1,601ポイント)
Date: 2009/04/11(土) 18:14
No:32032
|
|
Title: Re:えらー
|
|
ありがとうございます。^^
これで大体解決しました。
さすがハッカーまでなるとこんなの簡単なんでしょうね@@
私も頑張ります。
49ポイント を手に入れた。
|
|
|
|
Name: lbfuvab ..上級者(19,899ポイント)
Date: 2009/04/10(金) 17:20
No:31977
|
|
Title: 配列の10進表示
|
|
環境はVC++2008ExpressEditionです。
今unsigned short型の要素数10個の配列で多倍長演算の実装をしています。
表示用の関数で10進数の表示にしたいのですが、全然出来ませんorz
どうかやり方を教えてください。
現在は苦肉の策で16進の表示をしています↓
#include<stdio.h>
#define N 20
typedef unsigned short uint16;
int PrintMpa(const uint16 a[N]){
int i;
//冗長な部分の読み飛ばし↓
for(i=0;i<N;i++)
if(a[i])
break;
//4桁ごとに表示↓
while(i<N)
printf("%04X",a[i++]);
//改行の出力↓
putchar('\n');
return 0;
}
319ポイント を手に入れた。
|
|
|
|
Name: 初級者 ..入門者(4,439ポイント)
Date: 2009/04/10(金) 18:40
No:31980
|
|
Title: Re:配列の10進表示
|
|
十進で出力したいときに、
どのような入力を与えて
どのような結果を得るのかを
具体的に示してください。
今十六進で出力しているかどうかは、
問題の解決に何ら影響しません。
70ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(59,069ポイント)
Date: 2009/04/10(金) 18:45
No:31982
|
|
Title: Re:配列の10進表示
|
|
多倍長演算の実装なんだから例えば
a[19] = 0xFFFF
a[18] = 0x1
a[0~17] = 0
のときに
131071
というように表示したいってことでしょう。
わざわざ書かなくても多倍長演算という言葉でわかる範囲だと思いますけど。
121ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..上級者(19,981ポイント)
Date: 2009/04/10(金) 21:18
No:31986
|
|
Title: Re:配列の10進表示
|
|
>>初級者 様
すいません。言葉足らずでしたm(_ _)m
Mist様の言われている通りです。
>>Mist 様
補足有難うございます。
色々考えてみたのですが全部誤差が出ますorz
82ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..プログラマー(25,598ポイント)
Date: 2009/04/10(金) 21:27
No:31988
|
|
Title: Re:配列の10進表示
|
|
Mist氏の補足がなければ、私にも仕様が分からなかったな。
30分もかかってしまった。orz
a[]の使い方が逆順なのは私の好みです。許してね。
#include <stdio.h>
#define N 20
#define BITS 16
#define LIMIT 100000
typedef unsigned short uint16;
int PrintMpa(const uint16 a[N]) {
int sum[N], buf[N], i, j;
// 合計と2^xの初期化
for (i = 0; i < N; i++)
sum[i] = buf[i] = 0;
buf[0] = 1;
// a[N]のビットの数だけループ
for (i = 0; i < N * BITS; i++) {
printf("%d : \n", i);
// sum += 2^i
if (a[i / BITS] & (1 << (i % BITS))) {
for (j = 0; j < N; j++) {
sum[j] += buf[j];
if (sum[j] > LIMIT) {
sum[j] -= LIMIT;
sum[j + 1]++;
}
}
}
// 2^i を更新
for (j = 0; j < N; j++)
buf[j] *= 2;
for (j = 0; j < N; j++)
if (buf[j] > LIMIT) {
buf[j] -= LIMIT;
buf[j + 1]++;
}
}
// 表示
for (int i = N - 1; i >= 0; i--)
printf("%05d ", sum[i]);
printf("\n");
return 0;
}
int main()
{
uint16 a[N];
int i;
// a[0]が一番小さい位
for (i = 0; i < N; i++)
a[i] = 0;
a[1] = 0x1;
a[0] = 0xFFFF;
PrintMpa(a);
return 0;
}
233ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..入門者(4,479ポイント)
Date: 2009/04/10(金) 21:39
No:31989
|
|
Title: Re:配列の10進表示
|
|
>Mistさん
私は、文章で具体的に示された内容だけをもとに回答する主義です。
質問者の真意をあれこれ推し量ることはしません。
私にとっては、書かれた内容だけがすべてです。
なお、このことについて論じ合うつもりはありません。
40ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..上級者(20,053ポイント)
Date: 2009/04/11(土) 15:30
No:32016
| 解決!
|
Title: Re:配列の10進表示
|
|
>>たいちう 様
>Mist氏の補足がなければ、私にも仕様が分からなかったな。
>30分もかかってしまった。orz
>a[]の使い方が逆順なのは私の好みです。許してね。
本当に有難うございます。
以後は分かりやすく書く事が出来る様努力します。
72ポイント を手に入れた。
|
|
|
|
Name: J ..上級者(17,236ポイント)
Date: 2009/04/08(水) 18:10
No:31896
|
|
Title: dxlibp.a
|
|
お久しぶりです
最近話題のDXライブラリPortableというものをやり始めたのですが、dxlibp.aというファイルが見つからなくて困っています。dxlibp_src_v0.4.4rc3.rarとdxlibp_v0.4.3を解凍してみたのですが見つからず、ネットで検索しても見つかりません・・・どなたか情報をください。お願いします。
143ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(77,048ポイント)
Date: 2009/04/08(水) 18:30
No:31900
|
|
Title: Re:dxlibp.a
|
|
最新版では同梱されていないようです。
dxlibp_src_v0.4.4rc3.rar を解凍したファイルにソースファイルやプロジェクトファイルがあります。
それを使って dxlibp.a を作ります。
ちなみに、プロジェクトの指針にもよりますが、
オープンソースプロジェクトはソースを優先的にリリースする傾向があります。
(ソースのみリリースしているプロジェクトもあります)
こういうものは、自分でビルドして用意するのが普通ですよ。
(DXライブラリPortable はどういう方針かは知りませんが)
212ポイント を手に入れた。
|
|
|
|
|
Name: J ..上級者(17,348ポイント)
Date: 2009/04/08(水) 18:39
No:31901
|
|
Title: Re:dxlibp.a
|
|
そうなんですか・・・チュートリアルには既に入っているという風に記述されていたので。。
分かりました。が、その作り方が今度は不明です。。
これこそkazuoniさんの言うとおり、製作者側に聞くべきなんでしょうかね。
それに関しても、もうちょっと分かりやすくして欲しいものです・・・
112ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(77,821ポイント)
Date: 2009/04/08(水) 18:53
No:31906
|
|
Title: Re:dxlibp.a
|
|
ソリューションファイル(.sln)があると思いますが、
それがあるということは、それを使ってビルドできるのではないでしょうか。
チュートリアルには「いつごろのバージョンを例にしています」とか、
「自分でビルドするには」等の記述が無いですね。
工事中とは書いてありましたが、そこらへんについてはプロジェクト管理者に問い合わせるしかないですね。
まだプロジェクトを立ち上げたばかりなので仕方が無いとは思いますが。
(公開フォーラムとか使えれば楽に連絡が取れそうなのですが)
173ポイント を手に入れた。
|
|
|
|
|
Name: J ..上級者(17,281ポイント)
Date: 2009/04/09(木) 14:14
No:31935
|
|
Title: Re:dxlibp.a
|
|
ファイルは見つかりました、ご協力ありがとうございました。
っと試しにサンプルをビルドしてみたのですが・・・
1>------ ビルド開始: プロジェクト: PSP_Project, 構成: PSP Win32 ------
1>メイクファイル プロジェクト動作を実行しています。
1>psp-gcc -I. -ID:/pspsdk/psp/sdk/include -O2 -G0 -Wall -D_PSP_FW_VERSION=150 -L. -LD:/pspsdk/psp/sdk/lib main.o dxlibp.a -lpspgu -lpng -lz -lm -lpsprtc -lpspaudio -lpspaudiocodec -lpsputility -lpspjpeg -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel -o PSP_Project_Template.elf
1>d:/pspsdk/bin/../lib/gcc/psp/4.3.3/../../../../psp/bin/ld.exe: cannot find -lpng
1>collect2: ld returned 1 exit status
1>make: *** [PSP_Project_Template.elf] Error 1
1>Project : error PRJ0019: ツールはエラー コードを返しました : "メイクファイル プロジェクト動作を実行しています。"
1>ビルドログは "file://D:\Download\PSP_Template\BuildLog.htm" に保存されました。
1>PSP_Project - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
というエラーを吐きました
makefileの-lpngがいけなかったようですが・・・
原因がわかりません。どなたか教えてくれませんか?お願いします。
67ポイント を落としてしまった。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(78,556ポイント)
Date: 2009/04/09(木) 14:35
No:31937
|
|
Title: Re:dxlibp.a
|
|
-lpng は、 libpng.a をリンクするという意味(のはず)です。
libpng.a が見つからなかったのだと思います。
恐らく PSPSDK には libpng が同梱されていないのだと思います。
cygwin を使って取ってくる必要があると思います。
(なんだか小難しくなってきてますねぇ)
86ポイント を手に入れた。
|
|
|
|
|
Name: J ..上級者(17,334ポイント)
Date: 2009/04/09(木) 15:36
No:31939
|
|
Title: Re:dxlibp.a
|
|
できました〜
無事にコンパイル終了、DXPの関数も無事に実行できました
ご協力ありがとうございます!
53ポイント を手に入れた。
|
|
|
|
|
Name: J ..上級者(17,531ポイント)
Date: 2009/04/09(木) 20:13
No:31945
|
|
Title: Re:dxlibp.a
|
|
あら、解決マーク入れるの忘れてました・・・が新たに問題が生じました。
物は試しとPlaySoundMem関数で音楽を再生しようとしたのですが、再生できませんでした。
アクセスランプは点滅していて音楽をロードしてるっぽかったんですけど、再生されず、LoadSoundMemの戻り値が-1でした。以下がプログラムです。
#include "dxlibp.h"
#include <pspkernel.h>
PSP_MODULE_INFO("PSP Module Info", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
int main()
{
int data;
DxLib_Init();
data = LoadSoundMem("test.mp3");
PlaySoundMem(data,DX_PLAYTYPE_NORMAL);
while(ProcessMessage() != -1)
{
ClearDrawScreen();
clsDx();
printfDx("音楽再生テスト%d",data);
ScreenFlip();
}
DxLib_End();
return 0;
}
PSPの階層をどのように表せばいいのか分からないので全個所にtest.mp3を配置しました。
もちろんタグ情報はすべて消しましたが・・・
何か間違っているのでしょうか・・・
197ポイント を手に入れた。
|
|
|
|
|
Name: J ..上級者(17,556ポイント)
Date: 2009/04/10(金) 19:11
No:31983
| 解決!
|
Title: Re:dxlibp.a
|
|
そうですね・・・質問に答えてくれた皆様いろいろとありがとうございました。
25ポイント を手に入れた。
|
|
|
|
|
Name: シューティング大好き ..ぴよぴよ(406ポイント)
Date: 2009/04/11(土) 13:04
No:32008
|
|
Title: Re:dxlibp.a
|
|
Jさん
DXライブラリPortableの件ですが、まだまだなところがありますので
当面はPC環境で開発されてはいかがでしょうか?
最適化の問題は別にして、龍神録さんのところで公開されてるサンプルソースの
50章はすぐに動くようになりましたのでライブラリの整備ができれば
移植作業はそれほど難しいことではないと思います
また、こちらの作業が落ち着けばビルドしたバイナリも提供しやすいと思います。
現状では機能不十分な上にバグフィックス等で変更サイクルが早いため
開発者向けにソース公開の方が早いのが現状です。
205ポイント を手に入れた。
|
|
|
|
Name: マナ ..ぴよぴよ(114ポイント)
Date: 2009/04/10(金) 22:00
No:31990
|
|
Title: ゲームを作りたいと考えています。
|
|
皆様、はじめまして
現在、友達とゲームを作ろうと考えています。
内容は、バイオハザードのような3Dを使った謎解きとノベルを
組み合わせたようなものです。
今、必死に調べて何とかここにたどり着きました。
また、3Dを使おうと思っているのでBlenderを見つけて、キャラクタ
と背景などの作成に入りました。
調べてみたところ、3Dゲームを作る場合、Xファイルが便利なようなので
モーションを3DにつけたらXファイルを使うつもりです。
プログラムはC++言語を使いたいです。
コンパイラは Microsoft Visual C++ 2008 Express Edition
OSは WindowsVista
メモリ 1.5GB
プロセッサ Intel(R) Pentium(R) 4CPU 3.00GHz (使用可能)2.99GHz
32ビットオペレーティングシステム
DirectX SDKを使えば3D関連ができると聞いたので入れました。
あとは、プログラムを書けばいいのでしょうが・・・・・
少し触れた程度なのでほぼ初心者と変わりありません。
そこで、皆様に助けていただきたいのです。
本屋さんで聞いても、3D関連のことに詳しい人は当然いませんでした。
3Dを描画したり、ゲームを作ったりしながらC++を学べる本、サイト
その他必要な事に関するアドバイスを教えていただければと思います。
(メモリ量やCPU、グラフィックカード・C++の知識など)
淡々と長い文章になってしまい申し訳ございません。
ですが、やる気と根気だけは十二分にあります。
2Dも少しは触れましたが、ゲーム作成と言うと、独特のアルゴリズム
物理計算、複雑なコードなど自分一人ではどうにも知識が足らなかったものですので。
宜しくお願いします。
良い回答が来る事を心待ちにしております。
編集で補足事項を一つ追加します。
DirectXのバージョンは10です
114ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(78,810ポイント)
Date: 2009/04/10(金) 22:27
No:31991
|
|
Title: Re:ゲームを作りたいと考えています。
|
|
私からは3D周りについて書いておきます。
3Dゲームを製作する環境としてはスペック的には問題ないかと思います。
(グラフィックカードについて記載されていませんが、最近のグラフィックカードであれば問題ないはずです)
3D モデルを使ったゲームプログラミングで一番問題になるのがモデルデータの形式です。
X ファイルは汎用的な形式としていますが、逆にそれが問題(ソフトによって読み込めないものが合ったりする)となっているため、
ある程度規模が大きいゲームでは独自形式を用意してモデルを読み込んでいます。
特に、キャラクタを動かすモーションは、アニメーション X ファイルでは 100% 対応していません。
代わりとなる汎用3Dモデル形式「COLLADA」や「FBX」がありますので、そちらの方を使ったほうがベターかもしれません。
(Blender でも COLLADA 形式 FBX 形式を書き出すことが出来ます)
以上のように3Dモデルを読み込む基礎部分を作らなくてはいけないのが少々辛いですが、
マイライブラリさえ完成すれば後は他のゲームにも応用できるはずなので、根気よくがんばってください。
ちなみに Siv3D という開発中の3Dゲームライブラリがありますが、3Dの表現力がよさそうなので、
それの完成を待つという手もあります。
…しかし完成・公開日は未定のようです。
254ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..中級者(12,315ポイント)
Date: 2009/04/11(土) 00:01
No:31995
|
|
Title: Re:ゲームを作りたいと考えています。
|
|
こちらのサイトはもう見ましたか?
DirectX9についてなかなか詳しく書いてあります。
DirectX10でかなり仕様が変わったのできびしいかもしれませんが。
○×(まるぺけ)つくろーどっとコム
http://marupeke296.com/
C++は基礎が分かってクラスについて理解していればなんとかなると思います。
3Dゲームの場合C++がというよりDirectXがかなり難しいです。
将来ゲーム会社へというのならがんばるべきですが
HSPという言語で書くという方法もあります。
http://hsp.tv/
DirectXより動作は遅いですが、手軽に書けます。
3Dゲームを書くための書籍もいくつか出ています。
DirectXの本を買うなら、まずは
15歳からはじめるDirectX 9 3Dゲームプログラミング教室
http://www.amazon.co.jp/dp/489977186X
はどうでしょうか。基礎から丁寧に書いてあります。
なれたら、たいちうさんも紹介している
DirectX ゲームグラフィックス プログラミング
は持っていて損はないと思います。
DirectX10についての本はまだ少ないですね。
247ポイント を手に入れた。
|
|
|
|
Name: たみ ..ぴよぴよ(31ポイント)
Date: 2009/04/10(金) 16:32
No:31974
|
|
Title: カラフルドロップ
|
|
いい記録が出たので・・・
カラフルドロップ
10.568秒
ミス 0回
PASS 41936
クリア時間16時9分9秒
「ハイパー」が近くの店で稼動してるので極めてます(゜∀゜)
もうすこし粘れば10秒切れるかも?
感想
ハマりました。
これからもがんばってください。
31ポイント を手に入れた。
|
|
|
Name: ice ..初心者(5,521ポイント)
Date: 2009/04/04(土) 21:25
No:31706
|
|
Title: 画像の色認識
|
|
いつもお世話になっております。iceです。
画像の色を認識して当たり判定を作ろうと思うのですが、
「画像内にある黒色(0,0,0)は1、そのほかの色は0」
という判定を作る場合どのように書けばよいでしょうか。
ご教授よろしくお願いします。
63ポイント を手に入れた。
|
|
|
|
Name: ice ..初心者(5,576ポイント)
Date: 2009/04/05(日) 07:59
No:31732
|
|
Title: Re:画像の色認識
|
|
環境というと・・・
こういうのでいいのでしょうか。
Microsoft Visual C++ 2008
でDXライブラリで作成中です。
55ポイント を手に入れた。
|
|
|
|
|
Name: ice ..初心者(5,609ポイント)
Date: 2009/04/09(木) 20:59
No:31946
|
|
Title: Re:画像の色認識
|
|
返信が遅くなりました。
リファレンスの項目を見て色々考えたのですが、
まだうまく出来ません。
ヒントをいただけないでしょうか。
33ポイント を手に入れた。
|
|
|
|
|
Name: Valhalla ..ぴよぴよ(16ポイント)
Date: 2009/04/09(木) 23:59
No:31958
|
|
Title: Re:画像の色認識
|
|
まず、画像を配列に読み込んでください。
unsigned char *img
そして、その配列に対して、for文でループまわしてください。
せめて画像形式を教えて下さい BMPですか?
16ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..中級者(14,379ポイント)
Date: 2009/04/10(金) 02:19
No:31961
|
|
Title: Re:画像の色認識
|
|
まずイメージサイズによる矩形範囲で判定を行う
プログラムを組んでみましょう。
それが出来たら、接触している場合の処理として、
両者の重なっている位置とサイズを求め、
接触部分の透過色以外が重なっているか判定する
といった流れになります。
102ポイント を手に入れた。
|
|
|
|
|
Name: ice ..初心者(5,621ポイント)
Date: 2009/04/10(金) 21:21
No:31987
|
|
Title: Re:画像の色認識
|
|
Valhalla様
画像形式はpngです。
ヒントありがとうございます。
ちょっと考えて見ます。
12ポイント を手に入れた。
|
|
|
|
Name: fumi ..入門者(3,508ポイント)
Date: 2009/04/09(木) 21:40
No:31947
|
|
Title: グローバル無名共用体について
|
|
こんばんわ。
グローバル無名共用体についてちょっと理解できないことがあるので質問させてください。(基礎的な事なのですが…)
グローバル無名共用体は
@static指定子をつける必要がある
A非公開メンバは含めてはならない
という特徴があります。
しかし、
union{
private:
int a;
int b;
}c;
void main()
{
}
のように、宣言と同時に変数を定義した場合、staic指定子をつけてない&メンバが非公開として
宣言されているにも関わらず、コンパイルエラーにはなりませんでした。
もちろん、変数を定義せず、宣言のみだった場合にはコンパイラエラーになります。↓
error C2646: 無名共用体がグローバルなスコープをもっていますが、static として宣言されていません。
error C2626: 無名共用体で private メンバ '<unnamed-tag>::a' が定義されています。 error C2626: 無名共用体で private メンバ '<unnamed-tag>::b' が定義されています。
これはどう解釈したら良いのでしょうか?(変数を同時に定義した場合はただの共用体とみなされる?)
また、そもそもグローバル無名共用体は実際にどのようなときに使われるのでしょうか?
ご教授お願いします。
環境は、VC++ 2005 EE です。
468ポイント を手に入れた。
|
|
|
|
Name: hss12 ..中級者(11,956ポイント)
Date: 2009/04/10(金) 11:52
No:31967
|
|
Title: Re:グローバル無名共用体について
|
|
グローバル無名共用体は使ったことがないので申し訳ないですが
構造体もそうですが、タグ名か変数名のどちらかが省略可能なので
変数名が書いてある場合は無名共用体にならないと思います。
共用体自体私は使わないので、どんな時に使うのかは分かりませんが
グローバル無名共用体の場合、グローバル変数と同じように使用でき、
ただしメモリは共有しているってことじゃないですかね。
同時に使うことがないグローバル変数がたくさんあって
メモリがとても少なく節約したいときに使えば良いのではないでしょうか。
258ポイント を手に入れた。
|
|
|
|
|
Name: fumi ..入門者(3,710ポイント)
Date: 2009/04/10(金) 20:41
No:31985
| 解決!
|
Title: Re:グローバル無名共用体について
|
|
hss12さん、ご回答ありがとうございます。
>グローバル無名共用体は使ったことがないので申し訳ないですが
いえいえ、意見や回答をもらえるだけでも大変ありがたいと思っています。
>変数名が書いてある場合は無名共用体にならないと思います。
やはりそういうことなのですか…
タグ名がないんだから無名じゃん!って安易に思うのは間違いということですね;
>メモリがとても少なく節約したいときに使えば良いのではないでしょうか。
なるほど…。最近のPCでプログラミングする限りメモリが少ない、という状況はあまりないですが、
組み込みやマイコン制御などでは役に立つのかもしれません。使うときが来るのかはわかりませんが、
頭の片隅に置いておきたいと思います。
202ポイント を手に入れた。
|
|
|
|
Name: piyo ..入門者(2,998ポイント)
Date: 2009/04/10(金) 10:15
No:31966
|
|
Title: GNU Tarのエラー
|
|
今回GNU Tarを使ってプログラミングをしているのですが、
Tarの実行がエラーになる場合とは、どんな場合なのでしょうか??
Tarの戻り値が0の場合は正常、0以上の場合は異常。その内容は???
GNU Tarのversion1.13.19を使用しています。
66ポイント を手に入れた。
|
|
|
|
Name: もぐりん ..ぴよぴよ(197ポイント)
Date: 2009/04/10(金) 20:24
No:31984
|
|
Title: Re:GNU Tarのエラー
|
|
マニュアルを見るなり、ソースを見るなどして自分で調べられないのでしょうか?
Linuxならmanコマンドを使えば詳細な情報が得られますよ。
でも、tarがどんなときに使われるツールなのかを考えれば、おのずとエラー要因は
推測できると思うのですが・・・。
引数が不足している
存在しないファイルやディレクトリを指定
ReadOnlyのディレクトリにtarファイルを作成しようとしている
などなど
197ポイント を手に入れた。
|
|
|
|
Name: qaz ..ぴよぴよ(47ポイント)
Date: 2009/04/10(金) 00:35
No:31959
|
|
Title: 60章について
|
|
60章で雑魚敵の弾に当たると
画面が真っ暗になります
どうすればその背景を維持したままの状態が保てるようになるのでしょうか?
教えてください
47ポイント を手に入れた。
|
|
|
|
Name: yu ..上級者(24,789ポイント)
Date: 2009/04/10(金) 17:54
No:31978
|
|
Title: Re:60章について
|
|
こちらでも確認できました。
どうやらbright_set.brtの値が変わるとVertexのr,g,bの値が減少するようです。
(SetDrawBright関数で指定した値の255との差分がr,g,bの値に引かれていく?)
DXライブラリの仕様なのかな?・・・
ClacObject()の24行目に
Object[t].ObChild[s].Vertex[i].r=255;
Object[t].ObChild[s].Vertex[i].g=255;
Object[t].ObChild[s].Vertex[i].b=255;
を追加してやれば正常に動作しました。
死んだり、ボムを打ってもしっかり暗くなってくれました。
172ポイント を手に入れた。
|
|
|
|
|