디시인사이드 갤러리

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

갤러리 본문 영역

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

뵤뵤구(221.163) 2011.12.19 04:12:02
조회 78 추천 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
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 대박 날 것 같아서 내 꿈에 나와줬으면 하는 스타는? 운영자 25/11/17 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
296972 숏코딩 [4] 이모군(175.114) 12.01.02 117 0
296971 프로그래머가 장래희망인 예비고1인데... [6] !@#$$%(121.170) 12.01.02 173 0
296970 비전공자. 5개월간 독학했는데 취업하려면 학원가야될까요?ㅠ [5] 까꼬이(220.119) 12.01.02 311 0
296969 다이아몬드 만들기 성공했긔!! [2] asdas(222.114) 12.01.02 267 0
296968 게시판에 댓글 기능 추가하는거 어려움? [4] ㅌㄹ(59.26) 12.01.02 106 0
296966 프로젝트 비 얼마로 협상해야 할까? [2] Coste(14.46) 12.01.02 117 0
296965 taglib jstl 빡치네 ㅡㅡ 다운 받을 수가 없어. [2] ㅇㄷㅇㄷ(119.161) 12.01.02 74 0
296964 안드로이드 잘 아는 게이드라 좀 도와줭 [2] ㅇㅇ(210.94) 12.01.02 75 0
296962 오랜마니야... ㅋㄱ(183.96) 12.01.02 72 0
296961 군대에서 프로그래밍 공부하는 방법 [3] u2em갤로그로 이동합니다. 12.01.02 199 0
296960 개 키우니? [2] iljeomobolt갤로그로 이동합니다. 12.01.02 164 1
296959 자바 너무 어려움 -.-; [1] iljeomobolt갤로그로 이동합니다. 12.01.02 123 0
296958 형들 진짜 대학에대해 질문 [3] dsad(211.245) 12.01.02 147 0
296955 이런사람들이 생2를 배운다면 쪽팔리지 않을까 [1] elwlwlwk갤로그로 이동합니다. 12.01.02 141 0
296953 뒤에 보니까 모바일 게임 시장이 흥할 거라고 써놓았는데 -ㅂ-(183.102) 12.01.02 82 0
296947 형들 입력받은 음수를 양수로 바꾸는법좀 알려주세용.. [5] asdas(222.114) 12.01.02 131 0
296942 html5 비디오 인코딩말이야 김문숩니다.(125.177) 12.01.02 76 0
296941 요즘들어 자꾸 분노가 치밀어 오른다. 바보플머(222.121) 12.01.02 111 0
296939 형들 디바이스 드라이버 관련 책 추천좀요 [1] ㅇㅇㅇ(210.96) 12.01.02 80 0
296938 바위가위보 게임을 만들었습니다. 질문좀 할께요.. [7] 샐리(222.234) 12.01.02 176 0
296934 문 함부로 열어주지 마라. [4] 바보플머(222.121) 12.01.02 186 0
296927 개발자는 진짜 나이를 안따지나여??? [3] 늅늅이(182.211) 12.01.02 191 0
296924 3년차에 적정 연봉선은 어느정도라 생각함? [3] 캐연봉닭(115.92) 12.01.02 203 0
296921 뭐가 돈 되나 ? ㅇㅇ ? [13] ☎v2.0™갤로그로 이동합니다. 12.01.02 337 0
296918 아직 취업안한 횽들 있음? ㅋㅋ NC 소프트 채용정보 있던데 ㅋㅋ [7] ㅁㄴㅇㄹ(59.30) 12.01.02 329 0
296913 안드로이드 ADT 16.0 업데이트 하지마라 [1] ㅇㅇㅇ(59.150) 12.01.02 124 0
296912 c#에서 txt파일 만들때 글자색 지정하는 방법 이뜸? [1] □ㅁ갤로그로 이동합니다. 12.01.02 75 0
296911 SAM파일 그냥 삭제해도 되려나? 이씨팔노트북(211.221) 12.01.02 68 0
296910 visual studio 2010 의 msdn은 어디서 설치해야함여? [4] SODMaster갤로그로 이동합니다. 12.01.02 94 0
296909 도와주세요 님들아 [2] 水流向月갤로그로 이동합니다. 12.01.02 59 0
296907 개씨팔같은 노트북때문에 암것도 못하겠네 [16] 이씨팔노트북(211.221) 12.01.02 186 0
296906 인턴 경험자.. 질문좀... ㅜ [8] 손목짤라(112.152) 12.01.02 186 0
296905 자바를 처음 배울려고 하는데 책추천좀 [4] 인간씨갤로그로 이동합니다. 12.01.02 114 0
296903 개발자는 흡연율이 놓을까? [1] 김문숩니다(125.177) 12.01.02 80 0
296902 명령 프롬프트 이거 왜 안지워집니까 [6] 고기먹고파갤로그로 이동합니다. 12.01.02 142 0
296901 To. 성대아싸횽에게 [22] 캐성대닭(115.92) 12.01.02 227 0
296899 mfc 고수분들 [1] ..(118.46) 12.01.02 71 0
296898 난 말이야 가장 싫어하는게 김문숩니다(125.177) 12.01.02 65 0
296896 아슈발 일하기 싫다. [1] 이문동쮸쮸바갤로그로 이동합니다. 12.01.02 72 0
296895 병신 갑을 만나 □ㅁ갤로그로 이동합니다. 12.01.02 76 0
296892 역시 자바스크립트가 가장 오묘하고 어려운거 같다.. [5] 캐js닭(115.92) 12.01.02 153 0
296891 요즘은 굳이 대학 안가도 충분히 게임만들고 할수 있는것 같다. [6] ㅇㅇㅁㅇㄻㅁ갤로그로 이동합니다. 12.01.02 185 0
296890 지금 내 인생 상황.txt [2] ㅇㅇ(220.79) 12.01.02 240 0
296888 웹프로그래머 형들께 질문점 할께요.. [1] 안성(211.197) 12.01.02 92 0
296887 안드로이드 기초와 실전 앱 프로젝트라는 책을 구입했습니다 [4] 고기먹고파갤로그로 이동합니다. 12.01.02 147 0
296886 횽들아... SI에서 yacc/lex 많이 씀? [1] LR문법(221.147) 12.01.02 90 0
296885 집합 문제 갑자기 모르는게 있어서.. [1] ㅇㅇ(220.79) 12.01.02 87 0
296884 스승님 어플을 만들려면 무엇부터 시작하면 좋습니까? [8] 고기먹고파갤로그로 이동합니다. 12.01.02 170 0
296883 JSP를 공부할라 그러는디 [5] 나리링갤로그로 이동합니다. 12.01.02 118 0
296882 디씨 뷰어 같은 프로그램 없나? (203.241) 12.01.02 650 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2