トップページgamedev
990コメント416KB

ズブの初心者がゲーム作れるまで勉強するスレ

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。01/11/07 20:26ID:PFtlmWD9
【参加資格】
ズブの初心者以外お断りです。

なおアドバイス等はプロのかたでも結構です。
初心者は聞く耳を持ちプロもわかりやすく教えてやってください。
0892名前は開発中のものです。2006/03/22(水) 16:53:56ID:4wbvXuWa
//ステージ初期化
*Stage_Initialize
    Stage_Num = Stage_Num + 1
    Dim tl, MAX, 3    //敵
    Dim bl, EBULLET_MAX, 3 //敵の弾
    
    repeat MAX
        tl.cnt.0 = 1    //利用中(0=否)
        tl.cnt.1 = 0    //呼び出すサブルーチン(未使用)
        tl.cnt.2 = ( cnt * 64 ) \ 640    //X座標
        tl.cnt.3 = ( cnt * 64 ) / 640 * 64    //Y座標
    loop
    cx=320
    cy=440

    benable=0
    
    Teki_Rest=MAX
    invasion = 0
    Dead = 0

    cls 4
    Color 255, 255, 255
    pos 280,240 : mes "Stage " + Stage_Num
    AWait 1000
return
0893名前は開発中のものです。2006/03/22(水) 16:54:27ID:4wbvXuWa
//プレイ初期化
*Play_Initialize
    Stage_Num=0
    Score=0
    gosub *Stage_Initialize
return

//起動時の初期化
*Boot_Initialize
    HighScore=74
    Score=0
    
    //裏画面
    buffer 2,640,480
    
    //自機
    buffer 3,32,32
    picload "jiki.bmp"
    
    //敵機
    buffer 4,32,32
    picload "teki.bmp"
    
    screen 0,640,480
    
    cls 4
return
0894名前は開発中のものです。2006/03/22(水) 16:54:57ID:4wbvXuWa
//敵が弾を発射
*Enemy_Fire
//    bl.cnt.0 //使用中かどうか
//    bl.cnt.1 //弾道サブルーチン(未使用)
//    bl.cnt.2 //X座標
//    bl.cnt.3 //Y座標

    teki_num=cnt
    
    repeat EBULLET_MAX
        if bl.cnt.0 = 0 {
            bl.cnt.0 = 1
            bl.cnt.2 = tl.teki_num.2+16
            bl.cnt.3 = tl.teki_num.3
            break
        }
    loop
return
0895名前は開発中のものです。2006/03/22(水) 19:50:05ID:4wbvXuWa
ソース
>>887-894
文字列が足し算できるなんて・・・メチャクチャ楽じゃないか・・・

スレの流れ的にC++まんせーですね
今ちょうど区切りがいいので移植に挑戦してみようかな
グラフィックの複雑さがネック

dupptrやvarptrを使えばHSPでもポインタが使えるみたいなので
ひょっとしてタスクシステム作れるかもしれない
前回は無計画に作って想定してない箇所(タスクの削除がうまく作れなかった)でハマったので
今度は計画的に

敵や敵弾のバリエーションを増やしてギャラクシアン風に作り替えたい
動きにバリエーションをつけるのは初めから考えていたこと
いかにもゲームらしい部分なのでおもしろそう

やりたいことが3つもできてしまったのでとりあえず寝てきます
どれから手をつけようか……
0896名前は開発中のものです。2006/03/22(水) 21:51:47ID:quA0O7ZO
DXライブラリ触った時、描画関係はHSPとほぼ同じくらいの感覚で扱えるなと思ったよ。
まぁポリゴンとかは出来ないけどさ。
0897名前は開発中のものです。2006/03/23(木) 10:01:54ID:5WNqQ2iY
#define _CRT_SECURE_NO_DEPRECATE
#define MAX 50 //敵の数最大
#define    cspeed    8 //自機移動速度
#define EBULLET_MAX    50 //敵弾数最大

#include "DxLib.h"

//プロトタイプ宣言
void    Boot_Initialize();
void    Play_Initialize();
void    Stage_Initialize();
void    Enemy_Fire(int cnt);

//変数宣言
int tl[MAX][4]; //敵
int bl[EBULLET_MAX][4]; //敵の弾

int cx=0, cy=0;
int bx=0, by=0, benable=0;

int ndir=0, dir=0;
int tspeed=0, Teki_Rest=0;

int Score=0, HighScore=0;
int Dead=0, invasion=0;
int Stage_Num=0;

