Add files via upload

Это первый мой русский комментарий.
Я в FallSimulator поправил кучу багов! Но один из не хочет поправляться...
Михаил, я на занятии расскажу - что пытался сделать.
Пока что, если можете, помогите, пожалуйста! У меня после своих редактирований блоки не ставятся. Шо делать?..
This commit is contained in:
Андрей 2019-12-04 16:40:25 +03:00 committed by GitHub
parent 05647e125a
commit b90e675eca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 118 additions and 39 deletions

View file

@ -22,6 +22,7 @@ int middleY;
int extentX; int extentX;
int extentY; int extentY;
bool lvlCreatingIsStarted = false;
bool gameIsStarted = false; bool gameIsStarted = false;
struct Button { struct Button {
@ -37,6 +38,8 @@ struct MapPart {
int blocktype; int blocktype;
}; };
MapPart gettedMapParts[MAP_LENGHT + 1];
HDC block; HDC block;
HDC quest; HDC quest;
HDC water; HDC water;
@ -55,6 +58,8 @@ bool addingBlock(bool clicked, RECT blockBut, HDC pic,
int blocktype, int* arrElem, MapPart mapParts[]); int blocktype, int* arrElem, MapPart mapParts[]);
int readFile(string file, MapPart gettedMapParts[]); int readFile(string file, MapPart gettedMapParts[]);
void playGame(MapPart gettedMapParts[]);
bool areElemWithTheseCoordsExisting(RECT coords, MapPart mapParts[]);
int main() int main()
{ {
@ -91,6 +96,13 @@ int main()
drawMenu(); drawMenu();
if (lvlCreatingIsStarted) {
mainFunc();
}
else if (gameIsStarted) {
playGame(gettedMapParts);
}
txEnd(); txEnd();
txDeleteDC(block); txDeleteDC(block);
@ -167,6 +179,7 @@ void drawMenu()
drawButton(buttonStart); drawButton(buttonStart);
drawButton(buttonExit); drawButton(buttonExit);
drawButton(buttonPlay);
txSetColor(TX_BLACK, 3); txSetColor(TX_BLACK, 3);
txSetFillColor(TX_TRANSPARENT); txSetFillColor(TX_TRANSPARENT);
@ -174,18 +187,18 @@ void drawMenu()
drawButton(buttonHelp); drawButton(buttonHelp);
txSleep(50); txSleep(50);
bool flwindow = false;
while (!GetAsyncKeyState('Q') || !GetAsyncKeyState(VK_ESCAPE)) { while (!GetAsyncKeyState('Q') || !GetAsyncKeyState(VK_ESCAPE)) {
if (!gameIsStarted) { if (!lvlCreatingIsStarted && !gameIsStarted) {
if (In(txMousePos(), buttonStart.coords) && txMouseButtons() & 1) { if (In(txMousePos(), buttonStart.coords) && txMouseButtons() & 1) {
while (txMouseButtons() & 1) { while (txMouseButtons() & 1) {
txSleep(10); txSleep(10);
} }
//loadingAnimation(2, 3); loadingAnimation(2, 3);
txSleep(50); txSleep(50);
mainFunc();
lvlCreatingIsStarted = true;
} }
if (In(txMousePos(), buttonExit.coords) && txMouseButtons() & 1) { if (In(txMousePos(), buttonExit.coords) && txMouseButtons() & 1) {
while (txMouseButtons() & 1) { while (txMouseButtons() & 1) {
@ -223,24 +236,16 @@ void drawMenu()
if (In(txMousePos(), buttonPlay.coords) && txMouseButtons() & 1) { if (In(txMousePos(), buttonPlay.coords) && txMouseButtons() & 1) {
MapPart gettedMapParts[MAP_LENGHT + 1];
int arrElem = readFile("level1.fslvl", gettedMapParts); int arrElem = readFile("level1.fslvl", gettedMapParts);
for (int i = 0; i < MAP_LENGHT; i++) { gameIsStarted = true;
if (gettedMapParts[i].visible) {
txBitBlt(txDC(),
gettedMapParts[i].coords.left,
gettedMapParts[i].coords.top,
60, 60,
gettedMapParts[i].picture
);
}
}
} }
} }
if (lvlCreatingIsStarted || gameIsStarted) {
break;
}
txSleep(10); txSleep(10);
} }
} }
@ -268,8 +273,6 @@ void loadingAnimation(int delay, int speed)
void mainFunc() void mainFunc()
{ {
gameIsStarted = true;
int arrElem = 0; int arrElem = 0;
int selectedPict = -1; int selectedPict = -1;
const int BLOCK_SIZE = 120; const int BLOCK_SIZE = 120;
@ -309,7 +312,7 @@ void mainFunc()
bool clickedWater = false; bool clickedWater = false;
bool clickedFire = false; bool clickedFire = false;
while (!GetAsyncKeyState('Q')) { while (!GetAsyncKeyState('Q') || !GetAsyncKeyState(VK_ESCAPE)) {
background(TX_WHITE); background(TX_WHITE);
Win32::TransparentBlt(txDC(), blockBut.left, blockBut.top, 120, 120, block, Win32::TransparentBlt(txDC(), blockBut.left, blockBut.top, 120, 120, block,
@ -390,17 +393,35 @@ void mainFunc()
} }
} }
//round((mapParts[elem].coords.left + 30) / 60) * 60
//moving picture //moving picture
RECT oldCoords = mapParts[selectedPict].coords;
if (selectedPict >= 0 && txMouseButtons() & 1) { if (selectedPict >= 0 && txMouseButtons() & 1) {
txBitBlt(txDC(), txMouseX() - 30, txMouseY() - 30,
txBitBlt(txDC(),
txMouseX() - 30, txMouseY() - 30,
60, 60, mapParts[selectedPict].picture); 60, 60, mapParts[selectedPict].picture);
} }
if (selectedPict >= 0 && !(txMouseButtons() & 1)) { if (selectedPict >= 0 && !(txMouseButtons() & 1)) {
mapParts[selectedPict].coords = {
txMouseX() - 30, txMouseY() - 30, RECT elRectCoords = {
txMouseX() + 30, txMouseY() + 30 (round((txMouseX() - 30) + 30 / 60) * 60),
(round((txMouseY() - 30) + 30 / 60) * 60),
(round((txMouseX() + 30) - 30 / 60) * 60),
(round((txMouseY() + 30) - 30 / 60) * 60)
}; };
selectedPict = -1;
if (!areElemWithTheseCoordsExisting(elRectCoords, mapParts)) {
mapParts[selectedPict].coords = elRectCoords;
selectedPict = -1;
}
else {
mapParts[selectedPict].coords = oldCoords;
selectedPict = -1;
}
} }
//button to complete LevelCreating //button to complete LevelCreating
@ -462,6 +483,10 @@ void mainFunc()
} }
txSleep(10); txSleep(10);
if (GetAsyncKeyState('Q') || GetAsyncKeyState(VK_ESCAPE)) {
break;
}
} }
} }
@ -480,12 +505,21 @@ bool addingBlock(bool clicked, RECT blockBut, HDC pic,
if (*arrElem < MAP_LENGHT) { if (*arrElem < MAP_LENGHT) {
if (txMouseX() < txGetExtentX() - BLOCK_SIZE) { RECT elRectCoords = {
(round((txMouseX() - 30) + 30 / 60) * 60),
(round((txMouseY() - 30) + 30 / 60) * 60),
(round((txMouseX() + 30) - 30 / 60) * 60),
(round((txMouseY() + 30) - 30 / 60) * 60)
};
if ((txMouseX() < txGetExtentX() - BLOCK_SIZE) &&
!(areElemWithTheseCoordsExisting(elRectCoords, mapParts)))
{
cout << !(areElemWithTheseCoordsExisting(elRectCoords, mapParts)) << endl;
mapParts[*arrElem] = { mapParts[*arrElem] = {
{ elRectCoords, true, pic, blocktype
txMouseX() - 30, txMouseY() - 30, txMouseX() + 30, txMouseY() + 30
}, true, pic, blocktype
}; };
(*arrElem)++; (*arrElem)++;
@ -572,3 +606,46 @@ int readFile(string file, MapPart gettedMapParts[])
return arrElem; return arrElem;
} }
void playGame(MapPart gettedMapParts[])
{
background(TX_WHITE);
for (int i = 0; i < MAP_LENGHT; i++) {
if (gettedMapParts[i].visible) {
txBitBlt(txDC(),
gettedMapParts[i].coords.left,
gettedMapParts[i].coords.top,
60, 60,
gettedMapParts[i].picture
);
}
}
}
bool areElemWithTheseCoordsExisting(RECT coords, MapPart mapParts[])
{
RECT elemCoords;
bool areElemExisting;
for (int i = 0; i < MAP_LENGHT + 1; i++) {
elemCoords = mapParts[i].coords;
if (coords.left == elemCoords.left &&
coords.top == elemCoords.top &&
coords.right == elemCoords.right &&
coords.bottom == elemCoords.bottom &&
mapParts[i].visible
) {
areElemExisting = true;
}
else {
areElemExisting = false;
}
}
return areElemExisting;
}

View file

@ -1,11 +1,13 @@
Block,300,180,360,240 Block,240,120,300,180
Block,120,300,180,360 Block,120,240,180,300
Block,480,240,540,300 Block,360,180,420,240
Block,420,180,480,240
Quest,600,120,660,180
Fire,600,180,660,240
Water,300,300,360,360
Water,360,300,420,360
Water,420,300,480,360
Block,780,240,840,300
Block,960,300,1020,360 Block,960,300,1020,360
Quest,840,240,900,300 Block,900,240,960,300
Fire,840,300,900,360 Quest,1080,360,1140,420
Water,480,360,540,420
Block,720,240,780,300
Quest,600,240,660,300
Water,420,360,480,420
Water,540,360,600,420