C 언어 Gotoxy | C언어 # Rpg 게임 만들기(11. 프로젝트에 파일추가 및 Gotoxy사용하기) 답을 믿으세요

당신은 주제를 찾고 있습니까 “c 언어 gotoxy – C언어 # RPG 게임 만들기(11. 프로젝트에 파일추가 및 gotoXY사용하기)“? 다음 카테고리의 웹사이트 th.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://th.taphoamini.com/wiki/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 제로클릭 이(가) 작성한 기사에는 조회수 1,070회 및 좋아요 5개 개의 좋아요가 있습니다.

Table of Contents

c 언어 gotoxy 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 C언어 # RPG 게임 만들기(11. 프로젝트에 파일추가 및 gotoXY사용하기) – c 언어 gotoxy 주제에 대한 세부정보를 참조하세요

30대 아재가 C언어 강의하는 방송

c 언어 gotoxy 주제에 대한 자세한 내용은 여기를 참조하세요.

c언어로 게임을, c언어 좌표계 gotoxy()함수

c언어로 게임을, c언어 좌표계 gotoxy()함수. 효묘 2019. 10. 1. 20:54. C언어 콘솔창으로 테트리스, 오목을 만들 수 있다. c언어를 처음 배우는 분들이 c언어 콘솔창 …

+ 더 읽기

Source: hyomyo.tistory.com

Date Published: 12/28/2021

View: 6563

[C언어] GotoXY()함수로 콘솔 창의 커서를 내 마음대로 이동하는 …

커서 이동함수 GotoXY(). C언어로 게임을 만들기 위한 첫번째 단계는. 바로 GotoXY()함수를 통해. 커서를 원하는 곳으로, 자유 자제로 이동하는 방법 …

+ 자세한 내용은 여기를 클릭하십시오

Source: dev-with-precious-dreams.tistory.com

Date Published: 1/16/2022

View: 2907

c언어 : gotoxy 활용, 좌표측량 및 간단한 게임만들기. – Eirene HUE

c언어를 공부하시는 분들이라면gotoxy에 대해서는 많이 들어보셨을겁니다. 콘솔창을 기반으로 하여 간단한 게임을 만들어볼때도 많이 쓰이고 좌표값을 …

+ 여기에 보기

Source: eirenehue.egloos.com

Date Published: 4/18/2022

View: 2070

C언어 | 콘솔창 출력위치 변경, GotoXY, COORD …

C언어 | 콘솔창 출력위치 변경, GotoXY, COORD, SetConsoleCursorPosition, GetStdHandle(STD_OUTPUT_HANDLE), windows.h. 씽쌩쏭 2021. 2. 21. 20:28. 320×100 …

+ 여기에 더 보기

Source: seongmikim.tistory.com

Date Published: 4/29/2022

View: 4399

c언어 좌표를 받아 커서이동 gotoxy

커서이동 함수 gotoxy c언어로 매크로를 만들어보고 싶어서 찾아보다가 알게되었습니다. 이 함수를 이용해서 콘솔에 원하는 좌표에 찍는것이 가능 …

+ 여기에 더 보기

Source: intunknown.tistory.com

Date Published: 3/8/2022

View: 2257

[C++ 언어-기초실습-18] gotoxy()함수로 커서 이동하기? – Hive

[C++ 언어-기초실습-18] gotoxy()함수로 커서 이동하기? 다운 사이트 : 웹컴파일러 : C언어에서 실습했던 내용인데 간단히 복습차원으로 화살표 커서를 움직이는 실습 …

+ 더 읽기

Source: hive.blog

Date Published: 3/20/2022

View: 975

[C언어/C++] 원하는 좌표로 커서 이동하기 … – 코딩팩토리

vo gotoxy(int x, int y){ //x, y 좌표 설정 COORD pos={x,y}; //커서 이동 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }.

+ 여기에 보기

Source: coding-factory.tistory.com

Date Published: 12/6/2022

View: 2883

[C] 방향키로 printf() 커서 위치 이동 (gotoxy) – 정보 기술 놀이터

MFC(Microsoft Foundation Class Library)를 사용하지 않는다면 C언어를 이용하여 GUI를 구성하는 것은 불가능하다.

+ 여기에 더 보기

Source: byunghyun23.tistory.com

Date Published: 2/7/2021

View: 7701

주제와 관련된 이미지 c 언어 gotoxy

주제와 관련된 더 많은 사진을 참조하십시오 C언어 # RPG 게임 만들기(11. 프로젝트에 파일추가 및 gotoXY사용하기). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

C언어 # RPG 게임 만들기(11. 프로젝트에 파일추가 및 gotoXY사용하기)
C언어 # RPG 게임 만들기(11. 프로젝트에 파일추가 및 gotoXY사용하기)

주제에 대한 기사 평가 c 언어 gotoxy

  • Author: 제로클릭
  • Views: 조회수 1,070회
  • Likes: 좋아요 5개
  • Date Published: 2016. 2. 9.
  • Video Url link: https://www.youtube.com/watch?v=l3Zu9ikJlFo

c언어로 게임을, c언어 좌표계 gotoxy()함수

C언어 콘솔창으로 테트리스, 오목을 만들 수 있다.

c언어를 처음 배우는 분들이 c언어 콘솔창으로 게임을 만들고 싶을 때가 있을겁니다.

테트리스, 스네이크게임, 오목, 바둑 등 여러 게임을 만들때는 보통 좌표계를 이용합니다. 왜냐하면 좌표계를 이용하면 굉장히 편리하기 때문이죠.

c언어 콘솔창 테트리스 /출처 : https://www.a-mean-blog.com/ko/blog/Text-Game-Maker-JS/Games/Tetris

Windows.h

Windows.h 헤더파일은 윈도우 개발자들이 필요한 모든 메크로들, 다양한 함수들과 서브시스템에서 사용되는 모든 데이터 타입들 그리고 윈도우 API의 함수들을 위한 정의를 포함하는 윈도우의 C 및 C++ 헤더 파일이다.

출처 : 위키백과

콘솔창에서 좌표계를 사용하고 싶다면, Windows.h를 인클루드 해야합니다.

#include//#include 소문자로도 가능

좌표계를 설정해주는 함수 만들기

#include #include void gotoxy(int x, int y); int main(void){ return 0; } void gotoxy(int x, int y){ COORD pos = {x,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }

위 함수 gotoxy()를 추가해줌으로써 콘솔 좌표계에 ‘점’을 찍을 수 있습니다. gotoxy(3,3);을 하면 ‘커서’가 콘솔의 3,3으로 가고, 이 상태에서 printf(“1”);을 해주면 3,3에 1이 찍히는 것을 볼 수 있습니다.

3,3에찍은 1 // 개발환경 dev c++

그런데 좀 이상하죠… 분명 3,3에 찍은 것 같은데, -3, 2정도에 찍힌 것으로 보입니다..

사실 이 함수는 우리가 평소에 알던 좌표계와는 다르게 y축이 아래쪽으로 향해있습니다.

그러면 왜 x좌표는 3에 가있지 않는 것인가요?

그 이유는 알파벳의 크기에 있습니다. 예를 들어 ‘a’는 높이가 1이라 하면, 가로가 0.5이기 때문에 알파벳 두 개가 연속적으로 있어야 정사각형 인 것을 알 수 있습니다. 모든 알파벳의 크기가 1×0.5이며, 한글이나 한자는 1×1입니다.

즉, 테트리스 블럭같은 경우 크기가 1×1이므로 좌표계를 재설정 할 필요가 있습니다.

#include #include void gotoxy(int x, int y); int main(){ gotoxy(3,3); printf(“1”); return 0; } void gotoxy(int x, int y){ COORD pos = {x*2,y};//여기만 바뀜 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }

다시 설정한 함수로 3,3을 찍음

이제 좀 원하는 대로 나온 것 같네요. 이제 저 1을 테트리스 블럭으로 바꿔주기만 하면 될 것 같네요.

#include #include void gotoxy(int x, int y); int main(){ gotoxy(3,3); printf(“□”);//한글 ㅁ을 누르고 한자키를 누르면 2번째 페이지에 있음 return 0; } void gotoxy(int x, int y){ COORD pos = {x,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }

저 ‘ㅁ’은 특수 문자로써 알파벳의 두 칸을 차지하므로, 1×1크기 입니다.

ㅁ을 찍자.

이제 블럭을 지우는 일만 남았네요.

블럭을 지우는 방법 / 화면을 초기화 하는 방법

제 기준으로 블럭을 나누는 방법은 크게 두 가지가 있다고 생각합니다.

첫 번째로 gotoxy함수로 지울 위치에 간 후에 printf(” “);로 지우기.

두 번째는 system(“cls”);로 지우는 방법이 있습니다.

위 두가지 방법은 서로 장단점이 있습니다. 하지만 저는 첫 번째 방법을 선호합니다.

첫 번째 방법:

printf(” “);//스페이스 두 칸입니다.

이 방법은 gotoxy로 블럭을 지울 위치에 가서 블럭을 하나 지워줍니다. gotoxy로 직접 가야한다는 불편함이 있지만, 속도가 빠릅니다.

두 번째 방법:

system(“cls”);입니다. 이 방법은 cmd에서 cls명령어를 치는 것과 똑같습니다. 화면 전체를 지웁니다. 첫 번째 방법보다는 번거로움이 덜 하지만, 매우 느린 속도로 작동하므로, 화면의 블럭(혹은 알파벳, 무엇이든)들이 깜박거리는 것을 볼 수 있습니다.

깜박거리는 커서 없애기

c언어로 코드를 짜고 실행시켜보면, 입력을 받을 때, 입력하는 부분이 깜박거리는 것을 볼 수 있습니다. 하지만 테트리스나 오목같은 게임에서 이런 지저분한 커서는 필요가 없습니다. 다행이도 거슬리는 커서를 없앨 방법이 있습니다. 코드 4줄로 해결이 가능합니다.

#include #include #include void gotoxy(int x, int y); int main(){ CONSOLE_CURSOR_INFO cursorInfo = { 0, }; cursorInfo.bVisible = 0; cursorInfo.dwSize = 1; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo); gotoxy(3,3); printf(“□”); getch(); return 0; } void gotoxy(int x, int y){ COORD pos = {x*2,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }

이러면 커서가 깔끔하게 지워진 것을 볼 수 있습니다.

이제 간단한 게임을 만들 때 필요한 것은 모두 같췄습니다. 물론 진짜 할만한 게임을 만들려면 훨씬 복잡한 코드를 짜야겠지만, 조금만 생각하면 오목 정도는 쉽게 만들 수 있습니다.

[C언어] GotoXY()함수로 콘솔 창의 커서를 내 마음대로 이동하는 방법

728×90

커서 이동함수 GotoXY()

C언어로 게임을 만들기 위한 첫번째 단계는

바로 GotoXY()함수를 통해

커서를 원하는 곳으로, 자유 자제로 이동하는 방법을 알아야 합니다!!

GotoXY()함수를 사용하기 위해선

#include 헤더파일을 선언해 준 다음에!!

void GotoXY(int x, int y) { COORD Pos; Pos.X = x; Pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos); }

위와 같이 함수를 선언해 주시면 됩니다!!

그 후 내가 콘솔창의 원하는 좌표 값을 GotoXY의 매개변수로 x, y값을 보내면

해당 좌표로 이동하게 됩니다. !!!!

TMI,, COORD가 무엇인가요???

COORD의 정의를 보시면,

구조체로 정의가 되어있습니다.

COORD 구조체는 X, Y값을 멤버 변수로 저장할 수 있습니다.

따라서 GotoXY함수안에서 X,Y 값을 저장할 수 있는 COORD 구조체를 Pos로 선언한 것입니다. 따라서 Pos는 COORD구조체 안에 있는 멤버변수인 X, Y를 . 연산자를 통해 사용이 가능합니다. ex) Pos.X = 12 ; Pos.Y = 2;

GotoXY함수에는 x, y 두개의 매개변수가 있는데,

콘솔창에서 내가 원하는 곳의 좌표값!을 매개변수인 x ,y로 넘겨 주면

그 매개변수 값을 Pos.X , Pos.Y에 각각 저장 후,

SetConsoleCursorPosition 함수

( 지정 된 콘솔 화면 버퍼에서 커서 위치를 설정해주는 함수)

콘솔 화면 버퍼에 대한 표준 출력 핸들GetStdHandle(STD_OUTPUT_HANDLE) 와, x,y의 좌표 정보를 담고있는 Pos를 매개변수로 받아서 해당 Pos의 x, y 좌표값으로 커서위치를 설정해줍니다.

저도 처음엔 이 함수의 정의를 알고 싶어서

엄청 이해하고자 해맸었습니다.

하지만!!!

이 함수의 정의를 이해하기 보단, 함수를 선언해놓은 다음에

일반 함수 사용하듯이!!!!!

main문에서 임의의 좌표값을 준 다음에 printf(“하하하”) 이런식으로

임의의 좌표값을 몇번 매개변수로 넘기면서 사용하면

금방 “오호라? 그냥 요런 녀석이고만?” 임을 알게 되실겁니다.

예를들어

#include #include void GotoXY(int x, int y) { COORD Pos; Pos.X = x; Pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos); } int main(void) { GotoXY(30, 5); printf(“어디에 출력되나?

“); return 0; }

콘솔창의 맨왼쪽위의 좌표값은 항상 (0,0) 입니다.

(0,0)을 기준으로 두었던 커서값이 GotoXY(30,5) ;

X좌표로 30, Y좌표로 5칸 가라는 함수의 선언에 커서값이 변경된 것입니다.

콘솔창의 (0 , 0) 을 기준으로

오른쪽으로 갈수록 x값++;

아래로 갈수록 y값 ++;로 생각하시면 아주 편합니다.

그래서 결론은,

함수의 정의에 신경쓰지 말고,

함수를 선언한 후에 내가 출력하고 싶은 좌표값을 매개변수로 넣어주면

커서값이 해당 함수로 이동한다는 말입니다!!

이후에 출력된 화면을 직접 드래그 해서 X로 몇, Y로 몇,,일일이 세어보시면 정말로

이해가 잘 되실겁니다!!

728×90

Eirene HUE : c언어 : gotoxy 활용, 좌표측량 및 간단한 게임만들기.

c언어를 공부하시는 분들이라면gotoxy에 대해서는 많이 들어보셨을겁니다.

콘솔창을 기반으로 하여 간단한 게임을 만들어볼때도 많이 쓰이고 좌표값을 측정해

프로그램를 시각적으로 디자인하는데도 자주 사용되는 개념이라

익숙하신분들도 많으실 개념이지요.

간단하게 콘솔창을 하나의 좌표로 보고 x,y값을 변경시켜 원하는 위치에

원하는 출력을 하기위한 방식이라고 생각하면 됩니다.

잘 정리된 함수를 미리 선언해두고 활용하면

만들어볼 수 있기에, 알아두면 재미있게c언어를 연습할 수 있는

유용한 함수라고 할 수 있지요.

다만 역시 처음 사용하는 입장에서는 생각보다 다루기에 익숙하지 않은점이 있습니다.

단순히 좌표를 지정하고 출력하는것만으로는 다양하게 응용하기에는

부족한 감도 있구요.

그래서 이번 글에서는 gotoxy의 기본적인 사용법과 이를 응용해보는 내용을

정리해보기로 했습니다.

gotoxy 함수를 사용하는 방법부터 이런

간단한 게임을 만들어보는것까지 다루도록 하겠습니다.

콘솔창을 기반으로 한 간단한 게임도만들어볼 수 있기에, 알아두면 재미있게c언어를 연습할 수 있는유용한 함수라고 할 수 있지요.다만 역시 처음 사용하는 입장에서는 생각보다 다루기에 익숙하지 않은점이 있습니다.단순히 좌표를 지정하고 출력하는것만으로는 다양하게 응용하기에는부족한 감도 있구요.그래서 이번 글에서는 gotoxy의 기본적인 사용법과 이를 응용해보는 내용을정리해보기로 했습니다.gotoxy 함수를 사용하는 방법부터 이런간단한 게임을 만들어보는것까지 다루도록 하겠습니다.

참고 : gotoxy함수는 이미 많은분들이 활용하고 계시는 것으로

익숙하신분들은 이 글을 보실 필요가 없습니다.

이 글은 gotoxy를 활용해보지 않으신 분들을 대상으로

처음에 접할때 좀더 쉽게 다가갈 수 있도록 도움을 드리는 취지에서

작성되었습니다.

프로젝트를 실행시켜주세요

헤더를 선언하시고

메인함수를 준비해봅시다.

gotoxy는 api쪽 함수입니다. 따라서 사용하기 위해서는

#include 를 선언해야 합니다.

참고 : 어디까지나 이 이야기는 Visual Studio 를 사용하는 경우의 이야기입니다 .

Turbo C/C++ 을 사용하는분들은 헤더로

#include

#include

를 선언하시고 사용하시면 됩니다.

(컴파일러의 차이로 생각하시면 되겠지요^^)

이제 gotoxy함수를 호출해옵시다.

저기 적힌 내용들은 api를 배우지 않는 입장에서는 자세히 알 필요가 없습니다.

어쨌건 사용하는데는 지장도 없고 선언만 해두면 C언어의 문법만으로 활용이 가능하니

그냥 복사해서 똑같이 넣으셔도 무방합니다.

Visual Studio 2010을 기준으로 붉은 밑줄이 스크린샷처럼

나타날 텐데요. 이건 무시해도 됩니다. 에러가 나지는 않습니다.

gotoxy( int x, int y) //gotoxy함수를 호출해올 기본함수.

{

COORD pos = {x, y};

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

}

* 코드입니다. 긁기를 방지해두었기때문에…

메모장파일로 첨부해 두겠습니다.

다운받으셔서 사용하세요

이제 바로 활용해보도록 할까요?

선언 후에는 이제 좌표가 다 지정된것처럼 자유롭게 활용하시면 됩니다.

스크린샷에서는gotoxy(10,10);이라고 좌표값을 적어 두었죠.

그럼 콘솔창을 하나의 좌표로 보고 X=10,Y=10 인 지점으로

가겠다는 의미가 됩니다.

그리고 뒤에 “테스트입니다!” 라고 printf 출력함수를 넣어주었습니다.

자 그럼 어떻게 되나 볼까요?

자 빌드하고 테스트해봤습니다 처음 위치에서 문자열을 출력하지 않죠?

입력해준 좌표 10,10으로 이동한 후에 거기서부터 printf함수로 출력해는것을

확인할 수 있습니다.

* 기본 콘솔창에서의 좌표값에 대해…..

아무런 설정도 되지 않았을때에 기본으로 콘솔창의 크기는 가로 80 세로 24 로 설정되어있습니다. 이 이야기는 gotoxy함수를 이용할때에도 기본적인 좌표계가

x좌표가 0~79 의 범위

y좌표가 0~23 의 범위

로 초기화되어있다는 것을 의미합니다.

(시작점이 0,0이기때문에 각각 1을 뺀 값이 좌표계의 한계값이 됩니다.)

물론 이대로 고정되어 수정이 불가능하다면 활용의 폭이 매우 좁겠습니다만…

콘솔창의 크기 자체를 수정할 수 있는 함수가 존재하므로 이를 통해서 해결해 줄 수 있습니다.

콘솔창 크기 조절에 관해서는 앞선 포스팅에서 정리해두었으니 참고해주세요

즉 mode con을 이용하여 콘솔창의 크기를 수정할 경우 좌표계가 크기에 따라서

늘어나기도 하고 줄어들기도 한다는 점입니다.

ex) system ( ” mode con cols=92 lines=40″ );

//cols = 칸/행 (가로) lines = 줄/열 (세로)