int    HGJiki=0;
int    HGTeki=0;
0898名前は開発中のものです。2006/03/23(木) 10:02:25ID:5WNqQ2iY
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                 LPSTR lpCmdLine, int nCmdShow )
{
    if( DxLib_Init() == -1 )    // DXライブラリ初期化処理
    {
         return -1;                // エラーが起きたら直ちに終了
    }


    //初期化
    Boot_Initialize();
    Play_Initialize();

    //裏画面
    SetDrawScreen( DX_SCREEN_BACK ) ;

    //*Start
    while (1)
    {
        ClsDrawScreen() ;
        WaitTimer( 1 ) ;

        //自機
        if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
        {
            cx=cx-cspeed;
            if (cx<0) cx=0;
        }
0899名前は開発中のものです。2006/03/23(木) 10:03:24ID:5WNqQ2iY
        if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
        {
            cx=cx+cspeed;
            if (cx>639-32) cx=639-32;
        }

        if( CheckHitKey( KEY_INPUT_LCONTROL ) == 1 )
        {
            if (benable == 0) {
                benable=1;
                bx=cx+16;
                by=cy;
            }
        }
        DrawGraph( cx , cy , HGJiki , FALSE ) ;

        //自機弾
        if (benable == 1) {
            by=by-8;
            if (by<0) benable=0;
            DrawLine(bx, by, bx, by-16, GetColor(255,255,255));
        }
0900名前は開発中のものです。2006/03/23(木) 10:04:13ID:5WNqQ2iY
        //敵機
        ndir=dir;
        for (int cnt=0 ; cnt<MAX ; cnt++)
        {
            if (tl[cnt][0] == 1)
            {
                DrawGraph( tl[cnt][2], tl[cnt][3], HGTeki , FALSE ) ;

                tl[cnt][2] = tl[cnt][2]+dir;
                if (tl[cnt][2] <= 0) ndir = tspeed;
                if (tl[cnt][2] >= 602) ndir = -tspeed;

                //あたり判定
                if (benable && (tl[cnt][2] < bx) && ((tl[cnt][2] + 32) > bx) && (tl[cnt][3] < by) && ((tl[cnt][3]+32) > by) )
                {
                    tl[cnt][0] = 0;
                    Score = Score + 10;
                    Teki_Rest = Teki_Rest - 1;
0901名前は開発中のものです。2006/03/23(木) 10:04:46ID:5WNqQ2iY
                    Enemy_Fire(cnt);
                }

                //敵が接地したか
                if (tl[cnt][3] > 448) invasion = 1;
            }
        }

        if (dir != ndir) {
            for (int cnt=0 ; cnt<MAX ; cnt++)
            {
                tl[cnt][3] = tl[cnt][3] + 4;
            }
        }
        dir = ndir;
0902名前は開発中のものです。2006/03/23(木) 13:33:20ID:5WNqQ2iY
        //敵弾
        for (int cnt=0 ; cnt<EBULLET_MAX ; cnt++)
        {
            if (bl[cnt][0] == 1)
            {
                bl[cnt][3] = bl[cnt][3] + 8; //移動
                DrawLine(bl[cnt][2], bl[cnt][3], bl[cnt][2], bl[cnt][3] + 16, GetColor(255,255,255)); //描画
                if (bl[cnt][3] > 480) bl[cnt][0] = 0; //画面外なら使用終了
                if ((bl[cnt][2] > cx) && (bl[cnt][2] < cx + 32) && (bl[cnt][3] > cy) && (bl[cnt][3] < cy+32)) Dead = 1; //自機との当たり判定
            }
        }

        DrawFormatString( 200, 0, GetColor(255,255,255), "Score : %d", Score);

        if (Score > HighScore) HighScore = Score;
        DrawFormatString( 0, 0, GetColor(255,255,255), "High-Score : %d", HighScore);

        // 裏画面の内容を表画面に反映させる
        ScreenFlip() ;

0903名前は開発中のものです。2006/03/23(木) 13:33:50ID:5WNqQ2iY
        if (Teki_Rest <= 10) tspeed=2;
        if (Teki_Rest <= 1) tspeed=4;
        if (Teki_Rest == 0) Stage_Initialize();
        if ( (invasion == 1) || (Dead == 1) ) Play_Initialize();



        // Windows システムからくる情報を処理する
        if( ProcessMessage() == -1 ) break ;

        // ESCキーが押されたらループから抜ける
        if( CheckHitKey( KEY_INPUT_ESCAPE ) == 1 ) break ;
    }

    DxLib_End() ;                // DXライブラリ使用の終了処理

    return 0 ;                    // ソフトの終了
}
0904名前は開発中のものです。2006/03/23(木) 13:34:21ID:5WNqQ2iY
//ステージ初期化
void Stage_Initialize()
{
    Stage_Num = Stage_Num + 1;

    ZeroMemory(tl, sizeof(tl)); //Dim tl, MAX, 3    //敵
    ZeroMemory(bl, sizeof(bl)); //Dim bl, EBULLET_MAX, 3 //敵の弾
    
    for (int cnt=0 ; cnt<MAX ; cnt++)
    {
        tl[cnt][0] = 1;    //利用中(0=否)
        tl[cnt][1] = 0;    //呼び出すサブルーチン(未使用)
        tl[cnt][2] = ( cnt * 64 ) % 640;    //X座標
        tl[cnt][3] = ( cnt * 64 ) / 640 * 64;    //Y座標
    }
    cx=320;
    cy=440;

    benable=0;
    tspeed=1;
0905名前は開発中のものです。2006/03/23(木) 13:34:52ID:5WNqQ2iY
    Teki_Rest=MAX;
    invasion = 0;
    Dead = 0;

    ClsDrawScreen();

    DrawFormatString( 280, 240, GetColor(255,255,255), "Stage : %d", Stage_Num);

    ScreenFlip() ;
    WaitTimer( 1000 ) ;
    
    return;
}

