鱼C论坛

 找回密码
 立即注册
查看: 2152|回复: 2

C语言生命游戏的小问题

[复制链接]
发表于 2019-10-16 19:10:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#define High 25
#define Width 50

int cells[High][Width];

void gotoxy(int, int);
void starup();
void show();
void updateWithoutInput();
void updateWithInput();

int main() 
{
        starup();
        while(1)
        {
                show();
                updateWithoutInput();
                updateWithInput();
        }
        return 0;
}

void gotoxy(int x, int y)
{
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle, pos);
}

void starup()
{
        int i, j;
        for(i = 0; i < High; i++)
                for(j = 0; j < Width; j++) 
                        cells[i][j] = 1; 
}

void show()
{
        gotoxy(0, 0);
        int i, j;
        for(i = 0; i <= High; i++)
        {
                for(j = 0; j <= Width; j++)
                {
                        if(cells[i][j] == 1) 
                                printf("*");
                        else
                                printf(" ");
                } 
                printf("\n");
        }
        Sleep(50); 
}

void updateWithoutInput()
{
        int NewCells[High][Width];         //问题所在
        int NeibourNumber;
        int i, j;
        
        for(i = 0; i <= High - 1; i++)
        {
                for(j = 0; j <= Width - 1; j++)
                {
                        NeibourNumber = cells[i - 1][j - 1] + cells[i - 1][j] + cells[i - 1][j + 1] + cells[i][j - 1] + cells[i][j + 1] +
                        cells[i + 1][j - 1] + cells[i + 1][j] + cells[i + 1][j + 1];
                        if(NeibourNumber == 3)
                                NewCells[i][j] = 1;
                        else if(NeibourNumber == 2)
                                NewCells[i][j] = cells[i][j];
                        else
                                NewCells[i][j] = 0;
                }
        }
        
        for(i = 1; i <= High - 1; i++)
                for(j = 1; j <= Width - 1; j++)
                cells[i][j] = NewCells[i][j];
}

void updateWithInput()
{
}

求助!为什么需要再设一个数组来保存下一帧的数据呢?为什么不能直接给原数组赋值呢?比如
void updateWithoutInput()
{
        for(i = 0; i < High; i++)
                for(j = 0; j < Width; j++)
                {
                        k = cells[i - 1][j] + cells[i + 1][j] + cells[i][j - 1] + cells[i][j + 1] + cells[i + 1][j + 1] + 
                        cells[i + 1][j - 1] + cells[i - 1][j + 1] + cells[i - 1][j - 1];                        
                        
                        if(k == 3)
                                cells[i][j] = 1;
                        if(k == 2)
                                ;
                        else
                                cells[i][j] = 0;
                }

}

求大佬解答,发现自己写的代码达不到游戏效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-17 12:04:33 | 显示全部楼层
 k = cells[i - 1][j] + cells[i + 1][j] + cells[i][j - 1] + cells[i][j + 1] + cells[i + 1][j + 1] +
                        cells[i + 1][j - 1] + cells[i - 1][j + 1] + cells[i - 1][j - 1];                        

兄弟,虽然你这个代码我只能看懂一些,但是这里很明显,i,i+1,i-1或者j,j-1,j+1都是有联系的,直接给原数组赋值,岂不是破坏了逻辑结构,给另一个数组赋值,正好顺其形式~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-17 12:06:00 | 显示全部楼层
类似于辛普森的公式~额,可能你不了解辛普森,但是就是这样的吧,应该应该
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 22:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表