// // DOBON! BY A.OUCHI // TRANSLATED FROM Fuzzy BASIC TO SLANG // //*INITALIZE********************** ORG 3000H; OFFSET 0A000H-3000H; MACHINE LDIR(3); CONST WLOOP=2500; ARRAY !MSW[39],!CARD[51],!P_CARD[4][17],!P_LEFT[4], !P_START[4],!OWNER[51],!W_OR_L[4],!D_NO[4], !H_WL[4][4],!H_ST[4][4]; VAR PLAYER,DIR,OVER,PUT,REMAIN, CMARK,CNO,DCARD,WIN,LOSE,GAMES; // *MAIN ROUTINE******************* MAIN() BEGIN VAR I,J,DET; WIDTH(40); DEMO(); FOR I=0 TO 4 ( P_START[I]=4; FOR J=0 TO 4 H_ST[I][J]=(H_WL[I][J]=0); ) GAMES=0; PLAYER=RND(5); REPEAT ( GAMEINIT(); LOOP ( PUT=0; DET=(PLAYER==0)?MANTURN():COMTURN(); IF OVER==1 THEN EXIT; IF DET!=-1 THEN PUTCARD(PLAYER,DET); IF PLAYER==0 THEN ( REORDER(0); DISPMYCARD(); ) IF DOBONCHECK() AND PUT THEN EXIT; DCARD=0; IF PUT==1 THEN SPECIAL(); WAIT(5); COMMESCLEAR(PLAYER); IF DCARD!=0 THEN IF DRAW() THEN EXIT; NEXTPLAYER(); ) IF OVER==0 THEN DOBON(); ) UNTIL GAMEOVER(); PRINT(/,/,"GOOD-BYE!",/); END; // *SUBROUTINES******************** // *INITIALIZE FOR EACH GAME******* GAMEINIT() BEGIN VAR I,N,JF; REPEAT ( DIR=(OVER=(PUT=0)); DISPINIT(); FOR I=1 TO 4 ( COMLOC(I,1,0); PRINT("COMPUTER ",I); COMMSG(I,5,1,"LEFT:0"); ) OWNER[0]=5; LDIR(OWNER,OWNER+1,51); SHUFFLE(); FOR I=0 TO 4 ( P_LEFT[I]=(W_OR_L[I]=0); DRAWCARD(I,P_START[I]); ) REORDER(0); DISPMYCARD(); I=REMAIN; REPEAT N=NUMBER(CARD[--I]); UNTIL (N!='A' AND N!='2' AND N!='3' AND N!='8' AND N!='9') OR I==-1; JF=0; IF I==-1 THEN ( BEEP(); MSGW("»ÞÝÈÝŶÞ×,¹Þ°Ñ¦ ¶²¼Ã޷Ͼݡ"); MSGW("¶°ÄÞ¦ ¸ÊÞØÅµ¼Ï½ÉÃÞ,Ó³½º¼ µÏÁ¸ÀÞ»²¡"); JF=1; ) ELSE ( N=CARD[I]; IF I<--REMAIN THEN LDIR(CARD+I+1,CARD+I,REMAIN-I); ) ) UNTIL JF==0; OWNER[N]=5; CMARK=MARK(N); CNO=NUMBER(N); DISPCARD(); LOCATE(21,2); PRINT(FORM$(REMAIN,2)); SETMSG(0,"GAME START FROM "); IF PLAYER==0 THEN SETMSG(16,"YOU"); ELSE ( SETMSG(16,"COMPUTER "); MSW[25]='0'+PLAYER; MSW[26]=0; ) BEEP(); MSGW(MSW); END; // *DISPLAY INITIALIZE************ DISPINIT() BEGIN VAR I; PRINT("\C",STR$('{',39),/); FOR I=1 TO 15 IF I==8 THEN PRINT(STR$('{',15),SPC$(9),STR$('{',15),/); ELSE PRINT("{",SPC$(13),"{ {",SPC$(13),"{",/); PRINT(STR$('{',39),/); PRINT("{",SPC$(37),"{",/); PRINT(STR$('{',39),/); PRINT("{ A B C D E F G H I J K L M N O P Q R {",/); PRINT("{+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+{",/); PRINT("{I I I I I I I I I I I I I I I I I I I{",/); PRINT("{I I I I I I I I I I I I I I I I I I I{",/); PRINT("{+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+{",/); PRINT(STR$('{',39)); LOCATE(15,3); PRINT("+-------+"); FOR I=4 TO 12 ( LOCATE(15,I); PRINT("I I"); ) LOCATE(15,13); PRINT("+-------+"); LOCATE(16,2); PRINT("PILE:52"); LOCATE(17,1); PRINT("====>"); LOCATE(17,15); PRINT("<===="); END; // *PLAYER'S TURN****************** MANTURN() BEGIN VAR DET,I; MSG("±ÅÀÉ ÊÞÝÃÞ½¡"); BEEP(); WAIT(5); IF P_LEFT[0]==1 THEN ( MSG("¶°ÄÞ¶Þ 1ϲ¼¶ ±ØÏ¾Ý¡"); WAIT(5); MSG("PILE¶× 1ϲ ˷Ͻ¡"); WAIT(5); MSGC(); DET=MANDRAW(); ) ELSE ( I=0; WHILE CHECK(0,I)==FALSE AND IRETURN"); DET=KEYIN(1); IF DET==-1 THEN ( IF P_LEFT[0]==18 THEN TOOMANY(); ELSE DET=MANDRAW(); ) ) ) END(DET); // *COMPUTER'S TURN**************** COMTURN() BEGIN VAR DET,I,DI,DF; SETMSG(0,"COMPUTER "); MSW[9]='0'+PLAYER; SETMSG(10," É ÊÞÝÃÞ½¡"); MSG(MSW); IF P_LEFT[PLAYER]==1 THEN ( COMMSG(PLAYER,1,2,"1ϲ¼¶ Ó¯Ã"); COMMSG(PLAYER,1,3,"Ų¶×,"); COMMSG(PLAYER,1,4,"PILE¶× 1ϲ"); COMMSG(PLAYER,1,5,"˸֡"); WAIT(5); COMMESCLEAR(PLAYER); DET=COMDRAW(); ) ELSE ( DET=-2; COMLOC(PLAYER,1,3); COMRES(3); IF DIR==0 THEN I=(PLAYER==4)?0:PLAYER+1; ELSE I=PLAYER-1; IF P_LEFT[I]+RND(5)<=2+P_LEFT[PLAYER]/2 THEN ( DF=9; FOR I=0 TO P_LEFT[PLAYER]-1 IF CHECK(PLAYER,I) THEN CASE NUMBER(P_CARD[PLAYER][I]) OF ( '3': DI=I,DF=1; '2': IF DF>1 THEN DI=I,DF=2; OTHERS: DF=3; ) IF DF==9 THEN DET=COMDRAW(); ELSE IF DF<3 THEN DET=DI; ) IF DET==-2 THEN ( DF=14; FOR I=0 TO P_LEFT[PLAYER]-1 IF CHECK(PLAYER,I) THEN CASE NUMBER(P_CARD[PLAYER][I]) OF ( 'K': DI=I,DF=1; 'Q': IF DF>1 THEN DI=I,DF=2; 'J': IF DF>2 THEN DI=I,DF=3; 'T': IF DF>3 THEN DI=I,DF=4; '7': IF DF>4 THEN DI=I,DF=5; '9': IF DF>5 THEN DI=I,DF=6; '6': IF DF>6 THEN DI=I,DF=7; '5': IF DF>7 THEN DI=I,DF=8; 'A': IF DF>8 THEN DI=I,DF=9; '4': IF DF>9 THEN DI=I,DF=10; '8': IF DF>10 THEN DI=I,DF=11; '2': IF DF>11 THEN DI=I,DF=12; '3': IF DF>12 THEN DI=I,DF=13; ) IF DF==14 THEN DET=COMDRAW(); ELSE ( DET=DI; WAIT(2); COMMESCLEAR(PLAYER); ) ) ) WAIT(1); END(DET); // *SPECIAL CARDS****************** SPECIAL() BEGIN VAR I,D,P,SP,HT,DM,CL; CASE CNO OF ( '9': ( MSG("REVERSE!"); DIR=1-DIR; LOCATE(17,1); IF DIR THEN PRINT("<===="); ELSE PRINT("====>"); LOCATE(17,15); IF DIR THEN PRINT("====>"); ELSE PRINT("<===="); ) 'A': ( MSG("SKIP!"); COMMESCLEAR(PLAYER); NEXTPLAYER(); ) '8': ( IF PLAYER==0 THEN ( MSG("½°ÄÊ ÅÆ? SPADE/HEART/DIAMOND/CLUB"); D=FALSE; P=0; REPEAT ( LOCATE(P*6+12+(P==3)*2,17); CASE INKEY(1) OF ( 'S': D=TRUE,P=0; 'H': D=TRUE,P=1; 'D': D=TRUE,P=2; 'C': D=TRUE,P=3; '4','\L','Z': P=(P==0)?3:P-1; '6','\R','X': P=(P==3)?0:P+1; ' ','\N': D=TRUE; ) ) UNTIL D; CMARK=MARK(P*13); BEEP(); ) ELSE ( IF P_LEFT[PLAYER]>1 THEN ( SP=(HT=(DM=(CL=0))); FOR I=0 TO P_LEFT[PLAYER]-1 CASE P_CARD[PLAYER][I]/13 OF ( 0: SP++; 1: HT++; 2: DM++; 3: CL++; ) CMARK='S'; IF SP"); ) '2': DCARD=2; '3': DCARD=3; ) END; // *DRAW 2/3 CARDS***************** DRAW() BEGIN VAR FF,I,NM,DF,DI; REPEAT ( IF PLAYER==0 THEN ( SETMSG(0,"DRAW "); IF DCARD>9 THEN ( MSW[5]='0'+DCARD/10; MSW[6]='0'+DCARD MOD 10; MSW[7]='!'; MSW[8]=0; ) ELSE ( MSW[5]='0'+DCARD; MSW[6]='!'; MSW[7]=0; ) MSG(MSW); BEEP(); WAIT(5); MSGC(); ) ELSE ( COMLOC(PLAYER,1,3); PRINT("DRAW ",DCARD,"!"); WAIT(5); COMMSG(PLAYER,1,3," "); ) NEXTPLAYER(); IF PLAYER==0 THEN ( MSG("±ÅÀÉ ÊÞÝÃÞ½¡"); BEEP(); WAIT(5); ) ELSE ( SETMSG(0,"COMPUTER "); MSW[9]='0'+PLAYER; SETMSG(10," É ÊÞÝÃÞ½¡"); MSG(MSW); ) FF=(I=0); REPEAT ( NM=NUMBER(P_CARD[PLAYER][I]); IF CHECK(PLAYER,I) AND (NM=='2' OR NM=='3') THEN FF=1; ) UNTIL ++I==P_LEFT[PLAYER] OR FF==1; IF FF==0 OR P_LEFT[PLAYER]==1 THEN ( FF=0; IF PLAYER==0 THEN ( MSG("ÄÞÉ ¶°ÄÞÓ À޾Ͼݡ"); WAIT(5); ) DRAWMANY(PLAYER,DCARD); IF PLAYER==0 THEN ( REORDER(0); DISPMYCARD(); ) ) ELSE ( IF PLAYER==0 THEN ( MSG("ÄÞÚ¦ À޼Ͻ¶? ˸=>RETURN"); REPEAT ( I=KEYIN(0); IF I!=-1 THEN NM=NUMBER(P_CARD[0][I]); ) UNTIL NM=='2' OR NM=='3' OR I==-1; IF I==-1 THEN ( DRAWMANY(0,DCARD); FF=0; ) ELSE ( PUTCARD(0,I); DCARD=DCARD+NM-'0'; ) REORDER(0); DISPMYCARD(); ) ELSE ( FOR I=0 TO P_LEFT[PLAYER]-1 ( DF=0; IF CHECK(PLAYER,I) THEN CASE NUMBER(P_CARD[PLAYER][I]) OF ( '3': DI=I,DF=1; '2': IF DF==0 THEN DI=I,DF=2; ) ) DCARD=DCARD+NUMBER(P_CARD[PLAYER][DI])-'0'; WAIT(3); PUTCARD(PLAYER,DI); ) ) IF OVER==1 THEN EXIT; IF PLAYER!=0 THEN COMMESCLEAR(PLAYER); IF FF==1 AND DOBONCHECK() THEN EXIT; ) UNTIL FF==0; END(FF==1 OR OVER==1); // *NEXT PLAYER******************** NEXTPLAYER() BEGIN IF DIR==0 THEN PLAYER=(PLAYER==4)?0:PLAYER+1; ELSE PLAYER=PLAYER?PLAYER-1:4; END; // *DOBON!!************************ DOBON() BEGIN VAR I,DB,WP; ARRAY !WIN[3]; PRINT("\C"); WP=0; FOR I=0 TO 4 IF W_OR_L[I]==1 THEN ( DB=D_NO[I]; WIN[WP++]=I; IF I==0 THEN PRINT("YOU,"); ELSE PRINT("COMPUTER ",I,","); ) PRINT("\L:",/); PRINT(TAB$(7),"{ { { { { { { { {",/); PRINT(TAB$(7),"{ { { {{{{{ { { { { { {",/); PRINT(TAB$(7),"{{ { { { {",/); PRINT(TAB$(7),"{ { { { { { ",/); PRINT(TAB$(7),"{ { { { {{{ { {",/,/); PRINT(" +-+",/); PRINT(" ÊÞ :I",CHR$(CMARK),"I",/); PRINT(" I",CHR$(CNO),"I",/); PRINT(" +-+"); FOR I=0 TO WP-1 CARDOPEN(I,WIN[I]); PRINT(/,/); BEEP(); BEEP(); WAIT(5); IF D_NO[PLAYER]==DB THEN ( PRINT("\C"); IF PLAYER==0 THEN PRINT("YOU:",/); ELSE PRINT("COMPUTER ",PLAYER,":",/); PRINT(" { { { { { { { ",/); PRINT(" { { { {{{{{ { { { {",/); PRINT(" {{ { {",/); PRINT(" { { { { { ",/); PRINT(" { { { { {{{ ",/,/); PRINT(TAB$(10)," { { { {{{{{ {{ { {",/); PRINT(TAB$(10),"{{{{{ { { { { { {",/); PRINT(TAB$(10)," { { { {{ { { {",/); PRINT(TAB$(10)," { { { { ",/); PRINT(TAB$(10),"{ {{ {{{{{ {{{ { {"); CARDOPEN(1,PLAYER); BEEP(); BEEP(); BEEP(); IF PLAYER!=0 THEN ( LOCATE(2,16); COMRES(1); ) FOR I=0 TO WP-1 ( LOCATE(2,I+19-(WIN[0]==0)); IF WIN[I]!=0 THEN ( PRINT("COMPUTER ",WIN[I],":¢"); COMRES(2); PRINT("£"); ) W_OR_L[WIN[I]]=2; ) W_OR_L[PLAYER]=1; ) ELSE ( FOR I=0 TO WP-1 IF WIN[I]!=0 THEN ( LOCATE(2,I*3+13); COMRES(1); ) W_OR_L[PLAYER]=2; IF PLAYER!=0 THEN ( LOCATE(2,WP*3+12); PRINT("COMPUTER ",PLAYER,":¢"); COMRES(2); PRINT("£"); ) ) END; // *GAME OVER********************** GAMEOVER() BEGIN VAR I,J,R,SC; WAIT(12); PRINT("\C ****** GAME OVER ******\N\N"); IF GAMES>4 THEN FOR I=0 TO 4 FOR J=0 TO 4 ( H_WL[I][J]=H_WL[I][J+1]; H_ST[I][J]=H_ST[I][J+1]; ) R=(GAMES>4)?4:GAMES; WIN=(LOSE=0); FOR I=0 TO 4 CASE H_WL[I][R]=W_OR_L[I] OF ( 1: WIN++; 2: LOSE++; ) FOR I=0 TO 4 ( CASE W_OR_L[I] OF ( 1: ( P_START[I]=P_START[I]-LOSE; IF P_START[I].<=.0 THEN P_START[I]=1; ) 2: ( P_START[I]=P_START[I]+WIN+(WIN==0); IF P_START[I]>10 THEN P_START[I]=10; ) ) H_ST[I][R]=P_START[I]; ) R=(GAMES<5)?0:GAMES-4; PRINT(" +-----+-----+-----+-----+-----+-----+\N"); PRINT(" I I"); FOR I=1 TO 5 PRINT(" ",FORM$(R+I,3)," I"); PRINT("\N +-----+-----+-----+-----+-----+-----+\N"); FOR I=0 TO 4 ( PRINT(" I"); IF I==0 THEN PRINT(" YOU "); ELSE PRINT("COM ",I); PRINT("I"); FOR J=0 TO 4( IF R+J<=GAMES THEN ( CASE H_WL[I][J] OF ( 0: PRINT(" "); 1: PRINT("^.^"); 2: PRINT(";.;"); ) PRINT(FORM$(H_ST[I][J],2)); ) ELSE PRINT(" --- "); PRINT("I"); ) PRINT("\N +-----+-----+-----+-----+-----+-----+\N"); ) PRINT(" ^.^ = WIN ;.; = LOSE\N"); PRINT(/," DO YOU WANT TO TRY AGAIN?"); R=YESNO(29,17,TRUE); IF R THEN ( CASE WIN OF ( 0: ( REPEAT PLAYER=RND(5); UNTIL W_OR_L[PLAYER]==0; ) 1: FOR I=0 TO 4 IF W_OR_L[I]==1 THEN PLAYER=I; OTHERS: ( I=RND(WIN)+1; SC=0; FOR J=0 TO 4 IF W_OR_L[J]==1 THEN IF ++SC==I THEN PLAYER=J; ) ) GAMES++; PRINT(/,/," SCORE RESET? "); IF YESNO(18,19,FALSE) THEN ( GAMES=0; FOR I=0 TO 4 ( P_START[I]=4; FOR J=0 TO 4 H_ST[I][J]=(H_WL[I][J]=0); ) ) ) END(1-R); // *DRAW 1 CARD******************** DRAW1(PL) BEGIN VAR J; J=CARD[--REMAIN]; OWNER[J]=PL; P_CARD[PL][P_LEFT[PL]++]=J; IF REMAIN==0 THEN SHUFFLE(); LOCATE(21,2); PRINT(FORM$(REMAIN,2)); IF PL==0 THEN ( LOCATE(P_LEFT[0]*2,21); PRINT(CHR$(MARK(P_CARD[0][P_LEFT[0]-1])),"\D\L", CHR$(NUMBER(P_CARD[0][P_LEFT[0]-1]))); ) ELSE ( COMLOC(PL,10,1); PRINT(P_LEFT[PL]); ) END; // *DRAW CARDS********************* DRAWCARD(PL,NO) BEGIN VAR I; FOR I=1 TO NO DRAW1(PL); END; // *DRAW MANY CARDS**************** DRAWMANY(PL,NO) BEGIN IF PL==0 THEN ( IF NO>9 THEN ( MSW[0]=NO/10+'0'; MSW[1]=NO MOD 10+'0'; SETMSG(2,"ϲ ˷Ͻ¡"); ) ELSE ( MSW[0]=NO+'0'; SETMSG(1,"ϲ ˷Ͻ¡"); ) MSG(MSW); WAIT(5); ) ELSE ( COMLOC(PL,1,2); COMRES(2); COMLOC(PL,1,3); PRINT(NO,"ϲ"); COMMSG(PL,1,4,"˶ŷ¬...¡"); ) IF P_LEFT[PL]+NO<=18 THEN ( DRAWCARD(PL,NO); WAIT(5); IF PL!=0 THEN COMMESCLEAR(PL); ) ELSE ( DRAWCARD(PL,18-P_LEFT[PL]); IF PL==0 THEN TOOMANY(); ELSE GIVEUP(); ) END; // *CARD SHUFFLE******************* SHUFFLE() BEGIN VAR I,J,K,TEMP; REMAIN=0; FOR I=0 TO 51 IF OWNER[I]==5 THEN OWNER[CARD[REMAIN++]=I]=-1; IF REMAIN==0 THEN ( BEEP(); MSGW("¶°ÄÞ¶Þ Å¸Å¯Ã ¼Ï²Ï¼À¡"); MSGW("»ÞÝÈÝÃÞ½¶Þ,¹Þ°Ñ¦ Á­³¼¼Ï½¡"); STOP(); ) FOR I=0 TO REMAIN*5 ( TEMP=CARD[J=RND(REMAIN)]; CARD[J]=CARD[K=RND(REMAIN)]; CARD[K]=TEMP; ) END; // *MAN DRAWS 1 CARD*************** MANDRAW() BEGIN VAR DET,K; DRAW1(0); DISPMYCARD(); DET=-1; IF CHECK(0,P_LEFT[0]-1) THEN ( MSW[0]='\"'; MSW[1]='@'+P_LEFT[0]; SETMSG(2,"\" ¦ À޼Ͻ¶? "); MSG(MSW); IF YESNO(17,17,TRUE) THEN DET=P_LEFT[0]-1; ) ELSE WAIT(2); END(DET); // *COMPUTER DRAWS 1 CARD********** COMDRAW() BEGIN VAR DET; COMMESCLEAR(PLAYER); IF P_LEFT[PLAYER]==18 THEN GIVEUP(); ELSE ( COMMSG(PLAYER,1,2,"1ϲ ˸֡"); DRAW1(PLAYER); IF CHECK(PLAYER,P_LEFT[PLAYER]-1) THEN ( COMLOC(PLAYER,1,4); COMRES(4); PRINT("ÀÞ¾Ù¾Þ¡"); DET=P_LEFT[PLAYER]-1; ) ELSE ( COMLOC(PLAYER,2,4); COMRES(5); PRINT("Êß½..."); DET=-1; ) ) END(DET); // *TOO MANY CARDS!!*************** TOOMANY() BEGIN BEEP(); MSGW("ºÚ²¼Þ®³ ¶°ÄÞ¦ ÓÃϾÝ!!"); MSGW("±ÅÀÉ Ï¹ÃÞ½!!"); W_OR_L[0]=2; OVER=1; END; // *COMPUTER GIVE UP*************** GIVEUP() BEGIN COMMESCLEAR(PLAYER); BEEP(); COMLOC(PLAYER,0,2); COMRES(2); COMMSG(PLAYER,0,3,"ºÚ²¼Þ®³"); COMMSG(PLAYER,0,4,"¶°ÄÞ¦"); COMMSG(PLAYER,0,5,"ÓÃŲÖ!!"); COMMSG(PLAYER,0,6,"GIVE UP..."); W_OR_L[PLAYER]=2; OVER=1; END; // *PUT A CARD********************* PUTCARD(PL,NO) BEGIN VAR CD; LOCATE(18,14); PRINT(" "); CD=P_CARD[PL][NO]; CMARK=MARK(CD); CNO=NUMBER(CD); DISPCARD(); PUT=1; OWNER[CD]=5; IF --P_LEFT[PL]>NO THEN LDIR(P_CARD+PL*18+NO+1,P_CARD+PL*18+NO,P_LEFT[PL]-NO); IF PL!=0 THEN ( COMLOC(PL,10,1); PRINT(P_LEFT[PL]," "); ) BEEP(); END; // *DISPLAY CARD******************* DISPCARD() BEGIN VAR I; LOCATE(16,4); PRINT(CHR$(CNO)); LOCATE(22,12); PRINT(CHR$(CNO)); PUTMK(16,5); PUTMK(22,11); FOR I=5 TO 11 ( LOCATE(17,I); PRINT(" "); ) CASE CNO OF ( 'A': PUTMK(19,8); '2': PIC2(); '3': PIC3(); '4': PIC4(); '5': PIC5(); '6': PIC6(); '7': PIC7(); '8': PIC8(); '9': PIC9(); 'T': PIC10(); 'J': PICJACK(); 'Q': PICQUEEN(); 'K': PICKING(); ) END; PIC2() BEGIN PUTMK(19,6); PUTMK(19,10); END; PIC3() BEGIN PUTMK(19,8); PIC2(); END; PIC4() BEGIN PUTMK(18,6); PUTMK(20,6); PUTMK(18,10); PUTMK(20,10); END; PIC5() BEGIN PUTMK(19,8); PIC4(); END; PIC6() BEGIN PUTMK(18,8); PUTMK(20,8); PIC4(); END; PIC7() BEGIN PUTMK(17,5); PUTMK(21,5); PUTMK(17,7); PUTMK(21,7); PUTMK(17,11); PUTMK(21,11); PUTMK(19,6); END; PIC8() BEGIN PUTMK(17,5); PUTMK(21,5); PUTMK(17,8); PUTMK(21,8); PUTMK(17,11); PUTMK(21,11); PUTMK(19,6); PUTMK(19,10); END; PIC910SUB() BEGIN PUTMK(17,5); PUTMK(21,5); PUTMK(17,7); PUTMK(21,7); PUTMK(17,9); PUTMK(21,9); PUTMK(17,11); PUTMK(21,11); END; PIC9() BEGIN PUTMK(19,8); PIC910SUB(); END; PIC10() BEGIN PUTMK(19,6); PUTMK(19,10); PIC910SUB(); END; PICJACK() BEGIN LOCATE(17,5); PRINT(" - - "); LOCATE(17,6); PRINT(" "); LOCATE(17,7); PRINT(" ",CHR$(CMARK)," ",CHR$(CMARK)," "); LOCATE(17,8); PRINT(" "); LOCATE(17,9); PRINT(" J "); LOCATE(17,10); PRINT(" "); LOCATE(17,11); PRINT(" --- "); END; PICQUEEN() BEGIN LOCATE(17,5); PRINT(" ^ ^ "); LOCATE(17,6); PRINT(" "); LOCATE(17,7); PRINT(" Q Q "); LOCATE(17,8); PRINT(" "); LOCATE(17,9); PRINT("( ",CHR$(CMARK)," )"); LOCATE(17,10); PRINT(" "); LOCATE(17,11); PRINT(" --/ "); END; PICKING() BEGIN LOCATE(17,5); PRINT(" V V "); LOCATE(17,6); PRINT(" "); LOCATE(17,7); PRINT(" ",CHR$(CMARK)," ",CHR$(CMARK)," "); LOCATE(17,8); PRINT(" "); LOCATE(17,9); PRINT("/ K /"); LOCATE(17,10); PRINT("....."); LOCATE(17,11); PRINT(" >-< "); END; // *PUT A MARK********************* PUTMK(X,Y) BEGIN LOCATE(X,Y); PRINT(CHR$(CMARK)); END; // *MARK*************************** MARK(CD) BEGIN VAR MK; CASE CD/13 OF ( 0: MK='S'; 1: MK='H'; 2: MK='D'; 3: MK='C'; ) END(MK); // *NUMBER************************* NUMBER(CD) BEGIN VAR NUM; CASE CD MOD 13 OF ( 0 : NUM='A'; 1 TO 8: NUM='1'+CD MOD 13; 9 : NUM='T'; 10 : NUM='J'; 11 : NUM='Q'; 12 : NUM='K'; ) END(NUM); // *DISPLAY MESSAGE AND PAUSE****** MSGW(ADR) BEGIN VAR DUMMY; MSG(ADR); DUMMY=INKEY(1); MSGC(); END; // *MESSAGE CLEAR****************** MSGC() BEGIN LOCATE(1,17); PRINT(SPC$(37)); END; // *DISPLAY MESSAGE WITHOUT PAUSE** MSG(ADR) BEGIN MSGC(); LOCATE(2,17); PRINT(MSX$(ADR)); END; // *SET MESSAGE TO MSW[]*********** SETMSG(PO,ADR) BEGIN WHILE MSW[PO++]=MEM[ADR++] ; MSW[PO]=0; END; // *COMPUTERS' MESSAGE************* COMMSG(PL,DX,DY,ADR) BEGIN COMLOC(PL,DX,DY); PRINT(MSX$(ADR)); END; // *LOCATE FOR COMPUTER************ COMLOC(COMNO,DX,DY) BEGIN LOCATE((COMNO<=2?1:25)+DX,((COMNO==2 OR COMNO==3)?1:9)+DY); END; // *COMPUTER MESSAGE CLEAR********* COMMESCLEAR(PL) BEGIN VAR I; FOR I=2 TO 6 COMMSG(PL,0,I," "); END; // *COMPUTERS' RESPONSE************ COMRES(PAT) BEGIN CASE PAT OF ( // *WIN!*************************** 1: CASE RND(7) OF ( 0: PRINT("¢Ô¯À¾Þ!!£"); 1: PRINT("¢×¯·°!£"); 2: PRINT("¢Ü¯Ê¯Ê¯¥¥¥£"); 3: PRINT("¢»ÞϰÐÛ!£"); 4: PRINT("¢¶¯À°!!£"); 5: PRINT("¢ÜÀ¼Ê ÀÞÚÉ\D\L\L\L\L\L\L\L\L\LÁ®³¾ÝÃÞÓ ³¹Ù!!£"); 6: PRINT("¢GOODÃÞ½Ö!£"); ) // *LOST/DRAW/GIVE UP************** 2: CASE RND(8) OF ( 0: PRINT("¹Þ¹Þ¯!!"); 1: PRINT("¼Ï¯À!!"); 2: PRINT("±Ø¬!?"); 3: PRINT("Î߯¸Ý¡"); 4: PRINT("Ô×ÚÀ!!"); 5: PRINT("OH,NO!!"); 6: PRINT("¹ÞÛ¹ÞÛ¥¥¥"); 7: PRINT("ÚÚÚÚÚÚ¥¥¥"); ) // *THINKING*********************** 3: CASE RND(6) OF ( 0: PRINT("´°Ä¥¥¥"); 1: PRINT("³°Ñ¥¥¥"); 2: PRINT("ÄÞ³¼Ö³¥¥¥"); 3: PRINT("ϲ¯ÀÅ¥¥¥"); 4: PRINT("¿³ÀÞÅ¥¥¥"); 5: PRINT("ÑÑÑ¥¥¥"); ) // *LUCKY!************************* 4: CASE RND(3) OF ( 0: PRINT("OK!"); 1: PRINT("Ö¼!"); 2: PRINT("Ì̯¡"); ) // *UNLUCKY...********************* 5: CASE RND(5) OF ( 0: PRINT("»ÞÝÈÝ!\D\L\L\L"); 1: PRINT("Á¯!"); 2: PRINT("¹¯!"); 3: PRINT("±Ú?"); 4: PRINT("¥¥¥"); ) ) END; // *DISPLAY PLAYER'S CARDS********* DISPMYCARD() BEGIN VAR I; FOR I=1 TO 18 ( LOCATE(I*2,21); IF I>P_LEFT[0] THEN PRINT(" \D\L "); ELSE PRINT(CHR$(MARK(P_CARD[0][I-1])),"\D\L", CHR$(NUMBER(P_CARD[0][I-1]))); ) END; // *REORDER CARDS (INSERTION SORT)* REORDER(PL) BEGIN VAR J,CD,P; IF P_LEFT[PL]==1 THEN RETURN; FOR J=1 TO P_LEFT[PL]-1 ( CD=P_CARD[PL][J]; P=J; WHILE CD0 P_CARD[PL][P]=P_CARD[PL][--P]; P_CARD[PL][P]=CD; ) END; // *COMPUTER'S CARD OPEN*********** CARDOPEN(POS,PL) BEGIN VAR I; REORDER(PL); LOCATE(2,POS*3+12); IF PL==0 THEN PRINT("YOU :"); ELSE PRINT("COMPUTER ",PL,":"); LOCATE(13,POS*3+11); PRINT("+\D\LI\D\LI\D\L+"); FOR I=0 TO P_LEFT[PL]-1 ( LOCATE(I*2+14,POS*3+11); PRINT("-+\D\L\L",CHR$(MARK(P_CARD[PL][I])),"I\D\L\L", CHR$(NUMBER(P_CARD[PL][I])),"I\D\L\L-+"); ) END; // *CHECK IF THE CARD CAN PUT****** CHECK(PL,NO) BEGIN VAR CD; CD=P_CARD[PL][NO]; END(MARK(CD)==CMARK OR NUMBER(CD)==CNO); // *CHECK WHETHER "DOBON" OR NOT*** DOBONCHECK() BEGIN VAR I,J,DF; DF=0; FOR I=0 TO 4 ( W_OR_L[I]=0; D_NO[I]=0; FOR J=0 TO P_LEFT[I]-1 D_NO[I]=D_NO[I]+P_CARD[I][J] MOD 13+1; IF I!=PLAYER AND D_NO[I]<=13 AND NUMBER(D_NO[I]-1)==CNO THEN W_OR_L[I]=(DF=1); ) END(DF); // *KEY IN************************* KEYIN(M) BEGIN VAR I,P,K,N; P=-1; REPEAT ( P=(P+1)*(P!=P_LEFT[0]-1); N=NUMBER(P_CARD[0][P]); ) UNTIL CHECK(0,P) AND (M OR N=='2' OR N=='3'); I=FALSE; REPEAT ( LOCATE(P*2+2,19); K=INKEY(1); CASE K OF ( 'A' TO 'R': IF CHECK(0,K-'A') THEN P=K-'A',I=TRUE; '4','\L','Z': ( REPEAT ( P=P-1+(P==0)*P_LEFT[0]; N=NUMBER(P_CARD[0][P]); ) UNTIL CHECK(0,P) AND (M OR N=='2' OR N=='3'); ) '6','\R','X': ( REPEAT ( P=(P+1)*(P!=P_LEFT[0]-1); N=NUMBER(P_CARD[0][P]); ) UNTIL CHECK(0,P) AND (M OR N=='2' OR N=='3'); ) ' ': I=TRUE; '\N': P=-1,I=TRUE; ) ) UNTIL I; END(P); // *INPUT YES OR NO**************** YESNO(X,Y,R) BEGIN VAR K,D; LOCATE(X,Y); PRINT("YES/NO"); D=FALSE; REPEAT ( LOCATE(X+(1-R)*4,Y); K=INKEY(1); CASE K OF ( 'Y': R=(D=TRUE); 'N': R=1-(D=TRUE); '4' ,'6' , '\R','\L', 'Z' ,'X' : R=1-R; ' ','\N': D=TRUE; ) ) UNTIL D; END(R); // *WAIT*************************** WAIT(T) BEGIN VAR I; FOR I=1 TO T*WLOOP ; END; // *LDIR*************************** LDIR(3) BEGIN CODE(0EDH,0B0H); // LDIR END; // // *DEMONSTRATION PROGRAM********** // CONST PLOOP=800,KLOOP=1200; DEMO() BEGIN DEMO1(); DEMO2(); END; // *DEMONSTRATION PART 1*********** DEMO1() ARRAY !X[168]=( 6,6,5,4,3,4,5,6,7,8,9,10,11, 9,9,9,8,8,7,7,6,5,4,3,2,1,1, 3,4,5,6,7,8,9,10,11,10,9,9,9, 10,11,12,13,14,14,14,13,12, 12,13,14,15,16,16,17,18, 19,19,19,19,20,21, 6,7,8,9,10,11,12,13,14,14,15,15, 14,13,12,12,12,13,14,14,14, 13,12,11,10,9,8,7,7,7,8,9,10,11, 16,17,24,23,22,21,21,20,20, 19,19,19,20,21,22,23,24, 25,26,27,27,27,28,28,28,27, 26,25,24,23,24,24, 25,26,27,28,29,30, 29,30,31,32,33,34,35,36,37,37,38,38, 37,36,35,35,35,36,37,37,37, 36,35,34,33,32,31,30,30,30, 31,32,33,34 ), !Y[168]=( 1,2,3,3,2,1,1,1,1,1,2,2,1, 3,4,5,6,7,8,9,10,11,11,10,10, 9,8,7,7,7,7,7,6,6,6,6,7,8,9,10, 11,11,11,10,9,8,7,6,6, 7,8,8,8,7,6,6,7,8,9,10,11,11,10, 23,23,23,22,21,20,19,18,17,16, 15,14,13,14,15,16,17,18,19, 20,21,22,23,23,23,22,22, 21,20,19,20,21,21,21, 18,18,13,13,14,15,16,17,18, 19,20,21,22,23,23,23,23,22,21, 20,19,18,17,16,15,14,13,13,13, 14,15,16,17,17,17,17,17,16, 23,23,23,22,21,20,19,18,17,16, 15,14,13,14,15,16,17,18,19, 20,21,22,23,23,23,22,22, 21,20,19,20,21,21,21 ); BEGIN VAR I; PRINT("\C"); FOR I=0 TO 168 ( LOCATE(X[I],Y[I]); PRINT("#","\L"); PAUSE(1); PRINT(CHR$(7BH)); ) WAIT(10); PRINT(" "); END; // *DEMONSTRATION PART 2*********** DEMO2() ARRAY !X[6]=( 3,9,15,21,27,33,35 ), !Y[27]=( 2,2,2,2,2,2, 2,3,5,8,12,17, 14,12,11,11,12,14, 17,16,16,17,17,17, 17,17,17,17 ); BEGIN VAR I,J,L,P; PRINT("\C"); FOR I=0 TO 6 ( LOCATE(X[I],2); DCHRPRINT(I); BEEP(); WAIT(3); ) FOR I=7 TO 27 FOR J=0 TO 6 ( P=I-J; IF Y[P]>Y[P-1] THEN FOR L=Y[P-1] TO Y[P]-1 ( LOCATE(X[J],L); PRINT(SPC$(J<5?5:1)); ) ELSE IF Y[P]>"); OVER=0; REPEAT ( DMSG(2,12,"\"DOBON!\"ʤÃÓÁÉ ¶°ÄÞ¦ ÄÞÝÄÞÝ Í׼ò·¤"); DMSG(2,14,"ÊÞ Æ ÃÞò٠¶°ÄÞÉ ½³¼Þ¶Þ¤ÃÓÁÉ ¶°ÄÞÉ"); DMSG(1,16,"½³¼ÞÉ ºÞ³¹²Ä µÅ¼ÞÆ Å¯À× ±¶ÞÙ ¹Þ°ÑÃÞ½¡"); KWAIT(8); EXPCLEAR(); DMSG(1,11," »²¼®Æ ¶°ÄÞ¦ 4ϲ½Þ ¸ÊÞØÏ½¡"); DMSG(1,13," ÔÏ(PILE)¶× ¶°ÄÞ¦ 1ϲ ҸؤµÔ¶× ¹Þ°Ñ¦"); DMSG(1,15,"ʼÞÒϽ¡"); DMSG(1,17," ¼ÞÌÞÝÉ ÊÞÝÆ ůÀפÊÞÆ ÃÞò٠¶°ÄÞĤ"); DMSG(1,19,"½³¼Þ¶ ½°Ä¶Þ µÅ¼Þ ¶°ÄÞ¦ À޼Ͻ¡"); DMSG(1,21," ÀÞ¾Ù ¶°ÄÞ¶Þ Å²Ä·Ê¤PILE¶× 1ϲ ˷Ͻ¡"); DMSG(1,23,"˲À ¶°ÄÞ¦ ½¸Þ ÀÞ½ºÄÓ Ã޷Ͻ¡"); KWAIT(8); EXPCLEAR(); DMSG(1,11," ¶°ÄÞÉ Å¶ÆÊ 5¼­Ù²É ÔÏÌÀÞ¶Þ ±¯Ã¤¿Ú¿ÞÚ"); DMSG(1,13,"·ÞÉ Ö³Å ÊÀ×·¦ ¼Ï½¡"); DMSG(1,15,"* A(SKIP):·ÞÉ ËÄÉ ¼Þ­ÝÊÞݦ ÄÊ޼Ͻ¡"); DMSG(1,17,"* 8(ALMIGHTY):½°Ä¦ ¼Ã²Ã޷Ͻ¡"); DMSG(1,19,"* 9(REVERSE):·Þ¬¸ÏÜØÆ ÅØÏ½¡"); DMSG(1,21,"* 2,3(DRAW 2/3):·ÞÉ ËÄÆ 2ϲ ÏÀÊ 3ϲ"); DMSG(17,23,"¶°ÄÞ¦ ˶¾Ï½¡"); KWAIT(8); EXPCLEAR(); DMSG(1,11," DRAW 2/3¦ ÀÞ»ÚÀķƤӼ ½³¼Þ¶ ½°ÄÉ µÅ¼Þ"); DMSG(1,13,"DRAW 2/3¦ ӯòÚÊÞ¤¶»Èà ÀÞ½ºÄ¶Þ Ã޷Ͻ¡"); DMSG(1,15,"(EX.) A => B => C É ¼Þ­ÝÆ Ïܯò٠ķƤ"); DMSG(7,17,"A¶Þ SPADEÉ 3 ¦ À޼ϼÀ¡"); DMSG(7,19,"ººÃÞ B¶Þ SPADEÉ 2¦ ӯòÚÊÞ"); DMSG(7,21,"DRAW 5ļäÏÀ 릃 ½°ÄÉ 3¦ ӯòÚÊÞ"); DMSG(7,23,"DRAW 6ļäCÆ Ë¶¾Ù ºÄ¶Þ Ã޷Ͻ¡"); KWAIT(8); EXPCLEAR(); DMSG(1,11," º³¼Ã ¶°ÄÞ¦ Í׼ò¯Ã¤Î¶É ËÄÉ ÀÞ¼À ¶°ÄÞÉ"); DMSG(1,13,"½³¼Þ¶Þ¤¼ÞÌÞÝÉ ÃÌÀÞÉ ½³¼Þ(J Ê 11,Q Ê "); DMSG(1,15,"12,K Ê 13ļà ¶¿Þ´Ï½¡)É ºÞ³¹²Ä µÅ¼ÞÆ"); DMSG(1,17,"ůÀפ¢ÄÞÎÞÝ!£Ä ²¯Ã ±¶ÞØÏ½¡"); DMSG(1,19," ÀÀÞ¼¤ºÉķƤ¶°ÄÞ¦ ÀÞ¼À ËÄÉ ÃÌÀÞÉ ½³¼ÞÉ"); DMSG(1,21,"ºÞ³¹²Ó µÅ¼ÞÀÞ¯Àפ¢ÄÞÎÞݶ޴¼!!£Ä ²¯Ã¤"); DMSG(1,23,"¢ÄÞÎÞÝ£¼À ËÄÉ Ï¹Æ ÅØÏ½¡"); KWAIT(8); EXPCLEAR(); DMSG(1,11," ¢ÄÞÎÞݶ޴¼£»ÚŶ¯À ķʤ¢ÄÞÎÞÝ£¼À ËĶÞ"); DMSG(1,13,"¶Á¤¶°ÄÞ¦ ÊÞÆ ÀÞ¼À ËÄ¶Þ Ï¹¡"); DMSG(1,15," ¢ÄÞÎÞݶ޴¼£»ÚÀ ķʤ¢ÄÞÎÞݶ޴¼£¼À ËĶÞ"); DMSG(1,17,"¶Á¤¢ÄÞÎÞÝ£¼À ËÄ¶Þ Ï¹¡"); DMSG(1,19," ·ÞÉ ¹Þ°ÑÃÞʤ ¶¯À ËÄ¶Þ µÔÆ ÅØ¤¶°ÄÞ¦"); DMSG(1,21,"1ϲ ½¸Å¸¼Ã(ÀÀÞ¼ 1ϲÅ× ¿ÉÏÏ)¤ÏÀ ϹÀ ËÄÊ"); DMSG(1,23,"1ϲ ÌÔ¼Ã(10ϲÅ× ¿ÉÏÏ) ʼÞÒϽ¡"); KWAIT(8); EXPCLEAR(); ) UNTIL OVER; END; // *BIG CHARACTER DISPLAY(DEMO P2)* DCHRPRINT(CH) BEGIN CASE CH OF ( 0 : PRINT(CHR$(7D7BH),CHR$(7D7BH)," \D\L\L\L\L\L", CHR$(7BH)," ",CHR$(7BH),"\D\L\L\L\L\L", CHR$(7BH)," ",CHR$(7BH),"\D\L\L\L\L\L", CHR$(7BH)," ",CHR$(7BH),"\D\L\L\L\L\L", CHR$(7D7BH),CHR$(7D7BH)," "); 1,3: PRINT(" ",CHR$(7D7BH),CHR$(7BH)," \D\L\L\L\L\L", CHR$(7BH)," ",CHR$(7BH),"\D\L\L\L\L\L", CHR$(7BH)," ",CHR$(7BH),"\D\L\L\L\L\L", CHR$(7BH)," ",CHR$(7BH),"\D\L\L\L\L\L", " ",CHR$(7D7BH),CHR$(7BH)," "); 2 : PRINT(CHR$(7D7BH),CHR$(7D7BH)," \D\L\L\L\L\L", CHR$(7BH)," ",CHR$(7BH),"\D\L\L\L\L\L", CHR$(7D7BH),CHR$(7D7BH)," \D\L\L\L\L\L", CHR$(7BH)," ",CHR$(7BH),"\D\L\L\L\L\L", CHR$(7D7BH),CHR$(7D7BH)," "); 4 : PRINT(CHR$(7BH)," ",CHR$(7BH),"\D\L\L\L\L\L", CHR$(7D7BH)," ",CHR$(7BH),"\D\L\L\L\L\L", CHR$(7BH)," ",CHR$(7BH)," ",CHR$(7BH),"\D\L\L\L\L\L", CHR$(7BH)," ",CHR$(7D7BH),"\D\L\L\L\L\L", CHR$(7BH)," ",CHR$(7BH)); 5,6: PRINT(CHR$(7BH),"\D\L", CHR$(7BH),"\D\L", CHR$(7BH),"\D\L \D\L", CHR$(7BH)); ) END; // *DISPLAY MESSAGE WITH CURSOR**** DMSG(X,Y,ADR) BEGIN VAR C; IF OVER THEN RETURN; LOCATE(X,Y); WHILE C=MEM[ADR++] ( PRINT(CHR$(7BH),"\L"); PAUSE(1); PRINT(CHR$(C)); IF OVER=INKEY(0) THEN EXIT; ) END; // *DISPLAY MESSAGE WITH CURSOR**** // *(IGNORE KEYIN)***************** DMSG2(X,Y,ADR) BEGIN VAR C; LOCATE(X,Y); WHILE C=MEM[ADR++] ( PRINT(CHR$(7BH),"\L"); PAUSE(1); PRINT(CHR$(C)); ) END; // *EXPLAIN CLEAR****************** EXPCLEAR() BEGIN VAR I; IF OVER THEN RETURN; FOR I=10 TO 23 ( LOCATE(0,I); PRINT(SPC$(40)); ) END; // *WAIT(KEYIN=>OVER)************** KWAIT(T) BEGIN VAR I; IF OVER THEN RETURN; FOR I=1 TO T*KLOOP IF OVER=INKEY(0) THEN EXIT; END; // *PAUSE************************** PAUSE(T) BEGIN VAR I; FOR I=1 TO T*PLOOP ; END; // :PROGRAM END******************** // // BASIC PROGRAM : '90 SPRING VACATION // SLANG PROGRAM : '90/8/13 // THANKS TO : MZ-2531,MZ-1D22, // S-OS"SWORD",WINER,SLANG // Fuzzy BASIC, // OH!MZ '86 NOV. ASCII SAVE PROGRAM, // ETC. //