디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

심심해서 API로 짜본 지렁이 게임

SuCo갤로그로 이동합니다. 2011.09.19 23:54:49
조회 3698 추천 0 댓글 0






나으 긔요미한 소스를 공개하게씀




#include<windows.h>
#include<Time.h>

typedef struct _SNAKE{
 int x;
 int y;
}Snake;

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevINstance, PSTR szCmdLine, int iCmdShow)
{

 static TCHAR szAppName[] = TEXT("test");
 HWND hwnd;
 MSG msg;
 WNDCLASS wndclass;

 wndclass.style = CS_VREDRAW|CS_HREDRAW;
 wndclass.lpfnWndProc = WndProc;
 wndclass.cbClsExtra = 0;
 wndclass.cbWndExtra = 0;
 wndclass.hInstance = hInstance;
 wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
 wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 wndclass.lpszMenuName = NULL;
 wndclass.lpszClassName = szAppName;

 if(!RegisterClass(&wndclass))
 {
  MessageBox(NULL,"윈도우클래스등록 실패","오류",MB_OK);
  return 0;
 }

 hwnd = CreateWindow(szAppName,"캡션이름"
  ,WS_OVERLAPPEDWINDOW
  ,CW_USEDEFAULT
  ,CW_USEDEFAULT
  ,CW_USEDEFAULT
  ,CW_USEDEFAULT
  ,NULL
  ,NULL
  ,hInstance
  ,NULL);

 ShowWindow(hwnd,iCmdShow);
 UpdateWindow(hwnd);

 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }

 return msg.wParam;


}
#define MAXCOL 20
#define MAXROW 20

