쓰레드 관련....
난초
질문 제목 : c언어 콘솔 환경에서 쓰레드 사용질문 요약 :_beginthreadex 함수를 통한 쓰레드사용방법.... 좀 알려주세요 ..
보통 쓰레드에 대해 알려면 시스템 프로그래밍쪽 공부해야하나요?질문 내용 : 안녕하세요.
c언어로 콘솔환경에서 구동되는 게임을 제작중입니다 ㅠㅠ
아직 도스창에서 벗어나지 못했습니다 ㅋㅋ
게임은 aos 형식으로 제가 좋아하는 게임인 lol을 모태로 기획했습니다.
현재 게임 제작 진행 상황이 맵구성, 플레이어 이동, 플레이어 근접 공격 정도입니다.
헌데 제가 여기서 문제되는것이 aos 게임이면 플레이어만 움직이는 것이아니라
적 ai 이며, 우리편 미니언, 상대편 미니언 등등이 다 각각 움직여야 한다는 것에서
잠시 벽에 부딪쳤습니다..
그래서 인터넷을 다 뒤지며 찾아본 방법이 쓰레드 함수를 사용하는 것인데..[code]unsigned __stdcall thread1(void *arg){while(1){playermove();sleep(500000000);}}
int main(){handle th=0;maininit();for( ; ; ) {if(getasynckeystate(vk_escape) 0) break;th = (handle)_beginthreadex(null, 0, thread1, 0, 0, null);playerattack_act();sleep(70);}closehandle(th);return 0;}[/code]
쓰레드 함수를 찾아보고 저의 소스코드에 적용시켜본 결과입니다.
먼저 maininit() 모든 데이터들을 다 초기화 하고 화면에 뿌립니다.
후에 무한루프가 돌면서 쓰레드를 부르고 쓰레드에서는playermove() 를 통해 방향키 이동을 검사합니다.
playerattack_act() 는 스페이스바가 눌렸는지 체크하는 함수입니다.눌리면 플레이어 이동방향 바로 위 또는 옆 아래에 공격 모션이 생기게 되죠.
이 소스코드 그대로 하면 플레이어 이동도 원활하고 공격 모션도 원활합니다..
이제 제가 드리고 싶은 질문은 ;;
지금 제 소스코드에서 쓰레드가 어떤 원리로 실행되는건지 쓰레드 함수들이 어떻게 동작하는건지..
또 혹시 쓰레드에 관해서 많이 알고계시다면 제가 aos 바탕으로 플레이어, 미니언들, 적ai 를 다 각각의
쓰레드로 작성하고 싶은데 어떻게 구성하면 좋을지 등등 을 좀 알려주세요 ㅜㅠㅠ
제 소스코드입니다.
https://www.dropbox.com/s/jsic6jkv9w3okwa/consoleapplication1.zip
혹은 첨부 파일 보시면됩니다..
-
바람
저게..ㅋㅋ 쓰레드를 돌려보니까 실행속도가 너무 빠르더라구요.... 그래서 인자가 저렇게 들어갔습니다....ㅋㅋㅋ
아.. 말그대로 모든 유닛의 좌표가 게속 업데이트 되는 방식을 사용하는게 일반적인방법이군요... 흠
감사합니다 !! -
찬내
1. 저 Sleep 의 인자가 500000000 로 하신 이유가 뭐에요?
2. 일반적인 게임은 가령 1초에 한번씩 모든 AI, 모든 유닛이동좌표 를 계속 업데이트 하고
다른 스레드에서는 AI 나 유닛의 좌표를 변형 시키는 방식이죠 -
핑1크캣
그럼 일반적인 게임들은 어떤식으로 프로그램이 구성되나요??
하나의 스레드를 구성하지 않고도 가능한가요??..
제 프로그램에서 구현해보니까 플레이어가 이동할때마다 전체적인 프로그램의 속도가 저하 됩니다...
ㅠㅠ 그래서 플레이어의 이동은 따로 스레드로 빼야할거같아서.... -
오나미
스레드 익숙치 않으시니깐
스레드 하나만 생성하시고요 그 내부에서 이동,AI, 등을 모두 호출해서 사용하시면 되요
일반적인 게임은 말씀하신것 처럼 각각의 스레드로 작동되지는 않습니다
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2694229 | 단순한 질문이요 (8) | 여름 | 2025-05-09 |
2694202 | 용돈을 가지고 할 수 있는 일을 여러가지로 출력하는 방법 좀 알려주세요! (2) | 미나 | 2025-05-09 |
2694145 | 화면깜빡임을 없애고 싶은데요... (1) | 어서와 | 2025-05-08 |
2694069 | unsigned 질문입니다. | 힘차 | 2025-05-07 |
2694012 | 전공 비전공자 개발자 (10) | 말글 | 2025-05-07 |
2693984 | 오버로딩이 무엇인가요? (2) | 헛매질 | 2025-05-07 |
2693956 | PlaySound재생이 안됩니다!(C에 음악넣기) | 지존 | 2025-05-06 |
2693928 | &와 *의 사용에 관한 명확한 이해 | 제나 | 2025-05-06 |
2693903 | 반복문 설명좀요 ㅠㅠ (2) | 란새 | 2025-05-06 |
2693869 | stdio.h 는 왜 쓰는건가요? (1) | 큰꽃들 | 2025-05-06 |
2693842 | 포인터 변수의 주소값끼리 더하는 것에 대해서 질문드립니다. (1) | 진솔 | 2025-05-05 |
2693811 | 소수 출력;;;; | 화이트캣 | 2025-05-05 |
2693788 | 이런 함수는 없나요? (3) | 앤드류 | 2025-05-05 |
2693758 | txt파일 불러와서 행렬로 저장 | 큰애 | 2025-05-05 |
2693727 | scanf 오류 문제!! (2) | 큰나래 | 2025-05-04 |
2693704 | 구조체 주소록 문제인데 도와주세요 (2) | 도1도캣 | 2025-05-04 |
2693676 | 열혈강의 c언어 질문입니다 | 하양이 | 2025-05-04 |
2693647 | 12.620000 을요 12.620 으로 어떻게 표현해요? (2) | 파도 | 2025-05-04 |
2693619 | 타이틀 코드.. | 단순드립 | 2025-05-03 |
2693591 | 컴파일 에러에서 질문드립니다 (3) | 게자리 | 2025-05-03 |