problem with making characters in an array different colors
Ok basically, I am making an ascii rpg in win32 console. I made my test map, but the coloring of different characters on the map isnt working right. The main one i need to work is wt (which needs to be blue for water), which I defined in the header file "keys.h" ... In keys.h is all my map stuff:
Code:
//keys.h
#define wt 247
#define b1 2
#define b2 3
#define br 179
#define bt 196
#define bc 218
#define gr 176
char map[20][59]={bc,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,bt,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,wt,wt,wt,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,wt,wt,wt,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,wt,wt,wt,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,
br,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1
};
In my main .cpp file is everything else, heres its code:
Code:
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include "keys.h"
int ch;
static int get_code ( void )
{
int ch = getch();
if ( ch == 0 || ch == 224 )
ch = 256 + getch();
return ch;
}
enum
{
KEY_ESC = 27,
ARROW_UP = 256 + 72,
ARROW_DOWN = 256 + 80,
ARROW_LEFT = 256 + 75,
ARROW_RIGHT = 256 + 77
};
void checkxy();
void checkcolor();
using namespace std;
void gameframe();
void menuframe();
void textframe();
int x=0,y=0;
void gotoxy(int x, int y)
{
HANDLE hConsoleOutput;
hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
COORD dwCursorPosition;
dwCursorPosition.X = x;
dwCursorPosition.Y = y;
SetConsoleCursorPosition(hConsoleOutput,dwCursorPosition);
}
int r,j;
int main ()
{
gameframe();
menuframe();
textframe();
y=-1;
x=0;
gotoxy(x,y);
for(r=0; r<20; r++)
{
y++;
gotoxy(x,y);
for(j=0; j<59; j++)
{
checkcolor();
putchar(map[r][j]);
}
}
while ( ( ch = get_code() ) != KEY_ESC ) {
switch ( ch ) {
case ARROW_UP:
y--;
checkxy();
gotoxy(x,y);
putchar(1);
y++;
gotoxy(x,y);
checkcolor();
putchar(map[y][x]);
y--;
gotoxy(x,y);
break;
case ARROW_DOWN:
y++;
checkxy();
gotoxy(x,y);
putchar(1);
y--;
gotoxy(x,y);
checkcolor();
putchar(map[y][x]);
y++;
gotoxy(x,y);
break;
case ARROW_LEFT:
x--;
checkxy();
gotoxy(x,y);
putchar(1);
x++;
gotoxy(x,y);
checkcolor();
putchar(map[y][x]);
x--;
gotoxy(x,y);
break;
case ARROW_RIGHT:
x++;
checkxy();
gotoxy(x,y);
putchar(1);
x--;
gotoxy(x,y);
checkcolor();
putchar(map[y][x]);
x++;
gotoxy(x,y);
break;
}
}
return 0;
}
void gameframe()
{
SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_INTENSITY);
int count = 0;
int ymin = 0;
int ymax = 20;
int xmin = 0;
int xmax = 59;
gotoxy(xmin,ymin);
putchar(218);
gotoxy(xmax,ymin);
putchar(191);
gotoxy(xmin,ymax);
putchar(192);
gotoxy(xmax,ymax);
putchar(217);
gotoxy(xmin+1,ymin);
for(count=xmin; count<xmax-1; count++)
putchar(196);
gotoxy(xmin+1,ymax);
for(count=xmin; count<xmax-1; count++)
putchar(196);
for(count=ymin+1; count<=ymax-1; count++)
{
gotoxy(xmin,count);
putchar(179);
}
for(count=ymin+1; count<=ymax-1; count++)
{
gotoxy(xmax,count);
putchar(179);
}
}
void menuframe()
{
SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_INTENSITY);
int count = 0;
int ymin = 0;
int ymax = 30;
int xmin = 60;
int xmax = 79;
gotoxy(xmin,ymin);
putchar(218);
gotoxy(xmax,ymin);
putchar(191);
gotoxy(xmin,ymax);
putchar(192);
gotoxy(xmax,ymax);
putchar(217);
gotoxy(xmin+1,ymin);
for(count=xmin; count<xmax-1; count++)
putchar(196);
gotoxy(xmin+1,ymax);
for(count=xmin; count<xmax-1; count++)
putchar(196);
for(count=ymin+1; count<=ymax-1; count++)
{
gotoxy(xmin,count);
putchar(179);
}
for(count=ymin+1; count<=ymax-1; count++)
{
gotoxy(xmax,count);
putchar(179);
}
}
void textframe()
{
SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_INTENSITY);
int count = 0;
int ymin = 21;
int ymax = 30;
int xmin = 0;
int xmax = 59;
gotoxy(xmin,ymin);
putchar(218);
gotoxy(xmax,ymin);
putchar(191);
gotoxy(xmin,ymax);
putchar(192);
gotoxy(xmax,ymax);
putchar(217);
gotoxy(xmin+1,ymin);
for(count=xmin; count<xmax-1; count++)
putchar(196);
gotoxy(xmin+1,ymax);
for(count=xmin; count<xmax-1; count++)
putchar(196);
for(count=ymin+1; count<=ymax-1; count++)
{
gotoxy(xmin,count);
putchar(179);
}
for(count=ymin+1; count<=ymax-1; count++)
{
gotoxy(xmax,count);
putchar(179);
}
}
void checkxy()
{
if(x<1)
{
x++;
}
if(y<1)
{
y++;
}
if (x>58)
{
x--;
}
if(y>19)
{
y--;
}
}
void checkcolor()
{
char temp1=map[r][j];
char temp2=map[y][x];
if((temp1==wt) || (temp2==wt))
{
SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_INTENSITY);
}
if((temp1==b1) || (temp2==b1)||(temp1==b2) || (temp2==b2))
{
SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);
}
if((temp1==br) || (temp2==br)||(temp1==bt) || (temp2==bt)||(temp1==bc) || (temp2==bc))
{
SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_INTENSITY);
}
}
I know its sloppy, but I was just trying to get it to work right before I put the code into my game, so It wont look this bad when its done, honest :). If anyone sees why it isnt working right please tell me. The thing I am using to change the colors is checkcolor(); which is the function at the very bottom of the main .cpp file. Thanks!