ページ 11

シューティングゲームを作っているんですが…

Posted: 2010年6月30日(水) 23:00
by さち
初めまして。C++言語初心者のさちです。
今、シューティングゲームを作っていますが、弾の残数を描画できるようにしたいのですが、どうしたらいいのかわからなくて迷ってます。
そのままですが、現段階で出来ているところまで張り付けさせていただきます。
教えてください。お願いします。

// TridentGFライブラリ用のヘッダファイル
#include "TridentGF.h"
#include <iostream>
#include <windows.h>
#include <cmath>

// TridentGFライブラリ用のネームスペース
using namespace tcgf ;

// 弾の構造体
struct SHOT{
 float x, y; // x,yの座標
 float vx, vy; // 移動速度
 float speed; // 移動速度
 float max; // 移動範囲(最大)
 static const int SHOT_OFF = 0; // 表示フラグ(オフ)
 static const int SHOT_ON = 1; // 表示フラグ(オン)
 int flag; // 表示フラグ
 float tamax, tamay; // 弾の残数を描画するx,yの座標
 int count; // 弾の残数をカウント
};
// 弾の管理
struct SHOT_CTRL{
 static const int SHOT_MAX = 5; // 弾の出現の最大数
 SHOT shot[SHOT_MAX]; // 弾の情報
};
// プロトタイプの宣言
// 弾の発射
void FlagShot(SHOT_CTRL *shot_ctrl);
// メイン
void main(void){
 // ここで初期化します
 SHOT_CTRL shot_ctrl;
 // 弾の初期化
 for (int i = 0; i < SHOT_CTRL::SHOT_MAX; i++){
 shot_ctrl.shot.x = shot_ctrl.shot.y = 0.0f;
 shot_ctrl.shot.vx = shot_ctrl.shot.vy = 0.0f;
 shot_ctrl.shot.speed = 0.5f;
 // 弾の移動範囲の限界
 shot_ctrl.shot.max = 15.0f;
 // 弾が表示中かどうかのフラグ
 shot_ctrl.shot.flag = SHOT::SHOT_OFF;
 // 弾の残数を描画する
 shot_ctrl.shot.tamax = 13.5f;
 shot_ctrl.shot.tamay = -10.5f;
 // 弾数
 shot_ctrl.shot.count = 6;
 }
 // ゲームループ
 // Windowが閉じたら、繰り返しを終了します。
 while( IsActive() ){
  // ここでゲームの処理をします
  // 弾の発射
  int i = 0;
  FlagShot(&shot_ctrl); 
  // 弾の残数を表示
  sout << shot_ctrl.shot[i].count;
  // 弾の残数が0になったら、終了する
  if (shot_ctrl.shot[i].count == 0 ){
   sout.location(270, 200);
   sout << "終了です\n";
  }
  // ここで描画処理をします
  // 弾の残数の描画
  for (int i = 0; i < 3; i++){
   for (int j = 0; j < 2; j++){
    if (shot_ctrl.shot[i].count != 0 && shot_ctrl.shot[i].flag == SHOT::SHOT_OFF){
     SetColor(226,113,0);
     DrawSmallBox(shot_ctrl.shot[i].tamax + (float)(i * 2),shot_ctrl.shot[i].tamay - (float)(j * 2));
    }
   }
  }
  // ショットフラグがオンになったら弾の描画
  if (shot_ctrl.shot[i].flag == SHOT::SHOT_ON){
   SetColor(226,113,0);
   DrawSmallBox(shot_ctrl.shot[i].x,shot_ctrl.shot[i].y);
  }
  // ここまでで描画処理を終了します。
  // 描画を行います。
  Render();
 }
 // 終了処理をします
}

// 弾の発射
void FlagShot(SHOT_CTRL *shot_ctrl){
 int i;
 for (i = 0; i < SHOT_CTRL::SHOT_MAX; i++){
  // 弾のカウントが0じゃなかったら
  if (shot_ctrl->shot[i].count != 0){
   // 弾の表示がオフのとき
   if (shot_ctrl->shot[i].flag == SHOT::SHOT_OFF){
    // 発射キーが押された
    if (GetKey(VK_SPACE)){
     // 表示フラグをオンにする
     shot_ctrl->shot[i].flag = SHOT::SHOT_ON;
     // 位置を初期化
     shot_ctrl->shot[i].x = 0.0f;
     shot_ctrl->shot[i].y = 0.0f;
     // 移動速度を設定する
     shot_ctrl->shot[i].vy = shot_ctrl->shot[i].speed;
    }
   }
   // 弾の表示がオンのとき
   if (shot_ctrl->shot[i].flag == SHOT::SHOT_ON){
    // 弾の移動速度
    shot_ctrl->shot[i].vy = shot_ctrl->shot[i].speed;
    // 位置を更新する
    shot_ctrl->shot[i].y += shot_ctrl->shot[i].vy;
    // 移動範囲の設定
    if (shot_ctrl->shot[i].y >= shot_ctrl->shot[i].max){
     // 表示フラグをオフにする
     shot_ctrl->shot[i].flag = SHOT::SHOT_OFF;
     shot_ctrl->shot[i].count = shot_ctrl->shot[i].count - 1;
    }
   }
  }
 }
}

Re:シューティングゲームを作っているんですが…

Posted: 2010年7月01日(木) 07:24
by ookami
数字で書きたければ DrawString、

アイコンで
●●●

Re:シューティングゲームを作っているんですが…

Posted: 2010年7月01日(木) 07:27
by ookami
うぅわすいません、誤操作で途中で投稿してしまいました。編集キーも入れる前だったから編集できないし 汗

--

数字で書きたければ DrawStringなど、

アイコンで
●●●●●●
のように描きたければ、forループでDrawGraphなどでしょうか。

-- 追記 7/2
すみません; DrawStringやDrawGraphなどは、DXライブラリでした。
「TridentGFライブラリ」というのは分かりません... ちゃんと読まず、大変失礼しました。

ついでにすみません、「TridentGFライブラリ」について調べようとしたのですが、
全く情報が得られませんでした。ちょっと興味ありますので、
参考になるURLなど教えてもらえませんか?(逆w 画像