	SUBROUTINE MOVE(M,N,ALPHA,ID)
	COMMON IB(10,10),IA(8,2),IC(8,2),NA,IS1,IS2,CHAR,CLEAR
	LOGICAL*1 CLEAR(6)
	LOGICAL*1 CHAR,ALPHA,IB,ID
	DIMENSION ID(10,10)
	CALL NPOS(M,I,J,IX,IY)
	I0=I
	J0=J
	ICHAR=0
	IF(ID(I0,J0).LT.'H') GOTO 10
	ICHAR=1
	SCHAR=ID(I0,J0)
C 
10	I1=I+IX
	J1=J+IY
	IF(I1.EQ.I0.AND.J1.EQ.J0) GOTO 60 ! REFLECTION, END MOVE
	IF(I1.EQ.1.OR.I1.EQ.10.OR.J1.EQ.1.OR.J1.EQ.10) GOTO 40 ! MISS
	IF(ID(I1,J1).EQ.'*') GOTO 50 ! HIT
	L=0
	K=0
	IF(IX.EQ.0) GOTO 20
C	HORIZONTAL MOVES:
	IF(ID(I1,J1+1).EQ.'*') L=1 ! TURN UP
	IF(ID(I1,J1-1).EQ.'*') K=1 ! TURN DOWN
	IF(K+L.EQ.2) GOTO 25 ! INTERNAL REFLECTION
	IY=K-L
	IF(IY.NE.0) IX=0
	GOTO 25
C	VERTICAL MOVES:
20	IF(ID(I1+1,J1).EQ.'*') L=1 ! TURN SCREEN LEFT
	IF(ID(I1-1,J1).EQ.'*') K=1 ! TURN SCREEN RIGHT
	IF(K+L.EQ.2) GOTO 25
	IX=K-L
	IF(IX.NE.0) IY=0
C	CHECK FOR OFF-BOARD REFLECTIONS:
25	IF((I0.EQ.I.AND.J0.EQ.J).AND.(K+L.NE.0)) GOTO 60 ! EDGE REFL.
	IF(K+L.EQ.2) GOTO 30 ! INTERNAL REFLECTION
	IF(K+L.NE.0) GOTO 10 ! DIRECTION CHANGED; NO MOVE
	IF(N.EQ.0) CALL DBOARD(I,J,'-')
	IF(I1.GT.I) ALPHA='>'
	IF(I1.LT.I) ALPHA='<'
	IF(J1.GT.J) ALPHA='V'
	IF(J1.LT.J) ALPHA='^'
	IF(N.EQ.0) CALL DBOARD(I1,J1,ALPHA)
	I=I1
	J=J1
	IF(N.GE.1) GOTO 10
	T=SECNDS(0.)
	IF(SECNDS(T).GT.1.) T=T+86400.
120	IF(SECNDS(T).GT..5) GOTO 10
	GOTO 120
C 
C	INTERNAL REFLECTIONS
30	IX=-IX
	IY=-IY
	GOTO 10
C 
C	MISS
40	IF(ICHAR.EQ.1) GOTO 41
	ALPHA=CHAR
	CHAR=CHAR+1
	IF(CHAR.GT.'z') CHAR='a'
	GOTO 42
41	ALPHA=SCHAR
42	IF(N.EQ.3) GOTO 71
	CALL DBOARD(I,J,'-')
	CALL DBOARD(I0,J0,ALPHA)
	CALL DBOARD(I1,J1,ALPHA)
	ID(I1,J1)=ALPHA
	GOTO 70
C 
C	HIT
50	ALPHA='H'
	IF(N.EQ.3) GOTO 71
	CALL DBOARD(I,J,'-')
	CALL DBOARD(I0,J0,ALPHA)
	GOTO 70
C 
C	REFLECTION
60	ALPHA='R'
	IF(N.EQ.3) GOTO 71
	CALL DBOARD(I,J,'-')
	CALL DBOARD(I0,J0,ALPHA)
C 
70	ID(I0,J0)=ALPHA
71	RETURN
	END
