#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <windows.h>
using namespace std;
//처음엔 출력을 cout으로 하려 했으나 객체를 출력으로 쓰는것과 함수를 출력으로 쓰는게 얼마나 속도차이가 큰지 크게 느꼈음... 결국 전부 printf()로 바꿈
#define random(num) (rand()%(num))
#define MAX 1024
#define LEFT 75
#define RIGHT 77
#define UP 72
#define DOWN 80
#define ESC 27
struct Signal
{
BOOL exist; // 신호의 존재 여부
char ch; // 출력할 문자
int x,y; // 현재 좌표
int distance; // 이동할 거리
int nFrame; // 속도
int nStay; // 속도에 대한 카운트
};
Signal S[MAX];
//c언어에서 gotoxy함수가 없길래 다른곳에서 구함.
void gotoxy(int x, int y)
{
COORD pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
//글자를 매트릭스영화처럼 녹색으로 해보고싶어서 구현. setcolor(10,0)하면 녹색인데...밑에 글자도 녹색이되서 ㅠ
void setcolor(int color, int bgcolor)
{
color &= 0xf;
bgcolor &= 0xf;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (bgcolor << 4) | color);
}
void main()
{
int i;
int ch;
int freq=15;
int frame=200;
srand(time(0));
system("cls");
gotoxy(0,23);
cout<<"매트릭스 흉내내기. 상하:속도 증감, 좌우:빈도 증감, ESC:종료";
for (;;)
{
gotoxy(60,23);
printf("속도:%d, 빈도:%d ",frame,freq);
//kbhit()함수는 키보드가 눌려져있는지 안눌려져있는지 bool형 함수인데, conio.h에 들어있다. conio.h를 안쓰고 직접 구현해서 써보고 싶으나 어떻게 구성되어있는지 전혀 알수가 없음.
if (kbhit())
{
ch=getch();
if (ch == 0xE0)
{
ch=getch();
switch (ch)
{
case UP:
frame=min(frame+10,1000);
break;
case DOWN:
frame=max(frame-10,10);
break;
case RIGHT:
freq=max(freq-1,1);
break;
case LEFT:
freq=min(freq+1,30);
break;
}
}
else
{
if (ch == ESC)
{
return;
}
}
}
// 새로운 신호 생성
if (random(freq) == 0)
{
for (i=0;i<MAX;i++)
{
if (S[i].exist == FALSE)
{
S[i].exist=TRUE;
S[i].ch=random('Z'-'A'+1)+'A';
S[i].x=random(80);
S[i].y=0;
S[i].distance=random(14)+9;
S[i].nFrame=S[i].nStay=random(15)+5;
break;
}
}
}
// 주기가 다 된 신호 이동 및 제거 처리
for (i=0;i<MAX;i++)
{
if (S[i].exist == FALSE)
continue;
if (--S[i].nStay == 0)
{
S[i].nStay=S[i].nFrame;
gotoxy(S[i].x,S[i].y);
putch(' ');
if (++S[i].y < S[i].distance)
{
gotoxy(S[i].x,S[i].y);
putch(S[i].ch);
}
else
{
S[i].exist=FALSE;
}
}
}
}
}
'Programming' 카테고리의 다른 글
[perl] webhacking 4번 http get request (3) | 2012.12.10 |
---|---|
[C++] 스택사이즈 변경(stack size) (0) | 2012.11.06 |
[C++] Shooting Game (0) | 2012.06.01 |
[C++] 리눅스 gotoxy(); (0) | 2012.05.29 |
[C++] 리눅스 gotoxy, move (0) | 2012.05.29 |