윈도우즈 프로그래밍

Size: px
Start display at page:

Download "윈도우즈 프로그래밍"

Transcription

1 윈도우프로그래밍및실습블록게임 VS 2015 Part 블록게임만들기 update update Update DB & Data Mining LAB. Korea University 이종욱 eastwest9@korea.ac.kr 참조한책 : Windows Programming 제대로배우기, 영진출판사. 1

2 강의목표 API 정복을통해배운 API 프로그램에대한전반적인이해도를높 이기위해블럭게임을작성한다. 블록게임강의자료 1 API 의기본적인내용을반복숙지한다. 기본적인블럭게임을작성하기위해필요한함수들에대해학습한다 2

3 Multi-byte, Unicode 호환함수 //temp 문자열길이구하기 num = _tcslen(temp); // 문자열에쓰기 1 _stprintf_s(temp, _T("Cown Down: %2d"), Count); // 문자열에쓰기 2 _tcscpy_s(temp, _T(" 호환성지원 ")); 3

4 헤더파일 #include<windows.h> - 여러헤더파일을포함하는헤더파일이다. - 대부분의윈도우 API 함수의원형, 각종데이터타입, 구조체, 매크로상수등이선언됨. - HINSTANCE, LPCTSTR, HWND WINDEF.H : 기본타입정의 WINNT.H : 유니코드지원을위한타입정의 WINBASE.H : Kernel 함수 WINUSER.H : 사용자인터페이스함수 WINGDI.H : 그래픽장치인터페이스함수 4

5 Test (1/2) Test 프로젝트생성 VS 2015를실행시킨다. API 프로젝트이름은 Test 파일이름은 Test.cpp Apistart.txt에있는내용을 Test.cpp 에복사한다. WndProc( ) 수정 5

6 Test (2/2) // 문자열추가 // 문자열에쓰고, 해당문자열출력 6

7 Step 1: 중앙에문장을출력하고좌우이동 프로젝트 : Moving Star 사각형의중앙위치를어떻게구하는가? 이동은어떻게할것인가? WM_LBUTTONDOWN WM_RBUTTONDOWN 7

8 1) POINT + RECT 중앙위치정보를저장할 POINT 구조체와사각형을의미하는 RECT 구 조체의모습은다음과같다. Windef.h 파일내부를보면다음과같다. typedef struct tagpoint { LONG x; LONG y; } POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT; typedef struct tagrect { LONG LONG LONG LONG left; top; right; bottom; } RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT; 8

9 2) 윈도우의중앙위치얻어내기 GetClientRect(hWnd, &Rect 변수 ) 함수! 인자 : 현재윈도우의정보와, 해당윈도우의크기를저장할 Rect 변수주소를전달 GetClientRect( ) 함수를이용하여윈도우크기정보를얻는다. 다음 CenterPoint( ) 함수를사용자가정의하여, 중앙위치를포인트구조 체에저장한후리턴 9

10 3) 글자좌우로움직이기 (1/4) Moving Star 프로젝트생성 Moving Star 프로젝트를만들고, 코드를생성한다. 헤더파일위치에 CenterPoint( ) 함수원형추가 10

11 3) 글자좌우로움직이기 (2/4) CenterPoint( ) 함수정의는코드의하단에다음과같이먼저추가한다! 11

12 3) 글자좌우로움직이기 (3/4) WndProc( ) 함수정의는작성! 12

13 3) 글자좌우로움직이기 (4/4) 13

14 Toggle 1, 0 Toggle int flag = 1; flag =!flag; 1, -1 Toggle int flag = 1; flag = flag * -1; or flag *= -1; 0,1,2 를순차적으로반복하는 Round Toggle int flag = 0; flag++; flag %= 3; 왼쪽마우스를클릭할때마다 Toggle Exe 문장이보여졌다가사라지도 록하는프로그램작성. 14

15 Step 2: 사각형그리고이동하기 윈도우중앙에사각형그리고, 해당사각형을아래로이동한다. 1) 중앙위치찾기 2) 사각형그리기 3) 사각형이동 4) 마우스왼쪽버튼을클릭하면왼쪽이동 5) 마우스오른쪽버튼을클릭하면오른쪽이동 15

16 1) 사각형그림. OffsetRect 이용움직이기 1 사각형설정 : SetRect( ) 사각형이동 : OffsetRect( ) 역할 16

17 2) 윈도우중앙에적당한직사각형그리기 DrawRect 프로젝트생성 윈도우의중앙위치를찾아낸다. 윈도우중앙점을이용하여적당한직사각형그리기 : SetRect( ) 직사각형이동 : offsetrect( ) 을이용 마우스왼쪽, 오른쪽버튼클릭에따른이동!!! 문제점 ) 벽을만나게되면어떻게되는가? 프로젝트생성 DrawRect 이라는프로젝트생성. DrawRect.cpp 생성 화살표 < 클릭! 화살표 > 클릭! ApiStart.txt 의내용을 DrawRect.cpp 에복사 다음강의자료에있는내용으로 DrawRect.cpp 를완성한다! 17

18 3) 사각형그리기코드 (1/5): DrawRect // 코드상단부분추가및변경 18

19 3) 사각형그리기코드 (2/5): DrawRect // 코드맨하단부분에 CenterPoint( ) 정의작성 19

20 3) 사각형그리기코드 (3/5): DrawRect // WndProc( ) 함수작성! 20

21 3) 사각형그리기코드 (4/5): DrawRect 21

22 3) 사각형그리기코드 (5/5): DrawRect 22

23 User module 작성 DrawRect_User 프로젝트생성 현재까지코드들을 *.cpp 파일에모두넣어작성하였다. 함수의원형또는 define 과관련된것들은헤더파일 (*.h) 로옮기고, 함수정의는함수정의를모아두는소스코드 (*.cpp) 를작성해보자. 현재작성한 DrawRect 프로젝트를모듈별로나누는과정을배운다!!! DrawRect_User 프로젝트생성, DrawRect_User.cpp 파일생성 기존에작성한 DrawRect 프로젝트의 DrawRec.cpp 파일의내용을, DrawRect_User 라는프로젝트의 DrawRect_User.cpp 로복사한다. 23

24 DrawRect_User (1/7): MyUtil.h 추가 1) Solution Explorer 창의 Header Files 오른쪽마우스클릭 Add New Item 24

25 DrawRect_User (2/7): MyUtil.h 추가 2) 팝업창에서, Header File (.h) 선택 Name 에 MyUtil.h 입력 Add 클릭 25

26 DrawRect_User (3/7): MyUtil.h 추가 3) MyUtil.h 파일에다음코드를작성한다. // #ifndef ~ #endif 의의미는? // POINT 와 RECT 에빨간물결밑줄이있어도일단은무시 // 코드를모두완성하면사라짐 주의 ) 작성한후반드시, drawrect_user.cpp 에있었던 CenterPoint( ) 원형을삭제한다. 26

27 DrawRect_User (4/7): MyUtil.cpp 추가 4) Solution Explorer 창의 Source Files 오른쪽마우스클릭 Add New Item 27

28 DrawRect_User (5/7): MyUtil.cpp 추가 5) 팝업창에서, C++ File (.cpp) 선택 Name 에 MyUtil.cpp 입력 Add 클릭 28

29 DrawRect_User (6/7): MyUtil.cpp 추가 6) MyUtil.cpp 파일은 CenterPoint( ) 정의를이동시키고, #include 구문추가함 주의 ) 작성한후반드시, drawrect_user.cpp 에있었던 CenterPoint( ) 정의부분삭제한다. 29

30 DrawRect_User (7/7): MyUtil.cpp 추가 7) drawrect_user.cpp 코드상단에도반드시 #include MyUtil.h 추가한다. 8) 코드를 모두저장 한후실행해본다. 30

31 알아두면좋은함수 Rect( 영역 ) 을사용하고조작하는함수 1. BOOL OffsetRect(LPRECT lprc, int dx, int dy) 주어진 Rect 를 dx, dy 만큼이동 2. BOOL InflateRect(LPRECT lprc, int dx, int dy) 주어진 Rect 를 dx, dy 만큼늘이거나줄임 3. BOOL IntersectRect(LPRECT lprcdst, CONST RECT *lprcsrc1, CONST RECT *lprcsrc2) 주어진 Rect1 과 2 가교차되었는지검사, 교차된작은영역은 lprcdst 로 4. BOOL UnionRect (LPRECT lprcdst, CONST RECT *lprcsrc1, CONST RECT *lprcsrc2) 주어진 Rect1 과 2 를 Union 시킴, Union 된영역은 lprcdst 로 5. BOOL PtInRect(CONST RECT *lprc, POINT pt); 특정좌표 pt 가 lprc 영역안에있는지검사 31

