현재 위치 - 인적 자원 플랫폼망 - 미니프로그램 자료 - 재미있는 C 애플릿이 있나요?
재미있는 C 애플릿이 있나요?
DEVc++의 작은 "적 비행기 파괴" 게임 :?

# include & ltstdio.h & gt

# include & ltconio.h & gt

# include & ltstdlib.h & gt

# include & ltwindows.h & gt

# include & lttime.h & gt

# include & lttime.h & gt

#define zlx 10?//증분 좌표(X)는 게임 상자가 한쪽으로 움직이지 않도록 합니다.

#Define zly 3? //증분 좌표(Y)는 게임 상자가 한쪽으로 움직이지 않도록 합니다.

#DEFINE W 26?//게임 상자의 너비

#DEFINE H 24?//게임 상자의 높이

INT JIEM[22][22]={0}, WJ = 10;? //인터페이스 배열, 기본 위치(초기값 10)

int speed = 4, density = 30, score = 0, deaths = 0; //적의 속도, 적 밀도, 플레이어 성능, 사망자 수입니다.

int m = 0, n = 0; ? // m, n은 적 항공기를 제어하는 변수입니다.

void gtxy (int x, int y)? // 커서 위치를 제어하는 함수

{좌표 위치;

포지션. x = x? 위치. y = y?

SetConsoleCursorPosition(GetStdHandle(STD _ OUTPUT _ HANDLE), pos);

}

void? Colour (int? a)? // 색을 설정하는 함수 (a는 1-15여야 함)

{ SetConsoleTextAttribute(GetStdHandle(STD _ OUTPUT _ HANDLE), a); }

void yinc(int x=1, int y=0)? // 커서를 숨기는 함수

{Console_Cursor_Info?gb={x, y }; // y를 0으로 설정하여 숨깁니다.

SetConsoleCursorInfo(GetStdHandle(STD _ OUTPUT _ HANDLE), & ampGB);

}

void csh()? //초기화 함수

{ int I;

colour(7);

gtxy(zlx, zly); printf("╭"); ?gtxy(zlx+W-2, zly); printf("☢"); ? // 상자의 왼쪽 상단과 오른쪽 상단 모서리

gtxy(zlx, zly+H-1); printf("═"); gtxy(zlx+W-2, zly+H-1); printf("⇦"); // 두 프레임의 모서리를 낮춤

for(I = 2; i & ltw-2; i+=2) {gtxy(zlx+i, zly); ?printf("═"); }? //프린트 위쪽 가로 프레임

for(I = 2; I& ltw-2; i+=2) {gtxy(zlx+i, zly+H-1); printf("═"); } ? //하단 수평 프레임 인쇄

for(I = 1; I& lth-1; i++) { gtxy(zlx, zly+I); ?printf("║"); }//좌단 수직 프레임 인쇄

for(I = 1; I& lth-1; i++) { gtxy(zlx+W-2, zly +I); printf("║"); }? //우측 세로 박스 인쇄

colour(14); gtxy(19, 2); Printf("적기 파괴"); colour(10);

gtxy(37, 5); printf(" setting:Esc");

gtxy( 37, 7); Printf("Launch:↑");

gtxy(37, 9); printf(" Control:←→");

gtxy(37, 11); Printf("Score:%d", score);

gtxy(37, 13); Printf("Death:%d. ", death);

yinc(1, 0);

}

void qcjm()? //클리어 인터페이스 함수

{int i, j;

for(I = 0; I & lth-2; i++)

for(j = 0; j & ltw-4; j++){gtxy(zlx+2+j, zly+1+I); printf(" "); }

}

void feiji()? //항공기 이동 함수

{int i, j;

for(I = 21; I& gt=0;I-)? // 아래에서 위로 적기가 배열에서 곧장 빠져나가는 것을 방지합니다.

for(j = 0; j & lt22;j++)

{ if(I = = 21 & amp; & ampjiem[i][j]==3)?jiem[I][j]= 0; ? // 선을 넘지 않도록 맨 아래 줄에 0을 할당합니다.

?if(jiem[i][j]==3)?jiem[i][j]= 0, jiem[I+1][j]= 3;

}

if(jiem[20][wj]= = 3 & amp; & ampjiem[21][wj]= = = 1)death++;

}

p>

void purpledan()? //아이템 심볼 이동 함수

{ int i, j;

for(I = 0; I & lt22;i++)

for(j = 0; j & lt22;j++)

{ if(I = = 0 & amp; & ampjiem[I][j] = = = 2)jiem[I][j] = 0;

if(jiem[i][j]==2) {?if(jiem[I-1][j]= = 3)score+= 100, printf(" \ 7 ");?

?jiem[i][j]= 0, jiem[I-1][j]= 2; }

}

}

}

Cancel print(?) ? //출력 인터페이스 함수

{int i, j;

qcjm();

for(I = 0; I & lt22;i++)

for(j = 0; j & lt22;j++)

{ gtxy(12+j, 4+I);

if(jiem[I][. j] = = 3){ Color(13); printf("□");}

if(jiem[I][j] = = 2){ Color(10); printf(" . ");}

if(jiem[I][j] = = 1){ Color(10); printf("■");}

}

gtxy(37, 11); Colour(10); Printf("Score:%d", score);

gtxy(37, 13); Printf ("Death:%d", death);

}

void setup()? //게임 설정 함수

