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

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



v002


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


まずは、マウスを使うための準備


main.cpp

#include "stdafx.h"

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


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

enum Board
{
    NONE,
    MARU,
    BATU
};

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

 


 



なんでもかんでもクラスにしてしまいたいんだけど、今回なんとなく自重してみた。
マウス関連の構造体は相変わらずグローバル宣言。
引数にして、いちいち持ちまわるのはどうかと思うんだ。

enum でボードの設定作ってみたけど、とりあえず今のところは勇み足。
使うのは次以降。


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;

    return 0;
}
 

 


 


そういやこのブログで、DXライブラリの入力関連処理は初めてだな。
楽だからついいつも入力とプレイヤーの処理をいっしょに書いてしまう癖が出る。
癒着するのはよくない傾向だから、こうやって「入力は入力だけ」に専念してもらう。


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);

    // ためしに○×を書いてみる
    DrawCircle(150,150,43,  RED,1);
    DrawCircle(150,150,30,BLACK,1);
    DrawLine(110,210,190,290,BLUE,15);
    DrawLine(110,290,190,210,BLUE,15);

    // マウスカーソル位置に枠を書く
    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;

    return;
}
 




マウスポインタ構造体からボード座標(X(0~2)Y(0~2))をもらって、画面座標に変換。
該当マスの左上座標を計算して、そこから4本線を引いて四角を作る。
大きい四角書いて中をくり抜くやり方だと、その枠に先に書いた○×が消えるからな。

あと、座標計算がちゃんと出来てるか、デバッグ情報を出してみる。



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

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

PR


忍者ブログ [PR]
カレンダー
03 2025/04 05
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
フリーエリア
バーコード
ブログ内検索
P R
アクセス解析
カウンター