忍者ブログ
なんとなくだらだらと。方向性はまだ決まってない。 当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。 本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html DX Library Copyright (C) 2001-2008 Takumi Yamada.
[51] [50] [49] [48] [47] [46] [45] [44] [43] [42] [41]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

プレイヤー同士の距離判定つけた。
もみもみする位置取り合戦が見てて楽しい。




v009

ダウンロード http://hiyayakko.sarashi.com/SimpleSoccer/SC09.zip (2009.08.17)




新しいクラスインスタンス作らないといけないかと思ってたけど、メインにだらっと書いた。

main.cpp


void GamePlay()
{
    :
    :

    // プレイヤーの移動処理
    for(i=0;i<10;i++){
        if(player[i].getPos()==GOALKEEPER){
            if(Distance(player[i].getPx(),player[i].getPy(),ball.getBx(),ball.getBy())<6400){
                player[i].GoLocate(CHASE_BALL,ball.getBx(),ball.getBy());     // ゴールキーパーだけ、守備範囲を広く取る
            }
        } else {
            if(player[i].getStatus()!=SUPPORT){
                if(Distance(player[i].getPx(),player[i].getPy(),ball.getBx(),ball.getBy())<500)
                    if(ball.getSpd()<2.0) player[i].GoLocate(CHASE_BALL,ball.getBx(),ball.getBy());
                // プレイヤーが他のプレイヤーの近くにいるときは、その相手から遠ざかる方向へ動く
                for(int j=0;j<10;j++){
                    if(j!=i){
                        int mPx = player[i].getPx();
                        int mPy = player[i].getPy();
                        int yPx = player[j].getPx();
                        int yPy = player[j].getPy();
                        if(Distance(mPx,mPy,yPx,yPy)<100){
                            player[i].GoLocate(SUPPORT,mPx*2-yPx,mPy*2-yPy);
                            player[j].GoLocate(SUPPORT,yPx*2-mPx,yPx*2-mPy);
                        }
                    }
                }
            }
        }

        player[i].Move();


プレイヤーの移動時に、この「相手との距離」判定を行う。
最初に「プレイヤーがSUPPORT状態以外のとき」の判定を入れてる。
ここに来るより先にSUPPORT状態になるのは、自分より前に判定したプレイヤーに
書き換えられる以外にありえない。
近い人ふたりとも同時に指示しないと、先に判断したほうが一方的に譲る展開になりそうで、
そういう部分から有利不利が出るようなのは作りたくない。

で、自分以外の全プレイヤーの距離を見て、近いキャラがいればそいつと離れる方向に動かす。
SUPPORT 状態ってのは違うんだけど、enumプレイヤー状態から適当に拾った。





bad6002c.png

座標計算、player[i].GoLocate(SUPPORT,mPx*2-yPx,mPy*2-yPy); 部分の内容はこんな感じ。
今さら丁寧に書くものでもないけど、いろいろと実験込みで。
適当にノートに落書きした内容を、ワードで作ってみた。めんどい上に華がない。

これがやりたかったのもペンタブレット買った理由のひとつなのに、ペンタブ使いにくい。



出来は上々。
もうちょい離れたほうがいいような気もしたけど、この重なり具合がいい感じ。
先に着弾地点押さえたほうが勝ちというわけでもなく、いろいろと見ててたのしい。

なんか一方的にRed軍が勝つような流れになってきたんだけど、なんでだろうか。


PR


忍者ブログ [PR]
カレンダー
11 2024/12 01
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
フリーエリア
バーコード
ブログ内検索
P R
アクセス解析
カウンター