|
Name: situmon ..上級者(19,055ポイント)
Date: 2009/02/01(日) 22:35
No:28127
|
|
Title: 当たり判定
|
|
シューティングゲームの館のファイルshoot2のShには
当たり判定の画像など一式がそろっています。
ということはシューティングゲームの館でも
正確な当たり判定が作れるのでしょうか?
そもそも当たり判定(敵と自機どちらも)はどのように
できているのかわかりません。他の章は
皆様が紹介してくださった本やサイトを見てわかるようになりました。
arrayさんに聞いたら龍神録プログラミングとは違うので
少し難しいといっていました。龍神録のプログラムはほぼ東方のシステム
がなりたっており、自分のアレンジがどうしてもやりにくいので・・・
157ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(979,078ポイント)
Date: 2009/02/02(月) 03:50
No:28133
|
|
Title: Re:当たり判定
|
|
当たり判定の画像って何でしょう?
シューティングゲームの館に限らず、当たり判定のプログラムを書けば何にでも実装可能だと思います。
後、当たり判定のプログラムには極基本的な程度ですが、数学的な知識が必要です。
situmonさんはかなりお若いとお聞きしましたが、ピタゴラスの定理などはご存知でしょうか?
斜辺の二乗は対辺と底辺の二乗の和に等しいという奴です。
三平方の定理とも言います。
これで、当たり判定を計算します。
詳しくはゲームプログラミングの館にあります。
http://dixq.net/g/#s11
これを見て意味がわかるでしょうか?
解ればこれを実装すればいいと思いますし、解らなければ、調べるか、また聞いて下さい。
227ポイント を手に入れた。
|
|
|
|
|
Name: situmon ..上級者(19,697ポイント)
Date: 2009/02/02(月) 21:51
No:28168
| 解決!
|
Title: Re:当たり判定
|
|
void playerCollisionDetection(){
for(int i=0;i<ENEMY_TOTAL_NUM;i++){//ショットの全列分
for(int j=0;j<ENEMY_TOTAL_SHOT_NUM;j++){//1列全弾分
if(EnemyShot[i].EnemyShots[j].flag==1){//その弾が発射中なら
double x,y;
int range;
int img = 0;
switch(EnemyShot[j].img){
case 0:
case 1:
range=3.0;
break;
case 3:
case 4:
range=3.5;
break;
case 5:
case 6:
range=40.0;
break;
}
x=(int)(EnemyShot[i].EnemyShots[j].x-Player.x);
y=(int)(EnemyShot[i].EnemyShots[j].y-Player.y);
if(x*x+y*y<range*range){
//初期座標に戻す
Player.x=200.0;
Player.y=450.0;
EnemyShot[i].EnemyShots[j].flag=0;
if(CheckSoundMem(sound_enemy_death)==1)
StopSoundMem(sound_enemy_death);
PlaySoundMem(sound_enemy_death,DX_PLAYTYPE_BACK);
}
}
}
}
}
と書いたのですが、渦巻きショットのときにだけエラーが出てしまいます。(if(x*x+y*y<range*range){)です。
追記、
間違えがいろいろあり、直したところ成功し解決いたしました。
ありがとうございます。
595ポイント を手に入れた。
|
|
|
|
Name: 初心者 ..プログラマー(27,525ポイント)
Date: 2009/01/21(水) 18:03
No:27335
|
|
Title: アクションゲーム
|
|
こないだお世話になった初心者です。
僕は今、アクションゲームを作っています。
それで、自キャラにライフを作りたいと思って、以下の文を書きました。
struct Enemy{
int life; //生命力
int temp1; //自由に使える変数
//判定用変数
int hantei; //自由に使える変数
};
const int HANTEI = 3000; //敵と自キャラの判定間隔
int jiki_life; //前の自キャラ生命力
//敵と自キャラの当たり判定
Ball2D m = { g_jikipos, 18 };
g_jiki_life = 2;
while(ProcessMessage == 0 && g_jiki_life > jiki_life){
if ( g_enemies[i].hantei < (GetNowCount() + HANTEI) ){
if (HitTestBallAndBall( b, m ) == TRUE ){
g_jiki_life--;
}
}
}
if (g_jiki_life == 0){
return TRUE;
}
ですが、当たり判定がなくなったり、1回当たったらすぐゲームオーバーになってしまいます。
なぜそうなるか、どこが間違っているかを教えてください。
266ポイント を手に入れた。
|
|
|
|
Name: 通りすがり ..中級者(13,710ポイント)
Date: 2009/01/21(水) 18:15
No:27338
|
|
Title: Re:アクションゲーム
|
|
各関数の内容もわからないし、どういうゲームの仕様かもわからないし、どこを省略してるのかもさっぱりわかりません。
そもそもコンパイルすら出来ません。
67ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(43,853ポイント)
Date: 2009/01/21(水) 18:18
No:27342
|
|
Title: Re:アクションゲーム
|
|
ソースが断片的すぎるので予想になりますが、g_enemies[i].hanteiの更新タイミングがまずいとそんな動きになりそな気はしますが。
62ポイント を手に入れた。
|
|
|
|
|
Name: Mikan [URL] ..入門者(2,861ポイント)
Date: 2009/01/22(木) 22:40
No:27503
|
|
Title: Re:アクションゲーム
|
|
>当たり判定がなくなったり、1回当たったらすぐゲームオーバーになってしまいます。
推測ですが、当り判定を行った後、再度当り判定をしてしまい、
g_jiki_lifeが0以下になってしまって
if (g_jiki_life == 0)
の条件に当てはまらないので当り判定がなくなったようにみえるのではないでしょうか?
また、1回でゲームオーバーになるのも何回も当り判定入ってしまい1回の判定で0になっているのでは?
と思います。
たとえばシューティングゲームで敵がプレイヤーのショットに当たった場合
敵の体力を1マイナスして、再度判定しないようにプレイヤーのショットを消してしたりします。
推測なので参考までに^^
190ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..プログラマー(27,448ポイント)
Date: 2009/01/23(金) 22:09
No:27568
|
|
Title: Re:アクションゲーム
|
|
通りすがりさん、Mistさん、コードが荒くてすいません。
関数は、DXライブラリーを使用しています。
コードは、当たり判定の部分です。
Mikanさん、推測ありがとうございます。
while(ProcessMessage == 0 && g_jiki_life > jiki_life){
の部分がいらないということでしょうか?
きずいたことがあればご教授お願いします。
77ポイント を落としてしまった。
|
|
|
|
|
Name: Mikan [URL] ..入門者(4,406ポイント)
Date: 2009/01/25(日) 19:58
No:27660
|
|
Title: Re:アクションゲーム
|
|
>きずいたことがあればご教授お願いします。
ソースファイルが全部見せていただけるのなら特定できるかと思います。
それとどんなゲームにしたいか考えてることを教えてください^^
ゲームを作ってると沢山難題に出会うでしょうけど、質問したり考えたりしながら
がんばってください^^
94ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..プログラマー(27,585ポイント)
Date: 2009/01/25(日) 21:51
No:27664
|
|
Title: Re:アクションゲーム
|
|
これがゲーム本体の処理です。最初に意味のわからないインクルード文が書いてありますが、とばしてください。CollisionCharacter関数が、当たり判定の関数です。敵の弾と自キャラの当たり判定で、自力でライフを作ることが出来ましたが、敵と自キャラの場合がうまくいきません。
ご教授お願いします。
137ポイント を手に入れた。
|
|
|
|
|
Name: Mikan [URL] ..初心者(5,084ポイント)
Date: 2009/01/26(月) 12:31
No:27694
|
|
Title: Re:アクションゲーム
|
|
CollisionCharacter関数の最初に
if (g_enemies[i].used == TRUE){
Ball2D b = { {g_enemies[i].position.x, g_enemies[i].position.y},
g_enemies[i].hankei
};
ところで敵が使われているかどうかの判定をして衝突判定にはいっているようですが、
このままだと、g_enemies[i].used == FALSEの時にも判定に入ってしまい
前回のBall2D bの値で判定がおこなわれているのでは?とおもいました。
g_enemies[i].used == FALSEの時は衝突判定をしないのが良いのではないでしょうか?
それで一度試してみてください。
193ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..プログラマー(27,532ポイント)
Date: 2009/01/26(月) 22:08
No:27729
|
|
Title: Re:アクションゲーム
|
|
if (g_enemies[i].used == TRUE){
の下に
if (g_enemies[i].used == FALSE) break;
という物を入れてみましたが、ダメでした。
53ポイント を落としてしまった。
|
|
|
|
|
Name: Mikan [URL] ..初心者(5,365ポイント)
Date: 2009/01/26(月) 23:29
No:27732
|
|
Title: Re:アクションゲーム
|
|
ソースファイルとにらめっこしているんですが、色々試せないのですこし混乱気味ですw
なので、参考程度にみてください。
//敵の弾と自キャラの当たり判定
のところで、g_ebullets[i].used衝突後FALSEに戻していないのが気になるのと、
すこし上に似たようなことをしている
//敵と自キャラの当たり判
の中で
g_enemies[i].jiki_life = 3;
としていますが、
//敵の弾と自キャラの当たり判定
ではありませんでした。
参考になれば幸いです。
2倍のポイントを手に入れた! 254ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..プログラマー(27,579ポイント)
Date: 2009/01/29(木) 21:08
No:27951
|
|
Title: Re:アクションゲーム
|
|
このアクションゲームには関係ありませんが、どうしても分からないので、この掲示板を使わせていただきます。
・丸と四角の当たり判定の関数
です。
教えてください。
63ポイント を手に入れた。
|
|
|
|
Name: たか ..入門者(3,241ポイント)
Date: 2009/01/31(土) 21:24
No:28069
|
|
Title: 構造体のポインタについて
|
|
最初に環境を提示しておきます。
C言語暦は半年くらいだと思います。
Windows Vista Home Basic
Visual C++ Express Edition 2008
今、Bitmapファイルを扱うコンソールアプリケーションを作っています。
簡単に説明しますと・・・
ファイルから読み込んだ情報を構造体に格納、そしてその情報を元に画像データを文字列に変換。
のようなプログラムです。
今困っているのは"ファイルから読み込んだ情報を構造体に格納"の部分です。
構造体の中に構造体を入れりてみたりしているうちに"."や"->"が多くなって分からなくなってしまいました。
#define FNAME "256bitmap.bmp"
typedef struct BMPFILEHEADER{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
}BMPFILEHEADER;
typedef struct {
BMPFILEHEADER bf;
BMPINFOHEADER bi;
RGBQUAD rgb[256];
BYTE *ImageData;
} BitmapFile_t;
//Bitmapデータを読み込んで文字列に変換
//戻り値:-1 = 不正 1 = 正常
int Bitmap2Str(BitmapFile_t *bmp){
FILE *fp;
BitmapFile_t *p;
if( !(fp = fopen(FNAME, "rb")) ){ //fp == NULL ならば
printf("ファイルのオープンに失敗。\n");
return -1;
}
p = bmp; //ポインタを扱いやすいように
//BMPFILEHEADER
fread(&p->bf.bfType, sizeof(p->bf.bfType), 1, fp);
}
かなり省略しました。関数は未完成です。
処理自体には問題ないはずですが、構造体とポインタの扱いはこれでいいのでしょうか?
記述していない改行が入ってしまったようです。仕様でしょうか?
370ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(314,196ポイント)
Date: 2009/01/31(土) 22:24
No:28072
|
|
Title: Re:構造体のポインタについて
|
|
>処理自体には問題ないはずですが、構造体とポインタの扱いはこれでいいのでしょうか?
BMPINFOHEADERが何なのか判らないことを除けば、未完という現状では
特に大きな問題はないと思います。
ただ、WindowsSDKの wingdi.hに BMPの構造体がありますので、
それを使えば自前で定義する必要はないかと。
>記述していない改行が入ってしまったようです。仕様でしょうか?
どこに改行が入りましたか?
ちなみに IE以外の環境で <pre>で囲んだ中に、1つ多く改行が入っているところ
だとすれば、一応仕様ということになります。
177ポイント を手に入れた。
|
|
|
|
|
Name: たか ..入門者(3,789ポイント)
Date: 2009/01/31(土) 22:42
No:28074
| 解決!
|
Title: Re:構造体のポインタについて
|
|
>BMPINFOHEADERが何なのか・・・
その他の構造体は見づらくなると思ったので省略していました。
>ただ、WindowsSDKの・・・
ライブラリに頼らずに実装しようとしたので、あえて使いませんでした。
>どこに改行が入りましたか?
具体的に説明しますが、
int a;
int b;
↑をpreタグで囲むと↓こうなるわけです。
他の方々の質問を見る限り仕様だったようですが・・・。
int a;
int b;
省略した構造体です。
typedef struct BMPFILEHEADER{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
}BMPFILEHEADER;
typedef struct BMPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
}BMPINFOHEADER;
typedef struct RGBQUAD{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
}RGBQUAD;
ポインタは扱い方を間違えると何がおきるか分からないので、少し不安でした。
エラーは出なくても重大な問題があるプログラムだったかも!とか思ったりして・・・。
他に問題はないですよね?一応解決にしておきます。
問題があれば指摘してください。
548ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(314,512ポイント)
Date: 2009/01/31(土) 23:42
No:28078
|
|
Title: Re:構造体のポインタについて
|
|
>↑をpreタグで囲むと↓こうなるわけです。
>他の方々の質問を見る限り仕様だったようですが・・・。
一応回避する方法もありますよ。
if( !(fp = fopen(FNAME, "rb")) ){ //fp == NULL ならば
printf("ファイルのオープンに失敗。\n");
return -1;
}
というふうに。
>他に問題はないですよね?
強いて言うなら Bitmap2Str()に戻り値がないとか、freadで読んでいく際のエラー処理がない、とかが
挙げられますが、未完成とのことなのであまり深くは突っ込んでも仕方がないのかな、と。
完成してから改めて質問するのがいいかと思います。
316ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(24,484ポイント)
Date: 2009/02/01(日) 17:57
No:28115
|
|
Title: Re:構造体のポインタについて
|
|
ちょっと気になったのですが構造体の定義の際にパディングが入らないようにpackしてますか
#pragma pack(push, 1)
/* 構造体の定義 */
#pragma pack(pop)
packしないとファイルから構造体に読み込むときや読み込んだファイルを構造体のポインタに割り当てるときにずれてしまいます。
134ポイント を手に入れた。
|
|
|
|
|
Name: たか ..入門者(3,898ポイント)
Date: 2009/02/02(月) 18:54
No:28160
| 解決!
|
Title: Re:構造体のポインタについて
|
|
気付かずに返信遅れてしまいした。
構造体の変数1つづつエラーチェックを行っているのでpackはしていません。
最初はその方法で実装していましたが、不正なBMPだった場合は処理が面倒だったので。
fread(&p->bf.bfType, sizeof(p->bf.bfType), 1, fp);
if( !(p->bf.bfType) == *(WORD)"BM") )
return (-1);
109ポイント を手に入れた。
|
|
|
|
Name: kud ..かけだし(2,044ポイント)
Date: 2009/02/02(月) 00:41
No:28130
|
|
Title: 龍神録プログラミングの館17章
|
|
龍神録プログラミングの館の17章でショット画像が表示されず、原因はわかったのですがどうしてそうなるのか理解できず困っています。
最初のほうの部分に、
---- load.cpp の load()関数に以下を追加 ----
img_cshot[0]=LoadGraph("dat/img/char/bl_00.png");
img_cshot[1]=LoadGraph("dat/img/char/bl_01.png");
sound_se[2]=LoadSoundMem("../dat/se/cshot.wav");
という部分があります。
すでに今までの章までにできていたload関数に追加分を入れて以下のようにしました。
void load(){
img_board[10] = LoadGraph("../dat/img/board/10.png");
img_board[11] = LoadGraph("../dat/img/board/11.png");
img_board[12] = LoadGraph("../dat/img/board/12.png");
img_board[20] = LoadGraph("../dat/img/board/20.png");
img_cshot[0]=LoadGraph("dat/img/char/bl_00.png");
img_cshot[1]=LoadGraph("dat/img/char/bl_01.png");
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
LoadDivGraph( "../dat/img/bullet/b0.png" , 5 , 5 , 1 , 76 , 76 , img_bullet[0] ) ;
LoadDivGraph( "../dat/img/bullet/b1.png" , 6 , 6 , 1 , 22 , 22 , img_bullet[1] ) ;
LoadDivGraph( "../dat/img/bullet/b2.png" , 10 , 10 , 1 , 5 , 120 , img_bullet[2] ) ;
LoadDivGraph( "../dat/img/bullet/b3.png" , 5 , 5 , 1 , 19 , 34 , img_bullet[3] ) ;
LoadDivGraph( "../dat/img/bullet/b4.png" , 10 , 10 , 1 , 38 , 38 , img_bullet[4] ) ;
LoadDivGraph( "../dat/img/bullet/b5.png" , 3 , 3 , 1 , 14 , 16 , img_bullet[5] ) ;
LoadDivGraph( "../dat/img/bullet/b6.png" , 3 , 3 , 1 , 14 , 18 , img_bullet[6] ) ;
LoadDivGraph( "../dat/img/bullet/b7.png" , 9 , 9 , 1 , 16 , 16 , img_bullet[7] ) ;
LoadDivGraph( "../dat/img/bullet/b8.png" , 10 , 10 , 1 , 12 , 18 ,img_bullet[8] ) ;
LoadDivGraph( "../dat/img/bullet/b9.png" , 3 , 3 , 1 , 13 , 19 , img_bullet[9] ) ;
sound_se[0]=LoadSoundMem("../dat/se/enemy_shot.wav");
sound_se[2]=LoadSoundMem("../dat/se/cshot.wav");
}
このように途中に追加すると、ショット画像が表示されませんでした。
そこで、ダウンロードしたcppファイルを参考に以下のように最後に挿入すると、ショット画像が表示されました。
void load(){
img_board[10] = LoadGraph("../dat/img/board/10.png");
img_board[11] = LoadGraph("../dat/img/board/11.png");
img_board[12] = LoadGraph("../dat/img/board/12.png");
img_board[20] = LoadGraph("../dat/img/board/20.png");
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
LoadDivGraph( "../dat/img/bullet/b0.png" , 5 , 5 , 1 , 76 , 76 , img_bullet[0] ) ;
LoadDivGraph( "../dat/img/bullet/b1.png" , 6 , 6 , 1 , 22 , 22 , img_bullet[1] ) ;
LoadDivGraph( "../dat/img/bullet/b2.png" , 10 , 10 , 1 , 5 , 120 , img_bullet[2] ) ;
LoadDivGraph( "../dat/img/bullet/b3.png" , 5 , 5 , 1 , 19 , 34 , img_bullet[3] ) ;
LoadDivGraph( "../dat/img/bullet/b4.png" , 10 , 10 , 1 , 38 , 38 , img_bullet[4] ) ;
LoadDivGraph( "../dat/img/bullet/b5.png" , 3 , 3 , 1 , 14 , 16 , img_bullet[5] ) ;
LoadDivGraph( "../dat/img/bullet/b6.png" , 3 , 3 , 1 , 14 , 18 , img_bullet[6] ) ;
LoadDivGraph( "../dat/img/bullet/b7.png" , 9 , 9 , 1 , 16 , 16 , img_bullet[7] ) ;
LoadDivGraph( "../dat/img/bullet/b8.png" , 10 , 10 , 1 , 12 , 18 ,img_bullet[8] ) ;
LoadDivGraph( "../dat/img/bullet/b9.png" , 3 , 3 , 1 , 13 , 19 , img_bullet[9] ) ;
img_cshot[0]=LoadGraph("../dat/img/char/bl_00.png");
img_cshot[1]=LoadGraph("../dat/img/char/bl_01.png");
sound_se[0]=LoadSoundMem("../dat/se/enemy_shot.wav");
sound_se[2]=LoadSoundMem("../dat/se/cshot.wav");
}
表示されたのはいいのですが、
img_cshot[0]=LoadGraph("dat/img/char/bl_00.png");
img_cshot[1]=LoadGraph("dat/img/char/bl_01.png");
どうしてこの2つをload関数の途中に入れるとダメなのかがわかりません。
Cの知識は、学校で基本的なことを習って、
このサイトのゲームプログラミングの館と龍神録プログラミングの館の17章まで読んでなんとか理解できた程度です。
よろしくお願いいたします。
2,044ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(54,155ポイント)
Date: 2009/02/02(月) 01:15
No:28131
|
|
Title: Re:龍神録プログラミングの館17章
|
|
img_cshot[0]=LoadGraph("dat/img/char/bl_00.png");
を
img_cshot[0]=LoadGraph("../dat/img/char/bl_00.png");
としてもだめですか?
指定した場所に画像がないから表示されないのでは?
53ポイント を手に入れた。
|
|
|
|
|
Name: kud ..かけだし(2,052ポイント)
Date: 2009/02/02(月) 15:04
No:28147
|
|
Title: Re:龍神録プログラミングの館17章
|
|
あぁ本当ですね!全然気づいてなかったです。
こんな簡単なことお尋ねしてすみませんでした。
気をつけます。
8ポイント を手に入れた。
|
|
|
|
Name: みみ ..ぴよぴよ(795ポイント)
Date: 2009/01/31(土) 00:02
No:28001
|
|
Title: mathematicaの友愛数プログラムについて
|
|
1〜1000内にある 友愛数全て表示するにはどのような感じで打ち込めばよいのでしょうか?
友愛数プログラムでC言語はわかるのですが・・・よろしくお願いします
73ポイント を手に入れた。
|
|
|
|
Name: s-rush ..上級者(23,161ポイント)
Date: 2009/01/31(土) 00:24
No:28002
|
|
Title: Re:mathematicaの友愛数プログラムについて
|
|
>友愛数全て表示するにはどのような感じで打ち込めばよいのでしょうか?
というのは1〜1000内から計算で友愛数を求めだして、
その結果を表示する
ということですか?
ちなみに、友愛数って1〜1000の間だと
(220、284)
の一つしか存在しなかったのでは?
違ったらごめんなさい。
60ポイント を手に入れた。
|
|
|
|
|
Name: みみ ..ぴよぴよ(849ポイント)
Date: 2009/01/31(土) 02:00
No:28009
|
|
Title: Re:mathematicaの友愛数プログラムについて
|
|
はい。 友愛数は1000内には1つしかありません;;
それに 結果を表示するための プログラムがわからないということです><
ヘタな日本語ですいません。
54ポイント を手に入れた。
|
|
|
|
|
Name: dic ..中級者(11,282ポイント)
Date: 2009/01/31(土) 02:27
No:28013
|
|
Title: Re:mathematicaの友愛数プログラムについて
|
|
C言語でしたら
printfが使えます
友愛数などというものがこの世に存在するのですね
実におもしろい
53ポイント を落としてしまった。
|
|
|
|
|
Name: toyo ..上級者(24,350ポイント)
Date: 2009/01/31(土) 07:43
No:28019
|
|
Title: Re:mathematicaの友愛数プログラムについて
|
|
Mathematicaでの記述法が知りたいということでしょうか
私は触ったことないのでわかりませんが
43ポイント を手に入れた。
|
|
|
|
|
Name: やそ ..比類無きプログラマー(87,082ポイント)
Date: 2009/01/31(土) 10:43
No:28022
|
|
Title: Re:mathematicaの友愛数プログラムについて
|
|
規約に
●投稿する内容について
「C言語で何かわからない事についての質問」を、主としていますが、規制はありません。C言語関連以外でも自由に何でも質問してください。
とありますので、どのような言語の質問も問題にはなりませんが、
流石に良解答が得られる保証はできません。
mathematica側のサポートや掲示板、コミュなどで聞かれたほうが解答が得られやすいと思います。
友愛数プログラムでC言語はわかるのですが・
ということはC言語では友愛数のプログラムが組めるということでしょうか?
それとも、C言語は少しは齧っているが友愛数のプログラムが組めないので、教えて欲しい。
できればmathematicaのプログラムで・・・
ということなのでしょうか?
C言語であれば、
「表示するには」と質問されているのでそれに対する回答はすでにあがっているとおり、
printfで問題ないと思います。
1から1000まで約数を計算する。
約数の和を計算し変数(構造体でも配列でもなんでも)などで保管する。
次は・・・
もういちど1から1000のループ
保管しておいた約数の和を取り出す。(A)
(A)で示される数に保管されている約数の和を取り出す(B)
現在のループカウンターと(B)を比較して合致していれば友愛数
合致していなければ次のループへ
てな感じで調べればよい?
でも数が大きくなると約数の和が1000を越えそう・・・
その辺はループ内でチェックしてはじけばいいか。
ちゅーか1000を越えるようならそこで打ち切りか?
全部想像(思いつき)で書いているので
この流れで良いかも分かりませんが、
頑張って下さい。
友愛数とか面白そうですね。
654ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..上級者(15,251ポイント)
Date: 2009/01/31(土) 15:21
No:28039
|
|
Title: Re:mathematicaの友愛数プログラムについて
|
|
友愛数ならば(C言語なら)[使用する変数:int sum[1000],i,j]
@1〜1000までの約数の和をそれぞれsum[1000]に代入する
Aiに0を代入する
Bjにsum[i]を代入し、j<1000ならCへ、それ以外はDへ
Ci==sum[j] かつ j==sum[i]ならi,jを表示
Diをインクリメントしi>999ならプログラムを終了、それ以外ならBへ
ですかね?
161ポイント を手に入れた。
|
|
|
|
|
Name: kokosan60 ..中級者(9,135ポイント)
Date: 2009/02/01(日) 23:19
No:28129
|
|
Title: Re:mathematicaの友愛数プログラムについて
|
|
C言語で書いたプログラム
#include <stdio.h>
#define N 10000
int main(void)
{
int i,j;
int sum[N]={0};
for(i=1;i<N;i++){
for(j=1;j<i;j++){
if(i%j==0){
sum[i]+=j;
}
/*計算打ち切り*/
if(sum[i]>=N){
sum[i]=-1;
break;
}
}
}
for(i=1;i<N;i++){
if(sum[i]!=-1&納i]<N){
if(sum[sum[i]]==i&納i]!=i){
printf("友愛数(%d,%d)\n",sum[i],i);
}
}
}
return 0;
}
228ポイント を手に入れた。
|
|
|
|
Name: yamato ..入門者(4,224ポイント)
Date: 2009/02/01(日) 18:44
No:28120
|
|
Title: ゲーム作成について2
|
|
同様に「選択1から選択2-2(level2)」
略
「選択2-1から実行1-1」
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
int White,Yellow,G_Blue;
Yellow = GetColor( 255 , 255 , 0 ) ;
G_Blue = GetColor( 128 , 128 , 128 ) ;
White = GetColor( 255 , 255 , 255 ) ;
DrawBox ( 400 , 200 , 440 , 700 , G_Blue , TRUE ) ;
DrawCircle( 550 , 30 , 30 , Yellow , TRUE) ;
DrawString( 0, 0, "level 1" , White);
int i ;
for(i=0;i<300;i++){
LoadGraphScreen( i , 350 , "char.png" , TRUE );
Sleep(10);
}
int c=0;
White = GetColor( 255 , 255 , 255 ) ;
SetDrawScreen( DX_SCREEN_BACK ) ;
while( 1 ){
ClearDrawScreen();
if(c>=0 && c<256)
SetDrawBright( c , c , c );
if(c>=256 && c<400)
SetDrawBright( 255 , 255 , 255 );
if(c>=400 && c<400+256)
SetDrawBright( 255-(c-400) , 255-(c-400) , 255-(c-400)
DrawBox( 0 , 0 , 640 , 480 , White , TRUE) ;
c++;
if(c==400+256) break;
if( ProcessMessage() == -1 ) break ;
ScreenFlip() ;
}
WaitKey() ;
DxLib_End() ;
return 0 ;
}
同様に「選択2-2から実行1-2」
略
「実行1-1から実行2-1」
#include "DxLib.h"
#define PI 3.1415926
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
DrawString(0,0,"level1",GetColor(255,255,255));
SetFontSize( 80 ) ;
SetFontThickness( 8 ) ;
ChangeFont( "MS 明朝" ) ;
ChangeFontType( DX_FONTTYPE_ANTIALIASING );
DrawString(50,100,"脱獄成功!",GetColor(255,255,0));
SetFontSize( 40 ) ;
SetFontThickness( 1 ) ;
ChangeFont( "HGS創英角ポップ体" ) ;
ChangeFontType( DX_FONTTYPE_ANTIALIASING_EDGE );
DrawString(50,250,"7人脱獄",GetColor(255,255,255));
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
LoadGraphScreen( 0 , 0 , "zu.png" , TRUE ) ;
WaitKey();
DxLib_End();
return 0;
}
同様に「実行1-2から実行2-2」です。
長く拙い文章で誠にすみません。よろしくお願いします。
2倍のポイントを手に入れた! 3,388ポイント を手に入れた。
|
|
|
|
Name: dic ..中級者(11,375ポイント)
Date: 2009/02/01(日) 20:15
No:28122
|
|
Title: Re:ゲーム作成について2
|
|
WinMainはひとつのexeに対し ひとつしか定義できないよ
関数の概念を覚えるといいですね
コンパイルエラーは何てでてるんですか?
プロジェクト(ソリューション)一式アップロードした方が 回答されやすいですよ
63ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(978,740ポイント)
Date: 2009/02/01(日) 20:21
No:28123
|
|
Title: Re:ゲーム作成について2
|
|
まず、いっぺんに沢山作ろうとせず、少しずつ理解できる範囲で作って行った方が良いと思います。
また、同じ質問は同じトピにお願いします。
それから、長いプログラムを作るには関数化の知識が必要です。
C言語入門サイトなどで関数化について勉強して下さい。
関数化がわかれば、ゲームプログラミングの館に「メイン関数の作り方」がかいてあるので、それを参考に作ってもらったら出来ると思います。
137ポイント を手に入れた。
|
|
|
|
|
Name: yamato ..入門者(4,295ポイント)
Date: 2009/02/01(日) 22:45
No:28128
|
|
Title: Re:ゲーム作成について2
|
|
dicさんDixq (管理人) さん迅速な回答ありがとうございます。
管理人さんの言う通り、もうすこし勉強してから取り組んでいきたいと思います。
ありがとうございました。
79ポイント を手に入れた。
|
|
|
|
Name: あい ..ぴよぴよ(140ポイント)
Date: 2009/02/01(日) 16:35
No:28110
|
|
Title: パズルゲーム
|
|
ナンバーリンクの解を求めるプログラムを8×8マスで作ったのですが、3つエラーがあり
実行する事ができません、誤りなどがあればご指摘下さい。
http://www.nikoli.co.jp/ja/puzzles/number_link/ ←ナンバーリンク
D:\デスクトップ\ナンバー\ナンバーリンク.cpp(315) : error C2059: 構文エラー : '<'
D:\デスクトップ\ナンバー\ナンバーリンク.cpp(315) : error C2143: 構文エラー : ';' が '{' の前に必要です。
D:\デスクトップ\ナンバー\ナンバーリンク.cpp(425) : error C2065: 'z' : 定義されていない識別子です。
D:\デスクトップ\ナンバー\ナンバーリンク.cpp(703) : warning C4508: 'main' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。
140ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(978,529ポイント)
Date: 2009/02/01(日) 16:54
No:28112
|
|
Title: Re:パズルゲーム
|
|
エラーが出ている部分をダブルクリックし、または行番号を確認して、
実際にエラーが出ている行に移動し、その部分を修正してください。
セミコロンがないとか、宣言されていない変数zが使われているとかそういうエラーです。
また、main関数に型が書いてないので警告が出ています。
int main(){
ではじめ、メイン関数の終わりに
return 0;
を書いてください。
また、ソースコードが酷く左右幅広いので、字下げをスペース4つかタブなどできちんと統一して行ったほうがよさそうです。
39ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(23,304ポイント)
Date: 2009/02/01(日) 21:22
No:28125
|
|
Title: Re:パズルゲーム
|
|
> ナンバーリンクの解を求めるプログラムを8×8マスで作ったのですが、3つエラーがあり
> 実行する事ができません、誤りなどがあればご指摘下さい。
そのプログラムを誰が作ったのか知りませんが、その方にお尋ねしてはいかがです?
少し見ただけですが、そのプログラムを作った人が、
その程度のコンパイルエラーを解決できないわけないでしょ?
「作った」とあるので、あいさん御自身か、あいさんのグループが作ったみたいに書かれています。
この辺の事情について嘘のない説明があれば、何かアドバイスもできるかもしれません。
150ポイント を手に入れた。
|
|
|
|
Name: waki ..ぴよぴよ(234ポイント)
Date: 2009/02/01(日) 12:36
No:28090
|
|
Title: 正しい円周率1万桁
|
|
[1] 質問文
[1.1] 正しい円周率1万桁を求めるプログラムの高速化をしたいです。
[1.2] 自分で作ったプラグラムが長いのでtxt形式で添付させてもらいます。
[1.3] とくにエラーなどはないのですが、実行すると1分以上かかってしまします。
[1.4] そこで、どうにかして出来る限り早く(できれば数秒で)正しい円周率を出したいのですが、これ以上でどう改善してよいかわかりまん。
[2] 環境
[2.1] OS : Windows
[2.2] コンパイラ名 : gcc
[3] その他
・構造体はまだ習っておらず、C言語を始めてから半年ほどです。
・ライブラリはstdio.hでお願いします。
・補足ですがマチンの公式を用いています。
どうか、よろしくお願いします。
234ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(978,205ポイント)
Date: 2009/02/01(日) 15:46
No:28099
|
|
Title: Re:正しい円周率1万桁
|
|
初めまして、wakiさん。
非常にわかりやすい質問をありがとうございます。
質問の意図・内容はしっかり伝わったのですが、肝心のマチンの公式を知らないので^^;プログラムを見てわかる範囲のみ気づいた効率化出来る箇所を書いておきます。
(マチンの公式による計算式を書いていただける何かレスが付くかもしれませんが・・、式が多いとちょっと大変ですよね)
まず、グローバル変数は宣言と同時に0で初期化されるので、
for(s = 2; s <= MAX-1; s++){
a[s] = 0;
}
このような処理の必要がありません。
また、前に入れたデータを初期化したい時は、memset関数を使うと短くかけていいかもしれません。
後、時間がかかっているのはやはり二重ループの中のようです。
計算量が多いので致し方ない気がしますが、
私が考えられるのは、何度も同じ計算をしている部分があるので、
同じ計算結果になるものは、一旦変数に計算結果を入れ、それを共通して使うようにすれば
計算量が減ると思います。
後、何の助けにもならないかもしれませんが、ただ真っ黒の画面でいつ計算が終わるのか待つのも面倒なので、
こんなもの作ってみました。
http://dixq.net/code/ForWaki1.cpp
これコンパイルしてみて下さい。今どれ位計算が出来ているのか表示されます。
追加下部分は
//ココ
とかいてある行だけなので、確認したい時は「ココ」で検索するなどしてみて下さい。
439ポイント を手に入れた。
|
|
|
|
|
Name: waki ..ぴよぴよ(270ポイント)
Date: 2009/02/01(日) 16:00
No:28103
| 解決!
|
Title: Re:正しい円周率1万桁
|
|
アドバイスありがとうございます。参考にさせてもらいつつ頑張って改良してみます。
このたびはありがとうございました。
36ポイント を手に入れた。
|
|
|
|
|
Name: ibis ..上級者(17,829ポイント)
Date: 2009/02/01(日) 16:06
No:28106
|
|
Title: Re:正しい円周率1万桁
|
|
似た文(特に複文)がいっぱいありますが、まずはインライン関数かマクロを使ってそれをまとめるといいです。
そうすると、関数(又はマクロ)を最適化するだけで、その関数(又はマクロ)を呼んでいる全ての箇所が最適化されますので。
それをせずに全箇所を最適化するのはかなり手間がかかりますからね。
最適化については、例えばこんな感じでしょうか。
・printf関数がいっぱい並んでいるところを、一つのprintf関数だけで済ませる
・同じ計算を2度以上するよりも、計算結果を変数に入れておいて使いまわす(dexqさんもこれを言ってますね。例えばa[j] + b[j] + f[j] の計算を各jに対して3回やってます。)
・ループ条件を出来る限り0との比較にする(例えばj >= 1; を j; にできます。)
ポインタ演算を使えば、ループ条件を全て0との比較にできて、配列のアドレス計算も速くなります。
280ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(23,154ポイント)
Date: 2009/02/01(日) 21:09
No:28124
|
|
Title: Re:正しい円周率1万桁
|
|
2年前に1億桁に挑戦しましたが、100万桁に12時間かかり、それ以上縮まなかったのでやる気がなくなりました。
その時の記録は1万桁だと3.594秒。1万桁だけがターゲットならばもっと速くできる可能性はあると思いますが。
さて最適化についてですが、まずGetTickCount()などで時間を計りましょう。
色々試行錯誤することになりますが、予想に反して遅くなることもあります。
その時に時間で判断して、変更前に戻すためです。思い込みで最適化したつもりにせず、
正しく計測して結果を受け止めましょう。
次に配列の使い方ですが、配列の1つの要素に1桁分の数字を使っているようですね。
1つの要素に5桁分の数字を使うように変更するれば、計算の量も約1/5になります。
ここを、もう少し分かりやすい例で説明します。
時分秒の加減算のプログラムを作ることを考えてください。
int h, m, s; // h:m:s で時刻を表す方法
int h1, h2, m1, m2, s1, s2 // h1h2:m1m2:s1s2 のように、時分秒の1の位と10の位を分ける方法
両者の間には、h = h1 * 10 + h2 が成り立ちます。
前者と後者はどちらを選ぶかは場合によりますが、通常は前者でしょう。
使う変数の数も少ないですが、計算の量も少なくなります。
小数を5桁毎の多倍長で表すと、次のようなものになります。
int pi[2001]; // 2001 = 1 + 10000 / 5ですが、実際は余裕を持って定義してください。
pi[0] = 3
pi[1] = 14159
pi[2] = 26535
...
時刻の計算は60進数でしたが、5桁の多倍長は100000進数として考えます。
この変更と、既に指摘されている関数化を進めれば、プログラムは大分見やすくなり、
さらなる改善点も見つかりやすいでしょう。
644ポイント を手に入れた。
|
|
|
|
Name: yamato ..ぴよぴよ(836ポイント)
Date: 2009/02/01(日) 18:43
No:28119
|
|
Title: ゲーム作成について
|
|
はじめましてyamatoと言います。C言語知識は、初心者レベルです。
よろしくお願いします。
今回初めてC言語でゲーム作成を行っており、まずゲームプログラミングの館を
参考にし、使う画像を作成したのですが、一つのプログラムにする方法がわからず作業が止まっています。
if文などを使い、試行錯誤したのですがわかりませんでした。繋げたいプログラムを以下に書かせていただきます。
ご指導ご鞭撻のほどよろしくお願いします。
「表紙」
#include "DxLib.h"
#define PI 3.1415926
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
DrawString(0,0,"a",GetColor(255,255,255));
SetFontSize( 45 ) ;
SetFontThickness( 8 ) ;
ChangeFont( "HGS創英角ポップ体" ) ;
ChangeFontType( DX_FONTTYPE_ANTIALIASING );
DrawString(50,180,"b",GetColor(255,255,255));
SetFontSize( 30 ) ;
SetFontThickness( 1 ) ;
ChangeFont( "HGS創英角ポップ体" ) ;
ChangeFontType( DX_FONTTYPE_ANTIALIASING_EDGE
DrawString(50,230," 〜c〜",GetColor(255,255,255));
SetFontSize( 20 ) ;
SetFontThickness( 1 ) ;
ChangeFont( "MS 明朝" ) ;
ChangeFontType( DX_FONTTYPE_ANTIALIASING_EDGE
DrawString(130,430," d",GetColor(255,255,255));
WaitKey();
DxLib_End();
return 0;
}
「選択画面1」
#include "DxLib.h"
int GetHitKeyStateAll_2(int KeyStateBuf[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
else KeyStateBuf[i]=0;
}
return 0;
}
void char_disp(int White,int y){
DrawString( 150 , y , "■" , White );
DrawString( 170 , 250 , "level1 障壁一つ" , White );
DrawString( 170 , 270 , "level2 障壁二つ" , White );
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int Key[256];
int White , y=250;
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;
PlayMusic( "ドラ.wav" , DX_PLAYTYPE_BACK ) ;
White = GetColor( 255 , 255 , 255 ) ;
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
char_disp(White,y);
if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){
y+=20;
if(y==290)
y=250;
}
ScreenFlip();
}
DxLib_End();
return 0;
}
「選択1から選択2-1(level1)へ」
#include "DxLib.h"
int GetHitKeyStateAll_2(int KeyStateBuf[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
else KeyStateBuf[i]=0;
}
return 0;
}
void char_disp(int White,int y){
DrawString( 170 , 120 , "x" , White );
DrawString( 150 , y , "■" , White );
DrawString( 170 , 140 , "0.125" , White );
DrawString( 170 , 160 , "0.72" , White );
DrawString( 170 , 180 , "1.445" , White );
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int Key[256];
int White , y=140;
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;
White = GetColor( 255 , 255 , 255 ) ;
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
char_disp(White,y);
if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){
y+=20;
if(y==200)
y=140;
}
ScreenFlip();
}
DxLib_End();
return 0;
}
ゲーム作成2に続く
836ポイント を手に入れた。
|
|
|
|
Name: yamato ..入門者(4,216ポイント)
Date: 2009/02/01(日) 18:46
No:28121
|
|
Title: ゲーム作成について
|
|
環境は、
Windows Xp
Visual C++ Express Edition 2008 です。
8ポイント を落としてしまった。
|
|
|
|
Name: nagato ..ぴよぴよ(50ポイント)
Date: 2009/02/01(日) 15:21
No:28096
|
|
Title: 〜入門編〜の11.について
|
|
Z、X、スペースを同時押しで終了のソースをコピペして実行しましたが.....
Z、X、スペース では何も起こりませんでしたが
Z、C、スペース では成功しました
X以外のアルファベットで、適当に試しましたが
いずれも成功しました
なぜXでは失敗するんでしょうか?
C言語の知識は、初心者の本を一冊読んだ程度です
C++の知識はありません
環境は、WINDOWS vista visual c++ 2008 express edition
です。
50ポイント を手に入れた。
|
|
|
|
Name: BEMANI ..中級者(13,920ポイント)
Date: 2009/02/01(日) 15:30
No:28097
|
|
Title: Re:〜入門編〜の11.について
|
|
>>nagatoさん
>Z、X、スペースを同時押しで終了のソースをコピペして実行しましたが.....
とあるのですが、なぜ
X以外のアルファベットで、試すとうまくいくのでしょう・・・。
プログラムが間違っていなければ、X以外のアルファベットでは対応しないはずです。
組んだプログラムが間違っていないかを確認してみて下さい。
もし、間違っていないのであれば、
「Z X スペース」の同時押しが利かないキーボードを使っている・・・とかですかね〜;
思いついた感じでそんな所です。
124ポイント を手に入れた。
|
|
|
|
|
Name: nagato ..ぴよぴよ(108ポイント)
Date: 2009/02/01(日) 15:39
No:28098
|
|
Title: Re:〜入門編〜の11.について
|
|
回答ありがとうございます
ソースを、X以外のアルファベットに書き換えてして試したということです
Z、X、スペース の同時押しが利かないキーボードとかあるんですか?
PCはそんなに詳しくないので....
58ポイント を手に入れた。
|
|
|
|
|
Name: nagato ..ぴよぴよ(135ポイント)
Date: 2009/02/01(日) 16:00
No:28102
| 解決!
|
Title: Re:〜入門編〜の11.について
|
|
回答ありがとうございます
なるほど、やはりその可能性が高いようですね。
27ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..中級者(14,022ポイント)
Date: 2009/02/01(日) 16:24
No:28108
|
|
Title: Re:〜入門編〜の11.について
|
|
>>nagatoさん
もし、違うパソコンがあるのでしたら
そちらでも動かしてみてはいかがでしょうか?
ttp://www.geocities.jp/dvdmvoid/KeyCheck.swf
一応軽いサンプルではありますが、FLASHで作ってみました。
ZXスペース が押されているかをチェックするものです。
102ポイント を手に入れた。
|
|
|
|
|
Name: yu ..初心者(8,847ポイント)
Date: 2009/02/01(日) 15:17
No:28093
|
|
Title: Re:一定時間画像を表示させる
|
|
もう少し詳しく書いていただけないと、
こちらとしては何を具体的に教えればよいのかわかりません;
画像を一定時間表示だけならですが、
簡単なのはstatic変数、グローバル変数等を用意し、カウンタにしてやればよいと思いますよ。
この間だけ表示とか、チカチカさせたりできます。
static int cnt;
if(cnt<100){//カウンタが100以下なら
/*グラフィック描画*/
}
cnt++;//カウントアップ
168ポイント を手に入れた。
|
|
|
|
Name: 糖 ..ぴよぴよ(515ポイント)
Date: 2009/02/01(日) 11:15
No:28087
|
|
Title: GetColorが失敗?
|
|
はじめまして、糖と申します。
過去ログを検索しましたが同じような事象が見当たらなかったため、質問させていただきます。
マルチになってしまいましたら申し訳ありません。
趣味でゲームを作成しようとしているのですが、
DrawString関数などを使うたびに色コードを取得する手間を省こうと考えています。
そこで下記のようにコードを記述しました。
【head.h】
#include "DxLib.h"
//色の設定
const int WHITE = GetColor(255, 255, 255);
【main.cpp】
#include "head.h"
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
//ウィンドウモードの切り替え
ChangeWindowMode (TRUE);
//DXライブラリの初期化
if (DxLib_Init() == -1) return (-1);
//描画スクリーンを裏に設定
SetDrawScreen( DX_SCREEN_BACK );
while (ProcessMessage() == 0 && CheckHitKey ( KEY_INPUT_ESCAPE ) == 0 )
{
ClsDrawScreen();
//文字列を白で描画
DrawString(5, 5, "テストメッセージ", WHITE);
ScreenFlip();
}
DxLib_End(); //DXライブラリの終了処理
return (0);
}
このプログラムを実行しますと文字色が「白」で表示されず、「黒」で表示されてしまいます。
一応確認してみましたところ、変数WHITEの中身は「0」となっていました。
DrawString関数の直前でヘッダファイルの中身と同じ記述をすると文字列は「白」で表示されます。
なぜ変数WHITEの中身が「0」になってしまうのかわかりません。
ヘッダファイルで宣言している変数WHITEは定数にならないのでしょうか?
C言語、C++言語の基礎は理解しているつもりなのですが…
どなたかご教授お願いします。
515ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(144,299ポイント)
Date: 2009/02/01(日) 11:21
No:28088
|
|
Title: Re:GetColorが失敗?
|
|
たしか、DXライブラリの関数は、DxLib_Init関数を実行した後でないと使用できないはずですよ(^_^;)
49ポイント を手に入れた。
|
|
|
|
|
Name: 糖 ..ぴよぴよ(535ポイント)
Date: 2009/02/01(日) 12:12
No:28089
| 解決!
|
Title: Re:GetColorが失敗?
|
|
バグさん>
「DXライブラリ置き場」の使い方の説明を読んでみましたところ、
バグさんの仰る通り"DXライブラリの関数を使用するためにDxLib_Init関数を呼び出す"との記述がありました。
DXライブラリを使う上で基本的というかそれ以前の問題でした…
こんな質問に答えてくださってありがとうございました!!
20ポイント を手に入れた。
|
|
|
|
Name: スライク ..かけだし(1,470ポイント)
Date: 2009/01/31(土) 18:59
No:28057
|
|
Title: sprintf関数について
|
|
またお世話になります。
下なんですがコンパイルしてもエラーが出てよくわかりません。
本とおりにやったのですが・・・・よろしくお願いします。
#include<stdio.h>
#include<string.h>
int main()
{
char buffer[128],name[32];
int age;
double bl,bw;
while (1){
printf(氏名----);
gets(name);
if(!strcmp(name,)){
printf(氏名が記入さていません\n);
continue;
}
break;
}
while(1)
printf(年齢----);
scanf(%d,&age);
if(age<0 || age>150){
printf(年齢が不適切です\n);
continue;
}
break;
}
while (1){
printf(身長(cm)---);
scanf(%lf,&bl);
if(bl<0.0 || bl>250.0){
printf(身長の値が不適切です\n);
continue;
}
break;
}
while (1){
printf(体重(kg)---);
scanf(%lf,&bw);
if(bw<0.0 || bw>200.0){
printf(体重の値が不適切です\n);
continue;
}
break;
}
sprintf(buffer,
\n%sさん(年齢は%d歳)のプロフィール\n
身長は%5.1fcm、体重%5.1fkgで、BMIは%4.1fです\n,
name,age,bl,bw,bw*10000.0/(bl*bl));
printf(buffer);
return 0;
}
585ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(134,018ポイント)
Date: 2009/01/31(土) 19:10
No:28058
|
|
Title: Re:sprintf関数について
|
|
> 下なんですがコンパイルしてもエラーが出てよくわかりません。
エラーメッセージの全文を載せてください。
「エラーが出ます」だけでは不十分です。
42ポイント を手に入れた。
|
|
|
|
|
Name: スライク ..入門者(3,568ポイント)
Date: 2009/01/31(土) 19:23
No:28061
|
|
Title: Re:sprintf関数について
|
|
見ずらいですがこれでいいんでしょうか?
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(12) : warning C4996: 'gets': This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(279) : 'gets' の宣言を確認してください。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(21) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 'scanf' の宣言を確認してください。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(24) : error C2044: 'continue' が正しくありません。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(26) : error C2043: 'break' が正しくありません。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(28) : error C2059: 構文エラー : 'while'
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(28) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(28) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(37) : error C2059: 構文エラー : 'while'
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(37) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(37) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(46) : error C2065: 'buffer' : 定義されていない識別子です。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(49) : error C2065: 'name' : 定義されていない識別子です。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(49) : error C2065: 'age' : 定義されていない識別子です。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(49) : error C2065: 'bl' : 定義されていない識別子です。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(49) : error C2065: 'bw' : 定義されていない識別子です。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(49) : error C2065: 'bw' : 定義されていない識別子です。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(49) : error C2065: 'bl' : 定義されていない識別子です。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(49) : error C2065: 'bl' : 定義されていない識別子です。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(49) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(49) : error C2365: 'sprintf' : 再定義; 以前の定義は '関数' でした。
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : 'sprintf' の宣言を確認してください。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(49) : error C2078: 初期化子の数が多すぎます。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(50) : error C2065: 'buffer' : 定義されていない識別子です。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(50) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(50) : error C2365: 'printf' : 再定義; 以前の定義は '関数' でした。
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(287) : 'printf' の宣言を確認してください。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(52) : error C2059: 構文エラー : 'return'
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(53) : error C2059: 構文エラー : '}'
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(53) : error C2143: 構文エラー : ';' が '}' の前にありません。
1>c:\documents and settings\ゆう\my documents\visual studio 2008\projects\syana\syana\syana.cpp(53) : error C2059: 構文エラー : '}'
1>ビルドログは "file://c:\Documents and Settings\ゆう\My Documents\Visual Studio 2008\Projects\syana\syana\Debug\BuildLog.htm" に保存されました。
1>syana - エラー 26、警告 2
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
2,098ポイント を手に入れた。
|
|
|
|
|
Name: スライク ..入門者(3,591ポイント)
Date: 2009/01/31(土) 19:27
No:28062
| 解決!
|
Title: Re:sprintf関数について
|
|
お騒がせしました。
{}の位置を直した所無事できました。
ありがとうございます!
23ポイント を手に入れた。
|
|
|
|
Name: ひよこ ..中級者(10,203ポイント)
Date: 2009/01/31(土) 11:48
No:28026
|
|
Title: Dixqさんサンプルですが
|
|
Dixqさんサンプルですがマリオっぽいができたので、レベル低いです。とても
あとこの掲示板を見ている人にどう思ってもらえるか・・と思ったので公開しちゃいます。
Zipのなかには絵が2枚、効果音1個、マリオっぽいのプロジェクトとソースが入っています。
DXライブラリのVisualC++用のサンプルプログラムのフォルダで実行してください。
感想、ご意見待ってます。
154ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(53,865ポイント)
Date: 2009/01/31(土) 12:25
No:28027
|
|
Title: Re:Dixqさんサンプルですが
|
|
公開の際には、Releseで作成された実行ファイルを入れておいたほうが
親切かと思います。
全体の書き方ですが・・・
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
がステージごとに書かれていて
このままだとステージが増えるとものすごい管理が面倒になりそうです。
この記述は一つにして、ステージを分割していったほうがいいかと。
ステージを直接コードに書くのもよし、外部ファイルから読み込むのもよし
っと思います。
あとは敵判定をつけることですかね^^;
思いっきり上から踏みつけようとして死んだ・・・orz
上からはやっつけれるってのはマリオでは結構重要だと思うのですが・・・。
でもゲームとしてなりたていました!
制作お疲れ様です!
この拡張版に期待してます!
200ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..中級者(10,247ポイント)
Date: 2009/01/31(土) 13:04
No:28030
|
|
Title: Re:Dixqさんサンプルですが
|
|
遊んでくださりありがとうございます。
あとで拡張版を作ってみたいと思います。
あと、まだまだ感想・ご意見お待ちしております。
44ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(976,923ポイント)
Date: 2009/01/31(土) 13:19
No:28031
|
|
Title: Re:Dixqさんサンプルですが
|
|
遊んでみました。制作お疲れ様です。
ゲームとして出来かけていますね。
今が楽しい時期だと思います。
ソースコードについてですが、まずは、キレイに書く必要がありそうです。
最初のうちは効率よく書いたり、関数にわけたりするのが難しいかもしれませんが、
・字下げをきちんとする。
・括弧の対応を解り易いように書く
などは出来ると思います。
自分が読むのに苦労もするでしょうし、バグの元にもなりますし、
公開するなら、人が読みやすいコードにする必要があると思います。
VC++で書いているのならちゃんと字下げしながら改行して書いていけば自動的に字下げされます。
字下げが出来ていない部分はタブキーでそろえましょう。
また、
・ProcessMessage()
・ClearDrawScreen()
・GetHitKeyStateAll()
・ScreenFlip()
これらの関数は最初のうちは一度しか書かないでおきましょう。
プログラムコード全体で、どこかに2度書いてる部分があれば、それは非効率プログラムになっている証拠です。
慣れてきて、それを理解した上で重複させるのはありだと思いますが、
とにかく似たようなコードをコピペを繰り返すと無駄に長く読みにくいコードになりがちです。
後、全部一つの関数に処理が入っているのも気になるので、
もしステージを増やしたりしていくなら、是非自作関数についての知識をつけて下さい。
#include <stdio.h>
void show(){
printf("func");
}
int main(){
show();
}
この意味はわかるでしょうか?
機能別に処理を分けて関数を作ることで、ソースコードの可読性も上がりますし、
似たようなコードを使いまわせるようになります。
・・・ということで、
・ソースコードの字下げをきちんとする
・括弧の対応を解りやすく書く
・2度以上呼ぶべきではないコードを2度以上書かずに処理できるように工夫する
・処理を機能別に関数わけする。
この辺を挑戦してみるとグッとレベルアップ出来ると思います。
後、現在Aボタン押しながら右を押しっぱなしにすると、段差に落ちないようです。
567ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..中級者(10,331ポイント)
Date: 2009/01/31(土) 17:23
No:28045
|
|
Title: Re:Dixqさんサンプルですが
|
|
自作関数ですか、void ○○{処理}でint main()でメインの部分で{○○;}で使うんですか?
main()はint WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )と同じと考えていいでしょうか?
84ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..中級者(10,363ポイント)
Date: 2009/01/31(土) 17:36
No:28048
|
|
Title: Re:Dixqさんサンプルですが
|
|
関数の基礎にいろいろ書いてありましたがintとvoidはどうちがうのでしょうか
32ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..中級者(13,449ポイント)
Date: 2009/01/31(土) 18:26
No:28053
|
|
Title: Re:Dixqさんサンプルですが
|
|
さっそく自作関数を作って1面を作ってみたのですがデバッグがうまくいきません。
ソースですが
// マリオっぽい
#include "DxLib.h"
int PlayerX , PlayerY ;
int JumpPower ;
int PlayerGraph ;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE);
if (DxLib_Init() == -1) return -1;
char Key[256];
SetGraphMode( 640,480,16 ) ;
// 描画先画面を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK ) ;
// グラフィックのロード
PlayerGraph = LoadGraph( "star1.bmp" ) ;
// キャラクターの初期データをセット
PlayerX = 0 ;
PlayerY = 0 ;
JumpPower = 0 ;
int White;
White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
int Sound;
Sound= LoadSoundMem("test.wav");
void Draw(){
DrawGraph( PlayerX , PlayerY , PlayerGraph , TRUE ) ;// プレイヤーを描画する
DrawBox (0, 384 , 200 , 480 , White , TRUE ) ;
DrawBox (259,384 , 640 , 480 , White , TRUE ) ;
DrawLine (350,300 , 450 , 0 , White ) ;
DrawLine (450,0 , 550 , 300 , White ) ;
DrawLine (350,300 , 550 , 300 , White ) ;
DrawLine (450,300 , 350 , 384 , White ) ;
DrawLine (450,300 , 550 , 384 , White ) ;
DrawLine (600,0,600,480,White ) ;
}
//1面
//****************************************************************************************************************//
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
{
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない
if (Key[KEY_INPUT_UP]== 1) PlayerY -= 2; // 上を押していたら上に進む
if (Key[KEY_INPUT_DOWN]== 1) PlayerY += 2 ; // 下を押していたら下に進む
if (Key[KEY_INPUT_RIGHT]== 1) PlayerX += 2 ; // 右を押していたら右に進む
if (Key[KEY_INPUT_LEFT]== 1) PlayerX -= 2 ; // 左を押していたら左に進む
PlayerY -= JumpPower ;// 落下処理
JumpPower -= 1;// 落下加速度を加える
//左に行きすぎないように{
if( PlayerX < 0 )
{
PlayerX = 0 ;
}
//ひだりに行きすぎないように}
//次の面へ{
if( PlayerX > 600 ){
if(CheckSoundMem(Sound)==0) //現在ショット音が再生されていなければ
PlaySoundMem(Sound,DX_PLAYTYPE_BACK); //test.wavのバックグラウンド演奏
break;
}
//次の面へ}
if( PlayerX > 610 )
{
PlayerX = 610 ;
}
// もし地面についていたら止まる
if( PlayerY > 355 )
{
PlayerY = 355 ;
JumpPower = 0 ;
}
//落下ゾーン//*******************************************************************************//
if (200<= PlayerX && PlayerX<240 && PlayerY==355 ) {
//PlayerYの値
for(PlayerY=355; PlayerY<=470;PlayerY+= 5)
{
ClearDrawScreen();
if( ProcessMessage() == -1 ) break ;//エラーが起きたら終了
DrawBox ( 0 , 384 , 200 , 480 , White , TRUE ) ;
DrawBox ( 259, 384 , 640 , 480 , White , TRUE ) ;
DrawLine ( 350 , 300 , 450 , 0 , White ) ;
DrawLine ( 450 , 0 , 550 , 300 , White ) ;
DrawLine ( 350 , 300 , 550 , 300 , White ) ;
DrawLine ( 450 , 300 , 350 , 384 , White ) ;
DrawLine ( 450 , 300 , 550 , 384 , White ) ;
DrawLine ( 600 , 0 , 600 , 480 , White ) ;
DrawGraph( PlayerX , PlayerY , PlayerGraph , TRUE ) ;// プレイヤーを描画する
ScreenFlip() ; // 裏画面データを表画面へ反映
}
//PlayerYの値
//ゲームオーバ
if(PlayerY=475){
if(CheckSoundMem(Sound)==0) //現在ショット音が再生されていなければ
PlaySoundMem(Sound,DX_PLAYTYPE_BACK); //test.wavのバックグラウンド演奏
PlayerX=0; PlayerY=355;}
//ゲームオーバ
}
//落下ゾーン*************************************************************************************//
// ジャンプボタンを押していて、地面についていたらジャンプ
if ((Key[KEY_INPUT_A]==1) && PlayerY == 355 ) JumpPower = 20 ;
Draw();
ClearDrawScreen() ;// 画面を初期化する
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
}
//*********************************************************************************************************//
//1面
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
でエラーが
1>------ ビルド開始: プロジェクト: mario, 構成: Debug Win32 ------
1>コンパイルしています...
1>marioppoi.cpp
1>c:\program files\microsoft platform sdk\include\mmreg.h : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
1>c:\users\マリオっぽい改良\marioppoi.cpp(29) : error C2601: 'Draw' : ローカル関数の定義が正しくありません。
1> c:\users\マリオっぽい改良\marioppoi.cpp(7): この行は '{' を含んでいますが、これに対応するものがありません。
1>c:\users\マリオっぽい改良\marioppoi.cpp(31) : error C2065: 'White' : 定義されていない識別子です。
1>ビルドログは "file://c:\Users\マリオっぽい改良\Debug\BuildLog.htm" に保存されました。
1>mario - エラー 2、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
2倍のポイントを手に入れた! 3,086ポイント を手に入れた。
|
|
|
|
|
Name: やそ ..比類無きプログラマー(87,277ポイント)
Date: 2009/01/31(土) 20:40
No:28065
|
|
Title: Re:Dixqさんサンプルですが
|
|
エラーメッセージにあるとおりです。
kazuoniさんも言われていますが、まずは字下げを整理して{ }がきちんと対応しているか確認してください。
また、
void Draw()
を自作しておりますが、宣言はしましたか?関数を各場所はそこでいいですか?
またDraw()内でWhiteを使用してますが、宣言がありませんよ。
そのあたりを確認してみてください。
164ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(977,444ポイント)
Date: 2009/01/31(土) 23:42
No:28079
|
|
Title: Re:Dixqさんサンプルですが
|
|
関数は関数の中に書くんじゃなく、外に書きます。
まずは基本的な関数をリンク先を参考に作ってみてはどうでしょう?
コンソール画面でいいので、基本的な書き方がしっかり出来るようになってから、
ゲーム制作に適用してやった方がわかりやすいのでは無いかと思います。
後、字下げはきちんと出来ていますか?
ここの掲示板はタブスペースがスペース4つと同じ大きさで表示されるので、
タブスペースをスペース4つで置換して、ずれがないか確認してから投稿すると、
ずれなく投稿することが出来ます。
207ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..中級者(13,533ポイント)
Date: 2009/02/01(日) 00:29
No:28085
| 解決!
|
Title: Re:Dixqさんサンプルですが
|
|
ごめんなさい。解決押し忘れました。
2倍のポイントを手に入れた! 26ポイント を手に入れた。
|
|
|
|
Name: おっちょ ..ぴよぴよ(961ポイント)
Date: 2009/01/31(土) 20:34
No:28064
|
|
Title: 実行ファイル単体で起動する場合
|
|
こんばんは。
初めて投稿させていただきます。
フリーソフトとして配布されている物の多くは
実行ファイル単体で動くようなシンプルな構成になっていると思います。
私、Vista、VC++ 2008 EEを開発環境としておりますが、
ビルドし、出来た実行ファイルをそのまま
別のPC(ランタイムなど何も入っていないPC)で実行するとエラーが返されます。
そこで、調べてみるとランタイムライブラリをスタティックにリンクすればいいとのことで、
赤坂玲音著のWindowsゲームプログラミングのサンプルソースを使用し、その方法を試してみました。
具体的には「プロジェクト」-「プロパティ」-「構成プロパティ」-「C/C++」-
「コード生成」-「ランタイムライブラリ」の内容をdllのついていないものにする、です。
すると
mt.exe : general error c101008a: Failed to save the updated manifest to the file ".\Debug\10_6.exe.embed.manifest". Qia|?LUcfD~Y
とエラーが表示されました。
これは一時的な解決策として埋め込みマニュフェストをOFFにすることで対処しました。
そして出来た実行ファイルを確認すると、容量が増えていました。
これは実行ファイルで使用するライブラリ等を埋め込んでいるからと認識しております。
しかし、そうして出来た実行ファイルはサンプル用の実行ファイルよりもさらに巨大なものになっておりました。
参考:静的リンクを行う前の実行ファイルサイズ 約30kByte
赤坂玲音さんが作成された実行ファイルサイズ 約40kByte
調べた方法で静的リンクを行った後の実行ファイルサイズ 約450kByte
そこで、質問なんですが、赤坂玲音さんが作成された物のようにどのPCでも単体で動作する実行ファイルで
それなりにファイルサイズを抑えるにはどうしたらいいのでしょうか。
私は、これは必要最低限のリンクを行っているからこれだけサイズの小さいものが出来ていると
思っているのですが、どうでしょうか?
もしそうだとすれば、その必要最低限のリンクを行う方法を教えていただきたいです。
さらに、マニュフェストファイルの件で、
一時的な解決策ではマニュフェストファイルは外部に作成されてしまいますので
根本的な解決法(実行ファイルに埋め込む)を教えていただきたいです。
勝手な認識をしている部分があるかもしれませんので、誤りがあればご指摘ください。
961ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(313,864ポイント)
Date: 2009/01/31(土) 21:20
No:28068
|
|
Title: Re:実行ファイル単体で起動する場合
|
|
>とエラーが表示されました
>根本的な解決法(実行ファイルに埋め込む)を教えていただきたいです
時々見かけますね、このエラー。
でも、SP1を適用した PCの方では見かけたことがないので、ひょっとすると
SP1を適用すると直るのかもしれません。
ちなみにこのエラーって、再度ビルドしたらエラーが出なくなったりしませんか?
>そして出来た実行ファイルを確認すると、容量が増えていました
参考にある3つの例は、全て同じコードから生成されたものですか?
もしそうであるならば、ちゃんとリリースでビルドしていますか?
(つまり、リリース用の CRTをリンクし、最適化をかけているかどうか)
235ポイント を手に入れた。
|
|
|
|
|
Name: おっちょ ..かけだし(1,137ポイント)
Date: 2009/01/31(土) 22:34
No:28073
| 解決!
|
Title: Re:実行ファイル単体で起動する場合
|
|
>ちゃんとリリースでビルドしていますか?
リリース用のビルドがあったのですね。
ずっとデバッグでビルドしておりました。
リリースでビルドするとマニュフェストファイルの問題も発生しませんでした。
さらにリリース用にビルドして出来た実行ファイルは別のPCでも実行できました。
私がやりたかったことです。
大変助かりました。ありがとうございます。
176ポイント を手に入れた。
|
|
|
|
Name: ☆わんころ☆ ..ぴよぴよ(98ポイント)
Date: 2009/01/31(土) 17:40
No:28049
|
|
Title: SetUseDirectDrawFlag()関数
|
|
初めまして、プログラミング初心者のわんころといいます。
C言語を少しずつ勉強していた所、極々最近こちらを見つけ、勉強させていただいてます。
入門編の0からやっていたんですが、いきなり躓きました(汗
VC++の設定&コードの入力まで行い、いざ実行してみると画面になにも表示されない。。
色々調べてみた結果、「SetUseDirectDrawFlag(FALSE);」の一文を入れるときちんと表示されるようになりました。
そこで質問です。
SetUseDirectDrawFlag()関数というのは、DirectDrawを使うか使わないかを決めるものだと知ったんですが、このDirectDrawを使わないとすると、どうしてきちんと表示されるようになるんでしょうか?
(DirectXのバージョンとかが関係するんでしょうか?ちなみに自分のは9.0cです。)
調べてもよく分からなかった(DXライブラリの所でも質問したんですが回答がありませんでした)ので、ヒントでもなんでもいいです。
教えていただけないでしょうか、よろしくお願い致しますm(_ _)m
98ポイント を手に入れた。
|
|
|
|
Name: ☆わんころ☆ ..ぴよぴよ(121ポイント)
Date: 2009/01/31(土) 21:19
No:28067
|
|
Title: Re:SetUseDirectDrawFlag()関数
|
|
自分の環境書いてませんでした、すいません(汗
OSはWinXP_professional(SP3)32bit版で、VC++2008EEを使ってます。(borlandの方も使えますが、症状は同じです)
CPU:Intel(R) Core(TM)2 CPU 6300
ビデオカード:NVIDIA GeForce 7600 GT
メモリ:4GB(実際は6GB)
このくらいでよろしいでしょうか?
引き続きよろしくお願いします。
23ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(314,019ポイント)
Date: 2009/01/31(土) 21:34
No:28070
|
|
Title: Re:SetUseDirectDrawFlag()関数
|
|
>このDirectDrawを使わないとすると、どうしてきちんと表示されるようになるんでしょうか?
使わない場合、極力 GPUの機能を使わないで CPUだけで処理を行う為です。
多分、グラフィックスドライバーに問題があるか、GPUの性能が低いかの
どちらかではないでしょうか。
>DXライブラリの所でも質問したんですが回答がありませんでした)
回答がないって、まだ24時間も経ってないようですが……。
155ポイント を手に入れた。
|
|
|
|
|
Name: ☆わんころ☆ ..ぴよぴよ(196ポイント)
Date: 2009/01/31(土) 21:54
No:28071
| 解決!
|
Title: Re:SetUseDirectDrawFlag()関数
|
|
回答ありがとうございます。
GPUの性能ですか。。
とても勉強になりました。
これで次に進めます。ありがとうございました。
>回答がないって、まだ24時間も経ってないようですが……。
これは完全に自分が悪いです、はい…。
あちらの掲示板の方にも同様の質問がありましたが、それについては回答されていなかったので別の所で聞いた方がいいかなと思いあちらは閉じました。
…って言い訳ですね。
正直、待てませんでした(スイマセン^^;
次回からは我慢強く待ちたいと思います。
注意&ご教示本当にありがとうございましたm(_ _)m
75ポイント を手に入れた。
|
|
|
|
Name: フォンクス ..かけだし(1,656ポイント)
Date: 2009/01/27(火) 21:02
No:27839
|
|
Title: キャラクターの移動について
|
|
このサイトに載っている一定区間を歩かせるプログラムを参考に
ジョイパッドで動かせるプログラムを作成したのですが、
動いている途中で別のキーを押すと動かなくなってしまうのですが、
それがどうしても直せなかったので助けてください
typedef struct{
int Graph[16];
int PlayerID;
int hp,x,y,muki;
int Speed , Kyori;
int walkflg;
tama_t Tama;
}Player_t;
Player_t Player[4];
ソース
if(Player[0].x % 32 == 0 && Player[0].y % 32 == 0){
Player[0].walkflg = 1;//移動
if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_LEFT){
Player[0].muki = 1;//左
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP){
Player[0].muki = 0;//上
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_RIGHT){
Player[0].muki = 3;//右
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_DOWN){
Player[0].muki = 2;//下
}else{
Player[0].walkflg = 0;
}
if((GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_Z)){ //方向転換
Player[0].walkflg = 0;
if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_LEFT){
Player[0].muki = 1;//左
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP){
Player[0].muki = 0;//上
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_RIGHT){
Player[0].muki = 3;//右
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_DOWN){
Player[0].muki = 2;//下
}
}
}
590ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(52,391ポイント)
Date: 2009/01/27(火) 21:12
No:27840
|
|
Title: Re:キャラクターの移動について
|
|
規約通り、コードはプレタグで囲ってください。
あと字下げをしないとなかなか見づらいです。
あと、方向転換は歩いてる途中でキー入力を受け付けているのですが、
1区間歩かせたいならこの処理はNGだと思います。。
32で割れない時に違う方向に進んでしまうので。
何を実装しようとしているのか分からないので何とも言えないですが・・・
119ポイント を手に入れた。
|
|
|
|
|
Name: フォンクス ..かけだし(1,718ポイント)
Date: 2009/01/27(火) 21:26
No:27845
|
|
Title: Re:キャラクターの移動について
|
|
すみませんでした。今度から気をつけます。
移動と書いてある方は実際にキャラを移動させて、
方向転換はジョイパッドの6番が押されてるときに
方向だけ変えたいのです。
62ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(52,626ポイント)
Date: 2009/01/27(火) 21:32
No:27847
|
|
Title: Re:キャラクターの移動について
|
|
編集してもらえばよいのですが^^;
>方向転換はジョイパッドの6番が押されてるときに
>方向だけ変えたいのです
もし右に進んでいて元いた場所から29進み、
方向転換のif文に合致したとします。(y方向)
向きのフラグは変わりますが、
次にループで移動のif文には合致しません。
なぜならxが29進んだだけで止まっているからです。(32で割ったときに余りが出続ける)
すると歩かないフラグが立ちます。→歩きません。
196ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(52,784ポイント)
Date: 2009/01/27(火) 22:12
No:27860
|
|
Title: Re:キャラクターの移動について
|
|
今見て気がついたのですが・・・
このコードだと
「x,yともに32で割り切れるときに方向を決定し、方向変換可能」
ということなので、右向いていて、6番+左キー押されたら左を向くってことですか^^;
大変失礼しました。
このプログラムには特に問題がないと思うのですが・・・
32で割り切れない時のボタンと移動の処理はどのように書いていますか?
108ポイント を手に入れた。
|
|
|
|
|
Name: フォンクス ..かけだし(1,895ポイント)
Date: 2009/01/27(火) 22:19
No:27861
|
|
Title: Re:キャラクターの移動について
|
|
32で割り切れない時には入力は何もやっていません。
移動は4キャラ用にループで回しています。
Player[].Speedは初期値として 1 が入っています。
for(i=0;i<4;i++){
if(Player[i].walkflg == 1){
switch(Player[i].muki){
case 0://上
Player[i].y -= Player[i].Speed;
break;
case 1://左
Player[i].x -= Player[i].Speed;
break;
case 2://下
Player[i].y += Player[i].Speed;
break;
case 3://右
Player[i].x += Player[i].Speed;
break;
}
}
}
161ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(52,986ポイント)
Date: 2009/01/27(火) 22:47
No:27862
|
|
Title: Re:キャラクターの移動について
|
|
んん・・・特に問題がないように思えます・・・が・・・。
自分の家にジョイパッドがないので、ちょっと試せる環境にないので
動かすことができないのですが・・・。
とりあえず、移動中は何を押そうが、No:27839のコードには影響はしないので
他の部分でジョイパッドのボタンを押したときに
Player[0].walkflg=0になって止まっているのか確認してみてください。
もしかしたら全コードをUPしてもらったほうが早いかもしれません。
202ポイント を手に入れた。
|
|
|
|
|
Name: フォンクス ..入門者(3,827ポイント)
Date: 2009/01/29(木) 23:14
No:27958
|
|
Title: Re:キャラクターの移動について
|
|
キャラクターの移動に関しては下のとおりです
ブロックの当たり判定の部分は、ブロックの描画の座標が全てY軸方向に+32にしてあるので
当たり判定の部分でずらしてます。
#include"GV.h"
/*キャラクターの向き
0:上 Y - 1
1:左 X - 1
2:下 Y + 1
3:右 X + 1
*/
int HitBlock(int x,int y,int muki,int num) //X座標 Y座標 向き キャラ番号(1P:0 2P:1 3P:2 4P:3)
{
//Map.Normal[ Y ][ X ]
switch(muki){
case 0:
switch(Map.Normal[(Player[num].y / 32) - 2][Player[num].x / 32]){
case 0:
return 0;
case 1:
return 1;
case 2:
return 2;
case 3:
return 3;
}
break;
case 1:
switch(Map.Normal[(Player[num].y / 32 ) - 1][(Player[num].x / 32) - 1]){
case 0:
return 0;
case 1:
return 1;
case 2:
return 2;
case 3:
return 3;
}
break;
case 2:
switch(Map.Normal[Player[num].y / 32][Player[num].x / 32]){
case 0:
return 0;
case 1:
return 1;
case 2:
return 2;
case 3:
return 3;
}
break;
case 3:
switch(Map.Normal[(Player[num].y / 32) -1][(Player[num].x / 32) + 1]){
case 0:
return 0;
case 1:
return 1;
case 2:
return 2;
case 3:
return 3;
}
break;
}
return 0;
}
void PlayerInput()
{
int i; //カウンター変数
//--------------------1P入力-------------------
if(Player[0].x % 32 == 0 && Player[0].y % 32 == 0){
Player[0].walkflg = 1;//移動
if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_LEFT){
Player[0].muki = 1;//左
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP){
Player[0].muki = 0;//上
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_RIGHT){
Player[0].muki = 3;//右
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_DOWN){
Player[0].muki = 2;//下
}else{
Player[0].walkflg = 0;
}
if((GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_Z)){ //方向転換
Player[0].walkflg = 0;
if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_LEFT){
Player[0].muki = 1;//左
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP){
Player[0].muki = 0;//上
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_RIGHT){
Player[0].muki = 3;//右
}else if(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_DOWN){
Player[0].muki = 2;//下
}
}
}
//---------------------------------------------
//------------------2P入力---------------------
if(Player[1].x % 32 == 0 && Player[1].y % 32 == 0){
Player[1].walkflg = 1;
if(GetJoypadInputState(DX_INPUT_PAD2) & PAD_INPUT_LEFT){
Player[1].muki = 1;
}else if(GetJoypadInputState(DX_INPUT_PAD2) & PAD_INPUT_UP){
Player[1].muki = 0;
}else if(GetJoypadInputState(DX_INPUT_PAD2) & PAD_INPUT_RIGHT){
Player[1].muki = 3;
}else if(GetJoypadInputState(DX_INPUT_PAD2) & PAD_INPUT_DOWN){
Player[1].muki = 2;
}else{
Player[1].walkflg = 0;
}
if(GetJoypadInputState(DX_INPUT_PAD2) & PAD_INPUT_Z){
if(GetJoypadInputState(DX_INPUT_PAD2) & PAD_INPUT_LEFT){
Player[1].muki = 1;//左
Player[1].walkflg = 0;
}else if(GetJoypadInputState(DX_INPUT_PAD2) & PAD_INPUT_UP){
Player[1].muki = 0;//上
Player[1].walkflg = 0;
}else if(GetJoypadInputState(DX_INPUT_PAD2) & PAD_INPUT_RIGHT){
Player[1].muki = 3;//右
Player[1].walkflg = 0;
}else if(GetJoypadInputState(DX_INPUT_PAD2) & PAD_INPUT_DOWN){
Player[1].muki = 2;//下
Player[1].walkflg = 0;
}
}
}
//--------------------------------------------
for(i=0;i<2;i++){
if(Player[i].walkflg == 1){
switch(HitBlock(Player[i].x,Player[i].y,Player[i].muki,i)){
case 1:
Player[i].walkflg = 0;
break;
}
}
}
for(i=0;i<2;i++){
if(Player[i].walkflg == 1){
switch(Player[i].muki){
case 0://上
Player[i].y -= Player[i].Speed;
break;
case 1://左
Player[i].x -= Player[i].Speed;
break;
case 2://下
Player[i].y += Player[i].Speed;
break;
case 3://右
Player[i].x += Player[i].Speed;
break;
}
}
}
return;
}
void DrawPlayer()
{
int i;
for(i=0;i<2;i++)
DrawGraph(Player[i].x,Player[i].y,Player[i].Graph[( Player[i].x % 32 + Player[i].y % 32 )/8 + Player[i].muki*4],TRUE);
}
1,932ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(33,557ポイント)
Date: 2009/01/30(金) 10:05
No:27970
|
|
Title: Re:キャラクターの移動について
|
|
>動いている途中で別のキーを押すと動かなくなってしまうのですが
ということは、途中でキーを押さなければ、壁まで進んで壁でとまるのでしょうか?
私、DXライブラリを使ったことがないので、素人考えですが・・・
私の考えが間違っていればご指摘ください。
for(i=0;i<2;i++){
if(Player[i].walkflg == 1){
switch(HitBlock(Player[i].x,Player[i].y,Player[i].muki,i)){
case 1:
Player[i].walkflg = 0;
break;
}
}
}
この部分は、壁にぶつかったら止まるためのプログラムだと思います。
しかし
if(Player[0].x % 32 == 0 && Player[0].y % 32 == 0){
の部分の外ですから、1ドット動くたびにチェックしてます。
32の倍数以外でチェックすると、その次のマップ位置をチェックすることになるので、私の考えでは
壁にぶつかる31ドット前で止まると思うのですが、違いますか?
そうすると、最初に述べたように、途中で何もキーを押さないときは、壁の1ドット前で止まるはずは
ないということになりますので、その辺いかがですか?
次にint HitBlock(int x,int y,int muki,int num)関数ですが、numを引数で渡しているのだから
xやyを渡す必要がありません。また、
また、例えば上に動くときのチェックだけど、
switch(Map.Normal[(Player[num].y / 32) - 2][Player[num].x / 32]){
なぜ、-2なのか分かりません。自分の位置と上下方向のマップと一つずれているとわかりにくいです。
さらに、管理人さんが指摘されているように、GetJoypadInputState(DX_INPUT_PAD1)はループの中で
1回だけにしないと、無駄と言うよりも、タイミングによりループの途中で値が変わることにより思わぬ
バグを生じることになります。
679ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(33,653ポイント)
Date: 2009/01/30(金) 10:10
No:27971
|
|
Title: Re:キャラクターの移動について
|
|
>switch(Map.Normal[(Player[num].y / 32) - 2][Player[num].x / 32]){
>なぜ、-2なのか分かりません。
書いてありましたね。でも、そのような設計にしなければならないことに問題があったのでは?
96ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(33,740ポイント)
Date: 2009/01/30(金) 13:01
No:27979
|
|
Title: Re:キャラクターの移動について
|
|
>32の倍数以外でチェックすると、その次のマップ位置をチェックすることになるので、私の考えでは
>壁にぶつかる31ドット前で止まると思うのですが、違いますか?
>そうすると、最初に述べたように、途中で何もキーを押さないときは、壁の1ドット前で止まるはずは
>ないということになりますので、その辺いかがですか?
折角、JTさんから賛同を得ましたが、この説明には間違いがあったかもしれません。
+方向に座標が増えた場合は、x/32が切り捨てになるので問題ないですね。
問題があるのは−方向でしょうか?例えばxが64だったときx/32=2ですから1のマップが
進めるかチェックしますね。1ドットマイナスすると、63になるのでx/32=1となり、0の
マップのチェックになります。
47ポイント を落としてしまった。
|
|
|
|
|
Name: フォンクス ..入門者(4,136ポイント)
Date: 2009/01/31(土) 09:33
No:28021
|
|
Title: Re:キャラクターの移動について
|
|
入力の方を直してみました。
GetJoypadInputStateは1Pと2P用で2回呼んでるだけになりました。
2Pは同じなんで省略しました。
int i,key; //カウンター変数
//--------------------1P入力-------------------
if(Player[0].x % 32 == 0 && Player[0].y % 32 == 0){
Player[0].walkflg = 1;//移動
key = GetJoypadInputState(DX_INPUT_PAD1);
if(key & PAD_INPUT_LEFT){
Player[0].muki = 1;//左
}else if(key & PAD_INPUT_UP){
Player[0].muki = 0;//上
}else if(key & PAD_INPUT_RIGHT){
Player[0].muki = 3;//右
}else if(key & PAD_INPUT_DOWN){
Player[0].muki = 2;//下
}else{
Player[0].walkflg = 0;
}
if((key & PAD_INPUT_Z)){ //方向転換
Player[0].walkflg = 0;
if(key & PAD_INPUT_LEFT){
Player[0].muki = 1;//左
}else if(key & PAD_INPUT_UP){
Player[0].muki = 0;//上
}else if(key & PAD_INPUT_RIGHT){
Player[0].muki = 3;//右
}else if(key & PAD_INPUT_DOWN){
Player[0].muki = 2;//下
}
}
}
壁にぶつかった時に当たり判定なんですが、画像の様な
表示をさせたかったのでずらしたんですが・・・。
309ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(34,350ポイント)
Date: 2009/01/31(土) 10:56
No:28023
|
|
Title: Re:キャラクターの移動について
|
|
GetJoypadInputStateの方は、この方がいいですね。
上下のマップのずれは、本人がわかりやすいのなら、それで、いいですよ。
それより、通れないところの判定のタイミングの方はよくなりましたか?
85ポイント を手に入れた。
|
|
|
|
|
Name: フォンクス ..入門者(4,228ポイント)
Date: 2009/01/31(土) 11:00
No:28024
|
|
Title: Re:キャラクターの移動について
|
|
移動の判定なんですが、壁じゃないところで動かなくなってしまう時があります。
座標を見ると、32で割り切れないところで止まっているのでそのせいだと思うんですが
壁のあたり判定を見直してます
92ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(34,379ポイント)
Date: 2009/01/31(土) 12:35
No:28029
|
|
Title: Re:キャラクターの移動について
|
|
移動判定をこの中に入れてみたらどうでしょうか?
if(Player[0].x % 32 == 0 && Player[0].y % 32 == 0){
29ポイント を手に入れた。
|
|
|
|
|
Name: フォンクス ..入門者(4,391ポイント)
Date: 2009/01/31(土) 20:05
No:28063
| 解決!
|
Title: Re:キャラクターの移動について
|
|
if(Player[0].x % 32 == 0 && Player[0].y % 32 == 0){
Player[0].walkflg = 1;//移動
key[0] = GetJoypadInputState(DX_INPUT_PAD1);
if(key[0] & PAD_INPUT_LEFT){
Player[0].muki = 1;//左
}else if(key[0] & PAD_INPUT_UP){
Player[0].muki = 0;//上
}else if(key[0] & PAD_INPUT_RIGHT){
Player[0].muki = 3;//右
}else if(key[0] & PAD_INPUT_DOWN){
Player[0].muki = 2;//下
}else{
Player[0].walkflg = 0;
}
if((key[0] & PAD_INPUT_Z)){ //方向転換
Player[0].walkflg = 0;
if(key[0] & PAD_INPUT_LEFT){
Player[0].muki = 1;//左
}else if(key[0] & PAD_INPUT_UP){
Player[0].muki = 0;//上
}else if(key[0] & PAD_INPUT_RIGHT){
Player[0].muki = 3;//右
}else if(key[0] & PAD_INPUT_DOWN){
Player[0].muki = 2;//下
}
}
if(Player[0].walkflg == 1){
switch(HitBlock(0)){//壁などの当たり判定
case 1://壁があった場合
Player[0].walkflg = 0;
break;
}
}
}
この様にした所、変な場所で止まらなくなりました。
回答して下さった皆様、ありがとうございました。
163ポイント を手に入れた。
|
|
|
|
Name: Eagle ..ぴよぴよ(8ポイント)
Date: 2009/01/31(土) 14:35
No:28035
|
|
Title: 選択画面の作り方について
|
|
DXライブラリでゲーム作成をしています。
ゲームプログラミングの館
http://dixq.net/g/#33
の選択画面を作成中ゲームのスタート画面(と言うより最初の画面・・?)に使おうと思って
自分なりにコードを変えてみました。
#include "DxLib.h"
void char_disp(int White,int y){
DrawString( 200 , y , "⇒" , White );
DrawString( 220 , 300 , "A" , White );
DrawString( 220 , 320 , "B" , White );
DrawString( 220 , 340 , "C" , White );
DrawString( 220 , 360 , "D" , White );
DrawString( 220 , 380 , "E" , White );
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;
int White , y=300; //色とy座標の宣言
White = GetColor( 255 , 255 , 255 ) ; //色の取得
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
ClsDrawScreen();
char_disp(White,y); // 文字を描画
//移動
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if( key & KEY_INPUT_DOWN==1 ||( key & KEY_INPUT_DOWN%5==0 && key & KEY_INPUT_DOWN>30)){
y+=20;
if(y==400)
y=300;
}
if( key & KEY_INPUT_UP==1 ||( key & KEY_INPUT_UP%5==0 && key & KEY_INPUT_UP>30)){
y-=20;
if(y==280)
y=380;
}
//決定
if( key & KEY_INPUT_Z ){
if(y==380) DxLib_End(); //終了
}
ScreenFlip();//裏画面反映
}
DxLib_End();
return 0;
}
↑↓キーで矢印を動かして、Zキーが押されたら、矢印の座標に応じて動作を
するプログラムになると思ったのですが、
実行して見たところ、上下の移動がおかしく(?)なりました。。
どこがおかしいのか、考えましたがよくわかりません。
どの部分の書き方がおかしいのか教えてください。。。
8ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(313,595ポイント)
Date: 2009/01/31(土) 15:00
No:28037
|
|
Title: Re:選択画面の作り方について
|
|
>どこがおかしいのか、考えましたがよくわかりません。
GetJoypadInputState() の戻り値に対して KEY_INPUT_UP とか KEY_INPUT_Z を使って
判定することは正当なのか。
リファレンスやサンプルなどを見て調べてみて下さい。
179ポイント を手に入れた。
|
|
|
|
|
Name: Libra ..初心者(8,192ポイント)
Date: 2009/01/31(土) 15:14
No:28038
|
|
Title: Re:選択画面の作り方について
|
|
>KEY_INPUT_DOWN%5==0 && key & KEY_INPUT_DOWN>30
KEY_INPUT_DOWNやKEY_INPUT_UPは押されている時間を計測するものではないので、このような使い方は出来ないです。別途キーが押された時間を計算する変数を用意する必要があります。
追記:添付ソース
key & PAD_INPUT_Z⇒ key & PAD_INPUT_A が正しいです。
89ポイント を手に入れた。
|
|
|
|
|
Name: Eagle ..ぴよぴよ(280ポイント)
Date: 2009/01/31(土) 15:46
No:28040
| 解決!
|
Title: Re:選択画面の作り方について
|
|
Justyさんの言っていた、
GetJoypadInputState() の戻り値に対して KEY_INPUT_UP とか KEY_INPUT_Z を使って
判定することは正当なのか。
を考えて見ます。
それを踏まえて、Libraさんの添付ファイルを参考にしながら、
自分なりにプログラムを書いてみます。
Justyさん、Libraさん
ありがとうございました。
2倍のポイントを手に入れた! 272ポイント を手に入れた。
|
|
|
|
|
Name: nayo ..初心者(6,282ポイント)
Date: 2009/01/31(土) 16:00
No:28041
|
|
Title: Re:選択画面の作り方について
|
|
#define BUTTON_NUM (6)
void get_input( int input[] );
void draw_menu( int select );
enum { P_UP, P_DOWN, P_LEFT, P_RIGHT, P_A, P_B }; // 使用するパッドのボタン
enum { M_START, M_OPTION, M_QUIT }; // メニュー
enum { G_MENU, G_OPTION, G_INIT, G_RUN }; // ゲームの状態
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
// 初期化
ChangeWindowMode(TRUE);
if( DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK ) != 0 ) return -1;
// 変数宣言
int select = 0, input[BUTTON_NUM], func_state = G_MENU;
bool f_continue = TRUE;
// メインループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 && f_continue )
{
switch( func_state )
{
case G_MENU:
get_input( input ); // 入力を得る
// 上を押したら
if( input[P_UP] == 1 || ( input[P_UP]>30 && input[P_UP]%5==0 ) ){
select--;
if( select < 0 ) select = 2;
}
// 下を押したら
else if( input[P_DOWN] == 1 || ( input[P_DOWN]>30 && input[P_DOWN]%5==0 ) ){
select++;
if( select > 2 ) select = 0;
}
// 決定ボタンを押したら
else if( input[P_A] == 1 ){
switch( select )
{
case M_START: func_state = G_INIT; break;
case M_OPTION:func_state = G_OPTION; break;
case M_QUIT: f_continue = FALSE; break;
}
select = 0;
}
draw_menu( select ); // メニュー描画
break;
case G_OPTION:
// オプションの処理
break;
case G_INIT:
// 初期化
func_state = G_RUN;
break;
case G_RUN:
// ゲーム処理
break;
}
// FPSを60に設定するなど共通処理
ScreenFlip();
}
// 終了処理
DxLib_End();
return 0;
}
// パッドの各ボタン入力を連続で押したカウントに直す関数
void get_input( int input[] )
{
int pad = GetJoypadInputState( DX_INPUT_KEY_PAD1 );
if( pad & PAD_INPUT_UP ) input[P_UP ]++; else input[P_UP ] = 0;
if( pad & PAD_INPUT_DOWN ) input[P_DOWN ]++; else input[P_DOWN ] = 0;
if( pad & PAD_INPUT_LEFT ) input[P_LEFT ]++; else input[P_LEFT ] = 0;
if( pad & PAD_INPUT_RIGHT) input[P_RIGHT]++; else input[P_RIGHT] = 0;
if( pad & PAD_INPUT_A ) input[P_A ]++; else input[P_A ] = 0;
if( pad & PAD_INPUT_B ) input[P_B ]++; else input[P_B ] = 0;
}
// メニュー画面描画
void draw_menu( int select )
{
const char menu[3][20] = {
"ゲームスタート",
"オプション",
"終了",
};
static int white = GetColor( 255, 255, 255 );
static int red = GetColor( 255, 0, 0 );
for( int i=0; i<3; i++ ){
// 現在カーソル上のメニューは赤、その他は白で描画
DrawFormatString( 220, 300+20*i, (i==select)?(red):(white), "%s", menu[i] );
}
}
ちょっと遅かったか
コンパイルしてないのでコンパイルが通るか期待通り動くか怪しいですが参考までに
現在のy座標によって選択を変えると描画位置を変えたとき修正しないといけないので面倒かと思います
またこのままだとメニューの数が多くなるとメインループ内が見辛くなるので
機能ごとに関数なりクラスなりにまとめるといいかと思います
追記:間違いがやっぱりありましたので一部修正しておきました
まだあるかもです
2倍のポイントを手に入れた! 1,550ポイント を手に入れた。
|
|
|
|
|
Name: Eagle ..ぴよぴよ(346ポイント)
Date: 2009/01/31(土) 16:04
No:28042
|
|
Title: Re:選択画面の作り方について
|
|
nayoさんもプログラムを改変してくれたんですね!
解決にしていましたが、参考プログラムは多いほうが勉強になります。
ありがとうございました。
66ポイント を手に入れた。
|
|
|
|
Name: なつき ..ぴよぴよ(195ポイント)
Date: 2009/01/29(木) 17:38
No:27947
|
|
Title: Mathematicaについてなんですが
|
|
サイト違いでしたらすいません;;
1. 14n 16n 18n 20n の正の約数の個数が全て等しくなるような自然数nを求めよ。また これを求めるプログラムを書け
2. 次の二つの式をを満たす自然数の組(a,b,c)を求めよ。但し3つの数の並ぶ順番の異なる組は区別する。また これを求めるプログラムを書け。
式 ab+c=13 a+bc=23
3. テイラー展開を利用して Sin[10゜]を求めるプログラムを書け。
これらが まったくわかりません><ヒントでも良いのでよろしくお願いします。
195ポイント を手に入れた。
|
|
|
Name: ホリック ..ぴよぴよ(16ポイント)
Date: 2009/01/31(土) 02:22
No:28011
|
|
Title: ../include/GV.hって…?
|
|
最初らへんに出てくるインクルードの→../include/GV.hはどういう意味なんでしょうか?
16ポイント を手に入れた。
|
|
|
|
Name: ホリック ..ぴよぴよ(44ポイント)
Date: 2009/01/31(土) 02:31
No:28014
|
|
Title: Re:../include/GV.hって…?
|
|
てことはGV.hが同じ階層にあればそれだけでも大丈夫なのでしょうか?
28ポイント を手に入れた。
|
|
|
|
|
Name: dic ..中級者(11,301ポイント)
Date: 2009/01/31(土) 02:43
No:28015
|
|
Title: Re:../include/GV.hって…?
|
|
ファイル "GV.h"を同じ階層に移動すれば
#include "GV.h" として大丈夫です
19ポイント を手に入れた。
|
|
|
|
|
Name: ホリック ..ぴよぴよ(64ポイント)
Date: 2009/01/31(土) 02:46
No:28016
|
|
Title: Re:../include/GV.hって…?
|
|
初歩的なことを聞きたいのですがGV.hとはどういうものですか?
20ポイント を手に入れた。
|
|
|
|
Name: MNS ..ぴよぴよ(892ポイント)
Date: 2009/01/31(土) 08:03
No:28020
|
|
Title: template関数の動作がおかしい
|
|
C++の質問はいけないのかもしれませんが、規約を読んだ限り禁止はされていないようなので、質問させていただきます。
コンパイラ:Visual C++ 2008 Express Edition
OS:Vista
今、C++の勉強をしていて、クラスやSTL、テンプレートなどを多く使ったシューティングゲームを作っています。
このサイトを参考に、敵のデータをエクセルで管理しようと思いました。
パターンデータや敵の種類は定数で管理していたので、文字列から定数へキャストする関数を作りました。
template<class CAST_ENUM> int EnemyControl::CastCharToEnum(CAST_ENUM e_error, CAST_ENUM e_max, const char c_state_letter[][60], const char *cast_char, int number)
{
CAST_ENUM cast_enum = e_error;
for(int i = 0; i<e_max; ++i)
{
if(strcmp(c_state_letter[i],cast_char) == 0)
{
cast_enum = static_cast<CAST_ENUM>(i);
break;
}
}
return cast_enum;
}
という関数です。
enum ENEMY_PATTERN
{
PATTERN_ERROR = -1,
NORMAL_MOVE = 0,
GOING_STRAIGHT_MOVE,
GO_DOWN_MIDDLE_AND_COMEBACK,
PATTERN_MAX
};
const char CAST_CHAR_PATTERN[PATTERN_MAX][60] =
{
"NORMAL_MOVE",
"GOING_STRAIGHT_MOVE",
"GO_DOWN_MIDDLE_AND_COMEBACK"
};
enum ENEMY_KIND
{
KIND_ERROR = -1,
GREEN_ENEMY = 0,
RED_ENEMY,
BLACK_ENEMY,
KIND_MAX
};
const char CAST_CHAR_KIND[KIND_MAX][60] =
{
"GREEN_ENEMY",
"RED_ENEMY",
"BLACK_ENEMY"
};
このように、ENEMY_PATTERNとENEMY_KINDという定数があります。
そして、それぞれに対応した二次元文字列配列を宣言しています。
エクセルには、パターンが6列目、種類が7列目に書いてあるので、
ロードの際は
case 5: newloadEnemy.tem_pattern = static_cast<ENEMY_PATTERN>(CastCharToEnum<ENEMY_PATTERN>(PATTERN_ERROR,PATTERN_MAX,CAST_CHAR_PATTERN,cMemoly,column)); break;
case 6: newloadEnemy.kind = static_cast<ENEMY_KIND>(CastCharToEnum<ENEMY_KIND>(KIND_ERROR,KIND_MAX,CAST_CHAR_KIND,cMemoly,column)); break;
といった形でロードしています。
(cMemolyはこのサイトでいうinputcにあたります。columnはnにあたります。)
このとき、case 5の場合はしっかりと動作するのですが、
case 6では何故かうまく動作せず、全て戻り値が-1になってしまいます。
ちなみに、エクセルでパターンを7列、種類を6列にして、
case 5に static_cast<ENEMY_KIND>(・・・ を
case 6に static_cast<ENEMY_PATTERN>(・・ を移動したところ、
同じようにcase 5は動作するのですが、6は動作しません。
(つまり、ENEMY_KINDとENEMY_PATTERNと関係なく動作する)
解決方法が皆目見当がつきません。
どなたか、回答をお願いします。
(一応、全ての画像・エクセルデータ、プログラムを圧縮して添付しておきます。
これだけのコードじゃ把握できないという場合は、
お手数ですが、解凍してご利用ください。)
892ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(313,416ポイント)
Date: 2009/01/31(土) 11:48
No:28025
|
|
Title: Re:template関数の動作がおかしい
|
|
>同じようにcase 5は動作するのですが、6は動作しません
CSVから切り出した文字列をデバッガでよく見て下さい。
例えば "GREEN_ENEMY"ですと、文字列の最後に改行[CR]が付いた
"GREEN_ENEMY\r"になっていますよ。
126ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..ぴよぴよ(926ポイント)
Date: 2009/01/31(土) 12:27
No:28028
| 解決!
|
Title: Re:template関数の動作がおかしい
|
|
ご回答ありがとうございました!
おかげで解決することができました。
34ポイント を手に入れた。
|
|
|
|
Name: ささき ..ぴよぴよ(29ポイント)
Date: 2009/01/30(金) 10:15
No:27972
|
|
Title: 一括ダウンロードができない
|
|
龍神録の一括ダウンロードができないんですけどどうすればいいですか。
初心者的な質問ですみませんが教えてください。
29ポイント を手に入れた。
|
|
|
|
Name: non ..プログラマー(33,787ポイント)
Date: 2009/01/30(金) 10:30
No:27973
|
|
Title: Re:一括ダウンロードができない
|
|
どう、できないのですか?
他のホームページのダウンロードはできるのですね?
ポップアップブロックは無効になってますか?
2倍のポイントを手に入れた! 134ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(47,845ポイント)
Date: 2009/01/30(金) 14:34
No:27981
|
|
Title: Re:一括ダウンロードができない
|
|
試してみました
OS:XP SP3
ブラウザ:IE7, Sleipnir
セキュリティソフト:ノートン先生
両方で確認しましたがファイルのダウンロードダイアログではファイルサイズが10.2MBになっていますがダウンロードされたファイルのサイズは365KBしかありません。
ダウンロードしたファイルを解凍すると28章のデータでCRCエラーになり失敗しています。
IE7が悪いのかな??
186ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(54,422ポイント)
Date: 2009/01/30(金) 14:50
No:27982
|
|
Title: Re:一括ダウンロードができない
|
|
こちらでも試したところ、普通の(クリックする)方法では正しくダウンロードできないようです。
しかし、
右クリック→対象をファイルに保存
で、再度行ったらOKでした。
(私が始めてきたころでも同様の現象が起きていました)
※ブラウザエンジンを Gecko に切り替えてもダメでした。
95ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(47,978ポイント)
Date: 2009/01/30(金) 15:28
No:27985
|
|
Title: Re:一括ダウンロードができない
|
|
最初の何回かは失敗しましたが、一度成功するとその後は失敗しませんね。
ブラウザ再起動とか、PC再起動とか、一時ファイル削除とかいろいろ試してみましたが失敗しなくなりました。
こういうのはあまり詳しくないけど謎ですね(~-~;
> ささきさん
もしかしたらもう成功しているのかもしれませんが、少し時間をおいてからリトライされてはいかがでしょうか。
133ポイント を手に入れた。
|
|
|
|
|
Name: ささき ..ぴよぴよ(93ポイント)
Date: 2009/01/31(土) 02:06
No:28010
| 解決!
|
Title: Re:できました
|
|
御津凪さんの方法を何回か試してみた結果ダウンロードに成功しました。
なぜこの方法だとできるのかなどはわかりませんでしたがみなさんの貴重な情報
ありがとうございました。
64ポイント を手に入れた。
|
|
|
|
Name: あーる ..ぴよぴよ(139ポイント)
Date: 2009/01/30(金) 23:49
No:27999
|
|
Title: graphics.libについて・・・
|
|
学校のPCでVisualC++2005を使って作ったファイルが家のPCのVisualC++2008で実行できません。
文字や記号をキャラクタとして動かすプログラムなのですが、先生にVisualC++2008で実行するにはgraphics.libを使うように言われたのですが何のことかわかりません。
graphics.libはどこで手に入れてどのように使用すればよいのですか?
初心者なので質問の説明が不十分ですみませんがよろしくお願いします。
139ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(313,160ポイント)
Date: 2009/01/31(土) 00:35
No:28003
|
|
Title: Re:graphics.libについて・・・
|
|
>実行するにはgraphics.libを使うように言われたのですが何のことかわかりません
今の Visual C++の標準ライブラリにはそのような名前のライブラリは無いです。
ひょっとすると、その学校独自のライブラリだったりしませんか?
そうすると「(家の)VisualC++2008で実行するには(学校で使っているライブラリ)graphics.libを
(持って帰って)使うように」と補完すれば話が通るのですが。
再度その先生に確認した方がいいかと思います。
>学校のPCでVisualC++2005を使って作ったファイルが家のPCのVisualC++2008で実行できません
具体的に何故実行できないのでしょうか?
プロジェクトが開けない?
コンパイルが通らない?
リンクが通らない?
実行するとエラーで止まる?
……etc
実行できない時、何かメッセージは出なかったのですか?
283ポイント を手に入れた。
|
|
|
|
|
Name: あーる ..ぴよぴよ(487ポイント)
Date: 2009/01/31(土) 00:59
No:28004
|
|
Title: Re:graphics.libについて・・・
|
|
ありがとうございます
たしかに「(家の)VisualC++2008で実行するには(学校で使っているライブラリ)graphics.libを
(持って帰って)使うように」のように言われました。
1>game.obj : error LNK2001: 外部シンボル "_lputc" は未解決です。
1>game.obj : error LNK2001: 外部シンボル "_color" は未解決です。
1>game.obj : error LNK2001: 外部シンボル "_inkey" は未解決です。
1>game.obj : error LNK2001: 外部シンボル "_init_screen" は未解決です。
1>game.obj : error LNK2001: 外部シンボル "_cls" は未解決です。
1>game.obj : error LNK2001: 外部シンボル "_wait" は未解決です。
1>game.obj : error LNK2001: 外部シンボル "_end_screen" は未解決です。
ビルドするとこのようなエラーが出てしまいます
先生にもう一度きいてみたいとおもいます
348ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(313,290ポイント)
Date: 2009/01/31(土) 01:39
No:28007
|
|
Title: Re:graphics.libについて・・・
|
|
>ビルドするとこのようなエラーが出てしまいます
リンカのエラーですね。
多分 graphics.libを持って帰ってきて、学校で動かしたときと
同じディレクトリに置けば動くと思います。
(ヒョッとすると graphics.libだけでなく、そのライブラリ用のヘッダファイルも必要になるかもしれませんが、
そのあたりは先生に訊いてみて下さい)
130ポイント を手に入れた。
|
|
|
|
|
Name: あーる ..ぴよぴよ(516ポイント)
Date: 2009/01/31(土) 01:44
No:28008
| 解決!
|
Title: Re:graphics.libについて・・・
|
|
わかりました!
参考になりました
ありがとうございました
29ポイント を手に入れた。
|
|
|
|
Name: きっど ..ぴよぴよ(297ポイント)
Date: 2009/01/30(金) 20:13
No:27987
|
|
Title: free()関数 と segmentation fault
|
|
はじめまして。
現在、大学の卒研でプログラムを作っているのですが、segmentation faultを
取り除けない状態で苦しんでいます。
ファイルを添付させていただきます。これはコンパイル・実行は出来ますが、
途中で停まります。
停まったところには直前に"break point"と書かせて頂きました。
break point1はノートPC OS:Linuxで、2は学校PC OS:Free BSD
で起きました。ともにGCCです。
break point2の free(tmp)の直前では tmpの中身を表示(アクセス)しても異常
はなかったのですが、そこでsegmentation faultが起きました。
関数snapBetaを付け加えてからこのような症状が出ています。
長めのプログラムですが、どなたかミスを指摘して頂けたら幸いです。
よろしくお願いいたします。
297ポイント を手に入れた。
|
|
|
|
Name: toyo ..上級者(24,307ポイント)
Date: 2009/01/30(金) 20:56
No:27989
|
|
Title: Re:free()関数 と segmentation fault
|
|
ちょっと長いのでコメントを書いてもらうと見るほうも助かりますよ
質問とはぜんぜん関係ないですがcalloc( )という0で初期化してくれる関数もあります
47ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(133,909ポイント)
Date: 2009/01/30(金) 20:56
No:27990
|
|
Title: Re:free()関数 と segmentation fault
|
|
何をするプログラムかもわからず、
コメントが全くついていないコード
(変数や関数の意味がわからない)を
読めといわれましても、苦痛を伴うだけです。
40ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(48,202ポイント)
Date: 2009/01/30(金) 21:10
No:27991
|
|
Title: Re:free()関数 と segmentation fault
|
|
snapBeta関数をきちっとデバッグしたほうがいいんじゃないかな?
free(dec_m);
の下に
dec_m = NULL;
を追加してみたらsnapBeta関数終了時にはdec_mは常にNULLになっていてメモリが確保された状態でこの関数を終了することがないようです。
SuperIncreaseAWからOFFが返るとそうなるけど、snapBetaの呼び元はそれを想定していないですよね。
そのために、free(dec_m_sort)で100%落ちます。
break pointと書かれているところでどうして落ちるのかはわからないです。
私の環境では問題なかったです。
193ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(34,230ポイント)
Date: 2009/01/30(金) 22:11
No:27993
|
|
Title: Re:free()関数 と segmentation fault
|
|
2重ポインタってこんな使い方できるんですかね?
あんまり使ったことがないので、詳しい人にコメントもらいましょう。
double **DoubleArray2d(int m,int n)
{
double **array;
int j,k;
array=(double **)malloc(m * sizeof(double *));
array[0]=(double *)malloc(m * n * sizeof(double));
for(j=1; j<m; j++) { array[j]=array[0]+j*n; }
for(j=0; j<m; j++){
for(k=0; k<n; k++){
array[j][k]=0;
}
}
return array;
}
この関数でポインタ配列を指す2重ポインタを作って、2重ポインタが指すポインタでm*n個のデータを指す。
次に、2番目以降のポインタが指す場所を計算している。最後にすべて0クリアー。
まぁ、ここまではそんなもんかなぁなんですが。
プログラムを全部見てないので、何のためにこんなことが必要なのか分かってないのですが、配列の長さが
可変でないなら、2重ポインタにする必要はどこにあるのだろうって思っちゃいました。
呼び出しは
double **tmp;
tmp = DoubleArray2d(BLOCK, 2);
そして、freeのとき
free(tmp);
がしてありますが、これでは、
array=(double **)malloc(m * sizeof(double *));のポインタ配列分を解放しただけで、
array[0]=(double *)malloc(m * n * sizeof(double));の分は解放していないのではないのしょうか?
詳しい方へ!!
このfree一発で、2回のmallocで確保したメモリーをすべて解放しますか?
503ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(54,663ポイント)
Date: 2009/01/30(金) 22:31
No:27994
|
|
Title: Re:free()関数 と segmentation fault
|
|
> このfree一発で、2回のmallocで確保したメモリーをすべて解放しますか?
free(tmp);
は、
(double **)malloc(m * sizeof(double *));
で作成されているデータだけ(ポインタの配列)を開放します。
(double *)malloc(m * n * sizeof(double));
は、別領域として確保されるため、開放されません。
一発でやるなら、
double **DoubleArray2d(int m,int n)
{
double **array;
int j,k;
array=(double **)malloc(m * sizeof(double *) + m * n * sizeof(double **));
array[0]=(double *)(array + m);
for(j=1; j<m; j++) { array[j]=array[0]+j*n; }
for(j=0; j<m; j++){
for(k=0; k<n; k++){
array[j][k]=0;
}
}
return array;
}
だと思います。
241ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(34,285ポイント)
Date: 2009/01/30(金) 22:41
No:27995
|
|
Title: Re:free()関数 と segmentation fault
|
|
へぇ〜ですね。
array=(double **)malloc(m * sizeof(double *) + m * n * sizeof(double **));
ここは double じゃないのですか?
55ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(133,927ポイント)
Date: 2009/01/30(金) 22:45
No:27997
|
|
Title: Re:free()関数 と segmentation fault
|
|
> 2重ポインタってこんな使い方できるんですかね?
> あんまり使ったことがないので、詳しい人にコメントもらいましょう。
> array[0]=(double *)malloc(m * n * sizeof(double));
> for(j=1; j<m; j++) { array[j]=array[0]+j*n; }
私は、たぶん、上の2文をこんな風に書くと思います。
for (j = 0; j < m; ++j) {
array[j] = malloc(sizeof(double) * n);
}
> このfree一発で、2回のmallocで確保したメモリーをすべて解放しますか?
しないです。
18ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(34,265ポイント)
Date: 2009/01/30(金) 22:55
No:27998
|
|
Title: Re:free()関数 と segmentation fault
|
|
boxさん
私も、2重ポインタにするなら、そう書きます。
でも、このプログラムなら2重ポインタにしませんけどね。
恐らく。プログラムを見るのは止めましたから・・
20ポイント を落としてしまった。
|
|
|
|
|
Name: box ..ハッカー(133,976ポイント)
Date: 2009/01/30(金) 23:56
No:28000
|
|
Title: Re:free()関数 と segmentation fault
|
|
> でも、このプログラムなら2重ポインタにしませんけどね。
> 恐らく。プログラムを見るのは止めましたから・・
プログラムの仕様上、必要があれば使わざるを得ないのではないでしょうか。
二重ポインタを使わない、とおっしゃっている根拠が薄弱です。
49ポイント を手に入れた。
|
|
|
|
|
Name: きっど ..ぴよぴよ(359ポイント)
Date: 2009/01/31(土) 01:17
No:28006
| 解決!
|
Title: Re:free()関数 と segmentation fault
|
|
皆様どうもご親切に教えていただきましてありがとうございました。
ようやく解決しました。
プログラムにコメントを付けなくて申し訳なかったです。これは、ある暗号の攻撃法です。
62ポイント を手に入れた。
|
|
|
|
Name: リョキョタ ..かけだし(1,043ポイント)
Date: 2009/01/30(金) 01:20
No:27965
|
|
Title: ちょっとした技術を身に付けたので、自分で何か作れないかと試してみたんですが・・・。
|
|
たとえば、数字を入力して1を入力した場合1の文章。2を入力した場合2の文章・・・・というようなプログラムを作っている時に、ちょっとわからないところがあったのでお聞きしたいんですが。
全体の仕様としては、まず最初に数字を入力するところがあって、数字を入力したらその数字の文章を表示して、Enterキーを押すとまた入力する画面に戻る。
っていうように何回も戻って入力したりできるようなものをつくってるんですが。
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
int main()
{
char episode[2];
while(1){
char confirmation = 'n';
while(confirmation != 'y'){/*入力確認*/
system("cls");
printf("エピソード:");
scanf("%s",episode);
printf("エピソード:%sでよろしいですね?(Y/N)\n",episode);
scanf("%*c%c",&confirmation);
}
system("cls");
getchar();
if(*episode == '1')printf("1番です。");
if(*episode == '2')printf("2番です。");
/*・・・・・・・・・*/
if(*episode == '12')pritnf("12番です");
printf("Enterキーを押してください。\n");
getchar();
}
getchar();
return 0;
}
この場合1と2を入力したときはそれぞれ「1番です。」「2番です。」と表示されるしEnterキーを押せばちゃんと入力画面に戻るんですが、数字が2桁になると、
episode[0]の部分というか、例えば、12とした場合、1の部分しか読み取られてないみたいで12と入力しても「1番です。」と表示されてしまいます。
そこで、ifの条件をif(*episode == '12') ⇒ if(episode[0]=='1' && episode[1]=='2')としたら今度は(12を入力したときに)「12番です」と表示されるのは良かったのですが、
「1番です。」というのも表示されてしまいました。
「12番です」だけが表示されるようにしたいんですがわかりません。
問題はifの条件で2桁以上を判定する場合がわからないんですがどうすればいいんでしょうか?
328ポイント を手に入れた。
|
|
|
|
Name: lbfuvab ..上級者(15,090ポイント)
Date: 2009/01/30(金) 02:21
No:27966
|
|
Title: Re:ちょっとした技術を身に付けたので、自分で何か作れないかと試してみたんですが・・・。
|
|
char型とchar型の配列の違いを理解して下さい。
20ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(32,878ポイント)
Date: 2009/01/30(金) 08:44
No:27969
|
|
Title: Re:ちょっとした技術を身に付けたので、自分で何か作れないかと試してみたんですが・・・。
|
|
char episode[2];
scanf("%s",episode);
文字列リテラルには、文字列の終わりにNULL文字('\0')が格納されます。
そのため。配列の1個を使いますから、このままでは、入力できるのは1文字です。
2文字入力すると、NUL文字を格納する部分がないので、最悪暴走します。
従って、最低でも入力する文字数+1文字分の配列を用意します。
ですから、最低でも、char episode[3];にします。
次に文字列リテラルで入力したら、それを数値に変換しましょう。
数値に変換すれば、1桁でも2桁でも、条件分岐が簡単にできますね。
今回は atoi という関数を使ってみたらどうでしょうか?
使い方は検索してください。
最後に、多重分岐ですからこのような場合は
switch文を使った方がcoolです。
231ポイント を手に入れた。
|
|
|
|
|
Name: リョキョタ ..かけだし(1,089ポイント)
Date: 2009/01/30(金) 11:28
No:27974
|
|
Title: Re:ちょっとした技術を身に付けたので、自分で何か作れないかと試してみたんですが・・・。
|
|
まだちょっとchar型の文字列とか、文字列リテラル、についてちゃんと理解していなかったので調べてみます。
あと、NULL文字というものを忘れていましたありがとうございます。
46ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがり ..中級者(13,933ポイント)
Date: 2009/01/30(金) 18:28
No:27986
|
|
Title: Re:ちょっとした技術を身に付けたので、自分で何か作れないかと試してみたんですが・・・。
|
|
参考までにお聞きします。
「ちょっとした技術」の中身が知りたいです。
12ポイント を手に入れた。
|
|
|
|
Name: BEMANI ..入門者(4,482ポイント)
Date: 2009/01/20(火) 17:38
No:27232
|
|
Title: 龍神録で遊んでみました。
|
|
シューティング苦手なので今までやってなかったのですが、試しに遊んでみました。
EASYが凄く難しかったです;
全部越せそうにありません;
ただ単に自分の腕が悪いのだろうと思いました><
ざくっとですがゲームの流れを見させて頂きました。
弾幕パターンやステージ構成を考えるのがしんどそうだなぁ〜と感じました。
自分もシューティングを作ろうとしていますので参考にさせて頂きます^^
ステージは一端置いといて、ボスを一つ作りたかったので今はそちらを作成中です。
今後自分のデバッグをする時に、EASYが越せなかった腕で
果たして「難しい」という難易度ができるのか? という疑念が残りました><
余談ですが、管理人さん絵がお上手ですね!
難易度選択時に出てくる、色が塗られていない白い主線キャラクターを十分ほど眺めてましたw
211ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(959,901ポイント)
Date: 2009/01/20(火) 23:46
No:27252
|
|
Title: Re:龍神録で遊んでみました。
|
|
遊んでくださりありがとうございます^^
EASYでもすごく難しいと思いますよ!
東方の二次創作なんて、東方知ってる人しかやって下さらないだろうと思っていたので、
東方得意なハードシューター向けに作ってしまったんですよね;
ちょっと難易度設定、後悔しています;
次回はその辺気をつけて作ろうと思います。
弾幕については、それを考えるのが好きで作ったのでまだいいのですが、
道中を作るのが面倒なんですよね・・。
道中ってどうすれば面白くなるんでしょうね。。。
後、キャラの絵だけは私が書いたものじゃないです。
まぁ敵や弾も東方そっくりにしてるので、私が描いたとは言い難いですが^^;
後、更に線画はまた更に違う人が描いたものです;
立ち絵はファンタG君、
線画は緑青黒羽さんhttp://murakumo2nd.web.fc2.com/index.htmに描いて頂きました。
いや〜キャラ絵が書ける人はうらやましい・・。
291ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..入門者(4,897ポイント)
Date: 2009/01/21(水) 08:10
No:27280
|
|
Title: Re:龍神録で遊んでみました。
|
|
管理人さんが難しいというのであれば難しいのでしょう><
イージーなら越せるやろ! と軽い気持ちで挑んだらやられました;;
道中ですか〜。
シューティング自体全然やらないので解らないですけど
パターンを組みながら進める道中が楽しいんではないでしょうか。
覚えゲーになってしまうかもしれませんが;
他の方が描いたものなんですか〜
絵が他の方に回せるというだけでも凄く羨ましいです;
出来る事なら自分も誰かに回したいですが、人がいないのでそうも言ってられないです。
プログラム兼お絵かき・・・音楽まで作ると時間が無さ過ぎるので
さすがにフリーを使おうと考えてますけどね;
今度暇な時に龍神録のプレイ動画でも撮ってニコニコに上げてみます^^
やったことないハードもおまけで入れときます^^
288ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(51,388ポイント)
Date: 2009/01/21(水) 12:33
No:27298
|
|
Title: Re:龍神録で遊んでみました。
|
|
> 道中ってどうすれば面白くなるんでしょうね。。。
流れている曲に合わせて弾幕を出すように配置すれば
作る側としても楽しいのではないでしょうかね。
(あわせないといけないのでとても面倒ですが)
> プログラム兼お絵かき・・・音楽まで作ると時間が無さ過ぎるので
ここにいr…
いやなんでもないです。
2倍のポイントを手に入れた! 174ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(963,033ポイント)
Date: 2009/01/21(水) 13:34
No:27304
|
|
Title: Re:龍神録で遊んでみました。
|
|
>BIMANIさん
ふむふむ、パターンですか。
斑鳩みたいなパズル的演出もあってもおもしろいかもしれませんね。
I wanna be the guyみたいに途中で突然テトリスになるとk(ry
プレイ動画うれしいです!
人がプレイした動画ってどこを難しいと思ってるかとかわかりやすいので
重宝してます^^
そうでなくても純粋にうれしいです☆
出来れば実況でw
>御津凪さん
>音楽と合わせる
あ〜なるほど。
以前神曲同調弾幕作りましたけどあんなかんじですかね。
多分今までの10倍以上時間かかりそうですw
何か支援ツール作らないと・・。
しかし良い案ですね♪
>ここにいr・・・
おぉ!今度お絵かき見せて下さいw
2倍のポイントを手に入れた! 648ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(51,396ポイント)
Date: 2009/01/21(水) 15:34
No:27313
|
|
Title: Re:龍神録で遊んでみました。
|
|
> I wanna be the guyみたいに途中で突然テトリスになるとk(ry
テトリスのピースが弾幕になって振って来るのは面白そうですね。
自機がどんどん上に追いやられていく感じで。
あのゲームは分かってしまえばラク(後は自分の腕)ですが、
分かるまでが厳しいですね。
> おぉ!今度お絵かき見せて下さいw
絵描きのほうは興味があってたまにやっていますが、
時間が空いたら書いてみますね。
# A4ペンタブや、SAIを買っているから、興味どころじゃないですけど。
# あ、言っておきますが下手いです。
8ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..初心者(5,118ポイント)
Date: 2009/01/21(水) 21:34
No:27392
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>御津凪さん
> プログラム兼お絵かき・・・音楽まで作ると時間が無さ過ぎるので
>ここにいr…
>いやなんでもないです。
これはもう、拝見させて頂くしか><
超楽しみにしてますね^^
御名前、なんて読むのでしょうという素朴な疑問があるのですが
「おつなぎ」であってるのでしょうか;
>プレイ動画うれしいです!
>人がプレイした動画ってどこを難しいと思ってるかとかわかりやすいので
>重宝してます^^
>そうでなくても純粋にうれしいです☆
ま〜〜自分のプレイは参考にならないと思いますよ;;
ちょっと気合い入れて全クリ目指してプレイ動画とってみます><
Easyやってから、おまけでHardやってみます^^
コンテニューはしないつもりですのでどこまでいけるか解りませんが;
>出来れば実況でw
実況ってどうやればいいかわからないですが、マイク類がいるのではないでしょうか?
自分はそういうのもってないので実況は出来ないです;;
これがあればいけるよ!
っていうのも解らないので><
221ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(51,731ポイント)
Date: 2009/01/21(水) 21:59
No:27394
|
|
Title: Re:龍神録で遊んでみました。
|
|
> 御名前、なんて読むのでしょうという素朴な疑問があるのですが
> 「おつなぎ」であってるのでしょうか;
「みつなぎ」と、呼びます。
ちなみに音楽の配布の方は私のところのページ経由で行けます。
(アレンジ1曲だけですが…)
46ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..初心者(5,324ポイント)
Date: 2009/01/21(水) 22:55
No:27401
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>御津凪さん
みつなぎさんですか。
了解しましたです!
御津凪さんのHPですが、muzuieで東方の曲をアップしている所であってますか?
特技にキーボードでBMSとか・・・。
>>管理人さん
マイクって1000円くらいなんですか〜。
実況をやるために買うのもなんかアレですよね;
多分実況をすると、絶妙な間が生まれすぎて実況にはならないような気がしますw
127ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(52,077ポイント)
Date: 2009/01/21(水) 23:07
No:27402
|
|
Title: Re:龍神録で遊んでみました。
|
|
> 御津凪さんのHPですが、muzuieで東方の曲をアップしている所であってますか?
あってますよ。(最近忙しいので最近更新してませんが)
というか、私の名前の横にある[URL]から入ってますよね?
> 多分実況をすると、絶妙な間が生まれすぎて実況にはならないような気がしますw
なれれば大丈夫ですよ。
何か思いついたことを喋っていれば実況っぽくなりますから。
実況といえば、野球の実況を思い出しますが、
あのノリで実況してたら面白いかも。
(自分で自分を実況するから無理だとおもいます)
2倍のポイントを手に入れた! 232ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..初心者(5,386ポイント)
Date: 2009/01/21(水) 23:21
No:27403
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>御津凪さん
URL言われるまで気づかなかったです・・・目立つ色なのに。
どうやっていくんだろう?と思ってgoogleで検索かけちゃいました;
個人的には音ゲー好きなので、やるなら音ゲーがやってみたいですね〜。
多分やらないと思いますけど;
62ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..初心者(7,857ポイント)
Date: 2009/01/25(日) 00:35
No:27624
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>御津凪さん
なぜに霊夢が・・・。
シューティングキャラということで、
対抗してアイシャさんとかリリアさんでも描いてみましょうかね〜。
この絵はGIMPで描いたものですか? SAIですか?
>>管理人さん
動画撮ってたんですが、録音すると容量が無駄に大きくなって
ニコニコにあげれなかったです;
音楽なしでいいならアップできますよw
一度音楽なしでアップしたことあるんで解るんですが、
音楽なしってすっごく寂しいんですよね・・・。
225ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..初心者(8,089ポイント)
Date: 2009/01/25(日) 00:52
No:27631
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>管理人さん
ニコニコには既にflv形式で4つほど動画を上げております。
aviではなくflvが40MBを超えておるのですよ><
ニコニコでflv形式は、40MB以上・ビットレート600kbps以上の物は上げられないので
若干オーバーしちゃってる感じです。
実は一面から最後まで行けるようになったのですが、通しでやると30分強、かかるんですよ。
それに、wmv等で上げるとニコニコが怪しいエンコードをしてしまうので
画質下がって画面見にくいなら上げなくてもいいかな〜と。
ちなみに、ビットレートは64kbpsにしましたが、あまり下げ過ぎてもどうなのかな〜と・・・。
211ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(970,109ポイント)
Date: 2009/01/25(日) 01:40
No:27641
|
|
Title: Re:龍神録で遊んでみました。
|
|
あぁそうでしたかそれは失礼しましたm(_ _)m
プレミアム会員ではなく一般会員ですか?
それなら4つ位にわけてはどうでしょう?
part1〜part4みたいな感じで。
多分30分以上を一般会員でアップロードすると、かなり画質が落ちてしまうのでは無いかと思います;
ビットレートは映像+音声で500位欲しいですよね。
あと、flvはエンコードにすごく時間がかかるのでmp4使ってみてはどうでしょう?
124ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..初心者(8,669ポイント)
Date: 2009/01/25(日) 02:47
No:27647
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>管理人さん
>プレミアム会員ではなく一般会員ですか?
勿論、一般会員です^^
小分け・・・ですか・・・。
出来たら、一度に上げたかったのですがしょうがないっすよね;
一回分けてあげてみます。
>多分30分以上を一般会員でアップロードすると、かなり画質が落ちてしまうのでは無いかと思います;
初耳です・・・一般会員は画質落ちるんですか;
なら小分けにした方がよさそうですね〜。
情報ありがたいです!
>ビットレートは映像+音声で500位欲しいですよね。
個人的に256kbpsあれば高品質なので、500は超高めだと思いますよ^^
そこまで高品質にしなくてもよいので><
128kbpsくらいでもいい気がしてます。
>あと、flvはエンコードにすごく時間がかかるのでmp4使ってみてはどうでしょう?
mp4速いのですか〜。
flvしかやったこと無いので試してみますか〜〜。
管理人さんへ、関係ないかもですが、メールって届きました?w
闇の中に葬り去られているような気がしてきましたw
407ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(970,551ポイント)
Date: 2009/01/25(日) 03:26
No:27648
|
|
Title: Re:龍神録で遊んでみました。
|
|
あ、メールチェックしてませんでした、先ほど返信しました、ごめんなさい^^;
--
え、64kbpsって音楽だけじゃなく、トータルですか?
それはちょっと落としすぎでは(汗
せっかくUPされるのでしたら是非高画質で拝見したいものです><
私はできれば600で上げて欲しい勢い・・。
パートにいくつかわけても、自動ジャンプコメ入れたらみんな連続で見てくれると思いますよb
後、mp4はflv On2 VP6で2時間位かかってたエンコードが15分位で終わるんじゃないかと思います。(言いすぎ?)
ちょっとflvは時間かかりすぎですよね^^;
139ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(53,111ポイント)
Date: 2009/01/25(日) 13:37
No:27657
|
|
Title: Re:龍神録で遊んでみました。
|
|
>> BEMANI さん
> なぜに霊夢が・・・。
本当はアイシャでも描こうかと思ったのですが、
描くの久しぶりだし、適当に描いてたら霊夢になってて、
まあいいかと思って、そのまま仕上げちゃいました^^;
> 対抗してアイシャさんとかリリアさんでも描いてみましょうかね〜。
ぜひ描いてみてくださいな。
線画くらいまでなら楽ですよ。
> この絵はGIMPで描いたものですか? SAIですか?
SAI です。
GIMP だとなぜかペンタブが認識しなくて。(Vistaだからだと思いますが)
>> 管理人さん
> 絵もかけて音楽も作れてプログラムも出来るってそれって・・ZU(ry
シナリオまで全部一人で作ったら絶対言われますね。
> じゃ龍神2の絵もお願いしますww
それは冗談ですか?本気ですか?
どちらにしても、今はちょっと無理です…。
もう少し上達してから考えてみますけれど。
158ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..中級者(9,179ポイント)
Date: 2009/01/25(日) 15:33
No:27658
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>管理人さん
>せっかくUPされるのでしたら是非高画質で拝見したいものです><
管理人さんが上げてる動画くらいの画質でよいのであれば・・・
画面が荒れて見えなくなってる! ってのは避けたいのでその辺りは工夫します^^
>パートにいくつかわけても、自動ジャンプコメ入れたらみんな連続で見てくれると思いますよb
ジャンプコメ、パート分けしたら今度調べてみます!
>後、mp4はflv On2 VP6で2時間位かかってたエンコードが15分位で・・・
>ちょっとflvは時間かかりすぎですよね^^;
そんな早いんですか・・・。
仮に15分でなくとも十分早いです。
mp4にするツール今度探してみます。
>じゃ龍神2の絵もお願いしますww
ここは敢えて管理人さんがキャラデザしてみては^^
>>御津凪さん
>描くの久しぶりだし、適当に描いてたら霊夢になってて・・・
ということは、つまり霊夢が好きということで・・・
すいません。なんでもないです。
>ぜひ描いてみてくださいな。
>線画くらいまでなら楽ですよ。
そうですね・・・ただ、模写は凄く苦手なので楽ではないような気がします;
>SAIです。
SAIですか〜。
持ってますけど起動してないんですよね〜・・・。
510ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..中級者(9,776ポイント)
Date: 2009/01/26(月) 15:22
No:27707
|
|
Title: Re:龍神録で遊んでみました。
|
|
アイシャさんだけ、ラフ的な感じで描いてみました。
色付けまで、仕上げるだけの体力なかったです;
38ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(972,009ポイント)
Date: 2009/01/26(月) 16:05
No:27710
|
|
Title: Re:龍神録で遊んでみました。
|
|
おぉ!うまい・・。
ソッコーで過去ログ落ちしてデータ消えないようにうちのサーバーに移させていただきましたw
こう、何も見ず、そういう格好がかけるというのがすご過ぎる^^;
私はいつも何かを参考にしながらじゃないとかけません・・。
むしろ参考にしてもほとんどかけません・・。
これだけかけたらゲームもプログラム、画像オリジナルで充分いけませすね。
私も絵の勉強したくなってきました・・。
でも絵は生まれつきの才能的な部分が影響しそうですね^^;
この絵、出来れば龍神録のHPに「アイシャの小部屋」的なページ作って掲載s(ry
最初はア○カシのHPみたいにゲームの紹介と、その登場人物の4コマみたいなページ作りたかったんですが、
画力が無いので無理でしたw
2倍のポイントを手に入れた! 564ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(53,442ポイント)
Date: 2009/01/26(月) 16:21
No:27712
|
|
Title: Re:龍神録で遊んでみました。
|
|
>> BEMANI さんの絵
十二分にうまいじゃないですか;
>> 管理人さん
> ソッコーで過去ログ落ちしてデータ消えないようにうちのサーバーに移させていただきましたw
私も保存しときました^^;
ちなみにどれくらいかかりました?
こちらは仕事で忙しい中、二日で描き上げました。
> ということは、つまり霊夢が好きということで・・・
> すいません。なんでもないです。
なぜでしょうね。特に好きとは思ってはいなかったのですが。
多分、良く見るからでしょうね。
> SAIですか〜。
> 持ってますけど起動してないんですよね〜・・・。
持っているということは買った、ということですか?
イラストなら SAI で十分だけど、CG系はやはりフォトショか GIMP ですね。
>> 管理人さん
> でも絵は生まれつきの才能的な部分が影響しそうですね^^;
器用、不器用は別として、誰でも書き続ければうまくなりますよ。
…絵の話になっていますが、トピの本題について一つ。
> 今後自分のデバッグをする時に、EASYが越せなかった腕で
> 果たして「難しい」という難易度ができるのか? という疑念が残りました><
デバッグ機能として無敵モードを用意し、
とりあえず思うがままに弾幕を張るように作って、
それを一通り見て、
・避けれるか(避け方はあるか)どうか
・安置はあるか
をチェック・調整していくと良いかもしれないです。
そうやっているうちに避ける技術が身につくかもしれませんよ。
331ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(972,097ポイント)
Date: 2009/01/26(月) 16:28
No:27714
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>御津凪さん
>器用、不器用は別として、誰でも書き続ければうまくなりますよ。
そうですねぇ、精進します^^
しかし、今龍神録開発メンバーの中で一番必要なのは音楽でしょうか・・^^;
20曲とか一人作り上げるの困難ですよね・・。
私も頑張らないと・・。
2人で作って統一性のある曲が作れるか不明ですが^^;
あれだけの曲数をよく毎年出せますよねZUNさん・・。
しかも全てクオリティが高いw
>>BIMANIさん
東方のどのゲームでもいいので、1つだけでもEXステージクリア出来るようになるまでみっちりやれば
避け方解ってきますよ^^
とかいいながら、今龍神録のEXステージクリア出来る自信ありませんww
51ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..中級者(10,787ポイント)
Date: 2009/01/26(月) 18:51
No:27723
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>管理人さん
>ソッコーで過去ログ落ちしてデータ消えないようにうちのサーバーに移させていただきましたw
ありがとうです><
>こう、何も見ず、そういう格好がかけるというのがすご過ぎる^^;
>私はいつも何かを参考にしながらじゃないとかけません・・。
>むしろ参考にしてもほとんどかけません・・。
絵が描けるといっても、何年と描いてきてこんな感じなので、
管理人さんも描き続ければ絶対うまくなりますよ^^
>これだけかけたらゲームもプログラム、画像オリジナルで充分いけませすね。
>私も絵の勉強したくなってきました・・。
>でも絵は生まれつきの才能的な部分が影響しそうですね^^;
いけるんですかね;
自分の過去絵をみると、「これ自分が描いたんだよな〜」と思うので、
うまくなるということは保証します^^
才能とか関係ないっすよ^^
>この絵、出来れば龍神録のHPに「アイシャの小部屋」的なページ作って掲載s(ry
>最初はア○カシのHPみたいにゲームの紹介と、その登場人物の4コマみたいなページ作りたかったんですが、
>画力が無いので無理でしたw
絵は御自由に使っていただいて宜しいですよ^^
むしろ使って頂くとか光栄すぎますよ;
アイシャさんの4コマに期待しておきましょうw
>東方のどのゲームでもいいので、1つだけでもEXステージクリア出来るようになるまでみっちりやれば ・・・
紅魔郷EX、恋の迷路? 的な名前以降は見れません;
永夜抄EX、クリアできました。
花映塚EX、クリアできました。
風神録EX、クリアできました。
地霊殿EX、ノーマルが越せないのでEX出ません;
龍神録EX、リリアさんってどこで出てくるんですか? って感じです・・・。
最近結構練習して、腕以上に目を磨いてます^^
>2人で作って統一性のある曲が作れるか不明ですが^^;
同じ音源で作れば、ある程度カバーできるような気もします。
>>御津凪さん
>十二分にうまいじゃないですか;
>私も保存しときました^^;
ど、どうも有難う御座います・・・恐縮です;
>ちなみにどれくらいかかりました?
>こちらは仕事で忙しい中、二日で描き上げました。
資料探しから入って1時間20分ほどです。
綺麗に仕上げたら3時間ちょっとかかるかと思います。
>持っているということは買った、ということですか?
>イラストなら SAI で十分だけど、CG系はやはりフォトショか GIMP ですね。
SAIの無料版をず〜っと前に落として、そのまま保存してるんです。
フォトショあったら他のはいらないかな〜と思いまして、起動せずって感じです。
ニコニコでSAIを使っている動画をよく見るんですが、慣れたインターフェースでないので
使いにくそうだな〜; って感じです。 何事も慣れだとは思いますけどね。
>デバッグ機能として無敵モードを用意し・・・
課題でFLASHのActionScriptを使ってシューティングもどきを作り、
その時、無敵入れたんですが、弾避けをしないで倒せるので腕が上がるか超微妙です;
多分、残気の最大数を死んでも死にきれないくらい増やすと思います。
リリアさんを入れる予定だったのですが、アイシャさんを大きく描き過ぎたので入れれませんでした。
次はリリアさん描いてきます。
1,011ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..中級者(10,881ポイント)
Date: 2009/01/27(火) 08:17
No:27743
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>管理人さん
龍神録を遊びつつ、今持ってる東方を遊んでみたら…
という感じですが、地霊殿のNOMALですごく自信をなくしました;
妖々夢は持ってないですね〜;
個人的には永夜抄が楽しかったです^^
ということで、Phantasmやりましたけど、ボスまでたどり着けませんでした;;
敵が激しすぎます><
とりあえず、リリアさんに会えるように頑張ります;
94ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..中級者(11,261ポイント)
Date: 2009/01/28(水) 00:17
No:27870
|
|
Title: Re:龍神録で遊んでみました。
|
|
龍神録2人目、リリアさん投下〜。
自分用のキャラもそろそろ描かないと・・・
ドット打ってアニメーションさせるの凄く鬱になりそう・・・(シャレではなく
管理人さん、修論頑張って下さいまし!
48ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(973,682ポイント)
Date: 2009/01/28(水) 09:26
No:27873
|
|
Title: Re:龍神録で遊んでみました。
|
|
おぉ!またまた保存させてもらいました〜w
すごいな〜、何故日の丸の扇なのかよくわからないけど、すごいなぁw
これ位私も描けたらなと、うらやましいです^^;
次は村長ですね(ぇ
これペンタブで直描きですか?
>という感じですが、地霊殿のNOMALですごく自信をなくしました;
あれ難しいですよね^^;
私もどんなに苦労したかw
多分作品が何度もリリースされていくなかで、プレイヤーが上達しているのを考えて
初めてやったときと同じくらい苦労するように出来ているのかもしれませんw
もしくはラスボスの曲が名曲なので、何度も聞かせるためか・・w
ファンタズムは、案外ボムを有効活用したらごりおしでいけたりしますw
そして、自機狙いが多いので、弾をよ〜くみてチョンよけ駆使すればなんとかいけるかもしれません^^
なお、ボスが出現する直前の最後の敵はみんな大P落とすので、ボムって大丈夫ですw
(まぁあそここそ全弾自機狙いなので、チョンでいけるのですが)
355ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..中級者(11,429ポイント)
Date: 2009/01/28(水) 15:17
No:27886
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>管理人さん
コンフィグの所に、羽根を付けるか扇にするかの設定があったので扇を描いてみました。
なんで日の丸なんでしょうかね;
村長は管理人さんお任せしますよ^^
(ペンタブで直描きですよ〜。家にマウスが無いので・・・)
>地霊殿
EXやってみたいのに本当に越せないのが残念です;
NOMALのラスボスまで行けないっていう・・・
>ファンタズム
もうほとんどボムゲーになってますけど、クリアできる気がしないです;
(もう少しでニコニコに動画をアップできそうなので、ファンタズムも撮っておきますよw)
168ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(976,124ポイント)
Date: 2009/01/28(水) 17:10
No:27888
|
|
Title: Re:龍神録で遊んでみました。
|
|
なるほど、あの扇ですねw
しかし扇の意味は妖々夢やってないとよくわからなかったのでは^^;
しかしマウスがあってペンタブが無い人は沢山いるでしょうけど、ペンタブあってマウスが無い人も珍しいですねw
>NOMALのラスボスまで行けないっていう・・・
私も苦労しました^^;
あれ、ゲーム終了したらまた苦労して6面までいかないといけないのがちょっと厄介ですよね・・。
一回クリアしたら、そのステージから始められたらいいのに^^;
>クリアできる気がしないです
まずライトで挑戦してみるとか・・?
>もう少しでニコニコに動画をアップできそうなので
楽しみにしてま〜す♪
246ポイント を手に入れた。
|
|
|
|
|
Name: yu ..初心者(8,832ポイント)
Date: 2009/01/28(水) 18:19
No:27892
|
|
Title: Re:龍神録で遊んでみました。
|
|
>BEMANI様
絵うまいですね〜。
自分も絵が下手で悩んでいる一人です。
ドット絵も下手です;
>NOMALのラスボスまで行けないっていう・・・
地霊殿は難しいですよね;
ラストスペルで負けたときは・・・
大体シリーズ通して一度はラストスペルで負けてますがw
結構、他の人のプレイ動画見たりすると参考になりますよ。
自分で攻略する楽しみがなくなるかもしれませんが;
しかし、一番苦労したのは龍神録でしたw(当たり判定減らすアイテム買っていなかったため
ファンタズムは自分では不可能だと察しました;
>あれ、ゲーム終了したらまた苦労して6面までいかないといけないのがちょっと厄介ですよね・・。
確かZUNさんもそこら辺が問題とか、インタビューで言っていた気がしますよ。
>しかし扇の意味は妖々夢やってないとよくわからなかったのでは^^;
コンフィグで変更できたのを今知りましたw
西行寺 幽々子の後ろの扇の、形、色合いが似ていますね。
それと、当たり判定まで再現されてますね。
あの扇ってなんなのかな?・・・
それと、横からすみませんが、
フリー素材で東方紅魔郷EXステージ作ってるんですが、(本家と全く(?)同じです
需要ありますかね?w
それと、権利的に大丈夫でしょうか・・・
後々にいろいろ追加していく予定ですが。
Dixq様、わざわざ龍神録の館の利用規約を更新してくださって
本当にありがとうございます。m(_ _)m
2倍のポイントを手に入れた! 1,086ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..中級者(13,393ポイント)
Date: 2009/01/29(木) 00:49
No:27906
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>管理人さん
>なるほど、あの扇ですねw
>しかし扇の意味は妖々夢やってないとよくわからなかったのでは^^;
解らなかったので、日の丸の扇に・・・
日の丸は本当に関係ないですけどね;
>しかしマウスがあってペンタブが無い人は沢山いるでしょうけど
>ぺンタブあってマウスが無い人も珍しいですねw
今度マウス買おうと思ってます;
珍しいんですかね〜?
>まずライトで挑戦してみるとか・・?
やだな〜。まず、っていうか、ライトが越せないんですよw
「気軽にファンタズムの世界」
本当に気軽なんですかねw
>>yuさん
>自分も絵が下手で悩んでいる一人です。
>ドット絵も下手です;
絵は描き続ければ絶対にうまくなります><
プログラムと同じです^^
ドット絵は本当になれないとどうしようもないですね;
>地霊殿は難しいですよね;
えーえーそれはもうほんとに;
まじでクリアできる気がしないです。
イージーですら超危うい・・・
>結構、他の人のプレイ動画見たりすると参考になりますよ。
>自分で攻略する楽しみがなくなるかもしれませんが;
見てもいいかなーと思うんですけど、多分よけれないでしょう;
何とか、自分でよけれるように努力するのも楽しみの一つかな・・・と^^
>しかし、一番苦労したのは龍神録でしたw(当たり判定減らすアイテム買っていなかったため
>ファンタズムは自分では不可能だと察しました;
自分も買ってないですけど、買っても出来ないでしょうね;;
それほどの超高難易度です・・・
>西行寺 幽々子の後ろの扇の、形、色合いが似ていますね。
そういう扇ですか!
永夜抄に出てきたので何となくわかりました。
>フリー素材で東方紅魔郷EXステージ作ってるんですが、(本家と全く(?)同じです
>需要ありますかね?w
>それと、権利的に大丈夫でしょうか・・・
>後々にいろいろ追加していく予定ですが。
真似してみました! という感じでしょうかね〜?
もし不安なら、このサイトを拝見してみては?
ttp://www.venture.nict.go.jp/ipr/ken00002.html
あ、ちなみに自分は需要ありまくりっすよ^^
遊ばせて頂けるなら遊ばせてもらいたいです^^
そして、「あーやっぱ自分下手だなー」と自信をなくしたいですw
2倍のポイントを手に入れた! 1,964ポイント を手に入れた。
|
|
|
|
|
Name: yu ..初心者(8,679ポイント)
Date: 2009/01/29(木) 17:29
No:27946
|
|
Title: Re:龍神録で遊んでみました。
|
|
>BEMANIさん
>絵は描き続ければ絶対にうまくなります><
>プログラムと同じです^^
>ドット絵は本当になれないとどうしようもないですね;
プログラムと同じだとあまり僕は進歩ないかもしれませんw
でも、やっぱり練習は大事ですよね。
ドット絵は1ドットでも変だと全体的に崩れてしまう場合もあるので難しいです;
>見てもいいかなーと思うんですけど、多分よけれないでしょう;
>何とか、自分でよけれるように努力するのも楽しみの一つかな・・・と^^
自分もですw
まず自分でクリアしてから他の人のプレイ動画とかを見ています。
結構安置とかがあってかなりショックを受けます;
>真似してみました! という感じでしょうかね〜?
真似してみました! という感じです。
サイトを拝見させて頂きました。プログラム言語は保護されないんですね〜。
保護されたら大変なことになりそうですが;
>あ、ちなみに自分は需要ありまくりっすよ^^
>遊ばせて頂けるなら遊ばせてもらいたいです^^
>そして、「あーやっぱ自分下手だなー」と自信をなくしたいですw
そう言っていただけるととてもうれしいです。><
一人でもやってくれる人がいたらネットで配布しようかな〜と思っていました。
でも、今はあくまでEXステージだけです。
本家を攻略するための練習用になら使えるかも?・・・(コンティニュー可にしてあります
ゲーム自体は本家と比べると完成度高くないかもしれませんが;
プログラム歴4か月の素人が初めて作ったゲームなので、バグが多発しそうで恐ろしいです;
では近々、配布しますね〜。
# ここで書くようなことではないのですが、同じ名前(yu)の方がいらっしゃいますね。
# OpenGL、授業でしてたのですが は僕の投稿ではありませんよw
# 高度な話をしていらっしゃいますが、僕にそんな技術はありません;
438ポイント を落としてしまった。
|
|
|
|
|
Name: BEMANI ..中級者(13,796ポイント)
Date: 2009/01/30(金) 00:43
No:27962
|
|
Title: Re:龍神録で遊んでみました。
|
|
>>yuさん
何事も練習が大事です><
練習すれば、きっと龍神録も簡単に・・・・・・
なりませんね・・・。
>プログラム歴4か月の素人が・・・
たとえ完成度が高くなくても、
4か月でEXステージだけでも作れてるって凄いと思うのですが・・・
プレイ出来る日が来るのを楽しみにしときますw
2倍のポイントを手に入れた! 314ポイント を手に入れた。
|
|
|
|
Name: JT ..かけだし(1,513ポイント)
Date: 2009/01/29(木) 13:31
No:27918
|
|
Title: 無題
|
|
会社で一人で開発をしていますが独学だと限界を感じています。そして眠くなります。。。。入社1年未満ということもありますが女性だからという理由で出向先に行かせてもらえないのは辛いです
70ポイント を手に入れた。
|
|
|
|
Name: non ..プログラマー(32,647ポイント)
Date: 2009/01/29(木) 13:49
No:27922
|
|
Title: Re:無題
|
|
最近は、派遣先が少なくなって、男性だって待機が多いみたいですよ。
じっと我慢というより、折角、勉強できる時間をもらったと考えて、自己研鑽に励むのでしょうね。
つらい時期だとは思いますが、がんばってください。
それより、JT(かけだし) さんとJT (ぴよぴよ)さんは同一人物ですか?
78ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(24,260ポイント)
Date: 2009/01/29(木) 13:55
No:27924
|
|
Title: Re:無題
|
|
私は趣味でプログラミングしてるので楽しいですが
でも仕事になると苦痛になるかもしれませんね
自分もまったくの独学でやってますし昔のソース見るとひどいもんです
やっぱり経験を積んで知識を増やしていくしかないですよね
今はネットのおかげで1人でも大概のことは解決するので助かります
103ポイント を落としてしまった。
|
|
|
|
|
Name: Haru ..上級者(23,318ポイント)
Date: 2009/01/29(木) 14:08
No:27926
|
|
Title: Re:無題
|
|
dicさん
>ここは C言語何でも質問掲示板です
雑談もOKだったと思います^^;
JTさんも前回の事は反省なさっているようですので、
良いのではないでしょうか?(でも、もう一言ぐらいあっても悪い気はしませんよ*^^*)
私も同じ状況ですが、JTさんの方が私より何歩も先にいるように感じます(性別は違いますが;)
頑張りましょう。
102ポイント を手に入れた。
|
|
|
|
|
Name: JT ..ぴよぴよ(356ポイント)
Date: 2009/01/29(木) 14:15
No:27927
|
|
Title: Re:無題
|
|
すごく反省しています>< Haruさんどちらが先に進んでるなんて瑣末だと思います。敵はいつも自分だー(笑)的なのりで
2倍のポイントを手に入れた! 92ポイント を手に入れた。
|
|
|
|
|
Name: Haru ..上級者(23,471ポイント)
Date: 2009/01/29(木) 15:13
No:27931
|
|
Title: Re:無題
|
|
>dicさん
>すいませんね
>タイトルが無題だったんで
>何を言いたいのかまったくわかりませんでしたので
いえ、私の発言でdicさんの気分を害されたようで
申し訳ありませんでした。
80ポイント を手に入れた。
|
|
|
|
|
Name: abc ..入門者(3,055ポイント)
Date: 2009/01/29(木) 18:30
No:27949
|
|
Title: Re:無題
|
|
俺も新人ですが、忙しいのと暇なのが順番に来る感じです。
いろいろなサイトをみたりしても飽きるし、自分でなにか作ろうとしても飽きるし、
やっぱ仕事でプログラム覚えるのが自分にはあってるようです。
ひとりって言うのがつらいかも知れませんががんばってくださいな(^^)
24ポイント を手に入れた。
|
|
|
|
Name: tmhr ..ぴよぴよ(859ポイント)
Date: 2009/01/29(木) 14:27
No:27928
|
|
Title: おすすめのプログラムを勉強できるサイト
|
|
ここ以外にお勧めのプログラムを勉強できるサイトは
ありませんか?よければ教えてください。
35ポイント を手に入れた。
|
|
|
|
Name: tmhr ..ぴよぴよ(923ポイント)
Date: 2009/01/29(木) 15:17
No:27932
|
|
Title: Re:おすすめのプログラムを勉強できるサイト
|
|
Haruさん教えて頂いてありがとうございます。
お気に入りに入れて頑張ってみます。
後聞きたいことがあるんですが
やっぱりC++より先にC言語を学んだ方がいいですか?
64ポイント を手に入れた。
|
|
|
|
|
Name: tmhr ..ぴよぴよ(958ポイント)
Date: 2009/01/29(木) 15:37
No:27934
|
|
Title: Re:おすすめのプログラムを勉強できるサイト
|
|
やはりそうですか
プログラムを勉強するときは用語などを
ノートにまとめたりして勉強するんですか。
35ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(144,250ポイント)
Date: 2009/01/29(木) 16:03
No:27936
|
|
Title: Re:おすすめのプログラムを勉強できるサイト
|
|
それも重要だけど、ひたすらプログラムを書くのが一番の勉強だと思いますよ(^-^)
6ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(54,327ポイント)
Date: 2009/01/29(木) 16:04
No:27937
|
|
Title: Re:おすすめのプログラムを勉強できるサイト
|
|
私の場合は「勉強」というより「覚える」方でしたので、普通の勉強のように
ノートに書いたりすることはありませんでした(独学)。
プログラミングは技術ですので、用語とかはノートに書いたり、
頭に叩き入れるなりして覚えていけばいいと思いますが、
コードの方は、実際に自分で書いて実行して覚えるのが一番かと思います。
ノートにコードを書くだけだと、
そのコードが正しいのか、希望通り動作するのか分からないですからね。
# ぶっちゃけ、用語は重要な部分以外覚えなくてもプログラムは書けます。
# 必要になったらその時に覚えれば良いので。
237ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(53,264ポイント)
Date: 2009/01/29(木) 16:21
No:27940
|
|
Title: Re:おすすめのプログラムを勉強できるサイト
|
|
確かにノートはほとんど使わないかと思いますねー。
使うとしたら・・・ちょっと規模の大きなものを作る時に
なぐり書きにこんな構造にしようとか「授業中」にやるぐらいですかn(ry
自分もまだ知らない用語めちゃくちゃありますが・・・
そのつど、ぐーぐる先生を有効活用しましょうw
初めは「勉強」としてとらえるより「趣味」と考えたほうが楽ですかね^^;
このサイトの中心を担う(?)ゲームプログラミングにもし興味があれば
コードをコピペ&実行だけでもかなり楽しいですよ。
自分はC言語知識皆無でここのゲームプログラミングから始めましたw
わからないことがあったらそのつど調べる→詰まる→単元を絞って基礎から集中的にやる
回りくどいですが、こんな方法でも楽しく勉強できます。(自分パターン)
268ポイント を手に入れた。
|
|
|
|
|
Name: Haru ..上級者(23,541ポイント)
Date: 2009/01/29(木) 16:32
No:27941
|
|
Title: Re:おすすめのプログラムを勉強できるサイト
|
|
私も、知らなかった関数をメモ帳に書いておくぐらいですね。
>kazuoniさん
>初めは「勉強」としてとらえるより「趣味」と考えたほうが楽ですかね^^;
「趣味」として考えられる方が羨ましいです。
私には無理です・・・orz
70ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(53,374ポイント)
Date: 2009/01/29(木) 16:54
No:27943
|
|
Title: Re:おすすめのプログラムを勉強できるサイト
|
|
>Haruさん
自分も最初は勉強でした。
でもそうなるとすぐ飽きたり
TAさんにごますって半分以上実装してもらったり・・・
初めは楽しくなかったです。。
でも幸い、ゲームが昔から好きだったので、
趣味としてやりはじめ、あとは苦にならないです^^;
でも好きと出来るは一致しない・・・です(泣)
110ポイント を手に入れた。
|
|
|
|
|
Name: tmhr ..ぴよぴよ(976ポイント)
Date: 2009/01/29(木) 17:16
No:27945
| 解決!
|
Title: Re:おすすめのプログラムを勉強できるサイト
|
|
みなさんのおかげでいろいろと
考えがまとまりました、ありがとうございました。
参考にして頑張っていきたいと思います。
18ポイント を手に入れた。
|
|
|
|
Name: じゃん ..ぴよぴよ(169ポイント)
Date: 2009/01/29(木) 10:43
No:27914
|
|
Title: LinuxからWindowsのDBへの接続について
|
|
お世話になります。
LinuxからWindowsのSQL Serverに接続して、検索(SELECT)や登録(INSERT)などを行う方法を教えてください。SQL Serverへの接続には、ODBCを利用すればいいと思うのですが、Cのプログラムではその部分をどのように記述すればいいのかわからず悩んでいます。サイトもいろいろ調べたのですが、なかなか参考になるサイトが見つかりませんでした(探し方が下手なのかもしれませんが・・・)。わかる方いらっしゃいましたら、ご教授の程よろしくお願いします。
126ポイント を手に入れた。
|
|
|
|
Name: JT ..ぴよぴよ(256ポイント)
Date: 2009/01/29(木) 10:51
No:27915
|
|
Title: Re:LinuxからWindowsのDBへの接続について
|
|
Linuxの教科書―ホントに読んでほしいroot入門講座 この本を購入してはいかがでしょうか?アマゾンで中身が少し見れます
2倍のポイントを手に入れた! 96ポイント を手に入れた。
|
|
|
|
Name: akihito ..かけだし(1,049ポイント)
Date: 2009/01/21(水) 10:53
No:27288
|
|
Title: 14歳シリーズ
|
|
今のゲームでは自キャラが一回やられるとすぐにゲームオーバーになってしまう。
自キャラの数を記憶するグローバル変数を用意し、3機までやられてもOKなように変更する。
DrawGameMain関数の修正で対応可能。ちょっとずるで自キャラのamodeをA_HARDに、lifeを3に修正するという方法もとれます。その場合はAtariHantei関数を修正する。
どちらの方法もわかりません(泣)
171ポイント を手に入れた。
|
|
|
|
Name: Mist ..熟練のプログラマー(43,676ポイント)
Date: 2009/01/21(水) 11:05
No:27291
|
|
Title: Re:14歳シリーズ
|
|
> 自キャラの数を記憶するグローバル変数を用意し、3機までやられてもOKなように変更する。
この方法については前回の質問でMikanさんが答えてくれてますよ。
17ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(962,385ポイント)
Date: 2009/01/21(水) 13:29
No:27303
|
|
Title: Re:14歳シリーズ
|
|
jikidata.life = 3;
としてあるので、グローバル変数用意する必要ないんじゃないですか?
あたった瞬間これ減らして、ライフが0になったらゲームオーバーフラグを立てるみたいな感じでいいんじゃないでしょうか?
ゲームオーバーについての処理がよくわかりませんが、
.gameover
みたいな変数用意して、そのフラグがオンになってたら
操作や弾計算関数などの関数を呼ばず、「ゲームオーバー」みたいに表示すればいいと思います。
169ポイント を手に入れた。
|
|
|
|
|
Name: Mikan ..かけだし(1,663ポイント)
Date: 2009/01/22(木) 00:05
No:27407
|
|
Title: Re:14歳シリーズ
|
|
うーんと、掲示されているソースファイルだけだと
全体が見えないので詳しい説明ができません。
ゲームの状態別に処理をしているソースファイルや、
ゲームオーバーの処理をしているソースファイルを掲示されますと
もう少し詳しく説明することができます。
136ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..中級者(9,738ポイント)
Date: 2009/01/26(月) 12:23
No:27692
|
|
Title: Re:14歳シリーズ
|
|
>>akihitoさん
ゲーム本体の実行という場所で、
if(AtariHantei() == 1 || MapAtari() == 1) {
gstate = GAME_OVER;
と書かれていました。
で、AtariHantei()を見させて頂いたところ、IsAtari()が呼ばれており、
その中で、当たったら retval = 1 として、retvalを戻り値としています。
そして、retval が 1 であれば AtariHantei() の中で return(1) として戻り値を返しています。
ですので、if(AtariHantei() == 1 || MapAtari() == 1) の部分で、
一度当たると AtariHantei の戻り値が 1 となりますので、結果、
gstate = GAME_OVER となり、ゲームーオーバーになってしまうんだと思います。
「自機のライフが0になったらゲームオーバー」とするには、
retval = 1; の描く場所を変えればいいような気がします。
今のままですと、当たったら100% retval = 1 となり、ゲームオーバーになります。
ですので、retval = 1 を a->life = 0; と b->life = 0; の次の行に書けばいいんだと思います。
そうしてあげれば、ライフが0になった時だけゲームオーバーになるはずです。
ざっと見ただけなので、間違ってたら非常に申し訳ないのです;;
534ポイント を手に入れた。
|
|
|
|
|
Name: Mikan [URL] ..初心者(5,482ポイント)
Date: 2009/01/27(火) 13:34
No:27769
|
|
Title: Re:14歳シリーズ
|
|
>このやり方でもだめみたいでした(泣)
うーん、やっぱりif(AtariHantei() == 1 || MapAtari() == 1) で
MapAtari()が必ず1を返してきているとかでしょうか?
上記if文の下で
if( jikidata.life <= 0 ){
//ゲームオーバーの処理
}
と変更してみてはいかがでしょうか?
117ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..中級者(11,167ポイント)
Date: 2009/01/27(火) 16:23
No:27819
|
|
Title: Re:14歳シリーズ
|
|
>>akihitoさん
すいません、内容を誤解していたみたいです;
上に書いたコードですと「ライフは残っているが、敵弾に当たった」
場合、retval に 1 が入らないですね;
申し訳ないです;
ですので、上のコードはスルーして頂いて、
Mikanさんが書かれている「jikidata.life が 0 の時にゲームオーバー処理」へ
というのが良さそうです;
>>Mikanさん
>うーん、やっぱりif(AtariHantei() == 1 || MapAtari() == 1) で
>MapAtari()が必ず1を返してきているとかでしょうか?
ライフが0の時に1を返すように変えたので、おそらく、MapAtari()で 1 が返ってきてるっぽいです。
>if( jikidata.life <= 0 ){
>//ゲームオーバーの処理
>}
これがいいかもしれませんね><
286ポイント を手に入れた。
|
|
|
|
|
Name: akihito ..かけだし(1,167ポイント)
Date: 2009/01/29(木) 13:46
No:27921
|
|
Title: Re:14歳シリーズ
|
|
BEMANIさんMikanさん!!
おかげさまで完成させることができました。
本当に感謝です。
ありがとうございます。
43ポイント を手に入れた。
|
|
|
|
Name: yu ..初心者(7,130ポイント)
Date: 2009/01/27(火) 09:46
No:27746
|
|
Title: 授業でしてたのですが
|
|
#include <stdio.h>
#include <math.h>
#define NUM1 3
#define NUM2 4
#define NUM3 3
/* 各重量範囲での上限重量(規定サイズ内) */
const int Weight_tbl1[NUM1] = {25, 60, 100},
Price_tbl[NUM1] = {50, 80, 150};
/* 各重量範囲での上限重量(規定サイズ外) */
const int Weight_tbl2[NUM2] = {50, 100, 500, 1000};
const int Size_tbl [NUM3] = {60, 100, 150},
Mag_tbl [NUM3] = {1, 3, 4};
const int Min_size = 20, Max_size = 40, Max_weight = 10000;
const int Unit_price = 2, Base_price = 600, Ext_price = 100;
void calc_carriage(int, int, int, int *, int *);
void calc_carriage(int weight, int size, int dist_mode,
int *class, int *price){
int i;
if(weight <= Weight_tbl2[NUM2 - 1]){
if((size >= Min_size) && (size <= Max_size) &&
(weight <= Weight_tbl1[NUM1 - 1])){
*class = 1;
for(i = 0; weight > Weight_tbl1[i]; i++);
*price = Price_tbl[i];
}else{
*class = 2;
for(i = 0; weight > Weight_tbl2[i]; i++);
*price = Weight_tbl2[i] * Unit_price;
}
}else if(weight <= Max_weight){
if(size <= Size_tbl[NUM3 - 1]){
*class = 3;
for(i = 0; size > Size_tbl[i]; i++);
*price = (Base_price + dist_mode * Ext_price) * Mag_tbl[i];
}else{
*class = -1;
*price = 0;
}
}else{
*class = -2;
*price = 0;
}
}
これに何を付け足すとエラーが直るのか解りません。まだC言語もわかっていないので。
一週間くらいずっと考えてます。
766ポイント を手に入れた。
|
|
|
|
Name: abc ..入門者(3,031ポイント)
Date: 2009/01/27(火) 09:57
No:27748
|
|
Title: Re:授業でしてたのですが
|
|
エラー内容を教えてもらいたいです。
もしかしてclassを変数として使っている?そうならclasssにすればいけるかもです笑
59ポイント を手に入れた。
|
|
|
|
|
Name: yu ..初心者(7,563ポイント)
Date: 2009/01/27(火) 11:12
No:27752
|
|
Title: Re:授業でしてたのですが
|
|
0127 error LNK2019: 未解決の外部シンボル _main が関数 _mainCRTStartup で参照されました。
が出てきたので、int main(void){ return 0; }
をつけたら、
error C2065: 'class' : 定義されていない識別子です。
error C2065: 'dist_mode' : 定義されていない識別子です。
error C2065: 'price' : 定義されていない識別子です。
error C2065: 'size' : 定義されていない識別子です。
error C2065: 'weight' : 定義されていない識別子です。
error C2100: 間接指定演算子 (*) の使い方が正しくありません。
error C2100: 間接指定演算子 (*) の使い方が正しくありません。
error C2100: 間接指定演算子 (*) の使い方が正しくありません。
error C2100: 間接指定演算子 (*) の使い方が正しくありません。
error C2100: 間接指定演算子 (*) の使い方が正しくありません。
error C2100: 間接指定演算子 (*) の使い方が正しくありません。
error C2100: 間接指定演算子 (*) の使い方が正しくありません。
0127\0127.c(46): error C2100: 間接指定演算子 (*) の使い方が正しくありません。
error C2100: 間接指定演算子 (*) の使い方が正しくありません。
error C2100: 間接指定演算子 (*) の使い方が正しくありません。
error C2143: 構文エラー : ';' が '{' の前にありません。
と・・・沢山もエラーが出ます;;
433ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(53,589ポイント)
Date: 2009/01/27(火) 11:24
No:27755
|
|
Title: Re:授業でしてたのですが
|
|
> int main(void){ return 0; }
これではせっかく作った関数が呼ばれないで即終了しますが良いのでしょうか。
原因は変数名に C++ の予約語である class を使っているせいではないでしょうか。
で、コンパイルで C++ としてコンパイルされたためエラーが出ていると思います。
abc さんの方法で変数名を変えるか、
プロジェクトのプロパティでソースを C としてコンパイルするように設定を変更すれば
多分OKだと思います。
147ポイント を手に入れた。
|
|
|
|
|
Name: yu ..初心者(7,599ポイント)
Date: 2009/01/27(火) 11:53
No:27759
|
|
Title: Re:授業でしてたのですが
|
|
main・・を外してやってみたのですが、C2085: 'calc_carriage' : 仮引数リスト内にありません。
というエラーが出てきてしまいました;;
お二人の方、ありがとうございます!!
36ポイント を手に入れた。
|
|
|
|
|
Name: yu ..初心者(7,672ポイント)
Date: 2009/01/27(火) 11:59
No:27760
|
|
Title: Re:授業でしてたのですが
|
|
やぱっり、0127 error LNK2019: 未解決の外部シンボル _main が関数 _mainCRTStartup で参照されました。
が出てきます;;
上記のは教えていただいたのとで解決したのですが。main()・・・を付けるのですよね?
73ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(53,817ポイント)
Date: 2009/01/27(火) 12:10
No:27763
|
|
Title: Re:授業でしてたのですが
|
|
プログラムを実行するのに、 この場合、一番初めに呼ばれる関数である main は必須です。
上記で、
> これではせっかく作った関数が呼ばれないで即終了しますが良いのでしょうか。
と、書いたのは、main 関数が終了するとプログラムが終了するため、
main 関数内で calc_carriage 関数を呼び出していないので、
何の処理も行わずにプログラムが終了してしまいますよ、という意味です。
2倍のポイントを手に入れた! 228ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..上級者(21,263ポイント)
Date: 2009/01/27(火) 12:20
No:27765
|
|
Title: Re:授業でしてたのですが
|
|
main関数は一番最初に実行される部分です。
なのでmainは必ず必要です。
int main(void){ return 0; }
としてしまうと、中身は何もない(なにも実行しない)
プログラムとなってしまいます。
これではせっかく作ったcalc_carriageが呼び出されないので、
ちゃんと動いてくれる(自分の望む結果が得られる)かどうかわかないですよね??
main(void){
(略)
calc_carriage(引数)
(略)
}
という感じにするとcalc_carriageが呼び出されますよ。
236ポイント を手に入れた。
|
|
|
|
|
Name: yu ..初心者(7,746ポイント)
Date: 2009/01/27(火) 13:33
No:27768
|
|
Title: Re:授業でしてたのですが
|
|
ありがとうございます。
いまは授業で使ってる教室が違うので、休み時間に直しにいってきます!!
自身で解決出来るようにこれから頑張ります。
74ポイント を手に入れた。
|
|
|
|
|
Name: メッケツヤロオ ..ぴよぴよ(212ポイント)
Date: 2009/01/28(水) 23:02
No:27902
|
|
Title: Re:画像
|
|
文に
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
これのどこに画像のファイル名を打つんですか?
195ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..上級者(21,392ポイント)
Date: 2009/01/28(水) 23:50
No:27904
|
|
Title: Re:画像
|
|
ちゃんとゲームプログラミングの館をご覧んになられていれば分かるはずですよ。
LoadGraphScreen( x座標 , y座標 , "ファイル名" , TRUE or FALSE ) ;
通りすがりさんもおっしゃられていますが、ソースコードを見ても
ファイル名しか思えない部分がありますよね^^
129ポイント を手に入れた。
|
|
|
|
Name: みゅーる ..ぴよぴよ(213ポイント)
Date: 2009/01/28(水) 22:04
No:27899
|
|
Title: 文字列の削除について
|
|
宜しくお願いします。
C言語で質問させてください。
文字列の頭から決まった文字数だけ削除したいのですが、
標準関数?というのでしょうか、便利な関数はないでしょうか?
#include<stdio.h>
#include<string.h>
void main()
{
char moji[]="何かしらの文字列";
char moji2[]="何かしらの文字列2";
int a;
a=strlen(moji); //←mojiの文字数分をmoji2の頭から削除したい・・・
}
213ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(54,031ポイント)
Date: 2009/01/28(水) 22:16
No:27900
|
|
Title: Re:文字列の削除について
|
|
単に文字数分を削除するなら、
const char* ofs_str( const char* str, int len ){
return str + len;
}
で、擬似的に削除できます。
(この関数の戻り値を使用すれば削除されたように見えます)
もし、バッファ内の文字を本当に削除する(削除した分を詰める)なら、
void str_shift( char* str, int len ){
char* ofs = str + len;
memmove( str, ofs, strlen(ofs) + 1 );
}
で、可能なはずです。
214ポイント を手に入れた。
|
|
|
|
|
Name: みゅーる ..ぴよぴよ(248ポイント)
Date: 2009/01/28(水) 22:29
No:27901
| 解決!
|
Title: Re:文字列の削除について
|
|
御津凪さん、お返事ありがとうございます。
memmove()のほうを試してみたいと思います!
ありがとうございました!
35ポイント を手に入れた。
|
|
|
|
Name: 七誌 ..かけだし(1,494ポイント)
Date: 2009/01/28(水) 18:43
No:27893
|
|
Title: 透過画像について
|
|
初めましてです。
画像について質問したいことがあって投稿させて頂きました。
既出だったらすみません。
黒い64px四方の画像を半透明にして使いたいのですが、
アルファブレンドで設定しても最初から半透明の画像にしても真っ黒で
表示されてしまいます。
真っ黒が原因かもと思いR10,B10,G10にしてみましたが結果は同じでした。
ちなみに他の透過したい画像は透過されて表示されます。
どうしたら上手く透過されるのでしょうか?
教えていただけると幸いです。
166ポイント を手に入れた。
|
|
|
|
Name: yu ..初心者(8,982ポイント)
Date: 2009/01/28(水) 18:50
No:27894
|
|
Title: Re:透過画像について
|
|
DXライブラリーを使用している場合ですが、
DrawGraph(0,0,handle,FALSE);
のような描画関数を使用するとき
今、FALSEとなっているところが(4番目の引数
TRUEかFALSEかで透過色を使うか使わないかを設定できます。
TRUEで透過色を使用する、FALSEで使わないです。
TRUEになっていて、透過色が付かない場合は、すみませんがわかりません;
150ポイント を手に入れた。
|
|
|
|
|
Name: 七誌 ..かけだし(1,597ポイント)
Date: 2009/01/28(水) 19:01
No:27895
|
|
Title: Re:透過画像について
|
|
早速ありがとうございますm(_ _)m
第4引数はTRUEでやってます。
何度やっても真っ黒です・・・orz
http://dixq.net/g/#22
ゲームプログラミングの館の22.キャラを4方向に動かせるの白色の上に、
透過がわかる様にキャラ画像を置いて、表示させようとしていますが、
きれいに潰されてしまいます><
103ポイント を手に入れた。
|
|
|
|
|
Name: yu ..中級者(9,101ポイント)
Date: 2009/01/28(水) 19:45
No:27896
|
|
Title: Re:透過画像について
|
|
>きれいに潰されてしまいます
白色だけしか表示されないということでしょうか?
そうだとしたら
描画順序がキャラの方が早いのではないでしょうか?
キャラ描画のあとに背景を描画すると背景の下にキャラが描画されているので
キャラがわからないことになりますよ。
キャラと背景の描画順序を変更してみてください。
# すみません、しっかり読んでいませんでした;
キャラの周りが黒く塗りつぶされているんですね。
描画順序は関係ないですね orz
119ポイント を手に入れた。
|
|
|
|
|
Name: 七誌 ..かけだし(1,730ポイント)
Date: 2009/01/28(水) 20:13
No:27897
|
|
Title: Re:透過画像について
|
|
わかりにくい質問すみません。
キャラ描画の後に透過処理した黒い画像を表示させたいのですが
透過されていないのです。
(透過されればうっすらでもキャラが見えるはず。)
他の事前に透過処理された画像は表示されるため(アルファブレンド使用時も)
黒色ってところに問題がありそうですが・・・。
133ポイント を手に入れた。
|
|
|
|
|
Name: 七誌 ..かけだし(1,820ポイント)
Date: 2009/01/28(水) 20:21
No:27898
| 解決!
|
Title: Re:透過画像について
|
|
すみません。
自己解決しちゃいましたm(_ _)m
while文でループしていて背景再描画をしなかったので透過率90%→80%→70%...
とだんだん濃くなっていたようです。。
本当にすみません><
回答してくれた皆様ありがとうございましたm(_ _)m
90ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(972,641ポイント)
Date: 2009/01/27(火) 20:59
No:27838
|
|
Title: 荒らし行為について
|
|
今日は酷い荒らしがありました。人に迷惑のかかる行為はどうかご遠慮下さい。
ちゃんとした対処しようと思ったのですが、やはり発言したくない事ばかり発言しないといけないことになるので今回はやめました。
今回は記事を消す以外何もしていません。
何かを禁止する行為や忠告する行為はあまり行いたくありませんので。。。
腹が立つことがあったりするかもしれませんが、どうか、大人の心で対応して下さる事を願います。
107ポイント を手に入れた。
|
|
|
|
Name: BEMANI ..中級者(11,213ポイント)
Date: 2009/01/27(火) 21:22
No:27843
|
|
Title: Re:荒らし行為について
|
|
>>kazuoniさん
口をはさんだ〜、ということなら気にしなくてもいいと思いますよ。
始めてみたら「なんや!」って思いますよね;
46ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(973,899ポイント)
Date: 2009/01/28(水) 09:36
No:27874
|
|
Title: Re:荒らし行為について
|
|
ごめんなさい、その辺につきましては、規約欄にて
「
6 管理人の権限と責務
●こちらで解る個人情報について公の場で一切公開しません。
」
と書いており、こちら側でわかる情報は一切公の場で発言しないこととしているので、
その辺は秘密にさせて下さい。
アクセス場所によっては、かなり具体的に個人情報がわかってしまう場合がある為、
このような規約が無いと、安心して利用する事が難しいのでは無いかと思い設定しました。
また、晒し行為のようなことをすると、いつまでもわかりあう事は出来ないと思いますので・・。
ただしあまりにも悪質な荒らしが続くことがもしあれば規約改定の検討はさせていただく場合があるかもしれません。
今回はご迷惑おかけしました。
今後もよりよい掲示板運営に努めてまいりますのでよろしくお願いしますm(_ _)m
ししおさん、今からメールを送りますので、ご覧下さい。
217ポイント を手に入れた。
|
|
|
|
|
Name: (削除) ..ぴよぴよ(0ポイント)
Date: 2009/01/28(水) 09:47
No:27875
|
|
Title: Re:荒らし行為について
|
|
(成りすましと判断された為、管理人により削除されました)
5ポイント を落としてしまった。
|
|
|
|
|
Name: JT ..ぴよぴよ(160ポイント)
Date: 2009/01/28(水) 09:54
No:27876
|
|
Title: Re:荒らし行為について
|
|
すみません。本当は私がやりました もうこの掲示板には投稿しません 今までありがとうございました
41ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(974,005ポイント)
Date: 2009/01/28(水) 11:20
No:27880
|
|
Title: Re:荒らし行為について
|
|
削除しました。
※ 誤解のないよう追記します。(13:07)
27875の投稿は成りすましによるもので、Mistさんの投稿ではありませんでした。
>>JTさん
規約を守った投稿をして頂ければ皆さんまた回答して頂けると思います。
また、質問をきちんとわかりやすく行う事で、より確かな回答が得られます。
質問の仕方がわからない時は、規約に質問の仕方を細かく紹介していますので、参考にして下さい。
106ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(24,185ポイント)
Date: 2009/01/28(水) 17:19
No:27890
|
|
Title: Re:荒らし行為について
|
|
私はIPやホストが表示されてもかまわないのですが
でも学校や会社から書き込む人もいるでしょうから表示しないほうがいいのでしょうね
35ポイント を手に入れた。
|
|
|
|
Name: サッピ♪ ..ぴよぴよ(43ポイント)
Date: 2009/01/25(日) 21:17
No:27663
|
|
Title: この問題が難しすぎてわかりません。
|
|
何か昔の問題集を見ていたら、
1つだけよくわからないのがありました。
それにヒントを下さい。
最終的には答えも…。
(5)
この後にあるプログラムの中の「■■■■」の部分に必要なソースを記述して、
文字列"fea","aba","abx","cad","aca"をアルファベッドの早い順に並べるプロ
グラムを完成させなさい。 (aba,abx,aca,cad,feaの順)
char型の二次元配列を用いること。配列の中で整列する。
また、■■■■の部分は同じ記述になるとは限らない。
ここからプログラム
#include <stdio.h>
#include <string.h>
void d_sort(char str[][6]);
int main(void)
{
char str[5][6]={"fea","aba","abx","cad","aca"};
int i;
printf("整列前\n");
for(i = 0 ; i < 5 ; i ++)
{
printf("%s ",str[i]);
}
printf("\n\n");
d_sort(str);
printf("\n\n整列後\n");
for(i = 0 ; i < 5 ; i ++)
{
printf("%s ",str[i]);
}
printf("\n");
return 0;
}
void d_sort(char str[][6])
{
int i,j,k=0;
int cmp;
char buf[32];
for(i = 0 ; i < 5-1 ; i++)
{
for(j = 5-1 ; j > i ; j--)
{
cmp = strcmp(str[j], str[j-1]);
if(cmp < 0)
{
■■■■;
■■■■;
■■■■;
}
}
}
return ;
}
ここまでプログラム
43ポイント を手に入れた。
|
|
|
|
Name: abc ..入門者(2,600ポイント)
Date: 2009/01/26(月) 10:40
No:27675
|
|
Title: Re:問題が難しすぎてわかりません。
|
|
まず1番若いやつを探しましょう。例だとabaのやつ。
まず1文字目のaを他の1文字目と比べもし、aより若いやつがあったらそれが比較対照になり、
もし同じなら2文字目を比較し、って感じで1番若いやつをみつけ、2番目3番目とやっていったら、
ソートプログラムができるかなぁーたぶん笑
88ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..入門者(3,906ポイント)
Date: 2009/01/26(月) 12:42
No:27695
|
|
Title: Re:この問題が難しすぎてわかりません。
|
|
ヒントをくださいというのは方便に過ぎず、
結局は答え「だけ」がほしいのではありませんか?
自分で調べたり考えたりせずに答えだけ欲しているならば、
誰からも支援は得られないでしょう。
2倍のポイントを手に入れた! 120ポイント を手に入れた。
|
|
|
|
|
Name: サッピ♪ ..ぴよぴよ(293ポイント)
Date: 2009/01/27(火) 12:04
No:27762
|
|
Title: Re:ちょっと忙しくなってしまって返事ができませんでした。
|
|
【aより若いやつがあったらそれが比較対照になり、
もし同じなら2文字目を比較し1番若いやつをみつけ、
2番目3番目とやっていったら】
というのは
a>aba,abx,cad,aca
*a>aba,abx,cad,aca
**a>aba,abx,cad,aca
ということですか?
【ヒントをくださいというのは方便に過ぎず、
結局は答え「だけ」がほしいのではありませんか? 】
すみません、投稿した後にちょっと他の事で立て込んでしまって
なかんか返事を返すことができませんでした。
250ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(32,886ポイント)
Date: 2009/01/27(火) 12:31
No:27766
|
|
Title: Re:ちょっと忙しくなってしまって返事ができませんでした。
|
|
サッピ♪さんが質問されている意味がわかりません。
まず、前にも書いてあったようにバブルソートについて調べて、数字の並べ替えだったら
どうすればよいか調べてください。その上で、質問してください。
2倍のポイントを手に入れた! 120ポイント を手に入れた。
|
|
|
|
|
Name: Haru ..上級者(23,216ポイント)
Date: 2009/01/27(火) 13:09
No:27767
|
|
Title: Re:ちょっと忙しくなってしまって返事ができませんでした。
|
|
ふとした疑問なのですが・・・
昔の問題集には解答がついてないのでしょうか?
24ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(82,118ポイント)
Date: 2009/01/27(火) 13:40
No:27770
|
|
Title: Re:ちょっと忙しくなってしまって返事ができませんでした。
|
|
答えが欲しいだけなら(そして動けばよいだけなら)...
} d_sort2(str); return; } } } int compare(const void *a, const void *b) { const char (*lhs)[6] = a
const char (*rhs)[6] = b; return strcmp(*lhs, *rhs); } d_sort2(str) char str[5][6]
{ { { { extern void qsort(void*, size_t, size_t, int(*)(const void*, const void*)); qsort(str, 5, 6, &compare)
↑の三つをそれぞれの■■■■に当てはめてください。
153ポイント を手に入れた。
|
|
|
|
|
Name: サッピ♪ ..ぴよぴよ(390ポイント)
Date: 2009/01/27(火) 15:40
No:27785
|
|
Title: Re:ちょっと忙しくなってしまって返事ができませんでした。
|
|
【問題集には解答がついてないのでしょうか?】
問題集の回答がないので、解説をみたりすることができません。
【答えが欲しいだけなら】
答えと解説を見て、
ちょっとづつエラーをなくしていこうと思っています。
97ポイント を手に入れた。
|
|
|
|
|
Name: やそ ..比類無きプログラマー(86,428ポイント)
Date: 2009/01/27(火) 18:40
No:27836
|
|
Title: Re:ちょっと忙しくなってしまって返事ができませんでした。
|
|
問題投げっぱなしの問題集って問題アリです(笑)
いくら昔のだからってねえ^^;
サッピ♪ さんはバブルソート理解できました?
概念を理解してもらわないと、解説するほうはものすごく大変なのです^^;
91ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(973,183ポイント)
Date: 2009/01/27(火) 22:01
No:27858
|
|
Title: Re:ちょっと忙しくなってしまって返事ができませんでした。
|
|
解答の無い問題集はあまり見たことないですが、参考書についてる問題には時々そういうのありますね。
しかし、その問題そのものの解答じゃないとダメですか?
例えば、今回の場合、文字コードやソートプログラムについての知識が必要だと思うので、
まずは分解して考えた方がいいように思います。
・バラバラの数字を代入した配列を昇順に並び替えるプログラム
・文字列に入っている各文字の文字コードを表示するプログラム
これが出来たら、
・文字列を辞書順に並び替えるプログラム
を作って練習し、最後に問題を解いてみてはどうでしょう。
その中で、どこがわからないのか具体的に教えていただければアドバイスがし易いかと思います。
2倍のポイントを手に入れた! 274ポイント を手に入れた。
|
|
|
|
|
Name: サッピ♪ ..ぴよぴよ(453ポイント)
Date: 2009/01/28(水) 13:16
No:27883
|
|
Title: Re:ちょっと忙しくなってしまって返事ができませんでした。
|
|
【問題投げっぱなしの問題集って問題アリです】
昔はあったんですよ(笑)
【バブルソート理解できました? 】
データを並べかえるソートで、基本的なアルゴのひとつですよね。
63ポイント を手に入れた。
|
|
|
|
Name: arc ..ぴよぴよ(30ポイント)
Date: 2009/01/28(水) 10:57
No:27878
|
|
Title: 敵の撃つ弾について
|
|
こんにちは初心者ですが、毎日チェックして参考にさせてもらっているarcというものです。
C言語で龍神録を元にシューティングを作っているのですが、雑魚敵に分裂弾を撃たせたいのですが、どうプログラミングしていいのかわかりません。よろしければ教えていただけませんか?
30ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(975,842ポイント)
Date: 2009/01/28(水) 11:37
No:27881
|
|
Title: Re:敵の撃つ弾について
|
|
こんにちは^^
参考にしてくださってありがとうございます☆
では
http://dixq.net/rp/14.html
こちらを例に紹介します。
こちらの中央下部分に
//ばらまきショット(減速)
void shot_bullet_H006(int n){
int t=shot[n].cnt;
int k;
if(t>=0 && t<120 && t%2==0){
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].knd =enemy[shot[n].num].blknd2;
shot[n].bullet[k].angle =shotatan2(n)+rang(PI/4);
shot[n].bullet[k].flag =1;
shot[n].bullet[k].x =enemy[shot[n].num].x;
shot[n].bullet[k].y =enemy[shot[n].num].y;
shot[n].bullet[k].col =enemy[shot[n].num].col;
shot[n].bullet[k].cnt =0;
shot[n].bullet[k].spd =4+rang(2);
se_flag[0]=1;
}
}
for(int i=0;i<SHOT_BULLET_MAX;i++){//全弾分ループ
if(shot[n].bullet[i].spd>1.5)//速度が1.5より大きいものがあれば
shot[n].bullet[i].spd-=0.04;//減速
}
}
こんなのありますよね。この青字の部分は現在発射中の弾を見つけて制御しているのです。
ですので、ここで適切な弾を見つけて発射させてやればいいです。
サンプル書いてみました。まず弾の識別番号stateを0として大玉を発射します。
大玉を常に計算しつつ、発射後1秒たった瞬間に、
その位置からさらに100個弾を発射しています。
下の意味がよくわからなければまた聞いて下さい。
14章のshotH.cppにある
void shot_bullet_H000(int n)
関数を以下の関数に書き換えて実行してみて下さい。
void shot_bullet_H000(int n){
int t=shot[n].cnt;
int k;
if(t==0){
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].knd =0;
shot[n].bullet[k].angle =PI/2;
shot[n].bullet[k].flag =1;
shot[n].bullet[k].x =enemy[shot[n].num].x;
shot[n].bullet[k].y =enemy[shot[n].num].y;
shot[n].bullet[k].col =0;
shot[n].bullet[k].cnt =0;
shot[n].bullet[k].spd =2;
shot[n].bullet[k].state =0;//分裂させる弾ですよ
se_flag[0]=1;
}
}
for(int i=0;i<SHOT_BULLET_MAX;i++){
if(shot[n].bullet[i].flag==1){//現在登録されている弾なら
if(shot[n].bullet[i].state==0){//分裂させる弾なら
if(shot[n].bullet[i].cnt==60){//発射して1秒後なら
for(int s=0;s<100;s++){
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].knd =6;
shot[n].bullet[k].angle =rang(PI);
shot[n].bullet[k].flag =1;
shot[n].bullet[k].x =shot[n].bullet[i].x;
shot[n].bullet[k].y =shot[n].bullet[i].y;
shot[n].bullet[k].col =0;
shot[n].bullet[k].cnt =0;
shot[n].bullet[k].spd =1.5+rang(0.5);
shot[n].bullet[k].state =1;//分裂させない弾ですよ
se_flag[0]=1;
}
}
shot[n].bullet[i].flag=0;//元の弾消す
}
}
}
}
}
1,837ポイント を手に入れた。
|
|
|
|
|
Name: arc ..ぴよぴよ(70ポイント)
Date: 2009/01/28(水) 11:46
No:27882
|
|
Title: Re:敵の撃つ弾について
|
|
解決しました!
わかりやすい説明の上、ソースまで書いていただいてありがとうございます^^
そして質問を見返すとかなり抽象的な文章でしたのでお詫びします。
管理人様どうもありがとうございます。
40ポイント を手に入れた。
|
|
|
|
Name: スライク ..ぴよぴよ(861ポイント)
Date: 2009/01/27(火) 23:01
No:27864
|
|
Title: while文について
|
|
またお世話になります。
猫でもわかるの本でwhileに差し掛かったのですが疑問に思いましたので質問させていただきます。
#include<stdio.h>
int main(void)
{
int i=10;
while(i>0){
printf("%2d回目の実行です\n",11-i);
i--;
}
return 0;
}
これでできたのですが
%2dっていったいなんで2がつくんですか?さっぱりわかりません。
お願いします。
34ポイント を手に入れた。
|
|
|
|
Name: たか ..入門者(2,871ポイント)
Date: 2009/01/27(火) 23:06
No:27865
|
|
Title: Re:while文について
|
|
「書式指定フィールド」については46p〜50pに詳しく載っていますよ。
それでも分からなかった場合また質問してみてはどうでしょう?
66ポイント を手に入れた。
|
|
|
|
|
Name: スライク ..ぴよぴよ(885ポイント)
Date: 2009/01/27(火) 23:15
No:27867
| 解決!
|
Title: Re:while文について
|
|
>>たかさん
載っていました!ありがとうございます。
>>kazuoniさん
ご指摘ありがとうございます。
見落としていました^^
24ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..入門者(3,926ポイント)
Date: 2009/01/27(火) 23:34
No:27868
|
|
Title: Re:while文について
|
|
タイトルと本文が食い違っています。
whileとは全く関係ない話ですね。
2倍のポイントを手に入れた! 20ポイント を手に入れた。
|
|
|
|
Name: ひよこ ..中級者(9,940ポイント)
Date: 2009/01/27(火) 21:19
No:27842
|
|
Title: Dixqさん、あくまでサンプルなんですが
|
|
あくまでサンプルなのですが、マリオっぽいのができたんですが、Dixqさんに見てもらいたいんですがどうすればいいでしょうか。
38ポイント を手に入れた。
|
|
|
|
Name: 銘茶ハリガネ ..ぴよぴよ(78ポイント)
Date: 2009/01/27(火) 21:24
No:27844
|
|
Title: Re:Dixqさん、あくまでサンプルなんですが
|
|
実行ファイルとそのソフトで読み込む画像や音声ファイルなどをzipファイル
にしてここの掲示板に書き込む時に添付ファイルとして送ると手っ取り早いです。
サイズが大きいときは、アップローダを探してそこにリンクを張るといいです。
36ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..中級者(10,023ポイント)
Date: 2009/01/27(火) 21:32
No:27846
|
|
Title: Re:Dixqさん、あくまでサンプルなんですが
|
|
いろいろな素材についてなんですけど効果音がまだついてなくてサンプルプログラムについていたtest.wavとDXライブラリのジャンプのプログラムを使っているんですけどプログラムは自由に使っていいですなんてかいていいんでしょうか?test.wavもどう権利について書けばよろしいのでしょうか?
83ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(47,659ポイント)
Date: 2009/01/27(火) 21:44
No:27851
|
|
Title: Re:Dixqさん、あくまでサンプルなんですが
|
|
ネット上で公開しているようなソースコードであれば基本的に問題ないでしょう。
公開しているページで「無断転載禁止」とか書いてあるのであればまずいですけど。
ゲームを見てもらいたいのあればソースは関係ないんじゃないの?
exeと音楽・画像だけあれば十分たど思うんだけど。
70ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..中級者(10,049ポイント)
Date: 2009/01/27(火) 21:49
No:27854
| 解決!
|
Title: Re:Dixqさん、あくまでサンプルなんですが
|
|
銘茶ハリガネさん、Mistさんありがとうございます。
16ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(82,397ポイント)
Date: 2009/01/27(火) 21:51
No:27855
|
|
Title: Re:Dixqさん、あくまでサンプルなんですが
|
|
> ネット上で公開しているようなソースコードであれば基本的に問題ないでしょう。
> 公開しているページで「無断転載禁止」とか書いてあるのであればまずいですけど。
この認識は根本的に間違っています。
その論法でいけば、ネット上で公開している映画や音楽も「無断転載禁止」と書かれていなければ使ってよいことになってしまいます。
公開していようがいまいが、原則的に無断転載は禁止です。
自由に無断転載してもよいと書かれていた場合に限り、勝手に無断転載してもよいことになります。
それ以外は個別に交渉・契約する必要があります。
Copyrightについても、少なくとも日本国内では書いていようがいまいが法的には関係ありません。
これについては、以前↓で書きましたのでご参考まで。
http://webboy.biz/?p=554
91ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(972,830ポイント)
Date: 2009/01/27(火) 21:55
No:27856
|
|
Title: Re:Dixqさん、あくまでサンプルなんですが
|
|
大変恐縮なお言葉ありがとうございます^^;
私に送ってくださるのでしたらそのままメールに添付して頂いたら良いと思います。
ただ、明後日修論の提出日で、一昨日から家にも帰れない状態でして・・^^;
大変ありがたいのですが、正直、現在送っていただいても遊べるかどうかわからないです;
どこかのアップローダにアップして、ここにリンク貼って皆さんに見ていただいてはどうでしょう?
効果音が必要ならフリーの効果音に差し替えてアップしてはどうでしょう?
ザマッチメーカーズさんのサイトとかに行けば無数に素材がありますよ。
私もお世話になってます。
189ポイント を手に入れた。
|
|
|
|
Name: 匿名 ..中級者(9,907ポイント)
Date: 2009/01/26(月) 16:25
No:27713
|
|
Title: atan2: DOMAIN error
|
|
atan2関数を使うとatan2: DOMAIN errorと出ることがあるのですが、これって何が原因なんでしょうか?
34ポイント を手に入れた。
|
|
|
|
Name: 匿名 ..中級者(10,065ポイント)
Date: 2009/01/27(火) 19:54
No:27837
| 解決!
|
Title: Re:atan2: DOMAIN error
|
|
やっぱりそうですか、一応因数が両方とも0なら処理を行わないようにしてみたんですがどこか間違っていたみたいですね。これで確信が持てたので徹底的に条件分岐してみます。どうもありがとうございました。
2倍のポイントを手に入れた! 158ポイント を手に入れた。
|
|
|
|
|