Witam.
Otóż jak niektórzy mogą wiedzieć z mojego poprzedniego tematu, chcę zrobić grę strategiczną w konsoli.
W tej chwili chciałem się zająć mapą, a dokładnie faktem jej wyświetlania. (z tego powodu sama mapa to w tej chwili krata rodem z obciachowej koszuli) Tak jak wtedy, zrobiłem osobny program w celu przetestowania, czy to działa.
Chciałem otoczyć ją takimi “belkami”, jednak to się pojawia problem.
Po prostu pokażę screen, bo ciężko to wytłumaczyć.
Robiłem już z tym kodem chyba wszystko, ale nie mam pojęcia, jak to naprawić…
#include iostream
#include windows.h
#include conio.h
#include fstream
#include "klasy.h"
using namespace std;
Pole mapa[260][260];
void kolor(string fore, string bck)
{
HANDLE h;
h = GetStdHandle(STD_OUTPUT_HANDLE);
int tekst=0, tlo=0;
if(fore=="black") tekst = 0;
if(fore=="blue") tekst = 1;
if(fore=="green") tekst = 2;
if(fore=="cyan") tekst = 3;
if(fore=="red") tekst = 4;
if(fore=="violet") tekst = 5;
if(fore=="gold") tekst = 6;
if(fore=="white") tekst = 7;
if(fore=="gray") tekst = 8;
if(fore=="lblue") tekst = 9;
if(fore=="lgreen") tekst = 10;
if(fore=="lcyan") tekst = 11;
if(fore=="lred") tekst = 12;
if(fore=="lviolet") tekst = 13;
if(fore=="lgold") tekst = 14;
if(fore=="lwhite") tekst = 15;
if(bck=="black") tlo = 0;
if(bck=="blue") tlo = 1;
if(bck=="green") tlo = 2;
if(bck=="cyan") tlo = 3;
if(bck=="red") tlo = 4;
if(bck=="violet") tlo = 5;
if(bck=="gold") tlo = 6;
if(bck=="white") tlo = 7;
if(bck=="gray") tlo = 8;
if(bck=="lblue") tlo = 9;
if(bck=="lgreen") tlo = 10;
if(bck=="lcyan") tlo = 11;
if(bck=="lred") tlo = 12;
if(bck=="lviolet") tlo = 13;
if(bck=="lgold") tlo = 14;
if(bck=="lwhite") tlo = 15;
SetConsoleTextAttribute(h, tekst+16*tlo);
}
void utworz_mape()
{
for(int i=0; i260; i++)
{
for(int j=0; j260; j++)
{
if(j%2==0)
{
mapa[i][j].znak = 'Û';
mapa[i][j].kolor = 'h';
}
else if(i%2==0)
{
mapa[i][j].znak = '°';
mapa[i][j].kolor = 'r';
}
else
{
mapa[i][j].znak = '±';
mapa[i][j].kolor = 'b';
}
}
}
}
void malujznak(char litera, char znak)
{
string koloreg;
if(litera=='b') koloreg = "lblue";
if(litera=='g') koloreg = "lgreen";
if(litera=='w') koloreg = "lwhite";
if(litera=='r') koloreg = "lred";
if(litera=='y') koloreg = "lgold";
if(litera=='s') koloreg = "lcyan";
if(litera=='p') koloreg = "lviolet";
if(litera=='d') koloreg = "gold";
if(litera=='h') koloreg = "white";
kolor(koloreg, "black");
cout znak;
}
bool czytaj_pionowa_belke(Belka_pion belka, const char* plikz, const char* plikzk)
{
fstream plik;
bool belki=false, belkik=false;
plik.open(plikz, ios_base::in);
if(plik.good()==true)
{
for(int i=0; i269; i++)
{
for(int j=0; j9; j++)
{
plik belka.belka[i][j];
}
}
belki = true;
}
plik.open(plikzk, ios_base::in);
if(plik.good()==true)
{
plik belka.kolor;
belkik = true;
}
if((belki==true)(belkik==true)) return true;
else return false;
}
void pokaz_mape()
{
int x=0, y=0;
char opcja;
Belka_pion lewabelka;
czytaj_pionowa_belke(lewabelka, "txt/lewabelka.txt", "txt/lewabelkakolor.txt");
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
DWORD NumInputs = 0;
DWORD InputsRead = 0;
INPUT_RECORD irInput;
while(true)
{
GetNumberOfConsoleInputEvents(hInput, NumInputs);
system("cls");
for(int i=y; iy+21; i++)
{
for(int j=x; jx+51; j++)
{
if((i==y+10)(j==x+25))
{
kolor("lgold", "black");
cout "+";
}
else
{
if((i260)(j260)(i=0)(j=0)) malujznak(mapa[i][j].kolor, mapa[i][j].znak);
else if((j==-1)(i259+5))
{
kolor(lewabelka.kolor, "black");
malujznak('g', lewabelka.belka[i+6][0]);
malujznak('g', lewabelka.belka[i+6][1]);
malujznak('g', lewabelka.belka[i+6][2]);
malujznak('g', lewabelka.belka[i+6][3]);
malujznak('g', lewabelka.belka[i+6][4]);
}
else
{
kolor("gray", "black");
cout '±';
}
} //else
} //for (int j)
cout endl;
} //for (int i)
kolor("lwhite", "blue");
cout "y: " y " x: " x endl;
cout "y+: " y+10 " x+: " x+25 endl;
kolor("lwhite", "black");
opcja = getch();
ReadConsoleInput(hInput, irInput, 1, InputsRead);
switch(opcja)
{
case 'a':
{
if(x-50) x--;
break;
}
case 'd':
{
if(x259) x++;
break;
}
case 'w':
{
if(y-20) y--;
break;
}
case 's':
{
if(y259) y++;
break;
}
default:
{
;
}
}//switch
switch(irInput.Event.KeyEvent.wVirtualKeyCode)
{
case VK_LEFT:
{
if(x-10=-50) x = x-10;
break;
}
case VK_RIGHT:
{
if(x+10=259) x = x+10;
break;
}
case VK_UP:
{
if(y-10=-20) y = y-10;
break;
}
case VK_DOWN:
{
if(y+10=259) y = y+10;
break;
}
}
}//while
}
int main()
{
utworz_mape();
pokaz_mape();
return 0;
}
To jest plik klasy.h:
#ifndef krajez
#define krajez
#include iostream
#include vector
using namespace std;
struct Pole
{
char znak;
char kolor;
};
struct Belka_pion
{
char belka[269][9];
string kolor;
};
struct Belka_poziom
{
char belka[5][269];
string kolor;
};
#endif // krajez
Tak wygląda lewabelka.txt:
ŰŰŰŰŰŰŰŰŰ
۱ŰŰŰŰŰŰŰ
۱ŰŰŰ۱ŰŰ
Ű۱۱Ű۱Ű
Ű۱۱Ű۱Ű
۱±±ŰŰ۱Ű
۱۱Ű۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰ۱±ŰŰŰŰ
Ű۱۱ŰŰŰŰ
۱Ű۱±ŰŰŰ
±±ŰŰ۱ŰŰŰ
±Ű±±Ű±ŰŰŰ
±Ű±Ű±Ű±ŰŰ
±Ű±Ű±Ű±ŰŰ
±Ű۱Ű۱ŰŰ
۱ŰŰ۱ŰŰŰ
۱Ű۱±ŰŰŰ
۱±Ű±Ű±ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱±ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
Ű۱ŰŰŰŰŰŰ
Ű۱ŰŰŰŰŰŰ
Ű۱ŰŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱Ű۱ŰŰ
Ű۱±Ű۱ŰŰ
Ű۱ŰŰ۱ŰŰ
ŰŰ۱ŰŰ۱Ű
ŰŰ۱ŰŰ۱Ű
Ű۱ŰŰŰ۱Ű
Ű۱ŰŰŰŰŰŰ
Ű۱ŰŰŰŰŰŰ
Ű۱ŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱±ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
Ű۱Ű۱±ŰŰ
Ű۱Ű۱ŰŰŰ
Ű۱±Ű±ŰŰŰ
Ű۱Ű۱ŰŰŰ
Ű۱ŰŰ۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱±ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
Ű۱Ű۱±ŰŰ
Ű۱Ű۱ŰŰŰ
Ű۱±Ű±ŰŰŰ
Ű۱Ű۱ŰŰŰ
Ű۱ŰŰ۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
۱ŰŰŰŰŰŰŰ
۱ŰŰŰ۱ŰŰ
Ű۱۱Ű۱Ű
Ű۱۱Ű۱Ű
۱±±ŰŰ۱Ű
۱۱Ű۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰ۱±ŰŰŰŰ
Ű۱۱ŰŰŰŰ
۱Ű۱±ŰŰŰ
±±ŰŰ۱ŰŰŰ
±Ű±±Ű±ŰŰŰ
±Ű±Ű±Ű±ŰŰ
±Ű±Ű±Ű±ŰŰ
±Ű۱Ű۱ŰŰ
۱ŰŰ۱ŰŰŰ
۱Ű۱±ŰŰŰ
۱±Ű±Ű±ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱±ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
Ű۱ŰŰŰŰŰŰ
Ű۱ŰŰŰŰŰŰ
Ű۱ŰŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱Ű۱ŰŰ
Ű۱±Ű۱ŰŰ
Ű۱ŰŰ۱ŰŰ
ŰŰ۱ŰŰ۱Ű
ŰŰ۱ŰŰ۱Ű
Ű۱ŰŰŰ۱Ű
Ű۱ŰŰŰŰŰŰ
Ű۱ŰŰŰŰŰŰ
Ű۱ŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱±ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
Ű۱Ű۱±ŰŰ
Ű۱Ű۱ŰŰŰ
Ű۱±Ű±ŰŰŰ
Ű۱Ű۱ŰŰŰ
Ű۱ŰŰ۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
Ű۱ŰŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱±ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
Ű۱Ű۱±ŰŰ
Ű۱Ű۱ŰŰŰ
Ű۱±Ű±ŰŰŰ
Ű۱Ű۱ŰŰŰ
Ű۱ŰŰ۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
۱ŰŰŰŰŰŰŰ
۱ŰŰŰ۱ŰŰ
Ű۱۱Ű۱Ű
Ű۱۱Ű۱Ű
۱±±ŰŰ۱Ű
۱۱Ű۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰ۱±ŰŰŰŰ
Ű۱۱ŰŰŰŰ
۱Ű۱±ŰŰŰ
±±ŰŰ۱ŰŰŰ
±Ű±±Ű±ŰŰŰ
±Ű±Ű±Ű±ŰŰ
±Ű±Ű±Ű±ŰŰ
±Ű۱Ű۱ŰŰ
۱ŰŰ۱ŰŰŰ
۱Ű۱±ŰŰŰ
۱±Ű±Ű±ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱±ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰŰŰŰŰ
۱ŰŰŰŰŰŰŰ
۱ŰŰŰ۱ŰŰ
Ű۱۱Ű۱Ű
Ű۱۱Ű۱Ű
۱±±ŰŰ۱Ű
۱۱Ű۱ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰ۱±ŰŰŰŰ
Ű۱۱ŰŰŰŰ
۱Ű۱±ŰŰŰ
±±ŰŰ۱ŰŰŰ
±Ű±±Ű±ŰŰŰ
±Ű±Ű±Ű±ŰŰ
±Ű±Ű±Ű±ŰŰ
±Ű۱Ű۱ŰŰ
۱ŰŰ۱ŰŰŰ
۱Ű۱±ŰŰŰ
۱±Ű±Ű±ŰŰ
ŰŰ۱Ű۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱ŰŰŰ
ŰŰŰŰ۱±ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰŰŰŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱ŰŰŰŰŰ
ŰŰ۱±ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰ۱ŰŰŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
ŰŰŰŰŰ۱ŰŰ
Ű۱Ű۱±ŰŰ
Ű۱Ű۱ŰŰŰ
Ű۱±Ű±ŰŰŰ
Ű۱Ű۱ŰŰŰ
Ű۱ŰŰ۱ŰŰ
A plik lewabelkakolor.txt zawiera jedną linijkę:
gold
Dodam też, że wciąż się uczę programować i nie chciałbym napisanego od początku gotowca, tak jak go dostałem w poprzednim temacie. Poprzez dostawanie gotowców nic się nie nauczę, oraz nadal nie wiem, co było nie tak w tamtym kodzie.
Wolałbym raczej wyjaśnienie, co powoduje problem, gdyż sam się nie mogę tego dopatrzeć…