4 1 0 Main Main b 1 i
4. 1. 0 모듈설계-상세설계 Main 모듈명 알고리즘 동작 메뉴선택 형 기능적 Main(){ b 1 i = Load. Bitmap(g_h. Inst, MAKEINTRESOURCE(IDB_BITMAP 173)); // 메인메뉴이미지 로드 b 1 = Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_OWNERDRAW, 50, 80, 40, h. Wnd, (HMENU)IDC_b 1, g_h. Inst, NULL); //싱글플레이 선택단추 생성 b 2 = Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON | BS_OWNERDRAW, 100, 80, 40, h. Wnd, (HMENU)IDC_b 2, g_h. Inst, NULL); //멀티플레이 선택단추 생성 b 3= Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON | BS_OWNERDRAW, 150, 80, 40, h. Wnd, (HMENU)IDC_b 3, g_h. Inst, NULL); //저장곡 듣기 선택단추 생성 b 4 = Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON|BS_OWNERDRAW, 50, 130, 40, h. Wnd, (HMENU)IDC_b 4, g_h. Inst, NULL); //끝내기 메뉴선택 단추 생성 Invalidate. Rect(h. Wnd, NULL, false); // 화면 다시그리기 if (num == 1){ Select. U(); // 싱글플레이 메뉴(악기선택메뉴) 호출} else if(num == 2){ Multi(); // 멀티플레이 메뉴호출} else if(num == 3){ Load()// 저장곡듣기 메뉴 호출} else if(num == 4){Send. Message(h. Wnd, WM_CLOSE, 0, 0); //프로그램종료 } }
4. 2. 0 모듈설계-상세설계 모듈명 알고리즘 Select. U 동작 악기선택 및 악기음원 로드 Select. U(){ s 1 i = Load. Bitmap(g_h. Inst, MAKEINTRESOURCE(IDB_BITMAP 173)); // 메인메뉴이미지 로드 piano = Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_OWNERDRAW, 50, 80, 40, h. Wnd, (HMENU)IDC_b 1, g_h. Inst, NULL); //피아노 선택단추 생성 drum = Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON | BS_OWNERDRAW, 100, 80, 40, h. Wnd, (HMENU)IDC_b 2, g_h. Inst, NULL); //드럼 선택단추 생성 guitar= Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON | BS_OWNERDRAW, 150, 80, 40, h. Wnd, (HMENU)IDC_b 3, g_h. Inst, NULL); //기타 듣기 선택단추 생성 back = Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON|BS_OWNERDRAW, 50, 130, 40, h. Wnd, (HMENU)IDC_b 4, g_h. Inst, NULL); //이전화면 메뉴선택 단추 생성 Invalidate. Rect(h. Wnd, NULL, false); // 화면 다시그리기 // 나머지 if의 내용은 위의 알고리즘과 유사. if (select. S == 1){ Snd. Stop(SND_SCOPE_PROCESS, NULL); switch (p 1) { case 1: len[0] = swprintf(File. Name, L"%s", L"1. wav"); break; // 이하 중략 영역별로 눌렸을때 재생될 음원로드 } else if(select. S == 2){ // 드럼선택시} else if(select. S == 3){ // 기타선택시} else if(select. S == 4){Send. Message(h. Wnd, WM_BACK, 0, 0); //이전화면으로 } Select. Sing(); // 곡 선택 모드 호출 형 순차적
4. 3. 0 모듈설계-상세설계 모듈명 play. Data 동작 저장된 데이터를 로드 형 기능적 play. Data(Select. M){ if(Select. M== 1){ for(i=0; i<20; i++){ if(strcmp(sing. Name, data[i])==0) value=i; break; 알고리즘 } memset(sing, 0, sizeof(sing)); // 곡을 저장할 배열 데이 터 초기화 jumsu = 0; // 점수를 0으로 선택 //음악곡로드 sprintf(sing, "%s", Snd. Load. Async(g_h. Sound[value], sizeof(g_h. Sound[value])); play. Game(); } else{ //이하생략 프리모드로 위와 동일} }
4. 4. 0 모듈설계-상세설계 모듈명 free. Data 동작 게임실행, 소리를 재생녹음 형 순차적 free. Data(){ s 1 i = Load. Bitmap(g_h. Inst, MAKEINTRESOURCE(IDB_BITMAP 188)); Invalidate. Rect(h. Wnd, NULL, false); Snd. Save. Async(h. Sound[sound]); // 사운드를 녹음하는 기능 오 픈 알고리즘 if(dalogimage==1){ //건반의 영역을 설정하여 눌렸을때 음이 재 생되게 함 if(30<n. X && n. X<60 &&140<n. Y&& n. Y<200 &&){ p 1[choice-1]=0; if(p 1[choice-1]==0) while(p 1[choice-1]!=0) {Snd. Play. Async(g_h. Sound[choice], 0); } Snd. Stop(SND_SCOPE_PROCESS, NULL); } } // 이하 생략 각 영역 별로 출력되는 음원의 설정을 해야 한다.
4. 5. 0 모듈설계-상세설계 모듈명 알고리즘 end. Game 동작 점수확인 화면 형 기능적 end. Game(){ int bad = total-jumsu; // bad 의 개수를 카운트 int sum = bad *500 + jumsu* 1000; //점수를 저장하는 변수 char v; // 랭크를 표현해주는 변수 if(sum>300000) v= 'A' else if(sum>200000) v= 'B'; else v='C'; menu 3 = Load. Bitmap(g_h. Inst, MAKEINTRESOURCE(IDB_BITMAP 400)); m 1 = Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE |BS_READONLY| BS_OWNERDRAW, 100, 80, 40, h. Wnd, (HMENU)IDC_b 2, g_h. Inst, NULL); // perfect 개수 표시하는 메시지 m 2 = Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE |BS_READONLY| BS_OWNERDRAW, 140, 120, 40, h. Wnd, (HMENU)IDC_b 2, g_h. Inst, NULL); // bad 개수 표시하는 메시지 m 3 = Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE |BS_READONLY| BS_OWNERDRAW, 140, 120, 40, h. Wnd, (HMENU)IDC_b 2, g_h. Inst, NULL); // total 점수 표시하는 메시지 }
4. 6. 0 모듈설계-상세설계 모듈명 save. Game 동작 데이터 저장 형 기능적 save. Game(){ int data; if(data==1){ //저장하기를 선택한다면 write("newdata" , h. Sound[sound], 알고리즘 sizeof(h. Sound[sound])); memset(h. Sound, 0, sizeof(h. Sound)); // 음 악을 저장한 배열을 삭제 } else memset(h. Sound, 0, sizeof(h. Sound)); }
4. 7. 0 모듈설계-상세설계 모듈명 알고리즘 multi. H 동작 멀티플레이 호스트기능 형 기능적 int serv_sock; int conn_sock; struct sockaddr_in serv_addr; struct sockaddr_in conn_addr; int addrlen; char message[] = "Connect!n"; /* create a stream socket for TCP and IP */ serv_sock = socket(PF_INET, SOCK_STREAM, 0); if(serv_sock == -1) error_print("socket() error"); memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr. sin_family = AF_INET; serv_addr. sin_addr. s_addr = htonl(INADDR_ANY); serv_addr. sin_port = htons(atoi(port)); if(bind(serv_sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr))== -1) error_print("blind() error"); if(listen(serv_sock, 5) == -1) error_print("listen() error !"); addrlen = sizeof(conn_addr); conn_sock = accept(serv_sock, (struct sockaddr *)&conn_addr, &addrlen); if(conn_sock == -1) error_print("accept() error"); write(conn_sock, message, sizeof(message)); close(conn_sock); return (0); }
4. 7. 0 모듈설계-상세설계 Multi. C 모듈명 동작 멀티플레이 클라이언트기능 int cli_sock; struct sockaddr_in serv_addr; char message[30]; int str_len; cli_sock = socket(PF_INET, SOCK_STREAM, 0); 알고리즘 if(cli_sock == -1) error_print("socket() error"); memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr. sin_family = AF_INET; serv_addr. sin_addr. s_addr = inet_addr(addr); serv_addr. sin_port = htons(atoi(port)); if(conncet(cli_sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr))== -1) error_print("conncet() error"); str_len = read(cli_sock, message, sizeof(message)); if(strl_len == -1) error_print("read() error"); message[str_len] = 0; printf("Message from server : %s n", message); close(cli_sock); return (0); } 형 기능적
4. 8. 0 모듈설계-상세설계 모듈명 알고리즘 send. Data 동작 연주정보 배포 형 기능적 int serv_sock; int conn_sock; struct sockaddr_in serv_addr; struct sockaddr_in conn_addr; int addrlen; char message[] = "Connect!n"; /* create a stream socket for TCP and IP */ serv_sock = socket(PF_INET, SOCK_STREAM, 0); if(serv_sock == -1) error_print("socket() error"); memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr. sin_family = AF_INET; serv_addr. sin_addr. s_addr = htonl(INADDR_ANY); serv_addr. sin_port = htons(atoi(port)); if(bind(serv_sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr))== -1) error_print("blind() error"); if(listen(serv_sock, 5) == -1) error_print("listen() error !"); addrlen = sizeof(conn_addr); conn_sock = accept(serv_sock, (struct sockaddr *)&conn_addr, &addrlen); if(conn_sock == -1) error_print("accept() error"); send(conn_sock, data, sizeof(data)); close(conn_sock); return (0); }
4. 9. 0 모듈설계-상세설계 모듈명 Load 동작 저장된 곡의 로드 형 기능적 Load(){ int x, =60, y= 60; struct savefile[100]; for(i=0; i<sizeof(file); i++){ savefile[i]. name=file. name; 알고리즘 savefile[i]. data=file. sound; Create. Window(_T("button"), NULL, WS_CHILD | WS_VISIBLE |BS_READONLY| BS_OWNERDRAW, x, y, 40, h. Wnd, (HMENU)IDC_b 2, g_h. Inst, NULL); // 저장된 곡의 메뉴를 보여줌 x+=60; y+=60; } }
LOGO
- Slides: 56