Piece.hpp
//------------------------------------------------------------------------------
/// @file
/// @author ハル研究所プログラミングコンテスト実行委員会
///
/// @copyright Copyright (c) 2018 HAL Laboratory, Inc.
/// @attention このファイルの利用は、同梱のREADMEにある
/// 利用条件に従ってください。
//------------------------------------------------------------------------------
#pragma once
//------------------------------------------------------------------------------
#include "Vector2i.hpp"
//------------------------------------------------------------------------------
namespace hpc {
/// クッキーの生地。
class Piece
{
public:
/// @name コンストラクタ
//@{
Piece();
Piece(
const Vector2i& aPos,
int aWidth,
int aHeight,
int aRequiredHeatTurnCount,
int aScore
);
//@}
/// @name 各種問い合わせ
//@{
/// 生地の配置位置。
/// @detail 「生地を pos の位置に置く」とは、
/// まず pos の位置に生地のカドが来るように、
/// そしてそこから pos + Vector2i(width() - 1, width() - 1) までを
/// 対角線とする長方形が、その生地が占有する空間となるように、
/// 生地を配置することを意味します。
Vector2i pos() const;
/// 横幅。
int width() const;
/// 縦幅。
int height() const;
/// 今までに生地に与えられた加熱ターン数。
int currentHeatTurnCount() const;
/// 生地の完成に必要な加熱ターン数。
int requiredHeatTurnCount() const;
/// 生地の完成に必要な残り加熱ターン数。
int restRequiredHeatTurnCount() const;
/// 生地が完成したときに発生する得点。
int score() const;
//@}
/// @name 内部用関数
//@{
/// 生地の配置位置を設定する。
void setPos(const Vector2i& aPos);
/// 加熱ターン数を増やす。
void addHeatTurnCount(int aTurnCount);
/// 完成に必要な加熱ターン数以上の加熱を受けたか?
bool isCompleted() const;
//@}
private:
/// @name プライベートメンバ変数
//@{
/// 生地の位置。
Vector2i mPos;
/// 横幅。
int mWidth;
/// 縦幅。
int mHeight;
/// 現在までに与えられた加熱ターン数。
int mCurrentHeatTurnCount;
/// 完成に必要な加熱ターン数。
int mRequiredHeatTurnCount;
/// 完成で得られるスコア。
int mScore;
//@}
};
} // namespace
// EOF