//プレイ初期化
void Play_Initialize()
{
    Stage_Num=0;
    Score=0;
    Stage_Initialize();
    
    return;
}
0906名前は開発中のものです。2006/03/23(木) 13:35:36ID:5WNqQ2iY
//起動時の初期化
void Boot_Initialize()
{
    HighScore=74;
    Score=0;
    
    HGJiki = LoadGraph( "jiki.bmp" ) ;
    HGTeki = LoadGraph( "teki.bmp" ) ;

    ClsDrawScreen();

    return;
}

//敵が弾を発射
void Enemy_Fire(int cnt)
{
//    bl.cnt.0 //使用中かどうか
//    bl.cnt.1 //弾道サブルーチン(未使用)
//    bl.cnt.2 //X座標
//    bl.cnt.3 //Y座標
0907名前は開発中のものです。2006/03/23(木) 14:22:32ID:sWF0/S5O
>>897
乙。未実装の敵弾以外は普通に動いたよ。
とりあえず、敵のフラグと座標は構造体にしてみては?
0908名前は開発中のものです。2006/03/24(金) 03:47:56ID:r2mkgPf1
    int teki_num=cnt;

    for ( cnt=0 ; cnt<EBULLET_MAX ; cnt++)
    {
        if (bl[cnt][0] == 0) {
            bl[cnt][0] = 1;
            bl[cnt][2] = tl[teki_num][2]+16;
            bl[cnt][3] = tl[teki_num][3];
            break;
        }
    }

    return;
}
0909名前は開発中のものです。2006/03/24(金) 04:43:33ID:r2mkgPf1
ソース
>>897-908

・グラフィック
>>896で出てきたDXライブラリを使っています
ライン命令やフォーマット付きの文字描画があったので
HSPからあまり修正せずに移植できました

・変数宣言
やはり>>891で指摘された通りソースが長くなります
しかし移植中に配列サイズを間違っていることに気づきました
実は>>857で説明されている機能である
>配列変数は越えた分は自動確保されますよ
に助けられたいたので今まで発覚しなかったのです
Dim tl,MAX,3 //敵

repeat MAX
tl.cnt.0=1 //利用中(0=否)
tl.cnt.1=0 //呼び出すサブルーチン
tl.cnt.2=(cnt*64)\640 //X座標
tl.cnt.3=(cnt*64)/640*64 //Y座標
   ↑
Dimで3と宣言している(0〜2まで使える)のに0〜3まで使ってる

・C++移植版のバグ
ALT+F4で終了するとエラーがでます
たぶんDxLib_End()を実行してないからだと思います
ゲーム終了時に必ず実行する工夫がないか検討中
0910名前は開発中のものです。2006/03/24(金) 05:33:06ID:r2mkgPf1
途中経過

構造体を定義してみた
struct stEnemy
{
int x;
int y;
bool enable;
};

自機や弾も使い回しできるな

こういうのって継承すればいいんだっけ

そうだ、classを使おう
0911名前は開発中のものです。2006/03/24(金) 06:24:23ID:r2mkgPf1
なんだか、ややこしくなってきた
0912名前は開発中のものです。2006/03/24(金) 07:45:58ID:r2mkgPf1
敵のフラグと座標を構造体に書き換えた
座標をxやyで書けるのは見やすくていい
HSPには無いのかな、連想配列で似たようなことができそうな気がするけど

ついに240行にまで増えた
20行平均で貼り付けても12レスorz
5レスごとに3時間ぐらい待たされるから全うpまで6時間以上orz...
0913名前は開発中のものです。2006/03/24(金) 08:28:08ID:4LMnL9n2
拡張子をphpsに変えれば、ゲムデヴあぷろだにもupできるじゃろ
0914名前は開発中のものです。2006/03/24(金) 13:12:48ID:Keoep/nW
>>913同意。
いい加減ウザい。
txtファイルにコピペしてgamdevにうpしろっての
0915名前は開発中のものです。2006/03/24(金) 13:21:58ID:e/LJggH7
どうしてもしたいならソースをうpするスレッドへ
0916名前は開発中のものです。2006/03/24(金) 17:05:17ID:ynvPJr33
>>913-915
そう言ってやるな、せっかくスレを盛り上げてくれてるんだ
それとも藻前らが何かネタを投下できるのか?

