LOS by Odd
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
#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]]