디시인사이드 갤러리

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

갤러리 본문 영역

이거 한번 봐주세요~쓰래드!!!ㅠㅠㅠㅠㅠ

뵤뵤구(221.163) 2011.12.19 04:12:02
조회 68 추천 0 댓글 1

// ChildView.cpp : implementation of the CChildView class
//

#include "stdafx.h"
#include "1.h"
#include "ChildView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

int rx, ry, tx, ty, dir1, dir2;

CWinThread *pbr1;
CWinThread *pbr2;
CWinThread *pblock;
CWinThread *pball;
 

UINT br1(LPVOID arg);
UINT br2(LPVOID arg);
UINT block(LPVOID arg);
UINT ball(LPVOID arg);


BITMAP info1;
BITMAP info2;
BITMAP info3;

CDC dcmem1;
CDC dcmem2;
CDC dcmem3;

// 필요한 변수들 선언
#define R 10
#define STEP 5
#define STEP_SIDE_X 7
#define STEP_SIDE_Y 3
#define BAR_STEP 10
#define BAR_HALF 50
#define TOP_SPACE 50 // 위에 공간 높이

int movex = STEP;
int movey = STEP;
int bar_top;
int bar_middle;
int direction = 1;
int box[112];

 

int nX = 340, nY = 370;
int nCX = STEP, nCY = -STEP;

int gameon = 0; // 게임이 진행중이면 1
bool bKeyDown = false; // 키가 눌리고 있는지 체크하는 변수

CBrush brush, *blockBrush;

/////////////////////////////////////////////////////////////////////////////
// CChildView

CChildView::CChildView()
{
}

CChildView::~CChildView()
{
}


BEGIN_MESSAGE_MAP(CChildView,CWnd )
//{{AFX_MSG_MAP(CChildView)
ON_WM_PAINT()
ON_COMMAND(ID_INIT, OnInit)
ON_COMMAND(ID_START, OnStart)
ON_WM_KEYDOWN()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CChildView message handlers

BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
 if (!CWnd::PreCreateWindow(cs))
  return FALSE;
 
 cs.dwExStyle |= WS_EX_CLIENTEDGE;
 cs.style &= ~WS_BORDER;
 cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
  ::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1), NULL);
 
 return TRUE;
}

void CChildView::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 
 // TODO: Add your message handler code here
 
 // Do not call CWnd::OnPaint() for painting messages
}

UINT br1(LPVOID arg)// 막대기
{
 CDC dc;
 HDC hdc=::GetDC((HWND) arg);
 dc.Attach(hdc);
 
 dc.SelectStockObject(NULL_PEN);
 

 while(1)
 {
  dc.BitBlt(rx, ry, info3.bmWidth, info3.bmHeight, &dcmem3, rx, ry, SRCCOPY);
  switch(dir1)
  {
  case 1:
   rx-=10;
   if(rx<10)
   {
    rx+=10;
    dir1=1;
   }
   break;
   
  case 2:
   rx+=10;
   if(rx+info1.bmWidth>680)
   {
    rx-=10;
    dir1=2;
   }
   break;
   
  }
  
  dc.BitBlt(rx, ry, info1.bmWidth, info1.bmHeight, &dcmem1, 0, 0, SRCCOPY);
  Sleep(30);
  
 }
 
 dc.Detach();
 ::ReleaseDC((HWND) arg, hdc);
 return 0;
 
}


