忍者ブログ
なんとなくだらだらと。方向性はまだ決まってない。 当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。 本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html DX Library Copyright (C) 2001-2008 Takumi Yamada.
[61] [60] [59] [58] [57] [56] [55] [54] [53] [52] [51]
×

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

ゲーム終了の判定とかは、まだ手付かず。



v004

ダウンロード http://hiyayakko.sarashi.com/MaruBatu/MB004.zip (2009.08.27)




main.cpp

#include "stdafx.h"

const char* WindowText = "○×ゲーム(3目並べ)v0.04";


struct MousePoint
{
    int sx,sy;      // スクリーン座標
    int  x, y;      // フィールド座標
    int status;     // マウスボタン情報
} mp;

enum Board
{
    NONE,
    MARU,
    BATU
};

Board board[3][3]={NONE};

struct GameStatus
{
    Board Teban;        // 今の手番
    bool MouseClick;    // マウスのクリック状況
} game;


    :
    :

int GameInit()
{
    game.Teban = MARU;
    return 0;
}




GameStatusなんてグローバル構造体をでっちあげる。
ゲームで使いそうなものを片っ端からここにぶち込んでいくと予想。
あまりキレイなプログラムの構想じゃないなあ。

GameInit() ゲームの初期化で手番を決める。先手は○。


main.cpp


int CheckKey()
{
    int key;
    key = GetJoypadInputState( DX_INPUT_KEY_PAD1 );

    if(key & PAD_INPUT_START) {        // PAD_INPUT_START  [ESC]Key
        return -1;
    }

    // マウスの位置を取得
    GetMousePoint( &mp.sx , &mp.sy );
    mp.status = GetMouseInput();

    // フィールド座標系に変換
    mp.x=-1;mp.y=-1;
    if(mp.sx>=100 && mp.sx < 400)
        mp.x = (mp.sx-100)/100;
    if(mp.sy>=100 && mp.sy < 400)
        mp.y = (mp.sy-100)/100;

    // マウスクリック情報
    game.MouseClick = false;
    int mouse = GetMouseInput();
    if((mouse&MOUSE_INPUT_LEFT)!=0){
        if((mp.x>=0)&&(mp.y>=0)){
            game.MouseClick = true;
        }
    }

    return 0;
}



マウスから、クリックされたかどうかの状況を返す処理を追加。
ここで、その入力がゲーム的に有効かどうかの判定をしてもいいんだけど、ここは敢えて
他に任せる流れに。
入力の処理はあくまでも入力だけ担当していればいい。
簡単な処理だから、こちらの子が仕事してもいいんだけど、今だからけじめはしっかり。


で、その任されるゲーム内処理

main.cpp


void GameFlame()
{
    if(game.MouseClick == true){            // マウスクリックがあったとき
        if(board[mp.y][mp.x]==NONE){        // カーソル位置の盤面が空白なら
            board[mp.y][mp.x]=game.Teban;   // 手番のひとのカーソルを置く
            if(game.Teban==MARU) game.Teban = BATU;
            else game.Teban = MARU;         // 手番を入れ替える
        }
    }

       
    return;
}



今のところは至極単純。コメントのとおり。

次は表示。

main.cpp


void DrawScene()
{
    static const int WHITE = GetColor(255,255,255);
    static const int BLACK = GetColor(  0,  0,  0);
    static const int RED   = GetColor(255, 32, 32);
    static const int BLUE  = GetColor( 64, 64,255);
    static const int YELLOW= GetColor(255,255, 32);

    // たてたてよこよこ
    DrawLine(200,100,200,400,WHITE, 10);
    DrawLine(300,100,300,400,WHITE, 10);
    DrawLine(100,200,400,200,WHITE, 10);
    DrawLine(100,300,400,300,WHITE, 10);

    // ○×を描く
    for(int y=0;y<3;y++){
        for(int x=0;x<3;x++){
            int curX = (x+1)*100;
            int curY = (y+1)*100;
            switch(board[y][x]){
                case MARU:
                    DrawCircle(curX+50,curY+50,43,  RED,1);
                    DrawCircle(curX+50,curY+50,30,BLACK,1);
                    break;
                case BATU:
                    DrawLine(curX+10,curY+10,curX+90,curY+90,BLUE,15);
                    DrawLine(curX+10,curY+90,curX+90,curY+10,BLUE,15);
                    break;
                default:
                    break;
            }
        }
    }

    // マウスカーソル位置に枠を描く
    if((mp.x>=0)&&(mp.y>=0)){
        int curX = (mp.x+1)*100+5;
        int curY = (mp.y+1)*100+5;
        DrawLine(curX,curY,curX+90,curY,YELLOW,5);
        DrawLine(curX,curY,curX,curY+90,YELLOW,5);
        DrawLine(curX+90,curY,curX+90,curY+90,YELLOW,5);
        DrawLine(curX,curY+90,curX+90,curY+90,YELLOW,5);

    }
    int line = 0;
    DrawFormatString(400,line,WHITE,"MousePos(%d,%d)",mp.sx,mp.sy);line+=20;
    DrawFormatString(400,line,WHITE,"BoardPos(%d,%d)",mp.x ,mp.y );line+=20;
    if(game.Teban==MARU) {DrawString( 400,line,"Teban:Maru",RED);line+=20;}
    else {DrawString(400,line,"Teban:Batu",BLUE);line+=20;}

    return;
}


難しいところは無いと思う。
2重ループでボード配列を調べて、○×あれば描く。

最後にデバッグ情報ちょっと追加。○番×番を表示してみる。枠外のクリックとかで手番が
飛ばされないか確認のため。こんなところの作りは雑でいい。



ブログエントリ
○×ゲームを作る(1) http://http://hiyayakkoprog.blog.shinobi.jp/Entry/53/

ダウンロードHP http://hiyayakko.sarashi.com/Marubatu/MaruBatu.html

したらば掲示板 http://jbbs.livedoor.jp/bbs/read.cgi/computer/42268/1250213377/l50
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
アクセス解析
カウンター