로 설정했을 경우 가로에 해당하는 cols값이 92

세로에 해당하는 lines값이 40

이 됨으로써 x좌표의 범위가 0~91 가 되고

y좌표의 범위가 0~39 이 됩니다.

이런식으로 좌표계의 범위를 조절해 줄 수 있다는 것입니다. 좌표를 조절해준 뒤에는

이제 원하는대로 작업할 수 있겠죠. 크기도 마음대로 조절하고 또 조절된 좌표계의 한계점까지

명확히 알게 되니 작업하기는 수훨해지겠지요?

괜히 좌표계니 범위니 하는 말들을 썼지만 그냥 단순하게 생각합시다.

“아 창크기 크게 만들어서 뭐 많이 출력하고 꾸미고 할 수 있겠네?” 이런식으로 말이죠.

좌표를 원하는지점으로 이동시킨 뒤에 출력을 해보았으니 다음에는

이런 생각을 해볼 수 있겠죠?

“아 그런데 이런식으로 좌표를 일일이 지정해줘야되나? 그럼 여러가지 좌표들이

함께 움직일때는 복잡해서 어떻게 하냐?”

저는 처음 gotoxy를 접했을때 이런생각을 했었답니다^^

하지만 다행히도 gotoxy함수의 좌표값을 입력하는 자리에는 “변수”를 넣어줄 수 있었습니다!

이런식으로 변수를 선언한뒤에 그 변수값 자체를 좌표값으로 이용할 수 있습니다.

해당 값을 직접 좌표값으로 입력해주었을때와 같은 결과를 출력합니다.

그러니까 이건 특정 좌표를 저장해 두고 각각의 좌표들이 필요할때는

언제든지 불러와 사용할 수 있다는 의미가 됩니다.

생각해볼까요?

자 저런식으로 변수를 4개 2개씩 하나의 좌표를 나타내도록 지정해 주었습니다.

“나”라던지 “적/나쁜놈”같은 글자는 저렇게 각각 다른 좌표를 나타내야 될때

응용하면 좋겠다는 의미로 넣어 보았습니다.

뭐 어찌되었건 결과를 봅시다.

색이 바뀐것은 textcolor함수를 이용했기 때문입니다.

관련 내용은 이전 포스팅에서 다루고 있으니 참고해주세요

이렇게 보면 각각 다른 좌표를 저장해두고 필요할때마다 불러와

쉽게 사용할 수 있다는 의미로 해석될 수 있겠죠.

이제 여기서 좀더 응용하면 특정 키보드키를 누를때마다

캐릭터가 움직이는듯한 모습을 연출할 수 있습니다!

아래의 코드를 참고해 봅시다.

#include

#include

#define UP 72

#define DOWN 80 //키보드 방향키의 아스키코드값을 정의해둔것입니다.

#define LEFT 75 //이런식으로 정의해두면 편하게 사용할 수 있습니다.

#define RIGHT 77

gotoxy ( int x, int y) //gotoxy함수를 호출해올 기본함수.

{

COORD pos = {x, y};

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

}

int main(){

int X=44,Y=22; //좌표값.

int test;

system ( “mode con cols=92 lines=40″ );

while (1){

test = getch(); //문자를 먼저 입력받습니다.

switch (test){ //입력받은 문자에 따라서 스위치문을 구성합니다.

case UP : gotoxy(X,Y);

printf( ” ” ); //기존에 출력된 문자는 지우고

Y -= 1; //좌표를 이동시킨 뒤에

gotoxy(X,Y);

printf( “●” ); //새로운 위치에 문자를 출력해줍니다

break ; //이렇게 해서 마치 문자가 움직이는듯한

//효과를 만들 수 있습니다.

case DOWN : gotoxy(X,Y);

printf( ” ” );

Y += 1;

gotoxy(X,Y);

printf( “●” );

break ;

case LEFT : gotoxy(X,Y);

printf( ” ” );

X -= 1;

gotoxy(X,Y);

printf( “●” );

break;

case RIGHT : gotoxy(X,Y);

printf( ” ” );

X += 1;

gotoxy(X,Y);

printf( “●” );

break ;

} //switch닫음

gotoxy(80,38);

printf( “%2d %2d” ,X,Y); //변수 X,Y는 좌표값이며 continue; // 유동적으로 변하는 값입니다.

//이를 출력시키는것으로 “좌표측량”이 가능합니다!

} //while 닫음

} //main 함수 닫음

그대로 옮겨서 한번 실행시켜볼까요?

제가 코드긁기를 방지해둔관계로…. 역시 메모장파일을 첨부합니다^^

gotoxy_ex.txt

(다운받아주세요)

다운받아서 그대로 복사해서 옮긴 뒤 한번 실행해 보세요^^

(기준은 Visual Studio를 기준으로 합니다. 다른 컴파일러라면 실행이 안될겁니다)

어떤가요? 방향키를 누르니까 거기에 맞춰서 공이 이동하는것처럼 보이지 않나요?

다만 아직 설정이 덜 되어 계속 이동하면 화면밖으로 튀어나는 일이 생길겁니다.

튀어나가도 좌표계는 그대로 존재합니다. 그냥 자꾸 값이 커져나갈 뿐이죠

그리고 콘솔창은 엉망이 됩니다.

이를 방지하는방법도 아랫쪽에 설명할 것입니다. 일단은 움직이는구나! 하고

한번 느껴만 주시면 좋겠습니다^^

대부분 설명은 코드에 주석으로 달아 두었습니다.

좌표를 이동시키면서 기존에 출력된 부분을 지우고 옮긴 좌표에

다시 출력해주는 방식을 이용해서 마치 공이 조작키에 따라서 움직이는것처럼

보이도록 만드는게 주안점이라고 할 수 있지요.

굳이 언급하지 않았던 부분은 앞부분에 #defile 으로 정의되어진 키보드값입니다.

각각 키보드의 방향키값에 해당되는 아스키코드값을 UP,DOWN등 우리가 알기 쉬운

문자로 정의해두는 것으로 아래에서 스위치문 등으로 활용할때 편하게 사용하기

위해 적은 것으로 생각하시면 됩니다.

강제 형변환 등을 이용해서 아스키코드값을 매번 적어가며 작성하는 방법도 있겠지만

그럴 바에는 저렇게 알기쉽게 조정해 두는것이 좋을 것입니다.

#define UP 72

#define DOWN 80

#define LEFT 75

#define RIGHT 77

이들이 자주 사용되는 방향키값입니다.

위로(72) 아래로(80) 오른쪽(77) 왼쪽(75)을 나타내는

아스키코드값으로 정의해둔 것이죠.