void AddSnake(Snake *Snakes,Snake *OldSnakes,int index)
{
 OldSnakes[index].y=Snakes[index].y;
 OldSnakes[index].x=Snakes[index].x;
 if(index==1)
 {
  Snakes[index].x=Snakes[index-1].x;
  Snakes[index].y=Snakes[index-1].y;
 }
  else
  {
   Snakes[index].x=OldSnakes[index-1].x;
   Snakes[index].y=OldSnakes[index-1].y;
 }
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 static Snake Snakes[100]={0,};
 static Snake OldSnakes[100]={0,};
 static int Board[MAXROW][MAXCOL]=
 {
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
 };
 static int cxBlock = 30,cyBlock = 30;
 static HBRUSH hBrush[3] = {CreateSolidBrush(RGB(0,255,0)),CreateSolidBrush(RGB(0,0,0)),CreateSolidBrush(RGB(255,255,0))};
 static int WherePos=1;
 static int SnakeCount=0;

 srand(time(NULL));
 switch(message)
 {
 case WM_CREATE:
  {
   Snakes[0].x=2;
   Snakes[0].y=2;
   Board[2][2]=2;

   RECT rect;
   SetRect(&rect,0,0,cxBlock*MAXCOL,cyBlock*MAXROW);
   AdjustWindowRect(&rect,WS_OVERLAPPEDWINDOW,FALSE);
   MoveWindow(hwnd,300,50,rect.right-rect.left,rect.bottom-rect.top,TRUE);

   SetTimer(hwnd,1,250,NULL);
   SetTimer(hwnd,2,1300,NULL);
  }
  return 0;
 case WM_TIMER:
  {
   switch(wParam)
   {
   case 1:
    if(WherePos==1)
     SendMessage(hwnd,WM_KEYDOWN,VK_RIGHT,NULL);
    else if (WherePos==2)
     SendMessage(hwnd,WM_KEYDOWN,VK_LEFT,NULL);
    else if (WherePos==3)
     SendMessage(hwnd,WM_KEYDOWN,VK_UP,NULL); 
    else if(WherePos==4)
     SendMessage(hwnd,WM_KEYDOWN,VK_DOWN,NULL);
    break;

   case 2:
    {
     int x,y;
     x=rand()%18+1;
     y=rand()%18+1;
     Board[x][y]=3;
    }
   }
  }
  return 0;
 case WM_KEYDOWN:
  {
   switch(wParam)
   {
   case VK_RIGHT:
    WherePos=1;

    Board[Snakes[0].y][Snakes[0].x]=0;
    for(int j=1;j<=SnakeCount;j++)
     Board[Snakes[j].y][Snakes[j].x]=0;
    OldSnakes[0].y=Snakes[0].y;
    OldSnakes[0].x=Snakes[0].x;
    for(int i=1;i<=SnakeCount;i++)
    {
     AddSnake(Snakes,OldSnakes,i);
     Board[Snakes[i].y][Snakes[i].x]=2;
    }

    Snakes[0].x++;

    if(Board[Snakes[0].y][Snakes[0].x]==1)
    {
     KillTimer(hwnd,1);
     int iResult = MessageBox(hwnd,"당신은 죽었습니다.","게임 끝",MB_OK);
     if(iResult==IDOK)
      SendMessage(hwnd,WM_CLOSE,NULL,NULL);
     break;
    }
    if(Board[Snakes[0].y][Snakes[0].x]==3)
    {
     SnakeCount++;
    }
    Board[Snakes[0].y][Snakes[0].x]=2;
    InvalidateRect(hwnd,NULL,TRUE);

    break;
   case VK_LEFT:
    WherePos=2;
    Board[Snakes[0].y][Snakes[0].x]=0;
    for(int j=1;j<=SnakeCount;j++)
     Board[Snakes[j].y][Snakes[j].x]=0;
    OldSnakes[0].y=Snakes[0].y;
    OldSnakes[0].x=Snakes[0].x;
    for(int i=1;i<=SnakeCount;i++)
    {
     AddSnake(Snakes,OldSnakes,i);
     Board[Snakes[i].y][Snakes[i].x]=2;
    }
    Snakes[0].x--;
    if(Board[Snakes[0].y][Snakes[0].x]==1)
    {
     KillTimer(hwnd,1);
     int iResult = MessageBox(hwnd,"당신은 죽었습니다.","게임 끝",MB_OK);
     if(iResult==IDOK)
      SendMessage(hwnd,WM_CLOSE,NULL,NULL);
     break;
    }
    if(Board[Snakes[0].y][Snakes[0].x]==3)
    {
     SnakeCount++;
    }
    Board[Snakes[0].y][Snakes[0].x]=2;
    InvalidateRect(hwnd,NULL,TRUE);
    break;
   case VK_UP:
    WherePos=3;
    Board[Snakes[0].y][Snakes[0].x]=0;
    for(int j=1;j<=SnakeCount;j++)
     Board[Snakes[j].y][Snakes[j].x]=0;
    OldSnakes[0].y=Snakes[0].y;
    OldSnakes[0].x=Snakes[0].x;
    for(int i=1;i<=SnakeCount;i++)
    {
     AddSnake(Snakes,OldSnakes,i);
     Board[Snakes[i].y][Snakes[i].x]=2;
    }
    Snakes[0].y--;
    if(Board[Snakes[0].y][Snakes[0].x]==1)
    {
     KillTimer(hwnd,1);
     int iResult = MessageBox(hwnd,"당신은 죽었습니다.","게임 끝",MB_OK);
     if(iResult==IDOK)
      SendMessage(hwnd,WM_CLOSE,NULL,NULL);
     break;
    }
    if(Board[Snakes[0].y][Snakes[0].x]==3)
    {
     SnakeCount++;
    }
    Board[Snakes[0].y][Snakes[0].x]=2;
    InvalidateRect(hwnd,NULL,TRUE);
    break;
   case VK_DOWN:
    WherePos=4;
    Board[Snakes[0].y][Snakes[0].x]=0;
    for(int j=1;j<=SnakeCount;j++)
     Board[Snakes[j].y][Snakes[j].x]=0;
    OldSnakes[0].y=Snakes[0].y;
    OldSnakes[0].x=Snakes[0].x;
    for(int i=1;i<=SnakeCount;i++)
    {
     AddSnake(Snakes,OldSnakes,i);
     Board[Snakes[i].y][Snakes[i].x]=2;
    }
    Snakes[0].y++;
    if(Board[Snakes[0].y][Snakes[0].x]==1)
    {
     KillTimer(hwnd,1);
     int iResult = MessageBox(hwnd,"당신은 죽었습니다.","게임 끝",MB_OK);
     if(iResult==IDOK)
      SendMessage(hwnd,WM_CLOSE,NULL,NULL);
     break;
    }
    if(Board[Snakes[0].y][Snakes[0].x]==3)
    {
     SnakeCount++;
    }
    Board[Snakes[0].y][Snakes[0].x]=2;
    InvalidateRect(hwnd,NULL,TRUE);
    break;
   }
  }
  return 0;
 case WM_PAINT:
  {
   HDC hdc;
   PAINTSTRUCT ps;
   hdc = BeginPaint(hwnd,&ps);
   for (int y = 0;y < MAXROW;++y)
   {
    for (int x = 0;x < MAXCOL;++x)
    {
     if (Board[y][x] == 3)
     {
      HBRUSH hOldBrush = (HBRUSH)SelectObject(hdc,hBrush[2]);
      Rectangle(hdc,x*cxBlock,y*cyBlock,(x+1)*cxBlock,(y+1)*cyBlock);
      SelectObject(hdc,hOldBrush);
     }
     if (Board[y][x] == 2)
     {
      HBRUSH hOldBrush = (HBRUSH)SelectObject(hdc,hBrush[0]);
      Rectangle(hdc,x*cxBlock,y*cyBlock,(x+1)*cxBlock,(y+1)*cyBlock);
      SelectObject(hdc,hOldBrush);
     }
     if (Board[y][x] == 1)
     {
      HBRUSH hOldBrush = (HBRUSH)SelectObject(hdc,hBrush[1]);
      Rectangle(hdc,x*cxBlock,y*cyBlock,(x+1)*cxBlock,(y+1)*cyBlock);
      SelectObject(hdc,hOldBrush);
     }
    }
   }
   EndPaint(hwnd,&ps);
  }
  return 0;
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 }


 return DefWindowProc(hwnd,message,wParam,lParam);
}

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 반응이 재밌어서 자꾸만 놀리고 싶은 리액션 좋은 스타는? 운영자 25/07/28 - -
AD 휴대폰 액세서리 세일 중임! 운영자 25/07/28 - -
276178 아 진짜 ㅠㅠ 멸자(130.126) 11.09.27 48 0
276176 아 점점 한국 음식이 먹고 싶어진다 ㅠ [5] 멸자(130.126) 11.09.27 75 0
276174 난 우리 엄마한테 너무 고마운게 [1] 멸자(130.126) 11.09.27 83 0
276173 [C언어]님들 이 주민등록번호 판독기 소스 설명 좀 써주실 수 있나요? [4] 컴맹(210.93) 11.09.27 115 0
276172 자바언어말인데요 [10] 유동(121.169) 11.09.27 121 0
276170 뭐야 프겔 망했어?? 글이 없네..... [2] 거칠게갤로그로 이동합니다. 11.09.27 71 0
276169 이 기사 공감감 ?? [4] 야요이갤로그로 이동합니다. 11.09.27 100 0
276168 자바 기초생인데 ..연습문제 어려운데 참고할수있도록 해주실분 안계신가여 [5] 자바(220.149) 11.09.27 82 0
276164 오늘 아침부터 정전이네... (일단뒤확인) [8] blackd갤로그로 이동합니다. 11.09.27 96 0
276163 이번 주말까지... +어게인갤로그로 이동합니다. 11.09.27 33 0
276162 소켓통신 처음 해보려고 따라하는데.. 뭐가 문제인지 모르겟음 ㅠ_ㅠ; [2] 소켓초보..(175.211) 11.09.27 84 0
276161 형들 그 체크포인트라 그러나? 그거 어떻게 쓰는거야?; [3] 회색사과갤로그로 이동합니다. 11.09.27 99 0
276160 java sun.net.ftp써서 서버 폴더내 파일 전부받는걸 알고싶어ㅠ dddd(203.244) 11.09.27 55 0
276159 역시 아스횽보단 [1] Light search갤로그로 이동합니다. 11.09.27 58 0
276158 C언어 질문 하나 할게요~_~ [2] Chic.(211.223) 11.09.27 56 0
276156 나좀살려줘!! 이것좀 알려주라.. [2] Sayrin갤로그로 이동합니다. 11.09.27 66 0
276153 C#좀 할줄아는 횽, 도와줘!! [6] Sayrin갤로그로 이동합니다. 11.09.27 97 0
276152 출 to the 근 [2] 좋은아버지갤로그로 이동합니다. 11.09.27 64 0
276150 vs 2010sp1 이 열받게하네 deveun갤로그로 이동합니다. 11.09.27 55 0
276148 어제는 이싱하게 잠이 오는 날 ㅡㅡ [1] 로하로하알로하갤로그로 이동합니다. 11.09.27 45 0
276147 굿모닝~! [4] Kanon갤로그로 이동합니다. 11.09.27 82 0
276144 안드로이드 어플 다운받은거 코드 볼수 없는거야?? [4] 후...(61.72) 11.09.27 111 0
276140 이상하게 잠이 않오는 날이네~~ [4] 거칠게갤로그로 이동합니다. 11.09.27 65 0
276138 니들 전국 영농 조합 특판부 금산 고려 홍삼 유통 조합이라고 [1] 야무치갤로그로 이동합니다. 11.09.27 61 0
276132 형님들 간단한 C++한번만 봐주세요...ㅜㅜ [12] ㅠㅠ (59.11) 11.09.27 185 0
276131 여자의 심리. 밤이네..갤로그로 이동합니다. 11.09.27 118 0
276130 형들 ㅠㅠ c++ 간단한거 설명좀해줘 제발 [6] 형들 헬프좀(121.169) 11.09.27 90 0
276129 아............ 대박이네ㅋㅋㅋㅋㅋ 씨발라드세요갤로그로 이동합니다. 11.09.27 93 0
276128 알고리즘은 어느 정도 수준으로 공부해야 됨? [5] 7(118.37) 11.09.27 182 0
276127 자바/ 컴파일은 되는데 실행하면 뭐라고 떠요.ㅠ [3] 자바초보(220.87) 11.09.27 57 0
276125 IT뱅크, 솔데스크는 대체 뭐하는겁니까.... [20] 보안학원ㅡㅡ(118.35) 11.09.27 474 0
276124 욕하지 말아야지 [2] Deanex갤로그로 이동합니다. 11.09.27 44 0
276122 C++ 타이머 같은 타이머 클래스를 돌리려면 스레드를 따로 둬야하남... [1] 궁그미(121.129) 11.09.27 101 0
276121 내가 프로그래머로써 아버지가 된다면 난 내 자식이 불쌍하다고 생각해 [3] 좋은아버지갤로그로 이동합니다. 11.09.27 85 0
276120 하찮은 디씨인들은 보아라 [1] XDSF갤로그로 이동합니다. 11.09.27 58 0
276119 게임회사를 목표로 하시거나 근무하고 계신 갤횽들께 질문 드립니다 ㅎ [3] 게임제작(118.35) 11.09.27 133 0
276118 중소기업 지원자격 요건에 우대자가 뭔가요? [2] 횽~(61.32) 11.09.27 99 0
276117 늅늅이가 형들에게 인사드립니다 즐쿰갤로그로 이동합니다. 11.09.27 36 0
276116 다이렉트x 프로그래밍 질문점.. [4] ㅂㅈㄷ(14.45) 11.09.27 98 0
276115 친구놈이 테트리스 짰다고 가져오는데.. [4] 곰곰곰(121.188) 11.09.26 170 0
276114 결국 기사로 까지 나왔군... [2] 거칠게갤로그로 이동합니다. 11.09.26 127 0
276113 정말 궁금해서 그러는데 왜 개발자가 전문직이야? [4] 좋은아버지갤로그로 이동합니다. 11.09.26 102 0
276111 온라인 RPG 게임 만들려면 뭘 공부해야함? [ 조공 ] [6] 헤르메세유갤로그로 이동합니다. 11.09.26 219 0
276110 그래픽 드라이버가 인식이 안되네.... 도와줘 [조공 有] [1] 쿤킨(118.38) 11.09.26 312 0
276108 티스토리 블로그 만들고 싶은 사람있냐? [5] 3x3x3갤로그로 이동합니다. 11.09.26 68 0
276107 프로그래머도 전문직이니까 [1] 一ㅡ갤로그로 이동합니다. 11.09.26 106 0
276106 형들 알고리즘 수행시간 관련... 이거 맞아? [1] ㅠㅠ(116.122) 11.09.26 61 0
276100 형들 오랜만 [약짤방] [2] 힙꼬맹갤로그로 이동합니다. 11.09.26 104 0
276099 한국 소프트웨어 산업이 괴멸적인 이유에대해 [2] 파워컴공(121.186) 11.09.26 108 0
276097 슬슬 뇌자알 다 봐가는데... abbey road갤로그로 이동합니다. 11.09.26 56 0
뉴스 김현성 '다시 사랑하려 해' 보컬 챌린지 성료…'고음 끝판왕' 대상 공개 디시트렌드 07.29
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2