32 Step 3: bar 가주기에따라자동으로이동 현재작성한프로그램은마우스왼쪽 / 오른쪽버튼을누르면 bar 가움직인다. 목표 : bar 를자동으로움직이게 (AutoMove) 하고싶다. 필요한것 1) 자동으로움직이기 : 주기적으로메시지발생시켜야함 Timer 필요한것 2) 윈도우범위를벗어남 : bar가윈도우왼쪽 or 오른쪽벽과부딪치는지여부를확인해야함 CheckStrikeX( ) 필요한것 3) 사각형그리기전용함수 최종 4) AutoMove 프로젝트작성 32

33 Timer 복습 Timer 를설정하면 System 이주기적으로 Timer Message 를발생시킴 SetTimer(hWnd, 1, 200, NULL); 타이머설치 (0.2 초뒤부터, 0.2 초간격메시지발생 ) UINT SetTimer( HWND hwnd, UINT nidevent, UNT uelapse, // handle of window for timer messages // timer identifier // time-out value TIMERPROC lptimerfunc // address of timer procedure ); KillTimer(hWnd, 1); 사용된타이머를 destroy ( 메모리정리 ) BOOL KillTimer( HWND hwnd, UINT nidevent, // handle of window that installed timer // timer identifier ); 문제 : 10 초뒤에프로그램이자동종료되는 AutoKill 프로그램을작성하시오 33

34 1. AutoKill (1/2) AutoKill 프로젝트생성 34

35 1. AutoKill (2/2) 35

36 2. 사각형좌우자동이동 (1/4) 1. 사각형 bar 를좌우 (x 방향 ) 로왔다갔다이동하게할것 : 이에대한토글 ( 왼쪽 -1, 오 른쪽 1) 정보에사용할변수선언 static int alphax; 2. 처음이동방향은, WM_CREATE 에서오른쪽을의미하도록초기화 alphax = 1; // 오른쪽방향으로초기화 3. 사각형 (bar Rectangle) 을움직이는 Timer 에서이변수를기준으로 Offset 을하게 될것이며, 이변수값이 1 이라면 barr 은 OffsetRect(&barR, 1, 0); // 오른쪽이동 1 4. m_alpha 값이 -1 이된다면 OffsetRect(&barR, -1, 0); // 왼쪽이동 언제 m_alpha 값이변경하는가?! 오른 / 왼쪽윈도우벽과부딪칠때 36

37 2. 사각형좌우자동이동 (2/4) 1. WM_PAINT에서 Pen과 Brush를만들어설정하고초기화된 Rect의영역을가지고 Rectangle을출력한다. 이때 Pen과 Brush에대한색상을 COLORREF 변수를사용. static COLORREF barcolor; // switch 문시작전에선언 WM_PAINT: barcolor = RGB(0, 255, 0); hpen = CreatePen(PS_SOLID, 1, barcolor); holdpen = (HPEN) SelectObject(hdc, hpen); hbrush = CreateSolidBursh(barColor); holdbrush = (HBRUSH) SelectObject(hdc, hbrush); Rectangle(hdc, barr.left, barr.top, barr.right, barr.bottom); 37

38 2. 사각형좌우자동이동 (3/4) 1. WM_CREATE 에 SetTimer 설정. SetTimer(hWnd, 1, 10, NULL); 2. WM_Timer Message 부분을코딩 case WM_TIMER: if(checkstrikex(barr, BoundX)) alphax *= -1; OffsetRect(&barR, 2 * alphax, 0); // bar의위치변화시킴, x 변화량확인 InvalidateRect(hWnd, NULL, TRUE); break; AlphaX = 1 로진행 벽에부딪히면, AlphaX = -1 로토글시킴 38

39 2. 사각형좌우자동이동 (4/4) CheckStrikeX( ) 작성 // 화면의정중앙찾기 POINT CenterPoint(RECT& r) { POINT p; p.x = (r.left + r.right) /2; p.y = (r.top + r.bottom) /2; return p; } // bar가 x좌표로이동할때벽에부딪침확인함수 int CheckStrikeX(RECT& r, RECT& bound) { if(r.left <= bound.left r.right >= bound.right) return 1; // 벽에부딪쳤음 true else return 0; // 벽에부딪치지않음 false } 39

40 3. 그리기전용함수 DrawObject( ) 작성 앞으로사각형과원을한화면에그릴것이다. 사각형을위한코드, 원을위한코드를모두작성하는것보다, type을전달받은후그 type에맞게원을그리는함수를작성하는것이더효과적! DrawObject( ) 함수가 2개 : 함수오버로딩 ( 중복 ) 인자 4개인 DrawObject( ) 는색상하나를 Pen과 Brush에모두사용하도록인자 5개 DrawObject( ) 를호출! 실제그리기와관련한코드는인자 5개 DrawObject( ) 에서담당 40

41 4. 최종코드작성 (1/5): AutoMove AutoMove 프로젝트생성 1) AutoMove 프로젝트생성. 2) AutoMove.cpp 파일생성, ApiStart.txt 파일을 AutoMove.cpp 에복사 WinMain( ) 에서바탕색을검은색으로변경!!! 41

42 4. 최종코드작성 (2/5): AutoMove 3) WndProc( ) 함수작성 42

43 4. 최종코드작성 (3/5): AutoMove 43

44 4. 최종코드작성 (4/5): AutoMove 4) 추가함수정의작성 44

45 4. 최종코드작성 (5/5): AutoMove 45

46 윈도우프로그래밍및실습블록게임 Part 2. VS 블록게임만들기 last update Renewal version: version: version: (p.21 오타수정 ) DB & DataMining LAB. Korea University 이종욱 46

47 Step 1: 키보드화살표이용, 상하좌우이동 강의목표 : 키보드를이용동그란원을움직이게한다. 목표 : 원을자동으로움직이게하고싶다. 필요한것 1) 자동으로움직이기 : 주기적으로메시지발생시켜야함 Timer: 이전 chapter 에서참조 필요한것 2) 윈도우범위를벗어남 : bar 가윈도우와부딪치는지여부를확인해야 함 CheckStrikeX( ) 함수 : 이전 chapter 에서참조 필요한것 3) 키보드메시지 ( ) 가들어오면방향을전환 47

48 화살표키를이용하여원이동 (1/4) Virtual key VK_LEFT, VK_RIGHT 등 컴퓨터의키보드에화살표키가두개있다.( 숫자키패드의 Num-Lock을포함 ) 어느곳의화살표를눌러도동일하게작동해야하는데, 이처럼키보드의키값들을 Virtual-Key라는개념으로일괄처리한다. 원그리기함수 : Ellipse( 해당핸들 dc, left_x, top_y, right_x, bottom_y) 48

49 화살표키를이용하여원이동 (2/4) OS는 WndProc에게어디서 (hwnd), 무엇이 (imessage), 어떻게 (wparam and lparam) 발생하였는지에대한모든정보를전달한다. wparam, lparam : 특정 Message가발생할때그에따른세부정보를전달받는 Parameter로 32bit or 64bit 값. wparam: 간단한값, 1개의 Data 개념을갖는경우 lparam: 2개의값 or 좀더복잡한경우 ( 포인터등 ) KeyBorad 와관련한메시지 WM_KEYDOWN WM_KEYUP WM_SYSKEYDOWN WM_SYSKEYUP 49

50 화살표키를이용하여원이동 (3/4) Where What How. LRESULT CALLBACK WndProc(HWND hwnd, UINT imessage, WPARAM wparam, LPARAM lparam) { PAINTSTRUCT ps; HDC hdc; } switch(umsg) { case WM_ KEYDOWN : switch(wparam) { case VK_LEFT : // break; case VK_RIGHT : // break; case VK_UP : // break; case VK_DOWN : // break; } break; } return DefWindowProc(hWnd, umsg, wparam, lparam); 50

51 x, y 좌표토글이해 ) Event 간 Sequence Y - X alphax alphay 방향 WM_KEYDOWN alphax, alphay 값을결정 WM_TIMER alphax, alphay 값에따라 ballr 를변경 WM_PAINT ballr 출력! 51

52 화살표키를이용하여원이동 (4/4) 윈도우의중앙에 원 을출력, 키보드입력에따라 원 이상하좌우로이동하는 프로그램을작성 시작시방향은오른쪽, Timer가자동으로원을현재의방향으로계속진행시킨다. 이때 Keyboard의상하좌우화살표키를이용하여원의이동방향을변경. 볼의움직임방향은 X축성분과 Y축성분으로구분할수있는데, 오른쪽으로가능경우 X 방향은 +, Y 방향은 0이된다. Timer에의한처음이동방향은오른쪽이지만, 키보드에의해방향이변경될수있다 현재, 벽과의부딪침은고려하지않음 009_ 윈프블럭게임 2015 part 1 의 AutoMove 내용과유사! 52

53 1) CircleMove 프로젝트 (1/6) CircleMove 프로젝트생성 1) CircleMove 프로젝트생성 2) CircleMove.cpp 파일생성, ApiStart.txt 파일내용을복사하여 CircleMove.cpp 붙여넣기! 배경색상검정색 WinMain( ) 에서변경 53

54 1) CircleMove 프로젝트 (2/6) 3) WndProc( ) 부분작성!!! 54