저렇게 선언만 해 두면 아래에서 switch문이라던가 if문 등을 통해

다양하게 응용할 수 있습니다.

#define ENTER 13

#define ESC 27

추가로 더 알려드리자면 엔터키는 아스키코드 13번

ESC키는 아스키코드 27번

에 해당됩니다. 자주 사용될것 같아 추가로 알려드립니다^^

또 무한 while문 맨 아래에 이동후에 좌표값을 출력시키고 있음을 확인할수 있을것입니다.

gotoxy(80,38); //(80,38)의 위치로 가서

printf(“%2d %2d”,X,Y); //현재 저장된 좌표변수의 값을 좀 출력해달라

continue; //그리고 무한반복문 맨처음으로 돌아가서 다시 스위치문을 돌려라

이런식으로 이동 후 출력까지 완료한 후에 현재 x,y값에 저장된 좌표값 자체를 출력시키는 것이죠.

뭔가 만들때 살짝 불러와서 좌표를 측정해두고

“아 이 위치에 뭘 출현시키면 되겠군!”

하고 조사하는 방식으로 이용됩니다. 출력시킬것을 다 출력한 다음에는

해당 코드를 지워서 없애주면 정리되겠죠.

사실 내용 자체는 아주 간단합니다. 저장된 변수의 값을 특정 위치에 출력시키는것에 지나지

않으니까요. 하지만 이렇게 화면 구석에 좌표값을 출력시키게 만들어주는것은 상당한 도움이

됩니다. 어느점은 무슨무슨 좌표구나 하는것을 알수 있게 되니 응용은 무궁무진하죠.

자 여기까지 했으니 이제 gotoxy를 처음 접하셨던 분들이라도

콘솔창에 움직이는 캐릭터를 출현시킬 수 있고 또 원하는 좌표에 원하는

문자열도 출력할 수 있게 되었을 것입니다.

마지막으로 응용해서 간단한 미로찾기라도 한번 만들어보면 어떨까요?

이를 소개하면서 아까 있었던 문제점인

“공이 화면 밖으로 탈출하는 오류”까지 해결해 봅시다^^

자 저런식으로 2차원 배열을 선언해볼까요?

선언된 2차원 배열을 일종의 좌표계로 생각하고

알맞은 문자열을 출력해서 맵으로 만듭니다.

참고 : 여기서 기준은map[Y좌표][X좌표]로 생각하시면 됩니다.

2차원 배열 선언을 할때에는 뒤의 배열이 가로를

앞의 배열이 세로를 나타내거든요.

이렇게 좌표개념을 직관적으로 적용 가능한 2차원 배열이기에

맵출력시 2차원 배열을 이용하는걸 추천해드립니다.

일단은 간단하게 1줄 부터 입력해 봤습니다. 먼저 1줄 해두고

계속 밑으로 내려가면서 2차원 배열을 추가로 초기화해주면 됩니다.

점점 길게 늘여쓰고있습니다.

보시면 아시겠지만 초기화할때 0,1을 이용해 다르게 초기화하는것을

확인할 수 있으실 텐데요, 이렇게 다르게 초기화해주기 위해서

일부러 2차원배열을 선언하고 일일이 숫자를 입력하고 있는 것이랍니다.

이쯤에서 배열 외에도 아래에 출력하는 부분도 살펴볼까요?

배열 선언후에 일단 콘솔창의 크기를 조절해주고

그다음에 2중 for문을 돌려서 별을 출력하고있습니다.

설명이 필요한 부분은 대부분 스크린샷의 주석에 남겨두었으니

스크린샷을 참고해주세요.

그밖에도 아예 코드 자체를 아래에 업로드해 둘테니

복사해서 Visual Studio 상에서 확인하는것도 좋겠지요!

참고 : 다만 아랫쪽에 for문을 돌린 후에 한칸 띄워주는

를 출력하고 있는데요

NULL을 입력해서 출력의 오류를 방지하는데 목적이 있습니다.

이를 입력해주지 않으면 배열이 의도대로 출력되지 않고

배열이 출력된 다음 바로 뒤에 다음 배열이 연결되어 출력되어

엉망이 되는 모습을 볼 수 있을겁니다.

그래서NULL을 출력시켜 정리해 주고 있습니다.

글을 읽는것으로는 잘 와닿지 않는 부분이기도 하지요…

직접 엉키는 오류를 접하시면 더 깊게 와닿으실듯 합니다^^;

이렇게 1로 초기화한 부분에 지정된 문자열인 별 문자열이 출력되는것을

확인할 수 있습니다.

이를 응용해서 복잡한 맵도 만들게 되는거지요.

계속 같은 방식으로 늘여주고 있습니다.

이쯤되면 슬슬 짜증이 나는 분들도 계실지 모르겠습니다.

도데체 왜 쓸데없이 일일이 초기화하는가.

콘솔창에서 맵을 출력한다는게 복잡한 맵이 될수록 어렵습니다.

이유는 어디까지나 콘솔창은 문자열만 출력하는 하나의 화면일 뿐이고 코딩하는 사람이

일일이 위치를 지정해줘서 원하는 위치에 문자열을 출력해주는 방식이기 때문입니다.

일일이 좌표를 측정해서 해당 좌표로 이동해서 출력할 문자열을 출력해주는 방식으로

과연 복잡한 맵을 만들 수 있을까요?

적절히 섞어서 사용하는건 필요하지만 모든 문자열을 깔끔하게 출력하기란 참 어렵습니다.

그래서 직관적으로 이해하기 쉽도록 2차원 배열을 통해 문자열로 이루어진 “그림”

을 하나 그려주고 이것을 맵으로 사용하는것입니다.

처음 접할때는 귀찮아보이고 짜증나는 방법처럼 보일지 모르지만

익숙해지면 콘솔창에 문자열로 “그림”을 그린다는 느낌을 받으실수 있을 것입니다.

추가로 출력할 문자열의 모양도 바꿔 봅시다.

슬슬 모양새 좀 나나요?

위의 미로찾기샘플이라는 글씨는 gotoxy로 따로 위치를 옮겨준뒤에 출력했습니다.

이렇게 짧거나 단순히 문자열 한줄정도 출력하는 경우에는 일일이 배열을 지정하는게

비효율적입니다. 단순할 경우에는 직접 좌표를 이동시켜서 그 위치에 출력해주는게 좋지요.

좌표를 이동시켜서 출력하는방식과

배열을 이용해 출력하는 방법 둘다 적절히 섞어 사용하는걸 추천해드립니다.

자 그럼 이제 제대로 미로 좀 만들어 볼까요?

이제 좀 뭐 만든거 같은 느낌이 나지요?

배열을 이용하지 않았다면 어땠을까요?

