| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 257 人关注过本帖
标题:生命游戏程序运行的时候没有任何输出~
只看楼主 加入收藏
sinklc
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-8-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
生命游戏程序运行的时候没有任何输出~
这是我写的一个生命游戏的程序,无报错,但运行的时候没有任何输出

求解


=====================================================
=====================================================


#include <stdio.h>
#include <stdlib.h>

#define HS 20                              // 行数
#define LS 60                              // 列数
#define SHI 1                              // 是
#define FOU 0                              // 否
#define XB '\01'                           // 细胞字符
#define KB ' '                             // 空白字符
#define HUO1 2                             // 存活条件 1
#define HUO2 3                             // 存活条件 2


int js_ljsm( const int, const int, char[][LS], const int);    // 计算邻居数目
void du_cssj( char[][LS], const int);                         // 读入初始数据
void xs_shijie( char[][LS], const int);                       // 显示此时世界
void js_weilai( char[][LS], const int);                       // 计算未来世界
void cb_shijie( char[][LS], char[][LS], const int);           // 拷贝数组
int sf_jx(void);                                               // 是否继续


int main(void)
{
    char shijie[HS][LS];                            // 构造二维数组表达此世界

    du_cssj (shijie, sizeof shijie / sizeof shijie[0]);           // 读入初始数据

    do{
        xs_shijie (shijie, sizeof shijie / sizeof shijie[0]);           //  显示此时世界的状态
        js_weilai (shijie, sizeof shijie / sizeof shijie[0]);           //  计算未来世界的状态
    }
    while( sf_jx() );           // 通过函数“是否继续”控制循环,1循环,0结束

    system("PAUSE");
    return 0;
}

/********************************

  js_ljsm 函数:计算邻居数目

  计算邻居数目
  gzh 格子所在行 gzl 格子所在列
  sj 世界 sjhs 世界行数

********************************/

int js_ljsm (const int gzh, const gzl, char sj[][LS], const int sjhs)
{
    int sm = 0 ;   // 邻居生命
    int h,l;

    for (h = gzh -1; h <= gzh +1; h++)
    {
        for(l = gzl -1; l <= gzl +1; l++)
        {
            if(h<0 || h>= sjhs)          // 若邻居超过边界不考虑
                continue;
            if(l<0 || l>= sizeof sj[0] / sizeof sj[0][0])
                continue;
            if( h == gzh || l == gzl )
            continue;
            if( sj[h][l] == XB )
            sm ++ ;
        }
    }

    return sm;
}


/*****************************

  du_cssj函数:读入初始数据

  sj:世界数组  hs:行数

*****************************/

void du_cssj(char sj [][LS] , const int hs)
{
    int h,l;

    freopen("E:\\输入数据.txt","r",stdin);   

    for( h = 0; h < hs; h ++ )
    {
        for( l = 0; l < sizeof sj[0] / sizeof sj[0][0]; l ++ )
        {
            char c;

            scanf("%c",&c);         // 逐个读入字符
            #define XBBZ '*'        // 细胞标识
            sj[h][l] = (c == XBBZ)? XB:KB;
            #undef XBBZ
        }
        getchar();                  // 读换行符
    }
    freopen("CON","r",stdin);

    return ;
}

/*****************************

  xs_shijie函数:显示当前世界

  sj:世界数组  hs:行数

*****************************/

void xs_shijie(char sj[][LS], const int hs )
{
    int h,l;

    system("CLS");                               // 清屏
    for( h = 0; h < hs; h ++ )
    {
        for( l = 0; l < sizeof sj[0] / sizeof sj[0][0]; l ++ )
        {
            putchar( sj[h][l] );                 // 逐个显示字符
        }
        putchar('\n');
    }
    putchar('\n');
    putchar('\n');

    return ;
}

/*****************************

  js_weilai函数:显示当前世界

  sj:世界数组  hs:行数

*****************************/

void js_weilai(char sj[][LS] , const int hs)
{
    char dqsj[HS][LS];                    // 构造一个新数组,存放当前世界的备份

    cb_shijie(sj,dqsj,hs);                // 复制当前世界
   
    {
        int h,l;

        for( h = 0; h < hs; h ++ )
        {
            for( l = 0; l < sizeof sj[0] / sizeof sj[0][0]; l ++ )
            {
                int ljsm ;                // 邻居数目
                ljsm = js_ljsm( h, l, dqsj, sizeof dqsj / sizeof dqsj[0]);
                switch (ljsm)
                {
                case HUO1:                // 若邻居数为2则该格子不变
                    break;
                case HUO2:
                    sj[h][l] = XB ;       // 若邻居数为3则下一刻格子里必为细胞
                    break;
                default:
                    sj[h][l] = KB ;
                    break;
                }
            }
        }
    }

    return ;
}


/*****************************

  cb_shijie函数:拷贝当前世界

  hs:行数

*****************************/

void cb_shijie( char from[][LS], char to[][LS], const int hs)
{
    int h,l;

    for( h = 0; h < hs; h ++ )
    {
        for( l = 0; l < sizeof from[0] / sizeof from[0][0]; l ++ )
        {
            to[h][l] = from[h][l];
        }
    }

    return ;
}

/*****************************

  sf_jx函数:询问是否继续

  是返回1,否返回0

*****************************/

int sf_jx(void)
{
    printf("请问是否继续?(回车继续,其他停止)\n");

    return (getchar() == '\n')? SHI:FOU ;
}



搜索更多相关主题的帖子: 游戏程序 
2011-08-30 17:11
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:20 
调试一下  是不是哪里非法内存访问了

                                         
===========深入<----------------->浅出============
2011-08-30 19:10
快速回复:生命游戏程序运行的时候没有任何输出~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017264 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved