#include
#include "item.h"
struct POINT_D {
double x;
double y;
};
POINT_D plus_pos;
bool running = true;
int fps = 60;
int tps = 20;
double set_tick_count = 0;
double FpsPerTps = 0;
double screen_size = 1;
POINT_D dpoint = { 0,0 };
POINT_D camera = { 0,0 };
bool up = false;
int player_change = 0;
ENTITY* player;
ENTITY* copy_player;
Window* window = nullptr;
Draw* draw;
POINT_D move = { 0,0 };
POINT_D speed = { 0,0 };
THREAD(screen) {
window = new Window(L"Window", L"", 1280, 720);
draw = new Draw(window);
LARGE_INTEGER frequency;
QueryPerformanceFrequency(&frequency);
LARGE_INTEGER EndTick;
LARGE_INTEGER _StartTick;
QueryPerformanceCounter(&_StartTick);
while(window->window_running()) {
QueryPerformanceCounter(&EndTick);
if (EndTick.QuadPart - _StartTick.QuadPart > frequency.QuadPart / fps) {
draw->start();
draw->box(rgb(0, 255, 0), 0, 0.9 * (window->height), window->width, window->height, rgb(0, 255, 0));
if ((move.x > (speed.x / FpsPerTps) && speed.x > 0) || (move.x < (speed.x / FpsPerTps) && speed.x < 0)) {
copy_player->x += speed.x / FpsPerTps;
move.x -= speed.x / FpsPerTps;
}
else if (move.x == 0) {
speed.x = 0;
}
else {
copy_player->x += move.x;
move. x = 0;
}
if ((move.y > (speed.y / FpsPerTps) && speed.y > 0) || (move.y < (speed.y / FpsPerTps) && speed.y < 0)) {
copy_player->y += speed.y / FpsPerTps;
move.y -= speed.y / FpsPerTps;
}
else if (move.y == 0) {
speed.y = 0;
}
else {
copy_player->y += move.y;
move. y = 0;
}
for (int y = 0; y < 24; y++) {
for (int x = 0; x < 21; x++) {
if (copy_player->pixel[21 * y + x] != (COLORREF)-1) {
draw->box(copy_player->pixel[21 * y + x], copy_player->x * (double)(window->height) + x * (double)(window->height) * 0.0065, copy_player->y * (double)(window->height) + y * (double)(window->height) * 0.0065, (double)(window->height) * 0.0065, (double)(window->height) * 0.0065, copy_player ->pixel[21 * y + x]);
}
}
}
draw->end();
//move_r++;
QueryPerformanceCounter(&_StartTick);
}
}
if (window != nullptr) {
delete window;
window = nullptr;
}
_endthreadex(0);
return 0;
}
void entity_move(ENTITY* _entity, POINT_D _speed, POINT_D _distance) {
_entity->x += _distance.x;
_entity->y += _distance.y;
speed.x += _speed.x;
speed.y += _speed.y;
move.x += _distance.x;
move.y += _distance.y;
}
void entity_move(ENTITY* _entity,double _speed_x,double _speed_y, double _distance_x,double _distance_y) {
_entity->x += _distance_x;
_entity->y += _distance_y;
speed.x += _speed_x;
speed.y += _speed_y;
move.x += _distance_x;
move.y += _distance_y;
}
int main() {
plus_pos.x = 0;
plus_pos.y = 0;
FpsPerTps = (double)fps / (double)tps;
player = new ENTITY(0, 0, 100, 100, 84, 96, sackgoon_moving, 21, 24);
copy_player = new ENTITY(player);
_beginthreadex(0, 0, &screen, 0, 0, 0);
while (window == nullptr) {
Sleep(1);
}
screen_size = (double)window->width / (double)window->height;
int move_r = 0;
/*
_beginthreadex(0, 0, &screen, 0, 0, 0);
while (window == nullptr) {
Sleep(1);
}
*/
LARGE_INTEGER frequency;
LARGE_INTEGER StartTick;
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&StartTick);
LARGE_INTEGER EndTick;
QueryPerformanceCounter(&EndTick);
while (window->window_running()) {
if (EndTick.QuadPart - StartTick.QuadPart > frequency.QuadPart / tps) {
if (input::key(VK_LEFT, window)) {
player_change++;
if (player_change < 20) {
for (int y = 0; y < 24; y++)
for (int x = 0; x < 21; x++) {
player->pixel[21 * y + x] = sackgoon_moving[21 * y + 20 - x];
}
}
else {
for (int y = 0; y < 24; y++)
for (int x = 0; x < 21; x++) {
player->pixel[21 * y + x] = sackgoon_moving2[21 * y + 20 - x];
}
}
if (player_change >= 40) {
player_change = 0;
}
entity_move(player, -0.005, 0, -0.005, 0);
}
if (input::key(VK_RIGHT, window)) {
player_change++;
if (player_change < 20) {
for (int r = 0; r < 24 * 21; r++) {
player->pixel[r] = sackgoon_moving[r];
}
}
else {
for (int r = 0; r < 24 * 21; r++) {
player->pixel[r] = sackgoon_moving2[r];
}
}
if (player_change >= 40) {
player_change = 0;
}
entity_move(player, 0.005, 0, 0.005, 0);
}
if (input::key(VK_UP, window)) {
if (!up || player->onground) {
dpoint.y = -0.1;
up = true;
}
}
else {
up = false;
}
dpoint.y += 0.02;
entity_move(player, dpoint, dpoint);
if (player->y + 0.156 >= 0.9) {
//move_arr(save_move, (int)FpsPerTps, dpoint, p_move);
entity_move(player, 0, 0, 0, 0.9 - 0.156 - player->y);
dpoint.y = 0;
//player->y = 0.9 - 0.156;
player->onground = true;
}
else {
player->onground = false;
}
POINT_D save_point = { copy_player->x,copy_player->y };
delete copy_player;
copy_player = new ENTITY(player);
copy_player->x = save_point.x;
copy_player->y = save_point.y;
//set_tick_count -= FpsPerTps;
move_r = 0;
QueryPerformanceCounter(&StartTick);
}
//printf("%f %f\n", player->x, player->y);
QueryPerformanceCounter(&EndTick);
}
running = false;
if (copy_player) {
delete copy_player;
}
delete player;
delete draw;
if (window != nullptr) {
delete window;
window = nullptr;
}
}