저 많은 벽들을 좌표를 일일이 측정해서 해당 좌표로 이동한뒤에 출력한다고

생각해보세요….

어휴 생각만해도 끔찍합니다.

그래서 2차원 배열을 사용해서 그려주는게 훨씬 더 깔끔하고 간편한 방법이

되는 것입니다.

하트를 추가하기 위해 코드를 추가했습니다. 저런식으로

0~9까지 총 10가지 모양을 배열을 돌려 출력할 수 있습니다.

간단히 말해서 10가지 타일로 그림을 그린다!

라고 생각하면 이해가 잘 될거에요.

일단 여기까지의 코드를 메모장 파일로 올려두겠습니다

(다운받아주세요)

그대로 복사해서 Visual Studio로 돌려보세요

그리고 금방 문제점을 찾으실수 있을 것입니다.

움직이긴 하는데 공이 돌아다니면서 벽이고 글씨고 다 부셔버립니다!

이것참 큰 문제네요!

오류가 생기는 모습도 여전히 나타납니다.

이걸 좀 고쳐봐야겠네요!

(일단 수정해둔 코드를 먼저 올려두겠습니다.

먼저 코드를 보시고 진행하는게 좋을것 같습니다.)

뿐만아니라 이전에 만든 간단한 공출력 코드에서 공이 화면 밖으로 빠져나가며오류가 생기는 모습도 여전히 나타납니다.이걸 좀 고쳐봐야겠네요!(일단 수정해둔 코드를 먼저 올려두겠습니다.먼저 코드를 보시고 진행하는게 좋을것 같습니다.)

(수정된 코드입니다. 다운받아주세요)

위에서 오류가 나던 코드를 수정했습니다.

실제로 미로처럼 이동할수도 있고 끝부분의 하트를 먹으면

승리 메세지가 뜨며 콘솔창이 종료되도록 구현했습니다.

먼저 코드를 받아서 Visual Studio로 직접 돌려보시고

계속 봐주세요. 아래에 작성할 내용은 코드를 어떻게 수정해서

벽을 뚫지 않는지, 하트를 먹으면 게임이 완료되는지 등을 설명하고 있습니다.

그냥 코드를 가지고 분석해보고 응용하실 분들은 글을 더 읽지 않으셔도 좋을듯 합니다.

코드를 실행해 보셨나요? 이제는 벽을 뚫는다던가 하는일 없이 잘 되지요?^^

여기서부터는 어떻게 수정한것인가에 대해서 다루어보겠습니다.

오류가 생기는 이유는 배열의 값과는 상관없이

공은 공에 지정된 좌표변수에 따라서 움직이고 출력후

지움을 반복하기 때문입니다.

따라서 배열의 초기화된 값과 공의 좌표값을 연결지어 배열의 값에 따라서

공의 좌표를 되돌려주는 매커니즘이 필요한 것이죠.

일단 좌표의 값을 따로 만든 함수에 맵 배열값과 함께 넘겨줍니다.

그리고 받는 함수는 맵을 표현한 배열을 2차원 배열 포인터로 받고 좌표값은 그냥

지역변수로 받도록 해 뒀습니다.

이때 받는 변수가 공의 좌표라는점이 중요합니다.

그 다음에 if문을 통해서 넘겨받은 공의 좌표값에 해당되는 배열위치를 포인터로 접근하고

초기화된 배열값에 따라서 반환값을 다르게 지정해 주었습니다.

이런 방식으로 맵에서 아무것도 출력시키지 않는 0의 경우 지나가도 괜찮도록

1을 반환하고,

다른 숫자의 경우 그냥 지나가서는 안되는 곳이므로 (벽을 1로 초기화했지요)

0을 반환하도록 지정했습니다.

반환하고 돌아오면 그 값에 따라서 이동된 좌표에다가 공을 새로 출력할것인가

그렇지 않으면 이동해서는 안되는 지점이므로 다시 좌표를 되돌려주고 되돌린 위치에

다시 공을 출력해줄것인가를 결정하게 됩니다.

이런 매커니즘을 통해서 공이 벽을 뚫고 지나가는것을 방지하는것이죠.

그리고 배열을 수정했습니다. 가로값에 해당되는 x좌표의 부분에

더미 초기화값을 채워주었습니다.

이렇게 하는 이유는 현재 사용하고있는 벽을 나타내는 사각형 문자열과

공을 출력시키는 원모양 문자열의 경우 2바이트 문자라

배열을 통해 출력시킬경우 2칸을 잡아먹기 때문입니다.

단순 출력으로는 오류가 없지만 이동되는 다른 좌표와 연결할 경우

문제가 발생될 수 있어 저렇게 따로 한줄은 9로 초기화해주었습니다.

실제로 2바이트 문자를 활용할때는 저런 과정을 거치지 않으면

출력된 맵에 해당되는 문자열과 이동하는 문자열의 값이 충돌하게 됩니다.

(충돌결과는 다양하지요 맵을 뚫어버린다던가 이상한곳에 문자열이

출력된다던가…)

따라서 처음부터 2바이트 문자를 이용할때는 더미 배열값을 두고 시작하겠다

하는편이 좋습니다.

또 이 내용은 가로냐 세로냐에 따라서도 다릅니다.

오류가 생기는건 가로의 문제입니다.

왜냐하면 2바이트건 1바이트건 세로를 이동시키는것은 같지만

가로는 길이가 다르기 때문이지요.

세로가 같은 이유에 대해서 얘기해보지요.

어차피 세로는 줄이고 2바이트 문자건 1바이트 문자건

엔터치면 그냥 줄이 내려가지 않던가요? 그런것처럼 세로의 경우는

어떤 문자를 이용해도 결과가 같습니다. 그래서 더미 배열값같은 것도 만들지 않지요.

일단 당장은 좀 어수선하기도 하고 어지럽네요

그래도 마저 만들어 미로처럼 만들어 봤습니다.

색도 녹색이 보기 어려운듯 싶어

회색으로 바꾸었습니다.

전체적으로 좁아진 느낌이 드는데 배열의 반절을

더미 초기화 시켰기 때문입니다.

(더미 초기화된부분은 출력을 하지 않으므로 반절정도의 크기가 된 거죠)

처음부터 이렇게 만들기 위해서 배열의 가로길이를 세로길이의

2배로 만들어준 것입니다.

콘솔창의 경우 세로의 길이가 가로의 길이보다 2배 길거든요.

이걸 생각하지 않으면 안되니까요.

배열의 출력지점 역시 일반 문자열과 마찬가지로 gotoxy를 활용해서

원하는 위치에 출력시킬 수 있습니다. 다만 보통의 방식은 이동해서

