#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
/* by odd lobster@takas.lt
** map: 0-passable terrain(los can see), 1-block, 9-player start position(actualy this one isnt used), 5 - los can see, 3-player position
** ;)
*/
int myMap[20][20]= {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,
1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
void drawline_mod(int map[20][20], int x, int y, int x2, int y2) {
int dx = abs(x - x2);
int dy = abs(y - y2);
double s = double(.99/(dx>dy?dx:dy));
double t = 0.0;
while(t < 1.0) {
dx = int((1.0 - t)*x + t*x2);
dy = int((1.0 - t)*y + t*y2);
if (map[dy][dx] != 1) {
map[dy][dx] = 5;
} else {
return;
}
t += s;
}
}
void los(int map[20][20], int range, int plx, int ply) {
int x, y;
for (double f = 0; f < 3.14*2; f += 0.05) {
x = int(range*cos(f)) + plx;
y = int(range*sin(f)) + ply;
drawline_mod(map,plx,ply,x,y);
}
}
void draw_map(int map[20][20]) {
for (int y=0; y<20; y++) {
for (int x=0; x<20; x++) {
if (map[y][x] == 0) {
printf(" ");
} else if (map[y][x] == 1) {
printf("X");
} else if (map[y][x] == 5) {
printf(".");
} else if (map[y][x] == 3) {
printf("@");
}
}
printf("\n");
}
}
void main() {
LARGE_INTEGER i1, i2, f;
QueryPerformanceFrequency(&f);
QueryPerformanceCounter(&i1); // start test
los(myMap,99,8,6); // <- call los
QueryPerformanceCounter(&i2); // end test
int iii = 1000000*(i2.QuadPart - i1.QuadPart)/f.QuadPart;
printf("Code executed in: %i/%i ms/ns\n", iii/1000, iii);
myMap[6][8] = 3; // put player
draw_map(myMap); // draw map ;)
getch();
}
By Odd [[lobster@takas.lt]]