まぁ所詮>>909が上げてる程度のコードも書けないやつらの
嫉妬レスなんだろうな(プゲラッチョ
0917名前は開発中のものです。2006/03/24(金) 18:18:58ID:FlQlv7Bv
別にもりあがってないじゃん

>>909ぐらいのコードなら書けなきゃゲ制作には来ないって
0918名前は開発中のものです。2006/03/24(金) 23:21:23ID:kZSgB7pc
盛り上げてるのではなく
荒らしている。
0919名前は開発中のものです。2006/03/25(土) 00:05:23ID:nEkDgcKS
短いソースはともかく、1レスで書けない長いソースは別ファイルをうpするのがマナーだろ。
見にくいし、試せない。書き出さ無きゃならん時点で見る気もうせる。
0920名前は開発中のものです。2006/03/25(土) 00:42:47ID:yYvbrmRQ
>>912 しかし乙
0921名前は開発中のものです。2006/03/25(土) 08:26:50ID:xoont0lh
#define MAX 50 //敵の数最大
#define    cspeed    8 //自機移動速度
#define EBULLET_MAX    50 //敵弾数最大

#include "DxLib.h"

//プロトタイプ宣言
void    Boot_Initialize();
void    Play_Initialize();
void    Stage_Initialize();
void    Enemy_Fire(int cnt);

//変数宣言
struct stEnemy
{
    int enable;
    int x;
    int y;
};
stEnemy Enemies[MAX];
/*
0922名前は開発中のものです。2006/03/25(土) 08:27:31ID:xoont0lh
*/
int bl[EBULLET_MAX][4]; //敵の弾

int cx=0, cy=0;
int bx=0, by=0, benable=0;

int ndir=0, dir=0;
int tspeed=0, Teki_Rest=0;

int Score=0, HighScore=0;
int Dead=0, invasion=0;
int Stage_Num=0;

int    HGJiki=0;
int    HGTeki=0;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                 LPSTR lpCmdLine, int nCmdShow )
{
    if( DxLib_Init() == -1 )    // DXライブラリ初期化処理
    {
         return -1;                // エラーが起きたら直ちに終了
    }
/*
0923名前は開発中のものです。2006/03/25(土) 08:28:25ID:xoont0lh
*/
    //初期化
    Boot_Initialize();
    Play_Initialize();

    //裏画面
    SetDrawScreen( DX_SCREEN_BACK ) ;

    //*Start
    while (1)
    {
        ClsDrawScreen() ;
        WaitTimer( 1 ) ;

        //自機
        if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
        {
            cx=cx-cspeed;
            if (cx<0) cx=0;
        }
/*
0924名前は開発中のものです。2006/03/25(土) 08:29:18ID:xoont0lh
*/
        if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
        {
            cx=cx+cspeed;
            if (cx>639-32) cx=639-32;
        }

        if( CheckHitKey( KEY_INPUT_LCONTROL ) == 1 )
        {
            if (benable == 0) {
                benable=1;
                bx=cx+16;
                by=cy;
            }
        }
        DrawGraph( cx , cy , HGJiki , FALSE ) ;

        //自機弾
        if (benable == 1) {
            by=by-8;
            if (by<0) benable=0;
            DrawLine(bx, by, bx, by-16, GetColor(255,255,255));
        }
/*
0925名前は開発中のものです。2006/03/25(土) 08:31:10ID:xoont0lh
*/
        //敵機
        ndir=dir;
        for (int cnt=0 ; cnt<MAX ; cnt++)
        {
            if (Enemies[cnt].enable == 1)
            {
                DrawGraph( Enemies[cnt].x, Enemies[cnt].y, HGTeki , FALSE ) ;

                Enemies[cnt].x = Enemies[cnt].x+dir;
                if (Enemies[cnt].x <= 0) ndir = tspeed;
                if (Enemies[cnt].x >= 602) ndir = -tspeed;

                //あたり判定
                if (benable && (Enemies[cnt].x < bx) && ((Enemies[cnt].x + 32) > bx) && (Enemies[cnt].y < by) && ((Enemies[cnt].y+32) > by) )
                {
                    Enemies[cnt].enable = 0;
                    Score = Score + 10;
                    Teki_Rest = Teki_Rest - 1;
/*
0926名前は開発中のものです。2006/03/25(土) 10:25:51ID:3v7Ny4hZ
>>912
 GamDevPukiWiki( http://gamdev.org/w/?FrontPage )に1ページ作ってそこにソースを書
いてみては? そしてここでは変更部分だけとか議論したいところだけ書き出すと。
0927名前は開発中のものです。2006/03/25(土) 11:26:18ID:nEkDgcKS
ここまで空気読めないと笑うしかないなwwww
0928名前は開発中のものです。2006/03/25(土) 12:22:40ID:Xo5AkaJL
( ^∀^)ゲラゲラ
0929名前は開発中のものです。2006/03/25(土) 15:57:33ID:xoont0lh
C++/DXライブラリ 構造体を利用
http://blog.goo.ne.jp/gamedevhsp/e/e1508c7e7747bb3bfa3118d2be75f58a

ソースをうpできる場所を確保してきました
長いものはこちらにうpします
0930名前は開発中のものです。2006/03/25(土) 16:20:00ID:dp6Fd2gl
HSPって

gcopyやると

チラチラして目が痛いンmだけど対策おしえてくれ!
あと、指定した色透明とかないの?
0931名前は開発中のものです。2006/03/25(土) 16:26:34ID:Xo5AkaJL
>>930
リファレンスと公式のチュートリアルも読めないのか池沼
0932名前は開発中のものです。2006/03/25(土) 20:58:41ID:xoont0lh
中途半端なのでうpしてしまいますね
*/
                    Enemy_Fire(cnt);
                }

                //敵が接地したか
                if (Enemies[cnt].y > 448) invasion = 1;
            }
        }

        if (dir != ndir) {
            for (int cnt=0 ; cnt<MAX ; cnt++)
            {
                Enemies[cnt].y = Enemies[cnt].y + 4;
            }
        }
        dir = ndir;
/*
0933名前は開発中のものです。2006/03/25(土) 20:59:11ID:xoont0lh
        //敵弾
        for (int cnt=0 ; cnt<EBULLET_MAX ; cnt++)
        {
            if (bl[cnt][0] == 1)
            {
                bl[cnt][3] = bl[cnt][3] + 8; //移動
                DrawLine(bl[cnt][2], bl[cnt][3], bl[cnt][2], bl[cnt][3] + 16, GetColor(255,255,255)); //描画
                if (bl[cnt][3] > 480) bl[cnt][0] = 0; //画面外なら使用終了
                if ((bl[cnt][2] > cx) && (bl[cnt][2] < cx + 32) && (bl[cnt][3] > cy) && (bl[cnt][3] < cy+32)) Dead = 1; //自機との当たり判定
            }
        }

        DrawFormatString( 200, 0, GetColor(255,255,255), "Score : %d", Score);

        if (Score > HighScore) HighScore = Score;
        DrawFormatString( 0, 0, GetColor(255,255,255), "High-Score : %d", HighScore);

        // 裏画面の内容を表画面に反映させる
        ScreenFlip() ;
0934名前は開発中のものです。2006/03/25(土) 21:31:46ID:dp6Fd2gl

rddraw 0

redraw 1

に挟んだらちらつきなくなりました〜ヤッホー!
第一段階クリアかな。

今、透明探してる。
0935名前は開発中のものです。2006/03/25(土) 23:56:51ID:bTVU6xMs
F1押して出てくるヘルプに
gcopy って打ち込めば関連ありそうなの表示されるよ
0936名前は開発中のものです。2006/03/26(日) 11:29:59ID:erP5z/In
うちのHSPにはrddrawがないよ(´・ω・`)ショボーン
0937名前は開発中のものです。2006/03/26(日) 11:35:24ID:erP5z/In
>>933にコメント入れ忘れたorz

*/
        if (Teki_Rest <= 10) tspeed=2;
        if (Teki_Rest <= 1) tspeed=4;
        if (Teki_Rest == 0) Stage_Initialize();
        if ( (invasion == 1) || (Dead == 1) ) Play_Initialize();



        // Windows システムからくる情報を処理する
        if( ProcessMessage() == -1 ) break ;

        // ESCキーが押されたらループから抜ける
        if( CheckHitKey( KEY_INPUT_ESCAPE ) == 1 ) break ;
    }

    DxLib_End() ;                // DXライブラリ使用の終了処理

    return 0 ;                    // ソフトの終了
}
/*
0938名前は開発中のものです。2006/03/26(日) 11:36:55ID:erP5z/In
*/
//ステージ初期化
void Stage_Initialize()
{
    Stage_Num = Stage_Num + 1;

    ZeroMemory(Enemies, sizeof(Enemies)); //敵
    ZeroMemory(bl, sizeof(bl)); //敵の弾
    
    for (int cnt=0 ; cnt<MAX ; cnt++)
    {
        Enemies[cnt].enable = 1;    //利用中(0=否)
        Enemies[cnt].x = ( cnt * 64 ) % 640;    //X座標
        Enemies[cnt].y = ( cnt * 64 ) / 640 * 64;    //Y座標
    }
    cx=320;
    cy=440;

    benable=0;
    tspeed=1;

    Teki_Rest=MAX;
    invasion = 0;
    Dead = 0;

/*
0939名前は開発中のものです。2006/03/26(日) 11:37:30ID:erP5z/In
*/
    ClsDrawScreen();

    DrawFormatString( 280, 240, GetColor(255,255,255), "Stage : %d", Stage_Num);

    ScreenFlip() ;
    WaitTimer( 1000 ) ;
    
    return;
}

