chase_cl.hsp

sample\hspcl\chase_cl.hsp » Plain Format

#use strict,hsp3cl
#varint sx,sy
#varstr s1,s2

;	More BASIC Computer Games(1979)に掲載された"Chase"をhsp3clに移植したものです
;	もともとはBASIC言語で書かれており、1970年初頭にダートマス大学で開発されたと言われています

	mes "                          CHASE"
	mes "                    CREATIVE COMPUTING"
	mes "                  MORRISTOWN, NEW JERSEY"
	mes "\r\r\r"
	mes "YOU ARE WITHIN THE WALLS OF A HIGH VOLTAGE MAZE"
	mes "THERE ARE FIVE SECURITY MACHINES TRYING TO DESTORY YOU"
	mes "YOU ARE THE '*'   THE INTERCEPTORS ARE THE '+'"
	mes "THE AREAS MARKED 'X' ARE HIGH VOLTAGE"
	mes "YOUR ONLY CHANCE FOR SURVIVAL IS TO MANEUVER EACH"
	mes "INTERCEPTOR INTO AN 'X'.-----GOOD LUCK-----"
	mes "MOVES ARE   7.8.9"
	mes "            4.*.6"
	mes "            1.2.3"
	mes ""
	mes "10 = NO MOVE FOR THE REST OF THE GAME"
	mes "-1 = GAVE UP, SITUATION HOPELESS."
	mes " 0 = A TREMENDOUS (BUT UNFORTUNATELY RANDOM) LEAP"
	mes ""

	randomize

*start
	sx=20:sy=10
	enemy=5
	cmdval=0
	cmdstr=""

	dim map,sx,sy
	dim enex,enemy
	dim eney,enemy
	dim movx,10
	dim movy,10
	movx(1)=-1:movx(4)=-1:movx(7)=-1
	movx(9)=1:movx(6)=1:movx(3)=1
	movy(7)=-1:movy(8)=-1:movy(9)=-1
	movy(1)=1:movy(2)=1:movy(3)=1

	sdim s1,256
	sdim s2,256
	repeat sy:y=cnt:repeat sx:x=cnt
	a=rnd(10):if a=5 : map(x,y)='X'
	loop:loop
	repeat sy:map(0,cnt)='X':map(sx-1,cnt)='X':loop
	repeat sx:map(cnt,0)='X':map(cnt,sy-1)='X':loop

	gosub *randpos
	mx=x:my=y
	map(mx,my)='*'

	repeat enemy
		gosub *randpos
		enex(cnt)=x:eney(cnt)=y
		map(x,y)='+'
	loop

*main
	;	player move
	gosub *putmap
	if cmdval=10 : goto *main2

	mes "? ",1
	input cmdstr,,1
	cmdval=0+cmdstr

	if cmdval<0 : goto *giveup
	if cmdval=0 : goto *rndjump
	if cmdval>=10 : goto *main2

	map(mx,my)=0
	mx=mx+movx(cmdval)
	my=my+movy(cmdval)
	a=map(mx,my)
	if a='X' : goto *highvol

	map(mx,my)='*'

	goto *main2

*rndjump
	mes "$6,000,000 JUMP!!!"
	map(mx,my)=0
	gosub *randpos
	mx=x:my=y
	map(mx,my)='*'
	goto *main2

*main2
	;	interceptor move
	loseflag=0
	repeat  enemy
		g9=0
		x=enex(cnt):y=eney(cnt)
		gosub *enemymove
		if g9=0 {
			enex(cnt)=x:eney(cnt)=y
		} else {
			loseflag=1
		}
	loop
	if loseflag : goto *destroyed

	down=0
	repeat  enemy
		x=enex(cnt):y=eney(cnt)
		if map(x,y)='X' : down++
		if map(x,y)=0 : map(x,y)='+'
	loop

	if down=enemy : goto *wingame
	goto *main

*enemymove
	if map(x,y)='X' : return
	x2=x:y2=y
	x=limit(mx-x,-1,1):y=limit(my-y,-1,1)
	x=x+x2:y=y+y2
	if map(x,y)='*' : g9=99 : return
	if map(x,y)!=0 : map(x2,y2)=0 : return
	map(x,y)='+'
	map(x2,y2)=0
	return

*highvol
	mes "HIGH VOLTAGE!!!!!!!!!!"
	mes "***** ZAP *****  YOU'RE DEAD!!!"
	mes ""
	goto *another
*wingame
	mes "YOU HAVE DESTROYED ALL YOUR OPPONENTS - THE GAME IS YOURS"
	goto *another
*giveup
	mes "GIVE UP, EH."
*destroyed
	mes "*** YOU HAVE BEEN DESTROYED BY A LUCKY COMPUTER ***"
	goto *another
*another
	mes "ANOTHER GAME (Y/N) ? ",1
	input cmdstr,,1
	if cmdstr="n"|cmdstr="N" : goto *byebye
	goto *start

*byebye
	end

*putmap
	s2=" "
	repeat sy:y=cnt
	s1=""
	repeat sx:x=cnt
		a=map(x,y):if a=0 : a=' '
		poke s2,0,a
		s1=s1+s2
	loop
	mes s1
	loop
	return

*randpos
	x=rnd(sx-2)+1
	y=rnd(sy-2)+1
	if map(x,y)>0 : goto *randpos
	return