久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9580|回復: 2
收起左側

掃雷游戲雷陣及提示生成方法(加個界面就能做掃雷游戲了)

[復制鏈接]
ID:72008 發表于 2015-1-11 20:04 | 顯示全部樓層 |閱讀模式






#include <stdio.h>
#include <stdlib.h>
#include<time.h>/*用到了time函數,所以要有這個頭文件*/ #define LEI 10           //地雷標記
#define LEI_X 15        //雷區列數
#define LEI_Y 15          //雷區行數
int LEI_buju[LEI_Y][LEI_X];   //雷區地圖用二維數組表示
int LEI_buju_init(void); //雷區地圖初始化函數
int LEI_buju_print(void); //雷區狀態輸出到屏幕(調試用,做掃雷游戲時用自己的UI線程代替)
int LEI_buju_bulei(void); //布雷函數(隨機的把LEI_X*LEI_Y/10個雷步到雷區中)
int LEI_buju_tishi(void);  //計算地雷提示

main()
{
      LEI_buju_init();
      LEI_buju_bulei();
      LEI_buju_print();
      LEI_buju_tishi();
      system("pause");
}

////////////////////////////////////////////////////////////////////////////////
int LEI_buju_init(void)
{
    //初始化雷區數組
    int x,y;
    for(y=0;y<LEI_Y;y++)
     for(x=0;x<LEI_X;x++)
     {
      LEI_buju[y][x]=0;               
     }
    return 1;
}
////////////////////////////////////////////////////////////////////////////////
int LEI_buju_print(void)
{
    //向屏幕輸出雷區狀態
    int x,y;
    printf("%dx%d雷區布雷情況如下(1表示是地雷0表示無雷):\n\n",LEI_Y,LEI_X);
    for(y=0;y<LEI_Y;y++)
    {
        for(x=0;x<LEI_X;x++)
        {
         if(LEI_buju[y][x]==0) printf("%d ",LEI_buju[y][x]);
          else {printf("%d ",(LEI_buju[y][x]-9)); }
        }
      printf("\n");
     }
    ///////////////////////////////////////////////
    printf("\n去掉安全區域后的雷區布局如下:\n");
    for(y=0;y<LEI_Y;y++)
    {
        for(x=0;x<LEI_X;x++)
        {
         if(LEI_buju[y][x]==0) {printf("  ");}
         else {printf("Q "); }   
        }
      printf("\n");
     }
     printf("\n");
    return 1;
}
////////////////////////////////////////////////////////////////////////////////
int LEI_buju_bulei(void)
{
    //向雷區中隨機布雷
    int x,y,L,l;
    L=LEI_Y*LEI_X/10; //雷區中地雷總數
    srand((unsigned)time(NULL));//調用該方法產生隨機數的種子
    for(l=0;l<L;)
    {
    y=rand()%LEI_Y; //隨機產生地雷所在的行系數
    x=rand()%LEI_X; //隨機產生地雷所在的列系數
    if(LEI_buju[y][x]==LEI) {continue;}
     else if(LEI_buju[y][x]==0)
     {
        LEI_buju[y][x]=LEI;
        l++;
     }  
    }   
    return 1;
}
////////////////////////////////////////////////////////////////////////////////
int LEI_buju_tishi(void)
{
    //計算地雷位置提示,數據保存在雷區布局數組中
    int BJ[LEI_Y][LEI_X];
    int x,y;
    for(y=0;y<LEI_Y;y++)
    {
     for(x=0;x<LEI_X;x++)
     {
       BJ[y][x]=0;                 
     }
    }
    //計算四個角
     if(LEI_buju[0][0]==LEI)
            {
              BJ[y][x]=LEI;
             }else BJ[0][0]=(LEI_buju[0][1]+LEI_buju[1][0]+LEI_buju[1][1])/10;
            
     if(LEI_buju[y-1][0]==LEI)
            {
              BJ[y][x]=LEI;
             }else BJ[LEI_Y-1][0]=(LEI_buju[LEI_Y-2][0]+LEI_buju[LEI_Y-2][1]+LEI_buju[LEI_Y-1][1])/10;
   
     if(LEI_buju[0][LEI_X-1]==LEI)
            {
              BJ[y][x]=LEI;
             }else BJ[0][LEI_X-1]=(LEI_buju[0][LEI_X-2]+LEI_buju[0][LEI_X-1]+LEI_buju[1][LEI_X-2])/10;
   
     if(LEI_buju[LEI_Y-1][LEI_X-1]==LEI)
            {
              BJ[y][x]=LEI;
             }else BJ[LEI_Y-1][LEI_X-1]=(LEI_buju[LEI_Y-2][LEI_X-2]+LEI_buju[LEI_Y-2][LEI_X-1]+LEI_buju[LEI_Y-1][LEI_X-2])/10;
   //計算第一行
   for(y=0,x=1;x<LEI_X-1;x++)
   {
       if(LEI_buju[y][x]==LEI)
            {
              BJ[y][x]=LEI;
             }else
             {                       
             BJ[y][x]=(LEI_buju[y][x-1]+LEI_buju[y][x+1]+
             LEI_buju[y+1][x-1]+ LEI_buju[y+1][x]+LEI_buju[y+1][x+1])/10;
             }                     
    }
    //計算第一列
    for(y=1,x=0;y<LEI_Y-1;y++)
    {
      if(LEI_buju[y][x]==LEI)
            {
              BJ[y][x]=LEI;
             }else
             {                        
              BJ[y][x]=(LEI_buju[y-1][x]+LEI_buju[y-1][x+1]+
              LEI_buju[y][x+1]+
              LEI_buju[y+1][x]+LEI_buju[y+1][x+1])/10;  
              }            
    }
    //計算最后一行
   for(y=LEI_Y-1,x=1;x<LEI_X-1;x++)
   {
      if(LEI_buju[y][x]==LEI)
            {
              BJ[y][x]=LEI;
             }else
             {                              
               BJ[y][x]=(LEI_buju[y][x-1]+LEI_buju[y][x+1]+
              LEI_buju[y-1][x-1]+LEI_buju[y-1][x]+LEI_buju[y-1][x+1])/10;
              }                           
   }
   //計算最后一列
    for(y=1,x=LEI_X-1;y<LEI_Y-1;y++)
    {
        if(LEI_buju[y][x]==LEI)
            {
              BJ[y][x]=LEI;
             }else  
             {                           
               BJ[y][x]=(LEI_buju[y-1][x-1]+LEI_buju[y-1][x]+
               LEI_buju[y][x-1]+
               LEI_buju[y+1][x-1]+LEI_buju[y+1][x])/10;
             }
     }
    //計算其余的部分
     for(y=0;y<LEI_Y;y++)
    {
     for(x=0;x<LEI_X;x++)
     {
        if(x>=1&&x<LEI_X-1&&y>=1&&y<LEI_Y-1)  
        {
           if(LEI_buju[y][x]==LEI)
            {
              BJ[y][x]=LEI;
             }else {
                     BJ[y][x]=(LEI_buju[y-1][x-1]+LEI_buju[y-1][x]+LEI_buju[y-1][x+1]+
                     LEI_buju[y][x-1]+LEI_buju[y][x+1]+
                     LEI_buju[y+1][x-1]+LEI_buju[y+1][x]+LEI_buju[y+1][x+1])/10;
                   }                                 
        }              
     }
    }
   
    printf("計算后的雷區提示如下:\n");
      for(y=0;y<LEI_Y;y++)
    {
     for(x=0;x<LEI_X;x++)
     {
       if(BJ[y][x]==LEI) printf("Q ");
       if(BJ[y][x]==0) printf("  ");  
       if(BJ[y][x]!=0&&BJ[y][x]!=LEI) printf("%d ",BJ[y][x]);                 
     }
     printf("\n");
    }
    printf("\n\n\n");                     
         
    return 1;
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

回復

使用道具 舉報

ID:113095 發表于 2016-4-9 12:35 | 顯示全部樓層
可以可以,給了我一個不錯的思路!謝謝分享了。。
回復

使用道具 舉報

ID:115845 發表于 2016-4-22 07:44 | 顯示全部樓層
牛牛牛牛牛
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美久久久久久久久久 | 免费在线观看www | 黑人精品一区二区 | 国产精品久久久久久久午夜 | 午夜久久久久久 | 日本激情在线 | 免费高清av | 国产一级在线观看 | 日韩中文字幕精品 | 精品无人国产偷自产在线 | 欧美91| 四虎影院在线播放 | 成人免费在线观看 | 日韩福利一区 | 精品久久精品 | 国产在线播放av | 国产激情网 | 综合网av| 亚洲免费视频网站 | 能看的黄色网址 | 成人在线小视频 | 亚洲资源站| 欧美a在线 | 成人激情在线观看 | 欧美一区二区三区在线视频 | 岛国av在线免费观看 | 少妇搡bbbb搡bbb搡澳门 | 精品亚洲一区二区三区 | 一区二区水蜜桃 | 四虎影院网站 | 中文字幕综合网 | 中文字幕精品视频 | 欧美一区二区在线 | 欧美黑人一区二区三区 | 一区二区三区免费看 | 九一国产精品 | 一区二区三区视频在线 | 国产亚洲欧美日韩高清 | 国产一区二区久久 | 日本三级韩国三级美三级91 | 女人久久久 |