C 언어 는 EasyX 를 통 해 이 루어 진 생명 게임 소스 코드

본 고 는 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.효 과 는 다음 그림 과 같다.

좋은 웹페이지 즐겨찾기