문자열을 하나 출력해야지 하는 정도라면

이 경우는 배열이라는 문자열로 이루어진 하나의 큰 그림을

옮기는 것으로 생각해 주시면 되겠습니다.

위치는 조심히 지정해야합니다.

또 공의 좌표와도 연계를 고려해야하기때문에 항상 원칙을 지켜서

지정하는것이 좋습니다.

스크린샷에 자세히 설명해 두었듯이

배열을 출력시키는 좌표를 수정해 주었다면

이후에 공을 출력시키는 좌표도 그에 맞춰 이동시켜줘야

합니다. 이를 무시하면 공은 원래 위치에서 따로 놀게 되어

오류가 발생합니다.

그리고 하트의 경우 벽처럼 막는게 아니라 먹는게 되어야겠지요?

while 문 마지막에 하트에 해당되는 좌표인경우 break 로

while 문을 탈출하고

아닌경우는 continue 로 다시 while 문을 반복하게끔 수정했습니다.

while 문 밖에는 승리 메세지가 기다리고 있습니다.

이외에도 적 같은것을 구현한다면

while 문 밖을 if 문으로 돌려서 적한테 당했을 경우와

승리했을 경우를 나누어주는방식으로 진행하면 되겠지요.

완성된 게임 플레이는 저런 식으로 진행됩니다

방향키로 공을 움직이고 하트에 도달했을때 하트를 먹으며

게임에 승리하는방식으로 진행되지요.

앞서 전체코드를 먼저 올려두긴 했습니다만,

해당 코드를 좀더 수정해서 음악까지 재생되도록 만든 프로그램을 첨부합니다.

C언어 | 콘솔창 출력위치 변경, GotoXY, COORD, SetConsoleCursorPosition, GetStdHandle(STD_OUTPUT_HANDLE), windows.h

728×90

✅ 오늘의 문제 : 계단 만들기

어떠한 양수를 입력받은 뒤, 그 양수와 같은 층의 계단을 만들어보세요

GotoXY 함수만을 사용하세요

(코뮤니티 모각코 과정 中 출제되어 푼 문제입니다.)

콘솔창의 출력 위치 변경하기

#include

먼저 헤더 파일을 include 시켜줌!

헤더파일 내에는 “윈도우 개발자들이 필요한 모든 매크로와 함수들”을 포함하고 있음

즉, “콘솔의 위치를 지정할 수 있는 함수”를 포함하고 있다!

그럼 콘솔의 출력 위치를 변경하는 함수를 만들어봅시다!

보통 GotoXY 라는 이름으로 작성하는, 널리 퍼진 함수 형태임 !!

Void GotoXY(int x, int y) { COORD Pos; Pos.X = x; Pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos); }

자…이제 GotoXY 함수를 하나하나 뜯어서 분석해보겠슴다

우선 첫째 줄에 있는 COORD는 무엇일까요?

COORD

COORD의 실제 형태:

typedef struct _COORD { SHORT X; SHORT Y; } COORD, *PCOORD

COORD 라는 구조체는 선언되어 있는 x, y 값을 저장하는 역할!

SetConsoleCursorPosition

BOOL WINAPI SetConsoleCursorPosition( _In_ HANDLE hConsoleOutput, _In_ COORD dwCursorPosition );

이 함수는 “콘솔의 핸들 값”과 “좌표값”을 받아서, 해당 위치로 콘솔의 커서를 이동시킴!

콘솔의 핸들값이란, 쉽게 말해 콘솔이 가지는 ID를 말합니당

GetStdHandle(STD_OUTPUT_HANDLE)

콘솔의 ID는 어떻게 구할까요

아래와 같이 리턴받을 수 있음!

GetStdHandle(STD_OUTPUT_HANDLE)

문제 풀이

[초안]

//어떠한 양수를 입력 받은 뒤, 그 양수와 같은 층의 계단을 만들어 보세요. #define _CRT_SECURE_NO_WARNINGS #include #include void GotoXY(int x, int y) { COORD Pos; Pos.X = x; Pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos); } int main() { int x = 0, y = 1; int n; // 층 수 printf(“양수를 입력하세요: “); scanf(“%d”, &n); for (int i = 0; i < n; i++) { //층 반복 GotoXY(x, y); printf("ㄱ"); x++; y++; } return 0; } x, y 좌표를 어떻게 증가 시킬 지 고민하다 x, y라는 변수를 main 함수에 추가시켜 썼는데, 굳이 저렇게 쓸 필요 없이 반복문 내에서 x를 i로, y를 i + 1로 적는 게 더 깔끔할 것 같다고 조언해주심! 그리고 GotoXY함수 형태는 항상 저렇게 쓰이는 건지 궁금해서 여쭤봤더니, 보통 저런 형태로 쓴다고 함! 불필요한 코드를 최소화하고, 필요한 부분만 취한 형태!! 조언해주신 걸 바탕으로 수정... //어떠한 양수를 입력 받은 뒤, 그 양수와 같은 층의 계단을 만들어 보세요. #define _CRT_SECURE_NO_WARNINGS #include #include void GotoXY(int x, int y) { COORD Pos; Pos.X = x; Pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos); } int main() { int n; // 층 수 printf(“양수를 입력하세요: “); scanf(“%d”, &n); for (int i = 0; i < n; i++) { //층 반복 GotoXY(i, i + 1); printf("ㄱ"); } return 0; } 와 이렇게 되는 건 생각도 못했다...! x++;이랑 y++; 까지 사라지는군 아주만족ㅠㅠ 출력 시!

c언어 좌표를 받아 커서이동 gotoxy

커서이동 함수 gotoxy

c언어로 매크로를 만들어보고 싶어서 찾아보다가 알게되었습니다.

이 함수를 이용해서 콘솔에 원하는 좌표에 찍는것이 가능했습니다.

(내가 원하는 내용이랑은 살짝 달랐습니다. 흑흑 )

헤더파일.

이것을 사용하기 위해서는 windows.h라는 헤더파일을 선언해야합니다.

gotoxy함수를 보겠습니다.

void gotoxy(int x, int y){ COORD Cur; Cur.X=x; Cur.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur); }

저 위에있는 setconsole부분때문에 windows.h라는 파일을 선언해야 합니다.

이번에는 이 goto문을 콘솔에서 사용해보겠습니다.

좌표를 받아 goto문으로 콘솔창의 원하는 위치에 문자 보내기

이부분은 쉽습니다.

그냥 x좌표와 y좌표의 값만 넣어주시면 됩니다.

이렇게 입력하고 출력을 해보겠습니다.

설정된 좌표만큼 이동하고 printf문이 출력되었습니다.

마우스 커서 이동.

마우스 커서는 SetCursorPos(x,y)로 움직이더군요.