55 1) CircleMove 프로젝트 (3/6) 55

56 1) CircleMove 프로젝트 (4/6) 56

57 1) CircleMove 프로젝트 (5/6) 4) 추가함수정의작성!!! 57

58 1) CircleMove 프로젝트 (6/6) 58

59 과제 1 현재작성한 CircleMove 프로그램에서다음두가지조건을추가한 CircleMove2 를작성하시오! 1) 움직이는원을적당한간격으로깜박이며이동하도록프로그램을수정. 힌트 ) 별도의 Timer 사용 힌트 ) Timer 에서는깜박임을결정할 Flag 를 Toggle 시키고, PAINT 에 서는이 Flag 에따라조건적으로출력하도록한다. 2) 벽에부딪치면반대방향으로진행 59

60 Step 2: 신호등시물레이션 Traffic Signal 일정시간이지나면다른색으로변경됨 첨부한 Traffic Signal.EXE 실행해본다. // Winmain 에서윈도우사이즈조절 hwnd = CreateWindow(szAppName, sztitle, WS_OVERLAPPEDWINDOW, 450, 200, 125, 360, NULL, NULL, hinstance, NULL); 60

61 힌트 : 신호등그리기 (1/2) 신호등원위치조절및그리기 GetClientRect( ), InflateRect( ) 61

62 힌트 : 신호등그리기 (2/2) 1. ( 빨강, 노랑, 녹색 ) 각 Lamp 의영역을 Rect 배열로사용하자 static RECT lampr[3]; 2. 3 개의 Lamp 에대한배경색과전경색을가지고있도록 COLORREF Type 의 Data 들을배열로선언 ( 배경은전경보다조금어두운색 ) static COLORREF lampbackco[3] = { RGB(100, 0, 0), RGB(100, 100, 0), RGB(0, 100, 0) }; static COLORREF lampforeco[3] = { RGB(255, 0, 0), RGB(255, 255, 0), RGB(0, 255, 0) }; 3. 상태변환을위한 Flag static int lampflag; lampflag 값이 0 : 빨간색 1 : 노란색 2 : 녹색 62

63 2) TrafficSignal 프로젝트 (1/6) TrafficSignal 프로젝트생성 1) TrafficSignal 프로젝트생성. 2) TrafficSignal.cpp 파일생성, ApiStart.txt 내용을복사하여 TrafficSignal.cpp 에붙여넣기! 배경검은색 윈도우사이즈조정 63

64 2) TrafficSignal 프로젝트 (2/6) 3) WndProc( ) 코드작성 64

65 2) TrafficSignal 프로젝트 (3/6) 65

66 2) TrafficSignal 프로젝트 (4/6) lampforeco[lampflag] 66

67 2) TrafficSignal 프로젝트 (5/6) 4) 추가함수정의작성 67

68 2) TrafficSignal 프로젝트 (6/6) 68

69 Step 3: 드래깅하여원이동 적당한위치에빨간색원을하나출력 해당원을왼쪽마우스클릭하여드래그하면원이이동한다. 움직이는경우에만, 원색상이노란색으로변경된다! 마우스드래깅은 WM_LBUTTONDOWN 과 WM_MOUSEMOVE 그리고 WM_LBUTTONUP 이 3 개의 Message 간에걸쳐서일어난다. 2. WM_MOUSEMOVE p( 200, 0 ) q( 201, 0 ) 1. WM_LBUTTONDOWN 3. WM_LBUTTONUP 69

70 힌트 ) PtInRect() (1/2) 특정영역내에마우스 Point 가클릭되었는가에대한검사 PtInRect( ) 70

71 힌트 ) PtInRect() (2/2) case WM_LBUTTONDOWN: p.x = LOWORD(lParam); p.y = HIWORD(lParam); if(ptinrect(&ballr, p)) { flag = true; // 버튼이원 ( 사각형 ) 안에눌려져있음 TRUE // ncount++; // catch me에서사용 } break; 마우스무브에서 flag 값이 true 인지확인하고, 위치정보를받아와서해당위치로원이출력되도록한다. 왼쪽마우스버튼이 up 되면 flag 값을 false 로만들어더이상움직이지않도록한다. 71

72 3) Drag Circle 프로젝트 (1/6) Drag Circle 프로젝트생성 1) Drag_Circle 프로젝트생성. 2) Drag_Circle.cpp 파일생성 ApiStart.txt 내용을복사하여 Drag_Circle.cpp 에붙여넣기 배경검은색 72

73 3) Drag Circle 프로젝트 (2/6) 3) WndProc( ) 코드작성 73

74 3) Drag Circle 프로젝트 (3/6) 74

75 3) Drag Circle 프로젝트 (4/6) 75

76 3) Drag Circle 프로젝트 (5/6) 4) WndProc( ) 코드마무리및추가함수정의작성 76

77 3) Drag Circle 프로젝트 (6/6) 77

78 과제 2) Catch Me 처음에는 1 초간격으로임의의위치정보 (x, y 좌표 ) 를만들어낸다. (Timer ID 1) 그값을이용하여적당한원 ( 공 ) 을만들어낸다. 주의 : 원은윈도우를벗어나서출력되면안됨. 원의중심위치를화면에출력 이때원의내부를마우스로클릭하면 hitcount 를증가하고화면에 hitcount 값을표시 2 초가지날때마다원이다른위치에서출력되는속도를빠르게한다. (Timer ID 2) 30 초뒤프로그램을종료 (Timer ID 3) 종료시최종점수를 메시지박스 로출력 CatchMe.exe 실행파일참조 78

79 윈도우프로그래밍및실습블록게임 Part 3, VS 블록게임만들기 last update Renewal version: version: DB & Mining LAB. Korea University 이종욱 eastwest9@korea.ac.kr 79

80 1 차목표 : 벽과사각형 bar 에부딪치는공 ver 0.9 실행파일모습을확인한다!!! 80

81 사각형블록 + 공을만들기위해고려해야할것 공 (ball) 사각형블럭 (bar) 공의움직임 사각형블록 (bar) 움직임 (key + 마우스 ) 공 (ball) 이윈도우에부딪쳤을때 : 상단, 왼쪽, 오른쪽, 하단? 사각형블록 (bar) 이윈도우에부딪쳤을때 : 왼쪽, 오른쪽 공 (ball) 이사각형블록 (bar) 에부딪쳤을때 : 상단, 왼쪽, 오른쪽, 하단? 81

82 Ver.0.1: 사각형 bar 만들기 (1/8) 82

83 Ver.0.1: 사각형 bar 만들기힌트 (2/8) 필요한변수선언 static RECT barr, clientr; // 사각형 barr, 윈도우크기정보저장할 clientr static COLORREF barcolor; // bar 색상 POINT p; // 중앙위치구한후, bar 만들때사용 Bar 색상초기화 barcolor = RGB(255, 0, 0); 사각형을그리기위해클라이언트의크기를구하는 GetClientRect 함수이용하여그크기를 RECT 구조체 (clientr) 에저장 GetClientRect(hWnd, &clientr); 중앙위치를구하는 CenterPoint 함수를이용하여중앙 POINT p 구함 p = CenterPoint(clientR); 일정크기의사각형 (bar) 구함 SetRect(&barR, p.x - 50, p.y - 15, p.x + 50, p.y + 15); 사각형의위치를아래로이동 OffsetRect(&barR, 0, 200); // x 는그대로 y 를아래로 200 이동 83

84 Ver.0.1: 사각형 bar 만들기힌트 (3/8) WM_PAINT 에서는 DrawObject 함수호출을통해 bar 그리기. 중앙위치를찾기위한함수, DrawObject( 사각형및원그리는 ) 함수선언및정의 POINT CenterPoint(RECT& ); // 함수원형선언추가 void DrawObject(HDC, RECT&, COLORREF, int); void DrawObject(HDC, RECT&, COLORREF, COLORREF, int); 84

85 Ver.0.1: Block_Game 코드 (4/8) BkGame_0_1 프로젝트생성 1) BkGame_0_1 프로젝트생성 2) BkGame_0_1.cpp 생성 ApiStart.txt 내용을복사하여 BkGame_0_1.cpp 에붙여넣기 3) 필요한전역변수, 함수선언 85

86 Ver.0.1: Block_Game 코드 (5/8) 4) WndProc( ) 함수부분 : 코드작성 86

87 Ver.0.1: Block_Game 코드 (6/8) 87

88 Ver.0.1: Block_Game 코드 (7/8) 5) 관련함수정의코드추가 88

89 Ver.0.1: Block_Game 코드 (8/8) 89

90 Ver.0.2: 좌우 (, ) 로움직이는 bar (1/9) 키보드의, 를누르면좌우로움직이는 bar 화면출력 90

91 Ver.0.2: 좌우로움직이는 bar 코드 (2/9) 왼쪽방향은 x 좌표에서 -1, 오른쪽은 1 로 toggle 하는변수추가및설정 alphax 는왼쪽 -1, 오른쪽 1 값을가진다. WM_KEYDOWN: 에서해당화살표에맞게 bar 가움직일수있도록코딩 91

