지금 문제가 입력받은 문자열이 화면에 랜덤하게 나타나게 하고
그걸 마우스로 클릭하면 점점 속도가 빨라지고 클릭 못하면 화면이 문자열이 나타나는 속도가 느려지다
결국 멈추는 게임인데
지금 내 껀 마우스 클릭을 받아야만 다음 랜덤 화면이 출력되더라고 원래는 계속 화면에 문자열이 랜덤하게 출력되어야 하는데..
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
int H(char* ptr);
void gotoxy(int x, int y) // 커서위치조정 gotoxy를 사용하기 위함
{
COORD Cur={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Cur);
}
void main(void)
{
/*UART 통신 부분*/
HANDLE hSerial;
int i = 0;
int C=0;
int Count = 0;
const char good[10]="good";
const char bad[10]="bad";
unsigned long bytes_written;
DCB dcbSerialParams = {0};
COMMTIMEOUTS timeouts = {0};
hSerial = CreateFile("COM2",GENERIC_READ | GENERIC_WRITE,
0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hSerial==INVALID_HANDLE_VALUE) {
if(GetLastError()==ERROR_FILE_NOT_FOUND) {
printf("Serial port does not exist\n");
}
printf("\t ERROR : Failed to access to COM4 successfully \n");
}
dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
if(!GetCommState(hSerial, &dcbSerialParams)) {
printf("\t ERROR : Failed to get Serial Parameters \n");
}
dcbSerialParams.BaudRate=CBR_57600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
timeouts.ReadIntervalTimeout=50;
timeouts.ReadTotalTimeoutConstant=50;
timeouts.ReadTotalTimeoutMultiplier=10;
timeouts.WriteTotalTimeoutConstant=50;
timeouts.WriteTotalTimeoutMultiplier=10;
if(!SetCommTimeouts(hSerial, &timeouts)) { printf("\t ERROR : Time Out \n\n"); }
srand(GetTickCount());
char name[30];
char *str = name;
printf("학번과 이름을 입력하시오 : ");
scanf("%s",name);
/*학번 출력 및 판정후 결과 출력*/
for(;;) {
C=H(str);
if(C==0) { //H()에서 0이 리턴되었을시에 배열W출력
WriteFile(hSerial, bad,4,&bytes_written,NULL);
}
else if(C==1) { //H()에서 1이 리턴되었을시에 배열R출력
WriteFile(hSerial, good,4,&bytes_written,NULL);
}
Count++;
if(Count==30)
break;
}
CloseHandle(hSerial);
}
int H(char* ptr)
{
int c, d;
POINT p;
srand((unsigned int)time(NULL)); // 난수생성
while(1) {
system("cls"); //화면을 지웁니다
gotoxy(p.x=rand()P,p.y=rand()%); //랜덤한위치로 커서이동
printf("%s",ptr);
Sleep(1000);
Mouselick(&c,&d);
if((c >= p.x && c<=p.x+strlen(ptr)) && (d == p.y))
return 1;
else
return 0;
}
}
void Mouselick(int *x, int *y)
{
HANDLE hIn, hOut;
DWORD dwNOER;
INPUT_RECORD rec;
COMMTIMEOUTS timeouts={0};
hIn=GetStdHandle(STD_INPUT_HANDLE);
hOut=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleMode(hIn, ENABLE_PROCESSED_INPUT | ENABLE_MOUSE_INPUT);
while( 1 ){
ReadConsoleInput(hIn,&rec,1,&dwNOER);
if( rec.EventType == MOUSE_EVENT ){
if( rec.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED ){
*x = rec.Event.MouseEvent.dwMousePosition.X;
*y = rec.Event.MouseEvent.dwMousePosition.Y;
if(timeout(1)==1)
{
break;
}
return ;
}
}
}
}
int timeout (int seconds)
{
clock_t endwait;
endwait = clock () + seconds* CLOCKS_PER_SEC;
while(clock()<endwait) {}
return 1;
}
한번 추측해보자면... 스레드를 돌려야하지 않을까영..
비동기식 입력을 얘기하는 게 아닐까 싶다. << 이렇게 애매하게 표현하는 것은 모르기 때문이다.
쓰레드가 뭔가유 지금 개념설명도 따로 없이 예제만 던져주고 과제하라고 하는 상황이라ᆢ
리눅스 환경 같긴 한데
http://sugerent.tistory.com/192
참고해
ㄴㄴ 검색해보고 공부하면 됩니다.