====== cPointクラスとcMycharaクラス ======
==== cPoint.h ====
#pragma once
class cPoint
{
float m_x, m_y;
public:
cPoint();
cPoint(float _x, float _y);
//引数なしと、引数付きのコンストラクタ
void setXY(float _x, float _y);
float getX();
float getY();
//自分の座標を表示する関数
void printPoint();
//cPoint同士の距離を測って返す関数
float calcDistanceTo(cPoint &_p);
//cPoint getPointXY();
};
==== cPoint.cpp ====
#include
#include
#include "cPoint.h"
using namespace std;
cPoint::cPoint()
{
m_x = 0.0;
m_y = 0.0;
}
cPoint::cPoint(float _x, float _y)
{
m_x = _x;
m_y = _y;
}
void cPoint::setXY(float _x, float _y)
{
m_x = _x;
m_y = _y;
}
float cPoint::getX()
{
return(m_x);
}
float cPoint::getY()
{
return(m_y);
}
void cPoint::printPoint()
{
cout << "(" << m_x << ", "
<< m_y << ")" << endl;
}
float cPoint::calcDistanceTo(cPoint& _p)
{
//pow(N,x) Nのx乗を計算して返す関数
//sqrt(x) ルートxを計算して返す関数
return(sqrt(pow(_p.getX() - this->m_x, 2.0)
+ pow(_p.getY() - this->m_y, 2.0)));
}
//cPoint cPoint::getPointXY()
//{
// return(*this);
//}
==== cMychar.h ====
#pragma once
#include "cPoint.h"
#include
class cMychara
{
//キャラの座標
cPoint m_position;
std::string m_name;
public:
//m_position:(0,0)
//m_name:""
//で初期化する
cMychara();
//名前と座標で初期化する
//コンストラクタとかいいよねぇ
cMychara(float _x, float _y,
std::string _name);
//名前と座標(cPoint型)で初期化する
//コンストラクタとかいいよねぇ
//const 型 &引数 の書き方は
//関数の中で引数の値は変更されないという意味
//引数の&は実引数の実体を関数内で使うよという意味
cMychara(const cPoint &_p,
std::string _name);
//名前をセット
void setName(std::string _name);
//座標をセット
void setPosition(float _x, float _y);
//キャラの名前:座標を表示する
//例 名前:(x座標, y座標) 改行
//キャラが5左に動く
void moveLeft();
//キャラが5右に動く
void moveRight();
//cPoint型の現在座標を返すゲッター
//後ろのconstは、私はメンバ変数の変更は
//しませんという宣言
cPoint getPoint() const;
//引数についたconstは関数内で引数が変更されない
//ことを保証する
float calcDistanceTo(const cMychara &_target);
void printCollision(const cMychara& _target);
bool detectCollision(const cMychara& _target);
void printPosition();
};
==== cMychar.cpp ====
#include "cMychara.h"
#include
cMychara::cMychara()
{
m_position.setXY(0, 0);
m_name = "";
}
cMychara::cMychara(float _x, float _y, std::string _name)
{
m_position.setXY(_x, _y);
m_name = _name;
}
cMychara::cMychara(const cPoint& _p, std::string _name)
{
m_position = _p;
m_name = _name;
}
void cMychara::printPosition()
{
std::cout << m_name << " : ";
m_position.printPoint();
std::cout << std::endl;
}
void cMychara::setName(std::string _name)
{
m_name = _name;
}
void cMychara::setPosition(float _x, float _y)
{
m_position.setXY(_x, _y);
}
void cMychara::moveLeft()
{
float tmpx = m_position.getX();
float tmpy = m_position.getY();
tmpx = tmpx - 5;
m_position.setXY(tmpx, tmpy);
}
void cMychara::moveRight()
{
float tmpx = m_position.getX();
float tmpy = m_position.getY();
tmpx = tmpx + 5;
m_position.setXY(tmpx, tmpy);
}
cPoint cMychara::getPoint() const
{
//m_positionは現在の座標
return(m_position);
}
float cMychara::calcDistanceTo(const cMychara& _target)
{
cPoint p1 = _target.getPoint();
cPoint p2 = this->getPoint();
float d = p1.calcDistanceTo(p2);
return(d);
}
void cMychara::printCollision(const cMychara& _target)
{
if (this->detectCollision(_target))
{
std::cout << "衝突" << std::endl;
}
else
{
std::cout << "距離は保たれている" << std::endl;
}
}
bool cMychara::detectCollision(const cMychara& _target)
{
float d = this->calcDistanceTo(_target);
if (d <= 32)
return true;
else
return false;
}
==== theMain.cpp ====
#include
#include "cpoint.h"
#include "cMychara.h"
using namespace std;
int main()
{
cMychara hero(cPoint(0, 0), "hero");
//座標を取得して表示
cPoint p1 = hero.getPoint();
p1.printPoint();
//hero.printPosition();
//hero.moveRight();
//hero.printPosition();
cMychara gob(cPoint(0,10), "Gob");
//gob君の座標をセット
gob.setPosition(20, 30);
//gob.printPosition();
cPoint p2 = gob.getPoint();
p2.printPoint();
float distance = hero.calcDistanceTo(gob);
cout << "distance: " << distance << endl;
gob.moveLeft();
distance = hero.calcDistanceTo(gob);
cout << "distance: " << distance << endl;
//課題:当たり判定を作ってみよう
//void Mychara::printCollision(const Mychar &_target);
//を作ってみよう。
//_targetとの距離を測り、
// 32以内に入ったら: ”衝突”
// それ以外:”距離は保たれている”
//と表示する関数
//以下の関数を作ると便利かな?
//bool Mychara::detectCollision(const Mychar &_target);
//キャラ同士が距離32以内に入ってるかどうかを
//true,falseで返す関数
hero.printCollision(gob);
gob.moveLeft();
gob.moveLeft();
gob.moveLeft();
gob.printPosition();
distance = hero.calcDistanceTo(gob);
hero.printCollision(gob);
cout << "distance: " << distance << endl;
//float distance = sqrt(
// (p2.getX() - p1.getX()) * (p2.getX() - p1.getX())
// + (p2.getY() - p1.getY()) * (p2.getY() - p1.getY()));
//cout << "distance:" << hero.calcDistanceTo(gob);
return 0;
}
//cPoint p1;//引数なしで初期化
//cPoint p2(3, 8);//引数付きで初期化.
//p1.setXY(15, 0);
//cout << "p1:";
//p1.printPoint();
//cout << "p2:";
//p2.printPoint();
//
////cout << "p1:(" << p1.getX() << ", "
//// << p1.getY() << ")" << endl;
////cout << "p2:(" << p2.getX() << ", "
//// << p2.getY() << ")" << endl;