乐知者 发表于 2019-10-16 19:10:49

C语言生命游戏的小问题

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

int cells;

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 = 1;
}

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

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

void updateWithInput()
{
}



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

}


求大佬解答,发现自己写的代码达不到游戏效果

lovepipi 发表于 2019-10-17 12:04:33

k = cells + cells + cells + cells + cells +
                        cells + cells + cells;                        

兄弟,虽然你这个代码我只能看懂一些,但是这里很明显,i,i+1,i-1或者j,j-1,j+1都是有联系的,直接给原数组赋值,岂不是破坏了逻辑结构,给另一个数组赋值,正好顺其形式~~

lovepipi 发表于 2019-10-17 12:06:00

类似于辛普森的公式~额,可能你不了解辛普森,但是就是这样的吧,应该应该
页: [1]
查看完整版本: C语言生命游戏的小问题