92 Ver.0.2: 좌우로움직이는 bar 코드 (3/9) BkGame_0_2 프로젝트생성 1) BkGame_0_2 프로젝트생성 2) BkGame_0_1.cpp 를기존프로젝트에서복사하여, BkGame_0_2 프로젝트폴더에위치시 킴 92

93 Ver.0.2: 좌우로움직이는 bar 코드 (4/9) 3) [Solution Explorer] [Source Files] 오른쪽마우스클릭 Add Existing Item 선택 93

94 Ver.0.2: 좌우로움직이는 bar 코드 (5/9) 4) 현재 BkGame_0_2 프로젝트폴더에복사했던 BkGame_0_1.cpp 파일을선택 Add 클릭! 94

95 Ver.0.2: 좌우로움직이는 bar 코드 (6/9) 5-1) 현재프로젝트에등록된 BkGame_0_1.cpp 확인됨 이름수정필요! 5-2) [BkGame_0_1.cpp] 오른쪽마우스클릭 Rename 선택 95

96 Ver.0.2: 좌우로움직이는 bar 코드 (7/9) 6) 이름변경확인및 더블클릭 하여파일 Open! 7) 클래스이름등으로쓰이는 lpszclass 문자열수정! 96

97 Ver.0.2: 좌우로움직이는 bar 코드 (8/9) 8) WndProc( ) 함수내부의상단부분에 alphax 변수추가 // 추가된변수 97

98 Ver.0.2: 좌우로움직이는 bar 코드 (9/9) 9) WndProc( ) 함수내부에 WM_KEYDOWN 메시지와관련된코드추가 98

99 Ver.0.2 코드분석 문제점 : 클라이언트영역을인지하지못하고그범위밖으로 bar 가이동 해결책 : 윈도우벽에부딪쳤을때움직이지못하도록한다. 부딪침체크 99

100 Ver.0.3: 벽에부딪치면움직이지않는다 (1/4) 벽에부딪침확인함수작성 부딪침발생 x 방향정보가변하지않도록설정! CheckStrikeX( ) : 왼쪽 1 or 오른쪽 2 부딪침확인 + 부딪치지않음 0: 3 가지상태리턴 부딪쳐도움직이지않음 100

101 Ver.0.3: 코드작성 (2/4) BkGame_0_3 프로젝트생성 1) BkGame_0_3 프로젝트생성 2) BkGame_0_2.cpp 를복사하여, BkGame_0_3 프로젝트폴더에위치시키고업데이트! // 부딪침체크함수원형추가 101

102 Ver.0.3: 코드작성 (3/4) 3) WndProc( ) 에서 WM_KEYDOWN 부분수정. 102

103 Ver.0.3: 코드작성 (4/4) 3) 추가된함수인 CheckBoundX( ) 의정의부분을코드하단에작성한다! 103

104 Ver.0.4: 마우스로도움직이는 bar (1/4) 선택된 bar 가드래그를통해이동하기위해선, 2. WM_MOUSEMOVE p( 200, 0 ) q( 201, 0 ) 1. WM_LBUTTONDOWN 3. WM_LBUTTONUP 특정 Rect 영역내에마우스 Point 가클릭되었는가에대한검사 PtInRect( ) 예, PtInRect(&Rect, p); 현재입력된포인트가사각형 bar에위치해있는지확인하는함수! 104

105 Ver.0.4: 마우스로도움직이는 bar 코드작성 (2/4) BkGame_0_4 프로젝트생성 1) BkGame_0_4 프로젝트생성 2) BkGame_0_3.cpp 를복사하여, BkGame_0_4 프로젝트폴더에위치시키고업데이트! 105

106 Ver.0.4: 마우스로도움직이는 bar 코드작성 (3/4) 3) WndProc( ) 함수의변수선언부분수정또는추가한다. 106

107 Ver.0.4: 마우스로도움직이는 bar 코드작성 (4/4) 4) WndProc( ): 3 개의윈도우메시지처리구문추가 107

108 Ver.0.5: 정중앙에적당한크기의공출력 BkGame_0_5 프로젝트생성 정중앙에적당한크기의공을출력하기위한코드추가. WndProc( ) 의변수선언부분에서 ball 을출력하기위한사각형선언 static RECT ballr; // ball 을출력하기위한 Ball_Rect 선언 WM_CREATE 에서 SetRect(&ballR, p.x - 10, p.y - 10, p.x + 10, p.y +10); WM_PAINT 에서 DrawObject(hdc, ballr, RGB(0, 0, 0), RGB(255, 0, 255), 1); 1) BkGame_0_5 프로젝트생성 2) BkGame_0_4.cpp 를복사하여, BkGame_0_5 프로젝트폴더에위치시키고업데이트! 3) 위에언급된부분추가! 108

109 Ver.0.6: 공이자동으로좌우로이동 (1/5) Timer 이용 : 메시지가특정한간격으로발생 공의좌표변경 공을이동시킴 오른쪽으로이동하다가벽에부딪치면왼쪽으로이동 공의좌우방향토글은 static int balltogglex; 를이용하여 -1 or 1 Ball 이클라이언트윈도우좌우벽에부딪침을확인후방향전환을위해 int CheckBoundBallX(RECT &r, RECT &bound); 함수를이용 공을이동하게하기위한타이머를 WM_CREATE 에만든다. SetTimer(hWnd, 1, 10, NULL); 타이머메시지를처리하기위해 WM_TIMER: 생성및코드 생성된타이머의메모리정리코드 109

110 Ver.0.6: 공이자동으로좌우로이동코드추가 (2/5) BkGame_0_6 프로젝트생성 1) BkGame_0_6 프로젝트생성 2) BkGame_0_5.cpp 를복사하여, BkGame_0_6 프로젝트폴더에위치시키고업데이트! // 코드추가! a) #include 부분 : ball 이벽에부딪치는지여부확인하는함수원형선언을추가! 110

111 Ver.0.6: 공이자동으로좌우로이동코드추가 (3/5) b) WndProc( ) 함수의변수선언부분에 static int balltogglex; 추가! 111

112 Ver.0.6: 공이자동으로좌우로이동코드추가 (4/5) c) switch(imessage) 의 WM_CREATE: 내부의변수선언부분에다음코드추가! // 공의처음이동방향 toggle 값과 Timer 설치 112

113 Ver.0.6: 공이자동으로좌우로이동코드추가 (5/5) d) switch(imessage) 의 WM_TIMER: 코드추가! + WM_DESTROY: KillTimer() e) ball 이클라이언트벽에부딪치는지확인하는함수 CheckBallBoundX( ) 정의추가! 113

114 Ver.0.7: 45 도각도로공이이동 (1/4) b_toggley= -1 b_togglex = 1 b_togglex = -1 b_togglex = 1 b_toggley = 1 b_toggley = 1 114

115 Ver.0.7: 45 도각도로공이이동코드추가 (2/4) BkGame_0_7 프로젝트생성 1) BkGame_0_7 프로젝트생성 2) BkGame_0_6.cpp 를복사하여, BkGame_0_7 프로젝트폴더에위치시키고업데이트! a) #include 부분 : 함수원형선언부분에 CheckBallBouncY( ) 원형추가! b) WndProc( ) 변수선언부분 : balltoggley 추가! 115

116 Ver.0.7: 45 도각도로공이이동코드추가 (3/4) c) switch(imessage) 의 WM_CREATE: balltoggley 초기화부분추가! d) switch(imessage) 의 WM_TIMER: CheckBallBoundY( ) 추가, and OffsetRect( ) 수정! 116

117 Ver.0.7: 45 도각도로공이이동코드추가 (4/4) e) 코드하단 : CheckBallBoundY( ) 함수정의부분추가! 117

118 Ver.0.7: 문제점 공도 45 도로밖에움질일수없지만자동으로이동! 사각 bar 도마우스 or 키보드화살표로이동가능! But, 공이 bar 에맞는경우에대한처리가필요! 공 or bar 가 윈도우 에부딪치는것과는조금다름. 충돌판단기준 : 공과 bar 가 겹치는영역 이생기는지확인 IntersectRect( ) 함수제 공! 118

119 IntersectRect 119

120 Ver.0.8: 공이사각형 bar 와부딪칠때 (1/3) int HitTest(RECT &, RECT &); // 원형선언 HitTest(BallRect, BarRect); // 호출, 어디에있어야하는가? 움직임정보를발생시키는곳! int HitTest(RECT &r1, RECT &r2) { RECT temp; int w, h; if(intersectrect(&temp, &r1, &r2)) { w = temp.right - temp.left; h = temp.bottom - temp.top; if(w < h) // 옆에맞은경우 return 1; else return 2; // 위에맞은경우 } else return 0; // 맞이않은경우 } HitTest( ) 함수는 IntersectRect( ) 함수를이용하여 ball과 bar의충돌확인! IntersectRect( ) 는 r1과 r2의교차된영역을첫번째파라미터에전달한다 교차된영역이 width < Height 이다 교차된영역이 Width > Height 이다 1_8 버전결과확인 120

