디시인사이드 갤러리

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

갤러리 본문 영역

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

SuCo갤로그로 이동합니다. 2011.09.19 23:54:49
조회 3697 추천 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 - -
275969 아 빨리 생일이 되야 멸자(130.126) 11.09.26 60 0
275967 1박 2일 다운 받아보는데 이번주도 시청자 투어네? [1] 거칠게갤로그로 이동합니다. 11.09.26 48 0
275966 어차피 알아듣지도 못할테니 [4] 분당살람갤로그로 이동합니다. 11.09.26 129 0
275965 여기 혹시 c언어 진수변화 방법 아는 분 없음? 도와주실분 [1] ㅇㅇ(112.154) 11.09.26 66 0
275964 vs2010에서 오류난곳 빨리찾는 단축키좀 알려주세요 [2] ㅇㅇㅇㅇ(203.247) 11.09.26 75 0
275963 리버싱 존나 어렵네, 쉬는 시간엔 웹이나 파면서 머리식혀야겠다 [11] Deanex갤로그로 이동합니다. 11.09.26 131 0
275962 테크트리 추천좀 [9] 멸자(130.126) 11.09.26 136 0
275960 나름대로 대털 명대사를 정리해 보았어 (사람들이 잘 모르는 거 위주로) [1] 분당살람갤로그로 이동합니다. 11.09.26 194 0
275958 내가 웹쪽은 잘 모르는데 웹하면 재밌냐? [6] Deanex갤로그로 이동합니다. 11.09.26 112 0
275957 이렇게 뜨는 프로그램을 만들고 싶은데 어떻게 해? [8] 버리는캐갤로그로 이동합니다. 11.09.26 130 0
275956 자신감이 없고 모든일이 싫어진다 [1] SODMaster갤로그로 이동합니다. 11.09.26 49 0
275955 은근히 뇌자알 공부하는 프갤러 잇던디... [5] abbey road갤로그로 이동합니다. 11.09.26 142 0
275954 메모리 릭을 잡는법 [6] noname(163.239) 11.09.26 143 0
275953 blackd 는 봅니다 [5] Light search갤로그로 이동합니다. 11.09.26 69 0
275952 최종답은이거였다 [8] Light search갤로그로 이동합니다. 11.09.26 79 0
275951 필수 과목으로 화학 듣는데 [4] 멸자(130.126) 11.09.26 58 0
275950 공비 오빠야는 봅니다. [5] iljeomobolt갤로그로 이동합니다. 11.09.26 106 0
275949 다했는데도오류남 ㅡㅡC언어 [17] Light search갤로그로 이동합니다. 11.09.26 144 0
275948 C언어 이거뭐가문제야? [7] Light search갤로그로 이동합니다. 11.09.26 91 0
275946 넥s로 모바일 디씨 글쓰기 테스트 분당살람갤로그로 이동합니다. 11.09.26 38 0
275945 lvalue ref 정리글 만들었다 Deanex갤로그로 이동합니다. 11.09.26 73 0
275944 사람 못구한다 못구한다 하는데 [4] Deanex갤로그로 이동합니다. 11.09.26 109 0
275942 아 시발 어그로끌꺼없나 .. Light search갤로그로 이동합니다. 11.09.26 60 0
275941 한국은 토건국가라 IT도 토건토건함여 ㅋㅋㅋ ;ㅅ;(211.222) 11.09.26 41 0
275940 아 외국인데 [5] 멸자(130.126) 11.09.26 75 0
275939 난 결국 linkedList를 알아버리고 말았다 ㅗ^_^ㅗ [3] lol(110.174) 11.09.26 99 0
275938 내 글로 더러워지 프겔을 정화한다!!!(뒤는 알아서 조심해!!) [2] 거칠게갤로그로 이동합니다. 11.09.26 71 0
275936 여기 플래시 액션하는 가이들 있음? [5] 신도림프리덤(112.171) 11.09.26 97 0
275935 C#좀 하는형들 제발 도와줘 [3] 잉여학생(210.102) 11.09.26 86 0
275933 야근비 따박따박 나오는 회사 있냐? [1] 신도림프리덤(112.171) 11.09.26 78 0
275932 지금 대기업들 10년이고 20년이고 후에 미국기업들 하청업체로 전락할꺼다 [2] .3(124.137) 11.09.26 92 0
275931 요즘 중소기업 개발자가 없다. 우리 회사 4달째 못구함 [4] 신도림프리덤(112.171) 11.09.26 137 0
275930 울나라 보안이 심각하긴 하구먼... [2] 분당살람갤로그로 이동합니다. 11.09.26 87 0
275929 거칠게 쟤는 왜이리 삼성까임 한페이지를 삼까글로 도배를 시켜놓넹 [2] -_-)(220.80) 11.09.26 66 1
275928 난 한국 사람들 병신같아보이던데 [1] 로하로하알로하갤로그로 이동합니다. 11.09.26 57 0
275926 우리 나라는 상생이라는 단어가 없다. [5] 거칠게갤로그로 이동합니다. 11.09.26 78 0
275925 아오 난 진정 삼성이 부끄럽다 ㅠㅠ [2] 거칠게갤로그로 이동합니다. 11.09.26 91 0
275924 형들 이것좀 봐줘 존나 간단한건데(C언어) [5] 얼빠진호랑이갤로그로 이동합니다. 11.09.26 133 0
275923 애플이 첨에 웹앱으로 했다가 뭔가 안되서 앱으로 전환했다는게 사실이야?? [1] 거칠게갤로그로 이동합니다. 11.09.26 74 0
275922 대기업에서 IT 개발인력 흡수 한다면 나도 대기업 써볼까??? [1] 거칠게갤로그로 이동합니다. 11.09.26 80 0
275921 티 브이넥 삿는데 [5] 로하로하알로하갤로그로 이동합니다. 11.09.26 51 0
275920 주변에 지인들 만나면 공통된 얘기가.. [5] .3(124.137) 11.09.26 106 0
275919 샘숭의 바다os도 자체 개발이 아닌 라이센스 샀다는게 사실인가염??? [3] 거칠게갤로그로 이동합니다. 11.09.26 99 0
275918 아이폰 홈키가 사망해서 리퍼 받았는데 이제는 뻑하면 수신 불가 ㅡㅡ 거칠게갤로그로 이동합니다. 11.09.26 55 0
275917 샘성 지금 2만명 모았데.. [2] .3(124.137) 11.09.26 99 0
275916 지금 여기 횽이 해준 그림들.. [1] McHello갤로그로 이동합니다. 11.09.26 65 0
275915 샘숭 sw 인재 육성하네 어쩌내 하더니 요즘은 잠잠하다?? 거칠게갤로그로 이동합니다. 11.09.26 65 0
275913 안드로이드 어플 개발은 포기 해야 하는 걸까?? [2] 거칠게갤로그로 이동합니다. 11.09.26 128 0
275912 어제 도서관에서 프로그래밍 클로져라는 책을 빌렸는데.. .3(124.137) 11.09.26 77 0
275911 이건가요 너무긴데.. [4] 헬프미(128.134) 11.09.26 57 0
뉴스 ‘언니’라 부르던 그 여자… 남편과 내 집에서 살림 차렸다 디시트렌드 07.28
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2