The code kept printing text on top of other text, so I added a variable that could be used to show it. I made some quick revisions, but there are more efficient ways of doing this (don't have time now to edit it in detail). You really are only checking if it destroys one monster, even though you can have more than one monster present.
dim monhits(8) as integer
dim hitloc(4) as string: hitloc(1)="head": hitloc(2)="torso": hitloc(3)="arm": hitloc(4)="leg"
monhp=12*(rnd(4)+6)
xp= monhp*12 + 6
num = 4: hp = 2000
for m = 1 to num
monhits(m)=monhp
next m
while monhits(1)>0 or monhits(2)>0 or monhits(3)>0 or monhits(4)>0 or monhits(5)>0 or monhits(6)>0 or monhits(7)>0 or monhits(8)>0
cls
if num>1
center text screen width()/2,160,"You are facing "+str$(num)+" monsters"
else
center text screen width()/2,160,"You are facing "+str$(num)+" monster"
endif
cy = 200
for monsters=1 to num
r = rnd(3)
if r = 0
attack$= "The monster calls for help "
if rnd(3)=0 and num<8 then inc num: result$=" and another arrives!": else result$ = " "
else
damage=rnd(3) * 5 : region = rnd(3) + 1
attack$="The monster attacks your "+hitloc(region)
if rnd(100)<50
result$="You block with your shield": damage=0
else
if damage = 0
result$="which has no effect!"
else
result$="which does "+str$(damage)+" damage."
endif
endif
center text screen width()/2,cy,attack$
center text screen width()/2,cy + 20,result$
sync: wait key : inc cy,40
if damage > hp then end
hp = hp-damage
endif
next monsters
clear entry buffer: in$=""
repeat
cls: center text screen width()/2,cy,"Will you [A]ttack, [C]ast a spell, or [F]lee?"
in$=inkey$()
in$=upper$(in$)
until in$="A" or in$="F" or in$="C"
inc cy,20
if in$="F"
if rnd(100)<30
center text screen width()/2,cy,"Success!": sync: wait key: end
else
center text screen width()/2,cy,"Failed": sync: wait 1000
endif
inc cy,20
endif
if in$="C"
center text screen width()/2+3,cy,"You cast a spell" : inc cy,20
for m = 1 to num
if rnd(3)=0
center text screen width()/2,cy,"Which has no effect!"
else
damage=rnd(20)+22: center text screen width()/2,cy,"Which does "+str$(damage)+" damage!":monhits(m)=monhits(m)-damage
endif
inc cy,20
next m
for m = 1 to num
if monhits(m)<1
if m<num then monhits(m) = monhits(m+1): monhits(m+1) = 0: else monhits(m) = 0
endif
next m
num = 0
for m = 1 to 8
if monhits(m)>0 then inc num
next m
endif
if in$="A"
damage=rnd(10) + 1 * 6
if rnd(100)>50
center text screen width()/2,cy,"You miss with your greatsword"
inc cy,20
else
monhits(1) = monhits(1) - damage: center text screen width()/2,cy,"You hit for "+str$(damage)+" damage!"
inc cy,20
if monhits(1)<1 and num>1
for m = 1 to num
if m<num then monhits(m) = monhits(m+1): monhits(m+1) = 0: dec num: else monhits(m) = 0
next m
else
if monhits(1)<1 then monhits(1)=0
endif
endif
endif
cls: sync: wait 1000
endwhile
cls : text 100,100,"okay, destroyed a monster."
wait key
end