//プレイ初期化
void Play_Initialize()
{
    Stage_Num=0;
    Score=0;
    Stage_Initialize();
    
    return;
}

/*
0940名前は開発中のものです。2006/03/26(日) 12:18:50ID:erP5z/In
*/
//敵が弾を発射
void Enemy_Fire(int cnt)
{
    int teki_num=cnt;

    for ( cnt=0 ; cnt<EBULLET_MAX ; cnt++)
    {
        if (bl[cnt][0] == 0) {
            bl[cnt][0] = 1;
            bl[cnt][2] = Enemies[teki_num].x+16;
            bl[cnt][3] = Enemies[teki_num].y;
            break;
        }
    }

    return;
}

/*
ここで終了です

開発環境
VC++
DXライブラリ
*/
0941名前は開発中のものです。2006/03/26(日) 12:57:44ID:erP5z/In
>>921-940をコピペしたらコンパイルできるつもりだったのですが
>>933の文頭と文末に*/と/*をつけるのを忘れてたのでその追加だけお願いします
それでコンパイル通ります

外部サイトでも平気な人は>>929に同等のソースがあります
特に理由がなければこちらをどうぞ
0942名前は開発中のものです。2006/03/26(日) 13:06:08ID:5N7smiYS
Boot_Initialize関数が見つかりません><
0943名前は開発中のものです。2006/03/26(日) 13:27:16ID:erP5z/In
//うっかりさんでごめんこりん><

//起動時の初期化
void Boot_Initialize()
{
    HighScore=74;
    Score=0;
    
    HGJiki = LoadGraph( "jiki.bmp" ) ;
    HGTeki = LoadGraph( "teki.bmp" ) ;

    ClsDrawScreen();

    return;
}
0944名前は開発中のものです。2006/03/26(日) 15:01:41ID:5/XI8n21
どうしてここにソースを貼り付けるのか
何度言われてもわかんないの?
0945名前は開発中のものです。2006/03/26(日) 15:08:10ID:0dHxYm65
//うっかりさんでごめんこりん><
だそうです
0946名前は開発中のものです。2006/03/26(日) 15:20:13ID:3eYiH+Hg


やったーーー!!
透明発見 その名はgmode ですーーーーーすすすすslすslすslすlす!!!!!

これはんまさに透明!!!半透明も簡単うあはぁふあhかゆあじゅhjし最高!!!!



次は球を増やしたいんだけど
変数をどんどん増やしていくの大変なんだけど
なんか対策アル?
0947名前は開発中のものです。2006/03/26(日) 23:53:49ID:pcdMut/g
ソース貼りまくって埋め立てか。次スレはいらないな
0948名前は開発中のものです。2006/03/27(月) 15:39:02ID:TSDimYuG
いいこと思いついた
トリップつければNGワードで一網打尽
0949 ◆src/N3iz.2 2006/03/27(月) 15:39:54ID:TSDimYuG
テスト
0950 ◆src/N3iz.2 2006/03/27(月) 15:40:39ID:TSDimYuG
#+OIF=^}^

トリップ置いておくのでみなさん使ってください
0951名前は開発中のものです。2006/03/27(月) 15:45:46ID:TSDimYuG
>>946
俺は配列変数使ってます
一緒にがんばりましょーヾ(*´∀`*)ノキャッキャッ
0952名前は開発中のものです。2006/03/27(月) 15:46:49ID:TSDimYuG
あ、ちょうどIDがDimだw
0953名前は開発中のものです。2006/03/28(火) 15:39:57ID:vBoe6Dt9
弾幕研究はじめる
0954名前は開発中のものです。2006/03/28(火) 17:21:43ID:ZIZJuDYi
この貼り付けられたソースはどうして欲しいのかな?
0955名前は開発中のものです。2006/03/28(火) 17:41:17ID:9EyZXfZz
本当にズブな質問で悪いのですが
DirectXを用いて2Dシューティングを作ろうと思っていたのですが、
まず、C++を学ぶものだと思っていたら
本屋へ行ってDirectXの本を読んだらVISUALC++を用いていたりVISUALC++.NETを使っていたりしていたのですが
まず、結局何を学べばよいのでしょうか?
あと、出来たらその後の簡単なするべき事の工程を教えてくださるとありがたいのですが
0956名前は開発中のものです。2006/03/28(火) 20:34:42ID:df2C19ZD
本来XCしかできない漏れは、VC++.NETで開発してますが何か?

>ズブ
C++もVC++も、ほぼC言語の上位互換だから、
C言語がわかればおk。ポインタを把握すれば完璧。
痒いところの手が届かないとか、簡潔な記述がしたくなったら、
C++の本を見てレパートリーを増やせばいい。
無理して色々な機能を使ったって糞コード量産するだけ。

>工程
DirectXの本のサンプルプログラムを弄って遊ぶのがいいんじゃないだろうか。
とりあえず動くものがあったほうがやる気が湧きやすいし、維持しやすい。
拡張に行き詰まりを感じたら、新規に零からコツコツ書いていって、
DirectXを研究しながら、然るべきタイミングで然るべき処理をするようにする。
0957名前は開発中のものです。2006/03/28(火) 23:02:45ID:5LhBke5O
>>955
CやC++は言語。VisualC++なんかはIDE。
いくらCやC++の文法や規則を覚えて頭の中でコードがかけても
それをexeファイルとかにできんと何の意味もないだろ。
そのコードの作成を補助したり
実際に実行できるexeファイルにしたりするのが、
コンパイラだったりエディタだったりIDEだったり。
この辺のツールの厳密な意味はググってくれ。
0958名前は開発中のものです。2006/03/29(水) 10:15:41ID:0n+YEyJr
//下方向へ直進するだけの弾

buffer 2,640,480
screen 0,640,480

bx=320
by=240

repeat
    gsel 2,0
    cls 4
    await 1

    color 255, 255, 255
    circle bx, by, bx+16, by+16, 1
    by=by+8

    gsel 0,1
    gcopy 2,0,0,640,480    
loop

実は狙い撃ち弾の作り方がよくわからない
角度のある弾はsin、cos使えばいいってのはわかる

ところで、気づけばもう

    情報処理技術者試験まであと18日

そろそろ勉強しなきゃ
0959名前は開発中のものです。2006/03/29(水) 11:43:32ID:iWwCTn19
atanで角度算出して発射しろ。

昔の2種なら高校時代とったが言わせてもらえば
何の役にもたたん。しいて言うなら自己満足か。
そんな勉強より実践で使えるアルゴリズム類を勉強しとけ。
0960 ◆src/N3iz.2 2006/03/29(水) 14:42:56ID:0n+YEyJr
buffer 2,640,480
screen 0,640,480

bx=320
by=240

tx=rnd(640)
ty=rnd(480)

//rad=atan(tx-bx, ty-by) //計算箇所1

repeat
    gsel 2,0
    cls 4
    await 1

    color 255, 255, 255
    mes rad

/*
0961 ◆src/N3iz.2 2006/03/29(水) 14:43:50ID:0n+YEyJr
*/
    rad=atan(tx-bx, ty-by) //計算箇所2
    
    circle tx, ty, tx+16, ty+16, 1

    circle bx, by, bx+16, by+16, 1

    bx=bx+sin(rad)*10
    by=by+cos(rad)*10

    if abs(tx-bx)<16 and abs(ty-by)<16 {
        tx=rnd(640)
        ty=rnd(480)
        rad=atan(tx-bx, ty-by)
    }


    gsel 0,1
    gcopy 2,0,0,640,480    
