Witam wszystkich serdecznie! Piszę swoją pierwszą grę i chciałbym Was prosić o podpowiedź. Wprowadziłem obsługę klawiatury i chciałem na podobnej zasadzie obsłużyć też funkcję strzelania. Jednak jeśli próbuję zrobić to analogicznie do wyżej wspomnianego poruszania się z tym że w pętli po każdym przesunięciu wykonuję opóźnienie pętli o 1 sekundę za pomocą Sleep(1000) jednakże "pocisk" zamiast przesuwać się co sekundę wyżej "stoi" w miejscu i dopiero po odczekaniu odpowiedniej ilości sekund znajduje się w pożądanym miejscu :/ . Fragment który próbowałem napisać z wykorzystaniem sleep'a jest pogrubiony i zakomentowany w funkcji void p_tank::move(). Z góry dziękuję za wszelką podpowiedź ;) . Poniżej zamieszczam kod:
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
int const w = 40;
int const h = 30;
struct tank_pos
{
int x, y;
};
class Map
{
int **map;
public:
Map();
void draw();
void put_player(tank_pos&);
void put_shot(tank_pos&);
void reset();
~Map();
};
class p_tank
{
tank_pos player;
tank_pos shot;
int kierunek;
public:
p_tank();
tank_pos& pozycja_czolgu();
void move();
~p_tank();
};
Map::Map()
{
map = new int*[h];
for (int i = 0; i < h; ++i) {
map[i] = new int[w];
}
for (int i = 0; i < h;i++)
for (int j = 0; j < w; j++)
map[i][j] = 0;
}
void Map::draw()
{
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
switch (map[i][j])
{
case 0:
cout << " ";
break;
case 1:
cout << "T";
break;
case 2:
cout << "*";
break;
}
}
cout << endl;
}
}
void Map::put_player(tank_pos &player)
{
map[player.x][player.y] = 1;
}
void Map::reset()
{
for (int i = 0; i < h; i++)
for (int j = 0; j < w; j++)
map[i][j] = 0;
}
Map::~Map()
{
if (map)
{
delete[] map;
map = NULL;
}
}
p_tank::p_tank()
{
player.x = 29;
player.y = 20;
}
tank_pos& p_tank::pozycja_czolgu()
{
return player;
}
void p_tank::move()
{
switch (getch())
{
case 'w':
**/*for (int i = player.x; i > 25; i--)
{
Sleep(1000);
player.x--;
}*/**
if (player.x - 1 == -1)
break;
else
player.x--;
kierunek = 1;
break;
case 's':
if (player.x + 1 == h)
break;
else
player.x++;
kierunek = 2;
break;
case 'a':
if (player.y - 1 == -1)
break;
else
player.y--;
kierunek = 3;
break;
case 'd':
if (player.y + 1 == w)
break;
else
player.y++;
kierunek = 4;
break;
}
}
p_tank::~p_tank()
{
}
int _tmain(int argc, _TCHAR* argv[])
{
Map mapa;
p_tank T;
for (;;)
{
mapa.reset();
mapa.put_player(T.pozycja_czolgu());
mapa.draw();
T.move();
system("cls");
}
system("PAUSE");
return 0;
}