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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9568|回復: 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;
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:113095 發表于 2016-4-9 12:35 | 只看該作者
可以可以,給了我一個不錯的思路!謝謝分享了!!!
回復

使用道具 舉報

板凳
ID:115845 發表于 2016-4-22 07:44 | 只看該作者
牛牛牛牛牛
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 噜噜噜噜狠狠狠7777视频 | japan21xxxxhd美女| 久久久久久国产精品免费免费 | 欧美日韩国产高清 | 极品销魂美女一区二区 | 91免费视频观看 | 成人区一区二区三区 | 国产综合精品一区二区三区 | 欧美伊人久久久久久久久影院 | 日韩精品中文字幕在线 | 欧美一级免费 | 91视频国产一区 | 成人免费淫片aa视频免费 | 亚洲一区二区三区免费在线观看 | 亚洲国产情侣 | 草比网站 | 国产精品一卡二卡三卡 | 久久99久久98精品免观看软件 | 亚洲三级免费看 | 国产日韩欧美电影 | 超碰电影 | 激情在线视频 | 婷婷激情综合 | 日韩精品在线看 | 日韩中出 | 99福利视频 | 男女羞羞视频在线免费观看 | 日日天天 | 亚洲一区二区免费视频 | 欧美一区不卡 | 精品久久香蕉国产线看观看亚洲 | 欧美精品二区 | 久久久久久久久久久丰满 | 国产极品粉嫩美女呻吟在线看人 | 日韩欧美在线观看视频 | www.激情.com | 免费看片在线播放 | a级片网站| 亚洲精久 | 日韩欧美国产精品一区二区三区 | 日本一本在线 |