121 Ver.0.8: 공이사각형 bar 와부딪칠때코드 (2/4) BkGame_0_8 프로젝트생성 1) BkGame_0_8 프로젝트생성 2) BkGame_0_7.cpp 를복사하여, BkGame_0_8 프로젝트폴더에위치시키고업데이트! a) #include 부분 : 함수원형선언부분에 HitTest( ) 함수원형추가! 121

122 Ver.0.8: 공이사각형 bar 와부딪칠때코드 (3/4) b) WndProc( ) 변수선언부분 : ball 이 bar 의어디에부딪쳤는지저장할 hitpoistion; 추가! c) switch(imessage) 의 WM_Timer 부분 : bar 와 ball 이 Hit 하는지확인및 toggle 값변환 122

123 Ver.0.8: 공이사각형 bar 와부딪칠때코드 (4/4) e) 코드의하단 : HitTest( ) 정의추가! 123

124 다음기능들추가 1. 특정시간이지나면 (15초) 가지나면종료여부를묻는타이머추가 2. Bar에공이부딪칠때 score 1점 3. 화면오른쪽상단에 score 표시 4. 화면검정색!!! 검정색화면 : WinMain( ) 에서다음과같이변경한다. 1) 타이머하나더추가 15 초후메시지발생하도록함 WM_Timer 에서관련코드작성 - 종료메시지가나올때프로그램종료! 2) HitTest( ) 를호출한곳에, 점수를업데이트하는변수를미리만들어둔후추가한다. 3) 투명한바탕의흰색텍스트를이용하여화면오른쪽에점수결과출력 124

125 Ver.0.9: 기본기능추가 (1/4) BkGame_0_9 프로젝트생성 1) BkGame_0_8 프로젝트생성 2) BkGame_0_7.cpp 를복사하여, BkGame_0_8 프로젝트폴더에위치시키고업데이트! a) WndProc( ) 변수선언부분 : str[100], hit_numcount 추가! b) switch(imessage) 의 WM_CREATE 부분 : 변수초기화및타이머추가! 125

126 Ver.0.9: 기본기능추가 (2/4) c) WinMain( ) 함수에서 : 윈도우배경검은색 d) WndProc( ) 함수의 WM_PAINT: 화면오른쪽에점수를출력하기위한코드추가 126

127 Ver.0.9: 기본기능추가 (3/4) e) switch(imessage) 의 WM_TIMER: 2 개의타이머를제공하도록기존코드를수정 ( 새로작 성 ) 127

128 Ver.0.9: 기본기능추가 (4/4) 128

129 윈도우프로그래밍및실습블록게임 Part 4, VS 블록게임만들기 update Renewal version Version: DB & Mining LAB. Korea University 이종욱 129

130 Part 1: 문제제기 현재작성한 blockgame_0_9 를보게되면, ball 과 bar 가깜박인다. 화면을모두지우고그리기때문에, 깜빡임발생 어떻게해결할것인가? BeginPaint( ) 와 GetDC( ) 함수에대해서복습 130

131 그리는방법 2 가지 : BeginPaint( ) BeginPaint( ) WM_PAINT 에서만사용가능 ( 다른곳에서사용해도출력되지않는다 ) // 해당윈도우에대해 Painting 에필요한 // 준비를한다음현재윈도우의 DC 반환 BeginPaint는해당윈도우의 Update해야할영역 (Clipping Region: 클라이언트영역의특정부분에그리기를한정하는영역 ) 을자동으로파악한다. 해당영역은윈도우가생성되거나, 움직여지거나, 사이즈가변경되거나스크롤이이루어지는등윈도우상 (Client Area) 의화면상의변화이며, 변화에맞는화면처리가행해지도록한다. * 일부메시지 ( 키보드등 ) 는화면변화가아니기때문에, 자동으로화면변화를감지하지못한다. User는 InvalidateRect() 나 InvalidateRgn() 함수를호출함으로써강제로화면변화가있다고 WM_PAINT 메시지를강제로발생시킴. 131

132 그리는방법 2 가지 : GetDC( ) GetDC( ) GetDC 함수는특정윈도우의 Client 영역에대한 DC 핸들을얻을때사용. WM_PAINT 이외의곳에서사용가능 GetDC( ) 에의한출력은즉각적이며, 일시적인출력방법 배경과관계없이특정출력을일시적, 또는즉각반영하고자하는경우에사용됨 윈도우의타이틀바영역에대한 DC 를얻기위해서는 GetWindowDC 함수사용 132

133 BeginPaint( ) Vs. GetDC( ) 두함수의차이점을파악하기위하여, 두개의프로젝트를작성한다. 1) CirclePaint 프로젝트 WM_PAINT 에서 BeginPaint( ) 를이용하여원출력 2) CircleLBD 프로젝트 WM_PAINT 에서 BeginPaint( ) 를이용하여원출력 WM_PAINT 가아닌다른메시지들중하나인 WM_LBUTTONDOWN 에서도 GetDC( ) 를이용하여원출력 133

134 1) CirclePaint 프로젝트 (1/4): BeginPaint( ) CirclePaint 프로젝트생성 // 블럭게임에서이용하던 CenterPoint( ), DrawObject( ) 를이곳에서도이용 134

135 1) CirclePaint 프로젝트 (2/4): BeginPaint( ) 135

136 1) CirclePaint 프로젝트 (3/4): BeginPaint( ) 136

137 1) CirclePaint 프로젝트 (4/4): BeginPaint( ) 137

138 2) CircleLBD 프로젝트 : GetDc( ) CircleLBD 프로젝트생성 1) CircleLBD 프로젝트생성 2) CirclePaint.cpp 를복사하여, CircleLBD 프로젝트폴더에위치시키고업데이트! // switch(imessage) 부분에 WM_LBUTTONDOWN: 코드추가 Invalidate( ) 함수호출하지않아도바로출력가능. 그러나, 그려진후복구에는관심이없음! 138

139 결과분석 작성한두프로젝트를실행하여결과를확인한다. LBUTTONDOWN 의주석처리된부분을해지한후실행한다. CirclePaint 프로젝트 CircleLBD 프로젝트 처음부터출력됨 윈도우업데이트되어도계속출력됨 WM_PAINT 의 BeginPaint( ) 윈도우에항상출력됨! GetDc() 로출력된나머지 파란색원은 윈도우가가려지면사라짐! 139

140 정적 - 동적출력 정적 (Static) 출력 윈도우틀이출력되는것처럼기본적으로출력되도록할수있다. WM_PAINT 에서 BeginPaint( ) 이용 동적 (Dynamic) 출력 마우스동작에따라 GetDC( ) 를이용하여즉각적인출력을한다 일시적인출력이다. ( 최소화하거나다른화면에가려지면지워짐 ) 상황에따라서출력내용이달라질수있음 출력가이드 1. 배경이나윈도우가정적인상태가되었을때화면출력이필요하면 WM_PAINT 에서처리 2. 움직이거나동적으로표현되는상태를나타내는출력은그효율성으로보아, 배경을모두재출력할필요가없으므로, GetDC( ) 로해당객체만즉각출력 140

141 think about it!!! WM_PAINT 에정적으로출력을나타내지만, 마우스가클릭되었을때는윈도우전체 를다시그리지않고즉각적으로현재위치에대한원을하나만나타낼수있는가? WM_LBUTTONDOWN에서는 GetDC( ) 를이용하여현위치에대한원을그린다면, InvalidateRect( ) 를사용하지않아도그릴수있다. But, 윈도우에는마지막현재위치에하나의원만나타나야한다. 모순!!! ( 불가능함 ) GetDC( ) 는이전출력상태에대해상관하지않는다. 마지막원하나만을나타내기위해서 는이전의원을지워야하는문제는어떻게해결할것인가? 대안 : Raster Operation 1. 그림은어떻게지우는가? 2. 변경시이전그림을지우고새로이나타나는문제 - 전체영역을모두다지우는것이아닌, 특정영역을덧그리기형식으로지운다. 141

142 Raster Operation 점, 선을그릴때, 원하는픽셀과해당디스플레이표면사이의 Bitwise bool 연산을수행 Raster Operation: 두픽셀사이에 ( 변경하려는픽셀과원래의디스플레이 표면 ) bit 연산을수행하는것을의미 Raster : 그래픽디스플레이장치의방식에관한용어, 이미지를점들의패 턴으로표현하는방식 윈도우시스템은 DC 에대한출력시사용되는 Raster Operation 에대한 Mix 모드 (bit 연산 ) 를설정할수있는 SetROP2 라는기능제공 142

