Please enable JavaScript in your browser to load website properly.

Click here if you'd like to learn how. 도움 한번부탁드리겠습니다..! (C++ 2학년 수준) : 공부 - 와이고수
기록실
채팅 0
게임 0
유물

공부

도움 한번부탁드리겠습니다..! (C++ 2학년 수준) [2]

Minerals : 1,255,207 / Level : 중령 중령
2021-03-20 17:15:40 (4년 전) / READ : 834

방향키 위 방향 누르면 별 하나 더 생성되고

아래방향누르면 별 하나 없어지되

별 갯수 5에서 더이상 안만들어지게 if(n<4)

갯수 1개에서 더이상 안줄어들게 if (n>=0)

설정해놓았는데 별 갯수가 무한대로 늘어나고 무한대로 줄어듭니다..

설정해놓은 별갯수 범위를 벗어난상태로 프로그램을 종료하면 이렇게 뜨네요.. 어떻게 해결해야될까요 너무 막막합니다 ㅠㅠ..........

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ이것은 소스코드입니다

 

// '*' 문자가 주기적으로 이동하는 프로그램

// 커서 이동, clock을 이용한 경과 시간 계산, 난수 발생(rand) 등 필요


#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

#include <Windows.h>

#include <conio.h>


#define KEY_ESC 27

#define KEY_UP (256 + 72)

#define KEY_DOWN (256 + 80)

#define KEY_LEFT (256 + 75)

#define KEY_RIGHT (256 + 77)


void CursorInvisible(void);

void GotoXY(int x, int y);

int GetKey(void);

double GetElapsedTime(clock_t initial);


typedef struct Point

{

int x;

int y;

int xspeed;                      // 오른쪽

int yspeed;                    // 아래쪽

}Point;


int main(void)

{

CursorInvisible();                      // 커서 안 보이게 설정

system("mode CON COLS=80 LINES=25");    // 콘솔창 크기 (가로80x세로25)

srand(time(NULL));


Point *stars = new Point[5];

stars[0].x = (rand() % 78) + 1;          // 1~78, 최초 시작점이 가장자리에 있지 않도록

stars[0].y = (rand() % 23) + 1;          // 1~23

stars[0].xspeed =  1;

stars[0].yspeed =  1;

GotoXY(stars[0].x, stars[0].y);

cout << "*";


int n = 0; //현재 별의 갯수 -1

clock_t initial_clock = clock();

bool stop = false;


while (true)

{

if (_kbhit())

{

int ch = GetKey();


if (ch == KEY_ESC)          // Esc 키를 누르면 종료

stop = !stop;


if (ch == KEY_UP)

{

if (n < 4);

{

n++;

stars[n].x = (rand() % 78) + 1;          // 1~78, 최초 시작점이 가장자리에 있지 않도록

stars[n].y = (rand() % 23) + 1;          // 1~23

stars[n].xspeed = 1;

stars[n].yspeed = 1;

}

}


if (ch == KEY_DOWN)

{

if (n >= 0);

{

GotoXY(stars[n].x, stars[n].y);

cout << " ";

n--;

}




}

}


if (stop)

break;


if (GetElapsedTime(initial_clock) >= 0.1)    // 0.1초가 지났다면

{

for (int i = 0; i <= n; i++)

{

GotoXY(stars[i].x, stars[i].y);

cout << " ";


if (stars[i].x <= 0 || stars[i].x >= 79)            // 좌우 벽에 부딪혔다면

stars[i].xspeed = -stars[i].xspeed;


if (stars[i].y <= 0 || stars[i].y >= 24)            // 상하 벽에 부딪혔다면

stars[i].yspeed = -stars[i].yspeed;


stars[i].x += stars[i].xspeed;

stars[i].y += stars[i].yspeed;


GotoXY(stars[i].x, stars[i].y);

cout << "*";

}

initial_clock = clock();

}

}


return 0;

}


