javac.exe JavaWorld.java를 입력해서 만들려고 하니까 C:\java\download\pjt>javac.exe JavaWorld.java JavaWorld.java:5: error: ';' expected System.out.println("Hello Java World!!"): ^ 1 error 라고 뜨네요 파일 생성하는 과정 중애 잘 못 된것 같은데 어떻게 해야하나요..?
var fireDirection = aimTarget - fireTransform . position Shot ( fireTransform . position , fireDirection ); 목표 지점에서 총구 지점 뺴면 그 거리와 방향이 나오잖아요? 그런데 Shot함수 내에서 hitPosition = startPoint + direction * fireDistance ; 라고 마지막에 해버리던데, 시작 포인트에서 방향을 더하는 것까지는 알겠는데 그 방향에 fireDirection으로서 거리까지 다 포함되어 있는데 거기에 더해서 fireDistance를 곱하는 게 이해가 안 갑니다.. direction이 단위 방향이라면 이해가 가겠는데 말이죠..
API 검색해보니까 bit마스크라고 그러던데 만일 어떤 레이어1을 표현하는 2진수가 101010이면 처리되는 오브젝트 검사해서 101010레이어에 속해 있으면 레이어에 포함된 거로 친다고 하면요, ~ 붙여서 010101로 바꿔버리면, 그래서 Physics.Raycast(startPoint, direction, out hit, fireDistance, ~101010(=010101)) 했다고 치면 010101 레이어에 속해 있는 오브젝트들만 반응해야 하는 거 아닌가요?? ~ 연산자가 정확히 어떻게 되는 거죠?? 실제로는 101010이 아닌 레이어들 몽땅에게 적용되던데 비트 뒤집기라고 하면 010101인 레이어만 적용되어야 하는 거 아닐까요?
연습문제 중에 탱크예제에 포탄발사 소리를 넣으려고 하는데 해당 강의에서 배운 내용을 바탕으로 bulletSound()라는 함수를 만들고 if (isKeyPressedAndReleased(GLFW_KEY_SPACE)) { for (int i = 0; i < 5; ++i) { if (bullet[i]==nullptr) { bullet[i] = new MyBullet; bulletSound(); bullet[i]->center = tank.center; bullet[i]->center.x += 0.2f; .... 이런식으로 스페이스바 누르면 총알 나가는 구조 안에 bulletSound()를 추가했습니다. 그런데 이렇게하면 bulletSound() 함수 안의 while문(노래끝났으면 break;) 때문에 효과음이 끝나고나서야 총알이 발사가 됩니다. bulletSound()함수를 뒤에 위치시켜도 똑같은 결과가 나오구요. while문을 없애면 소리가 안나오고, if(!playing) break; 조건을 없애서 while(true) { system->update(); } 로 하자니 무한반복으로 계속 돌고 어떤 방법을 이용해야 총알과 소리가 같이 나올 수 있을까요 제가 놓치고 있는게 뭔지 알려주시면 감사하겠습니다.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #define TSIZE 45 #define LMAX 10 struct movie { char title[TSIZE]; float rating; }; void read_file(struct movie movie_list[], int* ptr_n_items) //값 바꿀수 잇어야 하므로 포인터로 저장 { char filename[TSIZE] = { 0, }; //버퍼역할을 하는 문자의 배열 printf("읽기위한 파일 이름 입력후 엔터 눌르셈"); printf(">>"); if (scanf("%[^\n]%*c", filename) != 1) { printf("Wrong input. Terminating\n"); exit(1); } FILE* file = fopen(filename, "r"); if (file == NULL) { printf("에러 : 파일 열 수 없음"); exit(1); } int num; //파일 몇개인지 읽는 거 if (fscanf(file, "%d%*c", &num) != 1) { printf("ERROR: 잘못된 파일 포맷"); exit(1); } for (int n = 0; n < num; ++n) { if (fscanf(file, "%[^\n]%*c", movie_list[*ptr_n_items].title) != 1 || fscanf(file, "%f%*c", &movie_list[*ptr_n_items].rating) != 1) { printf("ERROR 잘못된 파일 형식"); exit(1); } *ptr_n_items += 1; } assert(*ptr_n_items == num); fclose(file); printf("%d items have been read from the file\n", *ptr_n_items); } void write_file(struct movie movie_list[], int n_items) { char filename[TSIZE] = { 0, }; printf("파일 이름 입력하고 엔터 쳐주세요"); printf(">>"); if (scanf("%[^\n]%*c", filename) != 1) { printf("Wrong input . Terminating\n"); exit(1); } FILE* file = fopen(filename, "w"); if (file == NULL) { printf("ERROR : 파일 못염\n"); exit(1); } fprintf(file, "%d\n", n_items); for (int n = 0; n < n_items; ++n) { fprintf(file, "%s\n", movie_list[n].title); fprintf(file, "%f\n", movie_list[n].rating); } fclose(file); printf("%d items have been saved to the file\n", n_items); } int input_int() //사용자로부터 정수 입력 받는 경우 많기떄문에(자주 사용해서 하나 만듬) { int input; while (1) { printf(">>"); if (scanf("%d%*c", &input) == 1) return input; else { printf("숫자 입력후 엔터 눌러주세요\n"); while (getchar() != '\n') continue; } } } int input_menu() { while (1) { printf("\n 옵션 선택후 엔터 눌러주세요\n"); printf("1.print all items 2. print an item\n"); printf("3.Edit an item 4. add an item\n"); printf("5.insert an item 6.delete an item\n"); printf("7.delete all items 8.save file\n"); printf("9.search by name 10.quit\n"); int input = input_int(); if (input >= 1 && input <= 10) return input; else printf("%d is invalid. please try again\n", input); } } void print_all(struct movie movie_list[], int n_items) { for (int n = 0; n_items; ++n) printf("%d: \"%s\", %.1f\n", n, movie_list[n].title, movie_list[n].rating); } void print_an_item(struct movie movie_list[], int n_items) { printf("Input the index of item to print\n"); int index = input_int(); if (index < n_items) printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); else printf("invalid items\n"); } void edit_an_item(struct movie movie_list[], int n_items) { printf(" 수정하기 위한 아이템의 인덱스를 입력하세요"); int index = input_int(); if (index < n_items) { printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); printf("새 타이틀 입력후 엔터 쳐주세요"); printf(">>"); int f = scanf("%[^\n]%*c", movie_list[index].title); printf("새 평점 입력후 엔터 쳐주세요"); printf(">>"); f = scanf_s("%f%*c", &movie_list[index].rating); printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); } else printf("invlaid items\n"); } void add_an_item(struct movie movie_list[], int* ptr_n_items)//n_items is a pointer { if (*ptr_n_items == LMAX) { printf("NO more space\n"); return; } const int index = *ptr_n_items; printf("타이틀 입력후 엔터\n"); printf(">>"); int f = scanf("%[^\n]%*c", movie_list[index].title); printf("평점 입력후 엔터\n"); printf(">>"); f = scanf("%f%*c", &movie_list[index].rating); printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); *ptr_n_items += 1; } void insert_an_item(struct movie movie_list[], int* ptr_n_items) { if (*ptr_n_items == LMAX) { printf("공간 없음"); return; } printf("아이템 인덱스 입력"); int index = input_int(); //memmove(&movie_list[index+1], &movie_list[index], //sizeof(struct movie) * (*ptr_n_items -index)); /*for llop implemetation*/ for (int i = *ptr_n_items - 1; i >= index; i--) { strcpy(movie_list[i + 1].title, movie_list[i].title); movie_list[i + 1].rating = movie_list[i].rating; } //뒤에서 부터 한칸씩 앞으로 떙기는 거 printf("타이틀을 입력후 엔터 쳐주세요"); printf(">>"); int f = scanf("%[^\n]%*c", movie_list[index].title); printf("새 평점 입력후 엔터 쳐주세요"); printf(">>"); f = scanf("%f%*c", &movie_list[index].rating); printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); *ptr_n_items += 1; } void delete_an_item(struct movie movie_list[], int* ptr_n_items) { printf("아이템 인덱스 입력"); int index = input_int(); //memmove(&movie_list[index+1], &movie_list[index], //sizeof(struct movie) * (*ptr_n_items -index)); /*for llop implemetation*/ for (int i = index; i < *ptr_n_items; i++) { strcpy(movie_list[i].title, movie_list[i + 1].title); movie_list[i].rating = movie_list[i + 1].rating; } *ptr_n_items -= 1; } void search_by_name(struct movie movie_list[], int n_items) { printf("찾으려는 타이틀 입력"); printf(">> "); char title[TSIZE] = { 0, }; if (scanf("%[^\n]%*c", title) != 1) { printf("Wrong input\n"); return; } int index = 0; for (; index < n_items; ++index) { if (strcmp(movie_list[index].title, title) == 0) break; } if (index == n_items) printf("영화를 찾을 수 없읍니다 :%s\n", title); else printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); } int main() { struct movie movie_list[LMAX]; size_t n_items = 0; read_file(movie_list, &n_items); while (1) { printf("\n"); int s = input_menu(); switch (s) { case 1: print_all(movie_list, n_items); break; case 2: print_an_item(movie_list, n_items); break; case 3: edit_an_item(movie_list, n_items); break; case 4: add_an_item(movie_list, &n_items); break; case 5: insert_an_item(movie_list, &n_items); break; case 6: delete_an_item(movie_list, &n_items); break; case 7: n_items = 0; break; //& 있는애 있고 없는 애 있는데(n_items에서) 아이템 하나 추가 도ㅟ니까 값이 변해야 되므로 주솔르 넘겨준느 거. case 8: write_file(movie_list, n_items); break; case 9: search_by_name(movie_list, n_items); break; case 10: printf("Good bye\n"); exit(0); default: printf("%d is not implemented.\n", s); } } return 0; } 소스는 이렇게 다 따라 쳤는데 1번 실행하면 저렇게 에러가 뜨고 글자가 다 깨진 상태로 나오더라구요.. 이유를 알 수 있을까요?
질문에 앞서 좋은 무료강의를 공유해주셔서 진심으로 감사드립니다. 강의 잘 따라가고 있는데 코드상 문제가 없는데 네이버에서 오류가 납니다. 제 추측으로는 네이버 로그인 인증 2단계(모바일에서 예를 눌러야 하는 기능)와 관련이 있는 것 같은데 파이썬 자동화로 네이버 메일링을 하려면 새로 계정을 만들어서 트라이 하는 것이 유일한 방법일까요?