home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 November / VPR9811A.BIN / FFILLY / NandD / nandd.tfy < prev    next >
Text File  |  1998-08-26  |  15KB  |  504 lines

  1. #info INAM "Night'n'Day version 1.0"
  2. #info IART "POCOPEN:GGB02243@nifty.ne.jp,poco@yun.co.jp"
  3. #info ICOP "POCOPEN:GGB02243@nifty.ne.jp,poco@yun.co.jp"
  4.  
  5. #include rgb2bgr.h
  6. #include draw3D.h
  7.  
  8. #define NAME 0x3737ff
  9. #define SHADOW 0x000000
  10. #define INFO 0x9fe464
  11. #define SCORE 0x1a85e6
  12. #define STAGE 0x9f6060
  13. #define KEY 0xff9bff
  14. #define RESULT 0xabcbce
  15.  
  16. int pic,a[],you,turn,size,num[],pID[],win;
  17. str pn[],pName[],LF;
  18.  
  19. main(){
  20. //Debug(1);
  21.     size=8;
  22.     LF=StrCode(0x0a);
  23.     pic=LoadPic("nandd.bmp");
  24.     SetLineSize(1);
  25.     init(1);
  26. }
  27.  
  28. //DirectPlayの初期化
  29. int dp(){
  30.     int ID,w,h,dummy;
  31.     str name;
  32.     ID=DPInit(0x39ca9000);
  33.     if(ID==-1){
  34.         CloseWin(win);
  35.         del_us;
  36.         del_me;
  37.     }
  38.     else{
  39.         name=LF;
  40.         while(name==LF){
  41.             name=SubStr(StrInput("あなたの名前は?(Cancelで終了)"),0,10);
  42.         }
  43.         if(CharCode(name)==0x00){
  44.             CloseWin(win);
  45.             del_us;
  46.             del_me;
  47.         }
  48.         BackMode(1);
  49.         SetFont(20,"Times New Roman",0,0,0,0,400);
  50.         bgCol(0);
  51.         wTextWrite(" Player's Name: ",pic,50,8,NAME);
  52.         w=GetLowWord(GetTextSize(" Player's Name: "));
  53.         SetFont(20,"MS ゴシック",128,0,0,0,500);
  54.         wTextWrite(name+" ",pic,50+w,8,NAME);
  55.         DPSetName(name);
  56.         if(DPIsHost()==0){
  57.             DPSendMessage("",1);
  58.             SetFont(24,"MS ゴシック",128,0,0,0,400);
  59.             SetFont(24,"MS ゴシック",128,0,0,0,400);
  60.             w=GetLowWord(GetTextSize("ゲームを開始します"))+2;
  61.             h=GetHiWord(GetTextSize("ゲームを開始します"))+2;
  62.             dummy=CreatePic(pic,w,h);
  63.             MovePic(pic,380,200,380+w,200+h,dummy);
  64.             wTextWrite("挑戦します!",pic,380,200,INFO);
  65.             you=1;
  66.             pn[1]=name;
  67.             mes(DP_RECEIVE){
  68.                 DPGetMessage();
  69.                 if(MesP2==2){
  70.                     pID[0]=MesP1;
  71.                     pn[0]=DPGetName(pID[0]);
  72.                     mes(TIME){
  73.                         step(20){
  74.                             del_us;
  75.                             ,,MovePic(dummy,0,0,w,h,pic,380,200);
  76.                             wTextWrite("ゲームを開始します",pic,380,200,INFO);
  77.                             ,,MovePic(dummy,0,0,w,h,pic,380,200);
  78.                             game();
  79.                             DelPic(dummy);
  80.                             del_me;
  81.                         }
  82.                     }
  83.                 }
  84.             }
  85.         }
  86.         else{
  87.             pID[0]=ID;
  88.             SetFont(24,"MS ゴシック",128,0,0,0,400);
  89.             w=GetLowWord(GetTextSize("挑戦者を待っています"))+2;
  90.             h=GetHiWord(GetTextSize("挑戦者を待っています"))+2;
  91.             dummy=CreatePic(pic,w,h);
  92.             MovePic(pic,380,200,380+w,200+h,dummy);
  93.             mes(TIME){
  94.                 step(20){
  95.                     wTextWrite("挑戦者を待っています",pic,380,200,INFO);
  96.                     ,MovePic(dummy,0,0,w,h,pic,380,200);
  97.                 }
  98.             }
  99.             mes(DP_RECEIVE){
  100.                 DPGetMessage();
  101.                 if(MesP2==1){
  102.                     del_us;
  103.                     MovePic(dummy,0,0,w,h,pic,380,200);
  104.                     wTextWrite("挑戦者が来ました!",pic,380,200,INFO);
  105.                     pID[1]=MesP1;
  106.                     pName[1]=DPGetName(pID[1]);
  107.                     you=0;
  108.                     pn[0]=name;
  109.                     pn[1]=pName[1];
  110.                     DPSendMessage("",2,pID[1]);
  111.                 }
  112.                 else if(MesP2==2){
  113.                     mes(TIME){
  114.                         step(20){
  115.                             del_us;
  116.                             ,,MovePic(dummy,0,0,w,h,pic,380,200);
  117.                             wTextWrite("ゲームを開始します",pic,380,200,INFO);
  118.                             ,,MovePic(dummy,0,0,w,h,pic,380,200);
  119.                             game();
  120.                             DelPic(dummy);
  121.                             del_me;
  122.                         }
  123.                     }
  124.                 }
  125.             }
  126.         }
  127.     }
  128. }
  129.  
  130. //ゲーム初期化
  131. int init(int new){
  132.     int dummy,i,j;
  133.     dummy=LoadPic("nandd.bmp");
  134.     MovePic(dummy,0,40,640,440,pic,0,40);
  135.     DelPic(dummy);
  136.     draw3D(pic,36,36,43+size*40,43+size*40,STAGE,3);
  137.     for(i=0;i<size;i=i+1){
  138.         for(j=0;j<size;j=j+1){
  139.             draw3D(pic,41+i*40,41+j*40,78+i*40,78+j*40,STAGE,2,40,1);
  140.         }
  141.     }
  142.     for(i=0;i<size+2;i=i+1){
  143.         for(j=0;j<size+2;j=j+1){
  144.             a[i*100+j]=-1;
  145.         }
  146.     }
  147.     CapTitle(" Night'n'Day version 1.0");
  148.     if(new==1){
  149.         win=OpenWin(pic);
  150.         dp();
  151.     }
  152.     else game();
  153. }
  154.  
  155. //ゲーム本体
  156. int game(){
  157.     str abc;
  158.     int pass[],dummy,i,j,k,x,y;
  159.     pass[0]=0;
  160.     pass[1]=0;
  161.     turn=0;
  162.     dummy=CreatePic(pic,240,280);
  163.     MovePic(pic,400,120,240,280,dummy);
  164.     BackMode(1);
  165.     SetFont(16,"MS ゴシック",128,0,0,0,600);
  166.     wTextWrite("終了:右クリック",pic,410,325,KEY);
  167.     wTextWrite("パス:[P]キー",pic,410,343,KEY);
  168.     wTextWrite("次のゲーム:[N]キー",pic,410,359,KEY);
  169.     wTextWrite("ヘルプ:[H]キー",pic,410,375,KEY);
  170.     SetFont(22,"MS ゴシック",128,0,0,0,600);
  171.     num[0]=2;
  172.     num[1]=2;
  173.     for(i=0;i<2;i=i+1){
  174.         draw(10,i+3,i);
  175.         wTextWrite(StrPrint("%s:%3ld",pn[i],num[i]),pic,440,130+i*40,SCORE);
  176.     }
  177.     wTextWrite(StrPrint("%s の順番です",pn[turn]),pic,400,230,INFO);
  178.     draw(size/2,size/2,0);
  179.     draw(size/2,size/2+1,1);
  180.     draw(size/2+1,size/2,1);
  181.     draw(size/2+1,size/2+1,0);
  182.     mes(KEY_DOWN){
  183.         if(StrCode(MesP2)=="P"&&turn==you){
  184.             k=0;
  185.             for(i=1;i<size+1;i=i+1){
  186.                 for(j=1;j<size+1;j=j+1){
  187.                     if(a[i*100+j]==-1){
  188.                         if(check2(i,j,turn,0)>0)k=k+1;
  189.                     }
  190.                 }
  191.             }
  192.             if(k==0){
  193.                 DPSendMessage("",5);
  194.             }
  195.             else{
  196.                 MsgBox(StrPrint("%s はパスできません",pn[turn]));
  197.                 pass[turn]=0;
  198.             }
  199.         }
  200.         if(StrCode(MesP2)=="N"&&turn==you){
  201.             if(MsgBox("次のゲームを始めますか?",0x24)==6){
  202.                 DPSendMessage("",4);
  203.             }
  204.         }
  205.         if(StrCode(MesP2)=="H"&&turn==you){
  206.             Shell("nandd.txt");
  207.         }
  208.     }
  209.     mes(RBDOWN){
  210.         if(MsgBox("終了しますか?",0x24)==6){
  211.             DPSendMessage("",6);
  212.         }
  213.     }
  214.     mes(DP_RECEIVE){
  215.         abc=DPGetMessage();
  216.         if(MesP2==1){
  217.             if(turn!=you){
  218.                 x=StrtoInt(SubStr(abc,0,2));
  219.                 y=StrtoInt(SubStr(abc,2,2));
  220.                 check2(x,y,turn);
  221.                 draw(x,y,turn);
  222.                 num[turn]=num[turn]+1;
  223.                 MovePic(dummy,0,0,240,180,pic,400,120);
  224.                 for(i=0;i<2;i=i+1){
  225.                     draw(10,i+3,i);
  226.                     wTextWrite(StrPrint("%s:%3ld",pn[i],num[i]),pic,440,130+i*40,SCORE);
  227.                 }
  228.                 if(num[you]+num[(you+1)%2]==size*size){
  229.                     MovePic(dummy,0,100,240,180,pic,400,220);
  230.                     DelPic(dummy);
  231.                     if(num[you]>num[(you+1)%2])end(0);
  232.                     if(num[you]==num[(you+1)%2])end(1);
  233.                     if(num[you]<num[(you+1)%2])end(2);
  234.                     del_us;
  235.                     del_me;
  236.                 }
  237.                 turn=(turn+1)%2;
  238.                 wTextWrite(StrPrint("%s の順番です",pn[turn]),pic,400,230,INFO);
  239.             }
  240.             else if(num[you]+num[(you+1)%2]==size*size){
  241.                 del_me;
  242.             }
  243.             else{
  244.                 turn=(turn+1)%2;
  245.                 MovePic(dummy,0,80,240,100,pic,400,200);
  246.                 wTextWrite(StrPrint("%s の順番です",pn[turn]),pic,400,230,INFO);
  247.             }
  248.         }
  249.         else if(MesP2==5){
  250.             MsgBox(StrPrint("%s はパスしました",pn[turn]));
  251.             pass[turn]=1;
  252.             if(pass[0]&&pass[1]){
  253.                 MovePic(dummy,0,100,240,180,pic,400,220);
  254.                 DelPic(dummy);
  255.                 if(num[you]>num[(you+1)%2])end(0);
  256.                 if(num[you]<num[(you+1)%2])end(2);
  257.                 del_us;
  258.                 del_me;
  259.             }
  260.             else{
  261.                 turn=(turn+1)%2;
  262.                 MovePic(dummy,0,80,240,100,pic,400,200);
  263.                 wTextWrite(StrPrint("%s の順番です",pn[turn]),pic,400,230,INFO);
  264.             }
  265.         }
  266.         else if(MesP2==4){
  267.             del_us;
  268.             init(0);
  269.             del_me;
  270.         }
  271.         else if(MesP2==6){
  272.             DPEnd();
  273.             CloseWin(win);
  274.             del_all;
  275.             del_me;
  276.         }
  277.     }
  278.     mes(LBDOWN){if(turn==you){
  279.         x=(MesP2-40)/40+1;
  280.         y=(MesP3-40)/40+1;
  281.         if(check1(x,y,turn)==1){
  282.             MsgBox("そこには置けません");
  283.         }
  284.         else{
  285.             if(check2(x,y,turn)){
  286.                 draw(x,y,turn);
  287.                 DPSendMessage(StrPrint("%02ld%02ld",x,y),1);
  288.                 num[turn]=num[turn]+1;
  289.                 MovePic(dummy,0,0,240,180,pic,400,120);
  290.                 for(i=0;i<2;i=i+1){
  291.                     draw(10,i+3,i);
  292.                     wTextWrite(StrPrint("%s:%3ld",pn[i],num[i]),pic,440,130+i*40,SCORE);
  293.                 }
  294.                 if(num[you]+num[(you+1)%2]==size*size){
  295.                     MovePic(dummy,0,0,240,260,pic,400,140);
  296.                     DelPic(dummy);
  297.                     if(num[you]>num[(you+1)%2])end(0);
  298.                     if(num[you]==num[(you+1)%2])end(1);
  299.                     if(num[you]<num[(you+1)%2])end(2);
  300.                     del_me;
  301.                 }
  302.             }
  303.             else{
  304.                 MsgBox("そこには置けません");
  305.             }
  306.         }
  307.     }}
  308. }
  309.  
  310. //コマを描く
  311. int draw(int x,int y,int bw){
  312.     if(bw==1){
  313.         draw3D(pic,x*40+4,y*40+4,x*40+35,y*40+35,0x22b9d9,2);
  314.     }
  315.     else if(bw==0){
  316.         draw3D(pic,x*40+4,y*40+4,x*40+35,y*40+35,0x808080,2);
  317.     }
  318.     a[x*100+y]=bw;
  319. }
  320.  
  321. //置けるかどうかチェックその1
  322. int check1(int x,int y,int bw){
  323.     if(x>8)return 1;
  324.     if(a[x*100+y]!=-1)return 1;
  325.     else return 0;
  326. }
  327.  
  328. //反転チェック&置けるかどうかチェックその2
  329. int check2(int x,int y,int bw,int mode=1){
  330.     int flag,i,j,k,m;
  331.     flag=0;
  332.     if(a[(x-1)*100+y]==(bw+1)%2){
  333.         for(i=x-2;i>0;i=i-1){
  334.             if(a[i*100+y]==-1)goto next1;
  335.             if(a[i*100+y]==bw){
  336.                 for(j=x-1;j>i;j=j-1){
  337.                     if(mode)draw(j,y,bw);
  338.                     num[bw]=num[bw]+1;
  339.                     num[(bw+1)%2]=num[(bw+1)%2]-1;
  340.                 }
  341.                 flag=1;
  342.                 goto next1;
  343.             }
  344.         }
  345.     }
  346.     next1:;
  347.     if(a[(x+1)*100+y]==(bw+1)%2){
  348.         for(i=x+2;i<size+2;i=i+1){
  349.             if(a[i*100+y]==-1)goto next2;
  350.             if(a[i*100+y]==bw){
  351.                 for(j=x+1;j<i;j=j+1){
  352.                     if(mode)draw(j,y,bw);
  353.                     num[bw]=num[bw]+1;
  354.                     num[(bw+1)%2]=num[(bw+1)%2]-1;
  355.                 }
  356.                 flag=1;
  357.                 goto next2;
  358.             }
  359.         }
  360.     }
  361.     next2:;
  362.     if(a[x*100+y-1]==(bw+1)%2){
  363.         for(i=y-2;i>0;i=i-1){
  364.             if(a[x*100+i]==-1)goto next3;
  365.             if(a[x*100+i]==bw){
  366.                 for(j=y-1;j>i;j=j-1){
  367.                     if(mode)draw(x,j,bw);
  368.                     num[bw]=num[bw]+1;
  369.                     num[(bw+1)%2]=num[(bw+1)%2]-1;
  370.                 }
  371.                 flag=1;
  372.                 goto next3;
  373.             }
  374.         }
  375.     }
  376.     next3:;
  377.     if(a[x*100+y+1]==(bw+1)%2){
  378.         for(i=y+2;i<size+2;i=i+1){
  379.             if(a[x*100+i]==-1)goto next4;
  380.             if(a[x*100+i]==bw){
  381.                 for(j=y+1;j<i;j=j+1){
  382.                     if(mode)draw(x,j,bw);
  383.                     num[bw]=num[bw]+1;
  384.                     num[(bw+1)%2]=num[(bw+1)%2]-1;
  385.                 }
  386.                 flag=1;
  387.                 goto next4;
  388.             }
  389.         }
  390.     }
  391.     next4:;
  392.     if(a[(x-1)*100+y-1]==(bw+1)%2){
  393.         k=-1;
  394.         for(i=y-2;i>0;i=i-1){
  395.             k=k-1;
  396.             if(a[(x+k)*100+i]==-1)goto next5;
  397.             if(a[(x+k)*100+i]==bw){
  398.                 m=0;
  399.                 for(j=y-1;j>i;j=j-1){
  400.                     m=m-1;
  401.                     if(mode)draw(x+m,j,bw);
  402.                     num[bw]=num[bw]+1;
  403.                     num[(bw+1)%2]=num[(bw+1)%2]-1;
  404.                 }
  405.                 flag=1;
  406.                 goto next5;
  407.             }
  408.         }
  409.     }
  410.     next5:;
  411.     if(a[(x+1)*100+y+1]==(bw+1)%2){
  412.         k=1;
  413.         for(i=y+2;i<size+2;i=i+1){
  414.             k=k+1;
  415.             if(a[(x+k)*100+i]==-1)goto next6;
  416.             if(a[(x+k)*100+i]==bw){
  417.                 m=0;
  418.                 for(j=y+1;j<i;j=j+1){
  419.                     m=m+1;
  420.                     if(mode)draw(x+m,j,bw);
  421.                     num[bw]=num[bw]+1;
  422.                     num[(bw+1)%2]=num[(bw+1)%2]-1;
  423.                 }
  424.                 flag=1;
  425.                 goto next6;
  426.             }
  427.         }
  428.     }
  429.     next6:;
  430.     if(a[(x-1)*100+y+1]==(bw+1)%2){
  431.         k=-1;
  432.         for(i=y+2;i<size+2;i=i+1){
  433.             k=k-1;
  434.             if(a[(x+k)*100+i]==-1)goto next7;
  435.             if(a[(x+k)*100+i]==bw){
  436.                 m=0;
  437.                 for(j=y+1;j<i;j=j+1){
  438.                     m=m-1;
  439.                     if(mode)draw(x+m,j,bw);
  440.                     num[bw]=num[bw]+1;
  441.                     num[(bw+1)%2]=num[(bw+1)%2]-1;
  442.                 }
  443.                 flag=1;
  444.                 goto next7;
  445.             }
  446.         }
  447.     }
  448.     next7:;
  449.     if(a[(x+1)*100+y-1]==(bw+1)%2){
  450.         k=1;
  451.         for(i=y-2;i>0;i=i-1){
  452.             k=k+1;
  453.             if(a[(x+k)*100+i]==-1)goto next8;
  454.             if(a[(x+k)*100+i]==bw){
  455.                 m=0;
  456.                 for(j=y-1;j>i;j=j-1){
  457.                     m=m+1;
  458.                     if(mode)draw(x+m,j,bw);
  459.                     num[bw]=num[bw]+1;
  460.                     num[(bw+1)%2]=num[(bw+1)%2]-1;
  461.                 }
  462.                 flag=1;
  463.                 goto next8;
  464.             }
  465.         }
  466.     }
  467.     next8:;
  468.     return flag;
  469. }
  470.  
  471. //ゲームエンド
  472. int end(int r){
  473.     int dummy;
  474.     str abc;
  475.     dummy=CreatePic(pic,260,120);
  476.     MovePic(pic,380,230,260,120,dummy);
  477.     BackMode(1);
  478.     SetFont(24,"MS ゴシック",128,0,0,0,500);
  479.     if(r==0)abc=pn[you]+" の勝ち";
  480.     if(r==1)abc="引き分け";
  481.     if(r==2)abc=pn[you]+" の負け";
  482.     wTextWrite(abc,pic,400,230,RESULT);
  483.     SetFont(24,"MS ゴシック",128,0,0,0,400);
  484.     mes(TIME){
  485.         step(20){
  486.             wTextWrite("クリックしてください",pic,380,290,INFO);
  487.             ,
  488.             MovePic(dummy,0,40,260,80,pic,380,270);
  489.         }
  490.     }
  491.     mes(LBDOWN){
  492.         del_us;
  493.         init(0);
  494.         del_me;
  495.     }
  496. }
  497.  
  498. int wTextWrite(str _str,int _pic,int _x,int _y,int _col1,int _col2=SHADOW,int _d=2){
  499.     textCol(_col2);
  500.     TextWrite(_str,_pic,_x+_d,_y+_d);
  501.     textCol(_col1);
  502.     TextWrite(_str,_pic,_x,_y);
  503. }
  504.