143 SetROP2 (1/3) int SetROP2( HDC hdc, // handle of device context int fndrawmode // drawing mode ); 143

144 SetROP2 (2/3) // 출력시 Source 는 Destination Pixel 에무조건덮어씌움 SetROP2(hdc, R2_XORPEN); X Y XOR XOR 의직관적인의미는원하는 bit 를 지우는데 (Erase) 사용할수있음 X 0100 Y 0011 // 최초 XOR Result 0111 Y 0011 // 여기에 Y 패턴, 두번째 XOR Result 0100 XOR 연산을이용하면특정 Pattern을최초에는쓰게되고, 두번째 XOR는그특정 Pattern만을배경에관계없이지울수있게됨결론적으로그림을배경과관계없이지우는데에는 XOR연산이사용됨 144

145 SetROP2 (3/3) InvalidateRect( ) 를호출하지않고도, 이전그림을즉각적으로지운후다 시새로운좌표에그릴수있음 SetROP2(hdc, R2_XORPEN); // 코드추가!!! DrawObject(hdc, ball_rect, RGB(0,255,0), 1); // 이전 Rect 지움 ( 덧그리기 ) // 좌표변경 DrawObject(hdc, ball_rect, RGB(0,255,0), 1); // 새로운위치에다시그림 R2_XORPEN : 화면색상과새로운색상의 XOR 실습 : 원출력을 ROP mode 로변경하여출력 기존 CircleLBD 프로젝트를변경하여 CircleROP 를만든다. 145

146 3) CircleROP 프로젝트 (1/2): ROP 모드이해 CircleROP 프로젝트생성 1) CircleROP 프로젝트생성 2) CircleLBD.cpp 를복사하여, CircleROP 프로젝트폴더에위치시키고업데이트! 146

147 3) CircleROP 프로젝트 (2/2): ROP 모드로변경 // switch(imessage) 부분의일부코드를추가및수정! // 주의 : 색상은모두통일함!!! // 이전에작성되었던원위에또원을그림. // ROP 모드인 XORPEN 에의해지워짐! // 현재마우스클릭한위치에새로원을그림! // 실행해보면이전과다른부분이있다! 분석하시오! 147

148 애니메이션의원리 1) (1,1) 위치에공을그린다. 2) (1,1) 위치에공을덮어쓴다 이전의공이사라진것처럼느껴짐. 3) 이동한위치 (1,2) 에공을새로그린다. 타이머에의해움직이는그림은시각적으로애니메이션효과를나타냄 BkGame_0_9 프로젝트는 RasterOperation을사용하여코드를변경하면, 기존에깜박임현상이없어진다! 이전예제는 InvalidateRect( ) 를호출하여 WM_PAINT에서그렸다. 즉, 화면을모두지운후다시그렸기때문에, 심한깜박임현상이나타남 BkGame_0_9 프로젝트파일의코드를 ROP 모드로변경한다 BkGame_0_9_ROP 프로젝트로업데이트!!! 148

149 4) BkGame_0_9_ROP (1/7) CircleROP 프로젝트생성 기존에작성된 BkGame_0_9 프로젝트의 cpp 코드를 ROP 모드로수정 수정 1) DrawObject( ) 함수에 ROP 모드를위한파라미터 ( 매개변수 ) 를추가 선언과동시에 default 값제공 : R2_XORPEN 수정 2) 점수가출력되는부분도 WM_PAINT 에위치함 이것도 ROP 모드로 수정 1) BkGame_0_9_ROP 프로젝트생성 2) BkGame_0_9.cpp 를복사하여, BkGame_0_9_ROP 프로젝트폴더에위치시키고업데이트! 149

150 4) BkGame_0_9_ROP (2/7) 1 2 개의 DrawObject( ) 함수원형 : 각각 rop 모드용디폴트인자추가 2 개의 DrawObject( ) 함수정의 : 각각 rop 모드용디폴트인자추가및일부코드수정 // 주의 : Default 값은함수의원형에만작성한다! // DrawObject( ) 내에서 Raster Mode 를지정하도록하면, // 다른곳에서매번지정하지않아도됨 // 이하부분동일하므로생략 150

151 4) BkGame_0_9_ROP (3/7) 2 점수출력을위한전용함수 : DisplayCount( ) 선언및정의코드추가 // 주의 : WM_PAINT 에점수출력과관련한내용과거의동일, 추후 WM_PAINT 에서는해당코드삭제예정 151

152 4) BkGame_0_9_ROP (4/7) 3 WndProc( ) 의변수선언위치 : 점수가출력에사용할사각형구조체선언 textr WM_CREATE: textr 의속성을설정해주는코드추가 152

153 4) BkGame_0_9_ROP (5/7) // 주의 : WM_PAINT 에 4 ROP 모드에서는 bar 가반드시 WM_PAINT 에그려질필요없음 애니메이션기법적용하여, 깜빡임방지! WM_MOUSEMOVE 에서처리! WM_MOUSEMOVE: bar 가움직이는것을출력하도록코드를변경 // ROP 모드를이용하여, 자연스럽게 bar 가이동하는것처럼그림 // GetDC( ) 를이용하여그리기때문에, WM_PAINT 메시지발생시키지않아도됨 // 메모리정리 153

154 5 ROP 모드에서는 ball 도반드시 WM_PAINT 에그려질필요없음 WM_TIMER 에서처리! 4) BkGame_0_9_ROP (6/7) // ball 그리기 // 코드위치변경및수정함 // ball 을그리도록 WM_PAINT 발생시키던함수필요없음 154

155 4) BkGame_0_9_ROP (7/7) 6 WM_PAINT: bar 와 ball 모두다른곳에서그려지도록변경됨. 코드수정 // 색상다른 ball 출력과일치 BkGame_0_9_ROP 수행한결과자연스럽게움직이는가? 155

156 Blockgame 최종목표 : BkGame ver

157 윈도우프로그래밍및실습블록게임 Part 5, VS 블록게임만들기 last update Renewal Ver Ver DB & Mining LAB. Korea University 이종욱 157

158 Blockgame 최종 : BkGame_1_0 추가로필요한것 : 1) 벽돌그리기 2) 공이벽돌에맞으면벽돌사라지기 3) 종료조건수정 : 공이 bar보다아래로가면종료 기존버전은일정시간지나면종료됨. 4) 소리넣기 158

159 소리실행위해다음부분추가 (1/3) BkGame_1_0 으로프로젝트생성 기존에작성했던 BkGame_0_9_Rop 프로젝트의 BkGame_0_9.cpp파일을 BkGame_1_0 폴더에복사한다. BkGame_1_0 프로젝트에서소스를새로생성하지않고, Existing Item을가져온후, 이름을수정한다. [ 코드 ] 헤더추가 : #include <MMSystem.h> 159

160 소리실행위해다음부분추가 (2/3) [ 설정 ] 1) Solution Explorer에서 BkGame_1_0 이선택된상황에서! 2) Project/ Properties( 속성 ) Project Settings 팝업됨 3) Link/ Input( 입력 ) 선택 4) Additional Dependencies( 추가종속성 ) 에서 winmm.lib; 추가후확인 세미콜론은추가될 lib와구분위함 160

161 소리실행위해다음부분추가 (3/3) [ 설정 ] 5) 프로젝트폴더에관련소리 4 개 (bar.wav, CLAP.wav, hf_inc.wav, LASER.wav) 를저장한다! 161

162 Ver_1_0: (1/10) 함수원형, 블록패턴추가, timer 제거 // 실제벽의값을가지는 brick_patterns[5][5], 블록초기화 InitBlocks( ), 블록그리기 DrawBlocks( ) // bar 보다아래로가면게임끝 CheckGameOver( ), 블록과 bar 가부딪침 HitTest( ) 함수오버로딩 // 다음 m_patterns[5][5] 변수와함수들은 WinMain( ) 이전에추가함. ( 즉, 전역변수공간 ) 162

163 Ver_1_0: (2/10) 블록영역만들기위한함수정의 163

164 Ver_1_0: (3/10) 블록그리기, 게임종료조건함수정의 164

165 Ver_1_0: (4/10) 블록에공이맞을때함수정의 165

166 Ver_1_0: (5/10) 변수추가, 함수호출 // WndProc( ) 함수에 Blocks 배열과블록과공 Hit 결과저장할변수선언추가 // WM_CREATE 에 InitBlocks(); 함수호출부분추가. 다른코드는그대로사용 166

167 Ver_1_0: (6/10) 함수호출 ( 블록그리기 ) // WM_PAINT 에블록을그리기위하여 DrawBlocks( ) 함수호출추가. 다른코드는그대로사용 주의 case WM_MOUSEMOVE: 의맨마지막을보게되면, InvalidateRect(hWnd, NULL, TRUE); 코드가있다면, 해당코드를삭제하기바랍니다!!! 167

168 Ver_1_0: 개발자가만드는 윈도우메시지 주의 윈도우메시지 는 WIN API 에서제공해주는것만이아닌, 사용자가정의하여사용할수있다. GameOver 메시지생성 볼이 bar보다아래로내려가는경우가종료조건이다. 이때종료메시지를발생시켜야하며, 해당종료메시지를전달받아프로그램을종료또는재시작하는팝업창을보여주어야한다! 해결방안 : 개발자가메시지를추가! WM_USER 윈도우프로그램에서는사용자를위하여 0x0400 ~ 0x7fff 의영역을사용자메시지영역으로제공. 0x0400 은 WM_USER 이라고정의를지원하고있음 168

