C 언어 로 비행기 타기 게임 실현
컴 파일 환경:vs 2019
필요:
같은 평면 내 에서 대포 발사 의 세 방향 을 제어 하고,스페이스 바 로 포탄 을 발사 하 며,적군 과 아군 비행 기 는 줄곧 무 작위 로 하늘 을 날 아 갈 것 이 며,하늘 을 비행 하 는 적군 비행 기 를 명중 시 키 면 1 점 을 더 하고,아군 비행 기 를 명중 시 키 면 1 점 을 줄 일 것 이다.
생각:
먼저 프로그램 을 초기 화한 다음 에 설명 과 지 도 를 그리고 무한 순환 에 들어간다.순환 에서 비행기 가 끊임없이 하늘 을 날 고 awd 스페이스 바 를 통 해 게임 내용 을 제어 하 며 게임 조건 에 부합 할 때 세 가지 주요 절 차 를 가산 한다.
방법:
먼저 비행기의 애니메이션 효 과 를 실현 하려 면 본질 적 으로 콘 솔 에서 세 개의 x 축 에 하나의 문자열 을 출력 하고 이 세 개의 문자열 을 동시에 이동 하 는 것 처럼 보 여야 한다.여기 서 저 는 도박 대회 의 경험 을 빌 렸 습 니 다.첫 번 째 무한 순환 에서 각각 1,2,3 개의 문자열 을 순환 적 으로 출력 한 다음 에 세 개의 문자열 x 축 좌표 수 치 를 추가 하고 두 번 째 무한 순환 에서 지난 문자열 의 이동 흔적 을 제거 하 며 세 개의 문자열 을 각각 출력 하여 두 번 째 단 계 를 나 가 겠 다 고 했 습 니 다.내부 for 순환 에 휴면 함수 가 없 기 때문에 세 문자열 이 동시에 이동 하 는 효과 로 보 입 니 다.이렇게 하면 무한 순환 을 통 해 비행기 세 대가 끊임없이 이동 한 다 는 것 을 나 타 낼 수 있다.
다음은 getch 함 수 를 통 해 대포 의 방향(한 글자)을 바 꾸 는 것 입 니 다.포구 가 방향 을 바 꾸 는 동시에 포탄 이 초기 화 된 위치 도 변 합 니 다.빈 칸 을 누 르 면 포탄(한 글자)은 그의 초기 화 위치 에서 설 정 된 노선 을 따라 끊임없이 이동 합 니 다.가로 세로 축 좌표 가 비행기 좌표 와 일치 할 때 적군 비행기 인지 여 부 를 판단 합 니 다.예,득점 에 1 을 더 해 야 합 니 다.그렇지 않 으 면 득점 에서 1 을 빼 야 합 니 다.
그 밖 에 절차 에 많은 세부 사항 이 있 으 니,여기 서 일일이 군말 하지 않 는 다.
난점:
세 문자열 을 동시에 이동 시 키 는 것 같 습 니 다.이것 은 알고리즘 이 므 로 배 웠 으 면 기초 지식 을 기억 하 는 것 처럼 그 를 기억 해 야 한다.원 리 를 깨 달 은 후에 비교적 쉽게 파악 할 수 있다.
설명:
이것 은 간단 한 작은 프로그램 으로 이 프로그램의 똑 같은 효 과 를 실현 하 는 데 여러 가지 방법 이 있 고 저 는 배열 을 대량으로 사용 하여 다양한 데 이 터 를 저장 하고 통계 하 며 사용 합 니 다.사실은 유사 한 효 과 는 단일 체인 표를 통 해 이 루어 질 수 있 습 니 다.현재 내 인식 에서 배열 과 직접 출력 문자열 을 사용 하 는 쓰기 가 간결 하고 명료 하 다 는 장점 이 있다.그러나 효과 적 으로 치 명 적 인 결함 도 생 겼 다.
주의:
컴 파 일 러 때문에 프로그램 중kbhit()와getch()함 수 는 다른 컴 파일 러 에서 컴 파일 하 는 데 오류 가 발생 할 수 있 습 니 다.해결 방법 은 함수 앞의''를 제거 하 는 것 입 니 다.
실행 효과:
코드 구현:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <string.h>
void HideCursor(); //
void gotoxy(int x, int y); //
#define R 26 // x
#define N 20 //
int ax[3] = { 0 }; // ,
int y[3] = { 3,7,11 }; // y , , y
// , y
int i; //
int fd[3]; //
void cshcxhs() //
{
system("title "); //
system("mode con cols=100 lines=30"); // 100, 30
HideCursor(); //
gotoxy(46, 12); //
printf(" :");
gotoxy(36, 14);
printf("w a d , ");
gotoxy(26, 16);
printf(" |---0> , >>>>>> ");
gotoxy(40, 18);
printf(" %d ",N);
Sleep(2800);
system("cls");
int k; //
gotoxy(40, R); //
for (k = 0; k < 17; k++)
printf("_");
gotoxy(46, R);
printf("[_O_]");
gotoxy(48, 25); // x:48
printf("|");
int j;
srand((unsigned)time(NULL)); //
for (j = 0; j < 3; j++) // x ,
{
ax[j] = rand() % R;
fd[j] = rand() % 2;
}
gotoxy(0, R);
printf(" :"); // x 9
}
void hcfjhs() //
{
gotoxy(ax[i], y[i]); //
if (fd[i] == 1)
printf("|---0>");
else
printf(">>>>>>");
gotoxy(ax[i] - 1, y[i]); //
printf(" ");
ax[i]++; // ,
}
void dhpdxshs() // , x94
{
for (i = 0; i < 3; i++) //
{
hcfjhs();
if (ax[i] + 6 >= 94) // 94
{
gotoxy(94, y[i]); // 94
printf(" ");
if (ax[i]+6 > 100) // 100,
{
ax[i] = rand() % R; // R
fd[i] = rand() % 2;
}
}
}
}
int da = 2; //da = 1 ,
int yip = 0; // ,0 ,1,2,3
int rtde = 1; // ,
int shells_x; //
int shells_y;
void ckkzhs()
{
char ch;
ch = _getch();
if (ch == 'd' || ch == 'D')
{
gotoxy(49, 25);
printf("/"); //
gotoxy(47, 25);
printf(" ");
da = 3; //
}
if (ch == 'A' || ch == 'a')
{
gotoxy(47, 25);
printf("\\"); //
gotoxy(48, 25);
printf(" ");
da = 1; //
}
if (ch == 'W' || ch == 'w')
{
gotoxy(48, 25);
printf("|");
gotoxy(47, 25);
printf(" ");
gotoxy(49, 25);
printf(" ");
da = 2;
}
if (ch == ' '&& rtde == 0) // ,
{
if (da == 2) //
yip = 2;
if (da == 1) //
{
yip = 1;
shells_x = 45; //
}
if (da == 3) //
{
yip = 3;
shells_x = 51;
}
shells_y = 23; //
}
}
void dpfshs() //
{
rtde = 1; // ,
if (yip == 2)
{
shells_x = 48;
gotoxy(shells_x, shells_y-=2);
printf("o");
gotoxy(shells_x, shells_y+2);
printf(" ");
}
if (yip == 1)
{
gotoxy(shells_x-=2, shells_y-=2);
printf("o");
gotoxy(shells_x+2, shells_y+2);
printf(" ");
}
if (yip == 3)
{
gotoxy(shells_x+=2, shells_y-=2);
printf("o");
gotoxy(shells_x-2, shells_y+2);
printf(" ");
}
if (shells_y <= 1) // ,
{
yip = 0; // ,
gotoxy(48, 1); //
printf(" ");
gotoxy(23, 1);
printf(" ");
gotoxy(73, 1);
printf(" ");
rtde = 0; // , ,
}
}
int score; //
void pdfsjzhs() //
{
for (i = 0; i < 3; i++)
{
if (shells_x >= ax[i] && shells_x <= ax[i] + 6 && shells_y == y[i])//
{
if(fd[i]==1)
score++; // ,
else
{
score--;
if (score <= 0)
score = 0;
}
rtde = 0; // ,
gotoxy(ax[i]-1, y[i]); // ,
printf(" ");
ax[i] = rand() % R; // 10
fd[i] = rand() % 2; //
gotoxy(shells_x, shells_y); //
printf(" ");
shells_x = 0, shells_y = 0; // , ,
}
}
gotoxy(9, R);
printf("%d",score);
if (score >= N) //
{
system("cls"); //
gotoxy(39,15);
printf(" , :%d !", N);
gotoxy(0, 29);
exit(0);
}
}
void process() //
{
while (1)
{
dhpdxshs(); //
if (_kbhit())
{
ckkzhs(); //
}
dpfshs(); //
pdfsjzhs(); //
Sleep(18);
}
}
int main()
{
cshcxhs(); //
process(); //
return 0;
}
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void gotoxy(int x, int y)
{
COORD pos = { x,y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
부족 한 점:나 는 프로그램 에서 비행 기 를 출력 할 때 비행기 꼬리 에서 비행기 전 체 를 직접 출력 하 는 방법 을 사용 했다.이것 은 매우 멍청 하지만 매우 간단 한 방법 이다.이런 방법 으로 인해 비행 기 는 콘 솔 의 최대 폭 을 날 아 가 는 동시에 비행기 기 체 를 하나씩 제거 할 수 없 게 되 었 다.비행기 머리 가 콘 솔 의 최대 폭 을 넘 으 면 프로그램 출력 오류 가 발생 하기 때문에 나 는'비행기 가 한 마디 한 마디 몸 으로 경 계 를 날 아 갈 수 있 도록'라 는 비행 기 를 사라 지게 할 때 자 연 스 러 워 보 이 는 효 과 를 유지 하기 위해 서 이다.마지막 비행기 가 있 는 Y 축의 마지막 6 개의 x 축 칸 을 비행 기 를 가 리 는 판자 로 삼 아 유사 한 효 과 를 실현 할 수 밖 에 없다.
이 프로그램 이 창의 적 인 것 을 제외 하고 모두 본인 이 직접 쓴 것 입 니 다.제 능력 이 유한 하기 때문에 이 프로그램 을 쓰 는 동시에 제 프로그램 에 대량의 코드 재 활용 성,구조 엄밀 성,운영 효율 이 낮은 문제 가 존재 한 다 는 것 을 어렴풋이 느 꼈 습 니 다.또한 많은 함수 와 변 량 식별 자 는 제 가 낙서,중국어 병 음 으로 구 성 된 방법 을 사 용 했 습 니 다.
c 언어 초보 자로 서 저 는 알 수 없 는 지식 에 대해 항상 학습 과 겸손 한 태 도 를 가지 고 있 습 니 다.만약 에 귀 하 는 제 절차 에 대해 재 활용 성,엄밀 성,운영 효율 에 대한 건 의 를 할 수 있다 면 저 는 감사 하 겠 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.