CUIでトランプゲーム作りたい

  • タグ:
  • タグはありません
#runtime "hsp3cl"
#cmpopt varinit 1
;
#module TrumpCard name,suit,power
#modinit int _suit,int _power
suitStrs="JO","▲","▼","◆","■"
powerStrs="KR","","","","","","","","","","10","","",""
name=suitStrs(_suit)+powerStrs(_power)
power=_power
suit=_suit
return
#modcfunc tcName
return name
#modcfunc tcPower
return power
#modcfunc tcSuit
return suit
#global
;
#module Trump co,i,deck,countMax,hash
#define new(%1) dimtype %1,5:newmod %1,Trump
#modinit
randomize
#define deckDefine \
suits= \
1,1,1,1,1, 1,1,1,1,1, 1,1,1, \
2,2,2,2,2, 2,2,2,2,2, 2,2,2, \
3,3,3,3,3, 3,3,3,3,3, 3,3,3, \
4,4,4,4,4, 4,4,4,4,4, 4,4,4, \
0,0 :\
powers= \
1,2,3,4,5, 6,7,8,9,10, 11,12,13, \
1,2,3,4,5, 6,7,8,9,10, 11,12,13, \
1,2,3,4,5, 6,7,8,9,10, 11,12,13, \
1,2,3,4,5, 6,7,8,9,10, 11,12,13, \
0,0
deckDefine
foreach suits
newmod deck,TrumpCard,suits(cnt),powers(cnt)
loop
foreach deck
hash(cnt)=cnt
loop
count=length(deck)
repeat count
r=rnd(count)
tmp=hash(cnt)
hash(cnt)=hash(r)
hash(r)=tmp
loop
gosub*trumpIter
return
*trumpIter
for i,0,length(suits)
newlab co,1:return
_card=deck(hash(i))
next
return
#modcfunc trpCount
return count
#modfunc local trpNext var card
gosub co
card=_card
return
#define global trpNext(%1,%2) dimtype %2,5:trpNext@Trump %1,%2
#global
;
#module Player deck,deckNo,pass
#define new(%1) newmod %1,Player
#modinit
deckNo=0
pass=3
return
#modfunc plSetCard var card
deck(deckNo)=card
deckNo++
return
#modfunc plDeleteCard str cardName
foreach deck
if tcName(deck.cnt)=cardName {
delID=cnt
repeat deckNo-delID-1
deck(delID+cnt)=deck(delID+cnt+1)
loop
deckNo--
break
}
loop
return
#modfunc plDeck array _deck
if deckNo!=0 {
dimtype _deck,5,deckNo
repeat deckNo
_deck(cnt)=deck(cnt)
loop
}
else {
dim _deck
}
return
#global
;
#module TrumpBoard board,cardCnt
#define new(%1) dimtype %1,5:newmod %1,TrumpBoard
#modfunc tbUseCard var _player,var card
board(cardCnt)=card
plDeleteCard _player,tcName(card)
cardCnt++
return
#modfunc tbViewBoard
foreach board
mes tcName(board.cnt)+" ",1
loop
return
#global
;
#module Program
#uselib "crtdll"
#cfunc getch "_getch"
#cfunc kbhit "_kbhit"
;
#defcfunc move int _ch,int max
if _ch=$4b :cursol-- ;
if _ch=$4d :cursol++ ;
if cursol<0 :cursol=0
if max-1<cursol :cursol=max-1
return cursol
;
#deffunc cursolShow array items,int csl
dim slct,length(items)
slct(csl)=1
s=""
foreach items
if slct(cnt): s+=strf("[%s]",items(cnt)): else: s+=strf(" %s ",items(cnt))
loop
mes strf("%s\r",s),1
return
#deffunc main
new@Trump trp
new@TrumpBoard board
dimtype p,5,4
repeat 4
new@Player p
loop
repeat trpCount(trp)
trpNext trp,card
plSetCard p(cnt\4),card
loop
dimtype deck,5
*selectLoop
foreach p
plDeck p(cnt),deck
if vartype(deck)!=5: goto*exitSelect
mes "Player "+(cnt+1)+""
sdim items
foreach deck
items(cnt)=tcName(deck.cnt)
loop
cursol=0
cursolShow items,cursol
repeat
if kbhit() {
ch=getch()
if ch=$0d {
mes ""
break
}
if ch=$e0 {
cursolShow items,move(getch(),length(items))
}
}
loop
mes strf("SelectedItem: %s",items(cursol))
tbUseCard board,p(cnt),deck(cursol)
mes ""
loop
goto*selectLoop
*exitSelect
mes "USED CARDS"
tbViewBoard board
return
#global
main
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX