/*
Made in code::blocks 12.11
-randomly generated terrain mirrored to be equal for bought players
-
-
*/
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <fstream>
#include <cstring>
#include <string>
#include <cstdlib>
#include <ctime>
#include <sstream>
#include <cctype>
using namespace std;
//Public functions
char printMap(char terraniValue);
int spawnUnit(int positionOfPiece, int unitType);
int createBoard(int xLenght, int yLenght);
string OutputCharacterWithColor(string character);
void black();
void red();
void green();
void blue();
void white();
//Pubic variables
int Gold = 300;
int rowLength, columnLenght;
string board;
int main()
{
createBoard(10, 8);
printf("1.Infantry(Defence=6, Attack=1)\n");
printf("2.Sniper\n");
printf("3.Artillery\n");
printf("4.Tank\n");
printf("5.General\n");
printf("Enter pieces you want to buy or type \"end\" to finish buying pieces:\n");
string unitSelection = "choosing";
int unitType[99], positionOfPiece, nextPieceChoice = 0;
for(int i=0; i<99; i++)
{
unitType[i] = 99;
}
while(unitSelection != "end")//Somewhere in this while loop is the problem!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
cin >> unitSelection;
if(unitSelection == "1" || unitSelection == "2" || unitSelection == "3" || unitSelection == "4" || unitSelection == "5")
{
stringstream convert;
convert << unitSelection;//put string into stringstream
convert >> unitType[nextPieceChoice];//give the value to integer unitType[nextPieceChoice] from stringstream
nextPieceChoice++;
convert.str("");
convert.clear();
}
}
positionOfPiece = (rowLength/2) - (nextPieceChoice/2);//nextPieceChoice gives number of pieces that was chosen
int nextUnit = 0;
while(unitType[nextUnit] != 99);
{
spawnUnit(positionOfPiece+nextUnit, unitType[nextUnit]);
nextUnit++;
}
printf("Program not finished...\n");
system("pause");
return 0;
}
int spawnUnit(int positionOfPiece, int unitType)
{
string boardWithPieces[rowLength*columnLenght];
int counter = 1;
switch(unitType)
{
case 1:
{
if(Gold >= 10)
{
for(int i=0; i<board.length()+1; i++)
{
boardWithPieces[i] = board[i];
}
board.clear();
boardWithPieces[positionOfPiece] = "@";//replace random piece with first unit type
for(int i=0; i<=(rowLength*columnLenght); i++)//upper side of the board
{
if((i == (rowLength*counter)) && i != (rowLength*columnLenght)-1)//if end of row and that row is not last
{
black();
printf("|\n");
counter++;
}
if(i != (rowLength*columnLenght))//not last position in last row after '|' sign
{
OutputCharacterWithColor(boardWithPieces[i]);
board += boardWithPieces[i];//assign boardWithPieces back to board progress
}
}
counter -= 1;
for(int i=(rowLength*columnLenght); i>=0; i--)//lower side of the board(horizontally and vertically mirrored upper side)
{
if((i == (rowLength*counter)-rowLength))//if end of row and that row is not first one
{
black();
printf("|\n");
counter--;
}
if(i != 0)//not last position in last row after '|' sign
{
OutputCharacterWithColor(boardWithPieces[i-1]);
board += boardWithPieces[i-1];//assign boardWithPieces back to board progress
}
}
}
break;
}
case 2:
{
if(Gold >= 25)
{
}
break;
}
case 3:
{
if(Gold >= 30)
{
}
break;
}
case 4:
{
if(Gold >= 40)
{
}
break;
}
case 5:
{
if(Gold >= 50)
{
}
break;
}
case 99:
{
break;
}
default:
{
printf("Error:wrong unit type\n");
system("pause");
break;
}
}
return 0;
}
int createBoard(int xLength, int yLenght)
{
rowLength = xLength;
columnLenght = yLenght;
int randomNumber = 0;
srand(time(0));
for(int i=0; i<columnLenght; i++)
{
printf("%i%s", i, ".|");
for(int j=0; j<rowLength; j++)
{
randomNumber = rand()%5+1;
switch(randomNumber)
{
case 1:
{
printMap('!');
break;
}
case 2:
{
printMap('^');
break;
}
case 3:
{
printMap('#');
break;
}
case 4:
{
printMap('*');
break;
}
case 5:
{
printMap(' ');
break;
}
default:
{
printf("Error:terrain not found\n");
system("pause");
}
}
}
printf("|\n");
}
return 0;
}
char printMap(char terraniValue)
{
board += terraniValue;
printf("%c", terraniValue);
return 0;
}
//start of colour related functions
string OutputCharacterWithColor(string character)
{
if(character == "#")
{
white();
cout << character;
black();
}
if(character == "!")
{
red();
cout << character;
black();
}
else if(character == "@")
{
green();
cout << character;
black();
}
else if(character == "^")
{
blue();
cout << character;
black();
}
else
{
cout << character;
}
return "";
}
void white()
{
HANDLE hConsole;
hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
SetConsoleTextAttribute
(hConsole, BACKGROUND_INTENSITY);
}
void black()
{
HANDLE hConsole;
hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
SetConsoleTextAttribute
(hConsole, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
}
void red()
{
HANDLE hConsole;
hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
SetConsoleTextAttribute
(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY);
}
void green()
{
HANDLE hConsole;
hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
SetConsoleTextAttribute
(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
}
void blue()
{
HANDLE hConsole;
hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
SetConsoleTextAttribute
(hConsole, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
}
//end of colour related functions
111100/11000
Recommended Answers
Jump to PostYou have several compile errors ...
In line 81:
ISO C++ forbids variable length array 'boardWithPieces'
You could use a ...
vector < string > vecStr( size ); // calls constructor
// if you really need an 'array of strings'You also have redundant and several C (not …
Jump to PostThat's a new feature of c++11 iso standards. Some compilers such as Visual Studio have not implemented it yet, while others such as g++ may need special flags.
For compiles that don't support that, just change line 81 to this:
string* boardWithPieces = new string[rowLength*columnLenght];
As for the freezing problem …
Jump to PostSee that semicolon at the end of line 70?
That's your problem!
Thanks to the semicolon, you've effectively set up an infinite loop at line 70.
All 11 Replies
David W
131
Practically a Posting Shark
111100/11000
David W
131
Practically a Posting Shark
Ancient Dragon
5,243
Achieved Level 70
Team Colleague
Featured Poster
111100/11000
Ancient Dragon
5,243
Achieved Level 70
Team Colleague
Featured Poster
111100/11000
Ancient Dragon
5,243
Achieved Level 70
Team Colleague
Featured Poster
JasonHippy
739
Practically a Master Poster
111100/11000
111100/11000
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.