169 Ver_1_0: 주의사항 주의!!! 기존 ver_0_9 에서, 자동종료를위해사용한 ID 2 번타이머관련부분반드시삭제. 1) SetTimer(hWnd, 2, 1000 * 20 * 1, NULL); // WM_CREATE 부분, 반드시삭제한다 2) KillTimer(hWnd, 2); // WM_TIMER 부분, 반드시삭제한다 3) WM_TIMER 윈도우메시지처리부분에서, case 2: 타이머 2 와관련한부분삭제! // UM_GAMEOVER 메시지정의부분에서사용하게됨! 169

170 Ver_1_0: (7/10) UM_GAMEOVER 코드추가 // 개발자가만드는메시지 UM_GAMEOVER 를전역변수에추가!!! // WndProc( ) 함수의메시지처리부분에, // UM_GAMEOVER 메시지를처리를위한코드추가! 170

171 Ver_1_0: (8/10) WM_TIMER 코드전체변경 (1/2) // 게임종료조건을확인하여, 종료되면 UM_GAMEOVER 메세지발생! 종료가아니면계속진행! 171

172 Ver_1_0: (9/10) WM_TIMER 코드전체변경 (2/2) 172

173 Ver_1_0: (8/10) WM_TIMER 코드전체변경 (1/2) // 게임종료조건을확인하여, 종료되면 UM_GAMEOVER 메세지발생! 종료가아니면계속진행! // 다음페이지연결위치 173

174 Ver_1_0: (9/10) WM_TIMER 코드전체변경 (2/2) // 앞페이지연결위치 174

175 Ver_1_0: (10/10) WM_PAINT 의코드일부수정 // 상단블록에부딪칠때, 점수를얻는다. 해당점수는 gamescore 에저장됨. // 출력부분수정! 175

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

Microsoft PowerPoint - 09-CE-5-윈도우 핸들 순천향대학교컴퓨터학부이상정 1 학습내용 윈도우핸들 윈도우찿기 윈도우확인및제거 윈도우숨기기 윈도우포커스 윈도우텍스트 윈도우핸들 순천향대학교컴퓨터학부이상정 3 핸들 (handle) 윈도우에서구체적인어떤대상을구분하기위해지정되는고유의번호 32비트의정수값 핸들은운영체제가발급하고사용자가이값을사용 실제값이무엇인지는몰라도상관없음 윈도우, DC, 브러쉬등등 순천향대학교컴퓨터학부이상정

More information

Microsoft PowerPoint - 04windows.ppt

Microsoft PowerPoint - 04windows.ppt Game Programming I Windows 프로그래밍 (1) March 27, 2006 목표 윈도우프로그래밍에서이용되는이벤트구동프로그래밍모델의이해 Direct3D 를이용하는윈도우어플리케이션의작성을위한최소한의코드이해 윈도우 (Win32) 어플리케이션 Direct3D API ( 어플리케이션프로그래밍인터페이스 ) 를이용하기위해필요 Win32 API 를이용해작성

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

Microsoft PowerPoint - 09-CE-7-선과 도형

