디시인사이드 갤러리

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

갤러리 본문 영역

형님들 불쌍한 아해 하나 구원해주세요 API 프로그래밍질문

살려줘(110.35) 2011.06.12 20:16:07
조회 177 추천 0 댓글 15

지금 팩맨 만드는중인데요 미로를 구현하는부분에서 앞에 배열주는법은 알겠는데

콜백이랑 드로우 함수에서 뭐라고 줘야 0과 1을 구분해서 적용시킬 수 있을지 모르겠어요

제발 고수형님들 살려주세요 저 F받으면 졸업못해요 ㅠ.ㅠ

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <gl/gl.h>
#include <gl/glu.h>

#define IDT_TIMER 1

// global variables
char *szClassName = "Computer Graphics";

HWND MyWND = 0;

HDC MyDC;
HGLRC MyRC;

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

bool bSetupPixelFormat(void);
void Resize(const int cx, const int cy);
void DrawScene(void);

void DoColide(void);

-----------------------------------------------------------------------------------

bool maze[10][10] = {
{ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 }};

 

--------------------------------------------------------------------------------------

 

const int numRect = 2;
float centerPos[numRect][2] = {{0.1f, 0.1f}, {0.0f, 0.0f}};
float moveDirection[numRect][2] = {{0.05f, 0.0}, {0.0f, 0.05f}};

//void DrawScore(float posX, float posY);


//bool DoColide (float left, float bottom, float right, float top);
//bool DoColide (float centerX, float centerY);

//float centerPos[2] = {0.0f, 0.0f};
//float moveDirection[2] = {0.0f, 0.05f};

/*
* WinMain
*/
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int nShowCmd )
{
 // Registers the window class
 WNDCLASS wc;

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

 RegisterClass(&wc);

 // Create the main window
 MyWND = CreateWindow( szClassName,
  "Simple OpenGL Example",
  WS_OVERLAPPEDWINDOW,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  0,
  0,
  hInstance,
  0 );

 // Make sure that window was created
 if( !MyWND )
  return false;

 ShowWindow( MyWND, nShowCmd );
 UpdateWindow( MyWND );

 // Main message loop
 MSG msg;
 while( GetMessage( &msg, 0, 0, 0 ) )
 {
  TranslateMessage( &msg );
  DispatchMessage (&msg );
 }

 UnregisterClass( szClassName, wc.hInstance );

 return msg.wParam;
}


/*
* WndProc: to process messages for the main window
*/
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
 RECT rect;

 switch( msg )
 {
 case WM_CREATE:
  // Initialize for the OpenGL rendering
  MyDC = GetDC(hWnd);
  if( !bSetupPixelFormat() )
   PostQuitMessage (0);

  MyRC = wglCreateContext(MyDC);
  wglMakeCurrent(MyDC, MyRC);

  SetTimer(hWnd, IDT_TIMER, 100, NULL);

  SelectObject( MyDC, GetStockObject(SYSTEM_FONT) );
  wglUseFontBitmaps( MyDC, 0, 255, 1000 );
  glListBase( 1000 );

 // InitStage();

  break;

 case WM_SIZE:
  GetClientRect(hWnd, &rect);
  Resize(rect.right, rect.bottom);

  InvalidateRect(hWnd, NULL, FALSE);

  break;

 case WM_DESTROY:
  // Destroy all about OpenGL
  if( MyRC )
   wglDeleteContext(MyRC);

  if( MyDC )
   ReleaseDC(hWnd, MyDC);

  KillTimer(hWnd, IDT_TIMER);

  glDeleteLists( 1000, 255 );

  PostQuitMessage(0);
  break;

 case WM_PAINT:
  DrawScene();
  ValidateRect(hWnd, NULL);
  break;

 case WM_TIMER:
  switch(wParam){
   case IDT_TIMER:
   /*
   float centerX = centerPos[0] + moveDirection[0];
    float centerY = centerPos[1] + moveDirection[1];

    if(!DoColide( centerX-0.1f, centerY-0.1f, centerX+0.1f, centerY+0.1f)){
     centerPos[0] += moveDirection[0];
     centerPos[1] += moveDirection[1];
     InvalidateRect(hWnd, NULL, false);
    }*/
    DoColide();
    InvalidateRect(hWnd, NULL, false);
    break;
  }
 break;

 case WM_KEYDOWN:
  /*
  if(wParam == VK_LEFT){
   if(!DoColide(centerPos[0]-0.2f, centerPos[1])){
    centerPos[0] -= 0.2f;
    InvalidateRect(hWnd, NULL, false);
   } 
  
  }
  else if(wParam == VK_RIGHT){
   if(!DoColide(centerPos[0]+0.2f, centerPos[1])){
    centerPos[0] += 0.2f;
    InvalidateRect(hWnd, NULL, false);
   }
  }
  
  else if(wParam == VK_UP){
   if(!DoColide(centerPos[0], centerPos[1]-0.2f)){
    centerPos[1] += 0.2f;
    InvalidateRect(hWnd, NULL, false);
   }
  }


  else if(wParam == VK_DOWN){
   if(!DoColide(centerPos[0], centerPos[1]-0.2f)){
    centerPos[1] -= 0.2f;
    InvalidateRect(hWnd, NULL, false);
   }
  }*/

  if( wParam == VK_ESCAPE )
  {
   DestroyWindow( MyWND );
  }
  break;

 default:
  return DefWindowProc( hWnd, msg, wParam, lParam );
 }

 return 0;
}

