Witajcie. Szukam odpowiedzi na irytującą mnie sytuację. Mianowicie zacząłem pisać sobie projekcik na zaliczenie i napotkałem na pewną trudność. Tworzę snake'a, jednak dotychczas miałem ustawione że plansza jest pod cls i odświeżanie powoduje brak wydajności programu, dodatkowo na słabszym sprzęcie jest to widoczne i powoduje ścinki. Chciałbym zaimplementować funkcję, która będzie mi tylko część nadpisywać, znalazłem takową, jednak nie wiem jak to zaimplementować. Byłbym bardzo wdzięczny gdyby ktoś mi powiedział gdzie to "wrzucić" i co nadmienić w tej funkcji. Z góry dziękuję <3
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
enum eDirection{ STOP=0, l, p, g, d};
eDirection dir;
int w=100, h=50;
int x,y, fruitX, fruitY, score;
int tailX[100], tailY[100];
int nTail;
void clearScreen() {
output = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos = { 0,0 };
SetConsoleCursorPosition(output, pos);
}
using namespace std;
bool gameOver;
void drawingMap(){
system("cls");
for (int i=0; i<w+2; i++){
cout << "#";
}
cout << endl;
for (int i=0; i<h; i++){
for (int j =0; j<w; j++){
if (j==0)
cout << "#";
if (i == y && j ==x){
cout << "O";
}
else if (i == fruitY && j == fruitX){
cout << "*";
}
else {
bool print = false;
for(int k = 0; k<nTail; k++){
if (tailX[k] == j && tailY[k] == i){
cout << "o";
print = true;
}
}
if (!print)
cout << " ";
}
if (j == w - 1)
cout << "#";
}
cout << endl;
}
for (int i=0; i<w+2; i++){
cout << "#";
}
cout << endl << "Score: " << score;
}
void Setup(){
gameOver = false;
dir = STOP;
x = w/2;
y = h/2;
fruitX = rand()%w;
fruitY = rand()%h;}
void Input(){
if (_kbhit())
{
switch (_getch())
{
case 'a':
dir = l;
break;
case 'd':
dir = p;
break;
case 'w':
dir = g;
break;
case 's':
dir = d;
break;
case 'x':
gameOver = true;
break;
}
}
}
void Logic(){
int prevX = tailX[0];
int prevY = tailY[0];
int prev2X, prev2Y;
tailX[0] = x;
tailY[0] = y;
for(int i =1; i < nTail; i++){
prev2X = tailX[i];
prev2Y = tailY[i];
tailX[i] = prevX;
tailY[i] = prevY;
prevX = prev2X;
prevY = prev2Y;}
switch (dir){
case l:
x--;
break;
case p:
x++;
break;
case g:
y--;
break;
case d:
y++;
break;
default:
break;
}
//if (x > w || x < 0 || y > h || y < 0)
// gameOver = true;
if (x >=w){
x = 0;
}
else if( x < 0){
x = w - 1;
}
if (y >=h){
y = 0;
}
else if( y < 0){
y = h - 1;
}
for( int i = 0; i < nTail; i++){
if (tailX[i] == x && tailY[i] == y)
gameOver = true;
}
if (x==fruitX && y == fruitY){
score += 10;
fruitX = rand()%w;
fruitY = rand()%h;
nTail++;}}
int main(){
Setup();
while (!gameOver){
drawingMap();
Input();
Logic();
Sleep(12);
}
return 0;
}
void clearScreen() {
output = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos = { 0,0 };
SetConsoleCursorPosition(output, pos);
}