ゲームのアルゴリズムを教えて管sai (199レス)
1-

86: 名前は開発中のものです。 [sage] 2007/09/12(水) 20:10:03 ID:u002ijju(1) AAS
>>79
79(3): 名前は開発中のものです。 [] 2007/09/07(金) 13:37:40 ID:5sK/fkD5(1) AAS
角度を付けた移動ってどうやるんですか?45度だったら
x=x+45
y=y+45
でいいんですか?
#define RAD 3.14159/180
って定義しておいて、

x+=cos(45*RAD)*speed;
y-=sin(45*RAD)*speed;

でいけると思うよ。
87: 名前は開発中のものです。 [] 2007/11/18(日) 11:26:33 ID:kpbdlgGK(1) AAS
質問させて下さい。
ユーザーに手書きで図形を書かせ、
それが丸なのか四角形なのか三角形なのかを判別したいのですが
どのようなアルゴリズムが考えられますでしょうか?
88: 名前は開発中のものです。 [sage] 2007/11/18(日) 11:37:26 ID:RmDGoqPy(1) AAS
ふたつかんがえた。もちろん使ったことはない。
・描画速度の変化をみる
(角を描くときに速度が落ちるので、2回落ち込むと三角形とか)
・描かれた線の接線のむきの分布みる
(三方向にピークが出ると三角形、とか)
89: 名前は開発中のものです。 [sage] 2007/11/18(日) 21:55:34 ID:VoyUbEfi(1) AAS
・グリッドを作って通過するポイントで判定(文字認識?)
・マウスの移動方向をxyの変化量で8つに分ける(マウスジェスチャ?)
俺も作ろっと
90: 名前は開発中のものです。 [sage] 2007/11/25(日) 15:24:43 ID:DZ368X4a(1) AAS
NN
91
(1): 名前は開発中のものです。 [sage] 2008/02/11(月) 21:08:51 ID:3BJFJrZO(1) AAS
縦スクロールシューティングゲームを作ってるんですが、
敵の出現のやり方がいまいち分かりません。
今までは、マップを描画したときに、
敵の情報があったら、同時に表示して、その敵の情報を削除
してました。
何か、いいアルゴリズムがありましたら、教えてください。
92: 名前は開発中のものです。 [sage] 2008/02/12(火) 07:56:35 ID:qFBBafcB(1/2) AAS
#define MAX_X 20
typedef struct _Map{
  int ShowX;
  int ShowY;
  int Type;
  int Hp;
  int X;
  int Y;
}_Map;
_Map Map[MAX_X][500];
void ShowEnemy(int ScY,MapChip Map)
{
  for(i=0;i<MAX_X;i++)
  {
    if(ScrollY==Map[i][ScrollY/16].ShowY)
    {
      switch(Map[i][Scroll/16].EnemyNuber)
      {
        case 1:
          CreateEnemy(i*16-ScrollX,0,1,3);
          break;
        case 2:
          CreateEnemy(i*16-ScrollX,0,2,5);
          break;
        …
        default:
          break;
      }
    }
  }
}
93: 名前は開発中のものです。 [sage] 2008/02/12(火) 08:03:29 ID:qFBBafcB(2/2) AAS
ちなみに、CreateEnemyの引数は、X座標、Y座標、敵番号、耐久力だ。
94: 名前は開発中のものです。 [] 2008/02/12(火) 11:55:40 ID:5WyTfMV5(1) AAS
 
95: 名前は開発中のものです。 [sage] 2008/02/18(月) 23:07:10 ID:YtDwWNhg(1) AAS
>91
発生する時刻と座標のテーブル持ってればいいんじゃないの?
96
(3): 名前は開発中のものです。 [sage] 2008/03/12(水) 21:02:38 ID:K0/YrLVn(1) AAS
今、C言語でシューティングゲーム作ってるんですが、
連続した弾の出し方が分かりません。教えてください。
専門学校の先生には、配列を使えと言われたのですが、
よく分かりません。

今、作成している途中のソースコードを書きます。

void Shot(void)
{
  for(i=0;i<100;i++)
  {
    if(Bullet[i].flag == 0 && Bullet[i].type == 0)
    {
      Bullet[i].flag = 1 ;
      Bullet[i].x = (Jiki.x+Jiki.x+Jiki.width) / 2 ;
      Bullet[i].y = Jiki.y ;
    }
  }
}

