迷路1


とりあえず、予定していた迷路プログラムの途中を・・・


色々と変更すると思うが、迷路プログラムを作成開始しました。
プログラムの更新は試験勉強の関係上、遅れ気味になると思いますが宜しくお願いします。

ブログへソースコードを書くのが面倒なので、
前の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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。