From cec37ad30d854671980794d743d70b0cc9852c19 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9?=
<50486086+DarkCat09@users.noreply.github.com>
Date: Fri, 15 Nov 2019 15:33:30 +0300
Subject: [PATCH] Add files via upload
Edited main.cpp
---
FallSimulation.bmarks | 9 +
FallSimulation.cpp | 128 ++++++-----
FallSimulation.cpp.save | 474 ++++++++++++++++++++++++++++++++++++++++
FallSimulation.layout | 48 ++++
4 files changed, 599 insertions(+), 60 deletions(-)
create mode 100644 FallSimulation.bmarks
create mode 100644 FallSimulation.cpp.save
create mode 100644 FallSimulation.layout
diff --git a/FallSimulation.bmarks b/FallSimulation.bmarks
new file mode 100644
index 0000000..b9c2926
--- /dev/null
+++ b/FallSimulation.bmarks
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/FallSimulation.cpp b/FallSimulation.cpp
index 8de58bd..530bd56 100644
--- a/FallSimulation.cpp
+++ b/FallSimulation.cpp
@@ -42,15 +42,6 @@ HDC quest;
HDC water;
HDC fire;
-HDC light_stone;
-HDC dark_stone;
-HDC vdark_stone;
-
-HDC orange_but;
-HDC green_but;
-HDC blue_but;
-HDC purple_but;
-
void background(COLORREF color);
void drawMenu();
void drawButton(Button but, bool picture);
@@ -60,6 +51,7 @@ bool addingBlock(bool clicked, RECT blockBut, HDC pic,
int blocktype, int* arrElem, MapPart mapParts[]);
void addingStone(int* arrElem, MapPart mapParts[]);
+int findElem(int* arrElem, RECT expCoords);
int main()
{
@@ -70,15 +62,6 @@ int main()
water = txLoadImage("pictures\\water.bmp");
fire = txLoadImage("pictures\\fire.bmp");
- light_stone = txLoadImage("pictures\\stone_light.bmp");
- dark_stone = txLoadImage("pictures\\stone_dark.bmp");
- vdark_stone = txLoadImage("pictures\\stone_vdark.bmp");
-
- //orange_but = txLoadImage("pictures\\orange-but.bmp");
- //green_but = txLoadImage("pictures\\green-but.bmp");
- //blue_but = txLoadImage("pictures\\blue-but.bmp");
- //purple_but = txLoadImage("pictures\\purple-but.bmp");
-
middleX = txGetExtentX() / 2;
middleY = txGetExtentY() / 2;
extentX = txGetExtentX();
@@ -144,12 +127,12 @@ void drawButton(Button but, bool picture)
void drawMenu()
{
- //button "Play"
- Button buttonPlay = {
+ //button "Start" (to start level creating)
+ Button buttonStart = {
{
middleX - 100, extentY / 3 - 50,
middleX + 100, extentY / 3 + 50
- }, "Play"
+ }, "Start"
};
//button "Exit"
@@ -164,14 +147,22 @@ void drawMenu()
Button buttonSets = {
{
extentX - 100, 0,
- extentX , 50
+ extentX , 50
}, "Settings"
};
+ //button "Play" (to play on created level)
+ Button buttonPlay = {
+ {
+ extentX - 100, extentY - 60,
+ extentX, extentY
+ }, "Play"
+ };
+
txSetColor(TX_BLACK, 3);
txSetFillColor(TX_WHITE);
- drawButton(buttonPlay, true);
+ drawButton(buttonStart, true);
drawButton(buttonExit, true);
txSetColor(TX_BLACK, 3);
@@ -183,7 +174,7 @@ void drawMenu()
while (!GetAsyncKeyState('Q')) {
if (!gameIsStarted) {
- if (In(txMousePos(), buttonPlay.coords) && txMouseButtons() & 1) {
+ if (In(txMousePos(), buttonStart.coords) && txMouseButtons() & 1) {
while (txMouseButtons() & 1) {
txSleep(10);
}
@@ -208,7 +199,59 @@ void drawMenu()
txSetFillColor(MY_BISQUE);
txRectangle(middleX - 200, middleY - 100, middleX + 200, middleY + 100);
- //code
+ }
+ if (In(txMousePos(), buttonPlay.coords) && txMouseButtons() & 1) {
+
+ MapPart gettedMapParts = readFile("level1.fslvl");
+
+ for (int i = 0; i < MAP_LENGHT; i++) {
+
+ if (gettedMapParts.visible[i]) {
+
+ switch (gettedMapParts[i].blocktype)
+ {
+ default:
+ txBitBlt(txDC(),
+ gettedMapParts[i].coords.left,
+ gettedMapParts[i].coords.top,
+ 60, 60,
+ block
+ );
+
+ case BLOCK_TYPE:
+ txBitBlt(txDC(),
+ gettedMapParts[i].coords.left,
+ gettedMapParts[i].coords.top,
+ 60, 60,
+ block
+ );
+
+ case QUEST_TYPE:
+ txBitBlt(txDC(),
+ gettedMapParts[i].coords.left,
+ gettedMapParts[i].coords.top,
+ 60, 60,
+ quest
+ );
+
+ case WATER_TYPE:
+ txBitBlt(txDC(),
+ gettedMapParts[i].coords.left,
+ gettedMapParts[i].coords.top,
+ 60, 60,
+ water
+ );
+
+ case FIRE_TYPE:
+ txBitBlt(txDC(),
+ gettedMapParts[i].coords.left,
+ gettedMapParts[i].coords.top,
+ 60, 60,
+ fire
+ );
+ }
+ }
+ }
}
}
@@ -459,38 +502,3 @@ bool addingBlock(bool clicked, RECT blockBut, HDC pic,
return clicked;
}
-void addingStone(int quanOfElemsToRep, int nElemsToRep[], int* arrElem, MapPart mapParts[])
-{
- HDC pict;
- RECT coords;
-
- switch(quanOfElemsToRep)
- {
- default:
- return;
-
- case 2:
- pict = light_stone;
-
- case 3:
- pict = dark_stone;
-
- case 4:
- pict = vdark_stone;
- }
-
- coords = mapParts[nElemsToRep[0]].coords;
-
- for (int i = 0; i < quanOfElemsToRep; i++) {
-
- mapParts[nElemsToRep[i]] = mapParts[*arrElem - 1];
- mapParts[*arrElem - 1].visible = false;
- *arrElem--;
- }
-
- mapParts[nElemsToRep[0]] = {
- coords, true, pict, BLOCK_TYPE
- };
-}
-
-
diff --git a/FallSimulation.cpp.save b/FallSimulation.cpp.save
new file mode 100644
index 0000000..9983447
--- /dev/null
+++ b/FallSimulation.cpp.save
@@ -0,0 +1,474 @@
+#include
+#include
+#include
+
+using namespace std;
+
+const COLORREF MY_LIGHTBLUE = RGB(75, 127, 196);
+const COLORREF MY_BISQUE = RGB(255, 214, 89);
+
+const int BLOCK_SIZE = 120;
+
+const int BLOCK_TYPE = 0;
+const int QUEST_TYPE = 1;
+const int WATER_TYPE = 2;
+const int FIRE_TYPE = 3;
+
+const int MAP_LENGHT = 15;
+
+int middleX;
+int middleY;
+
+int extentX;
+int extentY;
+
+bool gameIsStarted = false;
+
+struct Button {
+ RECT coords;
+ const char* text;
+ HDC picture;
+};
+
+struct MapPart {
+ RECT coords;
+ bool visible;
+ HDC picture;
+ int blocktype;
+};
+
+HDC block;
+HDC quest;
+HDC water;
+HDC fire;
+
+void background(COLORREF color);
+void drawMenu();
+void drawButton(Button but, bool picture);
+void loadingAnimation(int delay, int speed);
+void mainFunc();
+bool addingBlock(bool clicked, RECT blockBut, HDC pic,
+ int blocktype, int* arrElem, MapPart mapParts[]);
+
+void addingStone(int* arrElem, MapPart mapParts[]);
+int findElem(int* arrElem, RECT expCoords);
+
+int main()
+{
+ txCreateWindow(1300, 600);
+
+ block = txLoadImage("pictures\\block.bmp");
+ quest = txLoadImage("pictures\\question.bmp");
+ water = txLoadImage("pictures\\water.bmp");
+ fire = txLoadImage("pictures\\fire.bmp");
+
+ middleX = txGetExtentX() / 2;
+ middleY = txGetExtentY() / 2;
+ extentX = txGetExtentX();
+ extentY = txGetExtentY();
+
+ background(TX_WHITE);
+ txSleep(50);
+
+ txBegin();
+
+ txSleep(1000);
+
+ txSetColor(MY_LIGHTBLUE, 2);
+ txSetFillColor(TX_WHITE);
+ txRectangle(0, 0, extentX, extentY);
+
+ txSetColor(MY_LIGHTBLUE, 2);
+ txSetFillColor(MY_LIGHTBLUE);
+ txRectangle(0, 0, extentX, 50);
+
+ txSetColor(TX_BLACK, 3);
+ txSetFillColor(TX_WHITE);
+ txDrawText(0, 0, extentX, 50, "Конструктор уровней игры FallSimulation");
+
+ drawMenu();
+
+ txEnd();
+
+ txDeleteDC(block);
+ txDeleteDC(quest);
+ txDeleteDC(water);
+ txDeleteDC(fire);
+
+ txDeleteDC(light_stone);
+ txDeleteDC(dark_stone);
+ txDeleteDC(vdark_stone);
+
+ txDisableAutoPause();
+}
+
+void background(COLORREF color)
+{
+ txSetFillColor(color);
+ txClear();
+}
+
+void drawButton(Button but, bool picture)
+{
+ //drawing button
+ txRectangle(but.coords.left,
+ but.coords.top,
+ but.coords.right,
+ but.coords.bottom);
+
+ //drawing text
+ txDrawText (but.coords.left,
+ but.coords.top,
+ but.coords.right,
+ but.coords.bottom,
+ but.text,
+ DT_CENTER | DT_VCENTER);
+}
+
+void drawMenu()
+{
+ //button "Start" (to start level creating)
+ Button buttonStart = {
+ {
+ middleX - 100, extentY / 3 - 50,
+ middleX + 100, extentY / 3 + 50
+ }, "Start"
+ };
+
+ //button "Exit"
+ Button buttonExit = {
+ {
+ middleX - 100, extentY / 2 - 50,
+ middleX + 100, extentY / 2 + 50
+ }, "Exit"
+ };
+
+ //button "Settings"
+ Button buttonSets = {
+ {
+ extentX - 100, 0,
+ extentX , 50
+ }, "Settings"
+ };
+
+ //button "Play" (to play on created level)
+ Button buttonPlay = {
+ {
+ extentX - 100, extentY - 60,
+ extentX, extentY
+ }, "Play"
+ };
+
+ txSetColor(TX_BLACK, 3);
+ txSetFillColor(TX_WHITE);
+
+ drawButton(buttonStart, true);
+ drawButton(buttonExit, true);
+
+ txSetColor(TX_BLACK, 3);
+ txSetFillColor(TX_TRANSPARENT);
+
+ drawButton(buttonSets, false);
+
+ txSleep(50);
+
+ while (!GetAsyncKeyState('Q')) {
+ if (!gameIsStarted) {
+ if (In(txMousePos(), buttonStart.coords) && txMouseButtons() & 1) {
+ while (txMouseButtons() & 1) {
+ txSleep(10);
+ }
+
+ //loadingAnimation(2, 3);
+ txSleep(50);
+ mainFunc();
+ }
+ if (In(txMousePos(), buttonExit.coords) && txMouseButtons() & 1) {
+ while (txMouseButtons() & 1) {
+ txSleep(10);
+ }
+
+ break;
+ }
+ if (In(txMousePos(), buttonSets.coords) && txMouseButtons() & 1) {
+ while(txMouseButtons() & 1) {
+ txSleep(10);
+ }
+
+ txSetColor(TX_BLACK, 3);
+ txSetFillColor(MY_BISQUE);
+
+ txRectangle(middleX - 200, middleY - 100, middleX + 200, middleY + 100);
+ }
+ if (In(txMousePos(), buttonPlay.coords) && txMouseButtons() & 1) {
+
+ MapPart gettedMapParts = readFile("level1.fslvl");
+
+ for (int i = 0; i < MAP_LENGHT; i++) {
+
+ if (gettedMapParts.visible[i]) {
+
+ switch (gettedMapParts[i].blocktype)
+ {
+ case BLOCK_TYPE:
+ txBitBlt(txDC(),
+ gettedMapParts[i].coords.left,
+ gettedMapParts[i].coords.top,
+ 60, 60,
+ block
+ );
+ case QUEST_TYPE:
+
+ }
+ }
+ }
+ }
+ }
+
+ txSleep(10);
+ }
+}
+
+void loadingAnimation(int delay, int speed)
+{
+ background(TX_WHITE);
+
+ for (int circle_radius = 0;
+ circle_radius * circle_radius < extentX * extentX + extentY * extentY;
+ circle_radius += speed) {
+
+ background(TX_WHITE);
+
+ txSetColor(TX_BLACK, 2);
+ txSetFillColor(TX_BLACK);
+
+ txCircle(0, 0, circle_radius);
+
+ txSleep(delay);
+ }
+
+ background(TX_WHITE);
+}
+
+void mainFunc()
+{
+ gameIsStarted = true;
+
+ int arrElem = 0;
+ int selectedPict = -1;
+ const int BLOCK_SIZE = 120;
+
+ RECT blockBut = {
+ extentX - BLOCK_SIZE, 0, extentX, BLOCK_SIZE
+ };
+
+ RECT questBut = {
+ extentX - BLOCK_SIZE, BLOCK_SIZE, extentX, 2 * BLOCK_SIZE
+ };
+
+ RECT waterBut = {
+ extentX - BLOCK_SIZE, 2 * BLOCK_SIZE, extentX, 3 * BLOCK_SIZE
+ };
+
+ RECT fireBut = {
+ extentX - BLOCK_SIZE, 3* BLOCK_SIZE, extentX, 4 * BLOCK_SIZE
+ };
+
+ RECT doneBut = {
+ extentX - 120, extentY - 120, extentX, extentY
+ };
+
+ MapPart mapParts[MAP_LENGHT + 1];
+
+ Button completeButton = {doneBut, "\n\nSave\n\nFile"};
+
+ for (int elem = 0; elem < MAP_LENGHT; elem++) {
+ mapParts[elem].visible = false;
+ }
+
+ bool clickedBlock = false;
+ bool clickedQuest = false;
+ bool clickedWater = false;
+ bool clickedFire = false;
+
+ while (!GetAsyncKeyState('Q')) {
+ background(TX_WHITE);
+
+ Win32::TransparentBlt(txDC(), blockBut.left, blockBut.top, 120, 120, block,
+ 0, 0, 60, 60, -1);
+
+ Win32::TransparentBlt(txDC(), questBut.left, questBut.top, 120, 120, quest,
+ 0, 0, 60, 60, -1);
+
+ Win32::TransparentBlt(txDC(), waterBut.left, waterBut.top, 120, 120, water,
+ 0, 0, 60, 60, -1);
+
+ Win32::TransparentBlt(txDC(), fireBut.left, fireBut.top, 120, 120, fire,
+ 0, 0, 60, 60, -1);
+
+ drawButton(completeButton, false);
+
+ for (int elem = 0; elem < MAP_LENGHT; elem++) {
+
+ mapParts[elem].coords.left = round((mapParts[elem].coords.left + 30) / 60) * 60;
+ mapParts[elem].coords.top = round((mapParts[elem].coords.top + 30) / 60) * 60;
+
+ if (mapParts[elem].visible) {
+
+ txBitBlt(txDC(),
+ mapParts[elem].coords.left,
+ mapParts[elem].coords.top,
+ 60, 60,
+ mapParts[elem].picture
+ );
+ }
+ }
+
+ //blocks
+ clickedBlock = addingBlock(clickedBlock, blockBut, block, BLOCK_TYPE, &arrElem, mapParts);
+ clickedQuest = addingBlock(clickedQuest, questBut, quest, QUEST_TYPE, &arrElem, mapParts);
+ clickedWater = addingBlock(clickedWater, waterBut, water, WATER_TYPE, &arrElem, mapParts);
+ clickedFire = addingBlock(clickedFire, fireBut, fire, FIRE_TYPE, &arrElem, mapParts);
+
+ //selecting block
+ for (int i = 0; i < arrElem; i++) {
+ if (selectedPict < 0 &&
+ In(txMousePos(), mapParts[i].coords) && txMouseButtons() & 1 &&
+ !(clickedBlock || clickedQuest || clickedWater || clickedFire)) {
+
+ selectedPict = i;
+ }
+ }
+
+ //deleting picture
+ for (int i = 0; i < arrElem; i++) {
+ if (selectedPict < 0 &&
+ In(txMousePos(), mapParts[i].coords) && txMouseButtons() & 2 &&
+ !(clickedBlock || clickedQuest || clickedWater || clickedFire)) {
+
+ selectedPict = i;
+ mapParts[selectedPict] = mapParts[arrElem - 1];
+ mapParts[arrElem - 1].visible = false;
+
+ arrElem--;
+ selectedPict = -1;
+ }
+ }
+
+ //moving picture
+ if (selectedPict >= 0 && txMouseButtons() & 1) {
+ txBitBlt(txDC(), txMouseX() - 30, txMouseY() - 30,
+ 60, 60, mapParts[selectedPict].picture);
+ }
+ if (selectedPict >= 0 && !(txMouseButtons() & 1)) {
+ mapParts[selectedPict].coords = {
+ txMouseX() - 30, txMouseY() - 30,
+ txMouseX() + 30, txMouseY() + 30
+ };
+ selectedPict = -1;
+ }
+
+ //button to complete LevelCreating
+ if (In(txMousePos(), doneBut) && txMouseButtons() & 1) {
+ while (txMouseButtons() & 1) {
+ txSleep(10);
+ }
+
+ ofstream lvlfile;
+ lvlfile.open("level1.fslvl");
+ for (int elem = 0; elem < arrElem; elem++) {
+ if (mapParts[elem].visible) {
+ switch(mapParts[elem].blocktype)
+ {
+ case BLOCK_TYPE:
+ lvlfile << "Block,";
+ break;
+ case QUEST_TYPE:
+ lvlfile << "Quest,";
+ break;
+ case WATER_TYPE:
+ lvlfile << "Water,";
+ break;
+ case FIRE_TYPE:
+ lvlfile << "Fire,";
+ break;
+
+ default:
+ lvlfile << "Null,";
+ break;
+ }
+
+ mapParts[elem].coords.left =
+ round((mapParts[elem].coords.left + 30) / 60) * 60;
+
+ mapParts[elem].coords.top =
+ round((mapParts[elem].coords.top + 30) / 60) * 60;
+
+ mapParts[elem].coords.right =
+ round((mapParts[elem].coords.right + 30) / 60) * 60;
+
+ mapParts[elem].coords.bottom =
+ round((mapParts[elem].coords.bottom + 30) / 60) * 60;
+
+ lvlfile << mapParts[elem].coords.left;
+ lvlfile << ",";
+ lvlfile << mapParts[elem].coords.top;
+ lvlfile << ",";
+ lvlfile << mapParts[elem].coords.right;
+ lvlfile << ",";
+ lvlfile << mapParts[elem].coords.bottom;
+ lvlfile << "\n";
+
+ lvlfile << "";
+ }
+ }
+
+ txMessageBox("Level File created!", "Information");
+ }
+
+ txSleep(10);
+ }
+}
+
+bool addingBlock(bool clicked, RECT blockBut, HDC pic,
+ int blocktype, int* arrElem, MapPart mapParts[])
+{
+ if (In(txMousePos(), blockBut) && txMouseButtons() & 1) {
+ clicked = true;
+ }
+
+ if (txMouseButtons() & 1 && clicked) {
+ txBitBlt(txDC(), txMouseX() - 30, txMouseY() - 30, 60, 60, pic);
+ }
+
+ if (!(txMouseButtons() & 1) && clicked) {
+
+ if (*arrElem < MAP_LENGHT) {
+
+ if (txMouseX() < txGetExtentX() - BLOCK_SIZE) {
+
+ mapParts[*arrElem] = {
+ {
+ txMouseX() - 30, txMouseY() - 30, txMouseX() + 30, txMouseY() + 30
+ }, true, pic, blocktype
+ };
+
+ (*arrElem)++;
+ }
+ }
+ else {
+
+ char maplen_str[50];
+
+ sprintf(maplen_str, "You cannot add more than %d blocks", MAP_LENGHT);
+ txMessageBox(maplen_str, "Error");
+
+ (*arrElem)--;
+ }
+
+ clicked = false;
+ }
+
+ return clicked;
+}
+
diff --git a/FallSimulation.layout b/FallSimulation.layout
new file mode 100644
index 0000000..0cb5b05
--- /dev/null
+++ b/FallSimulation.layout
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+