void KeyCheck(void)
{
  if(GetAsyncKeyState(VK_SPACE)<0){ Shot(); }
}
97
(1): 名前は開発中のものです。 [sage] 2008/03/13(木) 08:25:57 ID:3HHTp0zC(1/2) AAS
それだと一回ボタン押したら毎回100発の弾が重なって発射されるけど、それでいいの?
どうしたいの?
98
(1): 96 [sage] 2008/03/13(木) 16:41:36 ID:xt6KljbL(1) AAS
>>97 さん
ある程度、間隔を置いて、発射させたいんですぅ。
毎回、100発の弾が重なるのは、耐え難い事実なんです。
99: 名前は開発中のものです。 [sage] 2008/03/13(木) 22:54:45 ID:Bu/r75Um(1) AAS
大金を払い専門的な職業訓練を受けているはずの学生がこんなことすら自力で出来ない
「耐え難い事実」というならむしろこれw
100: 名前は開発中のものです。 [sage] 2008/03/13(木) 23:13:35 ID:3HHTp0zC(2/2) AAS
>>98
60フレーム/秒でKeyCheckは毎フレーム呼ばれるの?
101: 名前は開発中のものです。 [] 2008/03/14(金) 17:31:51 ID:46wpxx7U(1) AAS
>>96
if文の中の最後にbreak;入れると幸せになれるぞ
102
(3): 名前は開発中のものです。 [] 2008/03/19(水) 01:43:05 ID:bv/3obIk(1/2) AAS
適切なスレが見つからないのでここで質問させてください。
携帯電話アプリのシューティングを作っているのですが、
2D描画の処理を軽くする方法がわかりません。
個々のgifファイルを軽量化してみたりもしましたが、効果があるのかどうか分からないくらいです。
クリッピング領域を指定する方法もあるようですが、いまいちよく分かりません。
他に効果的な方法は無いものでしょうか。
103
(1): 名前は開発中のものです。 [sage] 2008/03/19(水) 09:04:08 ID:a6WC8gIo(1) AAS
>>102
画像の数を減らして、同じ画像を使いまわすとか、
1秒間あたりの描画回数(FPS)を減らすとか。
あとは、一画面に同時に出現するオブジェクトの数を減らすとか、
背景のスクロールをあきらめるとか、

あと、ベンチマークツールがあればそれを使って、
ボトルネックとなっている処理(メソッド/関数)を分析してみるとか。
104: 名前は開発中のものです。 [sage] 2008/03/19(水) 11:15:27 ID:MFS90Jv9(1) AAS
>>102
プログラム実行中は結局ビットマップでメモリに保持させてるから効果がないと思うんだが…
予め画像のパレットを全て一緒の256色にしといてパレットを読み込ませないと。
105: 102 [sage] 2008/03/19(水) 14:33:54 ID:bv/3obIk(2/2) AAS
>>103
ありがとうございます。
>同じ画像を使いまわす
試してみようと思います。
これは一箇所に画像を読み込んでおいて、
その画像を使うオブジェクトが描画のたびにそこを参照するようにする、
ということで良いんでしょうか?
他のは、ゲームのバランス調整と平行して考えてみます。

>>102
すいません。そういうことに理解が無いもので・・・。
>予め画像のパレットを全て一緒の256色にしといてパレットを読み込ませないと。
これは良く使われる手法なのでしょうか?
それともgifファイルの軽量化に意味を持たせるための方法なのでしょうか?
どういう風に実装すれば良いのかさっぱり分からないので、後者なら諦めます・・・。
ありがとうございました。
106: 名前は開発中のものです。 [] 2008/05/16(金) 17:34:25 ID:ciTJLGhI(1) AAS
大きな矩形の布地から、サイズの違う小さな矩形の布地を切り取る時、
余りの布面積が一番少なくなるよう、切り取る(小さな矩形を並べる)
アルゴリズムについて書かれた書籍、HP等をご存知でしたら、
教えて下さい。

よろしくお願いします。
107
(1): 106 [] 2008/05/19(月) 13:08:26 ID:rhmqn4vd(1) AAS
↑この質問取り下げます。失礼しました。
108: 名前は開発中のものです。 [sage] 2008/05/19(月) 14:26:06 ID:jyR28ttC(1) AAS
>>107
移動するなら移動先を書いてくれ。

実は調べたり考えたりしてたんだが最小公倍数の矩形で
バックトラックするという馬鹿な方法しか思いつかなかったんだ。
109: 名前は開発中のものです。 [sage] 2008/05/30(金) 14:21:38 ID:Vu7kcDak(1/3) AAS
>>96
100個程度ならいいですけど配列でもいいかもしれないけど
双方向リストとかを使うようにしたほうがいいかも。c言語だし。
まあこの辺は後ほど。
でも配列を使えとかいう講師に双方向リストを実装して提出したら
うらまれそうw

unsigned int KeyShotFrmCnt = 0; //ショットキーのウェイト用カウンター
↑これはソースの頭のほうに書いてね。

void KeyCheck(void)
{
??if (KeyShotFrmCnt == 0)
??{
???if(GetAsyncKeyState(VK_SPACE)<0)
???{
????Shot();
????(KeyShotFrmCnt = 10;
???}
??} else {
???--KeyShotFrmCnt;
??}
}
110: 名前は開発中のものです。 [sage] 2008/05/30(金) 14:23:33 ID:Vu7kcDak(2/3) AAS
うは、コピーしたらなんか辺になったorz
void KeyCheck(void)
{
if (KeyShotFrmCnt == 0)
{
if(GetAsyncKeyState(VK_SPACE)<0)
{
Shot();
KeyShotFrmCnt = 10;
}
} else {
--KeyShotFrmCnt;
}
}
1-
あと 89 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.022s