C 언어 는 EasyX 를 통 해 이 루어 진 생명 게임 소스 코드
1.생명 게임 내용:
이 게임 은 2 차원 사각형 세 계 를 포함 하 는데 이 세계 의 모든 격자 에는 살 아 있 거나 죽은 세포 가 살 고 있다.한 세포 가 다음 순간 에 생사 는 인접 한 8 개의 격자 에서 살 아 있 는 세포의 수량 에 달 려 있다.한 세포 주위 의 살 아 있 는 세포 수가 3 개 보다 많 으 면 이 세 포 는 자원 부족 으로 다음 시간 에 죽는다.한 위치 주위 에 세 개의 살 아 있 는 세포 가 있다 면 이 위 치 는 다음 순간 에 새로운 세포 가 탄생 할 것 이다.한 위치 주위 에 두 개의 살 아 있 는 세포 가 있다 면 이 위치의 세포 생사 상 태 는 변 하지 않 는 다.한 세포 주위 의 살 아 있 는 세포 가 두 개 보다 적 으 면 이 세 포 는 너무 외 로 워 죽는다.그래 야 온 생명 세계 가 너무 황량 하거나 붐 비지 않 고 동태 적 인 균형 이다.
2.실현 코드 는 다음 과 같다.
///////////////////////////////////////////////////
// :
// :Visual C++ 6.0,EasyX
//
#include
#include
#include
//
__int8 world[102][102] = {0}; //
IMAGE imgLive, imgEmpty; //
//
void Init(); //
void SquareWorld(); //
void RandWorld(); //
void PaintWorld(); //
void Evolution(); //
//
int main()
{
Init();
int Speed = 500; // ( )
while(true)
{
if (kbhit() || Speed == 900)
{
char c = getch();
if (c == ' ' && Speed != 900)
c = getch();
if (c >= '0' && c <= '9')
Speed = ('9' - c) * 100;
switch(c)
{
case 's':
case 'S':
SquareWorld(); //
break;
case 'r':
case 'R':
RandWorld(); //
break;
case VK_ESCAPE:
goto END;
}
}
Evolution(); //
PaintWorld(); //
if (Speed != 900) // 900 ,
Sleep(Speed);
}
END:
closegraph();
return 0;
}
///////////////////////////////////////////////////
//
//
void Init()
{
//
initgraph(640,480);
//
srand((unsigned)time(NULL));
//
Resize(&imgLive, 4, 4);
Resize(&imgEmpty, 4, 4);
//
SetWorkingImage(&imgLive);
setcolor(GREEN);
setfillstyle(GREEN);
fillellipse(0, 0, 3, 3);
//
SetWorkingImage(&imgEmpty);
setcolor(DARKGRAY);
rectangle(1, 1, 2, 2);
//
SetWorkingImage(NULL);
//
setfont(24, 0, " ");
outtextxy(254, 18, " ");
RECT r = {440, 60, 620, 460};
setfont(12, 0, " ");
drawtext(" :
,
。
。 3 ,
; 3 , ;
2 , ;
2 , 。
, 。
:
0-9: ( -- )
ESC:
:
|
S:
R: ",&r, DT_WORDBREAK);
//
SquareWorld();
}
//
void SquareWorld()
{
memset(world, 0, 102 * 102 * sizeof(__int8));
for(int x = 1; x <= 100; x++)
world[x][1] = world[x][100] = 1;
for(int y = 1; y <= 100; y++)
world[1][y] = world[100][y] = 1;
}
//
void RandWorld()
{
for(int x = 1; x <= 100; x++)
for(int y = 1; y <= 100; y++)
world[x][y] = rand() % 2;
}
//
void PaintWorld()
{
for(int x = 1; x <= 100; x++)
for(int y = 1; y <= 100; y++)
putimage(16 + x * 4, 56 + y * 4, world[x][y] ? &imgLive : &imgEmpty);
}
//
void Evolution()
{
__int8 tmp[102][102] = {0}; //
int sum;
for(int x = 1; x <= 100; x++)
{
for(int y = 1; y <= 100; y++)
{
//
sum = world[x+1][y] + world[x+1][y-1] + world[x][y-1] + world[x-1][y-1]
+ world[x-1][y] + world[x-1][y+1] + world[x][y+1] + world[x+1][y+1];
//
switch(sum)
{
case 3: tmp[x][y] = 1; break;
case 2: tmp[x][y] = world[x][y]; break;
default: tmp[x][y] = 0; break;
}
}
}
//
memcpy(world, tmp, 102 * 102 * sizeof(__int8));
}
3.효 과 는 다음 그림 과 같다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.