void CChildView::OnInit()
{
 // TODO: Add your command handler code here
 CClientDC dc(this);
 
 rx=300;
 ry=400;
 
 CBitmap back;
 back.LoadBitmap(IDB_BACK);
 back.GetBitmap(&info3);
 dcmem3.CreateCompatibleDC(&dc);
 dcmem3.SelectObject(&back);
 dc.BitBlt(0, 0, info3.bmWidth, info3.bmHeight, &dcmem3, 0, 0, SRCCOPY);
 
 CBitmap bar1;
 bar1.LoadBitmap(IDB_BAR1);
 bar1.GetBitmap(&info1);
 dcmem1.CreateCompatibleDC(&dc);
 dcmem1.SelectObject(&bar1);
 dc.BitBlt(rx, ry, info1.bmWidth, info1.bmHeight, &dcmem1, 0, 0, SRCCOPY);
 
 
 CBrush brush, *blockbrush;
 CPoint boxpt(0,0);

 for(int i = 0; i < 112; i++)
 {
  dc.SelectStockObject(NULL_PEN);
  box[i] = 1; // 존재상태로 값 설정
  boxpt.x = (i % 16) * 43;
  boxpt.y = (int)(i / 16) * 18 + TOP_SPACE;
  if(box[i] == 1) { // 박스가 아직 활성화 상태라면,
   if(i / 16 == 0) brush.CreateSolidBrush(RGB(180,100,10));
   else if(i / 16 == 1) brush.CreateSolidBrush(RGB(190,120,50));
   else if(i / 16 == 2) brush.CreateSolidBrush(RGB(200,140,90));
   else if(i / 16 == 3) brush.CreateSolidBrush(RGB(210,160,130));
   else if(i / 16 == 4) brush.CreateSolidBrush(RGB(220,180,170));
   else if(i / 16 == 5) brush.CreateSolidBrush(RGB(230,200,210));
   else if(i / 16 == 6) brush.CreateSolidBrush(RGB(230,200,210));
  } else { // 박스가 없어진 것이라면.
   brush.CreateSolidBrush(RGB(255,255,255));
  }
  blockbrush = (CBrush *) dc.SelectObject(&brush);
  dc.Rectangle(boxpt.x, boxpt.y, boxpt.x + 40, boxpt.y + 15);
  dc.SelectObject(blockbrush);
  brush.DeleteObject();
 }

 brush.CreateSolidBrush(RGB(255, 0, 0));
 dc.SelectStockObject(NULL_PEN);
 blockbrush = (CBrush *) dc.SelectObject(&brush);
 dc.Ellipse(nX-R,nY-R,nX+R, nY+R);
 dc.SelectObject(blockbrush);
 brush.DeleteObject();


 pbr1=AfxBeginThread(br1, this->m_hWnd, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
 pblock=AfxBeginThread(block, this->m_hWnd, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
 pball=AfxBeginThread(ball, this->m_hWnd, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
 
}


void CChildView::OnStart()
{
 // TODO: Add your command handler code here
 pbr1->ResumeThread();
 pblock->ResumeThread();
 pball->ResumeThread();

 
}

 

void CChildView::(UINT nChar, UINT nRepCnt, UINT nFlags)
{
 // TODO: Add your message handler code here and/or call default
 
 switch(nChar)
 {
 case VK_LEFT: dir1=1; break;
 case VK_RIGHT: dir1=2; break;
 }
 
 CWnd ::(nChar, nRepCnt, nFlags);
}

UINT block(LPVOID arg)// block
{
 CDC dc;
 HDC hdc = ::GetDC ( ( HWND ) arg );
 dc.Attach( hdc );


 CRect rect; 
 
 // 박스 그리기
 CPoint boxpt(0,0);
 CBrush brush, *blockBrush;
 for(int i = 0; i < 112; i++) {
  
  boxpt.x = (i % 16) * 43;
  boxpt.y = (int)(i / 16) * 18 + TOP_SPACE;
  
  // 충돌체크
  CRect tmp_box(boxpt.x, boxpt.y, boxpt.x + 40, boxpt.y + 15);
  CRect tmp_ball(nX-R,nY-R,nX+R, nY+R);
  CRect r;
  if(IntersectRect(&r, &tmp_box, &tmp_ball) && box[i] == 1) {
  
   // 아래쪽 벽에 맞았을 때
   if(nY <= boxpt.y + 15 && (nX >= boxpt.x && nX <= boxpt.x + 40)) {
    movey = (-1) * movey;
    
   }
   // 위쪽 벽에 맞았을 때
   if(nY >= boxpt.y && (nX >= boxpt.x && nX <= boxpt.x + 40)) {
    movey = (-1) * movey;
   }
   // 왼쪽 벽에 맞았을 때
   if(nX >= boxpt.x && (nY >= boxpt.y && nY <= boxpt.y + 15)) {
    direction = (-1) * direction;
    //movex = (-1) * movex;
   }
   // 오른쪽 벽에 맞았을 때
   if(nX <= boxpt.x + 40 && (nY >= boxpt.y && nY <= boxpt.y + 15)) {
    direction = (-1) * direction;
    //movex = (-1) * movex;
   }

   box[i] = 0;
  }
  
  if(box[i] == 1) { // 박스가 아직 활성화 상태라면,
   if(i / 16 == 0) brush.CreateSolidBrush(RGB(180,100,10));
   else if(i / 16 == 1) brush.CreateSolidBrush(RGB(190,120,50));
   else if(i / 16 == 2) brush.CreateSolidBrush(RGB(200,140,90));
   else if(i / 16 == 3) brush.CreateSolidBrush(RGB(210,160,130));
   else if(i / 16 == 4) brush.CreateSolidBrush(RGB(220,180,170));
   else if(i / 16 == 5) brush.CreateSolidBrush(RGB(230,200,210));
   else if(i / 16 == 6) brush.CreateSolidBrush(RGB(230,200,210));
  } else { // 박스가 없어진 것이라면.
   brush.CreateSolidBrush(RGB(255,255,255));
  }
  blockBrush = (CBrush *) dc.SelectObject(&brush);
  dc.Rectangle(boxpt.x, boxpt.y, boxpt.x + 40, boxpt.y + 15);
  dc.SelectObject(blockBrush);
  brush.DeleteObject();
  
 }

 if(nX <= R) direction = 1;
 else if(nX >= rect.Width() - R) direction = -1;
 nX += (movex * direction);

 
 if(nY < R) movey = (-1) * movey;
 else if(nY > bar_top - R && ( nX >= bar_middle - BAR_HALF && nX <= bar_middle + BAR_HALF )) {
 
  if(bKeyDown == false) {
   movex = STEP;
   movey = -STEP;
  } else if(bKeyDown == true) {
   movex = STEP_SIDE_X;
   movey = -STEP_SIDE_Y;   
  }
   
 }
 
 nY += movey;

 dc.Detach ();
 ::ReleaseDC ( ( HWND ) arg, hdc );
 return 0;
}

UINT ball(LPVOID arg)// 공
{
 CDC dc;
 HDC hdc=::GetDC((HWND) arg);
 dc.Attach(hdc);

 

 dc.Detach ();
 ::ReleaseDC ( ( HWND ) arg, hdc );
 return 0;
}
 
이게만든 프로그램 인데 이제 맨밑에 공 쓰래드에다가 어케 해야 벽돌깨고 튕기고 할까요,ㅠㅠㅠㅠㅠㅠㅠ
이거만하면 될꺼 같은데 어케 써야할지갈피를 못잡겠어요 ....
조언 감사히 받겠습니다.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 영포티룩도 멋지게 소화할 것 같은 40대 스타는? 운영자 25/10/27 - -
AD 할로윈 슈퍼위크~!! 운영자 25/10/23 - -
이거 한번 봐주세요~쓰래드!!!ㅠㅠㅠㅠㅠ [1] 뵤뵤구(221.163) 11.12.19 68 0
294966 그럼 어떤식으로 해야지 입력받는식으로 할수있을까요? [2] 1234(218.237) 11.12.19 63 0
294965 다시 질문 드립니다 [5] 1234(218.237) 11.12.19 71 0
294964 아 시발 진로 존나 잘못잡은거냐? [2] 뿡뿡뿡뿡(39.112) 11.12.19 104 0
294963 웹게임에서 소스 추출하려는데 [12] 나무아비(114.200) 11.12.19 693 0
294962 c언어 질문 [5] 1234(218.237) 11.12.19 83 0
294961 파트타임 학원 강사 하기 힘듬? 급질(221.147) 11.12.19 106 0
294959 가장 생각나는 허무한 삽질이 뭐였어? [1] ㅌㄹ(59.26) 11.12.19 87 0
294958 소프트웨어 테스팅 프로그램은 어떻게 테스팅 하는거야? [1] 해물(14.51) 11.12.19 54 0
294957 지금 누구 계신가요? html 질문인데; [1] 홈페이징(122.40) 11.12.19 72 0
294956 Java , JSP 질문 좀 받아줘 형들 [3] `-'갤로그로 이동합니다. 11.12.19 63 0
294955 스타1 mpq를 풀어봤는데 [2] DevilCruiser갤로그로 이동합니다. 11.12.19 100 0
294954 자소서를 엄청 오래쓰고 나서 읽어봤는데 ㅠㅠ [1] ㅁㄴㅇㄹ(115.137) 11.12.18 94 0
294953 DB SQL명령어 질문 [3] income갤로그로 이동합니다. 11.12.18 126 0
294952 MFC 질문 [4] 토끼나븨(118.221) 11.12.18 65 0
294951 이바닥 정년 솔직히 몇으로 보냐? [4] ㅇㅇ(112.148) 11.12.18 180 0
294949 스타1이나 2깔려있는횽들 [6] DevilCruiser갤로그로 이동합니다. 11.12.18 76 0
294948 횽들 c언어 공부하는데 모르는거좀 물어볼게 [5] 123(219.249) 11.12.18 93 0
294947 요즘 MFC 배우고 있는데, 실제 실무에서 가장 많이 쓰는 건 뭔가요? [2] 까꼬이(121.174) 11.12.18 106 0
294946 밑에 포인터 물어봤었는데.. [1] 형들(221.155) 11.12.18 55 0
294945 프로그래머 만큼 안정적인 직업도 없는 것 같다.jpg [2] ㅇㅇ(121.133) 11.12.18 208 0
294944 형들 *p++ *(p++)랑 같은거임? [2] 형들(221.155) 11.12.18 87 0
294943 오빠들 자바 getRemoteAddr() 왜 ipv6로 가져올까요? [2] 자바(211.187) 11.12.18 138 1
294942 학교에서 교수가 여자라서 짱 좋음 [4] ㅇㅇ(121.133) 11.12.18 186 1
294941 혹시 너무 무료하고 심심해서 mfc 한번 mfc 우앙ㅠ(221.163) 11.12.18 47 0
294940 이런 병신같은 인사담당자 들 왜이렇게 많냐?? [1] 이메지네이션(114.205) 11.12.18 91 0
294939 나의 퇴사 썰. [1] 이런개새끼갤로그로 이동합니다. 11.12.18 114 0
294938 모 일케 갈켜주는 사람이 읍냐ㅇㅇ C 공부좀 할래면 어떠카냐고 묻는데 [4] 미케닠갤로그로 이동합니다. 11.12.18 94 0
294937 어떤 os가 가장 전망성 높을까 [1] 전망(115.41) 11.12.18 92 0
294936 html 질문좀.. 1111(124.195) 11.12.18 34 0
294935 형들 이거쉬운건데 제발알려주세요 ㅠㅠㅠㅠㅠ [1] ㄴㅇㄹㄴㅇ(125.129) 11.12.18 50 0
294934 내가 봤을 때 물어보는 놈들은 존나게 맞아야 한다. [1] ㅇㅇ(61.43) 11.12.18 95 0
294933 프로그램좀 짜주세요. 급함 ㅠ 사례함 [7] 라면사리(110.14) 11.12.18 146 0
294932 일본 스마트폰 개발자 '몸값=금값' [5] ㅁㄴㅇㄹ(14.42) 11.12.18 217 0
294931 프통령하고 스터디 하구 왔심 [3] 9m(58.140) 11.12.18 80 0
294929 InputStream 과 BufferedReader [6] 케이갤로그로 이동합니다. 11.12.18 72 0
294928 면접볼때 주량이랑 여친있냐고 물어보던데 [8] 123(211.48) 11.12.18 228 0
294927 횽들 전자공학 1학년인데 C언어 공부좀 해보려고하는데 어케해야됨? 학원다 미케닠갤로그로 이동합니다. 11.12.18 59 0
294926 형들 이 사이트 알아? 임베디드쪽 무료강의해주는곳인데 [2] ㅇㅇ(112.148) 11.12.18 119 0
294925 엄청 간단한 html인데 해결좀 도와주세요 ㅠ [3] 홈페이징(122.40) 11.12.18 73 0
294924 난 개발자가 되려고 취업을 알아보는데 [1] ㅋㅋㅋ(110.70) 11.12.18 86 0
294923 DB 쌩초짜 질문좀 할게!! ㅌㄹ(59.26) 11.12.18 34 0
294922 Sencha Touch 로 결정했다! 으이얍! [2] 캐센터닭(115.92) 11.12.18 75 0
294921 데이터베이스 뭐 좀 물어볼게요;;; [7] 전설의대지갤로그로 이동합니다. 11.12.18 83 0
294919 중소기업이나 벤처기업은 면접 떨어지면 문자로 통보해주나? [3] 123(211.48) 11.12.18 174 0
294918 13층에서 이사 왔다고 떡을 돌리는데 [3] 거칠게갤로그로 이동합니다. 11.12.18 101 0
294917 과제 질문염!!(BufferedReader관련) [5] 케이갤로그로 이동합니다. 11.12.18 74 0
294916 어셈블리 질문하나만 할께형들 젭라알려줘 [2] 파일입출력(1.216) 11.12.18 45 0
294915 MFC 좀 하눈사람들 일로와바!!!!!!!!!!!!!!!!!!!! [3] (220.116) 11.12.18 91 0
294914 혹시 가족같은 분위기의 IT업게 다니는 사람 있냐? [4] 므해?갤로그로 이동합니다. 11.12.18 170 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2