Выведите куда-нибудь в файл аргументы у функции outtextxy перед каждыймы вызовом.
Я подозреваю, что черный фон - это следы кучи отрисовок текста с постеппенным сдвигов вправо.
Но тут, я думаю, вы баг не исправите без рефакторинга кода. Его надо разбить на функции, исправить логику, упростить.
#include <L:\\Soft\\Dev-Cpp\\MinGW\\include\\graphics.h>
#include <conio.h>
#include <cmath>
#include <iostream>
#include <winuser.h>
#define pi 3.14159265
using namespace std;
int level1(){
settextjustify(1,1);
settextstyle(4,0,5);
int text_map[15][16]={
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0},
};
char *msg1="EXIT";
char *msg2="EXIT2";
char *msg3="EXIT3";
char *msg4="EXIT4";
bool textShowed1=false;
bool textShowed2=false;
bool textShowed3=false;
bool textShowed4=false;
int textX1_min=0;
int textX1_max=0;
int textX2_min=0;
int textX2_max=0;
int textX3_min=0;
int textX3_max=0;
int textX4_min=0;
int textX4_max=0;
int txt_value=0;
while (!exitOk){
textShowed1=false;
textShowed2=false;
textShowed3=false;
textShowed4=false;
start_rndr_angle=plyr_angle-half_fov;
rndr_angle=start_rndr_angle;
for(int rndr_ray=0;rndr_ray<900;rndr_ray+=1){
rndr_pos_x=plyr_x;
rndr_pos_y=plyr_y;
nxt_pos_step_x=cos(rndr_angle*pi/180)/rndr_quality;
nxt_pos_step_y=sin(rndr_angle*pi/180)/rndr_quality;
rndr_angle+=step_angle;
distance=0.0;
while(map[(int)rndr_pos_y][(int)rndr_pos_x]==0){
distance+=1.0/rndr_quality;
rndr_pos_x+=nxt_pos_step_x;
rndr_pos_y+=nxt_pos_step_y;
txt_value=text_map[(int)rndr_pos_y][(int)rndr_pos_x];//Скан на наличие текста в области действия луча. 0 если текста нет, иначе номер фразы
if(txt_value>0){
switch(txt_value){
case 1:
if(!textShowed1){//Если до этого текст не был найден
textShowed1=true;//Отметка того, что текст найден
textX1_min=rndr_ray+0;//Отметка того места, где зона действия текста начинается
}else{textX1_max=rndr_ray+0;}//Если до этого текст был найден, обновление места, где зона текста кончается
break;
case 2://То же самое
if(!textShowed2){
textShowed2=true;
textDist2=distance+0.0;
textX2_min=rndr_ray+0;
}else{textX2_max=rndr_ray+0;}
break;
case 3://То же самое
if(!textShowed3){
textShowed3=true;
textDist3=distance+0.0;
textX3_min=rndr_ray+0;
}else{textX3_max=rndr_ray+0;}
break;
case 4://То же самое
if(!textShowed4){
textShowed4=true;
textDist4=distance+0.0;
textX4_min=rndr_ray+0;
}else{textX4_max=rndr_ray+0;}
break;
}
}
}
if(textShowed1){//Если текст был найден
outtextxy(((int)((textX1_max+textX1_min)/2-textwidth(msg1)/2)),(int)((height-textheight(msg1))/2),msg1);
}
}
}
}