/*
* bSetupPixelFormat : to setup the format of pixel for OpenGL
*/
bool bSetupPixelFormat(void)
{
 PIXELFORMATDEOR pfd;
 int pixelformat;

 pfd.nSize= sizeof( PIXELFORMATDEOR );
 pfd.nVersion= 1;
 pfd.dwFlags= PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
 pfd.dwLayerMask= PFD_MAIN_PLANE;
 pfd.iPixelType= PFD_TYPE_RGBA;
 pfd.cColorBits= 24;
 pfd.cDepthBits= 16;
 pfd.cAccumBits= 0;
 pfd.cStencilBits= 0;

 if( (pixelformat= ChoosePixelFormat( MyDC, &pfd ))==0 ) {
  MessageBox( NULL, "ChoosePixelFormat failed", "Error", MB_OK );
  return false;
 }

 if( SetPixelFormat( MyDC, pixelformat, &pfd )==false ) {
  MessageBox( NULL, "SetPixelFormat failed", "Error", MB_OK );
  return false;
 }

 return true;
}

/*
* Resize : to re-initialize
*/
void Resize(const int cx, const int cy)
{
 glMatrixMode( GL_PROJECTION );
 glLoadIdentity();

 glViewport( 0, 0, cx, cy );

 // 3D orthographic viewing
 if( cx <= cy ) {
  float ratio = (float)cy/(float)cx;
  glOrtho( -1.0, 1.0, -ratio, ratio, -1.0, 1.0 );
 }
 else {
  float ratio = (float)cx/(float)cy;
  glOrtho( -ratio, ratio, -1.0, 1.0, -1.0, 1.0 );
 }

 return;
}   

/*
* DrawScene : to draw a scene
*/

void DrawScene(void)
{
 glEnable(GL_DEPTH_TEST);

 glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();

 

 //DrawScore( 1.1f, 0.8f );


 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

 glColor3f(0.0f, 0.0f, 0.0f);
 glRectf( centerPos[0][0]-0.1f,centerPos[0][1]-0.1f,centerPos[0][0]+0.1f,centerPos[0][1]+0.1f);
 glRectf( centerPos[1][0]-0.1f,centerPos[1][1]-0.1f,centerPos[1][0]+0.1f,centerPos[1][1]+0.1f);

 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
 
 glColor3f(0.0f, 1.0f, 0.0f);
 glRectf( centerPos[0][0]-0.1f,centerPos[0][1]-0.1f,centerPos[0][0]+0.1f,centerPos[0][1]+0.1f);
 glColor3f(1.0f, 0.0f, 0.0f);
 glRectf( centerPos[1][0]-0.1f,centerPos[1][1]-0.1f,centerPos[1][0]+0.1f,centerPos[1][1]+0.1f);
 
 glColor3f(1.0f, 1.0f, 0.5f);
 glRectf(-1.5f, -1.0f, 1.5f, 1.0f);

 glFlush();
 SwapBuffers(MyDC);

 return;
}
/*
bool DoColide(float centerX, float centerY)
{
 if( centerX >= 1.0f || centerY >= 1.0 || centerX <= -1.0f || centerY <= -1.0f)
  return true;

 return false;
}

bool DoColide(float left, float bottom, float right, float top)
{
 float bound = 1.00001f;
 if( left < -bound || bottom < -bound ){
  moveDirection[0] = -moveDirection[0];
  return true;
 }
 else if(bottom < -bound || top > bound){
  moveDirection[1] = -moveDirection[1];
  return true;
 }
 return false;
}
*/

