Hit&Blow from HSP3

なんとなくHSP3用のHit&Blowのコードを書きました。以前はjsで同様に実装したことがあるけど以前のはSwitchでgoto紛いのことをやって凄いことになってた気がする。http://gspectool.ifdef.jp/hitblow/DOS.html

なんとなくHSP3用のHit&Blowのコードを書きました。以前はjsで同様に実装したことがあるけど以前のはSwitchでgoto紛いのことをやって凄いことになってた気がする。http://gspectool.ifdef.jp/hitblow/DOS.html

  • タグ:
  • タグはありません
#runtime "hsp3cl"
#cmpopt varinit 1
randomize

#module Program
	#defcfunc getDigit
		sdim ln
		repeat
			mes "桁数を入力してください > ",1
			input ln,,2
			digit=int(ln)
			if 1<=digit & digit<=9: break
			mes "1-9の数字を入力してください。"
		loop
	return digit

	#defcfunc getSeq int _digit
		#const nums 10
		dim seq,nums
		repeat nums
			seq.cnt=cnt
		loop
		repeat nums-1,1: i=nums-cnt
			r=rnd(i+1)
			tmp=seq.i
			seq.i=seq.r
			seq.r=tmp
		loop

		s=""
		repeat _digit
			s+=seq.cnt
		loop
	return s

	#defcfunc getInputSeq int _digit,int _chkCnt
		numList="0123456789"
		sdim ln
		repeat
			mes strf("[%d] ",_chkCnt),2
			input ln,,2
			lnLength=strlen(ln)
			isDigit=_digit=lnLength
			isNum=1
			repeat lnLength
				if -1=instr(numList,,strmid(ln,cnt,1)){
					isNum=0
					break
				}
			loop

			isUnique=1
			repeat lnLength
				i=cnt
				repeat lnLength
					if i!cnt && strmid(ln,i,1)=strmid(ln,cnt,1) {
						isUnique=0
						break
					}
				loop
				if 0=isUnique: break
			loop

			if isDigit & isNum & isUnique: break
			mes "入力が不正です。"
		loop
	return ln

	#deffunc main
		digit=getDigit()
		ans=getSeq(digit)

		repeat
			user=getInputSeq(digit,cnt)

			hit=0
			blow=0
			repeat digit
				if strmid(ans,cnt,1)=strmid(user,cnt,1) {
					hit++
				}
				else:if -1!instr(ans,,strmid(user,cnt,1)) {
					blow++
				}
			loop

			mes strf("hit: %d blow: %d",hit,blow)
			if hit=digit: break
		loop

		mes "Congratulation!"
		sdim ln
		input ln,,2
	return
#global
main