#include<iostream>
#include<sstream>
#include<queue>
#include<string>
#include<Windows.h>
//구글에 흔한거
void gotoxy(int x, int y)
{
COORD pos{ x,y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
//fflush로는 안깨끗해지는 경향이 있어서 만든 콘솔청소
void CLEAR_frame(int size)
{
gotoxy(0, 1);
for (int i = 0; i < size; i++)
{
std::cout << "│ │";
gotoxy(0, 2 + i);//왜여기더라? 까먹음
}
//19번째줄은 내가 글을쓸곳
gotoxy(0, 19);
std::cout << "│ │";
}
//채팅 뼈대
void Frame()
{
gotoxy(0, 0);//첫줄 시작지점표현
std::cout << "┌─────────────────────────┐" << std::endl;
for (int i = 0; i < 20; i++)
{
gotoxy(0, 1 + i);//끝줄마다 표현
std::cout << "│ │" << std::endl;
}
gotoxy(0, 18);//표현창끝 + 채팅창시작
std::cout << "├─────────────────────────┤" << std::endl;
gotoxy(0, 20);//채팅창끝
std::cout << "└─────────────────────────┘" << std::endl;
gotoxy(0, 20);
}
//글을 읽어들이는곳
void Read(std::queue<std::string> *Writer)
{
gotoxy(3, 1);//3,1번째 자리부터 시작할거임
while (Writer->size() >= 15)//만약 queue의 길이가 15이상이면
{
Writer->pop();//이걸 지움
}
//뼈대청소 < 지운게 있으면 그 지운부분은 안보여야 하니깐
CLEAR_frame(Writer->size());
//Writer복제해서 출력함
auto temp = *Writer;
for (int i = 0; i < Writer->size(); i++)
{
gotoxy(3, 1 + i);//3번째자리는 뼈대고 i+1번째줄마다 출력
std::cout << temp.front();//맨위의글을꺼냄
temp.pop();//맨위의글을 버림
}
}
//청소기, flush 맘에안듬
void Refresh(std::ostringstream &paper)
{
//일단 ""이걸로도 충분할건데
paper.str("");
//혹시나해서
paper.clear();
}
//글을 입력받는곳
void Write(std::ostream & stream, std::queue<std::string>* Writer)
{
//이렇게 함으로써 string받고 뭐시기하고 하는 번거로움을 줄임
std::string be = dynamic_cast<std::ostringstream&>(stream).str();//이거전부 string이란뜻ㅎ
Writer->push(be);//입력한걸 집어넣음
Refresh(static_cast<std::ostringstream&>(stream));//입력한거 청소
}
void main()
{
std::ostringstream oss;//원래 iss로 해야할걸? 이대로가면 뚝배기 다섯개깨집니다^^
std::queue<std::string> clerk;//작사던가 집필자던가? 그거 약자임 채팅창을 써내릴사람
std ::string text;//내가쓴글
Frame();//뼈대넣고
while (true)//게임루프
{
gotoxy(3, 19);//19번째(채팅입력란)으로 감으로써 내가 채팅창에 글을쓰는 착시를냄
getline(std::cin, text);//내가쓴 라인을 전부 text로 옮김
std::istringstream ss(text);//ostringstream의 반대 string수준으로 stream으로 넣는다? 이런느낌일걸
Write(oss << text, &clerk);//oss에 입력은 못받고iss에 입력을받아서 그걸 oss에다가 출력하는 느낌으로 해야함
Read(&clerk);//입력다했으면 글쓴걸 보여줄차례
}
}
는 내가 c++로 짠기능중 가장 잘한거ㅎ 적어도 좆문대 상위 80% 수준은 할거같음ㅎ
실무에서 이렇게쓰면 뚝배기 깨질듯
멋져요~~~ 저도 조무사 합격하면 이런거 배우나요?
난 안알려주길래 직접만든건데 이거의 토대되는 queue는 배움요