とりあえず、予定していた迷路プログラムの途中を・・・
色々と変更すると思うが、迷路プログラムを作成開始しました。
プログラムの更新は試験勉強の関係上、遅れ気味になると思いますが宜しくお願いします。
ブログへソースコードを書くのが面倒なので、
前のk-means方のように私のwikiの方へコピペしておきます。(すいません・・・)
ソースコードの内容は・・・あまり期待しないで下さい。
ここが駄目ってところがあれば遠慮なく言って下さい。
私の実力で対応できる範囲で対応します。
main.cpp(メイン処理)
#include "Floor.h"
// メイン処理
int main()
{
Floor f;
// 移動先を評価する
f.isTurn( Floor::UP );
f.isTurn( Floor::DOWN );
f.isTurn( Floor::LEFT );
f.isTurn( Floor::RIGHT );
return 0;
}
Floor.h(迷路の部屋クラスヘッダ)
#ifndef _FLOOR_H_
#define _FLOOR_H_
class Floor
{
public:
// 進行先の属性
enum TurnAttribute
{
GO = 0,
WALL
};
// 進行方向の種類
enum DirectionType
{
UP = 0,
DOWN,
LEFT,
RIGHT,
DIRECTION_COUNT
};
public:
// コンストラクタ
Floor();
// デストラクタ
~Floor();
// 指定した進行先に移動できるか判定(DIRECTION_COUNT以外)
bool isTurn( DirectionType direction_type );
private:
// 進行先の上
TurnAttribute up_;
// 進行先の下
TurnAttribute down_;
// 進行先の左
TurnAttribute left_;
// 進行先の右
TurnAttribute right_;
};
#endif
Floor.cpp(迷路の部屋クラスソース)
#include "Floor.h"
#include <iostream>
// 進行方向
struct DirectionOfMovement
{
// 進行方向を決める配列の大きさ
static const int ARRAY_DIRECTION_SIZE = 2;
// 進行方向
Floor::DirectionType dir;
// 配列の方向
int array_direction[ARRAY_DIRECTION_SIZE];
};
const DirectionOfMovement dom[Floor::DIRECTION_COUNT] =
{
{ Floor::UP, { -1, 0 } }, // 上
{ Floor::DOWN, { 1, 0 } }, // 下
{ Floor::LEFT, { 0, -1 } }, // 左
{ Floor::RIGHT, { 0, 1 } } // 右
};
// コンストラクタ
Floor::Floor()
:up_( GO )
,down_( WALL )
,left_( WALL )
,right_( GO )
{
}
// デストラクタ
Floor::~Floor()
{
}
// 指定した進行先に移動できるか判定(DIRECTION_COUNT以外)
bool Floor::isTurn( DirectionType direction_type )
{
// 進行方向の数を指定されたらfalseを返す
if( direction_type == DIRECTION_COUNT ) { return false; }
// 進行方向先は?
switch( direction_type )
{
case UP: // 上
std::cout << "UP=" << ( (up_ == GO) ? "GO" : "NG" ) << std::endl;
return (up_ == GO) ? true : false;
case DOWN: // 下
std::cout << "DOWN=" << ( (down_ == GO) ? "GO" : "NG" ) << std::endl;
return (down_ == GO) ? true : false;
case LEFT: // 左
std::cout << "LEFT=" << ( (left_ == GO) ? "GO" : "NG" ) << std::endl;
return (left_ == GO) ? true : false;
case RIGHT: // 右
std::cout << "RIGHT=" << ( (right_ == GO) ? "GO" : "NG" ) << std::endl;
return (right_ == GO) ? true : false;
default: // 一応
return false;
};
}
この記事がみなさんの少しでも役に立てば僥倖です!!
最終更新:2009年12月02日 23:23