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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX