zoukankan      html  css  js  c++  java
  • 一步一步实现扫雷游戏(C语言实现)(二)

    此项目相关博文链接

    一步一步实现扫雷游戏(C语言实现)(一)

    一步一步实现扫雷游戏(C语言实现)(二)

    一步一步实现扫雷游戏(C语言实现)(三)

    一步一步实现扫雷游戏(C语言实现)(四)

    <1>:返回周围地雷个数的函数
    函数原型: int round_num_mines(int i,int j);

    原函数见:http://www.cnblogs.com/hanxi/archive/2011/03/27/1997182.html

    优化后的

    算法函数接口:
    1.返回周围地雷个数的函数
    /****************************************************************************
    返回周围地雷个数的函数
    函数原型: int round_num_mines(int i,int j);
    参 数: int i, int j为当前的坐标
    返回值类型: int 返回该坐标处周围的地雷数
    返回值情况:(1)返回1-8代表周围有1-8个地雷;
    (2)返回0代表周围没有地雷;
    (3)返回*代表此坐标时地雷;
    *****************************************************************************
    */
    //////////////////////////////////////////////////////
    //
    //就是搞不懂为什么下面两个函数不会出现数组越界情况???
    //
    //////////////////////////////////////////////////////
    char round_num_mines(int i,int j)
    {
    if (map[i][j] =='*')
    {
    return'*';
    }

    int k =0;
    if (map[i+1][j] =='*') k++;
    if (map[i+1][j-1] =='*') k++;
    if (map[i+1][j+1] =='*') k++;
    if (map[i][j+1] =='*') k++;
    if (map[i-1][j] =='*') k++;
    if (map[i-1][j+1] =='*') k++;
    if (map[i][j-1] =='*') k++;
    if (map[i-1][j-1] =='*') k++;
    return k;
    }
    */
    //改进后的(书上的)代码:
    (改进算法)
    (
    1).首先定义一个二维数组:
    int dir[8][2] = {
    {
    -1,-1},
    {
    -1, 0},
    {
    -1, 1},
    {
    0, 1},
    {
    1, 1},
    {
    1, 0},
    {
    1,-1},
    {
    0,-1}};
    /*
    dir二维数组所表示的8个位置顺序是按顺时针从左上角位置开始。
    ------------------------------
    |(-1,-1)|(-1,0)|(-1,-1)|
    ------------------------------
    |( 0,-1)|( 0, 0)|( 0, 1)|
    ------------------------------
    |( 1,-1)|( 1, 0)|( 1, 1)|
    ------------------------------
    */
    char round_num_mines(int i,int j)
    {
    int k =0, num_mines =0;
    for (k =0; k <8; k++)
    {
    if (map[i+dir[k][0]][y+dir[k][1]] =='*')
    {
    num_mines
    ++;
    }
    }
    return num_mines;
    }
    初始化地雷分布位置和个数
    /*******************************************************************
    函数功能:根据设置的地雷个数和分布地图(map,数组)给出分布好了地雷的数组
    函数原型:void set_mines(nt m, int n, int num_mines)
    参数:(in)—— int num_mines
    ********************************************************************
    */
    (原函数)
    void set_mines(int num_mines)
    {
    int num =0;
    while (num <= num_mines)
    {
    rand_mines(m, n);
    //如果出现相同的情况呢?,没事,再循环几次,直到有了足够的地雷为止
    num = fun_num_mines(m, n);//判断地雷个数
    }
    }
    //设置随机选取(i,j),设置a[i][j] = '*'
    void rand_mines(int m, int n)
    {
    int i,j;
    srand(time(
    0));
    //rand()%n 取(0,n-1)的随机数
    i = rand() % m;
    j
    = rand() % n;
    map[i][j]
    ='*';
    }
    //判断地雷个数
    int fun_num_mines(int m, int n)
    {
    int i,j, k =0;
    for (i =0; i < m; i++)
    {
    for (j =0; j < n; j++)
    {
    if (map[i][j] =='*')
    {
    k
    ++;
    }
    }
    }
    return k;
    }
    (优化后)
    void set_mines(int num_mines)
    {
    int num =0;
    int i,j;
    while (num <= num_mines)
    {
    srand(time(
    0));
    //rand()%n 取(0,n-1)的随机数
    i = rand() % m;
    j
    = rand() % n;
    //如果出现相同的情况呢?,没事,再循环几次,直到有了足够的地雷为止
    if (i<0|| i>m || j<0|| j>n || map[i][j] =='*')
    {
    continue;
    }
    map[i][j]
    ='*';
    num
    ++;//判断地雷个数
    }

    }
    主要看来就是第二函数优化了不少,
    我的第一个问题(是否越界问题)没有解决,希望各位看到的朋友们给我解释下,谢谢

    作者:涵曦www.hanxi.cc
    出处:hanxi.cnblogs.com
    GitHub:github.com/hanxi
    Email:im.hanxi@gmail.com
    文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    《 Skynet 游戏服务器开发实战》

  • 相关阅读:
    Mysql大量插入随机数据方法--存储过程
    Linux永久修改系统时间和时区方法
    python反转字符串(简单方法)及简单的文件操作示例
    sql怎么批量替换字段里的字符串的
    varchar和Nvarchar区别
    VS改大小写的快捷键
    SQL中PIVOT 行列转换
    [转]VS中展开和折叠代码
    Bootstrap 标签页(Tab)插件
    C# DataTable 和List之间相互转换的方法
  • 原文地址:https://www.cnblogs.com/hanxi/p/1997660.html
Copyright © 2011-2022 走看看