반응형
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>
#include <conio.h> // kbhit(), getch()
#pragma warning (disable : 4996)
//방향키의 아스키 코드값
#define MAX 1024
#define LEFT 75
#define RIGHT 77
#define UP 72
#define DOWN 80
#define ESC 27
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
struct Signal
{
bool exist; // 신호의 존재 여부
char ch; // 출력할 문자
int x, y; // 현재 좌표
int distance; // 이동할 거리
int nFrame; // 속도
int nStay; // 속도에 대한 카운트
};
Signal S[MAX];
void main()
{
int i;
int ch;
int freq = 15;//빈도
int frame = 200;//속도
system("cls");
gotoxy(1,23);
printf("매트릭스 흉내내기. 상하:속도 증감, 좌우:빈도 증감, ESC:종료");
srand((unsigned int)time(NULL));
for (;;)//무한루프
{
gotoxy(60, 23);
printf("\n속도:%d, 빈도:%d ", frame, freq);
// 키 입력 처리
if (kbhit()) {//kbhit : 키입력함수 있으면 1, 없으면 0
ch = getch(); //getch : 입력된 키의 아스키코드값
if (ch == 0xE0) {//0xE0는 10진수로 224
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;
}//switch
}
else {
if (ch == ESC) {
return;
}
}//if (ch == 0xE0)
}//if (kbhit())
// 새로운 신호 생성
if (rand() % (freq + 1) == 0) //random(freq) == 0
{
for (i = 0; i < MAX; i++) {
if (S[i].exist == FALSE) {
S[i].exist = TRUE;
S[i].ch = rand() % 26 + 65; //random('Z'-'A'+1)+'A'; A의 아스키 코드값 : 65 Z의 아스키코드값 90
S[i].x = rand() % 81; //random(80);
S[i].y = 0;
S[i].distance = rand() % 15 + 9; //random(14)+9;
S[i].nFrame = S[i].nStay = rand() % 16 + 5;//random(15)+5;
break;
}
}
}//if(rand())
// 주기가 다 된 신호 이동 및 제거 처리
for (i = 0; i < MAX; i++) {
if (S[i].exist == FALSE)
continue;
if (--S[i].nStay == 0) {//속도프레임이 0이면(?)
S[i].nStay = S[i].nFrame;
gotoxy(S[i].x, S[i].y);
putch(' '); // putch() : 한개의 문자를 출력
if (++S[i].y < S[i].distance) {//y값(0)이 이동할거리보다 작을경우
gotoxy(S[i].x, S[i].y); //x값을 다시 랜덤으로 받는다.
putch(S[i].ch);//랜덤값 출력
}
else {
S[i].exist = FALSE;
}
}
}
Sleep(1000 / frame);
}//for(;;)
}//main
반응형
'C언어' 카테고리의 다른 글
[c언어] BMI측정 프로그램 (0) | 2020.04.02 |
---|---|
[c언어] 로또번호 생성기 (0) | 2020.04.02 |
[C언어] 학생 성적 프로그램 (+반평균) (0) | 2020.04.02 |
[C언어] 가위 바위 보 게임 (0) | 2020.04.02 |
[C언어] 고객 관리 프로그램 (0) | 2020.04.02 |