void DoColide(void)
{
 for(int index=0; index<2; index++){
  float centerX = centerPos[index][0]+moveDirection[index][0];
  float centerY = centerPos[index][1]+moveDirection[index][1];

  float left = centerX-0.1f, right = centerX+ 0.1f;
  float bottom = centerY-0.1f, top = centerY+ 0.1f;

  float bound = 1.00001f;
  if( left < -bound || right > bound ){
   moveDirection[index][0] = -moveDirection[index][0];
   return;
  }
  else if( bottom < -bound || top > bound ){
   moveDirection[index][1] = -moveDirection[index][1];
   return;
  }
  
  centerPos[index][0]+=moveDirection[index][0];
  centerPos[index][1]+=moveDirection[index][1];
 }
 return;
}

/*
void DrawScore( float posX, float posy )
{
 char str[256];
 sprintf_s( str, "Score: %2d", num_items );

 glRasterPos2f( posX, posY );
 glCallLists( strlen(str), GL_UNSIGNED_BYTE, str );

 glColor3f( 0.75f, 0.75f, 0.75f );
 glRectf( posX-0.02f, posY-0.02f, posX+0.23f, posY+0.05f );

 return;
}
*/

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
이슈 [디시人터뷰] 라이징 스타로 인정받은 걸그룹, ‘리센느(RESCENE)’ 운영자 24/11/08 - -
설문 축의금 적게 내면 눈치 줄 것 같은 스타는? 운영자 24/11/11 - -
272507 참치 이쁜이가 무슨 의미임 [3] Deanex갤로그로 이동합니다. 11.09.16 79 0
272499 금욜이다 금욜이다..그러지들말고 ㅋㄱ(183.96) 11.09.16 28 0
272494 크롬 쓰는 사람, 창 닫는 단축키가 뭐임? [9] Deanex갤로그로 이동합니다. 11.09.16 124 0
272493 간만에 좋은 기사 하나 올라왔네 [1] (112.146) 11.09.16 89 0
272492 리눅스 vmware로 띄웠는데 왜자꾸 리셋되지... [1] 꿀레(14.33) 11.09.16 40 0
272488 웹페이지 제작 순서좀 질문드릴게요. [3] 헬프미(116.41) 11.09.16 104 0
272485 컴터잘하는 횽들 도와줘제발 [3] 도와줘제발(140.161) 11.09.16 54 0
272484 스칼렛 요한슨 누드사진은 해커가 핸드폰을 해킹해서 유출시켰다는데? [3] dd(58.234) 11.09.16 191 0
272483 써니봤음..ㅠ.ㅠ [2] 뇌지랄갤로그로 이동합니다. 11.09.16 99 0
272482 여기서 temp 폴더의 용도를 아는 사람? [5] 로하로하알로하갤로그로 이동합니다. 11.09.16 80 0
272481 브브크 칰힌은 말이지 [2] 로하로하알로하갤로그로 이동합니다. 11.09.16 45 1
272480 아옼 윈 8 설치 원래 오래걸림요?? [2] iseeyou&갤로그로 이동합니다. 11.09.16 78 0
272479 처음 여기왔을 때랑은 사뭇 달린 [2] CHALLENGER갤로그로 이동합니다. 11.09.16 70 0
272478 나왔다 [1] 독담갤로그로 이동합니다. 11.09.16 31 0
272477 빡친당 [7] elwlwlwk갤로그로 이동합니다. 11.09.16 104 0
272476 아 존나 배고프다 [1] Adelposs갤로그로 이동합니다. 11.09.16 54 0
272475 쵸쵸야~ 기획자의 참맛은.. 이문동쮸쮸바갤로그로 이동합니다. 11.09.16 41 0
272474 성님들 ; [6] 패망(175.192) 11.09.16 50 0
272473 프겔러 개객끼들 [9] 이문동쮸쮸바갤로그로 이동합니다. 11.09.16 107 0
272472 콘셉을 바꿔야겠다 [14] 로하로하알로하갤로그로 이동합니다. 11.09.16 80 0
272471 아이폰 디씨 어플이 바뀌었다!!! 거칠게갤로그로 이동합니다. 11.09.16 57 0
272470 아 나,,댓글 왜 지워지는거야? 비번을 들킨거야? 알바가 자르는거야??? [13] ㅋㄱ(183.96) 11.09.16 79 0
272469 호두 많이먹으면 몸에 안좋아여? [15] SuCo갤로그로 이동합니다. 11.09.16 664 0
272468 메트로UI 가 터치 외에 마우스&키보드 환경만 잘 고려해주면 더 좋을듯영 SINE갤로그로 이동합니다. 11.09.16 38 0
272467 완전범죄가 가능한가염? [4] ♥♡정수정♡♥갤로그로 이동합니다. 11.09.16 101 0
272466 아직은 로그오프 하려면 이 수밖에 없나바영 [1] SINE갤로그로 이동합니다. 11.09.16 62 0
272465 크롬에서만 보여 n(218.51) 11.09.16 43 0
272464 소프트웨어 갤러리는 정전갤이나 다름없는데 왜?? [2] warota(221.150) 11.09.16 45 0
272463 SuCo횽 arduous횽 도와줘서 고마워~!! [15] 차도컴공남갤로그로 이동합니다. 11.09.16 70 0
272462 자살춤은 보아라 [3] 거칠게갤로그로 이동합니다. 11.09.16 525 0
272461 윈팔 좌표좀 찍어주라 씻기전에 받아놓게 [1] 로하로하알로하갤로그로 이동합니다. 11.09.16 39 0
272460 내 기획아이디어중에 하나 푼다. [5] 쵸쵸(219.251) 11.09.16 80 0
272459 자바스크립트를 요새 계속 보고 있슴 [1] [성대아싸]갤로그로 이동합니다. 11.09.16 55 0
272458 메트로 UI에서 Alt f4좀 먹었으면 좋겠어영... SINE갤로그로 이동합니다. 11.09.16 43 0
272456 프갤을 함수로 민주화해부러야겄다 ♥♡정수정♡♥갤로그로 이동합니다. 11.09.16 28 0
272455 윈도우 8 쓰려면 매직 마우스 쓰면 적절하겠다. 거칠게갤로그로 이동합니다. 11.09.16 105 0
272453 여기서 윈도우8 빨면 쳐 맞나영... [12] SINE갤로그로 이동합니다. 11.09.16 180 0
272452 구구구 [1] ㅁㄴㅇ(175.116) 11.09.16 26 0
272451 아는애가 학교 사이트 취약점을 제보했는데 [5] ♥♡정수정♡♥갤로그로 이동합니다. 11.09.16 80 0
272450 야밤에 포인터에 대한 궁금증이 증폭되었다~ [10] 차도컴공남갤로그로 이동합니다. 11.09.16 85 0
272449 자살춤 닉 다른갤에서 많이 봤는데 [5] ♥♡정수정♡♥갤로그로 이동합니다. 11.09.15 174 0
272448 액티브엑스 씹떄기 [4] 로하로하알로하갤로그로 이동합니다. 11.09.15 42 0
272447 꼬추달고 제발제발 거리면 뭔가 없어보인당께 [1] SuCo갤로그로 이동합니다. 11.09.15 40 0
272443 ..; bof 공부중인데 궁금한게 있어요~ [4] ㅁㄴㅇ(175.116) 11.09.15 38 0
272442 솔찍히 프로그래머가 돈받는게 정상이냐?? [23] 개쉛기갤로그로 이동합니다. 11.09.15 244 0
272441 왜 성공한 사람은 성공 전 숱한 반대에 부딪쳣을까? Deanex갤로그로 이동합니다. 11.09.15 40 0
272440 동두천 미군2사단 한달정도 파견갔을떄 카투사 애들 봤는데 [9] SuCo갤로그로 이동합니다. 11.09.15 294 0
272439 모노뤡스 안되자나. 아놔.. [3] 쵸쵸(219.251) 11.09.15 34 0
272436 횽들 c언어 [8] ㅁㄴㅇㄹㄹㄴ(119.193) 11.09.15 103 0
272435 아 진짜 엑스코드 좆같네 진짜!! [3] 거칠게갤로그로 이동합니다. 11.09.15 79 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2