i wont claim to be an expert by any means at this (i've only made ai for a car game before) but like david said, it sounds like you're 90% of the way there. i probrably wont be any help at all, but i'm intrigued by your idea, and would like to figure out mentally how it could practically work. since i have a bad short term memory, i may as well type it here

i'll try and make a function that would work for doom-like line of sight (using X and Z, not Y)
i'll assume you can pass the playerx and z tile, and the enemy x and z tile to the function, and the 'zones' are in an array zones(15, 15) (x,z).
set the 'zones' that your enemys should be able to see/walk through to 0, set the ones they shouldnt be able to see through to 1. by s and d i mean source and destination.
Function checkSight(sxtile, sztile, dxtile, dztile)
sxtile = 4
sztile = 6
dxtile = 12
dztile = 1
xdistance = sxtile - dxtile
zdistance = sztile - dztile
if abs(xdistance) > abs(zdistance) then bigdistance = abs(xdistance)
if abs(xdistance) < abs(zdistance) then bigdistance = abs(zdistance)
if xdistance = zdistance then bigdistance = abs(zdistance)
if bigdistance > 0 or bigdistance < 0 then percent# = 1 / bigdistance
ret = 1 : `can see
for i = 1 to bigdistance
currentxtile = int(sxtile - (xdistance * (percent# * i)))
currentztile = int(sztile - (zdistance * (percent# * i)))
if zones(currentxtile, currentztile) = 1 then ret = 0 : ` cant see
next i
ENDFUNCTION ret
please note, this is 100% theoretical, and i have no idea whether or not it works, it's completely untested. it could be completely wrong for all i know, but it's how i see it working. some abs's could be in the wrong place.
i've mentioned before that i'm no mathematician or speller, so pls dont make the insults too harsh

. hehe actually make them harsh, so i can reveal your TRUE characters. muahahahahah