loop
0962名前は開発中のものです。2006/03/29(水) 14:52:23ID:0n+YEyJr
ソース
>>960-961
http://blog.goo.ne.jp/gamedevhsp/e/8080023be3115e0fdb2ac4520640e9ca
次々と出てくる標的に弾が飛んでいくプログラムです

計算箇所1で計算すると弾が当たらない
そこで計算箇所2で計算すると当たるようになった
でも弾道が弓なりに曲がるようになる
0963名前は開発中のものです。2006/03/29(水) 15:15:20ID:ywlDUjDm

きっとあの人だろうな・・・・(ス・・
ageんな。
0964名前は開発中のものです。2006/03/29(水) 17:04:38ID:0n+YEyJr
ブレゼンハムアルゴリズムというのを見つけた
わからなかったorz
>>959で言ってるアルゴリズムの勉強ってこういうことなのか
0965名前は開発中のものです。2006/03/29(水) 17:58:04ID:0n+YEyJr
>>963
スではじまるコテハンなんていたっけ?
0966名前は開発中のものです。2006/03/29(水) 18:18:29ID:0n+YEyJr
buffer 2,640,480
screen 0,640,480

dim bx,3
dim by,3
dim rad,3

repeat 3
    bx.cnt=320
    by.cnt=240
loop

tx=rnd(640)
ty=rnd(480)

//計算箇所1
rad.0=atan(tx-bx.0, ty-by.0)-0.5
rad.1=atan(tx-bx.1, ty-by.1)
rad.2=atan(tx-bx.2, ty-by.2)+0.5
/*
0967名前は開発中のものです。2006/03/29(水) 18:19:17ID:0n+YEyJr
*/
repeat
    gsel 2,0
    cls 4
    await 1

    color 255, 255, 255

    repeat 3
//        rad.cnt=atan(tx-bx.cnt, ty-by.cnt) //計算箇所2
        
        circle tx, ty, tx+16, ty+16, 1
    
        circle bx.cnt, by.cnt, bx.cnt+16, by.cnt+16, 1
    
        bx.cnt=bx.cnt+sin(rad.cnt)*10
        by.cnt=by.cnt+cos(rad.cnt)*10
    
        if abs(tx-bx.cnt)<16 and abs(ty-by.cnt)<16 {
            tx=rnd(640)
            ty=rnd(480)
/*
0968名前は開発中のものです。2006/03/29(水) 18:55:25ID:0n+YEyJr
*/
            bx.0=bx.1
            by.0=by.1
            bx.2=bx.1
            by.2=by.1
            
            rad.0=atan(tx-bx.0, ty-by.0)-0.5
            rad.1=atan(tx-bx.1, ty-by.1)
            rad.2=atan(tx-bx.2, ty-by.2)+0.5
        }
    loop

    gsel 0,1
    gcopy 2,0,0,640,480    
loop
0969名前は開発中のものです。2006/03/29(水) 19:03:06ID:0n+YEyJr
ソース
>>966-968
今度は3way弾
あ、ソースはトリップつけようと思ってたのに忘れた

これ作って気づいたけど>>962の計算箇所2ってただのホーミング弾だorz

狙い撃ち弾を正確に命中させるには、たぶん対策は大きく分けて二つ
・精度をあげる
・アルゴリズムを変える

意外とムズカシス
0970名前は開発中のものです。2006/03/29(水) 19:52:28ID:iWwCTn19
ああ、コイツか。
ウザス
0971名前は開発中のものです。2006/03/29(水) 20:28:08ID:0n+YEyJr
こ、こいつってだれなんだー!
0972名前は開発中のものです。2006/03/29(水) 20:29:13ID:qXE6Wdy2
パロディウスにいたな
0973名前は開発中のものです。2006/03/29(水) 21:43:24ID:0n+YEyJr
おまえらちょっと隙を見せると雑談はじめやがってw
狙い撃ち弾のやり方わかる奴いねーの?
0974名前は開発中のものです。2006/03/29(水) 21:52:28ID:ENDbob5I
>>973にドン引きしたのは俺だけではないはず
0975名前は開発中のものです。2006/03/29(水) 21:56:20ID:0n+YEyJr
ごめんなさいすみません無理して2ちゃんねらーっぽく振る舞ってしまいました
今は反省してます

トークも弾も狙いがことごとくはずれるorz
0976名前は開発中のものです。2006/03/29(水) 22:01:39ID:0n+YEyJr
>>974
IDがEND
0977名前は開発中のものです。2006/03/29(水) 22:01:49ID:ffJjCuui
( ´д)ヒソ(´д`)ヒソ(д` )
0978名前は開発中のものです。2006/03/29(水) 22:06:03ID:Homs13rz
そりゃおめー、自機のXY座標と砲台のXY座標の差を取って、XYそれぞれの成分を「当たるまでに要するフレーム数」で割って算出、初速として与えてやればいいんでね?
型はfloatがいいな。
0979名前は開発中のものです。2006/03/29(水) 22:07:01ID:JtrDjhKk
なんで目標への単位ベクトルじゃダメなの?
0980名前は開発中のものです。2006/03/29(水) 22:43:32ID:0n+YEyJr
>>978>>979って同じことを言ってるんですよね?
なんとなくわかってきました
角度じゃなくてxとyの移動量で計算するんですね

floatってHSPだとどうなるんだろう……
0981名前は開発中のものです。2006/03/29(水) 22:45:28ID:Homs13rz
ズブの素人スレだからだよ
俺も素人。
0982名前は開発中のものです。2006/03/29(水) 22:49:05ID:0n+YEyJr
#define MAX 32

buffer 2,640,480
screen 0,640,480

dim bx,MAX
dim by,MAX
dim rad,MAX

repeat MAX
    bx.cnt=320
    by.cnt=240
loop

tx=rnd(640)
ty=rnd(480)

repeat MAX
    rad.cnt=atan(tx-bx.0, ty-by.0)-6.28/MAX*cnt
loop
0983名前は開発中のものです。2006/03/29(水) 22:49:35ID:0n+YEyJr
repeat
    gsel 2,0
    cls 4
    await 100

    color 255, 255, 255

    repeat MAX
        circle tx, ty, tx+16, ty+16, 1
        circle bx.cnt, by.cnt, bx.cnt+16, by.cnt+16, 1
    
        bx.cnt=bx.cnt+sin(rad.cnt)*10
        by.cnt=by.cnt+cos(rad.cnt)*10
    
        if abs(tx-bx.cnt)<16 and abs(ty-by.cnt)<16 or by.cnt>480 {
            tx=rnd(640)
            ty=rnd(480)
0984名前は開発中のものです。2006/03/29(水) 22:50:07ID:0n+YEyJr
            repeat MAX
                bx.cnt=320
                by.cnt=240
                rad.cnt=atan(tx-bx.0, ty-by.0)-6.28/MAX*cnt
            loop
        }
    loop

    gsel 0,1
    gcopy 2,0,0,640,480    
loop
0985名前は開発中のものです。2006/03/29(水) 22:52:29ID:Homs13rz
HSPで浮動小数 利用 でぐぐるか、Cの勉強を始めなさい。
だが、まず自分で検索することを覚えねば未来は無い。



…だから長いソース貼るなって言われてんだろ!!!!!
0986名前は開発中のものです。2006/03/29(水) 23:07:31ID:0n+YEyJr
ソース
>>982-984
http://blog.goo.ne.jp/gamedevhsp/e/6063c8d3fb513f96c332e4f7e748a934
丸く花火のように散る弾です
でも50発ぐらいが限度でそれ以上弾が出てる様子がないです
極端に3000発ぐらいにしても50発のときと変わりませんでした

>>985
HSPplusというプラグインがでてきました
ありがとうございます

ソースを外部にうpすると2chに貼れという人もでてくるので両方にうpしてます
今まではどちらかというとそういう人のほうが多かったので今回の反応にとまどってます
gamdevは例の事件や例のバグもあって絶対踏まない人もいるのでスレが伸びないと思ったんですよ
もう風化してますがひさびさにうpすると早速IPアドレスが漏れたり削除できなくなったりで変わってないなぁと……
ブログのほうはアクセス解析がついてますがIPアドレスは取ってないです
アクセス数が少ないのでやっぱり外部より2chのほうが見やすい(心理的に)のではないかなと分析してます
ご不便をおかけします
0987名前は開発中のものです。2006/03/29(水) 23:15:05ID:JtrDjhKk
誤:ご不便をおかけします
正:ご迷惑をおかけします
0988名前は開発中のものです。2006/03/30(木) 01:30:02ID:J45kuvXn
>>978
 floatは2.6だと要プラグイン。3.0以降なら a=0.0 と初期化宣言すればok。

 あと、内部(算出)値を1000倍、出力するときは1000で割るという手法もありますよ。1024とか
512のほうが相性はいいですが。

>>986
 変数bx、by、radが実数値になっていませんよ。

>dim bx,MAX
>dim by,MAX
>dim rad,MAX

 をそれぞれdimからddimにして、

>repeat MAX
> bx.cnt=320
> by.cnt=240
>loop

 は

bx.cnt=320.0
by.cnt=240.0

 にしてください(最初のほうとループ内の二箇所)。あと await は16か32で。
0989名前は開発中のものです。2006/03/31(金) 01:53:01ID:29R+LSun
Cを学ぶ
C++を学ぶ
WinAPIとDirectXの存在を知る
サンプルプログラムをいじる
スケルトンプログラムを利用してちょっとしたゲームを作る←今ココ
・・・
・・・
0から自分で作る
0990名前は開発中のものです。2006/03/31(金) 15:16:39ID:+8lDizLk
最初は先人の知恵を利用しまくった方が良いだろうね。
作り方を覚えたら、自分でつくる部分を多くしていく、と。
レス数が950を超えています。1000を超えると書き込みができなくなります。