first commit
This commit is contained in:
+120
@@ -0,0 +1,120 @@
|
||||
#include "Tetris.h"
|
||||
|
||||
Tetris::Tetris()
|
||||
{
|
||||
paint_device().resize(
|
||||
Size(
|
||||
m_Width + 6,
|
||||
m_Height
|
||||
)
|
||||
);
|
||||
|
||||
m_GameField.resize(
|
||||
m_Width,
|
||||
m_Height
|
||||
);
|
||||
|
||||
m_Figure =
|
||||
new IBlock(
|
||||
Point(5,1)
|
||||
);
|
||||
|
||||
track_key(KEY_LEFT);
|
||||
track_key(KEY_RIGHT);
|
||||
track_key(KEY_DOWN);
|
||||
track_key(' ');
|
||||
}
|
||||
Tetris::~Tetris()
|
||||
{
|
||||
delete m_Figure;
|
||||
}
|
||||
bool Tetris::end() const
|
||||
{
|
||||
return m_End;
|
||||
}
|
||||
void Tetris::render(
|
||||
PaintDevice& paintDevice
|
||||
)
|
||||
{
|
||||
m_GameField.render(
|
||||
paintDevice
|
||||
);
|
||||
|
||||
if (m_Figure)
|
||||
{
|
||||
m_Figure->render(
|
||||
paintDevice
|
||||
);
|
||||
}
|
||||
|
||||
Vector2 scorePos(m_Width + 1, 2);
|
||||
|
||||
std::wstring text = L"SCORE: " + std::to_wstring(m_Score);
|
||||
|
||||
for (size_t i = 0; i < text.size(); i++)
|
||||
{
|
||||
paintDevice.set_char(
|
||||
Vector2(scorePos.x() + i, scorePos.y()),
|
||||
text[i]
|
||||
);
|
||||
}
|
||||
}
|
||||
void Tetris::update(int dt)
|
||||
{
|
||||
m_Figure->backup();
|
||||
|
||||
m_Figure->update(dt);
|
||||
|
||||
if (m_GameField.has_collision(*m_Figure))
|
||||
{
|
||||
m_Figure->restore();
|
||||
|
||||
m_GameField.merge(*m_Figure);
|
||||
|
||||
int lines = m_GameField.clear_lines();
|
||||
|
||||
if (lines > 0)
|
||||
{
|
||||
m_Score += lines * 100;
|
||||
}
|
||||
|
||||
delete m_Figure;
|
||||
|
||||
m_Figure =
|
||||
new IBlock(Point(5,1));
|
||||
}
|
||||
}
|
||||
void Tetris::on_button_press(
|
||||
int button
|
||||
)
|
||||
{
|
||||
m_Figure->backup();
|
||||
|
||||
switch (button)
|
||||
{
|
||||
case KEY_LEFT:
|
||||
m_Figure->move_left();
|
||||
break;
|
||||
|
||||
case KEY_RIGHT:
|
||||
m_Figure->move_right();
|
||||
break;
|
||||
|
||||
case KEY_DOWN:
|
||||
m_Figure->boost();
|
||||
break;
|
||||
|
||||
case ' ':
|
||||
m_Figure->rotate();
|
||||
break;
|
||||
}
|
||||
|
||||
if (
|
||||
m_GameField.has_collision(
|
||||
*m_Figure
|
||||
)
|
||||
)
|
||||
{
|
||||
m_Figure->restore();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user