|
|
Name: バズー ..かけだし(2,022ポイント)
Date: 2010/08/24(火) 11:25
No:59925
|
|
Title: Re:チョコボの自動生成マップ
|
|
連絡が遅くなってすいません。
http://racanhack.sourceforge.jp/rhdoc/coderoom.html
上記を参考にしております。
区画を作る関数と部屋を作る関数を作ってみたのですが
これをどの様に使うか(正しくはどのタイミングで)がイマイチわかりません。
又、部屋を作った後にどの様に繋ぐかもわからないです・・・。
サイトに書いてある枠線を利用して作るという概念は理解出来るのですが
ソースの書き方が思いつきません。
関数が指定した範囲の枠線を書くものです。
関数が指定した範囲の枠内を塗りつぶすものです。
DXライブラリを使っております。
2倍のポイントを手に入れた! 500ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..かけだし(2,187ポイント)
Date: 2010/08/24(火) 12:36
No:59927
|
|
Title: Re:チョコボの自動生成マップ
|
|
ご回答ありがとうございます。
考え方は理解できているのですが
プログラムにすることができません・・・。
1、区分をつくる
2、その中に収まる部屋を作る
3、1・2を何回か繰り返す
4、各部屋通しを繋ぐ
4は部屋の同じ位置の区分のライは強制的にあきそこから線を繋げる
※説明が下手ですみません。
イメージ
AAAAAA
AAAAAA | BBB
AAAAAA | BBB
AAAAAA | BBB
AAAAAA
AAAAAA
|が同じ高さなので線をつけこれを繋げる
縦も同じようにする
165ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..かけだし(2,202ポイント)
Date: 2010/08/24(火) 12:38
No:59928
|
|
Title: Re:チョコボの自動生成マップ
|
|
すいません(汗)
途中で投稿してしまいました。
上のようなことだと思っております。
貼って頂いたURLも見たのですがこれをプログラムで書けないです・・・。
15ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(201,729ポイント)
Date: 2010/08/24(火) 13:42
No:59930
|
|
Title: Re:チョコボの自動生成マップ
|
|
もっと簡単な事はサンプルなしに自力で出来ますか?
例えば、
1.マップを壁で埋め尽くして初期化。
2.ランダムなスタート地点とゴール点を壁の何処かに決める。
3.スタート地点とゴールを道で結ぶ。
ただし斜めの道を作ってはいけない。必ず90度曲がる道で無くてはいけない。
どこかでわからないなら番号と分からないところを書いてください。
180ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..かけだし(1,385ポイント)
Date: 2010/08/25(水) 09:41
No:60022
|
|
Title: Re:チョコボの自動生成マップ
|
|
ご回答ありがとうございます。
こんな感じでしょうか?
rx1,ry1からrx2,ry2に向かって2種類の線を引きます。
先にシタに行くかヨコに行くかです。
RoomLine( rx1, ry1, rx2, ry2, rand()%2 );
void RoomLine( int rx1, int ry1, int rx2, int ry2, int mode ){
// 差分を取る
int dx = abs( rx1 - rx2 );
int dy = abs( ry1 - ry2 );
int sx = 0;
int sy = 0;
if(rx1 < rx2) sx = rx1 + (dx/2);
else sx = rx2 + (dx/2);
if(ry1 < ry2) sy = ry1 + (dy/2);
else sy = ry2 + (dy/2);
switch(mode){
case 0:
// 縦方向の線を引く
if(ry1 < ry2){
for (int y=ry1; y<ry1+dy+1; y++) {
if( Map[y][sx] == 0 ) Map[y][sx] = 1;
}
}else{
for (int y=ry2; y<ry2+dy+1; y++) {
if( Map[y][sx] == 0 ) Map[y][sx] = 1;
}
}
// 横方向の線を引く
if(rx1 < rx2){
// Y軸
for (int x=rx1; x<rx1+int(dx/2); x++) {
if( Map[ry1][x] == 0 ) Map[ry1][x] = 1;
}
for (int x=rx2-int(dx/2); x<rx2; x++) {
if( Map[ry2][x] == 0 ) Map[ry2][x] = 1;
}
}else{
// Y軸
for (int x=rx2; x<rx2+int(dx/2); x++) {
if( Map[ry2][x] == 0 ) Map[ry2][x] = 1;
}
for (int x=rx1-int(dx/2); x<rx1; x++) {
if( Map[ry1][x] == 0 ) Map[ry1][x] = 1;
}
}
break;
case 1:
// 横方向の線を引く
if(rx1 < rx2){
// X軸
for (int x=rx1; x<rx1+dx+1; x++) {
if( Map[sy][x] == 0 ) Map[sy][x] = 1;
}
}else{
// X軸
for (int x=rx2; x<rx2+dx+1; x++) {
if( Map[sy][x] == 0 ) Map[sy][x] = 1;
}
}
// 縦方向の線を引く
if(ry1 < ry2){
// Y軸
for (int y=ry1; y<ry1+int(dy/2); y++) {
if( Map[y][rx1] == 0 ) Map[y][rx1] = 1;
}
for (int y=ry2-int(dy/2); y<ry2; y++) {
if( Map[y][rx2] == 0 ) Map[y][rx2] = 1;
}
}else{
// Y軸
for (int y=ry2; y<ry2+int(dy/2); y++) {
if( Map[y][rx2] == 0 ) Map[y][rx2] = 1;
}
for (int y=ry1-int(dy/2); y<ry1; y++) {
if( Map[y][rx1] == 0 ) Map[y][rx1] = 1;
}
}
break;
}
}
817ポイント を落としてしまった。
|
|
|
|
|
Name: バズー ..かけだし(1,482ポイント)
Date: 2010/08/25(水) 09:45
No:60023
|
|
Title: Re:チョコボの自動生成マップ
|
|
連レス失礼します。
通路の作り方はわかるのですが
私が作った関数でどのように部屋と区分を作り
それをどう繋げるかがわかりません・・・。
本当に宜しければで構いません・・・。
97ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..かけだし(1,566ポイント)
Date: 2010/08/25(水) 09:47
No:60024
|
|
Title: Re:チョコボの自動生成マップ
|
|
またまた途中で投稿してしまいました。
申し訳ないです。
本当に宜しければで構いません・・・。
私が作ったサンプルを追記してサンプルソースを作って頂けないでしょうか?
84ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(203,115ポイント)
Date: 2010/08/25(水) 10:30
No:60030
|
|
Title: Re:チョコボの自動生成マップ
|
|
>rx1,ry1からrx2,ry2に向かって2種類の線を引きます。
>先にシタに行くかヨコに行くかです。
>RoomLine( rx1, ry1, rx2, ry2, rand()%2 );
この関数ちゃんと動きますか?
そもそも壁というか部屋を壊す気がするんですが。
>2.ランダムなスタート地点とゴール点を壁の何処かに決める。
>3.スタート地点とゴールを道で結ぶ。
2の部分が空間の途中で始まっていますので、まず外側の壁から始めるようにしてください。
3の条件に外側の壁は出来るだけ壊さないを付け加えておきます。
それとお手伝いはしますが自力で解けるのが大事だと思っていますので一歩一歩理解をしていく形で進めませんか?
257ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..かけだし(1,620ポイント)
Date: 2010/08/25(水) 17:59
No:60072
|
|
Title: Re:チョコボの自動生成マップ
|
|
すみません・・・動いてるとは思うのですが違うのでしょうか?
0が壁でそれ以外が道か部屋です。
良く読んでみたのですが2の意味がよくわかりません・・・
添付したソースの様な事ではないのでしょうか?
54ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(204,109ポイント)
Date: 2010/08/25(水) 19:09
No:60083
|
|
Title: Re:チョコボの自動生成マップ
|
|
これは私の説明が悪かったですね。
壁際と言うかマップの端から道を作って欲しかったんです。
最新のは、マップの中のランダムなスタート地点からゴール地点まで道を書いてますよね?
スタート地点とゴール地点をマップの端にして道を作ってみていただけますか?
次のステップとしては、マップ内に部屋を一つ作って部屋の隅をスタート地点を決めてマップ端のゴール地点に道を結ぶをやってみたいと思います。
103ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..かけだし(1,797ポイント)
Date: 2010/08/26(木) 02:51
No:60126
|
|
Title: Re:チョコボの自動生成マップ
|
|
ご回答ありがとうございます。
いえいえ・・・私の理解力がないので・・・ごめんなさい。
// 端から端まで
RoomLine( 0, 0, MAP_W-1, MAP_H-1, rand()%2 );
// 部屋を作って端まで
MakeRoom( 10, 10, 15, 15 );
RoomLine( (int)Avg(10,15), (int)Avg(10,15), MAP_W-1, MAP_H-1, rand()%2 ); // 隅なら第一第二に10,15を入れる
Avgは引数の平均を返す関数です。
作りました。
こういうことであっているのでしょうか?
177ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(204,323ポイント)
Date: 2010/08/26(木) 10:53
No:60142
|
|
Title: Re:チョコボの自動生成マップ
|
|
そうですね。
まず、マップの端まで道が描けてません。
マップのある空間を灰色で描いてみたら発見しました。
それと両方共座標が乱数で決めれていないので、乱数でお願いします。
// 端から端まで
RoomLine( 0, 0, MAP_W-1, MAP_H-1, rand()%2 );
もスタートとゴールを乱数にしてほしいです。
ちなみに現在のままだとマップ端に道を書いているので、それは避けてください。
同様に
// 部屋を作って端まで
MakeRoom( 10, 10, 15, 15 );
RoomLine( (int)Avg(10,15), (int)Avg(10,15), MAP_W-1, MAP_H-1, rand()%2 ); // 隅なら第一第二に10,15を入も部屋の位置を乱数にしてほしいのと道の接続位置も乱数にして欲しいですね。もちろんゴールも。
172ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..かけだし(2,070ポイント)
Date: 2010/08/26(木) 16:01
No:60177
|
|
Title: Re:チョコボの自動生成マップ
|
|
すみません・・・問題が理解できません・・・。
何を作ればいいのでしょうか?
>>まず、マップの端まで道が描けてません。
>>マップのある空間を灰色で描いてみたら発見しました。
線が引かれているように見えるのですが
何処かおかしいのでしょうか・・・。
// 端から端まで
RoomLine( 0, rand()%(MAP_H-1), MAP_W-1, rand()%(MAP_H-1), rand()%2 );
こういうことですか?
アドバイスを頂いてとてもありがたいのですが良く理解できないです><
本当にわからないんです・・・。
修正したサンプルをどうか・・・どうか・・・頂けないでしょうか・・・。
273ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(204,231ポイント)
Date: 2010/08/26(木) 16:23
No:60179
|
|
Title: Re:チョコボの自動生成マップ
|
|
分かり辛かったですか?
少し表現を工夫してみてみます。
>線が引かれているように見えるのですが
>何処かおかしいのでしょうか・・・。
void Draw(){
のところの
else DrawBox( x*CEL_SIZE, y*CEL_SIZE, x*CEL_SIZE+CEL_SIZE, y*CEL_SIZE+CEL_SIZE, 0x000000, 255 );
を
else DrawBox( x*CEL_SIZE, y*CEL_SIZE, x*CEL_SIZE+CEL_SIZE, y*CEL_SIZE+CEL_SIZE, 0x404040, 255 );
に変えてみてください。
それで分かると思います。
>RoomLine( 0, rand()%(MAP_H-1), MAP_W-1, rand()%(MAP_H-1), rand()%2 );
>こういうことですか?
マップ端と言うことでスタートとゴールの両方を
1)x=0 y=1 + rand()%(MAP_H-2)
2)x=(MAP_W-1) y=1 + rand()%(MAP_H-2)
3)x=1 + rand()%(MAP_W-2) y=0
4)x=1 + rand()%(MAP_W-2) y=(MAP_H-1)
の4択でお願いします(角にならないように角は避けています)。
マップ端にスタートとゴールは別として連続で通路ができるのも避けてください。
「マップ端に通路の例」
これはOK。
0000
0000
1100
0100
0100
これはNG。
0000
0000
1000
1000
1100
最後の
>同様に
>// 部屋を作って端まで
>MakeRoom( 10, 10, 15, 15 );
>RoomLine( (int)Avg(10,15), (int)Avg(10,15), MAP_W-1, MAP_H- 1, rand()%2 ); // 隅なら第一第二に10,15を入も部屋の位置を乱数にしてほしいのと道の接続位置も乱数にして欲しいですね。もちろんゴールも。
は、部屋の位置、部屋から出ていく通路の開始の位置、通路のゴールのマップ端の位置全部を乱数にして欲しいって事です。乱数じゃないのは部屋の大きさぐらいですね。
何処に出来るか分からない通路のことも考えて、部屋をマップ端に近づけすぎない工夫も必要です。
上と同様にマップ端に通路ができるのも避けてください。
541ポイント を落としてしまった。
|
|
|
|
|
Name: バズー ..かけだし(2,140ポイント)
Date: 2010/08/26(木) 22:44
No:60232
|
|
Title: Re:チョコボの自動生成マップ
|
|
何度もありがとうございます。
端から線を引くと言うのはこういうことでしょうか?
int Diff( int rx1, int ry1, int rx2, int ry2 ){
int diff;
if( (abs(rx1-rx2) - abs(ry1-ry2)) > 0 ) diff = 0;
else diff = 1;
return diff;
}
void Init(){
for (int y=0; y<MAP_H; y++) {
for (int x=0; x<MAP_W; x++) {
Map[y][x] = 0;
};
};
int rx1, ry1, rx2, ry2;
int r = rand()%2;
if( r == 0 ){
rx1 = 0;
ry1 = 1 + rand() % (MAP_H-2);
rx2 = (MAP_W-1);
ry2 = 1 + rand()%(MAP_H-2);
}else if( r == 1 ){
rx1 = 1 + rand()%(MAP_W-2);
ry1 = 0;
rx2 = 1 + rand()%(MAP_W-2);
ry2 = (MAP_H-1);
}
RoomLine( rx1, ry1, rx2, ry2, Diff( rx1, ry1, rx2, ry2 ) );
70ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..入門者(2,747ポイント)
Date: 2010/08/26(木) 23:25
No:60234
|
|
Title: Re:チョコボの自動生成マップ
|
|
連レス失礼します。
ランダムにマップを作製するのは
typedef struct{
int sx,sy,ex,ey;
int rx,ry;
}ROOM;
ROOM Room[5];
// 範囲内でランダムを返す
int RandRange( int a, int b ){
int range;
range = rand()%(b-a-1) + a ;
return range;
}
int Diff( int rx1, int ry1, int rx2, int ry2 ){
int diff;
if( (abs(rx1-rx2) - abs(ry1-ry2)) > 0 ) diff = 0;
else diff = 1;
return diff;
}
Room[0].sx = rand()%3 + 1;
Room[0].sy = rand()%3 + 1;
Room[0].ex = Room[0].sx + rand()%4 + 4;
Room[0].ey = Room[0].sy + rand()%4 + 4;
Room[0].rx = RandRange(Room[0].sx,Room[0].ex);
Room[0].ry = RandRange(Room[0].sy,Room[0].ey);
Room[1].sx = rand()%3 + 1 + 10;
Room[1].sy = rand()%3 + 1 + 10;
Room[1].ex = Room[1].sx + rand()%4 + 4;
Room[1].ey = Room[1].sy + rand()%4 + 4;
Room[1].rx = RandRange(Room[1].sx,Room[1].ex);
Room[1].ry = RandRange(Room[1].sy,Room[1].ey);
MakeRoom( Room[0].sx, Room[0].sy, Room[0].ex, Room[0].ey );
MakeRoom( Room[1].sx, Room[1].sy, Room[1].ex, Room[1].ey );
RoomLine( Room[0].rx, Room[0].ry, Room[1].rx, Room[1].ry, Diff( Room[0].rx, Room[0].ry, Room[1].rx, Room[1].ry ) );
この様な感じでしょうか?
本当にわかりません・・・。
607ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..入門者(2,866ポイント)
Date: 2010/08/27(金) 04:00
No:60244
|
|
Title: Re:チョコボの自動生成マップ
|
|
何度も確認ありがとうございます。
ごめんなさい・・・。
そこがよくわかりません。
ランダムで部屋を置くにしても重なってはいけませんよね?
区画を作ってもどうやってその中に部屋を納めるのか。
これだけは想像がつかないのですが私が作った関数だけで対応できるのでしょうか?
119ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..入門者(4,998ポイント)
Date: 2010/08/27(金) 05:13
No:60246
|
|
Title: Re:チョコボの自動生成マップ
|
|
連レスまたまた失礼いたします。
現在のソースです。
重ならないようには配置出来たのですが
部屋の情報をセットする関数を呼ぶと何回に1回か強制的にプログラムが落ちてしまいます。
//RoomSet( &Room[1], Rect[1] ); ここが原因のようなのですが・・・
ポインタがおかしいのでしょうか?
またこのようなソースであっているのでしょうか・・・?
typedef struct{
int sx,sy,ex,ey;
int rx,ry;
}ROOM;
ROOM Room[ROOM_MAX];
ROOM Rect[ROOM_MAX];
// 分割する
void RectSplit( int lx, int ly, int hx, int hy ){
for (int y=ly; y<=hy; y++) {
for (int x=lx; x<=hx; x++) {
if( x==lx || x==hx ) Map[y][x] = 1;
if( y==ly || y==hy ) Map[y][x] = 1;
};
};
}
// 部屋を作る
void MakeRoom( int lx, int ly, int hx, int hy ){
for (int y=ly; y<=hy; y++) {
for (int x=lx; x<=hx; x++) {
Map[y][x] = 2;
Map[y][x] = 2;
};
};
}
// 部屋と部屋を結ぶ
void RoomLine( int rx1, int ry1, int rx2, int ry2, int mode ){
// 差分を取る
int dx = abs( rx1 - rx2 );
int dy = abs( ry1 - ry2 );
int sx = 0;
int sy = 0;
if(rx1 < rx2) sx = rx1 + (dx/2);
else sx = rx2 + (dx/2);
if(ry1 < ry2) sy = ry1 + (dy/2);
else sy = ry2 + (dy/2);
switch(mode){
case 0:
// 縦方向の線を引く
if(ry1 < ry2){
for (int y=ry1; y<ry1+dy+1; y++) {
if( Map[y][sx] == 0 ) Map[y][sx] = 1;
}
}else{
for (int y=ry2; y<ry2+dy+1; y++) {
if( Map[y][sx] == 0 ) Map[y][sx] = 1;
}
}
// 横方向の線を引く
if(rx1 < rx2){
// Y軸
for (int x=rx1; x<rx1+int(dx/2); x++) {
if( Map[ry1][x] == 0 ) Map[ry1][x] = 1;
}
for (int x=rx2-int(dx/2); x<rx2; x++) {
if( Map[ry2][x] == 0 ) Map[ry2][x] = 1;
}
}else{
// Y軸
for (int x=rx2; x<rx2+int(dx/2); x++) {
if( Map[ry2][x] == 0 ) Map[ry2][x] = 1;
}
for (int x=rx1-int(dx/2); x<rx1; x++) {
if( Map[ry1][x] == 0 ) Map[ry1][x] = 1;
}
}
break;
case 1:
// 横方向の線を引く
if(rx1 < rx2){
// X軸
for (int x=rx1; x<rx1+dx+1; x++) {
if( Map[sy][x] == 0 ) Map[sy][x] = 1;
}
}else{
// X軸
for (int x=rx2; x<rx2+dx+1; x++) {
if( Map[sy][x] == 0 ) Map[sy][x] = 1;
}
}
// 縦方向の線を引く
if(ry1 < ry2){
// Y軸
for (int y=ry1; y<ry1+int(dy/2); y++) {
if( Map[y][rx1] == 0 ) Map[y][rx1] = 1;
}
for (int y=ry2-int(dy/2); y<ry2; y++) {
if( Map[y][rx2] == 0 ) Map[y][rx2] = 1;
}
}else{
// Y軸
for (int y=ry2; y<ry2+int(dy/2); y++) {
if( Map[y][rx2] == 0 ) Map[y][rx2] = 1;
}
for (int y=ry1-int(dy/2); y<ry1; y++) {
if( Map[y][rx1] == 0 ) Map[y][rx1] = 1;
}
}
break;
}
}
// 平均を表示
float Avg( int num1, int num2 ){
float avg;
avg = float(num1 + num2)/2;
return avg;
}
// 差分を表示
int Diff( int rx1, int ry1, int rx2, int ry2 ){
int diff;
if( (abs(rx1-rx2) - abs(ry1-ry2)) > 0 ) diff = 0;
else diff = 1;
return diff;
}
// 範囲内でランダムを返す
int RandRange( int a, int b ){
int range;
range = rand()%(b-a-1) + a ;
return range;
}
// いけるマップのカウント
int MapCount( int Map[MAP_H][MAP_W] ){
int cnt = 0;
for (int y=0; y<MAP_H; y++) {
for (int x=0; x<MAP_W; x++) {
if( Map[y][x] == 1 ) cnt++;
}
}
return cnt;
}
// 区画から部屋の大きさ等を自動的にセット
// 始点は左上から区画の中央までの範囲で
// 終点は区画の中央から右下まで
void RoomSet( ROOM *room, ROOM rect ){
(*room).sx = RandRange( rect.sx+2, int((rect.ex - rect.sx)/2) );
(*room).sy = RandRange( rect.sy+2, int((rect.ey - rect.sy)/2) );
(*room).ex = RandRange( int((rect.ex - rect.sx)/2) + 2, rect.ex-2 );
(*room).ey = RandRange( int((rect.ey - rect.sy)/2) + 2, rect.ey-2 );
(*room).rx = RandRange((*room).sx,(*room).ex);
(*room).ry = RandRange((*room).sy,(*room).ey);
}
void Init(){
for (int y=0; y<MAP_H; y++) {
for (int x=0; x<MAP_W; x++) {
Map[y][x] = 0;
};
};
for( int i=0; i<4; i++ ){
ZeroMemory( &Room[i], sizeof(ROOM) );
ZeroMemory( &Rect[i], sizeof(RECT) );
}
int rectX = 0;
int rectY = 0;
RectSplit( 0, 0, MAP_W-1, MAP_H-1 );
rectX = rand()%10 + MIN_RECT;
RectSplit( rectX, rectY, MAP_W-1, MAP_H-1 );
Rect[0].sx = 0;
Rect[0].sy = 0;
Rect[0].ex = rectX;
Rect[0].ey = MAP_H-1;
rectY = rand()%10 + MIN_RECT;
RectSplit( rectX, rectY, MAP_W-1, MAP_H-1 );
Rect[1].sx = Rect[0].ex;
Rect[1].sy = 0;
Rect[1].ex = MAP_W-1;
Rect[1].ey = rectY;
rectX = rectX + rand()%10 + MIN_RECT;
RectSplit( rectX, rectY, MAP_W-1, MAP_H-1 );
Rect[2].sx = Rect[1].sx;
Rect[2].sy = rectY;
Rect[2].ex = rectX;
Rect[2].ey = MAP_H-1;
Rect[3].sx = rectX;
Rect[3].sy = rectY;
Rect[3].ex = MAP_W-1;
Rect[3].ey = MAP_H-1;
RoomSet( &Room[0], Rect[0] );
MakeRoom( Room[0].sx, Room[0].sy, Room[0].ex, Room[0].ey );
// RoomSet( &Room[1], Rect[1] ); // これを呼ぶと何回に一回か強制終了してしまう
// MakeRoom( Room[1].sx, Room[1].sy, Room[1].ex, Room[1].ey );
// MakeRoom( Rect[1].sx, Rect[1].sy, Rect[1].ex, Rect[1].ey ); //deb
}
2,132ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(31,766ポイント)
Date: 2010/08/27(金) 07:14
No:60251
|
|
Title: Re:チョコボの自動生成マップ
|
|
ソースはまったく見てませんが。
とりあえず、そのRoomSet()関数に与えられている引数は正しい物ですか?
RoomSet() 関数内でassertをかけて見ればいいと思いますよ。
70ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..初心者(5,024ポイント)
Date: 2010/08/27(金) 15:29
No:60285
|
|
Title: Re:チョコボの自動生成マップ
|
|
回答ありがとうございます。
貼らせて頂きます。
ご迷惑をお掛け致します。
26ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(206,145ポイント)
Date: 2010/08/27(金) 15:53
No:60287
|
|
Title: Re:チョコボの自動生成マップ
|
|
実行してみましたRandRange内でaとbが同じ値の時に0割り算して異常終了しますので、同じ値にならないように工夫してみてください。
それと、VisualStudioなら実行時にエラー出ている行とエラー内容が標示されるはずです。
>DXtest.exe の 0x005726c9 で初回の例外が発生しました: 0xC0000094: Integer division by zero
必ず確認してエラー内容を正確に報告してください。慣れてくれば自分でも分かるはずです。
それとまず部屋を作るのは後回しにして、区画数をランダムになるようにしてみては?今のままだとかなり画一的なので、区画数が2〜7個で可変とかどうでしょう。
2倍のポイントを手に入れた! 536ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..初心者(5,133ポイント)
Date: 2010/08/27(金) 16:16
No:60289
|
|
Title: Re:チョコボの自動生成マップ
|
|
回答ありがとうございます。
ポインタのミスではなかったのですね・・・。
助かりました。
実は区画をどの様に分ければいいのかがわかりません。
何とか無理やり分けてみたのが添付したソースです。
可変にするとしたらどのように分ければいいのでしょうか?
109ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(206,091ポイント)
Date: 2010/08/27(金) 16:37
No:60290
|
|
Title: Re:チョコボの自動生成マップ
|
|
参考元のサイトは再帰呼び出しを使って復数の区画に分割している様ですね。
再帰呼び出しが分からないと辛いと思うので別の方法でやってみますか?
1)まず分割数を乱数で決める。2〜7
2)分割数カウンタを1にする。
3)Rect[0]をマップ全体のサイズに設定する。
ここからはループ処理になります。
4)区画をRect[0]〜Rect[分割数カウンタ-1]からランダムに選ぶ。
つまり最初はRect[0]しか選ばれない。
5)横分割か縦分割かランダムに決める。
6)Rect[4)で決めた添字]の区画が分割するほど十分な大きさがあるかチェックしてダメなら4)に戻る。
基準は自分で決めてください。
7)区画を決めた方向に分割する。分割位置はランダムに決定。
ただし最低限のサイズは残るように計算のこと。
8)分割数カウンタに1を加算。
9)分割された区画の情報をそれぞれRect[4)で決めた添字]とRect[分割数カウンタ-1]に記録。
10)決めた分割数に達していなければ、4)に戻る。
こんな感じでどうでしょう。
2倍のポイントを手に入れた! 10ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..初心者(5,692ポイント)
Date: 2010/08/27(金) 17:35
No:60293
|
|
Title: Re:チョコボの自動生成マップ
|
|
なるほど・・・そのようにして分割する場所を選べるのですね。
考え方が硬すぎました。
ご丁寧に順序までありがとうございます。
アドバイスを元に作成してみたのですが
9)Rect[分割数カウンタ-1]に記録。 が上手くいっていないようです。
分割される部屋も狭すぎるのですがこれは調整が必要なのですよね?
また6の戻るの処理はコンテニューでいいのでしょうか?
何度も質問してしまい申し訳御座いません。
void Init(){
for (int y=0; y<MAP_H; y++) {
for (int x=0; x<MAP_W; x++) {
Map[y][x] = 0;
};
};
int RoomSplit = rand()%7 + 1;
int SplitCnt = 1;
Rect[0].sx = 0;
Rect[0].sy = 0;
Rect[0].ex = MAP_W-1;
Rect[0].ey = MAP_H-1;
int rs,allow;
for(int i=0; i<RoomSplit; i++){
rs = rand()%SplitCnt; //randSplit
allow = rand()%2; //分割の向き
if((Rect[rs].ex-Rect[rs].sx) > 10 && (Rect[rs].ey-Rect[rs].sy) > 10){
Rect[SplitCnt].sx = Rect[rs].sx;
Rect[SplitCnt].sy = Rect[rs].sy;
Rect[SplitCnt].ex = Rect[rs].ex;
Rect[SplitCnt].ey = Rect[rs].ey;
if( allow == 0){
Rect[SplitCnt].sx = RandRange( Rect[rs].sx+5, (Rect[rs].ex-Rect[rs].sx)/2 );
// Rect[rs].ex = Rect[SplitCnt].sx;
}else{
Rect[SplitCnt].sy = RandRange( Rect[rs].sy+5, (Rect[rs].ey-Rect[rs].sy)/2 );
// Rect[rs].ey = Rect[SplitCnt].sy;
}
SplitCnt++;
}else{
continue;
}
RectSplit( Rect[i].sx, Rect[i].sy, Rect[i].ex, Rect[i].ey );
}
}
559ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..初心者(5,956ポイント)
Date: 2010/08/27(金) 18:00
No:60295
|
|
Title: Re:チョコボの自動生成マップ
|
|
連レス失礼します。
ごめんなさい・・・。
9の分割が上手くいかない原因は初期化でした。
for( int i=0; i<ROOM_MAX; i++ ){
ZeroMemory( &Room[i], sizeof(ROOM) );
ZeroMemory( &Rect[i], sizeof(RECT) );
}
と書いた所上手く動きました。
ただ条件に当てはまらなかった時(if((Rect[rs].ex-Rect[rs].sx) > 10 && (Rect[rs].ey-Rect[rs].sy) > 10)
)のfor文のやり直しの書き方がわかりません。
continueでは上手く動いていないみたいです。
環境ごとに構造体のメモリ管理が違うらしいので
ZeroMemoryはあまり使わない方がいいみたいなのですが今回のみ使用しました。
264ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..初心者(6,182ポイント)
Date: 2010/08/28(土) 00:25
No:60381
|
|
Title: Re:チョコボの自動生成マップ
|
|
何度も質問してしまい申し訳御座いません。
分割がどうしても上手くいきません。
下のラインが消えてしまったり極端に区画が狭かったりしてしまいます。
サイズはかなり広げたのですが上手く動きません・・・。
何度も他人のソースを見直すのは面倒かと思いますが
今一度アドバイスを頂けないでしょうか?
SRand((unsigned) time(NULL));
for( int i=0; i<ROOM_MAX; i++ ){
ZeroMemory( &Room[i], sizeof(ROOM) );
ZeroMemory( &Rect[i], sizeof(RECT) );
}
for (int y=0; y<MAP_H; y++) {
for (int x=0; x<MAP_W; x++) {
Map[y][x] = 0;
};
};
int RoomSplit = rand()%4 + 2;
int SplitCnt = 1;
Rect[0].sx = 0;
Rect[0].sy = 0;
Rect[0].ex = MAP_W-1;
Rect[0].ey = MAP_H-1;
int rs,allow;
for(int i=0; i<RoomSplit; i++){
do{
rs = rand()%SplitCnt; //randSplit
allow = rand()%2; //分割の向き
Rect[SplitCnt].sx = Rect[rs].sx;
Rect[SplitCnt].sy = Rect[rs].sy;
Rect[SplitCnt].ex = Rect[rs].ex;
Rect[SplitCnt].ey = Rect[rs].ey;
if( allow == 0){
Rect[SplitCnt].sx = RandRange( Rect[rs].sx+7, Rect[rs].ex-7 );
Rect[rs].ex = Rect[SplitCnt].sx;
}else{
Rect[SplitCnt].sy = RandRange( Rect[rs].sy+7, Rect[rs].ey-7 );
Rect[rs].ey = Rect[SplitCnt].sy;
}
SplitCnt++;
break;
}while((Rect[rs].ex-Rect[rs].sx) > 14 && (Rect[rs].ey-Rect[rs].sy) > 14);
RectSplit( Rect[i].sx, Rect[i].sy, Rect[i].ex, Rect[i].ey );
}
for(int i=0; i<SplitCnt+1; i++){
RectSplit( Rect[i].sx, Rect[i].sy, Rect[i].ex, Rect[i].ey );
// RoomSet( &Room[i], Rect[i] );
// MakeRoom( Room[i].sx, Room[i].sy, Room[i].ex, Room[i].ey );
}
226ポイント を手に入れた。
|
|
|
|
|
Name: バズー ..初心者(6,424ポイント)
Date: 2010/08/28(土) 09:27
No:60406
|
|
Title: Re:チョコボの自動生成マップ
|
|
連レス失礼します。
ランダムな部屋の配置が出来ました!!
こんな感じでいいのでしょうか?
softyaさんありがとうございます!!
部屋の線を結ぶのが上手くいきません。
0から1へとやってみたのですが他の部屋をまたいでしまいます。
X座標をソートをするような関数を作ってみたのですがこれも上手く動きませんでした。
どの様に改善すればよいのでしょうか・・・。
2倍のポイントを手に入れた! 242ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(206,439ポイント)
Date: 2010/08/28(土) 11:57
No:60408
|
|
Title: Re:チョコボの自動生成マップ
|
|
考え方としては、今までの道のやり方だとマズイので変更してみましょう。
これがベストか試していないので分かりませんが。
1)それぞれの部屋の接続ポイントをランダムに決める
2)縦と横で近い方を知らべて方向を決める。
ここからループ
3)目的ポイントに達したら終了。
4)スタート地点の部屋が属する区画の端に達していたら、目的とする部屋の方向に角度を90度曲げる。
5)移動方向に合わせて軸が一致したら、目的とする部屋の方向に角度を90度曲げる。
(縦の移動ならy座標が一致、横の移動ならx座標が一致)
6) 3)にもどる。
200ポイント を落としてしまった。
|
|
|
|
|
Name: バズー ..初心者(6,566ポイント)
Date: 2010/08/28(土) 20:10
No:60462
|
|
Title: Re:チョコボの自動生成マップ
|
|
色々試してみたのですがもうわかりません・・・。
23についても実装してみたいのですが上手く動きません。
サンプルソースでは比較して線を引いてるのですが変な方向に延びてしまいます。
質問しておいて何なのですが正直プログラムを書く気力がなくなってきてしまいました・・・。
なら辞めろと言われそうなのですがどうしても作りたいんです。
142ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(92,612ポイント)
Date: 2010/08/28(土) 21:14
No:60473
|
|
Title: Re:チョコボの自動生成マップ
|
|
わずわらしかったらスルーしてください
チョコボが何を指しているかわかりませんが
1.全体図を作成(2次元配列)
2.配列の中身を決定(道、壁
3.配列[0,0]から目的地までたどれるか調べる
3−1.右の配列は道か調べる
3−2.下の配列は道か調べる
3−3.左の配列は道か調べる
3−4.上の配列は道か調べる
4.道だったらそこを拠点に3を繰り返す(壁だったら何もしないで戻る
5.目的地についたら今までたどってきた道を画面に表示
考え方としては 再帰というものを使っています
(目的地に必ずつくというのが前提です)
この再帰を習得すると結構考え方に幅がでてきます
229ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(206,951ポイント)
Date: 2010/08/28(土) 22:15
No:60487
|
|
Title: Re:チョコボの自動生成マップ
|
|
休憩したり、違うことをやると良い案が浮かぶこともありますよ。
とdicさんの書き込みが・・・。
そうですね。再帰を使ったほうが楽だったかも(汗)
とりあえず、私は再帰なしで説明しますね。
ソース直しましたので、これ使ってください。
細かいところを整理して、情報を表示させています。
ただ、道の問題は直していません。
問題の1つは道の曲がり方が良くないので部屋と結合する可能性があること。
問題の2つめは隣り合う部屋が分からないのに闇雲に接続しようとしていることです。これは、ソートでは解決しないのでソートを外しました。
この問題を解決するために、まず問題2から片付けましょう。
私の方針は、部屋から一つだけ道を別の部屋に道を伸ばして更にその別の部屋から道を繋いでいくという方針で行きます。練れていないのでシンプルさが足らないかも知れません。
1)区画ごとに4方向の接続済みのフラグを持ちます。これを0にしておきます。
2)区画は0からスタート。
ここからループ
3)全部の方向が埋まっていたら終了。
4)4方向からランダムに方向を選ぶ。ただし未接続なこと。
5)隣り合う区画を調べる ⇒ これは矩形同士の当たり判定を使う。
6)隣り合う区画があったら、8)へ
7)隣り合う区画がなかったら、その方向は接続済みにして3)に戻る。
8)その方向は接続済みにして、隣り合う区画の部屋まで道を接続。
9)接続され側の区画もその方向(元の区画逆方向)は接続済みにする。
10)接続された区画を新たな起点として、3)へ戻る。
検証してないのでバグがあったらごめんなさい。
664ポイント を落としてしまった。
|
|
|
|
|
Name: バズー ..初心者(6,809ポイント)
Date: 2010/08/29(日) 06:52
No:60518
| 解決!
|
Title: Re:チョコボの自動生成マップ
|
|
dic様
全然わずらわしくなんてありません!!
アドバイスありがとうございます。
今回のプログラムが完成したら再帰について勉強してみます。
softya様
私にもわかるように説明して頂いているのでやりにくくて申し訳御座いません。
お忙しいのにサンプルソースをありがとうございます。
これ以上softya様の貴重な時間を頂くのが本当に申し訳ないので質問を締めさせて頂きます。
まだ全然できておりませんが新しく頂いたアドバイスを元に修正してみます。
長い間、誠にありがとうございました。
243ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(207,590ポイント)
Date: 2010/08/29(日) 11:39
No:60535
|
|
Title: Re:チョコボの自動生成マップ
|
|
気分転換にやっておりますので、時間のことでしたら私は別にかまいませんよ。まぁ、焦らないのは良いことなのでじっくり考えてみてくださいね。
中々進まずもどかしいかと思いますが、1つ1つ解決していけばやがて全て解決します。
83ポイント を手に入れた。
|
|
|
|
|
Name: Tatu ..熟練のプログラマー(43,830ポイント)
Date: 2010/08/29(日) 22:32
No:60633
|
|
Title: Re:チョコボの自動生成マップ
|
|
ダンジョンのマップ作成プログラムを作ってみました。
ESCキーで終了。Rキーで再作成。
区画は3×3に分け、それぞれの区画に部屋が一つずつ。
上下左右で隣り合う区画の部屋同士を通路で結ぶようにしています。
108ポイント を手に入れた。
|
|
|
|
Name: シエル [URL] ..熟練のプログラマー(65,263ポイント)
Date: 2010/08/29(日) 20:04
No:60598
|
|
Title: 【DirectXプログラミング】描画について2点
|
|
お世話になります。シエルです。
現在、シューティングゲームを作成中なのですが、
DirectXプログラミングの描画について、質問があります。
【質問@】画面の綺麗なぼやけについて
ゲームオーバー時の画面や途中でストップしたときに、現在のプレイ中の画像を少し
ぼやかしたような描画をしたいのですがどのような方法を行えばよろしいでしょうか?
現在私が行っている方法として、現在プレイ中の画面をその画面より小さなテクスチャにレンダリングし、
そのテクスチャを拡大して、再度画面に描画するという方法を取っているのですが、たしかにぼやけはするものの
拡大してるので画像が少し粗くなってしまいます。
どうすれば綺麗にぼやけを表現できるでしょうか?
目標としては、東方地霊殿の体験版でプレイ中にエスケープキーを押して
ストップしたときのあのぼやける感じが目標です。
(東方関連はこの体験版しか持ってません><)
【質問A】テクスチャに描画した際の画像の粗さについて
上の質問と少しかぶりますが、ステージクリアから次ステージに行くまでの間に
現在のプレイ画面をテクスチャに描画して、ロード中の文字と共に数秒間表示させているんですが、
そのテクスチャを描画すると実際のプレイしてる画面よりやや画像が粗くなってしまいます。
これはどのような原因が考えられるでしょうか?
方法としては、
下記のようにまず空のテクスチャを作っといて、そのサーフェイスを取得し、
バックバッファからそのテクスチャのサーフェイスに書き込んでいます。
当然ですが、StretchRectに指定しているRECT構造体の大きさとテクスチャのサイズは同じにしてます。
この処理が終わった後は、作成されたテクスチャをバックバッファにロード中の間、描画しているだけです。
D3DXCreateTexture(lp3ddev,450,610,1,D3DUSAGE_RENDERTARGET,D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&fade);
fade->GetSurfaceLevel(0,&fades);
lp3ddev->StretchRect(backbuf,&rect,fades,NULL,D3DTEXF_LINEAR);
何かパラメータに問題がありますでしょうか?
以上の2点です。
ご教授のほど、よろしくお願い致します。
814ポイント を手に入れた。
|
|
|
|
Name: シエル [URL] ..熟練のプログラマー(66,038ポイント)
Date: 2010/08/29(日) 22:15
No:60630
| 解決!
|
Title: Re:【DirectXプログラミング】描画について2点
|
|
ぼかしはシェーダーですか・・・。
かなり難しそうですね。余裕があったらやってみます。
シェーダーを使わない方法も試してみました。
確かにある程度のクオリティは出せましたが、東方とまではいかないですね。
東方のぼかしはやはりシェーダーを使ってそうです。
この方法で行くかシェーダーを使うかはよく考えて決めていきます。
質問Aの方ですが、ちょっとテクスチャマッピングで一部おかしな部分がありました。
そこを直したらおそらく解決すると思うので、こちらは大丈夫です。
ご迷惑をおかけしました。
># 最初から空のテクスチャに描けば、こんなコピーしなくて済むんじゃ……。
ええwその通りですw
最初からテクスチャをレンダリングターゲットに変更して描画しようとしてたんですが、
ビューポートの設定やら何やら色々問題が出てきたので、今の方法に行き着きました。
もうすこし理解度が高ければ、最初からテクスチャをレンダリングターゲットにして描画
してたんですけどね^^;
こちらはもっと勉強します!
とりあえず方法が分かったので、これにて解決と致します。
Justyさん!ありがとうございました!
348ポイント を手に入れた。
|
|
|
|
Name: 麻耶 ..ぴよぴよ(189ポイント)
Date: 2010/08/29(日) 21:05
No:60621
|
|
Title: 全画面で表示
|
|
こちらで紹介されてるSTGを作っているのですが、
コンパイルを押したあとに表示される画面を全部使って表示したいのですが、
どうやったら良いでしょうか?
プレイ画面表示サイズとかありますでしょうか・・?
左の画像などを全部消して・・という風にやりたいのですが・・。
86ポイント を手に入れた。
|
|
|
|
Name: 麻耶 ..ぴよぴよ(156ポイント)
Date: 2010/08/29(日) 21:47
No:60627
| 解決!
|
Title: Re:全画面で表示
|
|
親切に教えて下さりありがとうございます^^*
URL先の関数も参考にして変えてみます!
ありがとうございます!
33ポイント を落としてしまった。
|
|
|
|
Name: 迷彩吹雪 ..入門者(2,530ポイント)
Date: 2010/08/29(日) 18:43
No:60582
|
|
Title: 文字配列の操作について
|
|
基礎的な事だとは思いますがご教示ください。
以下のプログラムは制作中のゲームの一部を簡略化したものです。
実行するとコメント部分でアクセス違反が発生します。
#include <iostream>
char* TEXT;
void main(){
TEXT = new char[9+1]; //null文字用に+1
TEXT = "ABCDEFGHI";
std::cout << TEXT << std::endl;
std::cout << "0〜9までの番号を入力すると該当する文字が「J」になります(したい)" << std::endl;
int i;
std::cin >> i;
TEXT[i] = 'J'; //ここでアクセス違反が発生
std::cout << TEXT << std::endl;
delete[] TEXT;
TEXT = 0;
return;
}
TEXTはchar*型なので文字列の先頭アドレスが格納されている。
TEXT[i]はchar型で文字が格納されている。
そこで代入によってTEXT[i]の文字を書き変え可能だと考えたのですが、上述の通りアクセス違反が出ます。
どのようにすれば文字を書き換えられるのでしょうか。
開発環境:VC++2008EE
240ポイント を手に入れた。
|
|
|
|
Name: h2so5 ..かけだし(1,874ポイント)
Date: 2010/08/29(日) 19:01
No:60586
|
|
Title: Re:文字配列の操作について
|
|
ヒント:
たとえば配列の一番最初にアクセスしたいとき、
TEXT[(int)'0']
は正しいでしょうか?
55ポイント を手に入れた。
|
|
|
|
|
Name: 迷彩吹雪 ..入門者(2,740ポイント)
Date: 2010/08/29(日) 19:15
No:60587
|
|
Title: Re:文字配列の操作について
|
|
(int)'0'
はchar型からint型へのキャストですよね。
(int)'0' != 0
だと思うので、TEXT[(int)'0'] は間違いだと思います。配列の先頭要素はTEXT[0]ではないかと。
キーボードからの入力はint型変数に代入してもchar型と言うことですか?
しかし
int i;
std::cin >> i;
を
int i = 3;
などとしてもやはりエラーになります。
136ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..上級者(18,416ポイント)
Date: 2010/08/29(日) 19:18
No:60588
|
|
Title: Re:文字配列の操作について
|
|
TEXT = new char[9+1]; //null文字用に+1
TEXT = "ABCDEFGHI";
新しく new した配列の中に "ABCDEFGHI" を設定したかったのでしょうけど、これだと TEXT が、全く別の書き込み禁止の領域を指すことになるので、書き込むことが出来ません。
strcpy 等の関数を使ってコピーして下さい。
strcpy(TEXT, "ABCDEFGHI");
# というより文字列リテラルを char* に変換できる仕様がおかしいという気も
140ポイント を手に入れた。
|
|
|
|
|
Name: 迷彩吹雪 ..入門者(3,003ポイント)
Date: 2010/08/29(日) 20:30
No:60608
| 解決!
|
Title: Re:文字配列の操作について
|
|
TEXTが定数になってしまうと言うことですね。
以下のように書き直したところ動作しました。
#include <iostream>
char* TEXT;
char String[] = "ABCDEFGHI";
const int TEXT_NUM = 9+1; //null文字用に+1
void main(){
TEXT = new char[TEXT_NUM];
for(int i=0; i<TEXT_NUM; i++){
TEXT[i] = String[i];
}
std::cout << TEXT << std::endl;
std::cout << "0〜9までの番号を入力すると該当する文字が「J」になります" << std::endl;
int i;
std::cin >> i;
TEXT[i] = 'J';
std::cout << TEXT << std::endl;
delete[] TEXT;
TEXT = 0;
return;
}
同じようにゲーム側のプログラムも書き直したところ、期待通りの動作を確認しました。
strcpy()関数も調べましたが、「処理系によっては動作不能になります」と書いてあるところがあったので怖くなって避けました。
>キーボードからの入力はint型変数に代入してもchar型と言うことですか?
の疑問が残っていますが、本題は片付いたので解決とします。ありがとうございました。
263ポイント を手に入れた。
|
|
|
|
|
Name: h2so5 ..かけだし(1,970ポイント)
Date: 2010/08/29(日) 20:43
No:60614
|
|
Title: Re:文字配列の操作について
|
|
std::cinは代入先がintの場合自動で変換されるみたいです。
勘違いしていました。申し訳ありません。
9ポイント を手に入れた。
|
|
|
|
|
Name: 迷彩吹雪 ..入門者(3,813ポイント)
Date: 2010/08/29(日) 20:52
No:60619
|
|
Title: Re:文字配列の操作について
|
|
問題を説明するには不要な入力処理を書いて誤解を招いてしまいました。
解決にご協力して頂き感謝します。
45ポイント を手に入れた。
|
|
|
|
Name: スモモ ..入門者(2,525ポイント)
Date: 2010/08/29(日) 19:44
No:60593
|
|
Title: directxでのオフスクリーン作り方について
|
|
いつも、お世話なっています。
[1] 質問文
[1.1] directxでオフスクリーン作りたいです。
[1.2] 取り組んだプログラムコードがまだありません。
[1.3]
[1.4]
[2] 環境
[2.1] OS : Windows
[2.2] コンパイラ名 : VC++ 2008
[3] その他
・C言語を一年半ぐらい勉強しました。初級か中級ぐらいです。
・ライブラリを使っていません。
マルナゲで申し訳ございませんが。
よろしくの願いたします。
165ポイント を落としてしまった。
|
|
|
|
Name: スモモ ..入門者(2,558ポイント)
Date: 2010/08/29(日) 20:23
No:60604
|
|
Title: Re:directxでのオフスクリーン作り方について
|
|
シエルさん
ありがとうございます。
たぶんそうです。
33ポイント を手に入れた。
|
|
|
|
|
Name: スモモ ..入門者(2,925ポイント)
Date: 2010/08/29(日) 20:36
No:60612
|
|
Title: Re:directxでのオフスクリーン作り方について
|
|
シエルさん
ありがとうございます。
構文
HRESULT CreateOffscreenPlainSurface(
UINT Width,
UINT Height,
D3DFORMAT Format,
DWORD Pool,
IDirect3DSurface9** ppSurface,
HANDLE* pHandle
);
パラメータ
Width
[in] サーフェイスの幅。
Height
[in] サーフェイスの高さ。
Format
[in] サーフェイスのフォーマット。「D3DFORMAT」を参照すること。
Pool
[in] サーフェイス プール タイプ。「D3DPOOL」を参照すること。
ppSurface
[out, retval] 作成される IDirect3DSurface9 インターフェイスへのポインタ。
pHandle
[in] 予約済み。このパラメータは NULL に設定する。
Format,Pool,ppSurface,pHandle
が読んでもわかりません。
ご教授の程、よろしくお願いします。
367ポイント を手に入れた。
|
|
|
|
|
Name: スモモ ..入門者(2,947ポイント)
Date: 2010/08/29(日) 20:52
No:60618
|
|
Title: Re:directxでのオフスクリーン作り方について
|
|
ありがとうございます。
参考させていただきます。
22ポイント を手に入れた。
|
|
|
|
Name: しろ ..初心者(6,365ポイント)
Date: 2010/08/29(日) 16:40
No:60574
|
|
Title: 分割コンパイルについて
|
|
こんにちは。
分割コンパイル(龍神録5章)でfunction.hの中の各関数の宣言内でGLOBALという文言が入りますが、これは必要なのでしょうか? 現在のところ、それを読み込んでいるmain関数以外で該当関数を使っていないような気がするので、必要ない気もします。
ただ、このあたりの分割コンパイルについてはあまり勉強したことがなく、あまり自信がありません。(いくつかのwebサイトを見ても、extern宣言あたりの説明はあるのですが、龍神録のような#ifdefを使ったテクニカルなやり方についてはのっているサイトを見つけられませんでした)
どこか、このあたりのことに関して詳しいサイト(あるいは書籍)がありましたら教えていただければ幸いです。
よろしくお願いします。
37ポイント を手に入れた。
|
|
|
|
Name: しろ ..初心者(6,423ポイント)
Date: 2010/08/29(日) 20:33
No:60609
| 解決!
|
Title: Re:分割コンパイルについて
|
|
>逆に言えば、externと実体を混乱せずに書けるなら、必要ないです。
なるほどそういうことだったのですね。
サイトのほうも参考にさせていただきます。
どうもありがとうございました!
58ポイント を手に入れた。
|
|
|
|
Name: パコネコ ..プログラマー(36,968ポイント)
Date: 2010/08/29(日) 19:31
No:60590
|
|
Title: こわれた?!
|
|
私のパソコンが壊れたのかサイトのバグなのかわからないのですが…
いくつかの質問を見ようとすると、その質問と関係ないところに飛ばされてしまいます。
タイトルのところが「ネットワークの無効化」とかになっていて、レスも一つもない状態で…
他の方はそういうことないでしょうか?
140ポイント を手に入れた。
|
|
|
|
Name: パコネコ ..プログラマー(36,889ポイント)
Date: 2010/08/29(日) 19:34
No:60592
| 解決!
|
Title: Re:こわれた?!
|
|
すいません
何やら直ったようです…さっきまで見ようとしていた場所もなくなってます…ひらがななどを数値にとか言うのを見ようとしていたのですが…投稿したらそのレス自体がなくなってました。
申し訳ございません
=======
私は過去レスのあたりを見ていたようです…並びが一致しますし、
一体なぜ過去ログのページを見ていたのかわかりません…普通にページトップから入ってたのですが…
その上、過去ログのさっき見れなかったところも見れるようになっていました。
なので私の何らかのミスだと思います。
驚かせてしまって、すいません。 
79ポイント を落としてしまった。
|
|
|
|
Name: ペキロゲン ..ぴよぴよ(702ポイント)
Date: 2010/08/27(金) 12:07
No:60277
|
|
Title: ソースファイルを開けません
|
|
今9章をやっているのですが、エラーコードで
IntelliSense: ソース ファイルを開けません "struct.h" define.h
IntelliSense: ソース ファイルを開けません "define.h" gv.h
IntelliSense: ソース ファイルを開けません "function.h" gv.h
とでできます。
ソースコードは
define.h
↓
//フィールドの広さ
#define FIELD_MAX_X 384
#define FIELD_MAX_Y 448
//フィールドの左上の座標
#define FIELD_X 32
#define FIELD_Y 16
//パッドキーの最大数
#define PAD_MAX 16
#include "struct.h"
GV.h
↓
#include "../../../include/DxLib.h"
#include "define.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
#include "function.h" //関数宣言
//画像用変数宣言部
GLOBAL int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
//構造体変数宣言部
GLOBAL ch_t ch; //キャラクタデータ宣言
GLOBAL int func_state;
GLOBAL int img_board[40];
GLOBAL configpad_t configpad; //キーコンフィグ
#include "math.h"
です。
他もやり方をみてミスはないはずなのですが、どうすれば良いのでしょうか?
ちなみに今までも、上記のエラーの部分にずっと赤波線がでてきていたのですが、出来る時もあればエラーすることもあり、ソースをいじってないのに時間がたてば赤線は消えないものの実行できたりしました。
また、ここ以外にもエラーが20個でできたかと思いきや、何もしてないのにいきなりエラーが消えて、数個になったり実行できることも度々ありました。これはどうなってるのでしょうか?
ちなみにvisualstudio2010を使っています。

702ポイント を手に入れた。
|
|
|
|
Name: DVDM [URL] ..熟練のプログラマー(59,211ポイント)
Date: 2010/08/27(金) 23:08
No:60366
|
|
Title: Re:ソースファイルを開けません
|
|
>>ペキロゲンさん
> IntelliSense: ソース ファイルを開けません "struct.h" define.h
> IntelliSense: ソース ファイルを開けません "define.h" gv.h
> IntelliSense: ソース ファイルを開けません "function.h" gv.h
struct.h と同じフォルダに define.h はありますでしょうか。
また、GV.h と同じフォルダに define.h 及び、function.h はありますでしょうか。
もし無いのであれば、ファイルパスを記述する必要があります。
例えば、struct.h から見て define.h が、
二つ上のフォルダの sample フォルダにあったとするとこんな感じで記述します。
#include "../../sample/define.h"
「../」は一つ上のフォルダと言う意味で、二回書いてるので二つ上のフォルダになります。
「フォルダ名/」はそのフォルダの中と言う意味になります。
ファイルパスは大丈夫と言うのであれば一度リビルドすると直るかもしれません。
232ポイント を手に入れた。
|
|
|
|
|
Name: ペキロゲン ..ぴよぴよ(782ポイント)
Date: 2010/08/28(土) 13:26
No:60413
|
|
Title: Re:ソースファイルを開けません
|
|
回答ありがとうございます。
dehine.h、GV.h、function.h、struct.h全て同じヘッダーフォルダに入っています。
また、リビルドもやってみましたが、状況は特に変わりませんでした。
それと、ひとつ気になることがあるのですが、この龍神録プログラミングの館通りに作る時、プロパティっていじる必要がありますか?
最初は特にプロパティをいじってなかったのですが、ある時Dxlibが見つかりませんというエラーが出てきて、Dxライブラリ置き場の説明通りにプロパティを変更をしたのですが、もしかするとそれが問題あったのかなぁと思いまして・・・・・ 
80ポイント を手に入れた。
|
|
|
|
|
Name: DVDM [URL] ..熟練のプログラマー(59,577ポイント)
Date: 2010/08/28(土) 18:09
No:60429
|
|
Title: Re:ソースファイルを開けません
|
|
>>ペキロゲンさん
> それと、ひとつ気になることがあるのですが、
> この龍神録プログラミングの館通りに作る時、プロパティっていじる必要がありますか?
ペキロゲンさんがDXライブラリを別の場所で保管しているなら設定しなければいけないと思います。
デフォルトでは追加のライブラリディレクトリが ../include/ になっているようなので
特に変更しなくても大丈夫だと思います。
Visual Studio 2010 を使ったことがないので名称は違うかもしれませんが、
追加のライブラリディレクトリは、
[プロジェクト]→[プロパティ]→[構成プロパティ]→[リンカ]→[全般]の中で確認できます。
> dehine.h、GV.h、function.h、struct.h全て同じヘッダーフォルダに入っています。
> また、リビルドもやってみましたが、状況は特に変わりませんでした。
もう一度龍神録のプロジェクトをダウンロードし、
現在お試しになっている章のプロジェクトをビルド、あるいはリビルドすればどうなりますでしょうか。
366ポイント を手に入れた。
|
|
|
|
|
Name: ペキロゲン ..ぴよぴよ(944ポイント)
Date: 2010/08/29(日) 17:04
No:60576
|
|
Title: Re:ソースファイルを開けません
|
|
>>DVDMさん
プロパティは変更しなくて良かったんですね。
そん時は最初から入ってるのが分からなくて・・・
それと、もう一度龍神録のプロジェクトをダウンロードし、今の章まで再びしてみたところ、今度は実行することは出来ました。ありがとうございます!
>>シエルさん
回答ありがとうございます
ヘッダファイルは初期から場所は特に変更してませんでしたが、何か問題があったのかな・・・?
ちなみに現在は普通に作動することが出来ていますが、未だに
> IntelliSense: ソース ファイルを開けません "struct.h" define.h
> IntelliSense: ソース ファイルを開けません "define.h" gv.h
> IntelliSense: ソース ファイルを開けません "function.h" gv.h
のエラーはでてきて、赤波線が引かれているのですが、これはもうスルーしていて良いのでしょうか?
162ポイント を手に入れた。
|
|
|
|
|
Name: DVDM [URL]
Date: 2010/08/30(月) 16:12
No:602771283152353
|
|
Title: Re:ソースファイルを開けません
|
|
>>ペキロゲンさん
過去ログに行ってしまってすいません;
まだ見ていると信じて…。
> 赤波線が引かれているのですが、これはもうスルーしていて良いのでしょうか?
警告ではなく、エラーであるなら放っておくのはまずいです。
新しくダウンロードした龍神録でも上記赤線は出ていまでしょうか。
もし出ていないのであれば新しい龍神録に
今までペキロゲンさんがお書きになったソースを追加していき、赤線がなくなれば成功です。
しかし、追加した時に同じように赤線が出るのであれば、恐らくファイルパスが原因かなと思われます。
|
|
|
|
|
Name: ペキロゲン
Date: 2010/08/31(火) 04:10
No:602771283195424
|
|
Title: Re:ソースファイルを開けません
|
|
>>DVDMさん
何度も回答していただき本当にありがとうございます。
説明不足で非常に分かりづらくてすみません。
最初にダウンロードした方でまず赤線が出ていて、質問立てたときはそれ以外にもエラーがあり実行できず、その赤線エラーが第一の原因だと思っていたのですが、実はその時はそれ以外のエラーのせいで実行出来なかったと後で分かりました。
そして上記の返信をしたときは、もう一度新しくダウンロードした龍神で行い、今度は実行することができました。が、こちらでもまた、初めダウンロードしたのと同じ赤線エラーがでていました。
ファイルパスが原因ですか・・・
それはどのようにしたら改善出来るのでしょうか?
初心者で、何度もお尋ねしてしまい申し訳ありません。
|
|
|
|
|
Name: DVDM [URL]
Date: 2010/08/31(火) 12:50
No:602771283226628
|
|
Title: Re:ソースファイルを開けません
|
|
>>ペキロゲンさん
> ファイルパスが原因ですか・・・
> それはどのようにしたら改善出来るのでしょうか?
新しくダウンロードしたプロジェクトに手を加えないでそのエラー?が出ていると言う事は
ファイルパスではないのかなという気がしてきました。
プロジェクト一式をアップロードして頂こうかとも考えたのですが、
開発環境が Visual Studio 2010 と言う事なので、
残念ながら私がそのコンパイラを所有していないため確認が取れない状態です。
赤い波線がこのコンパイラで出るのかは解らないですが、
試しに Visual C++ 2010 Express(無料) をダウンロードし、
龍神録のプロジェクトをコンパイルしてみた所、上記のようなエラーは出ませんでした。
もし差し支えなければ、
http://www.microsoft.com/japan/msdn/vstudio/2008/product/express/
こちらから、Visual C++ 2008 Expreee Edition(黄色いバナー)を
インストールし、新しくダウンロードした龍神録を実行するとどうなりますか?
こちらも的確な回答が出来ずに申し訳ないです;
|
|
|
|
|
Name: ペキロゲン
Date: 2010/08/31(火) 15:49
No:602771283237388
| 解決!
|
Title: Re:ソースファイルを開けません
|
|
>>DVDMさん
Visual C++ 2008 Expreee Editionでやってみたところ、先ほどまでの赤線のエラーが全てなくなりました。
ありがとうございます!!
やはりvisualstudio2010だと少し勝手が違ったのでしょうか・・・
おかげ様で現在はエラーなく出来ております。
今回は何度もお教えいただき真にありがとうございました!
|
|
|
|
|
Name: DVDM [URL]
Date: 2010/08/31(火) 16:28
No:602771283239685
|
|
Title: Re:ソースファイルを開けません
|
|
>>ペキロゲンさん
> Visual C++ 2008 Expreee Editionでやってみたところ、先ほどまでの赤線のエラーが全てなくなりました。
> ありがとうございます!!
新しいコンパイラなので何かが違うのかもしれませんね〜
その辺については詳しくないのでお答えできないのが残念です;
あ、言い忘れてましたが、Visual C++ 2008 Express Edition は無料なのですが、
登録しないと30日間しか使えなかったと思います。
メニューバーにあります[ヘルプ]→[製品の登録]から手続きを行う事でずっと使えるようになります。
(アンケートに答えるだけで登録は勿論無料です)
また、リソースエディタがありませんのでフリーのソフトで補う等しなくてはいけません。
それでは、制作頑張って下さい!
|
|
|
|
|
Name: Justy ..伝説なるハッカー(570,393ポイント)
Date: 2010/08/28(土) 17:29
No:60427
|
|
Title: Re:DxLibのアーカイバ機能が動かない
|
|
DXアーカイブ説明書(readme.txt)にこう書いてあります。
中身を一つに纏めたいフォルダを DxaEncode.exe にドラッグ&ドロップします
ドラッグ&ドロップするのはファイルではなく、“フォルダ”です。
112ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(63,440ポイント)
Date: 2010/08/28(土) 18:16
No:60431
|
|
Title: Re:DxLibのアーカイバ機能が動かない
|
|
やってみました。ブロックを崩すと弾?が落ちてくるんですね。
新しい発想だと思いますが、ちょっと簡単すぎですかね。
崩していくと絵がだんだん見えていくのはおもしろいと思います。
絵が私にとっては衝撃的でしたが^^;
絵は自分で描かれたんですか?
23ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(92,383ポイント)
Date: 2010/08/28(土) 19:09
No:60452
|
|
Title: Re:DxLibのアーカイバ機能が動かない
|
|
>シエルさん
ゲーム性より、いろいろプログラム的な実験の製作物って感じで
あんまりおもしろみはないかなと自分でも思ってます
あと、忘れてたのですがR指定です(汗
(未成年の方もこられるんでしたね)
>絵は自分で描かれたんですか?
有償で募集をかけて、応募されてきた方が描かれてます
142ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(31,662ポイント)
Date: 2010/08/29(日) 07:44
No:60521
|
|
Title: Re:DxLibのアーカイバ機能が動かない
|
|
やってみました。
昔々その昔、MSXだったか、セガマスターシステムだったかで似たようなのがありましたね。
私は指が5本しかありませんが軽くクリアできました。
ついでにdicさんの趣味の一端をうかがい知ることも出来ました。
53ポイント を手に入れた。
|
|
|
|
|
Name: DecentLove ..上級者(17,453ポイント)
Date: 2010/08/29(日) 11:40
No:60536
|
|
Title: Re:DxLibのアーカイバ機能が動かない
|
|
やってみましたよ!
なかなか面白かったです、が、他の方の感想を読む前にプレイしたので絵には驚きましたが^^;
気づいたこととしては、クリアしたあとまたプレイすると、前回プレイ時に最後に壊したブロックの破壊エフェクトが一瞬写ってしまうのと、ダメージが引き継がれてしまってました。
上への移動がちょっとゆっくり過ぎた感がありました。
でも、面白かったです。
163ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(93,952ポイント)
Date: 2010/08/29(日) 17:02
No:60575
| 解決!
|
Title: Re:DxLibのアーカイバ機能が動かない
|
|
>へろりさん DecentLoveさん
MSXですか
聞いたことはありますが、実物を見たことはないですね
そうとう昔なんでしょうね
>ブロックの破壊エフェクト
ちらっとありますね
修正します
ダメージを引き継ぐのは仕様です
HP200でステージ4つクリアするしくみです
感想ありがとうございました
159ポイント を手に入れた。
|
|
|
|
Name: ニトロ ..ぴよぴよ(93ポイント)
Date: 2010/08/29(日) 06:45
No:60516
|
|
Title: 構造体配列の初期化
|
|
構造体配列の初期化は下のmemsetで正しいのでしょうか?
全て0埋めしたいです。
zeromemoryはつかわないものとします。
typedef struct{
int a;
int b;
}TEST;
TEST test[10];
memset( &test, 0, sizeof(test) );
memset( &test, 0, sizeof(test)*10 );
93ポイント を手に入れた。
|
|
|
|
Name: へろり ..プログラマー(31,731ポイント)
Date: 2010/08/29(日) 07:51
No:60522
|
|
Title: Re:構造体配列の初期化
|
|
これでいいと思いますよ。
ただ、構造体のメンバに実数型・ポインタ型が含まれている場合、不都合が生じる事もありますね。
これはmenset()固有の問題ではなく、すべてのビットを0でクリアするという仕様上の問題です。
69ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(64,000ポイント)
Date: 2010/08/29(日) 07:56
No:60524
|
|
Title: Re:構造体配列の初期化
|
|
memset( &test, 0, sizeof(test)*10 );
↑あとこれは10倍する必要ってありましたっけ?
40ポイント を落としてしまった。
|
|
|
|
|
Name: へろり ..プログラマー(31,757ポイント)
Date: 2010/08/29(日) 07:59
No:60526
|
|
Title: Re:構造体配列の初期化
|
|
>あれ?配列だから、&testの&はいらないんじゃ?
あら。 そうですね。
思いっきり見逃していたようです。 失礼しました。
正解は、memset( test, 0, sizeof(test) );ですね。
memset( &test, 0, sizeof(test)*10 );
の場合は、test の型はTEST[10]ですので、*10はちょっとよろしくありませんね。
&も不要です。
26ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(212,059ポイント)
Date: 2010/08/29(日) 09:29
No:60528
|
|
Title: Re:構造体配列の初期化
|
|
memset(test, 0, sizeof(TEST)*10);
こうしたかったのではないかと推測
40ポイント を手に入れた。
|
|
|
|
|
Name: ニトロ ..ぴよぴよ(241ポイント)
Date: 2010/08/29(日) 09:34
No:60529
|
|
Title: Re:構造体配列の初期化
|
|
すみません(汗)
疑問に思って調べてみたのですが出てこなかったので
こちらにベタ書きして間違えておりました。
作っているソースでは&はついておりません。
>>正解は、memset( test, 0, sizeof(test) );ですね。
配列だからといって10倍しなくていいのですね。
勉強になりました。
みなさまご回答ありがとうございました。
>>バグ様
当たりですw
それも正しいのでしょうか?
148ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(32,000ポイント)
Date: 2010/08/29(日) 14:16
No:60556
|
|
Title: Re:構造体配列の初期化
|
|
>TEST test[10] = {0};
>でいいのではないでしょうか。
そもそものスレッドの趣旨は
>全て0埋めしたいです。
ということですから、フリオさんの方法だとパティングの部分が0クリアされませんね。
追記です。
なんて書いておいて何ですが、パディングの中身を意識しなければならないようなコードは書くべきではありません。
アラインは処理系が都合上行うもので、プログラマが関知するべきではありません。
プログラマが扱うのはあくまでもメンバであるべきです。

100ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..上級者(18,202ポイント)
Date: 2010/08/29(日) 15:43
No:60570
|
|
Title: Re:構造体配列の初期化
|
|
>ということですから、フリオさんの方法だとパティングの部分が0クリアされませんね。
初期化子を使って初期化した場合、指定していない領域が 0 で初期化されることは保証されています
2倍のポイントを手に入れた! 184ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(222,016ポイント)
Date: 2010/08/29(日) 16:05
No:60571
|
|
Title: Re:構造体配列の初期化
|
|
> 初期化子を使って初期化した場合、指定していない領域が 0 で初期化されることは保証されています
確実に初期化されるのは、部分オブジェクトだけですね。
詰め物は部分オブジェクトではないのでは?
C++の場合は、もっとはっきりと、「明示的に初期化されなかった各メンバ」と書かれていますね(8.5.1 集成体)。
63ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(31,964ポイント)
Date: 2010/08/29(日) 16:12
No:60572
|
|
Title: Re:構造体配列の初期化
|
|
>初期化子を使って初期化した場合、指定していない領域が 0 で初期化されることは保証されています
最近の規格は知りませんが、本当にそうですか?
構造体の初期化子に省略されたメンバがある場合、それらのメンバは0で初期化されることが保証されていますが、構造体のすべてのビットが0で初期化される保証は無いと思うのですが。
86ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..上級者(18,276ポイント)
Date: 2010/08/29(日) 16:37
No:60573
|
|
Title: Re:構造体配列の初期化
|
|
ああ、ちゃんとパディング領域って書いてましたね、すみません。確かに構造体に対する初期化子だと無理そうです。
0埋めするのと全てのメンバを0初期化するのを混同してました。
74ポイント を手に入れた。
|
|
|
|
Name: 京 ..かけだし(1,645ポイント)
Date: 2010/08/29(日) 14:33
No:60559
|
|
Title: 分割先でのこと。
|
|
ClearDrawScreenや ProsessMessageなどの関数を分割したファイルで使いたい場合どうすればいいですか?
25ポイント を手に入れた。
|
|
|
|
Name: 京 ..かけだし(1,679ポイント)
Date: 2010/08/29(日) 14:38
No:60561
|
|
Title: Re:分割先でのこと。
|
|
それだとソースコードが長くなり、デバッグにも苦労するので分割先のファイルの中だけで作ってしまいたいのです。どうすればいいですか?
34ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(64,359ポイント)
Date: 2010/08/29(日) 14:45
No:60564
|
|
Title: Re:分割先でのこと。
|
|
全部メインループの中だけで書こうとするから長くなるんです。
分割先のファイルの中でやりたい関数をいくつか書いて、それを一つの関数にすべてまとめます。
その一つにまとめた関数をメインループの中で呼び出せば、長くなりません。
89ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(31,878ポイント)
Date: 2010/08/29(日) 14:45
No:60565
|
|
Title: Re:分割先でのこと。
|
|
一度設計から見直してみては。
もし、デバッグコードとして埋め込むのであれば、ProsessMessage()はまだしもClearDrawScreen()はあちこちに埋め込むと、いろいろと不都合が出そうです。
どうしても使いたい場合は、それらを使うソースファイルの先頭あたりで #includce "Dxlib.h" とすればいいですよ。
分割コンパイル・翻訳単位・プロトタイプ宣言。 あたりをグーグル先生に聞くと幸せになれるかもしれません。
122ポイント を落としてしまった。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(64,449ポイント)
Date: 2010/08/29(日) 14:50
No:60567
|
|
Title: Re:分割先でのこと。
|
|
とりあえずまだまだファイル分割に慣れていない感があります。
龍神録のプロジェクトファイルをダウンロードしてみて、
どのように分割されているか参考にし、自分にあった効率の良い設計に作り直して下さい。
90ポイント を手に入れた。
|
|
|
|
|
Name: 京 ..かけだし(1,706ポイント)
Date: 2010/08/29(日) 14:51
No:60568
| 解決!
|
Title: Re:分割先でのこと。
|
|
分かりました。いろいろ勉強します。ありがとうございました。
27ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(209,776ポイント)
Date: 2010/08/29(日) 15:13
No:60569
|
|
Title: Re:分割先でのこと。
|
|
ちなみに「龍神録プログラミングの館」の50章のプログラムのメインループはこれだけで構成されていますが、cppのファイルとしては22個あります。多分、京さんのお望みの事が実現できているんじゃないかと思います。
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessLoop()==0){//メインループ
music_ini();
switch(func_state){
case 0://初回のみ入る処理
load(); //データロード
first_ini();//初回の初期化
func_state=99;
break;
case 99://STGを始める前に行う初期化
ini();
load_story();
func_state=100;
break;
case 100://通常処理
enter_func_tm("最初");
calc_ch(); enter_func_tm("キャラ計算");
ch_move(); enter_func_tm("キャラ移動");
cshot_main(); enter_func_tm("自機ショットメイン");
enemy_main(); enter_func_tm("敵処理メイン");
boss_shot_main();enter_func_tm("ボスショットメイン");
shot_main(); enter_func_tm("ショットメイン");
out_main(); enter_func_tm("当たり判定");
effect_main(); enter_func_tm("エフェクトメイン");
calc_main(); enter_func_tm("計算メイン");
graph_main(); enter_func_tm("描画メイン");
bgm_main(); enter_func_tm("BGMメイン");
if(boss.flag==0)
stage_count++;
break;
default:
printfDx("不明なfunc_state\n");
break;
}
music_play(); enter_func_tm("音楽再生");
fps_wait(); enter_func_tm("待機した時間",1);
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
count++;
}
DxLib_End();//DXライブラリ終了処理
return 0;
}
2倍のポイントを手に入れた! 1,700ポイント を手に入れた。
|
|
|
|
Name: 麻耶 ..ぴよぴよ(93ポイント)
Date: 2010/08/28(土) 22:13
No:60486
|
|
Title: 敵の増やし方、減らし方
|
|
こんにちは。麻耶といいます。初歩的な質問になっちゃうんですが、龍神録のプログラミングで、敵の減らし方、増やし方はどこでやるのか教えていただけないでしょうか・・? enemy.cppで変更出来ますか? よろしくお願いします。
93ポイント を手に入れた。
|
|
|
|
Name: ぬるぽ ..中級者(9,639ポイント)
Date: 2010/08/29(日) 00:13
No:60502
|
|
Title: Re:敵の増やし方、減らし方
|
|
50章を例で言いますと
dat/csv/ 内に書かれてありますエクセルデータで制御できますよ。
26ポイント を手に入れた。
|
|
|
|
|
Name: 麻耶 ..ぴよぴよ(103ポイント)
Date: 2010/08/29(日) 14:41
No:60563
| 解決!
|
Title: Re:敵の増やし方、減らし方
|
|
エクセルデータのこと忘れてました;
ありがとうございます!
2倍のポイントを手に入れた! 10ポイント を手に入れた。
|
|
|
|
Name: dic ..比類無きプログラマー(93,785ポイント)
Date: 2010/08/29(日) 10:51
No:60533
|
|
Title: 通常コンパイルができない
|
|
DirectX SDK 9 Sample のDirectSound関連を追加したいと思い
サンプルをそのままコピーして追加しようとしましたが
コンパイルが通らないです
--------------------構成: スケルトン - Win32 Debug--------------------
コンパイル中...
DXUTsound.cpp
c:\program files\microsoft visual studio\vc98\include\mmsystem.h(113) : error C2146: 構文エラー : ';' が、識別子 'MMVERSION' の前に必要です。
c:\program files\microsoft visual studio\vc98\include\mmsystem.h(113) : fatal error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー
スケルトン.exe - エラー 2、警告 0
とエラーがでてしまいます
mmsystem.h の内部でエラーが起きているようで手が出せません
どこか、具合の悪いインクルードの仕方があるのでしょうか?
ソース全部アップします
開発環境:Visual C++ 6.0 DirectX SDK 9
387ポイント を手に入れた。
|
|
|
|
Name: へろり ..プログラマー(31,900ポイント)
Date: 2010/08/29(日) 11:13
No:60534
|
|
Title: Re:通常コンパイルができない
|
|
MMVERSIONの定義はMMSystem.h内で次のようになっています。
typedef UINT MMVERSION; /* major (high byte), minor (low byte) */
エラーの原因は、このUINTが定義されていないからと思われます。
ので、
MMSystem.h をincludeしている1つ前の行で #include <windows> とでもすればいいかもしれません。
追記です。
>MMSystem.h をincludeしている1つ前の行で #include <windows> とでもすればいいかもしれません。
の行ですか、#include <windows.h> ですね。 失礼しました。 
143ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(93,793ポイント)
Date: 2010/08/29(日) 12:20
No:60538
| 解決!
|
Title: Re:通常コンパイルができない
|
|
>へろりさん
#include <mmsystem.h> の上に #include <windows.h> を追加することでコンパイルできるように
なりました
そして、ちょっとマルチバイトをANSIにバージョンダウンすることで使えるようになりました
ありがとうございました
8ポイント を手に入れた。
|
|
|
|
Name: 蓮 ..初心者(6,484ポイント)
Date: 2010/08/29(日) 09:38
No:60530
|
|
Title: iPhoneでのタッチイベントについて
|
|
OpenGL ESにて開発を行っております。
iPhoneでタッチされた時だけのスクリーン座標を取得することは
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
で出来るのですが押しっぱなしの座標の取得の仕方がわかりません。
例えばキャラクターの移動などでとある座標にあるボタンが押され続けたり
タッチ(指が触れている間ずっと)している時だけ触っている部分にキャラクターを表示すると言った処理を実装したいです。
他に
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
の関数があるみたいなのですがどの関数を使えば実装出来るのでしょうか?
調べてみたのですが
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event等は離した座標しか拾って来れない?
みたいなことが書いてあったので質問させて頂きました。
指で触れている間は座標を取得し続けたいです。
363ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(570,208ポイント)
Date: 2010/08/29(日) 11:53
No:60537
|
|
Title: Re:iPhoneでのタッチイベントについて
|
|
>押しっぱなしの座標の取得
touchesBeganが来て、touchesEndedが来なければ押しっぱなしとして処理して下さい。
あと、タッチ位置が変化すると touchesMovedが来ます。
54ポイント を手に入れた。
|
|
|
|
|
Name: 蓮
Date: 2010/08/31(火) 17:50
No:605301283244641
| 解決!
|
Title: Re:iPhoneでのタッチイベントについて
|
|
ご報告が遅くなってしまい申し訳御座いません。
二つ使う必要があるのですね(汗)
思い通りに動きました。
いつもありがとうございます。
|
|
|
|
Name: ハロ ..ぴよぴよ(156ポイント)
Date: 2010/08/28(土) 08:08
No:60403
|
|
Title: ご相談
|
|
スレ違いでしたらすみません。
皆様にご相談があります。
来年から某専門学校の講師のお話を頂いており
収入は下がってしまいますが行こうかと考えております。
現在、某ゲーム会社で開発をしており社内のライブラリを使っております。
その為、DirectXなどは殆ど理解しないで開発をしております。
まだ時間があるので色々と勉強したいのですが
どの様な事を勉強すればよいでしょうか?
C言語の理解レベルとしてDXライブラリを作れば2Dゲームなら大抵作れます。
ただし3Dは苦手です・・・。
イチから教える側になるとしてDirectXをちゃんと学んだ方がいいですよね?
156ポイント を手に入れた。
|
|
|
|
Name: softya [URL] ..ハッカー(206,639ポイント)
Date: 2010/08/28(土) 18:34
No:60440
|
|
Title: Re:ご相談
|
|
C#で教えている学校があるのでXNAの可能性もあります。
ただ、今時は3Dが主流なので苦手なのはゲームを教える場合問題ですね。
C++など言語を教えるのは問題ないでしょうが。
>来年から某専門学校の講師のお話を頂いており
そもそも相手の方が、どの様な技術力に期待しているか話をちゃんとしたほうが良いと思います。
【追記】
ゲーム開発を授業をする場合、C言語しか分からない(Java or C++ or C#がわからない)&DXライブラリやその社内ライブラリしか扱えないとするとかなり問題ありだと思います。 
2倍のポイントを手に入れた! 234ポイント を手に入れた。
|
|
|
|
|
Name: ROM ..入門者(3,293ポイント)
Date: 2010/08/28(土) 18:42
No:60442
|
|
Title: Re:ご相談
|
|
相手方は何を教えて欲しいのかわからないんですか?
普通まずはそこからでしょう。
35ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(221,799ポイント)
Date: 2010/08/28(土) 18:56
No:60449
|
|
Title: Re:ご相談
|
|
私も専門学校で教えていますが、DirectXそのものについてはそれほど高度な知識を要求されるとは思えません。
早い話が、教科書の内容を事前にしっかりと確認しておき、自分で疑問が出てきた場合はそれについても調べておけばどうにかなります。
もちろん、苦手なまま放置してよいわけではありませんので、普通に使いこなせるようにはなっておくべきですが...
それ以前に、専門学校の生徒の多くは、高校以前の数学などが怪しい場合も多いので、その辺りを補完してあげる必要がありそうです。
C/C++についても、理解が怪しいまま先に進んでしまうので、しっかりフォローしてあげる必要があるでしょう。
大学と違って、高校の普通科出身者だけでなく、工業高校、商業高校、高等専修学校、高卒認定のみなど、本当にいろいろな生徒が集まってきますので、そうしたレベル差を考慮するのも結構骨が折れると思います。
要するに、高度な知識よりも、いかに底上げをするかのほうが重要な気がします。
296ポイント を手に入れた。
|
|
|
|
|
Name: ハロ ..ぴよぴよ(227ポイント)
Date: 2010/08/29(日) 06:48
No:60517
| 解決!
|
Title: Re:ご相談
|
|
皆様回答ありがとうございます。
やはり講師になるにあたってDirectXは覚えたほうがいいようですね。
時間がありますので少しずつ勉強していきます。
71ポイント を手に入れた。
|
|
|
|
Name: polpol ..かけだし(1,921ポイント)
Date: 2010/08/28(土) 05:24
No:60394
|
|
Title: 四聖龍神録の敵のショット
|
|
四聖龍神録の13章「敵にショットを撃たせてみよう」→http://dixq.net/rp/13.htmlで
あまりにも複雑なのでコードを縮めたいんですが
うまくいきません。
以下のコードで敵と弾の画像は表示されるのですがカウント後に弾が直線の動きをしてくれません
for(i=0;i<ENEMY_MAX;i++){//弾幕データ計算
//フラグが立っていて、設定した種類が間違っていなければ(オーバーフロー対策)
shot_bullet[shot[i].knd](i);//.kndの弾幕計算関数を呼ぶ関数ポインタ
if(enemy[i].bltime==enemy[i].cnt){
shot[i].flag=1;//フラグをたてる
}
if(shot[i].flag==1){
bullet2[i].x+=cos(bullet2[i].angle)*bullet2[i].spd;
bullet2[i].y+=sin(bullet2[i].angle)*bullet2[i].spd;
}
DrawRotaGraphF(
bullet2[i].x, bullet2[i].y,
1.0, bullet2[i].angle+PI/2,
img_bullet[bullet2[i].knd][10],TRUE);
}
//1発だけ、自機に向かって直線移動
void shot_bullet_H000(int i){
int k;
k=1;
bullet2[i].knd =enemy[i].blknd2;
bullet2[i].angle =2;
bullet2[i].flag =1;
bullet2[i].x = enemy[i].x;
bullet2[i].y = enemy[i].y;
bullet2[i].col =8;
bullet2[i].cnt =0;
bullet2[i].spd =3;
se_flag[0]=1;
}
構造体shotは作用がよく分からないので省きました
どなたか原因が分かる方よろしくお願いします
594ポイント を手に入れた。
|
|
|
|
Name: ロン ..ぴよぴよ(11ポイント)
Date: 2010/08/28(土) 07:06
No:60400
|
|
Title: Re:四聖龍神録の敵のショット
|
|
不必要なものは無いんだから良くわからないからって省いたら動かなくなるのは当然では?
11ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..かけだし(2,227ポイント)
Date: 2010/08/28(土) 19:49
No:60458
|
|
Title: Re:四聖龍神録の敵のショット
|
|
>どんな動きをするんですか?
敵画像の上に弾画像が描写されてる状態です
150カウントしたら
bullet2[i].x+=cos(bullet2[i].angle)*bullet2[i].spd;
bullet2[i].y+=sin(bullet2[i].angle)*bullet2[i].spd;
分の動きを弾画像にプラスされるハズなんですがプラスされません
いじった所は if(enemy[i].flag==1){//その敵のフラグがオンになってたら
if(0<=enemy[i].pattern && enemy[i].pattern<ENEMY_PATTERN_MAX){
shot[n].bullet[k].knd =enemy[shot[n].num].blknd2;
となってる所をbullet2[i].knd =enemy[i].blknd2;
というように変更しました。
単純に構造体bullet2だけで150カウントすれば直線の動きにしたいんですが
306ポイント を手に入れた。
|
|
|
|
|
Name: Mr.Vince ..かけだし(2,043ポイント)
Date: 2010/08/29(日) 02:12
No:60509
|
|
Title: Re:四聖龍神録の敵のショット
|
|
色々と問題があると思います。
まず、動かない原因についてですが。
>for(i=0;i<ENEMY_MAX;i++){//弾幕データ計算
> //フラグが立っていて、設定した種類が間違っていなければ(オーバーフロー対策)
>shot_bullet[shot[i].knd](i);//.knd
特定の弾のフラグ既に立っていようと居なかろうと(既に画面上に存在していようと)、shot_bullet_H000(int i) が呼び出され、この関数により
>bullet2[i].x = enemy[i].x;
>bullet2[i].y = enemy[i].y;
と、強制的に弾の座標が敵の居場所まで巻き戻っております。
他に:
・shot,enemy,bulletが全て同じインデックス i を参照している
これは即ち、敵1が1番目の弾幕のデータの1番目の弾しかチェックせず、敵2が2番目の弾幕(以下略 を意味します。
故に、1体の敵が多数の弾を同時にコントロールできません。
とりあえず、無理に最初から縮めず、先ずはプログラムを理解してから改造を行う事をお勧めします。
331ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..かけだし(2,319ポイント)
Date: 2010/08/29(日) 04:29
No:60512
|
|
Title: Re:四聖龍神録の敵のショット
|
|
Mr.Vinceさんの言うとおり
shot_bullet[shot[i].knd](i);
の所をif(shot[i].flag==0){}で囲むとうまく動きました。
ありがとうございます^^
ちなみに構造体shot_tを入れるメリットって分かりますか?
92ポイント を手に入れた。
|
|
|
|
|
Name: Mr.Vince ..かけだし(2,144ポイント)
Date: 2010/08/29(日) 04:35
No:60513
|
|
Title: Re:四聖龍神録の敵のショット
|
|
私見ですが、構造体shot_tは弾幕の統制の為ではないかと。
bullet_tのみですと、ばらばらに動くだけで他の弾との連携が取れません。
東方の咲夜の弾幕系統の「発射して暫くしてから、一旦止まって一斉に目標に向かって動き出す」や、弾から更に弾を増殖させる、等する時に必要になると思われます。
101ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..かけだし(2,408ポイント)
Date: 2010/08/29(日) 04:50
No:60514
| 解決!
|
Title: Re:四聖龍神録の敵のショット
|
|
なるほど、複雑な動きをするには構造体が複数必要になるという事ですね。
勉強になりました。
もっと色んなコードをいじってみます。ありがとうございました。
とりあえずこの件は解決で
89ポイント を手に入れた。
|
|
|
|
Name: 七氏 ..かけだし(1,192ポイント)
Date: 2010/08/28(土) 21:27
No:60475
|
|
Title: 画像のRGB取得
|
|
はじめて質問させていただきます
C言語はある程度はわかりますが、まだ勉強中です
タイトルの通り、16*16の指定した画像の左上([0,0])のドットのRGBを取得したいのですが上手くいきません
検索などをして一応下記のように作ってはみたのですが0.0000が表示されるだけで取得してくれません
取得位置の問題かと思い、全体を黒に塗った画像を使ってみたのですが0のままでした
どこが間違っているのでしょうか?お教えいただけると助かります
(下記のプログラムでは16*16のtest.bmpというファイルを読み込んで、左上のRedを取得しようとしています)
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fo;
unsigned char header[54];
unsigned char pixcel[16][16][3];
fo=fopen("test.bmp","rb");
fread(header,1,54,fo);//前54byte(?)が邪魔
fread(pixcel,1,16*16*3,fo);
fclose(fo);
printf("%f",pixcel[0][0][0]);
}
2倍のポイントを手に入れた! 766ポイント を手に入れた。
|
|
|
|
Name: h2so5 ..かけだし(1,741ポイント)
Date: 2010/08/28(土) 22:00
No:60484
|
|
Title: Re:画像のRGB取得
|
|
printf("%i",pixcel[0][0][0]);
ではどうでしょうか?
追記:
あと、pixcel[0][0][0]は左下のピクセルを参照していますよ。 
30ポイント を手に入れた。
|
|
|
|
|
Name: 七氏 ..かけだし(1,090ポイント)
Date: 2010/08/28(土) 23:08
No:60492
|
|
Title: Re:画像のRGB取得
|
|
>>dicさん
すみません、抜けていました
24ビットです
>>h2so5さん
それで試してみましたが、全面黒[255,255,255]で0でした
左下だとは知りませんでした・・・情報ありがとうございます
102ポイント を落としてしまった。
|
|
|
|
|
Name: 七氏 ..かけだし(1,146ポイント)
Date: 2010/08/28(土) 23:15
No:60495
|
|
Title: Re:画像のRGB取得
|
|
っと・・・すみません、色々やってて頭が混乱してたみたいです・・・
printf("%i",pixcel[0][0][0]);
で再度やったみたところ上手くいきました
教えてくれてありがとうございました
[追加]
24ビット bmpファイルのバイナリの内容の54byte分がRGBを取得するのに邪魔(ヘッダー)だというのは検索して見つけたのですが、pngファイルの場合のヘッダー部分のbyteがわかりません
わかる方が居ましたら教えてもらえると助かります 
56ポイント を手に入れた。
|
|
|
|
|
Name: h2so5 ..かけだし(1,819ポイント)
Date: 2010/08/29(日) 00:39
No:60507
|
|
Title: Re:画像のRGB取得
|
|
pngのヘッダーのサイズは調べれば出てくると思いますが、
bmpと違いpngは圧縮されているのでヘッダーをちゃんと読まないとRGBの取得は不可能です。
本当はbmpもヘッダーをちゃんと読むべきです。
pixcel[0][0][0]が左上を指すのか左下を指すのかはbmpによって違うこともありますし、
ビット数もいくつか種類があるので。
pngのデータは複雑で私もよく分かりません。
自分だったらlibpngに丸投げかも... 
78ポイント を手に入れた。
|
|
|
|
|
Name: 七氏 ..かけだし(1,234ポイント)
Date: 2010/08/29(日) 01:01
No:60508
| 解決!
|
Title: Re:画像のRGB取得
|
|
pngは難しいのですか・・・ありがとうございます
現状、24ビットで問題ないですし256色bmpなども視野に調べてみようと思います
libpngは今wikiを読んでみましたがとても有用そうですね
88ポイント を手に入れた。
|
|
|
|
Name: ヒヒイロ ..ぴよぴよ(103ポイント)
Date: 2010/08/27(金) 23:25
No:60372
|
|
Title: 縦スクロールシューティングの自機キャラ
|
|
始めまして、ヒヒイロです。
プログラムのことでなくて申し訳ないです。
あの、ここのサイト様みたいな縦スクロのSTGを作ってるんですが
背中を向けてる自機キャラがないので困ってます。
スクロ 素材 とか色々検索してみるんですがなかなか合いません・・。
良い素材や、此方のサイト様みたいな背景がループする画像や自機キャラみたいな
背中向けてる画像ってありませんでしょうか。
よろしくお願いします。
103ポイント を手に入れた。
|
|
|
|
Name: ぬるぽ ..中級者(9,730ポイント)
Date: 2010/08/29(日) 00:26
No:60506
|
|
Title: Re:縦スクロールシューティングの自機キャラ
|
|
自機については、2Dかつ機械やロボットでよろしければ
「縦シュー 素材」や「シューティング 自機 素材」などと検索すれば
大体出てきますよ。
背景については「背景 ループ 素材」が妥当でしょうか。
あとは好みの問題です。

91ポイント を手に入れた。
|
|
|
|
|
Name: ヒヒイロ
Date: 2010/09/01(水) 16:37
No:603721283326653
|
|
Title: Re:縦スクロールシューティングの自機キャラ
|
|
お返事が遅くなってすみません・・・!
ありがとうございます、探してみます!
|
|
|
|
Name: らいおん ..ぴよぴよ(97ポイント)
Date: 2010/08/28(土) 18:24
No:60435
|
|
Title: 初心者なんですが
|
|
初めまして、らいおんと言います。
僕は今年から専門学校でゲームプログラミングを学んでいるのですが
まったく理解できずに苦しんでいます。
夏休み中も本を読み格闘していたのですが、さっぱりで汗
そこで幾つか質問なんですが、ご回答お願いできないでしょうか?
・関数は暗記しなければならないのか
・Directxにルールはあるのか(プログラムを打ち込む順番など)
その他にも色々分からない事が多いのですが・・・
ご回答お願いします。
97ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(63,634ポイント)
Date: 2010/08/28(土) 18:27
No:60438
|
|
Title: Re:初心者なんですが
|
|
・関数は暗記しなければならないのか
まあ初めは丸暗記しなくても、本を見ながらやっていけばいいと思います。
何度も書いているうちにそのうち覚えていきますよ^^
・Directxにルールはあるのか(プログラムを打ち込む順番など)
質問の内容が広すぎてどう答えればよいかわかりません。
もうすこし具体的に質問して下さい。
2倍のポイントを手に入れた! 98ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(206,840ポイント)
Date: 2010/08/28(土) 18:43
No:60443
|
|
Title: Re:初心者なんですが
|
|
>・関数は暗記しなければならないのか
自然と覚えるので無理に暗記しなくて良いです。
必要ならリファレンスを調べるだけです。
>・Directxにルールはあるのか(プログラムを打ち込む順番など)
どの関数でも呼び出して良い順番があります。
それを守らないとうまく動きません。
>プログラムを打ち込む順番など
プログラムは上から順番に動きますが、それは関数内に閉じた話です。
つまり、ソースコードに書かれている順番ではなくプログラムの流れ(フロー)を意識する必要があります。
201ポイント を手に入れた。
|
|
|
|
|
Name: らいおん ..ぴよぴよ(369ポイント)
Date: 2010/08/28(土) 18:44
No:60444
|
|
Title: Re:初心者なんですが
|
|
回答ありがとうございます
分かりづらくてすみません
僕が聞きたいのは学校でのプリントで
1:structから始まるプレイヤーやアイテムなどの構造体の宣言
2:int WINAPIから始まるグラフィックハンドルの宣言、画像ファイル読み込み、座標設定など
3:while(CheckHitKey から始まるキーの設定や画像の表示など
とまあこんな風に書かれているのですが
色んな関数がある中でどこに何を当てはめたらいいか、分からなくて
学校で夏休み中にゲームを作れと宿題を出されたのですが
上記の通り理解不足の為、まったく進まず・・・
文章力がなくてすみません
272ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(63,972ポイント)
Date: 2010/08/28(土) 18:50
No:60446
|
|
Title: Re:初心者なんですが
|
|
つまり、夏休みの宿題でゲームを作れと言われたが
何も理解できなくて、パニック状態ということですね。
どんな条件で宿題が出ているのかわからないので何ともいえません。
DirectXを使ってゲームを作れなのか、もしくはDXライブラリなどのライブラリを使って
ゲームを作れということなのか。
C言語の知識がどれぐらいあるかによってアドバイスの仕方も変わってくるので
その辺もお願いします。
2倍のポイントを手に入れた! 268ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(207,007ポイント)
Date: 2010/08/28(土) 18:51
No:60447
|
|
Title: Re:初心者なんですが
|
|
>3:while(CheckHitKey から始まるキーの設定や画像の表示など
あれ?
CheckHitKeyってDirectXじゃなくてDXライブラリの関数じゃないでしょうか?
だとしたら、この掲示板の管理をされているDixq (管理人)さんの書かれた
「ゲームプログラミングの館」
http://dixq.net/g/
は読まれましたか?
未読ならぜひ読まれる事をお勧めします。
ただ、C言語の理解が不十分だとそれも難しいですが。
167ポイント を手に入れた。
|
|
|
|
|
Name: らいおん ..ぴよぴよ(392ポイント)
Date: 2010/08/28(土) 18:53
No:60448
|
|
Title: Re:初心者なんですが
|
|
すいません間違えました汗
DXライブラリです、ゴッチャになってました
23ポイント を手に入れた。
|
|
|
|
|
Name: らいおん ..ぴよぴよ(511ポイント)
Date: 2010/08/28(土) 19:26
No:60455
|
|
Title: Re:初心者なんですが
|
|
softyaさん、すみません
自分が今行いたい事 - ゲームを作りたい(ゲームプログラミングの基礎などを知りたい)
今何がわからない - 上記の通りです
OS:WindowsXp
コンパイラ名:Microsoft Visual Studio 2008
・どの程度C言語を理解しているか
学校ではポインタまでやりましたがペースが以上に早く誰も着いて行けていない状況です
僕もその一人で、配列や関数、構造体、色々と分からない事が多いです
以上です。
やはり難しいですかね・・・
119ポイント を手に入れた。
|
|
|
|
|
Name: ROM ..入門者(3,482ポイント)
Date: 2010/08/28(土) 19:55
No:60460
|
|
Title: Re:初心者なんですが
|
|
いくら使うのが簡単なライブラリだろうと関数の使い方もわからないレベルでは難しいでしょうね。
文章から、教えない先生が悪いんだと思っている感じが伝わってきますが、学ぶのは自分ですよ。やる気があればネットにいくらでも情報がありますから先生がいなくても勉強出来ます。
そういえばDXライブラリの掲示板で先日専門学校の授業でDXライブラリを使っても良いか質問がありましたね。
189ポイント を手に入れた。
|
|
|
|
|
Name: palladium ..初心者(8,420ポイント)
Date: 2010/08/28(土) 20:22
No:60463
|
|
Title: Re:初心者なんですが
|
|
まず、御自分の勉強ペースを把握するのが良いと思います。
その上で締め切り等がある場合は
御自分の勉強ペースを出来るだけ損なわないように
スケジュールを考えると良いと思います。
自己管理が出来ればかなりやれると思います。
76ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(221,862ポイント)
Date: 2010/08/28(土) 22:56
No:60490
|
|
Title: Re:初心者なんですが
|
|
> 学校ではポインタまでやりましたがペースが以上に早く誰も着いて行けていない状況です
ちゃんと予習や復習をやっていますか?
当たり前のことですが、先生が手取り足取り教えてくれないと分かるはずがないという学習姿勢では何も身に付きません。
どんなものでもそうですが、勉強というのは自分でやるのが基本です。
63ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(93,398ポイント)
Date: 2010/08/28(土) 23:50
No:60498
|
|
Title: Re:初心者なんですが
|
|
私個人の意見としてはネットの情報で勉強をするのはやめたほうがいいです
技術はピカイチかもしれませんが、それについていけるような情報配置を考えて作られているサイトは
そうそうにないと考えています
なので、一般的に著者が信頼がおける本をまずはじめに学習するのがもっとも良いと考えています
なぜなら、本にまとめるとなると順番におって説明がされているので、
どこかでつまづいたら、本の後ろにもどればほとんどが答えが書いています
ネットの個人で公開されている情報では、あちこちに情報がさくらんしており、
とても情報が整理されているとは思えず、あっちみてはこっちみてと時間的にも、
頭の整理的にも不向きだと考えています
本を購入すれば、たとえば、「私はこの本を読んで勉強しました」と言うことができて
その本の著者の情報の信頼性などもついてきて、この本で勉強したなら信頼できる と評価しやすいです
逆にネット上だけの情報では、目的や手段がバラバラになり、どこをどう修正すればいいのか
後々困難になってきます
結構技術の本は高いですが、遠回りは近道というように、じっくり理解されながら進めていくのが
いいのではないかと私なりに考えています
2倍のポイントを手に入れた! 844ポイント を手に入れた。
|
|
|
|
Name: まる ..入門者(4,069ポイント)
Date: 2010/08/28(土) 18:25
No:60436
|
|
Title: 乱数のシード
|
|
言語:object-c
ランダムシードを時間にし、乱数を生成しているのですが、
1秒単位でしか乱数生成してくれません。
ミリセック秒単位のシードで乱数生成したい場合は
シード値に何を設定すればいいのでしょうか?
//srand([[NSDate date] timeIntervalSinceReferenceDate]);
srand(time(NULL));
int num = rand() % TIMER_MAX_NUM;
147ポイント を手に入れた。
|
|
|
|
Name: まる ..入門者(4,157ポイント)
Date: 2010/08/28(土) 23:18
No:60496
| 解決!
|
Title: Re:乱数のシード
|
|
Justyさんありがとうございます。
arc4randomの方を使おうと思います。
Obective-cですね。。おはずかしい。。。
ookamiさんありがとうございます。
ミリセック。。。ですね。
88ポイント を手に入れた。
|
|
|
|
|
Name: あたっしゅ [URL] ..かけだし(1,316ポイント)
Date: 2010/08/28(土) 21:05
No:60469
|
|
Title: Re:BCC の現在の入手法
|
|
お答え、ありがとうございました。検索が不十分でした。
コマンド名は BCC32 だったんですね。
C++Builder 5 をインストールしているんで、すでに BCC 5.5 が入ってました。
とりあえず、Turbo Debugger 5.5.( TD32 ) をダウンロードしてインストールしました ( 実行したら DOS 窓かよ )。
BCC Developer 1.2.21 もダウンロード、インストール、設定して、Hello, world できました。
176ポイント を落としてしまった。
|
|
|
|
Name: リオ ..ぴよぴよ(87ポイント)
Date: 2010/08/28(土) 18:41
No:60441
|
|
Title: 龍神録の館第三章の通りにしましたが
|
|
うまくいきません。Escを押しても反応しません。どうしたらいいですか?
25ポイント を手に入れた。
|
|
|
Name: リオ ..ぴよぴよ(62ポイント)
Date: 2010/08/28(土) 18:27
No:60437
|
|
Title: 最初の方で躓きました
|
|
三章でEscを押したら終了すれば完成なのですが、終了しません。
C++のプロジェクトプロパティーの設定が間違っているのか、DX_Libを使わないとうまくいきます。
DX_Libを使った設定を教えてください。下手な文ですみません
62ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(63,686ポイント)
Date: 2010/08/28(土) 18:29
No:60439
|
|
Title: Re:最初の方で躓きました
|
|
3章ってどこのページのことですか?
>DX_Libを使わないとうまくいきます。
この辺がよく意味が分かりません。もう少し具体的に質問して下さい。
52ポイント を手に入れた。
|
|
|
|
Name: 南瓜 ..上級者(18,174ポイント)
Date: 2010/08/23(月) 16:10
No:59857
|
|
Title: MacにもDXライブラリみたいなものはあるんでしょうか?
|
|
まず始めに、1000万アクセスおめでとうございます!
C言語の理解を深めるため、そろそろゲームプログラミングの館の内容を
実行しようかなと思ったんですが、DXライブラリがMacに対応していないため
0章すら進めない現状ですorz
(説明が判り易いため、出来ればここのページで勉強したいです--;)
ここは、windowsユーザーがほとんどだと思いますが、もし
Macユーザーがいましたら、
・DXライブラリの代わりになるもの
・MacでもDXライブラリが使える方法
などのアドバイスお願いしますm(_ _)m
(Vectorで検索しても量が多く、関係ないものも表示され
どれがいいのか判りません)
79ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(62,040ポイント)
Date: 2010/08/23(月) 18:26
No:59866
|
|
Title: Re:MacにもDXライブラリみたいなものはあるんでしょうか?
|
|
Macだとどうなんでしょうね。あまりないような気がしますが。
OpenGLとかだったらいけるかな?あまり詳しくないんで間違ってたらすみません。
ところで何故Macにしたんですか?
53ポイント を手に入れた。
|
|
|
|
|
Name: 南瓜 ..上級者(18,286ポイント)
Date: 2010/08/23(月) 19:33
No:59874
|
|
Title: Re:MacにもDXライブラリみたいなものはあるんでしょうか?
|
|
大学に入学する時に指定がMacだったんですよ…
昔は薬学やら芸術、生物系の人はMacを使っていた うんぬんかんぬん…
今はそうでもないですと言っているのに係わらずorz
大学ェ…
OpenGLですね ちょっと探してきます
112ポイント を手に入れた。
|
|
|
|
|
Name: 南瓜 ..上級者(18,532ポイント)
Date: 2010/08/24(火) 17:24
No:59947
|
|
Title: Re:MacにもDXライブラリみたいなものはあるんでしょうか?
|
|
返信ありがとうございます
ライブラリと言っても比較表を見るとかなりあるんですね
どれも一長一短なので自分に合うのを見つけないといけないですね--;
幸い、家にwindowsがあるのでbootcampを先に試してみます
時々パソコンを使った実習(レポートではなく)があるので
購入も必須でした
実現出来るかどうかかなり先で判りませんが、Mac、windowsに
係わらず実行出来るゲームを作るとしたら
これら両方を認識するライブラリで作らないといけないんでしょうか?
導入に手間がかかると思うので結果は後ほど…
246ポイント を手に入れた。
|
|
|
|
|
Name: 天 ..ぴよぴよ(208ポイント)
Date: 2010/08/25(水) 00:11
No:59983
|
|
Title: Re:MacにもDXライブラリみたいなものはあるんでしょうか?
|
|
Linuxで作ればいいのかと
もしくはブラウザやフラッシュゲームかな
34ポイント を手に入れた。
|
|
|
|
|
Name: 南瓜 ..上級者(18,555ポイント)
Date: 2010/08/26(木) 15:49
No:60175
|
|
Title: Re:MacにもDXライブラリみたいなものはあるんでしょうか?
|
|
とりあえずインストールが出来ました!!
久しぶりのwindowsでかなり手間取ってます--;
今のままだと操作が操作が非常にやりにくい、細かな設定が必要なので
おそらく、DXライブラリも起動できると思いますが
確認しだい解決を押します
(今表示している画面がぼやけてる?というかかなりでかく表示されてます)
Linuxですか、ありがとうございます。
23ポイント を手に入れた。
|
|
|
|
|
Name: 南瓜 ..上級者(18,656ポイント)
Date: 2010/08/27(金) 11:37
No:60272
|
|
Title: Re:MacにもDXライブラリみたいなものはあるんでしょうか?
|
|
DXライブラリを起動したら全画面になって画像が表示されたので成功しました!
あとはゲームプログラミング館の説明通りにやればうまく出来そうです!
あと作製したパーティションの31.5GB中空き容量が8.97GBと少ない気がしますが、
(DXライブラリ等込みで)促されるがままにインストールしたらこんなもんですかね?
101ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(570,281ポイント)
Date: 2010/08/27(金) 22:17
No:60344
|
|
Title: Re:MacにもDXライブラリみたいなものはあるんでしょうか?
|
|
>Mac、windowsに 係わらず実行出来るゲームを作るとしたら
>これら両方を認識するライブラリで作らないといけないんでしょうか
そういうことになりますね。
>されるがままにインストールしたらこんなもんですかね?
VisualStudioとかも入れているなら、そんなものなのかもしれません。
残り容量がちょっと少ない気がしますけど、Windowsとして本格的に使うわけでなければ
大丈夫だと思いますよ。
177ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(221,503ポイント)
Date: 2010/08/28(土) 00:44
No:60383
|
|
Title: Re:MacにもDXライブラリみたいなものはあるんでしょうか?
|
|
> あと作製したパーティションの31.5GB中空き容量が8.97GBと少ない気がしますが、
私は、ちょっと強引なのですが、VMware Fusionで、外付けのUSBハードディスクにWindowsをインストールして使っています。
最初はちょっとヒヤヒヤ物でしたが、思ったよりずっと快適に動いています。
こうしておくと、容量の心配は実質的になくなります。
88ポイント を手に入れた。
|
|
|
|
|
Name: 南瓜 ..上級者(18,569ポイント)
Date: 2010/08/28(土) 17:17
No:60426
| 解決!
|
Title: Re:MacにもDXライブラリみたいなものはあるんでしょうか?
|
|
なるほど、外付けUSBハードディスクでも認識するんですね
使ううちに容量が少なくなったら、次に新しくパーティションを
作製する時は、その方法を使ってみます。
返信ありがとうございました!
87ポイント を落としてしまった。
|
|
|
|
Name: 京 ..ぴよぴよ(655ポイント)
Date: 2010/08/27(金) 10:29
No:60264
|
|
Title: 無題
|
|
マイクロソフトのビジュアルC++を使っています。二次関数をとくプログラムを作ったのですが、実行ウィンドウがまたすぐに消えます。原因が分かりません、誰か教えてください。いかにソースを書きます。
#include <stdio.h>
#include <math.h>
int main ()
{
int a,b,c,x1,x2;
double d;
printf ("A=");
scanf ("%d",&a);
printf ("B=");
scanf ("%d",&b);
printf ("c=");
scanf ("%d",&c);
d=b*b-4*a*c;
if (d<0){
printf ("虚数解");
}
d=sqrt(d);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
if (x1<0&&x2<0){
printf ("(x%d)(x%d)",x1,x2);
}
if (x1<0&&x2>0){
printf ("(x%d)(x+%d)",x1,x2);
}
if (x1>0&&x2<0){
printf ("(x+%d)(x%d)");
}
if (x1>0&&x2>0){
printf ("(x+%d)(x+%d)");
}
getchar();
return (0);
}
よろしくお願いします。
374ポイント を手に入れた。
|
|
|
|
Name: fatens ..上級者(18,151ポイント)
Date: 2010/08/27(金) 10:41
No:60266
|
|
Title: Re:無題
|
|
scanf ("%d",&c);
で数値を入力したときにバッファに改行文字が残り、
getchar();
でその改行文字を読み込んでしまうため、入力待ちが起こらずに終了してしまいます。
scanf ("%d",&c); → scanf ("%d%*c",&c);
のようにして、改行文字を読み捨ててしまうのはどうでしょうか。
85ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(211,982ポイント)
Date: 2010/08/27(金) 10:41
No:60267
|
|
Title: Re:無題
|
|
一番可能性が高そうなのが、虚数解の際に終了させてないのが原因っぽいなぁ…と思ったり。
というのも、sqrt関数は実引数を負数にしちゃうとまずかったような気がするんですよね。
47ポイント を手に入れた。
|
|
|
|
|
Name: 京 ..ぴよぴよ(728ポイント)
Date: 2010/08/27(金) 10:50
No:60270
| 解決!
|
Title: Re:無題
|
|
回答ありがとうございます。無事解決しました。
<バグさん
忘れてました。エラー帰ってくる前に気づかせてくれてありがとうございます
<fatensさん
どうもそれが原因だったようです。そのソースの意味がいまいち良く分かりませんが、解決しました。
ありがとうございました
73ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(157,216ポイント)
Date: 2010/08/28(土) 01:24
No:60387
|
|
Title: Re:無題
|
|
> 二次関数をとく
関数を解く、とは普通いわないと思います。
ソースの内容から推して、「二次方程式を解く」という方が正しいと思います。
> int a,b,c,x1,x2;
x1とx2がint型である理由がわかりません。
> printf ("(x+%d)(x%d)");
> printf ("(x+%d)(x+%d)");
この書式文字列で、何を出力したかったのでしょうか。
また、x1またはx2がゼロの場合を考慮しなくてよいのでしょうか。
107ポイント を落としてしまった。
|
|
|
|
|
Name: 京 ..かけだし(1,502ポイント)
Date: 2010/08/28(土) 15:17
No:60418
|
|
Title: Re:無題
|
|
すいません、したかったのは”因数分解”です。
>ハッカーさん
x1かx2がゼロの場合は正直想定してませんでした。ちょっと考えてみます。
気付かせてくれてありがとうございます。
また、
printf ("(x+%d)(x%d)");
printf ("(x+%d)(x+%d)");
は(x+a)(x-b) のような形で出力させたかったのでそんな風に作りました。ただ、その形だと上手く いかないことがその後分かったので変更してます。以下に変更後のスクリプトを載せます。また何か
あったらいろいろ書き込みしてください。
#include <stdio.h>
#include <math.h>
int main ()
{
double a,b,c,x1,x2,hantei;
double d;
printf ("A=");
scanf ("%lf",&a);
printf ("B=");
scanf ("%lf",&b);
printf ("c=");
scanf ("%lf%*c",&c);
d=b*b-4*a*c;
if (d<0)
{
b=b*b;
a=2*a;
d=-d;
printf ("%lf±√%lfi/%lf\n",b,d,a);
printf ("計算続行?Y=1 N=2\n");
scanf ("%lf",&hantei);
if (hantei==1)
{
d=sqrt(d);
x1=b/a;
x2=d/a;
printf ("x=%lf±%lfi\n",x1,x2);
}
getchar();
getchar();
return (0);
}
d=sqrt(d);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
printf ("%lf,%lf\n",x1,x2);
x1=x1*-1;
x2=x2*-1;
if (x1<0&&x2<0){
x1=x1*-1;
x2=x2*-1;
printf ("(x%lf)(x%lf)\n",x1,x2);
}
if (x1<0&&x2>0){
printf ("(x%lf)(x+%lf)\n",x1,x2);
}
if (x1>0&&x2<0){
printf ("(x+%lf)(x%lf)\n",x1,x2);
}
if (x1>0&&x2>0){
printf ("(x+%lf)(x+%lf)\n",x1,x2);
}
getchar();
return (0);
}
774ポイント を手に入れた。
|
|
|
|
Name: ねこ ..熟練のプログラマー(54,066ポイント)
Date: 2010/08/28(土) 14:16
No:60416
|
|
Title: エンディングのつけ方
|
|
龍神録の1面でラスボスを倒して、一秒くらいするとエンディングを表示させるにはどのようにすればいいのでしょうか?
なお、エンディングといっても、2、3枚の画像を切り替えて表示させるだけです。
よろしくおねがいします。
109ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(63,379ポイント)
Date: 2010/08/28(土) 14:27
No:60417
|
|
Title: Re:エンディングのつけ方
|
|
ボス倒してから60カウントほどまってから、画像を表示。
何を悩んでいるのか具体的に書いてくれないと、これぐらいしか答えようがありません。
54ポイント を手に入れた。
|
|
|
|
Name: 爺プログラマー ..入門者(4,469ポイント)
Date: 2010/08/27(金) 13:46
No:60280
|
|
Title: ネットワークの無効化
|
|
「ネットワーク接続」→「ローカルエリア接続の状態」の画面にある「無効にする」ボタンをVC++プログラムで操作することは可能でしょうか?
SOはWinXPHomeです。
28ポイント を手に入れた。
|
|
|
|
Name: 爺プログラマー ..入門者(4,562ポイント)
Date: 2010/08/27(金) 15:33
No:60286
| 解決!
|
Title: Re:ネットワークの無効化
|
|
急な問題なので掛け持ちの質問ですみません。
ご提示のコードをOS同梱のcscript.exeでONOFF出来そうです。
アプリケーション立ち上げはC++で可能です。
ありがとうございました。
93ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(206,081ポイント)
Date: 2010/08/27(金) 15:58
No:60288
|
|
Title: Re:ネットワークの無効化
|
|
>急な問題なので掛け持ちの質問ですみません。
お急ぎなのは分かりますが、急ぎだから良いという問題ではありません。
この掲示板に対する礼儀の問題です。
お考えを改められないようでしたら、今後の回答は控えさせていただきます。
64ポイント を落としてしまった。
|
|
|
|
|
Name: 爺プログラマー ..入門者(4,720ポイント)
Date: 2010/08/27(金) 18:02
No:60296
|
|
Title: Re:ネットワークの無効化
|
|
softyas様
この度は何も知らず、ご迷惑をお掛けしました。
さて、超初心者に付きこの件でもうすこし詳細をお教えください。
CreateProcess(NULL,"cscript.exe C:LanOnOff.vbs",NULL,
NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
のように記述しましたが、無効有効の指定はどの様にしたら良いでしょうか?
"LanOnOff"がコピーさせて頂いたスクリプトファイル名になります。
158ポイント を手に入れた。
|
|
|
|
|
Name: 爺プログラマー ..入門者(4,754ポイント)
Date: 2010/08/27(金) 19:53
No:60314
|
|
Title: Re:ネットワークの無効化
|
|
ookamiさん
回答ありがとうございます。
ご指摘の通り"C:\\LanOnOff.vbs"と思うのですが、有効無効のパラメータの付け方がわからないため、まだ実行していません。
34ポイント を手に入れた。
|
|
|
|
|
Name: 爺プログラマー ..入門者(4,932ポイント)
Date: 2010/08/27(金) 21:11
No:60323
|
|
Title: Re:ネットワークの無効化
|
|
以下4点は実行しましたが、切り替えできません。
コマンドプロンプトが一瞬で消えて、エラーを確認できません。
(1)プログラムをコピペする。
(2)EnableLAN("ローカル エリア接続",True) を削除する。
(3)漢字空白1文字を2文字の半角空白に変換する。
(4)拡張子をVBSとしてファイルに保存する。
また、
'* 引 数:NetworkName 処理対象のネットワーク接続名
'* :Enable True = 接続 / False = 無効
この引数はどこに記述するのでしょうか?
CreateProcess(NULL,"cscript.exe C:\LanOnOff.vbs False",NULL,
NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
これではだめですよね。
お願いします。
178ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(63,146ポイント)
Date: 2010/08/27(金) 21:14
No:60325
|
|
Title: Re:ネットワークの無効化
|
|
普通のVBSの実行と一緒じゃないですかね?
実行ファイル名の後に引数を書くだけじゃないかと。
まあ、やったことないので間違ってるかもしれませんが。
41ポイント を手に入れた。
|
|
|
|
|
Name: 爺プログラマー ..入門者(4,778ポイント)
Date: 2010/08/27(金) 21:56
No:60334
|
|
Title: Re:ネットワークの無効化
|
|
シエルさん回答ありがとうございます。
引数の書き方は示されて通りしています。
スクリプトファイルの1行30列で
コンパイルエラー:Sub プロシージャーを呼び出すときに、かっこを使うことできません。
となります。
スクリプトファイルの一行目は
EnableLAN("ローカル エリア接続",False)
です。
154ポイント を落としてしまった。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(48,022ポイント)
Date: 2010/08/27(金) 22:07
No:60337
|
|
Title: Re:ネットワークの無効化
|
|
EnableLAN("ローカル エリア接続",False)
↓
EnableLAN "ローカル エリア接続",False
とするとどうなりますか?
42ポイント を落としてしまった。
|
|
|
|
|
Name: 爺プログラマー ..入門者(4,842ポイント)
Date: 2010/08/28(土) 07:18
No:60401
|
|
Title: Re:ネットワークの無効化
|
|
ookamiさん、ありがとうございます。
解決しました。
超初心者には、ほんの些細な事がわかりません、今後ともよろしくお願いします。
64ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(48,291ポイント)
Date: 2010/08/28(土) 08:46
No:60404
|
|
Title: Re:ネットワークの無効化
|
|
解決したようでよかったです。
> 超初心者には、ほんの些細な事がわかりません
それはよく分かります。
私は\やカッコのひとつくらいの些細なことなら、答えを書きたいと思ってます。
ただ、ちょっと書き方を工夫されたほうが良いと思います。
初心者だから教えてもらって当然、みたいに感じられました。
81ポイント を手に入れた。
|
|
|
|
Name: オーシロ ..入門者(3,955ポイント)
Date: 2010/08/27(金) 23:20
No:60369
|
|
Title: リストでつまづいています
|
|
C言語でリストを学んだので、C++のクラスを使ってそれっぽく作れないかと思い、
以下の様なプログラムを組みました。
#include <stdio.h>
//基本データ。ここを改造してキャラクターの基本クラスを作る
class Data{
public:
//暫定的に配置するデータ。1つ前のノードより1大きい数が入る
int i;
//コンストラクタ
Data(int j){
i = j + 1;
}
//デストラクタ
~Data(){
printf(" %dDataを削除します\n", i);
}
//iの中身を確認する
void nprint(){
printf(" %dDataの内容は%d\n", i, i);
}
};
//リストの1つ1つのデータ
class Node{
public:
//データのアドレス
Data* here;
//1つ前のノードのアドレス
Node* prev;
//1つ先のノードのアドレス
Node* next;
//コンストラクタ。指定されたとおりにくっつけます
Node(Data* h, Node* p, Node* n){
here = h;
prev = p;
next = n;
}
//デストラクタ。
~Node(){
printf(" %dNodeを削除します\n", here->i);
delete here;
prev->next = next;
next->prev = prev;
}
};
//リストそのもの。
class List{
public:
//first。先頭。
Node* fst;
//ダミー
Node* dummy;
//要素数。
int num;
//コンストラクタ
List(){
//ダミーの実体?生成
dummy = new Node(new Data(-1), NULL, NULL);
//先頭のアドレスをダミーに。
fst = dummy;
//要素数は0に。(ダミーは数えない)
num = 0;
}
//デストラクタ
~List(){
//削除するアドレスを2番目にセッティング
Node* dcur = fst->next;
printf("listを削除します\n");
//削除部分。入れ替えなんかの部分はNodeクラスの
//デストラクタで済ませている…つもり
while(dcur){
Node* next = dcur->next;
delete dcur;
dcur = next;
}
}
//要素追加
void add(){
//先端まで移動
Node* l = fst;
while(l->next != NULL) l = l->next;
//先端に新しいデータをくっつける
l->next = new Node(new Data(l->here->i), l, NULL);
//要素数を加える
num++;
}
//要素削除
void dlt(int n){
//指定された場所まで移動
Node* l = fst;
if(n <= 0 || n > num) return;
for(;n!=0;n--){
if(l-> next == NULL) return;
l = l->next;
}
//その場所を削除
delete l;
//要素数を減らす
num--;
}
//中身の参照
void move(){
Node* l = fst->next;
while(l != NULL){
l->here->nprint();
l = l->next;
}
}
};
int main(){
List lst;
lst.add();
lst.add();
lst.add();
lst.add();
lst.add();
lst.dlt(3);
lst.move();
return 0;
}
その結果は
3Nodeを削除します
3Dataを削除します
1Dataの内容は1
2Dataの内容は2
4Dataの内容は4
5Dataの内容は5
listを削除します
1Nodeを削除します
1Dataを削除します
2Nodeを削除します
2Dataを削除します
4Nodeを削除します
4Dataを削除します
5Nodeを削除します
5Dataを削除します
としっかり出たのですが、その後何故か強制終了されてしまいました。
原因はNodeクラスのデストラクタあたりにありそうなのですが、どのように解決すればよいかがわかりません。
何かヒントをもらえないでしょうか?
2倍のポイントを手に入れた! 2,410ポイント を手に入れた。
|
|
|
|
Name: オーシロ ..入門者(4,231ポイント)
Date: 2010/08/27(金) 23:51
No:60375
|
|
Title: Re:リストでつまづいています
|
|
>>ookamiさん
コピーコンストラクタという存在をまず知りませんでした。
まだ勉強が足りていませんね…すみません。
というわけで、
//コピーコンストラクタ
List(const List& obj){
dummy = new Node(NULL, NULL, NULL);
*dummy = *obj.dummy;
}
というのを追加してみたのですが、また強制終了されてしまいました。
となると、dummy = new Node(new Data(-1), NULL, NULL);という部分の、
「new Data(-1)」という部分が強制終了を引き起こしている元なのだと思うのですが、
ここをどうすれば良いのかがいまいちよく分かりません…。
276ポイント を手に入れた。
|
|
|
|
|
Name: h2so5 ..かけだし(1,711ポイント)
Date: 2010/08/27(金) 23:52
No:60376
|
|
Title: Re:リストでつまづいています
|
|
とりあえずヒントを。
お察しの通り、Nodeクラスのデストラクタに問題があります。
オーシロさんのコードでは、削除されるNodeに必ず次のNodeがあることが前提になっています。
削除されるNodeがリストの一番最後、つまり次のNodeがない場合が考慮されていません。
118ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(48,252ポイント)
Date: 2010/08/28(土) 00:01
No:60377
|
|
Title: Re:リストでつまづいています
|
|
「コピーコンストラクタ」と「operator=」は、自分で定義しないとコンパイラが勝手に
適当なものを作ってくれてしまうため、
特にメンバにポインタがある場合には、予期しない動きをすることが多いです。
ただ、今回のケースでそれが原因なのか、実は私、確証なかったりします。
どう見ても知ったかぶりです。本当にry
79ポイント を手に入れた。
|
|
|
|
|
Name: オーシロ ..入門者(4,557ポイント)
Date: 2010/08/28(土) 00:08
No:60378
| 解決!
|
Title: Re:リストでつまづいています
|
|
>>h2so5さん
なるほど、nextがNULLになっているNodeにも参照していたから強制終了が起こったわけですね。
というわけで、以下のように変更してみたところ、
//デストラクタ。
~Node(){
printf(" %dNodeを削除します\n", here->i);
delete here;
if(next != NULL){
prev->next = next;
next->prev = prev;
}
else prev->next = NULL;
}
無事、強制終了されることなくプログラムを終了させることができました!
>>ookamiさん
今回はどうもそれとは違う部分が強制終了させていたようです。
ですが、とても参考になりました。もっと勉強しなくてはいけないと感じました。
ありがとうございました。
ookamiさん、h2so5さん、ありがとうございました!
326ポイント を手に入れた。
|
|
|
|
|
Name: けえぼお ..かけだし(2,406ポイント)
Date: 2010/08/28(土) 02:07
No:60388
| 解決!
|
Title: Re:リストでつまづいています
|
|
~Node() の prev->next = next; にも問題があると思います。(そのままでも強制終了はされませんが。)
~List() の delete dcur; で既に削除された要素を参照してます。
自分がリストクラスを作ってみたときは、Listクラス内に
prev->next = next;
next->prev = prev;
に当たる内容を書いたような気がします。
素人の意見ですがご参考までに。。。
105ポイント を手に入れた。
|
|
|
|
|
Name: gyz ..ぴよぴよ(683ポイント)
Date: 2010/08/28(土) 06:06
No:60396
|
|
Title: Re:リストでつまづいています
|
|
解決とされたようですが
コードを見て気づいた点があったので
レスさせていただきます。
Listクラスのデストラクタでfst(dummy)をdeleteしてないので
このままではメモリリークが発生します
デストラクタでちゃんとdeleteするか
fst(dummy)をNode*ではなくNodeにする必要があると思います
あと、Listクラスのdummyが意味なくないですか?
dummy = new Nodeして、そのアドレスをそのままfstに渡してるので
結局fst = new Nodeするのと変わらない処理になってると思います
dummy->fst->それ以降のリスト...というのを作る意図なら
dummy = new Node(略);
fst = new Node(new Data(dummy->here->i), &dummy, NULL);
dummy->next = fst;
こんな感じになるんではないかと思います
202ポイント を手に入れた。
|
|
|
|
Name: ネス ..中級者(9,813ポイント)
Date: 2010/08/27(金) 18:13
No:60299
|
|
Title: 違うヘッダーファイル同士の関数の呼び出し
|
|
皆さん、こんばんは。
早速ですが、質問です。
今、メインとなるソースがあまりにもごちゃごちゃしてきたので、ソースの分割およびヘッダーファイルの作成というのをやっています。確かに、これだと再利用もできて便利だなあという思いもしています。ただ、次のような問題が生じた場合、どうすればよいのでしょうか。
例えば、ストーリーの出力を扱う関数のヘッダーA.hと、プロセスエラー処理を扱う関数のヘッダーB.hがあったとします。
この場合、A.hで定義されているストーリ表示関数の中でも、プロセスエラー処理が置かれるとします。
しかし、A.hで、プロセスエラー処理を扱う関数を再び用意すると二重定義みたいなことになりますし、だからといって、A.h内で、例えば、#include "B.h"という記述を書いてもエラーになります。
どうすれば、違うヘッダー同士で、関数の呼び出しができるのでしょうか。
216ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(63,015ポイント)
Date: 2010/08/27(金) 18:18
No:60302
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
>この場合、A.hで定義されているストーリ表示関数の中でも、プロセスエラー処理が置かれるとします。
この考えがおかしい。
最近のネスさんの質問を見ていると、ゲームプログラミングの館をしっかりやって、
基礎をもう一度勉強しなおしたほうがいいと思いますよ。 
117ポイント を落としてしまった。
|
|
|
|
|
Name: ネス ..中級者(10,345ポイント)
Date: 2010/08/27(金) 18:39
No:60304
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
お二人、レスありがとうございます。
ご指摘のとおり、確かに基礎なきまま突っ走っている感、また質問内に雑談じみた発言もまじり、振り返るとここ連日、精細さを欠いた質問になっておりました。この点については、謹んでお詫び申し上げます。
>この場合、A.hで定義されているストーリ表示関数の中でも、プロセスエラー処理が置かれるとします。
>この考えがおかしい。
「関数1つにつき1つの処理」というルールを守っていないという点では、まったくそのとおりだなあと感じています。それで、具体例なのですが、こんな感じの話なんです。
//B.h
void PM ( void ) ;
void PM ( void )
{//PM開始
if ( ProcessMessage ( ) == -1 )
{//if開始
DxLib_End ( ) ;
}//if終了
}//PM終了
これで、PM ( )と書けば、上記の処理を出力できるようになりました。続いて、順序逆になりますが、ストーリー表示関数の方を。
//A.h
void Story2 ( void ) ;
void Story2 ( void )
{
DrawString ( ); //内容省略
PM ( ) ;
DrawString ( ); //以下、同じ命令が続く。
PM ( ) ;
return ;
}
具体的には、上記のようなソースになっています。
532ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..中級者(10,636ポイント)
Date: 2010/08/27(金) 18:48
No:60305
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
さらに補足しますと、Story2 ( ) ;という関数では、紙芝居のような感覚で、絵とそれに応じた文章を最初から最後まで1つの関数内に収めてしまっています。
例えば、これで、Story2が第二話だとして、数話進んでから、伏線の回収のために、第XYZ話で第二話の内容を一気に引っ張り出してきたい場面などあれば、便利かなという、確かに安易な発想なのかもしれません。
そして、Story2の関数がおそらく常識はずれに、ひじょうに長いものになっているぶん、PM();のような関数もあればいいなということになり、そうなると定義してあるB.hから呼び出せるんじゃないか、みたいに考えていたのですが、やっぱり行儀というか基礎では、全然なっていなかったようで、この点につきましては心よりお詫びします。
手元に二種類、テキストがあるのですが、どちらにもヘッダーからヘッダーの呼び出しみたいなことは書いておらず、お二人のレスからして、自分がかなりトンチンカンなことをやっていたようで、書いていないのも当然かとは思いつつあります。
291ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(63,076ポイント)
Date: 2010/08/27(金) 19:00
No:60309
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
何かあまり言ってることが良く分かりません^^;
softyaさんがおっしゃっているサイトで1から学習することをお勧めいたします。
61ポイント を手に入れた。
|
|
|
|
|
Name: h2so5 ..かけだし(1,504ポイント)
Date: 2010/08/27(金) 19:28
No:60311
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
なんだかさらに話がこんがらがっている感じがしますが...
シエルさんのおっしゃっている
「この場合、A.hで定義されているストーリ表示関数の中でも、プロセスエラー処理が置かれるとします。」
がおかしい考えだ、
というのは文法の話ではなくゲームプログラミングの話ではないのですか?
普通に考えて ProcessMessage() の使い方が間違っている気がします。
追記:
あと質問があるのですが、ネスさんのおっしゃている
>Story2の関数がおそらく常識はずれに、ひじょうに長いものになっているぶん
の「長い」とは次のうちどのような意味でしょうか。
1.Cのソースが長い
2.ProcessMessage()を途中で呼び出さなければならないほど長くプログラムが停止する
3.Story2のシナリオが長くクリアするのに時間がかかる 
161ポイント を落としてしまった。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(63,105ポイント)
Date: 2010/08/27(金) 20:09
No:60316
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
h2so5さん。そうです。フォローありがとうございます><
ProcessMessage()の使われ方のことを言っています。
29ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,264,192ポイント)
Date: 2010/08/27(金) 20:23
No:60317
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
携帯なのであまり確認出来ていませんが、
普通ヘッダに実体はかかないですね。
ただ、コンストラクタやデストラクタなど簡単な物はヘッダに書いてしまう場合もあります。
2重インクルード防止の処置をほどこす方法は昨日DecentLoveさんのトピックで紹介しましたのでご覧ください。
135ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..中級者(9,992ポイント)
Date: 2010/08/27(金) 20:46
No:60319
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
皆さん、レスありがとうございます。
シエルさん、文法ではなく、プロセスメッセージについてでしたか。理解が及びませんで、重ね重ね、申し訳ありません。
>この様なヘッダの書き方お紹介しているサイトを参考にしたのでしたらそのサイトも教えてください。
いえいえ、すべて私の思い違いが原因です。そのようなテキストやサイトはございません。
結局、「プロトタイプ宣言のみならず、関数定義までヘッダーに書いていい」という、大きな思い違いをしていたようです。
関数については、他のソースに分割はしても、ヘッダに書くというようなことはされていませんでした。それを私がすっかりヘッダに関数定義までしていいと、とんだ早とちりをしていた次第です。
>普通に考えて ProcessMessage() の使い方が間違っている気がします。
h2so5さん、私の言葉足らずでした。「長い」というのは、Story2関数内で、とりあえず1つの話が成立しているという意味での長いです。今回作っているのは、一話につき30分から一時間ぐらいで読み進めるだけのプログラムです。第一話を作って見て、今は第二話を作っている最中でした。
それで、本題のProcessMessageですが、私の理解では、他のプログラムおよびユーザーからの予定外のイベントへの対処関数といった理解です。物語を読み進める途中で、ユーザーが他のプログラムに切り替えたり、あるいは終了させたりといったことを行った場合、ウィンドウは閉じられたけど、プログラムだけは動いていて、まだ音楽だけ鳴っているとか、そんな状況を防ぐのに使っています。また、そういうものだというのが今のところの理解です。それだけに、文章表示のたび(次の場面へとページをめくるたび)に、呼び出すような使い方をしていました。
結構な頻度で呼び出すべきものなのかなと思っていますが、そうではないのでしょうか。
ヘッダーファイルが関数を定義をするファイルだ
644ポイント を落としてしまった。
|
|
|
|
|
Name: ネス ..中級者(10,034ポイント)
Date: 2010/08/27(金) 20:56
No:60320
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
あ、直前の私の記事に文章ミスが。
最後の行は、単なる消し忘れですorz
読み飛ばしてください。
42ポイント を手に入れた。
|
|
|
|
|
Name: h2so5 ..かけだし(1,527ポイント)
Date: 2010/08/27(金) 21:04
No:60321
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
>結構な頻度で呼び出すべきものなのかなと思っていますが、そうではないのでしょうか。
確かにProcessMessage()は結構な頻度で呼びますが、
ユーザーの入力などに関係なく一定時間ごとに呼ぶのが普通です。
(このサイトの講座を見ればわかると思いますが)
ネスさんの書き方だとユーザーがページを進めない限りProcessMessage()が呼ばれません。
ユーザーの入力でページを進めるのであれば、
キーやマウスの状態を一定時間ごとにチェックしているはずなのでそこでProcessMessage()を呼ぶべきです。
ついでに言えば画面への描画処理もです。
23ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(205,837ポイント)
Date: 2010/08/27(金) 21:10
No:60322
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
ヘッダにC99のインライン展開やC++のクラスを書くときなど狙って書く場合なら良いですが、良く分からないのに関数の実体を書くのは避けたほうが無難と言うかエラーになるだけです。
ProcessMessage()は実のところ一秒間に数十回ほど呼び出してやればOKで、今の書き方で大きな問題はないと思いますが普通のプログラムの書き方ではないので効率はかなり悪いです。
それに、このままだとstory1と2を一本に結合するときに大変苦労しそうなんですね。シナリオの追加とかも大変なんじゃないかと思うんですがネスさんこのプログラム構造のまま進めるおつもりでしょうか?
223ポイント を手に入れた。
|
|
|
|
|
Name: palladium ..初心者(7,504ポイント)
Date: 2010/08/27(金) 21:53
No:60332
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
>ヘッダにC99のインライン展開やC++のクラスを書くときなど狙って書く場合なら良いですが、良く分からないのに関数の実体を書くのは避けたほうが無難と言うかエラーになるだけです。
その方が御自身で学ばない限りいつまでたっても理解できません。
54ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..中級者(10,087ポイント)
Date: 2010/08/27(金) 22:12
No:60342
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
皆さんレスありがとうございます。
では、while(ProcessMessage()==0 )を最初に書くことで、絶えず監視されているという理解でよいのでしょうか。
53ポイント を手に入れた。
|
|
|
|
|
Name: h2so5 ..かけだし(1,593ポイント)
Date: 2010/08/27(金) 22:26
No:60348
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
while(ProcessMessage()==0)ではなく
while(ProcessMessage()==0 ){
}
で一つのかたまりです。
単にループ内の処理が実行される前に毎回ProcessMessage()が呼ばれるだけです。
どうも根本的に理解されていないことが多いような気がします。
66ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(63,292ポイント)
Date: 2010/08/27(金) 22:30
No:60349
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
ゲームプログラミングの館を最初から順番にやって理解していけば、
こんなところでは悩まないはずです。
何度も言いますが基本は大事ですよ。
40ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..中級者(10,480ポイント)
Date: 2010/08/27(金) 22:35
No:60351
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
h2so5さん、レスありがとうございます。また、ご指摘のとおりです。
ただ、自分的にはどうも、while文が分かったとしても、ProcessMessage()がゼロの間はカッコ内の処理を繰り返すという解釈で、実際、どのタイミングでゼロか否かが判定されているのか、分かりませんでした。そこで、ウェイトキーのたびに、ProcessMessage()処理を置いていたという次第です。
>結合するときに大変苦労しそう
softyaさん、そうですね、それはさすがに自分も感じております。それで先日、教えてくださったリンク先でノベルゲーム基礎などやろうとしているのですが、乗りかかった船といいますか、作りかけのぶんだけ強引にでも最後までやりきってしまおうかというところで、こうした御迷惑をおかけすることになりました。
せっかくC言語の知識が不十分でも取り組める形で良いコンテンツや掲示板など用意されているのに、その想定のさらに下を行く形で質問をしてしまい、その点では、皆さんに大変、申し訳ないと思っております。
とりあえず、今のぶんだけでも最後まで作って、その後しばらくはC言語をイチから取り組んでみたいと思っています。
393ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..中級者(10,447ポイント)
Date: 2010/08/27(金) 22:36
No:60352
| 解決!
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
とりあえず回答も出揃ったので、これで解決としたいと思います。
33ポイント を落としてしまった。
|
|
|
|
|
Name: ISLe ..上級者(15,619ポイント)
Date: 2010/08/28(土) 04:06
No:60393
|
|
Title: Re:違うヘッダーファイル同士の関数の呼び出し
|
|
ゲームプログラミングは、
while(ProcessMessage()==0){
//ココ!!
ScreenFlip();
}
のようにメインループを作りますね。
このメインループはここにひとつだけあって、1フレームごとに一回ループするように作るのが基本です。
『ココ!! 』にどんなに深い関数呼び出しがあっても1フレーム分の処理をして必ず戻ってきてください。
DXライブラリ(というかウインドウズプログラム)は自由度が高いのでコピペしてループをいくつも並べたり入れ子にしたりできますが、そういうプログラムは(ゲームプログラムとしては)とても保守しにくいプログラムになります。
ゲームプログラミングの館には「ゲームを作ったりサンプルを考えたりする時は毎回このコードをコピペして下さい。」と紹介されているのですが、初めてゲームをつくる人のほとんどがウエイトの必要なところにどんどん貼り付けて良いと解釈するみたいです。
210ポイント を手に入れた。
|
|
|
|
Name: あいす ..かけだし(1,364ポイント)
Date: 2010/08/25(水) 05:54
No:60007
|
|
Title: 龍神録のボムについて
|
|
すいません、また質問させてください。
龍神録プログラミングの館を参考に作らせてもらっているのですが、ボムの撃てる回数に制限をつけたい(例えば3回しか撃てない等)のですが、どのようなプログラムを組めばよいのか分かりません・・・
もしよければ、どなたか教えてください。
また、そのことに関してのURL等があったら教えてくださると助かります。
97ポイント を落としてしまった。
|
|
|
|
Name: Mr.Vince ..かけだし(1,409ポイント)
Date: 2010/08/25(水) 07:02
No:60009
|
|
Title: Re:龍神録のボムについて
|
|
個人的な見解ですが、4章で作られております「キャラクターに関する構造体」に
int bomb //ボム数
を追加し、初期化時に最大数にして、ボムを打つごとに1ずつ減らします。
そして、ボム発射処理の直前に、
if (ch.bomb > 0)
{
//ボム発射処理
}
とでもチェックすればいいのではないかと思います。
79ポイント を手に入れた。
|
|
|
|
|
Name: あいす ..かけだし(1,263ポイント)
Date: 2010/08/26(木) 03:40
No:60128
|
|
Title: Re:龍神録のボムについて
|
|
Mr.Vinceさん
すいません、何となくどうすれば良いかイメージはあるのですが、それについてのプログラムの組み方が分からないです・・・
シエルさん
学校の課題でゲーム製作をしていてこのゲームを作らせてもらっているのですが、夏休みまでに終わる気がせず少し焦っていました・・・
一応1章から目を通したつもりではいますが、ボムの回数制限に関してのことは無かったような気がします、自分の不注意でしょうか・・・
もう何度か1章から全部見て行きたいと思います。
101ポイント を落としてしまった。
|
|
|
|
|
Name: あいす ..かけだし(1,484ポイント)
Date: 2010/08/27(金) 05:42
No:60247
|
|
Title: Re:龍神録のボムについて
|
|
すいません、まだボムに関しては解決してないのですが、別の問題が起きたので、アドバイスお願いします。
コンパイルした後ビルドエラーが発生し、最後に成功したビルドを実行しようとしたのですが、
project\47章\Debug\Ryujin.exe'を開始できません。
指定されたファイルが見つかりません
とエラーが発生しました。
exeファイルが見つからないってことは例えエラーを解決したとしても実行できないってことですよね?
自分でもDebugファイルの中を探したのですが、どれが何なのか分からなくてどうしようもないです・・・
何度も質問してすいませんが、よろしくお願いします。
Microsoft Visual C++ 2008 Express Editionを使用しています。
221ポイント を手に入れた。
|
|
|
|
|
Name: あいす ..かけだし(1,572ポイント)
Date: 2010/08/28(土) 02:36
No:60390
|
|
Title: Re:龍神録のボムについて
|
|
すいません、上の問題は解決しました・・・
一人で勝手に騒いでしまって申し訳ないです・・・
2倍のポイントを手に入れた! 88ポイント を手に入れた。
|
|
|
|
Name: jet ..ぴよぴよ(14ポイント)
Date: 2010/08/28(土) 00:16
No:60379
|
|
Title: ひらがなや漢字を数値に
|
|
scanfなどで入力されたchar型の文字または文字列をint型の数値にする方法はあるのでしょうか?
"りんご"や"東京都"などを数値にしたいのです。
どなたかご教授願います。
14ポイント を手に入れた。
|
|
|
|
Name: ookami ..熟練のプログラマー(48,210ポイント)
Date: 2010/08/28(土) 00:25
No:60380
|
|
Title: Re:ひらがなや漢字を数値に
|
|
> 文字列をint型の数値にする
と、いうのがちと曖昧ですが、
↓のような事でしょうか?
char *s="東京なばば";
for(int i=0;s[i];i++) printf("%d byte目 = %d\n",i,s[i]);
42ポイント を落としてしまった。
|
|
|
|
|
Name: jet ..ぴよぴよ(302ポイント)
Date: 2010/08/28(土) 01:00
No:60384
|
|
Title: Re:ひらがなや漢字を数値に
|
|
回答ありがとうございます。
試しにchar型で一文字入力してみたところ
"あ"も"い"も(おそらくひらがな全て)130と表示されてしまうのです。(int型の十進数で表示)
なので"りんご"や"東京都"のような文字列はまだ試していません。
やりたいことはookamiさんので合っていると思います。
2倍のポイントを手に入れた! 288ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(157,323ポイント)
Date: 2010/08/28(土) 01:05
No:60385
|
|
Title: Re:ひらがなや漢字を数値に
|
|
> "あ"も"い"も(おそらくひらがな全て)130と表示されてしまうのです。(int型の十進数で表示)
どういったソースを書かれたかがわからないため、推測でしかありませんが、
おそらくは、シフトJIS環境において、"あ"や"い"といった2バイト文字の
左バイトが0x82(十進で130)であることによるものだと思います。
63ポイント を手に入れた。
|
|
|
|
|
Name: jet ..ぴよぴよ(308ポイント)
Date: 2010/08/28(土) 01:17
No:60386
| 解決!
|
Title: Re:ひらがなや漢字を数値に
|
|
解決いたしました。
回答していただいたみなさんありがとうございました。
6ポイント を手に入れた。
|
|
|
|
Name: 屑鐵 ..ぴよぴよ(257ポイント)
Date: 2010/08/27(金) 21:23
No:60327
|
|
Title: 文字列検索について
|
|
ファイルの文字列を検索して配列に代入し、検索したいと思っています
しかしどうしても以下のエラーが出ます。何をどう変えればよいのか教えてください。
1> main01.cpp
1>c:\users\owner\main01.cpp(56): error C2086: 'char *result' : 再定義されました。
1>c:\users\owner\main01.cpp(17) : 'result' の宣言を確認してください。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
#define _CRT_SECURE_NO_DEPRECATE 1 /* VisualC++2005 での警告抑制 */
#include <stdio.h>
#include <string.h>
#include <stddef.h>
#include <cstring>
int main(void)
{
FILE *fp;
int c;
int j=0;
char *buff;
char *find="<form name=\"delform\" action=";
char *result;
fp = fopen( "C:/MyC/index.txt", "r" );
if( fp == NULL )
{
puts( "index.txtが開けません\n" );
return 1;
}
/* 1文字ずつ読み込んで、表示していくループ */
while( 1 ) /* ファイルの末尾まで */
{
c = fgetc( fp );
if( feof( fp ) ){ break; } /* ファイルの末尾まで */
printf( "%c", c );
j = j+1;/*while内を数える*/
buff[j] = c;
}
fclose( fp );
/* 終了前の挿入句 */
printf("読み込んだ文字数を表示します\n続行するにはエンターキーを押してください…\n");
rewind(stdin);
getchar();
printf("文字数は%dです\n", strlen(buff));
/* 終了前の挿入句 */
printf("続行するにはエンターキーを押してください…");
rewind(stdin);
getchar();
/* 文字列検索 そしてそのアドレス返却 */
char *result = strstr( buff, find );/*検索:*/
if (*result == NULL) {
printf("Not Found\n");
} else {
printf("%s\n", result); // "<form name=\"delform\" action="
}
return 0;
}
257ポイント を手に入れた。
|
|
|
|
Name: あたっしゅ [URL] ..かけだし(1,492ポイント)
Date: 2010/08/27(金) 21:44
No:60330
|
|
Title: Re:文字列検索について
|
|
>int main(void)
>{
>
> FILE *fp;
> int c;
> int j=0;
> char *buff;
> char *find="<form name=\"delform\" action=";
> char *result;
"char *result;" を削除する。
あと、エラー・メッセージは出ていないが
> /* 文字列検索 そしてそのアドレス返却 */
> char *result = strstr( buff, find );/*検索:*/
>
> if (*result == NULL) {
> printf("Not Found\n");
> } else {
> printf("%s\n", result); // "<form name=\"delform\" action="
> }
の "if (*result == NULL ) {"
result には、"*" つけない。
67ポイント を手に入れた。
|
|
|
|
|
Name: 屑鐵 ..ぴよぴよ(283ポイント)
Date: 2010/08/27(金) 22:58
No:60360
| 解決!
|
Title: Re:文字列検索について
|
|
ありがとうございます
とりあえずはエラーがでなくなりました
26ポイント を手に入れた。
|
|
|
|
Name: 未来のプログラマー ..入門者(3,258ポイント)
Date: 2010/08/27(金) 22:11
No:60339
|
|
Title: ライブラリ問題
|
|
シューティングゲームの館で入れたソースにエラーが出てしまいました
(ソース)
#include "DxLib.h"
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int RefreshTime;
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK ) ;
while(ProcessMessage() == 0 && GetHitKeyStateAll(Key) == 0){
RefreshTime = GetNowCount();
ClearDrawScreen();
ScreenFlip() ;
if(Key[KEY_INPUT_ESCAPE]==1) break;
while(GetNowCount() - RefreshTime < 17);
}
DxLib_End() ;
return 0 ;
}
403ポイント を手に入れた。
|
|
|
|
Name: 未来のプログラマー ..入門者(4,669ポイント)
Date: 2010/08/27(金) 22:11
No:60341
|
|
Title: Re:ライブラリ問題
|
|
エラーはこのとうりです。
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __exit は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __cexit は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __amsg_exit は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __initterm_e は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(fflush.obj) : error LNK2005: _fflush は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(invarg.obj) : error LNK2005: __invoke_watson は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(sprintf.obj) : error LNK2005: _sprintf は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
1>LIBCMTD.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(dosmap.obj) : error LNK2005: __errno は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(_trnsctrl_.obj) : error LNK2005: ___CxxFrameHandler は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(mlock.obj) : error LNK2005: __lock は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(mlock.obj) : error LNK2005: __unlock は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(winxfltr.obj) : error LNK2005: __XcptFilter は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(vsprintf.obj) : error LNK2005: _vsprintf は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(setlocal.obj) : error LNK2005: __configthreadlocale は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(errmode.obj) : error LNK2005: ___set_app_type は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(dbgrptw.obj) : error LNK2005: __CrtDbgReportW は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(vswprint.obj) : error LNK2005: __vswprintf は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(typinfo.obj) : error LNK2005: "public: void __thiscall type_info::_type_info_dtor_internal_method(void)" (?_type_info_dtor_internal_method@type_info@@QAEXXZ) は既に MSVCRTD.lib(MSVCR100D.dll) で定義されています。
1>LIBCMTD.lib(typinfo.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) は既に MSVCRTD.lib(ti_inst.obj) で定義されています。
1>LIBCMTD.lib(typinfo.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) は既に MSVCRTD.lib(ti_inst.obj) で定義されています。
1>LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
1>LINK : warning LNK4098: defaultlib 'LIBCMTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_execute_transformation が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_execute が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_adjust_parameters が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_request_workspace が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_setup が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _write_stdout が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_stdin が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_scan_script が関数 _parse_switches で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _keymatch が関数 _parse_switches で参照されました。
1>c:\documents and settings\「ユーザー名」\my documents\visual studio 2010\Projects\syu-thinngu\Debug\syu-thinngu.exe : fatal error LNK1120: 外部参照 9 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
と大量に出てしまいました。
連鎖的っぽいですが
どうすればエラーが消えるでしょうか。
コンパイラはvisualc++です
1,411ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..プログラマー(38,414ポイント)
Date: 2010/08/27(金) 22:16
No:60343
|
|
Title: Re:ライブラリ問題
|
|
プロジェクトの設定はきちんと行われていますか?
特に、
H 次にダイアログの左上にある『構成(C)』と書かれている項目を『すべての構成』から
『Release』に変更します。
I 左側のリストから今度は『構成プロパティ』→『C/C++』→『コード生成』を選びます。
J ダイアログ右側に表示されている『ランタイム ライブラリ』の項目を
『マルチスレッド(/MT)』に変更したあと、ダイアログ右下にある『適応』ボタンを押します。
K ダイアログの左上にある『構成(C)』と書かれている項目を『Release』から
『Debug』に変更します。
L ダイアログ右側に表示されている『ランタイム ライブラリ』の項目を
今度は『マルチスレッド デバッグ(/MTd)』に変更します。
M 最後にダイアログの下の方にある『OK』を押してダイアログを閉じます。
という手順を再確認してみてください。
433ポイント を落としてしまった。
|
|
|
|
Name: 福田紘之 ..ぴよぴよ(57ポイント)
Date: 2010/08/27(金) 18:02
No:60297
|
|
Title: 教えて
|
|
はじめまして
添付ファイルのプログラムの右回転、左回転を各数回繰り返えし続けるプログラムがわかりません、教えてください。
57ポイント を手に入れた。
|
|
|
Name: しんご ..ぴよぴよ(152ポイント)
Date: 2010/08/25(水) 18:56
No:60081
|
|
Title: 文字列
|
|
a[0] => 0
:
a[0] => 9
a[0] => a
:
a[0] => z
a[0] => A
:
a[0] => Z
a[0][1] => 00
:
a[0][1] => 09
a[0][1] => 0a
:
a[0][1] => 0z
a[0][1] => 0A
:
a[0][1] => 0Z
最初に希望の桁数を入力して
その分だけ上記のようにしたいです。
【例】
入力→5
表示:0〜ZZZZZ
自分でもいろいろ考えてみたのですが
アルゴリズム?が自分にとって複雑すぎてわかりません。
よろしくお願いします。
61ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(209,921ポイント)
Date: 2010/08/25(水) 19:12
No:60085
|
|
Title: Re:文字列
|
|
逆に確認するけど、
1:C言語の理解度はどの程度?
2:使っていい関数と駄目な関数は?
3:開発環境に制限はある?
4:入力値の範囲は?(最大値、最小値のことね)
5:ようは大文字&小文字で62進数っぽく(0〜9、a〜z、A〜Zで桁上がり)表示したいってこと?
もしそうだとしたら、2桁の場合は
00〜09、0a〜0z、0A〜0Z
10〜19、1a〜1z、1A〜1Z
20〜29、2a〜2z、2A〜2Z
:
:
X0〜X9、Xa〜Xz、XA〜XZ
Y0〜Y9、Ya〜Yz、YA〜YZ
Z0〜Z9、Za〜Zz、ZA〜ZZ
じゃないの?
161ポイント を手に入れた。
|
|
|
|
|
Name: しんご ..ぴよぴよ(298ポイント)
Date: 2010/08/25(水) 19:50
No:60092
|
|
Title: Re:文字列
|
|
> 1:C言語の理解度はどの程度?
参考書を二度ほど読み終わり現在は色々試しています。
> 2:使っていい関数と駄目な関数は?
特にありませんがWinで使用します。
> 3:開発環境に制限はある?
VC++ 2010を使用しています。
> 4:入力値の範囲は?(最大値、最小値のことね)
あまり長くすると処理に時間が掛かりますよね?
単純に考えて10桁だとすると
(26+26+10)^10-1
という計算になります。
何通りあるのでしょうか・・・
とりあえず2桁から8桁くらいでやってみて
時間を計りつつ増やせそうなら自分で範囲を広げて行こうと思います。
> 5:ようは大文字&小文字で62進数っぽく(0〜9、a〜z、A〜Zで桁上がり)表示したいってこと?
そうです。
> もしそうだとしたら、2桁の場合は
> 00〜09、0a〜0z、0A〜0Z
> 10〜19、1a〜1z、1A〜1Z
> 20〜29、2a〜2z、2A〜2Z
> :
> :
> X0〜X9、Xa〜Xz、XA〜XZ
> Y0〜Y9、Ya〜Yz、YA〜YZ
> Z0〜Z9、Za〜Zz、ZA〜ZZ
> じゃないの?
そうです。
それを指定桁数分やりたいのです。
146ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..入門者(3,470ポイント)
Date: 2010/08/25(水) 22:39
No:60109
|
|
Title: Re:文字列
|
|
まず0から9、aからz、AからZを順番にchar型配列に格納します。(cとします。)
表示する桁数のint型配列を用意します。(aとします。)
aを0で初期化します。
表示する文字列用のバッファを用意します。(sとします。)
表示する文字列の作成
s[0]=0;
for(i=0;i<桁数;i++;){
sprintf(s,"%s%c",s,c[a[i]]);
}
sを表示します。
aの最後を1増やします。
その結果62以上になったら0にしてひとつ前を1増やします。
62以上になったら同じようにします。
最初が62を越えたら終了します。
表示する文字列を作成して表示します。
繰り返します。
間違っていたらごめんなさい。
213ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(210,603ポイント)
Date: 2010/08/25(水) 23:59
No:60114
|
|
Title: Re:文字列
|
|
結構、まわりくどいやり方になっちまった(^_^;)
表示が違うけど、それは自分で修正してくださいなm(__)m
#include <math.h>
#include <stdio.h>
#include <string.h>
#define STR_MAX_LEN 10 + 1
const char parts[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'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',
'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' };
void reverse(int n, char* str)
{
if (n >= 0)
{
putc(*(str + n), stdout);
reverse(n - 1, str);
}
}
void convert(int digit)
{
char str[STR_MAX_LEN] = {0, };
int i = 0;
unsigned long long cnt = 0;
unsigned long long tmp = 0;
unsigned long long max = 0;
max = (unsigned long long)(pow((long double)(62), digit) - 1);
for (cnt = 0 ; cnt <= max; ++cnt)
{
tmp = cnt;
for (i = 0; i < digit; ++i)
{
str[i] = parts[tmp % 62];
tmp /= 62;
if (tmp == 0)
break;
}
printf("%I64u = ", cnt);
reverse((int)strlen(str), str);
putc('\n', stdout);
}
}
int main(void)
{
convert(5);
return 0;
}
682ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(211,258ポイント)
Date: 2010/08/26(木) 09:14
No:60130
|
|
Title: Re:文字列
|
|
こちらの方が色々と扱いやすいかな?
#include <math.h>
#include <stdio.h>
#include <string.h>
#define STR_MAX_LEN 10 + 1
const char parts[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'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',
'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' };
void reverse(int n, int m, const char* src, char* dest)
{
if (n >= 0)
{
*(dest + m) = *(src + n);
reverse(n - 1, m + 1, src, dest);
}
}
/*
val = 変換したい値
base = 基数(10進数なら10、16進数なら16、62進数なら62)
dig = 最大文字数
str = 変換後の文字列が格納される領域へのポインタ
*/
void convert(const unsigned long val, const int base, const int dig, char* str)
{
char buf[STR_MAX_LEN] = {0, };
int i = 0;
unsigned long tmp = 0;
tmp = val;
for (i = 0; i < dig; ++i)
{
buf[i] = parts[tmp % base];
tmp /= base;
if (tmp == 0)
break;
}
/* 文字列の反転 */
reverse((int)strlen(buf) - 1, 0, buf, str);
}
int main(void)
{
char* str[STR_MAX_LEN] = {0, };
unsigned long i = 0;
for (i = 0; i < 4000; ++i)
{
convert(i, 62, 10, str);
printf("%s ", str);
}
return 0;
}
655ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(45,364ポイント)
Date: 2010/08/26(木) 09:45
No:60135
|
|
Title: Re:文字列
|
|
私も便乗させていただきたくw こんなのいかがでしょうか。
#include <stdio.h>
#include <string>
// i^pを返す
int ipow(int i,int p) {
int r=1;
while(p--) r*=i;
return r;
}
void main(void)
{
int digit=2;
const char *chartbl="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i,n=(int)strlen(chartbl),imax=ipow(n,digit);
const int BUFMAX=8;
char buf[BUFMAX]={0},*p;
for(i=0;i<imax;i++) {
p=buf+BUFMAX-2;
for(int j=i;j;j/=n) *p--=chartbl[j%n];
p++;
printf("%d : %s\n",i,p);
}
}
2倍のポイントを手に入れた! 372ポイント を手に入れた。
|
|
|
|
|
Name: フリオ ..プログラマー(36,838ポイント)
Date: 2010/08/26(木) 13:56
No:60169
|
|
Title: Re:文字列
|
|
考えてみました。
少し書き直しました。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int func(int m)
{
const char *s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int n = (int)strlen(s);
int *p;
if(m <= 0) return 0;
if(!(p = calloc(m, sizeof(int)))) return 0;
while(1){
int i;
for(i = 0; i < m; ++ i) putchar(s[p[i]]); putchar(' ');
while(-- i >= 0 && ++ p[i] == n) p[i] = 0;
if(i < 0) break;
}
free(p);
return 1;
}
int main(void)
{
func(3);
return 0;
}

311ポイント を手に入れた。
|
|
|
|
|
Name: しんご ..ぴよぴよ(463ポイント)
Date: 2010/08/26(木) 18:41
No:60198
|
|
Title: Re:文字列
|
|
バグさん
ookamiさん
フリオさん
ありがとうございます。
とても参考になりました。
現在、希望の文字列になるまで何秒掛かるかを見たりしています。
そこで欲が出てしまったのですが・・・
今度は
@桁数を入力。
A始まりの文字列
B終わりの文字列
を入力して何秒掛かるのかを見てみたいと思いました。
【例】
桁数:5
始まりの文字列:0a5bc
終わりの文字列:0b6cd
自分でも色々やってみたのですが
どうも難しくてわかりません>_<
165ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(211,408ポイント)
Date: 2010/08/26(木) 18:53
No:60199
|
|
Title: Re:文字列
|
|
今度は逆の処理ですね。
つまり、62進数から10進数への変換処理をしてやる必要がありますね。
1桁目の数値は1〜Z(1〜61)
2桁目の数値は(1〜Z)×62
3桁目の数値は(1〜Z)×62×62
4桁目の数値は(1〜Z)×62×62×62
ってな具合で任意の桁まで繰り返していき、全ての桁の数値の総和を求めれば10進数への変換は終了です。
この処理で始まりの値と終わりの値を求めてやり、forループとかで繰り返せばよいだけですね。
さて、ここまでは理解できますか?
150ポイント を手に入れた。
|
|
|
|
|
Name: しんご ..ぴよぴよ(499ポイント)
Date: 2010/08/27(金) 07:30
No:60254
|
|
Title: Re:文字列
|
|
ookamiさん
自分もそう思ったのですが
処理が長くなるとやはり変わってきますよ。
36ポイント を手に入れた。
|
|
|
|
|
Name: しんご ..ぴよぴよ(633ポイント)
Date: 2010/08/27(金) 08:47
No:60258
|
|
Title: Re:文字列
|
|
ookamiさん
どう使うかと聞かれると・・・
特に使い道は考えていません。。。
強いて言うのであれば
ループの回数によってどの程度処理速度が変わるのかを見てみたいのですが
ただ
for(;;) i++;
としただけではつまらないので
このように複雑にしようと思っています。
134ポイント を手に入れた。
|
|
|
|
|
Name: しんご ..ぴよぴよ(794ポイント)
Date: 2010/08/27(金) 09:42
No:60260
|
|
Title: Re:文字列
|
|
バグさん
> 今度は逆の処理ですね。
>
> つまり、62進数から10進数への変換処理をしてやる必要がありますね。
>
> 1桁目の数値は1〜Z(1〜61)
> 2桁目の数値は(1〜Z)×62
> 3桁目の数値は(1〜Z)×62×62
> 4桁目の数値は(1〜Z)×62×62×62
>
> ってな具合で任意の桁まで繰り返していき、全ての桁の数値の総和を求めれば10進数への変換は終了です。
> この処理で始まりの値と終わりの値を求めてやり、forループとかで繰り返せばよいだけですね。
>
>
> さて、ここまでは理解できますか?
>
色々やってみてるのですが
いまいちわかりません>_<
ちなみに
> 1桁目の数値は1〜Z(1〜61)
> 2桁目の数値は(1〜Z)×62
> 3桁目の数値は(1〜Z)×62×62
> 4桁目の数値は(1〜Z)×62×62×62
これなんですけど
1〜Z(1〜61)
でいいのですか?
0〜Z(0〜61)
にならないのはなぜですか?
たとえば
「2Cz」という文字列は
1桁目・・・z(36)
2桁目・・・C(39*62=2418)
3桁目・・・2(3*62*62=11532)
なので
36+2418+11532=13986
ということでしょうか?
※0〜Z(0〜61)で計算してます。
同じように終わりの文字列を計算して
14986だったとしたら
while(13986 <= 14986) //変数ではなく例でわかりやすいように数字にしてます
という具合でループして
10進数をまた62進数にするといことですか?
161ポイント を手に入れた。
|
|
|
|
|
Name: しんご ..ぴよぴよ(774ポイント)
Date: 2010/08/27(金) 09:44
No:60261
|
|
Title: Re:文字列
|
|
ookamiさん
逆にどういうことに使えそうですかね?
この先いろいろ改造していきたいので
これを使ったおもしろいものがあったら
教えてください^^
20ポイント を落としてしまった。
|
|
|
|
|
Name: バグ ..ハッカー(211,935ポイント)
Date: 2010/08/27(金) 10:23
No:60263
|
|
Title: Re:文字列
|
|
>>しんごさん
おっと、失礼しました。
たしかに1〜Z(1〜61)ではなく、0〜Z(0〜61)の間違いですね。
とりあえず書いてみましたので、解析してみてください。
あまり深くデバッグしていないのでバグが潜んでいるかもしれませんが、ご容赦を。
※unsigned long longを多用しているのは、他の型で62進数を扱うとあっという間にオーバーフローしてしまうからです(^_^;)
※使い道
仕事で数字とアルファベットを使用した36進数ってのは使った事がありますね。
データの簡単な暗号化に使うくらいしか思いつかないですね。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* unsigned long long型のべき乗計算 */
unsigned long long pow_ull(unsigned long long val, unsigned int cnt)
{
unsigned long long ret = 1;
for (; cnt > 0; --cnt)
ret *= val;
return ret;
}
/* 10進数からN進数へ変換 */
void cvt10ToN(unsigned long long val, const unsigned int base, unsigned int dig, char* str)
{
const char* parts = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
sprintf(str, "%0*d", dig, 0);
for (; dig > 0; --dig, val /= base)
if (val != 0)
str[dig - 1] = parts[val % base];
}
/* 1文字を10進数値へ変換 */
unsigned long long cvtCharTo10(const char ch)
{
const char* parts = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
unsigned long long i = 0;
unsigned long long len = (unsigned long long)strlen(parts);
for (i = 0; i < len; ++i)
if (ch == *(parts + i))
return i;
return 0;
}
/* N進数文字列を10進数値へ変換 */
unsigned long long cvtStrTo10(const char* str, const unsigned int base)
{
unsigned int i = 0;
unsigned int dig = (unsigned int)strlen(str);
unsigned long long ret = 0;
for (i = 0; i < dig; ++i)
ret += cvtCharTo10(*(str + i)) * pow_ull(base, dig - i - 1);
return ret;
}
void main(void)
{
char str[256];
unsigned long long i = 0;
for (i = 0; i < 100000; ++i)
{
cvt10ToN(i, 62, 10, str);
printf("%s = %I64u\n", str, cvtStrTo10(str, 62));
}
}
527ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(47,765ポイント)
Date: 2010/08/27(金) 11:37
No:60273
|
|
Title: Re:文字列
|
|
# 使い道
私は、似たようなロジックを、日時を表す時に使っています。
例えば、2010 8/27 11:31:23 を表すのに、
単に 年月日 時分秒 を結合すると、20100827113123 となりますが、
一見して「日時だなっ」という印象を避けたい場合に、
年(の下2桁),月,日, 時,分,秒 をそれぞれ 0-9a-zA-Z に変換してから結合すると
a8rbvn
となります。
「だからどうした」って感じかもですけど^^;
以下、ソースを載せます。
phpですけど...概念は伝わるかと。
$x60tas="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
function x60ta($s) {
global $x60tas;
return substr($x60tas,intval($s),1);
}
$nocache=date("YmdHis",time());
$nocache=x60ta(substr($nocache, 2,2)).
x60ta(substr($nocache, 4,2)).
x60ta(substr($nocache, 6,2)).
x60ta(substr($nocache, 8,2)).
x60ta(substr($nocache,10,2)).
x60ta(substr($nocache,12,2));
269ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(212,019ポイント)
Date: 2010/08/27(金) 11:48
No:60274
|
|
Title: Re:文字列
|
|
>>ookamiさん
私はWeb系のソフトには軽く触った程度ですが、PHPやPerlなんかだと文字列の扱いが楽チンでいいですよね♪
37ポイント を手に入れた。
|
|
|
|
Name: mikann0147 ..ぴよぴよ(321ポイント)
Date: 2010/08/27(金) 04:40
No:60245
|
|
Title: エラーコードの原因
|
|
龍神録プログラミングの館の八章のキーコンフィグに対応させるところで、
下のようなエラーコード?がでて、先に進むことができません。
これです↓↓↓
1>LINK : fatal error LNK1104: ファイル 'DxLib_d.lib' を開くことができません。
何が原因なのでしょうか?
よろしくお願いします。 
2倍のポイントを手に入れた! 200ポイント を手に入れた。
|
|
|
|
Name: へろり ..プログラマー(31,696ポイント)
Date: 2010/08/27(金) 06:53
No:60249
|
|
Title: Re:エラーコードの原因
|
|
'DxLib_d.lib'へのパスが通っていないか、'DxLib_d.lib'が存在しません。
'DxLib_d.lib'があるかどうかを確認し、あるならばそのパスが見える位置にあるかどうか、リンカ・IDEの設定等を確認してください。
86ポイント を手に入れた。
|
|
|
|
|
Name: mikann0147 ..ぴよぴよ(360ポイント)
Date: 2010/08/27(金) 11:56
No:60276
| 解決!
|
Title: Re:エラーコードの原因
|
|
お返事ありがとうございます。
リンカー設定に問題があったようで、設定しなおすとできましたw
ありがとうございました。
39ポイント を手に入れた。
|
|
|
|
Name: bun ..ぴよぴよ(244ポイント)
Date: 2010/08/26(木) 14:54
No:60172
|
|
Title: 初心者です
|
|
初投稿です。
現在龍神録プログラミングの館の13章をやっているのですが
「shot.cpp(31): error C3861: 'shot_calc': 識別子が見つかりませんでした」
といったエラーが出て次に進めません。
プログラムを見返すとdefine.hの一番下の行の「#include "struct.h"」の下に赤波線があって
「ソースファイルを開けません"struct.h"」とでています。
パソコンを変えてからこのエラーが出たんですが、どうすれば良いかわかりません。
OSはwin7でMicrosoft Visual C++ 2010 Expressを使ってます。よろしくお願いします。
244ポイント を手に入れた。
|
|
|
|
Name: Mr.Vince ..かけだし(1,596ポイント)
Date: 2010/08/26(木) 15:27
No:60173
|
|
Title: Re:初心者です
|
|
まず、少なくともその周辺のソースコードを張ってくださらないと、判断が難しいです。
推測できるのは…struct.hとdefine.hはちゃんと同じフォルダに入っていますでしょうか?
71ポイント を落としてしまった。
|
|
|
|
|
Name: bun ..ぴよぴよ(250ポイント)
Date: 2010/08/26(木) 16:00
No:60176
|
|
Title: Re:初心者です
|
|
お返事ありがとうございます。
struct.hとdefine.hは同じフォルダに入っていました。
周辺のソースコードというのはdefine.hのソースコードを張るということですか?
6ポイント を手に入れた。
|
|
|
|
|
Name: Mr.Vince ..かけだし(1,712ポイント)
Date: 2010/08/26(木) 16:40
No:60180
|
|
Title: Re:初心者です
|
|
>周辺のソースコードというのは〜
エラーの出ているdefine.h、及びshot.cppですね。
また、お聞きしたいのですが、ちゃんとプロジェクト(.slnファイル)から開いていますでしょうか?
2倍のポイントを手に入れた! 116ポイント を手に入れた。
|
|
|
|
|
Name: bun ..ぴよぴよ(510ポイント)
Date: 2010/08/26(木) 18:29
No:60197
|
|
Title: Re:初心者です
|
|
すいません
「shot.cpp(31): error C3861: 'shot_calc': 識別子が見つかりませんでした」の部分は自己解決しました。
しかし以下のエラーがでてしまいます・・。
LINK : fatal error LNK1104: ファイル '..\..\スコア\DxLib_VC\プロジェクトに追加すべきファイル_VC用\DxLib_d.lib' を開くことができません。
あと、ちゃんとプロジェクトから開いていました。
2倍のポイントを手に入れた! 260ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(47,222ポイント)
Date: 2010/08/26(木) 19:13
No:60201
|
|
Title: Re:初心者です
|
|
横から失礼します。
> DxLib_d.lib' を開くことができません。
というのは、
「DxLib_d.libがどこにあるか分からない」
という意味だと思います。
参考になりますでしょうか…?
36ポイント を手に入れた。
|
|
|
|
|
Name: bun ..初心者(7,774ポイント)
Date: 2010/08/26(木) 21:06
No:60213
|
|
Title: Re:初心者です
|
|
すいません
DXライブラリの設定を何度も確認し書かれている通りにしましたが
同じエラーがでてしまいます・・。
ダウンロードし直したりした方が良いのでしょうか
74ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(47,404ポイント)
Date: 2010/08/26(木) 23:35
No:60236
|
|
Title: Re:初心者です
|
|
うーむ…。
DxLib_d.libがあるフォルダのスクリーンショットと、
Visual Studioの、ライブラリのパスを設定する画面のスクリーンショットを、
アップしてもらってもいいですか?
79ポイント を手に入れた。
|
|
|
|
|
Name: bun ..初心者(7,839ポイント)
Date: 2010/08/27(金) 11:52
No:60275
| 解決!
|
Title: Re:初心者です
|
|
パスを入力し直したりと色々したら何とかできました・・・。
ただの入力ミスだったんでしょうか・・だとしたら本当に申し訳ないです・・。
回答してくださった方々、ありがとうございました。
65ポイント を手に入れた。
|
|
|
|
Name: アトラス ..初心者(6,121ポイント)
Date: 2010/08/27(金) 05:58
No:60248
|
|
Title: アクションのサンプルコード
|
|
以前(1年ほど前)ここのサイトにアクションゲームの簡易サンプルプログラムのページがあったと思うのですが、
今それらしいところを探しても見つからずちょっと困っております。
内容としては
白色の正方形が自機で、マップも白の正方形のみで構成
左右の移動とジャンプが可能で当たり判定も実装されてました。
私の勘違いだったら大変申し訳ないのですが、古いページはいくつか消してしまったのでしょうか。
191ポイント を手に入れた。
|
|
|
|
Name: アトラス
Date: 2010/08/30(月) 08:17
No:602481283123828
| 解決!
|
Title: Re:アクションのサンプルコード
|
|
うーん、見つかりませんでした
だいぶ前に見たのでもしかしたら別のサイトだったのかもしれません・・・
大変お騒がせして申し訳ないです。
|
|
|
|
Name: まー ..ぴよぴよ(193ポイント)
Date: 2010/08/27(金) 07:02
No:60250
|
|
Title: s2を試してみて、自分でも他のものを試してみよう・・・と思ったのですが・・・
|
|
初心者で、ここで勉強させてもらっているまーです。
ソフトはここで勧められているものを利用しています。
s2を試してみて、自分でも他のものを試してみよう・・・
と思ったのですが・・・
s2のサウンドノベル風のサンプルプログラムなんですが、
あれだと一行に文字がズラーっと広がっちゃいますよね?
でもサウンドノベルって、何文字か行けば改行するじゃないですか?
でもstrncpyって、どこまでをコピーするか・・・
しか表現できませんよね?
しかも\nや\rは使えない・・・
ifやswitchで場合わけして、strncpyを二つ用意して、それぞれ違う配列に格納したからといって、
1からコピーしてしまって同じ文章を表示しちゃう・・・
なにかいい方法ご存知ないでしょうか・・・
193ポイント を手に入れた。
|
|
|
|
Name: へろり ..プログラマー(31,609ポイント)
Date: 2010/08/27(金) 07:18
No:60252
|
|
Title: Re:s2を試してみて、自分でも他のものを試してみよう・・・と思ったのですが・・・
|
|
今ひとつ言いたいことが解りません。
>s2を試してみて、自分でも他のものを試してみよう・・・
s2とはなんですか。
>ifやswitchで場合わけして、strncpyを二つ用意して、それぞれ違う配列に格納したからといって、
>1からコピーしてしまって同じ文章を表示しちゃう・・・
1からコピーしなければいいのでは? と思うわけですが、これは具体的なコードが無いと何とも言えません。
157ポイント を落としてしまった。
|
|
|
|
Name: ネス ..初心者(8,489ポイント)
Date: 2010/08/26(木) 20:31
No:60207
|
|
Title: 関数にまとめると画像が表示されなくなった
|
|
皆さん、こんばんは。
2枚の立ち絵素材があり、1つは口が閉じたの、もう1つは口が開いたのです。これを交互に表示させることで会話しているように見せるという意図です。for文を用いて作ったのですが、これを関数化したとたん、画像がまるで表示されない事態になりました。コンパイルも正常に通ってしまっている状況です。
#include "DxLib.h"
void drawm ( void ) ;
int mira1, mira2, i ;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
SetWindowIconID( 101 ) ;
LoadIcon(hInstance , TEXT("IDI_ICON1"));
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
mira1 = LoadGraph ( "mira/001.png" ) ;
mira2 = LoadGraph ( "mira/002.png" ) ;
int voice = LoadGraph ( "zai/voiceonly1.png" ) ;
DrawGraph ( 0, 0, voice, FALSE ) ;
drawm ( ) ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
void drawm ( void )
{
int mira1 ;
int mira2 ;
int i ;
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定
for ( i = 0 ; i < 20 ; i++ )
{if(ProcessMessage()!=0)
break;
DrawGraph ( 0, 0, mira1, TRUE ) ;
ScreenFlip() ;
WaitTimer ( 100 ) ;
DrawGraph ( 0, 0, mira2, TRUE ) ;
ScreenFlip() ;
WaitTimer ( 100 ) ;
ScreenFlip() ;
DrawGraph ( 0, 0, mira1, TRUE ) ;
WaitTimer ( 100 ) ;
}
return ;
}
2倍のポイントを手に入れた! 1,650ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,263,744ポイント)
Date: 2010/08/26(木) 20:54
No:60211
|
|
Title: Re:関数にまとめると画像が表示されなくなった
|
|
ゲームプログラムにおいて、特定の関数で処理を止めたり、画面の操作をしたりすると非常によくないプログラムになってしまいます。
メインループをする関数でのみ画面クリアや反映をするべきで、WaitTimerは使うべきではなく、
待機させたいときはカウンタなどを使って待機すべきでしょう。
プログラムの骨格となる構造をゲームプログラミングの館の13章で説明しているので良ければご覧ください。
132ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,263,975ポイント)
Date: 2010/08/26(木) 21:06
No:60212
|
|
Title: Re:関数にまとめると画像が表示されなくなった
|
|
今回で言えば、こんな感じでしょうか。
#include <DxLib.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int Count=0;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
SetDrawScreen( DX_SCREEN_BACK ); //裏画面に設定
while(!ProcessMessage() && !ClearDrawScreen() && !CheckHitKey(KEY_INPUT_ESCAPE)){
if( (Count%60)<30 ){
DrawBox(0,0, 640, 480, GetColor(255,255,0),TRUE);
} else {
DrawBox(0,0, 640, 480, GetColor(0,255,255),TRUE);
}
Count++;
ScreenFlip();//裏画面を表画面に反映
}
DxLib_End();
return 0;
}
231ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..中級者(9,060ポイント)
Date: 2010/08/26(木) 21:07
No:60214
| 解決!
|
Title: Re:関数にまとめると画像が表示されなくなった
|
|
softyaさん、ありがとうございます。
コレ昨日取り組んだ部分そのものなのに、同じ部分で躓いていて恥ずかしいです。
そっかあ〜グローバルはどの関数でも使えるんだから、同じ名前のをローカルで宣言しちゃあマズい。
なんでローカルで宣言しちゃってたんだろ〜なんで気付かないんだろう〜。
「バカだからじゃない?」って「戦場ヶ原ひたぎ」じゃなくても言いたくなる場面ですよね。お恥ずかしい。
(戦場ヶ原ひたぎ、知らなかったらスルーで。すんません、アニオタなもので)
ホント昨日教えてもらった部分そのまんまだのにorz
とはいえ、やっぱり本気で助かりました。
あの、余談ですが、softyaさんはソフト屋さんなのですか?
いや、ちょっと気になったもので。コレ、もちろん必須質問じゃないんですけど。
他の方のハンドル名ってなんか気になるというか、どんな理由でだろうと考えると好きというか。
とにかく、今回もまた、ありがとうございました。
修正後、すぐに意図したとおり動作しました。
343ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,264,379ポイント)
Date: 2010/08/26(木) 21:19
No:60216
|
|
Title: Re:関数にまとめると画像が表示されなくなった
|
|
こっちの方が解りやすかったかもしれません。
例えば背景が常に変化していて、その上に人物を表示したい場合などもあるでしょうが、
表示するたびに処理を止めたりしては同時に2つ以上のコンテンツを変化させることが出来ません。
しかし以下のように書けば並行していろんな物を同時に変化させることが出来ます。
#include <DxLib.h>
#include <math.h>
#define PI 3.141592654f
int GetRainbow( int Cnt ){
return GetColor(
(int)(128 + sin(PI*2/180*((Cnt+85*0)%180))*127),
(int)(128 + sin(PI*2/180*((Cnt+85*1)%180))*127),
(int)(128 + sin(PI*2/180*((Cnt+85*2)%180))*127)
);
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int Count=0;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
SetDrawScreen( DX_SCREEN_BACK ); //裏画面に設定
while(!ProcessMessage() && !ClearDrawScreen() && !CheckHitKey(KEY_INPUT_ESCAPE)){
DrawBox(0,0, 640, 480, GetRainbow(Count),TRUE);
if( (Count%60)<30 ){
DrawBox(220, 140, 320, 340, GetColor(255,255,0),TRUE);
} else {
DrawBox(320, 140, 420, 340, GetColor(0,255,255),TRUE);
}
Count++;
ScreenFlip();//裏画面を表画面に反映
}
DxLib_End();
return 0;
}
404ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(204,740ポイント)
Date: 2010/08/26(木) 21:51
No:60223
|
|
Title: Re:関数にまとめると画像が表示されなくなった
|
|
Dixq (管理人)さんも書いてますが、プログラムの作りはあまりよろしくないです。Dixq (管理人)さんのプログラムを参考にされたほうが良いと思いますよ。今のままでも動くとは思いますがメンテナンスや拡張性が非常に悪いですし、同じ関数が何度も出てくるのはミスを誘発します。
>あの、余談ですが、softyaさんはソフト屋さんなのですか?
>いや、ちょっと気になったもので。コレ、もちろん必須質問じゃないんですけど。
URLのリンク先を覗いてみてくださいね〜。
10ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..中級者(9,597ポイント)
Date: 2010/08/26(木) 22:05
No:60226
|
|
Title: Re:関数にまとめると画像が表示されなくなった
|
|
管理人さん、レスありがとうございます。
正直、今の私のレベルでは、どちらのソースもにわかにピンと来る感じではないのが本音です。ただコンパイルしてみると、驚きました。どちらも何ら画像や動画を使わずに、こんなこともできちゃうのかと。また、WaitTimerなどに頼らずカウントする方法を構築した方がよいという意図も、体感的にではありますが、なるほど〜と思いました。
ただ、ロジックとしては、まるで分かっていない自分ですorz
一本目のソースでは、(Count%60)<30とありますが、これはどういう意味なのでしょう?
私なりに考えると、まず、/ではなく%ということは、余りが求められていると。その余りが30より下なら、ifの処理で、それより上なら、elseの処理へと導かれると。で、これは割る数が60なので、0から59までの余りが生成されることになるのかなと。
ただ、そうなりますと、当面、余りは30より少ないので、ifの処理だけされるのかなと思いきや、実行してみると交互に色が表示され、じゃあelseの処理もされているのか〜となって、アレ、わけわかんないぞ〜となってしまうのですが、このあたりは、どう解釈すればよいのでしょう。
なんか、凄い的外れな理解の仕方をしている気も自分なりしますし。
537ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,263,832ポイント)
Date: 2010/08/26(木) 22:42
No:60231
|
|
Title: Re:関数にまとめると画像が表示されなくなった
|
|
ほとんどのモニタは60Hzで動いているので、カウンタは1秒間に60ずつ増加します。
今、0.5秒ずつ四角の表示が変わるようにする仕組みを作る為、
if( count%60 < 30 )
という書き方をしました。
ネスさんもお気づきのように、0-59の値がループして生成されます。
そうすれば0.0〜0.5秒はifの中を通り、0.5〜1.0秒はelseを通ります。
これを1秒周期で繰り返すことになりますね。
%はゲームプログラムでは非常によく使います。
また「周期」という言葉も何度も意識することになるでしょう。
2パターンの四角を表示するサンプルプログラムがあるなら、3パターン表示できるように改造してみるなど、
試行錯誤した数だけ上達しますので、しっくりこないところがあればしっくりくるまでサンプルをいじくり倒してみてください。
307ポイント を落としてしまった。
|
|
|
|
Name: ネス ..初心者(6,802ポイント)
Date: 2010/08/25(水) 19:37
No:60089
|
|
Title: プログラムが重い原因heno
|
|
皆さん、こんばんは。
プログラムを実行する際、動作の重さが気になっています。
・最初、起動するまでに時間が妙にかかる。場合によっては(応答なし)の表示がされてしまう。
・一つ目に関係あるかもしれませんが、ウェイトキーで何かキー入力しても押したことにならず、2度、3度押さねばならない場合がある。
・メモリに読み込んだ音楽ファイルが途中でブツブツ途切れることがある。(PCで色んなソフトを動かしている時など)
それで調べてみたのですが、結局、ProcessMessage処理がうまくいっていないのかなと。
実際、プロセスメッセージの処理が効果的なものなのか、今ひとつよく自分でも分かっていない気がします。
確かに実行中にウィンドウの×印を押すと、そこでプログラムは終了してくれますが、他のプログラムとの関係でどこまでスムーズになっているのかは、今の自分のやり方では疑問も多いです。
if ( ProcessMessage ( ) != 0 )
{
DxLib_End ( ) ;
}
153ポイント を手に入れた。
|
|
|
|
Name: ネス ..初心者(6,776ポイント)
Date: 2010/08/25(水) 19:41
No:60090
|
|
Title: Re:プログラムが重い原因heno
|
|
すいません。記事を書いている途中に間違って送信してしまったようです。
記事のタイトルは「プログラムが重い原因への対処法」とするつもりでした。
例えばノベルゲームを作る場合、上記のコードを関数化して、ウェイトキーでページをめくる際、置いているだけなのですが、これで効果的な使い方だと言えるのでしょうか?
26ポイント を落としてしまった。
|
|
|
|
|
Name: ネス ..初心者(6,972ポイント)
Date: 2010/08/25(水) 21:17
No:60100
|
|
Title: Re:プログラムが重い原因heno
|
|
softyaさん、ありがとうございます。
関数や変数の有効範囲について、まだ不勉強で、「なるほど!!」と気付かされた反面、いざそうしてみると、まだちょっと考える部分ができて、整理してみる時間が必要なようです。
>余計なお節介かも知れませんが
とんでもありません。コードにも眼を通してくださって、ありがたいことこの上ありません。
また、紹介URLも、まさに私がやろうとしていることそのまんまで、これは大いに活かせそうです。
(しかもDXライブラリ!!)
こちらの方こそ、どうも的を得ない質問をしているのに、このようにアドバイスを頂けるのは本当に助かります。
またお手すきの際は、忌憚なくご指摘ください。
196ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(204,156ポイント)
Date: 2010/08/25(水) 22:41
No:60110
|
|
Title: Re:プログラムが重い原因heno
|
|
あっ、補足として変数宣言はグローバルにしてくださいね。
int waku1 = LoadGraph ( "zai/waku1.png" ) ;
int page1 = LoadSoundMem ( "se/page1.mp3" ) ;
は各関数から外して
int waku1 ;
int page1 ;
と変数宣言はWinMainの外というかプログラムの最初においてください。
こうしないと変数のスコープで問題が出て、WinMainや各関数から参照できません。
で、WinMainで
waku1 = LoadGraph ( "zai/waku1.png" ) ;
page1 = LoadSoundMem ( "se/page1.mp3" ) ;
とだけしてください。
これでFRAME()やWK ()からロードしたデータが利用可能になります。
52ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..初心者(6,610ポイント)
Date: 2010/08/25(水) 22:51
No:60111
|
|
Title: Re:プログラムが重い原因heno
|
|
softyaさん、ありがとうございます。
直前のレス、今見たので、まだ未修正の部分あると思いますが、
とりあえず実行ファイル&ソースをアップしてみました。
>http://lordplace.web.fc2.com/code.html
前回の質問で、ソースを載せた場所と同じです。
いちばん上にリンクがあります。(ページ記載のソースはそのままですが)
>あとは実物を動かしてみないとなんとも・・・。
とありましたので、一応、のっけておきます。
私の環境では、やっぱり最初の起動で時間がかかるのと、あと、さくさく途中まで進め過ぎると、あとで一気に処理オチみたいなので、音声など途切れます。
本当はアップローダを使いたかったのですが、どうもサイズが大きすぎるとかで、結局ホムペ用のサーバに。
アクセスアップとか、アフィリエイトとか、そういう方向性の類のページじゃないんで、その点では御心配いりません。ただの物置きページです。
362ポイント を落としてしまった。
|
|
|
|
|
Name: softya [URL] ..ハッカー(204,083ポイント)
Date: 2010/08/26(木) 01:05
No:60119
|
|
Title: Re:プログラムが重い原因heno
|
|
こちらの環境ではまったく問題ありません。
ただ、メモリは300MBほど消費しているので実行環境次第では厳しいかもりません。
メモリの消費原因はサウンドデータと
int waku1 = LoadGraph ( "zai/waku1.png" ) ;
で何度も同じデータを読み込んでいることです。
73ポイント を落としてしまった。
|
|
|
|
|
Name: ネス ..初心者(6,830ポイント)
Date: 2010/08/26(木) 14:35
No:60170
|
|
Title: Re:プログラムが重い原因heno
|
|
>こちらの環境ではまったく問題ありません。
そうですか、それを聞いてちょっと安心しました。
>実行環境次第では厳しいかもりません。
RAM512MBとあります。一応VISTAプリインストールでしたが、だからHOME BASICだったのかもorz
とはいえ、毎回の画像読み込みを修正したことで、私の環境でも起動以外は一気にスムーズになりました。
メモリへの読み込みの負荷とか深く考えていなかったので、常識ではあるのかもしれませんが、自分で考えているだけではまず思いつかなかったです。
参考URLを目次と少し読みました。スクリプトの用意とか、未知で面白そうです。作り方も詳しく載っているのでこれは本当に助かります。
今回の質問では、本当に得るものが多かったです。本当に助かりました。ありがとうございました。
220ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(204,772ポイント)
Date: 2010/08/26(木) 15:37
No:60174
|
|
Title: Re:プログラムが重い原因heno
|
|
私のPCは4GBありますので300MB程度は平気ですが、RAM512MBだとOSや常駐ソフト分を引くと最大200MBぐらいまでに抑えておかないと安定しないと思いますよ。メモリはタスクマネージャで計測できますので必ず確認してください。
あとサウンドメモリが大半ですので、PlaySoundMem()とPlayMusic()関数の使い分けとかを検討してみてください。
126ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..初心者(8,717ポイント)
Date: 2010/08/26(木) 20:52
No:60210
|
|
Title: Re:プログラムが重い原因heno
|
|
>RAM512MBだとOSや常駐ソフト分を引くと最大200MBぐらいまでに抑えて
そういうものなのですか。
>メモリはタスクマネージャで計測できますので必ず確認してください。
早速やってみます。
4GBですか〜サクサクッという音がこっちにまで聞こえてきますorz
ただチラシを見るとPCのメモリは今のモデルって4GBが標準てorz
自分のは2007年当時は最新のモデルと呼ばれていたのですが、時期的にもメモリ少なめだし、粗悪品と呼べるぐらいだったかもorz
テレビ通販とかよく見ないとダメですね。
228ポイント を手に入れた。
|
|
|
|
|
Name: h2so5 ..かけだし(1,665ポイント)
Date: 2010/08/26(木) 22:42
No:60230
|
|
Title: Re:プログラムが重い原因heno
|
|
横から失礼しますが...
VISTAでRAM512MBってゲームの作成環境としては結構きつくないですか?
私のパソコン(Vista Home Basic 2GB RAM)だと作業用にいくつかソフトを起動していると
グラフィックソフトでもないのにすぐに600MB超えてしまいます。
それとも私のパソコンがおかしいのかもしれませんが...UMAだからかな?
112ポイント を手に入れた。
|
|
|
|
Name: DecentLove ..上級者(17,233ポイント)
Date: 2010/08/26(木) 21:30
No:60218
|
|
Title: 龍神録プログラミング 第8章
|
|
龍神録プログラミングの館、第8章で指示のあった通りに書いて実行しようとしたところ、エラーが酷いです。
1>c:\users\省略\desktop\project\1章\mydat\include\struct.h(18): error C2065: 'PAD_MAX' : 定義されていない識別子です。
1>c:\users\省略\desktop\project\1章\mydat\include\struct.h(15): error C2371: 'ch_t' : 再定義されています。異なる基本型です。
1>c:\users\省略\desktop\project\1章\mydat\include\struct.h(15) : 'ch_t' の宣言を確認してください。
1>c:\users\省略\desktop\project\1章\mydat\include\struct.h(19): error C2371: 'pad_t' : 再定義されています。異なる基本型です。
1>c:\users\省略\desktop\project\1章\mydat\include\struct.h(19) : 'pad_t' の宣言を確認してください。
1>c:\users\省略\desktop\project\1章\mydat\include\struct.h(23): error C2371: 'configpad_t' : 再定義されています。異なる基本型です。
1>c:\users\省略\desktop\project\1章\mydat\include\struct.h(23) : 'configpad_t' の宣言を確認してください。
定義されていない、と書かれていますが「定義へ移動」を行った際、ちゃんと定義されているとおもわれる。場所に飛んでくれます
念のため、龍神録第8章のファイルとも照らし合わせてみたのですが、間違いは無いようでした。
「定義へ移動」等行った際も8章のファイルと同じ場所にジャンプします。
どなたか、原因はここでは?など思われる方、ご教授お願いします。
使用していたファイルを添付しておきます、お願いします。
ちなみに、第8章で取り扱っているファイルは、
struct.h
define.h
GV.h
function.h
ini.cpp
key.cpp
char.cpp
main.cpp
です。ここのどこかに間違いがあるはずなのですが…。
すみません。追記です
Visual C++2010を使用しています 
560ポイント を手に入れた。
|
|
|
|
Name: DecentLove ..上級者(17,268ポイント)
Date: 2010/08/26(木) 21:39
No:60220
| 解決!
|
Title: Re:龍神録プログラミング 第8章
|
|
出来ました!ありがとうございます!
どうやら、define.h内で何を思ったか#include "struct.h"を2回呼んでいたみたいで…。
それと、define.hの一番下でincludeしてやって解決しました。
includeした場所にそのファイルの中身を書いたことになるんですね。だから2回定義してしまったと言うことですか。
勉強になりました。有難うございました。おかげで解決しました!
35ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,264,139ポイント)
Date: 2010/08/26(木) 21:47
No:60222
|
|
Title: Re:龍神録プログラミング 第8章
|
|
そのように2回インクルードしてしまう事を2重インクルード、重複インクルードと言いますが、これを避ける方法もあります。
例えば
定義の前後にこのように書いてみてください。
#ifndef ●●
#define ●●
定義
#endif
●●は何でも良いです。ファイル名やクラス名を大文字で書いたりするのが一般的でしょうか。
構造上複数回同じファイルをインクルードしてしまう事は良くありますが、このようにすることで重複インクルードが防止出来ます。
2回目以降ここを通るときは、●●が定義されているので、定義部分は通らないということですね。
203ポイント を落としてしまった。
|
|
|
|
Name: あ〜る ..プログラマー(28,748ポイント)
Date: 2010/08/25(水) 22:00
No:60106
|
|
Title: ソフトの情報、動作環境について
|
|
いつもお世話になっています。あ〜るです。
今、ホームページを作っています。
そして、そこで自分のゲームのページも作ろうと思ったのですが、ゲームのページにある動作環境の説明をどうすればいいのかわかりません。
対応OS、必要なCPU、ビデオカードのスペック、メモリ、DirectXのバージョン等、どうやって調べればいいのでしょうか?
ご教授よろしくお願いします。 
84ポイント を手に入れた。
|
|
|
|
Name: ookami ..熟練のプログラマー(45,465ポイント)
Date: 2010/08/26(木) 10:01
No:60136
|
|
Title: Re:ソフトの情報、動作環境について
|
|
使用したライブラリのドキュメントから引っ張るのがいいかもしれません。
例えば、DXライブラリの場合は、
http://homepage2.nifty.com/natupaji/DxLib/dxinfo.html
開発したソフトの必須動作環境
Windows98以降のOS
DirectX9以降がインストールされていること
DirectX7以降に対応したグラフィックスデバイス( 3Dモデルを扱う機能を使用する場合のみ )
32MBほどの空きメモリ
と、あるので、それですね。
ただ、仰るとおり、いろんな要素があるため、
「この環境なら動くハズ」と思っても、
意外と動かなかったりします。
なので、私は「動作環境」ではなくて、「動作確認済みの環境」みたいな
書き方で逃げます^^;
101ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..プログラマー(28,862ポイント)
Date: 2010/08/26(木) 10:29
No:60138
|
|
Title: Re:ソフトの情報、動作環境について
|
|
あ、成る程DXライブラリを見れば良かったのですね。
ありがとうございます、おかげで書く事が出来そうです(^_^v)♪
ところで、メモリは はライブラリに32MBの空きメモリで動くと書いてあるといっても、多分動きそうにないのですが、これはタスクマネージャーなんかでメモリの使用量を調べて起動前と一番メモリを使ってた瞬間の差を書いておけば問題無いのでしょうか?
再び質問になってしまいすいません。
よろしくお願いします。
114ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(45,885ポイント)
Date: 2010/08/26(木) 10:45
No:60141
|
|
Title: Re:ソフトの情報、動作環境について
|
|
メモリは微妙ですね... 実際には、メモリが空いていてもギリギリいっぱいだと
すんごい処理落ちするとかありますからね。
私だったら、メモリについては書かないか、1GBとか多めに書いておくか...
何人かに協力を仰いで、PCのスペックと、実際に動かした時のFPSなどを
聞いてみるのが確実かもしれません。
で、「動作確認済みの環境」として書くと。
「動作環境」と書くと、「動作を保証する環境」みたいに取る人がいると
めんどうなことに(まぁフリーならそうそうないと思いますが^^;)
128ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..プログラマー(29,014ポイント)
Date: 2010/08/26(木) 11:13
No:60143
|
|
Title: Re:ソフトの情報、動作環境について
|
|
>>softyaさん
調べてみたらタスクマネージャーの機能の一つなんですね。
ありがとうございます、それで調べてみます^^
>>ookamiさん
うぅむ、やはり動作環境については色々と注意が必要な様ですね。
上でsoftyaさんに教えてもらった方法で調べた量に結構盛って書くことにしますw
動作確認済みの環境は満たしていても動かなかった時が怖いので何か当たり障りの無い書き方を探してみますww
色々とありがとうございました。
これでひとまず動作環境についての項目を書くことができそうです^^
また何かわからなかったらその時はよろしくお願いします(_ _)
ありがとうございました!

152ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(31,938ポイント)
Date: 2010/08/26(木) 11:15
No:60144
|
|
Title: Re:ソフトの情報、動作環境について
|
|
>「動作環境」と書くと、「動作を保証する環境」みたいに取る人がいると
動作環境とは動作する環境ですから、動作を保証してもらわなければ困ります。
動作環境が提示する条件を満たしていても、動作するかもね? しないかもね? なんてどこのジョークですか。
ただ、どんなに処理落ちしようが、重すぎてゲームにならなくても、起動出来てエラーなくプレイできたなら、それは動作の範囲だと思っています。
そこで、必要動作環境と、推奨動作環境ってのが出てくるのだと。
165ポイント を落としてしまった。
|
|
|
|
|
Name: へろり ..プログラマー(31,610ポイント)
Date: 2010/08/26(木) 12:08
No:60150
|
|
Title: Re:ソフトの情報、動作環境について
|
|
>「動作保証環境」のページですが、
>「この環境を満たすすべてのパソコンについて、動作を保証するものではありません。」 とあります。
では、この動作保証環境の保証とは何を意味するものでしょうか。
私には動作を保証する環境である。 としか読み取れませんが。
サイトを見る限り上記の環境というのはスペックの事ですよね。 ただし、そのスペックを満たすパソコンであっても一部例外があり、その例外事項についてはその下に記載されている条件も含め満たす必要がありますよ。 という事ではないでしょうか?
だんだん言葉遊びじみてきましたが、動作環境というのは、そのパソコンの物理的なスペックであり、システム的なものといった静的なものであって、使用状況などといった動的な環境は含まれないと思うのですが。
328ポイント を落としてしまった。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(46,664ポイント)
Date: 2010/08/26(木) 12:55
No:60158
|
|
Title: Re:ソフトの情報、動作環境について
|
|
> 使用状況などといった動的な環境は含まれないと思うのですが。
うーん^_^; 含まずして、PC上でのソフトウェアの動作はないわけで...
たぶん、ソフトウェアの「動作保証」に関する
業界標準みたいなものがないんじゃないでしょうか?
もし詳しい方がいらっしゃったら、補足していただけると助かります。
2倍のポイントを手に入れた! 206ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..プログラマー(29,073ポイント)
Date: 2010/08/26(木) 13:07
No:60163
|
|
Title: Re:ソフトの情報、動作環境について
|
|
なんだか色々な意見がありそうな話題みたいなので解決マークを、一度付けましたが外しました。
色々意見を貰えると嬉しいです。よろしくお願いします。
59ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(204,440ポイント)
Date: 2010/08/26(木) 13:25
No:60165
|
|
Title: Re:ソフトの情報、動作環境について
|
|
アマチュアは色々な機器でテスト出来ない以上は自分がテストした環境を書くしかないです。
保証と言う言葉は言いすぎなので、動作確認スペックと推奨スペックと予想できる最低限のスペックを書いて、すべての環境で動作する約束は出来ませんとでもすれば良いでしょう。
PCの様に様々なスペックが存在するもので動作保証する事はゲームソフト販売メーカーでも難しい問題です。
117ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(204,537ポイント)
Date: 2010/08/26(木) 13:30
No:60166
|
|
Title: Re:ソフトの情報、動作環境について
|
|
ちなみに市販のゲームソフトが快適に動かないとサポートに電話すると、大体はゲームプレイに必要のないソフトはゲームプレイ中は止めてくださいと言われます。誰も読まないと思いますが、インストール時とかに出る利用規約にも書かれていると思いますよ。
97ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..プログラマー(29,244ポイント)
Date: 2010/08/26(木) 21:10
No:60215
| 解決!
|
Title: Re:ソフトの情報、動作環境について
|
|
>>softyaさん
色々とありがとうございます。
やはり動作環境の確認などは難しいのですね。
自分でも色々とサイトを見てみたところ、同人サークルの中には動作環境を書いてないところもありましたし(流石に体験版はありましたが)黄昏フロンティアなんかでは、(Me,98では未確認)などの様に、わからないところはしっかりとわからないと書いているところもありました。
なんで上で書いてもらった通り推奨環境を書き、それで動かない可能性があることを明示したうえでサポートとまではいかないかも知れないかもしれないですが質問の掲示板みたいな物を作りたいと思います。
教えて頂きありがとうございました。
171ポイント を手に入れた。
|
|
|
|
|