home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 May / VPR9605A.BIN / ffilly / bmine / brimineh.tfy < prev    next >
Text File  |  1996-02-14  |  21KB  |  860 lines

  1. //作品情報
  2. #info INAM "BrickSweeper 画像版"
  3. #info ISBJ "BrickSweeper Ver0.2 rev H"
  4. #info IGNR "Game"
  5. #info MDFY "Ask me"
  6. #info TRNS "Ask me"
  7. #info VIDO "800x600,16"
  8. #info IART "Cotton No.100"
  9. #info ICOP "Cotton No.100"
  10. #info GRPC "えすぽん,kajino@mat00.matlab.osakac.ac.jp"
  11. #info PROD "Cotton No.100,PXW05573@niftyserve.or.jp"
  12. #info CONT "Cotton No.100,PXW05573@niftyserve.or.jp"
  13. #info ICMT "Visual Basic からFillyへの移植計画その1rev 2"
  14.  
  15. //グローバル変数
  16. int Pic0;
  17. int Pic1;
  18. int Pic2;
  19. int Pic3;
  20. int CellWidth;//マスの横の数
  21. int CellHeight;//マスの縦の数
  22. int CellAll;//マスの総数
  23. int PicCellX;//マスの縦幅
  24. int PicCellY;//マスの横幅
  25. int CONTINUE;
  26. int END;
  27. int cell[];//探知機の示す数
  28. int Flag[];//フラグ(0:フラグなし,1:フラグあり,2:?フラグ)
  29. int opcell[];//マスが開いているか閉じているか(0:閉じている,1:開いている)
  30. int BOMB;//爆弾数
  31. int OpenNo;//開けたマスの数
  32. int Score;//スコア(=時間)
  33. int BOMBREST;//爆弾数-フラグ数
  34. str sScore;
  35. int GAMEEND;//ゲームエンドフラグ(0:ゲーム中,1:ゲームオーバー)
  36. int CellXTemp;//マスの横の数設定バッファ
  37. int CellYTemp;//マスの縦の数設定バッファ
  38. int BOMBTemp;//爆弾数設定バッファ
  39.  
  40.  
  41. int Level;//レベル(1:初級,2:中級,3:上級,4:その他)
  42. str sBeginHighName;//初級ハイスコアの名前
  43. str sImmeHighName;//中級ハイスコアの名前
  44. str sExpertHighName;//上級ハイスコアの名前
  45. str sTempHighName;//テンボラリハイスコア名前
  46. int BeginScore;//初級のハイスコア
  47. int ImmeScore;//中級のハイスコア
  48. int ExpertScore;//上級のハイスコア
  49.  
  50. str ALPHA;//アルファベット文字列
  51.  
  52. int WinKind;//Window番号2において、ウィンドウの種類(0:ハイスコア表示、1:ハイスコア入力)
  53.  
  54. //シナリオ本体
  55. main(){
  56.     //以下の値はデフォルト値です
  57.     //ここから3行は、自由に変えてみてください。
  58.     CellXTemp=8;//横のマスの数
  59.     CellYTemp=8;//縦のマスの数
  60.     BOMBTemp=10;//爆弾数
  61.     BOMBREST=10;
  62.     //ここまで・・・・・。
  63.     Level=1;
  64.     WinKind=0;
  65.     ALPHA="0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  66.     ReadIniFile();//ハイスコア読みだし
  67.     Initial();
  68.     LoadPic("mineall.bmp");//Pic番号0
  69.     LoadPic("null.bmp");//pic番号1    
  70.     a=CreatePic(1,40,260);//pic番号2
  71.     LoadPic("temp.bmp");//pic番号3
  72.     CapTitle("BrickSweeper");
  73.     OpenWin(1,100,100,100,100,0,0);//メインウィンドウ(window番号=0)
  74.     OpenWin(2,0,0,40,260,0,0,0xfffffff);//設定ウィンドウ(window番号=1)
  75.     DrawIniPicture();
  76.     GetBombNo(BOMB,cell[]);
  77.     mes(LBDOWN){
  78.         if(Button()==END){
  79.             CloseWin(0);
  80.             del_all;del_me;
  81.         }
  82.     }
  83.     mes(RBDOWN){
  84.         if(RButton()==END){
  85.             CloseWin(0);
  86.             del_all;del_me;
  87.         }
  88.     }
  89.  
  90.     mes(LBDBLCLK){
  91.         if(Button()==END){
  92.             CloseWin(0);
  93.             del_all;del_me;
  94.         }
  95.     }
  96.     mes(KEY_DOWN){
  97.         if(MesP1==2){//Window番号が2の場合
  98.             if(WinKind==1){//Windowがハイスコア入力である
  99.                 HighNameInput();
  100.             }
  101.         }
  102.     }
  103.  
  104.     mes(TIME){
  105.         step(20){//4秒後にクローズする
  106. //            ,//まず最初は、このループを無視する
  107.             //CloseWin(0);
  108.             //CloseWin(1);
  109.             //del_all;
  110.             //del_me;
  111.             if((GAMEEND==0) && (OpenNo!=0)){
  112.                 Score=Score+1;
  113.                 //SetFont(14,"MS 明朝",128);
  114.                 sScore=StrPrint("T:%ld",Score); 
  115.                 TextWrite(sScore,2,2,142);//パラメータはピクチャ番号
  116.             }
  117.         };
  118.     };
  119.  
  120. //ここまでに書いてください
  121. }
  122. Initial()
  123. {
  124.     //BackMode(1);
  125.     BgColor(192,192,192);//薄い灰色
  126.     CellWidth=CellXTemp;
  127.     CellHeight=CellYTemp;
  128.     BOMB=BOMBTemp;
  129.     BOMBREST=BOMB;
  130.     PicCellX=20;
  131.     PicCellY=20;
  132.     Pic0=0;
  133.     Pic1=1;
  134.     Pic2=2;
  135.     Pic3=3;
  136.     CONTINUE=0;
  137.     END=1;
  138.     CellAll=CellWidth*CellHeight;
  139.     Score=0;
  140.     GAMEEND=0;
  141.     OpenNo=0;
  142. }
  143.  
  144. TransferCell(int Para,int cellno)
  145. {
  146.     //このルーチンは、以下のパラメータの画像をcellnoで指定した
  147.     //位置に転送するものです。
  148.     //Para=0        なし
  149.     //Para=1~8    数字
  150.     //Para=9        爆弾
  151.     //Para=10    爆弾X
  152.     //Para=11    爆弾it!!
  153.     //Para=12    普通のボタン
  154.     //Para=13    フラグ
  155.     //Para=14    フラグX
  156.     //Para=15    なし
  157.     //Para=16    ?ボタン
  158.     
  159.     int ax,ay;
  160.     int temp;
  161.     //行は、0行目から始まるとする。
  162.     ay=(cellno /CellWidth)*PicCellY;
  163.     if(((cellno/CellWidth)%2)==0){//行が偶数の場合、(ay=0,2,4,6...)
  164.         ax=(cellno % CellWidth)*PicCellX;
  165.     }
  166.     if(((cellno/CellWidth)%2)==1){//行が奇数のとき(ay=1,3,5,7...)
  167.         ax=(cellno % CellWidth)*PicCellX+(PicCellX/2);
  168.     }
  169.     MovePic(Pic0,Para*PicCellX,0,PicCellX,PicCellY,Pic1,ax,ay);
  170. }
  171.  
  172. TransferCell2(int Para,int cellno)
  173. {
  174.     int ax,ay,bwi,bhe,nnx,nny;
  175.     int temp;
  176.     real nx,ny;
  177.     //行は、0行目から始まるとする。
  178.     ay=(cellno /CellWidth)*PicCellY;
  179.     if(((cellno/CellWidth)%2)==0){//行が偶数の場合、(ay=0,2,4,6...)
  180.         ax=(cellno % CellWidth)*PicCellX;
  181.     }
  182.     if(((cellno/CellWidth)%2)==1){//行が奇数のとき(ay=1,3,5,7...)
  183.         ax=(cellno % CellWidth)*PicCellX+(PicCellX/2);
  184.     }
  185.     //画像の描画(等倍)
  186.     //MovePic(Pic3,ax,ay,PicCellX,PicCellY,Pic1,ax,ay);
  187.     //画像の描画(自動調整)
  188.     bwi=PicWidth(3)/(CellWidth+1);//(本当はCellWidth+0.5
  189.     bhe=(PicHeight(3)/CellHeight);
  190.     nnx=(ax*PicWidth(3))/(PicCellX*(CellWidth+1));//本当はCellWidth+0.5
  191.     nny=(ay*PicHeight(3))/(PicCellY*CellHeight);
  192.     //nnx=RealtoInt(nx);
  193.     //nny=RealtoInt(ny);
  194.     MoveSPic(Pic3,nnx,nny,bwi,bhe,Pic1,ax,ay,PicCellX,PicCellY);
  195.     //普通のセルの描画
  196.     MovePic(Pic0,Para*PicCellX,0,PicCellX,PicCellY,Pic1,ax,ay,0,0xC0C0C0);
  197.  
  198. }
  199.  
  200. TransferCellA(int cellno)
  201. {
  202.     //これは、まだ開かれていないセルに対して有効
  203.     int temp;
  204.     if(cell[cellno]<6){
  205.         temp=cell[cellno];
  206.     }else{
  207.         temp=9;
  208.     }
  209.     TransferCell2(temp,cellno);
  210. }
  211.     
  212.  
  213.  
  214. DrawIniPicture()
  215. {
  216.     //このルーチンは、初期画面描画をするものです。
  217.     int i,j;
  218.     i=0;j=0;
  219.  
  220.     //メインWindowの大きさを変える
  221.     MoveWin(0,1,100,50,(PicCellX/2)+PicCellX * (CellWidth),PicCellY*CellHeight,0,0);
  222.     //メインウィンドウの画面を消す
  223.     MoveSPic(Pic0,0,0,PicCellX,PicCellY,Pic1,0,0,(PicCellX/2)+PicCellX * (CellWidth),PicCellY*CellHeight);
  224.  
  225.     //設定ウィンドウの描画
  226.  
  227.     //SCOREのバック
  228.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,2,0,0,40,20);
  229.     //Xのセル数設定のバック
  230.     MoveSPic(Pic0,0*PicCellX,0,PicCellX,PicCellY,2,0,20,40,20);
  231.     //Xのセル数設定ボタン(左)
  232.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,2,0,40,20,20);
  233.     //Xのセル数設定ボタン(右)
  234.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,2,20,40,20,20);
  235.     //Yのセル数設定のバック
  236.     MoveSPic(Pic0,0*PicCellX,0,PicCellX,PicCellY,2,0,60,40,20);
  237.     //Yのセル数設定ボタン(左)
  238.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,2,0,80,20,20);
  239.     //Yのセル数設定ボタン(右)
  240.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,2,20,80,20,20);
  241.     //爆弾数設定のバック
  242.     MoveSPic(Pic0,0*PicCellX,0,PicCellX,PicCellY,2,0,100,40,20);
  243.     //爆弾数設定ボタン(左)
  244.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,2,0,120,20,20);
  245.     //爆弾数設定ボタン(右)
  246.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,2,20,120,20,20);
  247.     //時間(スコア)表示
  248.     MoveSPic(Pic0,0*PicCellX,0,PicCellX,PicCellY,2,0,140,40,20);
  249.     //初級ボタン
  250.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,2,0,160,40,20);
  251.     //中級ボタン
  252.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,2,0,180,40,20);
  253.     //上級ボタン
  254.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,2,0,200,40,20);
  255.     //ハイスコア表示ボタン
  256.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,2,0,220,40,20);
  257.     //Rest表示
  258.     MoveSPic(Pic0,0*PicCellX,0,PicCellX,PicCellY,2,0,240,40,20);
  259.     
  260.     //Xのセル数表示
  261.     SetFont(14,"MS 明朝",128);
  262.     sScore=StrPrint("X:%ld   ",CellWidth); 
  263.     TextWrite(sScore,2,2,22);//パラメータはピクチャ番号
  264.     //Yのセル数表示
  265.     //SetFont(14,"MS 明朝",128);
  266.     sScore=StrPrint("Y:%ld   ",CellHeight); 
  267.     TextWrite(sScore,2,2,62);//パラメータはピクチャ番号
  268.     //爆弾数表示
  269.     //SetFont(14,"MS 明朝",128);
  270.     sScore=StrPrint("B:%ld   ",BOMB); 
  271.     TextWrite(sScore,2,2,102);//パラメータはピクチャ番号
  272.     //スコア表示
  273.     //SetFont(14,"MS 明朝",128);
  274.     sScore=StrPrint("T:%ld   ",Score); 
  275.     TextWrite(sScore,2,2,142);//パラメータはピクチャ番号
  276.     //初級ボタン
  277.     //SetFont(14,"MS 明朝",128);
  278.     sScore=StrPrint("初級"); 
  279.     TextWrite(sScore,2,2,162);//パラメータはピクチャ番号
  280.     //中級ボタン
  281.     //SetFont(14,"MS 明朝",128);
  282.     sScore=StrPrint("中級"); 
  283.     TextWrite(sScore,2,2,182);//パラメータはピクチャ番号
  284.     //上級ボタン
  285.     //SetFont(14,"MS 明朝",128);
  286.     sScore=StrPrint("上級"); 
  287.     TextWrite(sScore,2,2,202);//パラメータはピクチャ番号
  288.     //ハイスコアボタン
  289.     //SetFont(14,"MS 明朝",128);
  290.     sScore=StrPrint("順位"); 
  291.     TextWrite(sScore,2,2,222);//パラメータはピクチャ番号
  292.     //Rest表示
  293.     //SetFont(14,"MS 明朝",128);
  294.     sScore=StrPrint("R:%ld   ",BOMBREST); 
  295.     TextWrite(sScore,2,2,242);//パラメータはピクチャ番号
  296.  
  297.     //セル
  298.     for(i=0;i<=CellWidth-1;i=i+1){
  299.         for(j=0;j<=CellHeight-1;j=j+1){
  300.             k=i+CellWidth*j;
  301.             //データ初期化
  302.             cell[k]=0;Flag[k]=0;opcell[k]=0;
  303.             TransferCell(12,k);        
  304.         }
  305.     }
  306. }
  307.  
  308. int XYToCellPos(int X,int Y)
  309. {
  310.     if((Y/PicCellY)%2==0){//偶数行の場合
  311.         if((PicCellX*CellWidth)<X){
  312.             return (-1);
  313.         }else{
  314.             return (X/PicCellX)+(Y/PicCellY)*CellWidth;
  315.         }
  316.     }else{//奇数行の場合
  317.         if(X>(PicCellX/2)){
  318.             return ((X-(PicCellX/2))/PicCellX)+(Y/PicCellY)*CellWidth;
  319.         }else{
  320.             return (-1);
  321.         }
  322.     }
  323. }
  324.  
  325. int Button()
  326. {
  327.     int X,Y;
  328.     int cellno,celltemp;
  329.     int Xtemp,Ytemp,WN;
  330.     X=MesP2;Y=MesP3;WN=MesP1;
  331.     cellno=XYToCellPos(X,Y);
  332.     if(WN==0){//window番号が0の場合
  333.         if(cellno!=(-1)){//領域内の場合
  334.             if(GAMEEND==0){//ゲームエンドでない
  335.             if(opcell[cellno]==0){//まだ開かれてない
  336.             if(Flag[cellno]==0 || Flag[cellno]==2){//通常のフラグが立てられていない
  337.                 if(cell[cellno]>6){
  338.                     GAMEEND=1;
  339.                     celltemp=9;//爆弾の絵のパラメータ
  340.                     TransferCell2(celltemp,cellno);
  341.                     sScore=StrPrint("(XX)"); 
  342.                     TextWrite(sScore,2,3,2);//パラメータはピクチャ番号
  343.  
  344.                 }else{
  345.                     if(cell[cellno]==0){//探知機=0
  346.                         TransferCell2(0,cellno);//自分自身
  347.                         opcell[cellno]=1;
  348.                         OpenNo=OpenNo+1;
  349.                         if(Hantei()==(-1)){
  350.                             GesiGesi(cellno);
  351.                         }
  352.                         if(Hantei()==1){
  353.                             //ゲームクリア
  354.                             GAMEEND=1;
  355.                             sScore=StrPrint("(^^)V"); 
  356.                             TextWrite(sScore,2,3,2);//パラメータはピクチャ番号
  357.                             InputHighScore();//名前の入力(^_^;)
  358.                         }
  359.                     }else{
  360.                         opcell[cellno]=1;
  361.                         OpenNo=OpenNo+1;
  362.                         celltemp=cell[cellno];
  363.                         TransferCell2(celltemp,cellno);
  364.                         if(Hantei()==1){
  365.                             //ゲームクリア
  366.                             GAMEEND=1;
  367.                             sScore=StrPrint("(^^)V"); 
  368.                             TextWrite(sScore,2,3,2);//パラメータはピクチャ番号
  369.                             InputHighScore();//名前の入力(^_^;)
  370.                         }                
  371.                     }
  372.                 }
  373.             }
  374.             }
  375.             }else{//ゲームエンド
  376.             }
  377.         }else{//領域外の場合
  378.     
  379.         }
  380.     }
  381.     if(WN==1){//設定Window
  382.         if(Y<20){//リスタートボタン
  383.             Level=CheckLevel();
  384.             Initial();
  385.             DrawIniPicture();
  386.             GetBombNo(BOMB,cell[]);
  387.         }
  388.         if((Y>=40)&&(Y<60)){//Xのセル数変更
  389.             if(X<20){
  390.                 CellXTemp=CellXTemp-1;
  391.                 sScore=StrPrint("X:%ld  ",CellXTemp); 
  392.                 TextWrite(sScore,2,2,22);//パラメータはピクチャ番号
  393.  
  394.             }else{
  395.                 CellXTemp=CellXTemp+1;
  396.                 sScore=StrPrint("X:%ld  ",CellXTemp); 
  397.                 TextWrite(sScore,2,2,22);//パラメータはピクチャ番号
  398.             }
  399.         }
  400.         if((Y>=80)&&(Y<100)){//Yのセル数変更
  401.             if(X<20){
  402.                 CellYTemp=CellYTemp-1;
  403.                 sScore=StrPrint("Y:%ld  ",CellYTemp); 
  404.                 TextWrite(sScore,2,2,62);//パラメータはピクチャ番号
  405.  
  406.             }else{
  407.                 CellYTemp=CellYTemp+1;
  408.                 sScore=StrPrint("Y:%ld  ",CellYTemp); 
  409.                 TextWrite(sScore,2,2,62);//パラメータはピクチャ番号
  410.             }
  411.         }
  412.         if((Y>=120)&&(Y<140)){//爆弾数変更
  413.             if(X<20){
  414.                 BOMBTemp=BOMBTemp-1;
  415.                 sScore=StrPrint("B:%ld  ",BOMBTemp); 
  416.                 TextWrite(sScore,2,2,102);//パラメータはピクチャ番号
  417.  
  418.             }else{
  419.                 BOMBTemp=BOMBTemp+1;
  420.                 sScore=StrPrint("B:%ld  ",BOMBTemp); 
  421.                 TextWrite(sScore,2,2,102);//パラメータはピクチャ番号
  422.             }
  423.  
  424.         }
  425.         if((Y>=160)&&(Y<180)){//初級ボタン
  426.             Level=1;
  427.             BOMBTemp=10;
  428.             CellXTemp=8;
  429.             CellYTemp=8;
  430.             Initial();
  431.             DrawIniPicture();
  432.             GetBombNo(BOMB,cell[]);
  433.         }
  434.         if((Y>=180)&&(Y<200)){//中級ボタン
  435.             Level=2;
  436.             BOMBTemp=40;
  437.             CellXTemp=16;
  438.             CellYTemp=16;
  439.             Initial();
  440.             DrawIniPicture();
  441.             GetBombNo(BOMB,cell[]);
  442.         }
  443.         if((Y>=200)&&(Y<220)){//上級ボタン
  444.             Level=3;
  445.             BOMBTemp=99;
  446.             CellXTemp=30;
  447.             CellYTemp=16;
  448.             Initial();
  449.             DrawIniPicture();
  450.             GetBombNo(BOMB,cell[]);
  451.         }
  452.         if((Y>=220)&&(Y<240)){//ハイスコアボタン
  453.             DispHighScore();
  454.         }
  455.     }
  456.     if(WN=2){//ハイスコア関係ウィンドウ
  457.         if(WinKind==0){//ハイスコア表示ウィンドウ
  458.             if(Y>=175 && Y<195 && X>=75 && X<125){//OKボタン領域
  459.                 //入力ウィンドウ(Window番号2)を破棄する。
  460.                 CloseWin(2);
  461.                 //画像(Picture番号4)を破棄する
  462.                 DelPic(4);
  463.             }
  464.         }
  465.         if(WinKind==1){//ハイスコア入力ウィンドウ
  466.             if(Y>=75 && Y<95 && X>=75 && X<125){//OKボタン領域
  467.                 //ハイスコア更新処理
  468.                 //そのレベルのハイスコアと名前を書き込む
  469.                 if(Level==1){
  470.                     sBeginHighName=sTempHighName;
  471.                 }
  472.                 if(Level==2){
  473.                     sImmeHighName=sTempHighName;
  474.                 }
  475.                 if(Level==3){
  476.                     sExpertHighName=sTempHighName;
  477.                 }
  478.                 //INIファイルに書き込む
  479.                 WriteIniFile();
  480.  
  481.                 //テンポラリハイスコア名をnullにする。
  482.                 sTempHighName="";        
  483.                 //入力ウィンドウ(Window番号2)を破棄する。
  484.                 CloseWin(2);
  485.                 //画像(Picture番号4)を破棄する
  486.                 DelPic(4);
  487.  
  488.             }
  489.         }
  490.         
  491.     }
  492.     return CONTINUE;
  493. }
  494. int RButton()
  495. {
  496.     int X,Y;
  497.     int cellno,celltemp;
  498.     int Xtemp,Ytemp,WN;
  499.     X=MesP2;Y=MesP3;WN=MesP1;
  500.     cellno=XYToCellPos(X,Y);
  501.     if(WN==0){//window番号が0の場合
  502.         if(cellno!=(-1)){//領域内の場合
  503.             if(GAMEEND==0){//ゲームエンドでない
  504.                 if(opcell[cellno]==0){//まだ開かれてない
  505.                     if(Flag[cellno]==0){//Flagなし
  506.                         TransferCell(13,cellno);
  507.                         Flag[cellno]=1;
  508.                         BOMBREST=BOMBREST-1;
  509.                         sScore=StrPrint("R:%ld   ",BOMBREST); 
  510.                         TextWrite(sScore,2,2,242);//パラメータはピクチャ番号
  511.                     }else{
  512.                     if(Flag[cellno]==1){//Flag
  513.                         TransferCell(16,cellno);
  514.                         Flag[cellno]=2;
  515.                         BOMBREST=BOMBREST+1;
  516.                         sScore=StrPrint("R:%ld   ",BOMBREST); 
  517.                         TextWrite(sScore,2,2,242);//パラメータはピクチャ番号
  518.                     }else{
  519.                     if(Flag[cellno]==2){//?Flag
  520.                         TransferCell(12,cellno);
  521.                         Flag[cellno]=0;
  522.                     }
  523.                     }
  524.                     }
  525.                 }
  526.             }else{//ゲームエンド
  527.             }
  528.         }else{//領域外の場合
  529.     
  530.         }
  531.     }
  532.     if(WN==1){//設定Window
  533.     }
  534. }
  535. GetBombNo(int BombNo,int InDim[])
  536. {
  537.     int i,Answer,res,X;
  538.     X=0;
  539.     while(X < BombNo){
  540.         Answer=Random(CellAll);
  541.         if(InDim[Answer]<7){
  542.             InDim[Answer]=InDim[Answer]+7;
  543.             X=X+1;
  544.             for(i=0;i<=5;i=i+1){
  545.                 res=Numret(Answer,i);
  546.                 if(res!=(-1)){
  547.                     InDim[res]=InDim[res]+1;
  548.                 }
  549.             }
  550.         }else{
  551.         //何もしない
  552.         }
  553.     }
  554. }
  555.  
  556. int Numret(int Ind,int PosFromInd)
  557. {
  558.     int KG;//奇数か偶数化の判別(KG=0:偶数KG=1:奇数)
  559.     //r=-1;
  560.     int Xpos,Ypos;
  561.     Xpos=0;Ypos=0;
  562.     Xpos=Ind % CellWidth;//Xの位置(0から)
  563.     Ypos=(Ind/CellWidth);
  564.     if((Ypos%2)==0){
  565.         KG=0;
  566.     }else{//
  567.         KG=1;
  568.     }
  569.     if(KG==0){
  570.         if(Xpos==0){
  571.             if((PosFromInd==0)||(PosFromInd==2)||(PosFromInd==4)){
  572.                 return(-1);
  573.             }
  574.         }else{
  575.             if(Xpos==CellWidth-1){
  576.                 if(PosFromInd==3){
  577.                     return(-1);
  578.                 }
  579.             }
  580.         }
  581.         if(Ypos==0){
  582.             if((PosFromInd==0)||(PosFromInd==1)){
  583.                 return(-1);
  584.             }
  585.         }else{
  586.         if(Ypos==CellHeight-1){
  587.             if((PosFromInd==4)||(PosFromInd==5)){
  588.                 return(-1);
  589.             }
  590.         }
  591.         }
  592.         if(PosFromInd==0){
  593.             return(Ind-CellWidth-1);
  594.         }
  595.         if(PosFromInd==1){
  596.             return(Ind-CellWidth);
  597.         }
  598.         if(PosFromInd==2){
  599.             return(Ind-1);
  600.         }
  601.         if(PosFromInd==3){
  602.             return(Ind+1);
  603.         }
  604.         if(PosFromInd==4){
  605.             return(Ind+CellWidth-1);
  606.         }
  607.         if(PosFromInd==5){
  608.             return(Ind+CellWidth);
  609.         }else{
  610.             return(-1);
  611.         }
  612.     }
  613.     if(KG==1){
  614.         if(Xpos==0){
  615.             if(PosFromInd==2){
  616.                 return(-1);
  617.             }
  618.         }else{
  619.             if(Xpos==CellWidth-1){
  620.                 if((PosFromInd==1)||(PosFromInd==3)||(PosFromInd==5)){
  621.                     return(-1);
  622.                 }
  623.             }
  624.         }
  625.         if(Ypos==0){//Not Passing,maybe...
  626.             if((PosFromInd==0)||(PosFromInd==1)){
  627.                 return(-1);
  628.             }
  629.         }else{
  630.         if(Ypos==CellHeight-1){
  631.             if((PosFromInd==4)||(PosFromInd==5)){
  632.                 return(-1);
  633.             }
  634.         }
  635.         }
  636.         if(PosFromInd==0){
  637.             return(Ind-CellWidth);
  638.         }
  639.         if(PosFromInd==1){
  640.             return(Ind-CellWidth+1);
  641.         }
  642.         if(PosFromInd==2){
  643.             return(Ind-1);
  644.         }
  645.         if(PosFromInd==3){
  646.             return(Ind+1);
  647.         }
  648.         if(PosFromInd==4){
  649.             return(Ind+CellWidth);
  650.         }
  651.         if(PosFromInd==5){
  652.             return(Ind+CellWidth+1);
  653.         }else{
  654.             return(-1);
  655.         }
  656.     }
  657. }
  658.  
  659. GesiGesi(int Ind)
  660. {
  661.     int m[];
  662.     int i,j,mi,mj,F;
  663.     //変数初期化
  664.     for(i=0;i<=CellAll;i=i+1){
  665.         m[i]=0;
  666.     }
  667.     m[1]=Ind;
  668.     mi=1;mj=1;F=1;
  669.     while(F==1){
  670.         for(i=0;i<=5;i=i+1){
  671.             j=Numret(m[mi],i);
  672.             if(j>(-1)){
  673.                 if((opcell[j]==0) && (Flag[j]==0)){
  674.                     TransferCellA(j);
  675.                     opcell[j]=1;
  676.                     OpenNo=OpenNo+1;
  677.                     if(cell[j]==0){
  678.                         mj=mj+1;
  679.                         m[mj]=j;
  680.                     }
  681.                 }
  682.             }
  683.         }
  684.         if(mi==mj){
  685.             F=0;
  686.         }else{
  687.             mi=mi+1;
  688.         }
  689.     }
  690. }     
  691.  
  692. int Hantei()
  693. {
  694.     if(CellAll-OpenNo==BOMB){
  695.         return 1;
  696.     }else{
  697.         return (-1);
  698.     }
  699. }
  700.  
  701. int CheckLevel()
  702. {
  703.     //現在のレベルのチェックをする関数
  704.     if(CellXTemp==8 && CellYTemp==8 && BOMBTemp==10){//初級
  705.         return 1;
  706.     }
  707.     if(CellXTemp==16 && CellYTemp==16  && BOMBTemp==40){//中級
  708.         return 2;    
  709.     }
  710.     if(CellXTemp==30 && CellYTemp==16  && BOMBTemp==99){//上級
  711.         return 3;    
  712.     }
  713.     return 4;//その他の場合
  714. }
  715.  
  716. InputHighScore()
  717. {
  718.     //このルーチンは、ハイスコアの名前入力ウィンドウ生成
  719.     //のためのものです。
  720.     int c,eflag;
  721.     eflag=1;
  722.     if(Level==1){
  723.         if(BeginScore>=Score){
  724.             BeginScore=Score;
  725.         }else{
  726.             eflag=0;
  727.         }
  728.     }
  729.     if(Level==2){
  730.         if(ImmeScore>=Score){
  731.             ImmeScore=Score;
  732.         }else{
  733.             eflag=0;
  734.         }
  735.     }
  736.     if(Level==3){
  737.         if(ExpertScore>=Score){
  738.             ExpertScore=Score;
  739.         }else{
  740.             eflag=0;
  741.         }
  742.     }
  743.     if(Level==4){
  744.         eflag=0;
  745.     }
  746.     if(eflag==1){
  747.         WinKind=1;//Win番号2の種類をハイスコア入力ウィンドウにする
  748.         c=CreatePic(1,200,100);
  749.         OpenWin(c,200,100,200,100,0,0,0xfffffff);//入力ウィンドウ(Window番号2)
  750.         //バック
  751.         MoveSPic(Pic0,0*PicCellX,0,PicCellX,PicCellY,c,0,0,200,100);
  752.         //ボタン
  753.         MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,c,75,75,50,20);
  754.         //「OK」の文字
  755.         sScore=StrPrint("OK"); 
  756.         TextWrite(sScore,c,90,78);//パラメータはピクチャ番号
  757.         //「ハイスコアです!」の文字
  758.         sScore=StrPrint("ハイスコアです!"); 
  759.         TextWrite(sScore,c,10,0);//パラメータはピクチャ番号
  760.         //「名前を入力してください」の文字
  761.         sScore=StrPrint("Input your Name!"); 
  762.         TextWrite(sScore,c,10,20);//パラメータはピクチャ番号
  763.  
  764.     }else{
  765.         //何もしない
  766.     }    
  767. }
  768. HighNameInput()
  769. {
  770.     //このルーチンは、ハイスコアのの名前入力時のキー入力で
  771.     //文字列を連結し、画面に表示し、データをINIファイルに
  772.     //書き込み、入力ウィンドウ、その画像を破棄するものです。
  773.  
  774.     if(MesP2==13){//リターンが押されたら、
  775.         //そのレベルのハイスコアと名前を書き込む
  776.         if(Level==1){
  777.             sBeginHighName=sTempHighName;
  778.         }
  779.         if(Level==2){
  780.             sImmeHighName=sTempHighName;
  781.         }
  782.         if(Level==3){
  783.             sExpertHighName=sTempHighName;
  784.         }
  785.         //INIファイルに書き込む
  786.         WriteIniFile();
  787.         //テンポラリハイスコア名をnullにする。
  788.         sTempHighName="";        
  789.         //入力ウィンドウ(Window番号2)を破棄する。
  790.         CloseWin(2);
  791.         //画像(Picture番号4)を破棄する
  792.         DelPic(4);
  793.     }else{
  794.         if(MesP2>=48 && MesP2<=90){//文字領域なら
  795.             //文字列をつなぎ
  796.             sTempHighName=sTempHighName+SubStr(ALPHA,MesP2-48,1);
  797.             //文字列を表示する
  798.             sScore=StrPrint("%s ",sTempHighName); 
  799.             TextWrite(sScore,4,10,50);//パラメータはピクチャ番号
  800.         }
  801.         if(MesP2==8){//BSキーなら
  802.             //文字列を1文字削除し
  803.             //文字列を表示する
  804.         }
  805.     }
  806. }            
  807.  
  808. DispHighScore()
  809. {
  810.     //このルーチンは、ハイスコアを表示するものです。
  811.     int c;
  812.     WinKind=0;//Win番号2のウィンドウの種類をハイスコア表示にする
  813.     c=CreatePic(1,200,200);
  814.     OpenWin(c,100,100,200,200,0,0,0xfffffff);//入力ウィンドウ(Window番号2)
  815.     //バック
  816.     MoveSPic(Pic0,0*PicCellX,0,PicCellX,PicCellY,c,0,0,200,200);
  817.     //ボタン
  818.     MoveSPic(Pic0,12*PicCellX,0,PicCellX,PicCellY,c,75,175,50,20);
  819.     //「OK」の文字
  820.     sScore=StrPrint("OK"); 
  821.     TextWrite(sScore,c,90,178);//パラメータはピクチャ番号
  822.     //初級のハイスコア
  823.     sScore=StrPrint("初級:%ld秒  %s ",BeginScore,sBeginHighName); 
  824.     TextWrite(sScore,c,10,30);//パラメータはピクチャ番号
  825.     //中級のハイスコア
  826.     sScore=StrPrint("中級:%ld秒  %s ",ImmeScore,sImmeHighName); 
  827.     TextWrite(sScore,c,10,50);//パラメータはピクチャ番号
  828.     //上級のハイスコア
  829.     sScore=StrPrint("上級:%ld秒  %s ",ExpertScore,sExpertHighName); 
  830.     TextWrite(sScore,c,10,70);//パラメータはピクチャ番号
  831.  
  832. }
  833. WriteIniFile()
  834. {
  835.     //これは、ハイスコアを登録するためのルーチンです。
  836.     //初級のスコア、名前
  837.     WriteIniInt("brimine","time1",    BeginScore,"brimine.ini");
  838.     WriteIniStr("brimine","name1",sBeginHighName,"brimine.ini");
  839.     //中級のスコア、名前
  840.     WriteIniInt("brimine","time2",ImmeScore,"brimine.ini");
  841.     WriteIniStr("brimine","name2",sImmeHighName,"brimine.ini");
  842.     //上級のスコア、名前
  843.     WriteIniInt("brimine","time3",ExpertScore,"brimine.ini");
  844.     WriteIniStr("brimine","name3",sExpertHighName,"brimine.ini");
  845. }
  846. ReadIniFile()
  847. {
  848.     //これは、ハイスコアを読み出すためのルーチンです
  849.     //初級のスコア、名前
  850.     BeginScore=GetIniInt("brimine","time1",10000,"brimine.ini");
  851.     sBeginHighName=GetIniStr("brimine","name1","名前なし","brimine.ini");
  852.     //中級のスコア、名前
  853.     ImmeScore=GetIniInt("brimine","time2",10000,"brimine.ini");
  854.     sImmeHighName=GetIniStr("brimine","name2","名前なし","brimine.ini");
  855.     //上級のスコア、名前
  856.     ExpertScore=GetIniInt("brimine","time3",10000,"brimine.ini");
  857.     sExpertHighName=GetIniStr("brimine","name3","名前なし","brimine.ini");
  858.  
  859. }
  860.