<p dir="auto">//DOS 모드에서 분수를 만든 것이다.<br />
//스페이스바를 누르면 끝난다.
<p dir="auto"><br /><br /><span><a href="/trending/include">#include <stdio.h><span>
<a href="/trending/include">
#include <conio.h><span>
<a href="/trending/include">
#include <stdlib.h>
<p dir="auto">typedef struct _SM<br />
{<br />
float x;<br />
float y;<br />
float x0;<br />
float vx;<br />
float vy;<br />
float vy0;<br />
int timeCount;<br />
int boundCount;
<pre><code>_SM* next;
<p dir="auto">}SM; // 파티클을 노드로 구현하기 위해 구조체 선언
<p dir="auto">void main()<br />
{<br />
SM *head = NULL; //첫부분의 노드 생성 및 초기화<br />
SM *tail = NULL; // 마지막 부분의 노드 생성 및 초기화
<pre><code>char bg[25][80];
for(;;) // 무한 루프
{
system("cls"); //이전화면 지우기
for(int y = 0; y < 25; y++)
{
for(int x = 0; x < 80; x++)
{
bg[y][x] = ' ';
}
}
bg[24][79]=NULL;
//생성영역
SM *i = new SM; // 새로운 피티클 한개 생성 후 초기값들 입력
i->x=0.0f;
i->y=0.0f;
i->x0=40.0f;
i->vx= (rand()%11 - 5) * 0.1f;
i->vy= ((rand()%22) * 0.1f);
i->vy0 = i->vy;
i->timeCount=0;
i->boundCount=2;
i->next = NULL;
if( head == NULL) // 처음 생성된 파티클 노드가 없다면 현재 노드를 처음과 끝으로 세팅
{
head = i;
tail = i;
}
else //처음 생성한 파티클 노드가 있다면 끝으로 세팅
{
tail->next = i;
tail =i;
}
//업데이트
SM* bm=NULL; // 새로운 파티클용 노드 생성
for(SM* i = head; i != NULL; i = i->next)//노드의 처음부터 다음것까지 루프
{
i->x = i->x0 + i->vx * i->timeCount; //좌우 이동 등가속도
i->y = i->vy * i->timeCount;// 위아래 이동 등가속도
i->y = i->y - (0.098f * i->timeCount * i->timeCount)/2.0f; //중력 가속도 적용
int tx = int(i->x);
int ty = int(i->y);
if( tx < 0)
tx =0;
else if( tx > 79)
tx =79;
if( ty < 0)
ty =0;
else if( ty > 24)
ty =24;
bg[ 24-ty][tx] = '.'; //현재값에서 24를 빼면 꼭대기가 0, 바닥이 24인 좌표로 변환된다.
i->timeCount++;
if (i->y < 0.0f) //파티클의 좌표가 바닥인 0보다 더 아래에 있다면 튕겨주기 위해 세팅한다.
{
i->vx = i->vx / 2.0f; //옆으로 이동 가속도를 반 줄인다.
i->vy = i->vy / 2.0f; //위로 튕기는 가속도를 반 줄인다.
i->timeCount =0;
i->boundCount--;
i->x0 = i->x;
}
if( i->boundCount <=0) // 다 튕겼으면 없앤다.
{
//i를 삭제
if( i == head )
{
if( i->next == NULL)
{
head = NULL;
tail = NULL;
}
else
{
head = head->next;
}
}
else if( i == tail)
{
tail = bm;
tail->next = NULL;
}
else
{
bm->next = i->next;
}
delete i;
break;
}
bm = i;
}
// 지금까지 내용을 텍스트로 모두 도스창에 표현
bg[24][79]=NULL;
printf("%s", bg);
if(kbhit()) //스페이스바 누르면 끝내기
{
if(getch()==32)
{
break;
}
}
}
<p dir="auto">}