Microsoft PowerPoint - 09-CE-7-선과 도형 순천향대학교컴퓨터학부이상정 1 학습내용 디바이스컨텍스트 WM_PAINT 선, 도형그리기 GDI 객체 펜, 브러쉬 순천향대학교컴퓨터학부이상정 2 디바이스컨텍스트 순천향대학교컴퓨터학부이상정 3 디바이스컨텍스트 (1) 윈도우즈에서화면출력 ( 텍스트출력과차이점 ) 화면을사용할수있는권한이제약 자신이차지하는영역에만그림을그릴수있다. 좌표를계산하는방법이다르다 자기의윈도우즈의좌표를기준으로출력

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont 12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다. 12.1 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont( in LPDIRECT3DDEVICE9 pdevice, in INT Height, in UINT

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Win32 API Windows Programming 1 http://idb.korea.ac.kr DB & Mining LAB. Korea Univ. 최종업데이트 : 2012. 08. 14 1 컴퓨터시스템의주요구성요소 2 2 컴퓨터하드웨어구성 Fetch : 메인메모리에저장되어있는명령어를 CPU 로 Decode : 컨트롤유닛에의해분석 Execution : ALU

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

Chapter 1. MFC 시작하기

Chapter 1.  MFC 시작하기 Chapter 1. MFC 시작하기 1. MFC(Microsoft Foundation Class) 개요 2. Visual Studio 2015 프로그램설치하기 3. 마우스클릭프로그램작성 4. 그림그리기프로그램작성 5. 마우스좌표값구하기프로그램작성 1 1.1. MFC 개요 2 1.1.1. C++ 언어 객체지향언어 (Object-Oriented Programming,

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

1장 윈도우 프로그래밍 들어가기

1장 윈도우 프로그래밍 들어가기 1 장 윈도우프로그래밍들어가기 김성영교수 금오공과대학교 컴퓨터공학부 예제 다음프로그램은언제종료할까? #include #define QUIT -1 int Func(void) int i; cout > i; return i; void main(void) int Sum = 0, i; cout

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

04장 메시지 처리 유형

04장 메시지 처리 유형 4 장 메시지처리유형 김성영교수 금오공과대학교 컴퓨터공학부 메시지처리유형 윈도우에서발생하는이벤트에대응하는윈도우메시지를처리 2 장및 3 장의실습예제 자식윈도우에서발생한이벤트를부모윈도우에서처리 WM_COMMAND 메시지처리 실습 4.2 자식윈도우에서발생한사건유형을구분하여처리 Notification code 처리 실습 4.7 Notification code 의한계를극복하여처리

More information

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D> 01 : 윈도우프로그래밍기초 학습목표 윈도우운영체제와윈도우응용프로그램의특징을이해한다. SDK 응용프로그램작성과정, 기본구조, 동작원리를이해한다. MFC 응용프로그램작성과정, 기본구조, 동작원리를이해한다. 비주얼 C++ 개발환경사용법을익힌다. 윈도우운영체제특징 (1/3) 그래픽사용자인터페이스 1 윈도우운영체제특징 (2/3) 메시지구동구조 이벤트발생... 대기

More information

Microsoft PowerPoint - CPP_chap3

Microsoft PowerPoint - CPP_chap3 3 장. 마우스와키보드메시지 1 1. 능동적입력받기와수동적입력받기 2 학습목표 이벤트위주로직개념을파악한다 메시지개념을파악한다 능동적입력받기 절차적로직프로그램에서입력받기 언제무엇을입력받을지는프로그램의절차적로직에서결정 예 : 텍스트모드 C 프로그램에서문자열을입력받는경우 수동적입력받기 이벤트위주로직프로그램에서입력받기 윈도우환경에서마우스나키보드입력은 Windows

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

윈도우즈 프로그래밍

윈도우즈 프로그래밍 윈도우프로그래밍및실습 003. 출력 DB & MINING LAB. Korea University 2 nd updated 2012. 08. 18 Last updated 2015. 08. 26 이종욱 eastwest9@korea.ac.kr 1 Purpose of this chapter How to show some information on your screen

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

MFC 프로그래밍

MFC 프로그래밍 윈도우프로그래밍 Visual C++ 2010 MFC Programming 1 장. 윈도우프로그래밍기초 윈도우운영체제의특징 그래픽사용자인터페이스 시스템메뉴타이틀바메뉴최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 상태표시줄 스크롤바 윈도우운영체제의특징 메시지구동구조 윈도우운영체제의특징 멀티태스킹과멀티스레딩 멀티태스킹 (Multitasking) 운영체제가여러개의응용프로그램을동시에실행

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 4 강. 함수와라이브러리함수목차 함수오버로딩 디폴트매개변수 라이브러리함수 clock 함수 난수발생 비버퍼형문자입력 커서이동 프로그래밍문제 1 /21 4 강. 함수와라이브러리함수함수오버로딩 2 /21 함수오버로딩 동일한이름의함수를여러개만들수있음 함수프로파일이달라야함 함수프로파일

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이터베이스및설계 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2012.05.10. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

1

1 1 2 3 4 5 6 b b t P A S M T U s 7 m P P 8 t P A S M T U s 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Chapter 1 29 1 2 3 4 18 17 16 15 5 6 7 8 9 14 13 12 11 10 1 2 3 4 5 9 10 11 12 13 14 15

More information

KNK_C_05_Pointers_Arrays_structures_summary_v02

KNK_C_05_Pointers_Arrays_structures_summary_v02 Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",

More information

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 -

More information

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

PathEye 공식 블로그 다운로드 받으세요!!   지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다. PathEye Mobile Ver. 0.71b 2009. 3. 17 By PathEye 공식 블로그 다운로드 받으세요!! http://blog.patheye.com 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다. PathEye 설치 1/3 최종 배포 버전을 다 운로드 받습니다. 다운로드된 파일은 CAB 파일입니다. CAB 파일에는

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT 2007. 2. 5 PLATFORM TEAM 정용학 차례 CONTAINER & WIDGET SPECIAL WIDGET 질의응답및토의 2 Container LCD에보여지는화면한개 1개이상의 Widget을가짐 3 Container 초기화과정 ui_init UMP_F_CONTAINERMGR_Initialize UMP_H_CONTAINERMGR_Initialize

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D> VHDL 프로그래밍 D. 논리합성및 Xilinx ISE 툴사용법 학습목표 Xilinx ISE Tool 을이용하여 Xilinx 사에서지원하는해당 FPGA Board 에맞는논리합성과정을숙지 논리합성이가능한코드와그렇지않은코드를구분 Xilinx Block Memory Generator를이용한 RAM/ ROM 생성하는과정을숙지 2/31 Content Xilinx ISE

More information

Microsoft PowerPoint - e pptx

Microsoft PowerPoint - e pptx Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells

More information

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a 6 장복사생성자 객체의생성과대입객체의값에의한전달복사생성자디폴트복사생성자복사생성자의재정의객체의값에의한반환임시객체 C++ 프로그래밍입문 1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y;

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600 균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

슬라이드 1

슬라이드 1 2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

C. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E.

C. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E. ASF(Atmel Software Framework) 환경을이용한프로그램개발 1. New Project Template 만들기 A. STK600 Board Template를이용한 Project 만들기 i. New Project -> Installed(C/C++) -> GCC C ASF Board Project를선택하고, 1. Name: 창에 Project Name(

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

슬라이드 1

슬라이드 1 프로세싱 광운대학교로봇학부박광현 프로세싱실행 2 C:\processing-3.2.1 폴더 창나타내기 실행 정지 3 폭 높이 600 400 도형그리기 배경칠하기 5 background(255, 255, 255); R G B background(255, 0, 0); background(255, 122, 0); 선그리기 6 background(255, 122, 0);

More information

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문 1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문 1. 표준입출력 표준입출력 입력 : 키보드, scanf 함수 출력 : 모니터, printf 함수문제 : 정수값 2개를입력받고두값사이의값들을더하여출력하라. #include int main(void) int Num1, Num2; int

More information

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2> 게임엔진 제 4 강프레임리스너와 OIS 입력시스템 이대현교수 한국산업기술대학교게임공학과 학습내용 프레임리스너의개념 프레임리스너를이용한엔터티의이동 OIS 입력시스템을이용한키보드입력의처리 게임루프 Initialization Game Logic Drawing N Exit? Y Finish 실제게임루프 오우거엔진의메인렌더링루프 Root::startRendering()

More information

Microsoft Word - PLC제어응용-2차시.doc

Microsoft Word - PLC제어응용-2차시.doc 과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

1장. 유닉스 시스템 프로그래밍 개요

1장.  유닉스 시스템 프로그래밍 개요 Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시

More information

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

var answer = confirm( 확인이나취소를누르세요.); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write( 확인을눌렀습니다.); else { document.write( 취소를눌렀습니다.); 자바스크립트 (JavaScript) - HTML 은사용자에게인터페이스 (interface) 를제공하는언어 - 자바스크립트는서버로데이터를전송하지않고서할수있는데이터처리를수행한다. - 자바스크립트는 HTML 나 JSP 에서작성할수있고 ( 내부스크립트 ), 별도의파일로도작성이가능하다 ( 외 부스크립트 ). - 내부스크립트 - 외부스크립트

More information

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을 (structures) 구조체정의 구조체선언및초기화 구조체배열 구조체포인터 구조체배열과포인터 구조체와함수 중첩된구조체 구조체동적할당 공용체 (union) 1 구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined

More information

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap11-포인터의활용.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

Microsoft PowerPoint - a10.ppt [호환 모드]

Microsoft PowerPoint - a10.ppt [호환 모드] Structure Chapter 10: Structures t and Macros Structure 관련된변수들의그룹으로이루어진자료구조 template, pattern field structure를구성하는변수 (cf) C언어의 struct 프로그램의 structure 접근 entire structure 또는 individual fields Structure는

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이타베이스 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2013.05.15. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT KEY EVENT & STATE 구현 2007. 1. 25 PLATFORM TEAM 정용학 차례 Key Event HS TASK UI TASK LONG KEY STATE 구현 소스코드및실행화면 질의응답및토의 2 KEY EVENT - HS TASK hs_task keypad_scan_keypad hs_init keypad_pass_key_code keypad_init

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

슬라이드 1

슬라이드 1 첨부 4 리모콘별 TV 셋팅방법 2011. 1 전략서비스본부서비스지원팀 1 경제형 2002년개발쌍방향단순-2007년개발경제형 /PVR-2007년개발 2002 년 02 월 ~ 2003 년 08 월 85 만 (40 만은 TV 설정불가 ) 선호채널 도움말 만가능 1) TV 전원을키고 2) 0( 숫자 )+ 음소거동시에누름 -> LED ON 3) 리모콘 LED 주황색불확인후제조사코드입력

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

Chapter 4. LISTS

Chapter 4. LISTS C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or

More information

윈도우즈 프로그래밍

윈도우즈 프로그래밍 윈도우프로그래밍및실습 002. 윈도우프로그래밍의기본 DB & MINING LAB. Korea University since 2007. 09. 03 updated 2012. 08. 18 last updated 2015. 08. 25 이종욱 eastwest9@korea.ac.kr 1 Purpose of this chapter What is a Window programming

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i ; struct point p; printf("0이아닌점의좌표를입력하시오 : "); scanf("%d %d", &p.x, &p.y); if (p.x > 0 && p.y > 0) printf("1사분면에있다.\n"); if (p.x < 0 && p.y > 0) printf("2사분면에있다.\n"); if (p.x < 0 && p.y < 0) printf("3사분면에있다.\n");

More information

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap12-고급기능.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 가 제공하는 매크로 상수와 매크로

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

Visual C++의 개요

Visual C++의 개요 2.1 MFC 의개요 2.2 MFC 프로그램의구조 2.3 Visual C++ 의시작실습 2-1 Application Wizard 익히기 2.4 SDI 템플릿 2.5 MDI 템플릿 2.6 MFC 애플리케이션아키텍처실습 2-2 간단한 MFC 프로젝트만들기 MFC 의개요 MFC 윈도우애플리케이션을생성하기위해만들어진 C++ 클래스라이브러리 애플리케이션프레임워크를제공

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 CHAPTER 11. 자바스크립트와캔버스로게임 만들기 캔버스 캔버스는 요소로생성 캔버스는 HTML 페이지상에서사각형태의영역 실제그림은자바스크립트를통하여코드로그려야한다. 컨텍스트객체 컨텍스트 (context) 객체 : 자바스크립트에서물감과붓의역할을한다. var canvas = document.getelementbyid("mycanvas"); var

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우. 소프트웨어매뉴얼 윈도우드라이버 Rev. 3.03 SLP-TX220 / TX223 SLP-TX420 / TX423 SLP-TX400 / TX403 SLP-DX220 / DX223 SLP-DX420 / DX423 SLP-DL410 / DL413 SLP-T400 / T403 SLP-T400R / T403R SLP-D220 / D223 SLP-D420 / D423

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 08 함수 01 함수의개요 02 함수사용하기 03 함수와배열 04 재귀함수 함수의필요성을인식한다. 함수를정의, 선언, 호출하는방법을알아본다. 배열을함수의인자로전달하는방법과사용시장점을알아본다. 재귀호출로해결할수있는문제의특징과해결방법을알아본다. 1.1 함수의정의와기능 함수 (function) 특별한기능을수행하는것 여러가지함수의예 Page 4 1.2

More information

10 장세균전프로그래밍 10.1 게임룰 (1) 사람과컴퓨터가싸우는 2인용보드게임이다. (2) 사람이먼저움직이고, 컴퓨터가움직인다. (3) 세균을가로및세로방향으로 2칸까지빈칸으로이동시킬수있다. (4) 1칸을이동할경우에는복제가된다. (5) 이동한후주변세균은내편으로바뀐다.

10 장세균전프로그래밍 10.1 게임룰 (1) 사람과컴퓨터가싸우는 2인용보드게임이다. (2) 사람이먼저움직이고, 컴퓨터가움직인다. (3) 세균을가로및세로방향으로 2칸까지빈칸으로이동시킬수있다. (4) 1칸을이동할경우에는복제가된다. (5) 이동한후주변세균은내편으로바뀐다. 10 장세균전프로그래밍 10.1 게임룰 (1) 사람과컴퓨터가싸우는 2인용보드게임이다. (2) 사람이먼저움직이고, 컴퓨터가움직인다. (3) 세균을가로및세로방향으로 2칸까지빈칸으로이동시킬수있다. (4) 1칸을이동할경우에는복제가된다. (5) 이동한후주변세균은내편으로바뀐다. (6) 둘다이동할수없으면, 경기가종료된다. (7) 가장많은세균을가진사람이이긴다. 10.2 기초지식

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information