double GetElapsedTime(clock_t initial)

{

clock_t current = clock();

return (double)(current - initial) / CLOCKS_PER_SEC;    // 초 단위 값 반환

}


void GotoXY(int x, int y)

{   // COORD 구조체 변수를 통해 이동할 위치 설정

COORD pos;

pos.X = x;

pos.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

}


void CursorInvisible(void)

{

CONSOLE_CURSOR_INFO ci = { 100, FALSE };

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &ci);

}


int GetKey(void)

{

int ch = _getch();


if (ch == 0 || ch == 224)

// 방향키의 경우 0 또는 224의 값이 먼저 입력됨

ch = 256 + _getch();

// 그 다음에 해당 방향키에 따라 72(Up), 

// 80(Down), 75(Left), 77(Right) 값이 입력됨

return ch;

}

 

신고
  • 댓글이 2 개 달렸습니다.
글목록 이전글 다음글
글쓰기


공부

🎉 미네랄 와토 베타 테스트 게시판 오픈 안내 (16) YGOSU 25.06.18-
[정보] [마케팅국비교육] 비전공자도 가능! 마케팅 취업 준비 끝판왕 교육 A to Z 아이티윌 부산7925.07.23-
취업 썰 풀면 치킨 준다는데? 룰루랄라룰루룰루10925.07.22-
[질문] 공부방법에 대해서 질문드립니다. (2)스페이너10225.07.21-
[정보] 학점이 곧 권력”… 고교학점제, 강남 조폭이 설계했다 Hannam12625.07.17-
공게 글좀재미있는토스9325.07.17-
공부시작재미있는토스10025.07.14-
[정보] [아이티윌부산] 마케팅 신입 취업 성공 : 비전공자도 가능한 국비 마케팅 취업교육 아이티윌 부산17325.07.10-
LH 서류합 스펙 확인! 룰루랄라룰루룰루17525.07.08-
[정보] [자바 개발자 KDT 과정] 신기술 IT 6개월 취업반 / 2개월 심화반 실무 인재 양성  아이티윌 부산18125.07.04-
사교육 내신+학생부가 수능논술까지 제도개선요청 [국민청원동의]키랄 합성물18125.06.30-
[질문] 709 ㅇㄷ?모내기파보스25125.06.30추천 3
[정보] [자바 개발자 KDT 과정] 신기술 IT 6개월 취업반 / 2개월 심화반 실무 인재 양성  아이티윌 부산18025.06.27-
각국 유학 도시 top3 라는데 (1) lede1223425.06.25-
오늘 공무원 시험이었는데 역대급 (1)낭만이야34925.06.21-
[정보] [자바 개발자 KDT 과정] 신기술 IT 6개월 취업반 / 2개월 심화반 실무 인재 양성  아이티윌 부산17725.06.20-
자격증 10개 찍었다 (13) 와이생산고수58225.06.15추천 3
[정보] [자바 개발자 KDT 과정] 신기술 IT 6개월 취업반 / 2개월 심화반 실무 인재 양성  아이티윌 부산27325.06.13-
기사시험 실기 3트째 불합이다.. (8)백수저격기44125.06.13추천 2
컴활 자료집 무료배포 룰루랄라룰루룰루25425.06.12-
연봉 3600이면 많이 버는 줄 알았는데 (2)위드123825.06.02추천 5
[정보] 여기가..그... (1)현빈61025.06.01추천 6
나는 중국을 (1)bdzhd51525.05.31추천 5
[정보] [★고용노동부 5년인증 우수훈련기관] K-디지털트레이닝 신기술 IT 실무 인재 양성 모집  아이티윌 부산44825.05.30-
대통령 선거 투표 관련해서 궁금한 게 하나 있음 (4)ygo012543425.05.29추천 2
[질문] 공장 생산직 다니면서 공부 가능하냐 (4)Nasir54725.05.29추천 2
글쓰기