{ qcjm();

gtxy(12, 4); Printf("적 속도 선택:");

gtxy(12, 5); printf("?1. 빠른 2. 중간 3. 느린>; >);

switch(getche())

? {case' 1 ':speed= 2; break;

case "2":speed= 4; break;

case "3":speed= 5; break;

default:gtxy(12, 6); printf("? Incorrect! 기본값");

?}

gtxy(12, 7); printf("적 밀도 선택:");

gtxy(12, 8); printf("?1. large 2. medium 3. small >; >);

Switch(getche())

{example "1. ":Density = 20; break;

Instance "2":Density = 30; ? break;

사례 "3":밀도= 40; break;

? Default:gtxy(12, 9); printf("? Incorrect! Default");

}

for(int I = 0; I & lt22;i++)

for(int j = 0; j & lt22;j++)jiem[I][j] = 0;

jiem[21][wj = 10]= 1; jiem[0][. 5] = 3;

gtxy(12, 10); printf("? 저장하려면 아무 키나 누르세요... ");

getch();

qcjm();

}

Empty run()? // 게임 실행 함수

{ jiem[21][wj]= 1; ? // 1의 값은 우리 머신을 나타냅니다(2는 총알입니다).

jiem[0][5] = 3; // 값 3은 적 머신을 나타냅니다.

SetConsoleTitle("파괴 적 머신"); ? //창 제목을 설정

while(1)

{?if (kbhit())? // 키를 눌러 내 기계가 왼쪽이나 오른쪽으로 이동하거나 발사 또는 설정하도록 제어합니다.

? { int key

if ((key = getch())= = 224)key = getch();

스위치 (키)?

{Case 75:if(wj & gt; 0) jiem[21][wj] = 0, jiem[21][-wj] = 1; break;

? Case 77:if (wj & lt20)?jiem[21][wj]= 0, jiem[21][++++wj]= 1; ? Break;

? Case 72:jiem[20][wj]= 2; break;

Case 27:set();

}

}

If (++n % density==0)? // 적 항공기의 속도를 제어합니다.

{ n = 0; srand((부호없는) time (null));

?jiem[0][rand()% 20+1]= 3;

}

?if(++m % speed = = 0){ feiji(); m = 0;} ? // 적 기체의 이동 속도를 제어합니다(총알 기준)

? zidan();

print();

sleep(120); ? // 120밀리초 지연

}

}

int main()

{ csh();

?run();

? return 0;

}

쉽게 코딩해야 하는 초보자는 다음과 같은 자체 컴파일 함수를 모을 수 있습니다:

SetConsoleTitle("Tetris"); ? // 창 왼쪽 상단의 제목 표시줄에 "Tetris"라는 단어를 표시하도록 설정합니다.

srand((부호 없는) time (empty)); ? //난수 생성기를 초기화합니다

n=rand(?) % 20;? //0-19 사이의 난수 생성, 예: rand(?) 5는 0에서 4 사이의 숫자를 생성합니다.

SetConsoleTitle(?) 의 함수는 다음과 같이 동시에 사용하는 것입니다.

Sleep(300); ? // 300밀리초 지연(즉, 300밀리초 후에도 프로그램이 계속 실행됨)

System("cls"); ? // 화면을 지웁니다(창에 있는 모든 것을 지우고 커서를 (0, 0)에 놓습니다)

두 함수 모두

void gtxy (int x, int y)? // 커서 위치를 제어하는 함수

{coordinate position;

position. x = x?

position. y = y?

SetConsoleCursorPosition(GetStdHandle(STD _ OUTPUT _ HANDLE), pos);

}

< /p>

EmptyColour(int a)? //색상을 설정하는 함수

{ SetConsoleTextAttribute(GetStdHandle(STD _ OUTPUT _ HANDLE), a); }

void yinc (int x, int y)? //커서의 기능을 숨깁니다

{Console_Cursor_Info?gb={ x, y }; ? //gb는 커서를 나타냅니다.

SetConsoleCursorInfo(GetStdHandle(STD _ OUTPUT _ HANDLE), ? & ampGB);

}

void kou(int w, int h)? // 창 크기를 설정하는 함수

{Handle ?.HL = GetStdHandle(STD _ OUTPUT _ HANDLE); ?

Coordinates?size = { w, h }; ?

SetConsoleScreenBufferSize( hl, size); ?

Small_RECT?rc={ 0, 0, w, h }; ?

setconsolewindoinfo(hl, 1, & ampRC); ?

}

마지막 함수에서 매개변수 w는 넓고 매개변수 h는 높습니다. 다섯 줄 중 첫 번째 줄은 핸들 변수 hl을 정의하고 값을 할당합니다.

두 번째 줄은 좌표 구조 변수의 크기를 정의하며, 이 값에 따라 버퍼의 크기가 결정됩니다. 세 번째 줄은

size 값을 사용하여 버퍼의 크기를 설정합니다. 네 번째 줄은 현재 창이 표시되는 위치를 결정하는 변수 rc를 정의합니다.

크기(버퍼의 크기를 초과해서는 안 됨)를 정의합니다. 처음 두 0은 버퍼의 왼쪽 상단 모서리에서 0 열과 0 행 위치에서 시작하고, 마지막 두 0은 0 열과 0 행 위치에서 시작합니다.

매개변수는 w와 h보다 작을 수 있습니다(예:?rc={0, 0, w-10, h-5 }). 마지막 줄은 가운데에 있는 창 값을 rc로 설정합니다.

이 매개변수는 "1"이거나 "true"로 작성해야 유효합니다.

이 매개변수는 "1"이거나 "true"로 작성해야 유효합니다.