gotoxy(x,y)랑 비슷하네요.

[C++ 언어-기초실습-18] gotoxy()함수로 커서 이동하기? — Hive

[C++ 언어-기초실습-18] gotoxy()함수로 커서 이동하기?

다운 사이트 : https://sourceforge.net/projects/orwelldevcpp/

웹컴파일러 : https://www.tutorialspoint.com/compile_c_online.php

C언어에서 실습했던 내용인데 간단히 복습차원으로 화살표 커서를 움직이는 실습을 해보도록 하겠습니다.

1. 화살표 커서 값 얻기

while(1){ if(kbhit()){ key_val=getch(); cout< #include #include #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 using namespace std; void gotoxy(int x, int y){ COORD posXY={x,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),posXY); } int main(int argc, char** argv) { int x=5; int y=5; int key_val; gotoxy(5,5); while(1){ if(kbhit()){ key_val=getch(); switch(key_val){ case UP: y–; break; case DOWN: y++; break; case LEFT: x–; break; case RIGHT: x++; break; } gotoxy(x,y); } } return 0; }

[결과]

마무리

결과 이미지는 커서가 정지된 한컷의 이미지라서 잘 확인이 안되실 수 있지만 위 소스를 컴파일해서 실행 시키면 콘솔창이 뜨고 키보드의 커서키를 누르면 커서가 이동되는 것을 보실 수 있을 거에요. 이 이동 동작 원리가 게임 코딩을 하기 위한 첫 단추입니다. 복습차원으로 다시 만들어 봤어요

[C언어/C++] 원하는 좌표로 커서 이동하기 (SetConsoleCursorPosition)

콘솔 화면의 특정위치에 출력을 하기 위해 줄바꿈 printf(”

“) 으로 이동한다면 화면이 밀릴 수 있어 화면이 깨질 위험이 있습니다. 그러므로 특정위치에 출력을 할때는 커서를 해당 좌표로 이동시킨 뒤 확실하게 출력하는 방법을 써야합니다.

SetConsoleCursorPosition 함수를 통해 커서 이동

void gotoxy(int x, int y){ //x, y 좌표 설정 COORD pos={x,y}; //커서 이동 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }

windowswindows.h 헤더에 존재하는 SetConsoleCursorPosition 으로 좌표를 이동시킬 수 있습니다. 대부분 위와 같이 gotoxy라는 함수를 하나 만들어주고 사용합니다.

COORD : 커서의 위치를 저장하는 구조체

SetConsoleCursorPosition : 커서의 위치를 이동시키는 함수

GetStdHandle : 콘솔창 핸들

콘솔 좌표

콘솔의 좌표는 위의 그림과 같습니다. 우리가 일반적으로 생각하고 있는 배열의 좌표와 같은데요. 세로축은 Y방향, 가로축은 X방향이며 아래쪽, 오른쪽으로 갈수록 각각 Y와 X의 크기가 커집니다.

커서 이동 예제

#include #include void gotoxy(int x, int y) { //x, y 좌표 설정 COORD pos = { x,y }; //커서 이동 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } void main() { gotoxy(10, 3); std::cout << "☆"; gotoxy(3, 10); std::cout << "★"; } 위와 같이 좌표를 강제로 이동하여 출력할 수 있습니다.

[C] 방향키로 printf() 커서 위치 이동 (gotoxy)

MFC(Microsoft Foundation Class Library)를 사용하지 않는다면 C언어를 이용하여 GUI를 구성하는 것은 불가능하다.

바람의 나라 등 2D 게임을 만들 때 캐릭터가 이동하기 위해서는 좌표가 필요한데,

CLI 환경에서 2D 게임을 흉내낼 수 있는 gotoxy() 함수에 대해 알아보자.

함수 정의 이름은 gotoxy()가 아니더라도 상관 없음

SetConsoleCursorPosition() : 콘솔 커서 위치 변경 gotoxy() 정의 사용법 x, y값에 이동하고자 하는 좌표를 매개변수로 전달

예제를 통해 확인해보자.

소스 코드는 아래와 같다.

#include #include #define MAX_X 60 #define MAX_Y 20 void gotoxy(int x, int y) { COORD Pos; Pos.X = x; Pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos); } int main() { int X = (MAX_X / 2) + 2; int Y = (MAX_Y / 2) + 1; int site; while (1) { gotoxy(0, MAX_Y + 1); printf(“X coord : %d

“, X); printf(“Y coord : %d

“, Y); gotoxy(X, Y); printf(“나”); site = getch(); switch (site) { case 224: // arrow keys site = getch(); switch (site) { case 72: // top if (Y != 0) { Y–; } break; case 75: // left if (X != 0) { X–; } break; case 77: // right if (X != MAX_X) { X++; } break; case 80: // bottom if (Y != MAX_Y) { Y++; } break; default: break; } default: break; } system(“cls”); } }

gotoxy()에서 SetConsoleCursorPosition()를 사용하기 위해서 먼저 Windows 헤더파일을 include 해야 한다.

커서 위치 디폴트 값은 x, y 모두 0으로 시작하며 최댓값을 별도로 설정한다. (x = 60, y = 20)

좌표를 중앙으로 설정 후 시작하며 방향키 입력에 따라 커서 이동과 좌표를 출력한다.

방향키는 유니코드이며 1byte씩 두 번 값을 읽어 처리한다. 첫 1byte가 십진수 224값일 경우 방향키로 예상 가능하다.

두 번째 1byte의 값이 72, 75, 77, 80일 경우 각각 top, left, right, bottom으로 판단할 수 있다. 그에 따라 x, y좌표 값을

변경해주면 된다.

다음과 같이 응용해 볼 수도 있다.

키워드에 대한 정보 c 언어 gotoxy

다음은 Bing에서 c 언어 gotoxy 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 C언어 # RPG 게임 만들기(11. 프로젝트에 파일추가 및 gotoXY사용하기)

  • 30대
  • 아저씨
  • 아재tv
  • 아재
  • C언어
  • RPG
  • 게임만들기

C언어 ## #RPG #게임 #만들기(11. #프로젝트에 #파일추가 #및 #gotoXY사용하기)


YouTube에서 c 언어 gotoxy 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 C언어 # RPG 게임 만들기(11. 프로젝트에 파일추가 및 gotoXY사용하기) | c 언어 gotoxy, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  차량 유지비 계산 | 자동차 유지비 한달에 100만원 정도 나가네요.. 차는 최대한 늦게 사세요! 자동차 한 달 유지비 초간단 정리! 자동차 유지비 계산, 사회초년생 자동차 유지비, 여러분의 유지비는? 상위 287개 베스트 답변

Leave a Comment