C 언어의 비행기 대전 게임
기술 원형
1.void gotoxy(int x,int y)함수,이 함 수 는 커서 를(x,y)의 위치 로 인쇄 할 수 있 습 니 다.
2.링크,저장 상태 에 사용;
3.windows.h 에 비 차단 입력 이 있 습 니 다.kbhit();
4.무 작위 생 성 수;
5.시각 은 잠시 남긴다.
6.충돌 검 측;
7.스크린 함수;
8.경계 설정;
기술 노선
1.경계 설정 하기;
2.총알 의 목록 유지 하기;
3.적기 의 목록 유지 하기;
4.비행기의 위 치 를 초기 화 합 니 다.
5.1 초 마다 적기 한 대 를 생 성하 고 위치 x 좌 표를 생 성하 여 무 작위 로 하고 좌 표 는 0 이다.
6、스페이스 바 를 클릭 하여 총알 생 성 설정;
7.while(1)순환 을 설정 하고 그 중에서 매번 화면 정리 와 업 데 이 트 를 합 니 다.
8.매번 총알 링크 를 업데이트 하여 모든 총알 의 위 치 를 위로 이동 합 니 다.
9.매번 적기 링크 를 업데이트 하여 모든 적기 의 위 치 를 아래로 이동 시 킵 니 다.
10.충돌 검 측,총알 과 적기 목록 을 옮 겨 다 니 며 충돌 을 발견 하면 각자 의 링크 에서 충돌 하 는 노드 를 제거 합 니 다.
11.적기 가 본 기계 게임 에 부 딪 히 면 종료 합 니 다.
12.총알 이나 적기 가 경계 에 부 딪 히 면 링크 에서 제거 합 니 다.
13.부 딪 힐 때마다 1 점 씩 추가 합 니 다.
실현 효과
시간 을 소비 하 다
약 6 시간 30 분
코드
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#include <math.h>
struct node {
int x;
int y;
struct node* next;
};
typedef struct node node_t;
typedef struct node* nodeptr_t;
void gotoxy(int x, int y); //
void print_plane(int x, int y); //
nodeptr_t generate_bullet(nodeptr_t listnode, int x, int y); //
void print_bullet(nodeptr_t listnode); //
nodeptr_t update_bullet(nodeptr_t listnode); //
nodeptr_t generate_target(nodeptr_t listnode, int x); //
void print_target(nodeptr_t listnode); //
nodeptr_t update_target(nodeptr_t listnode); //
int collision_detection(nodeptr_t bulletlist, nodeptr_t targetlist); //
bool is_gameover(int x,int y, nodeptr_t targetlist); //
void clear(nodeptr_t bulletlist, nodeptr_t targetlist);
int main() {
int plane_x = 0, plane_y = 19; //
char control; //
bool isfire = 0; //
nodeptr_t target = nullptr; //
target = (nodeptr_t)malloc(sizeof(node_t));
target->next = nullptr;
target->x = 0;
target->y = 0;
nodeptr_t bullet = nullptr; //
bullet = (nodeptr_t)malloc(sizeof(node_t));
bullet->next = nullptr;
bullet->x = 0;
bullet->y = 0;
int subtime = 0;
time_t starttime;
starttime = time(NULL);
int grade = 0; //
int targetspeed = 0;
int bulletspeed = 0;
while(1)
{
system("cls");
time_t currenttime;
currenttime = time(NULL);
//
if (currenttime - starttime - subtime > 0)
{
srand((unsigned)time(NULL));
unsigned int target_y = rand() % 14 + 3;
target = generate_target(target, target_y);
}
subtime = currenttime - starttime;
//
if (isfire)
{
bullet = generate_bullet(bullet, plane_x, plane_y - 1);
isfire = 0;
}
//
print_target(target);
targetspeed++;
if(targetspeed % 2 == 0)
target = update_target(target);
//
print_bullet(bullet);
bulletspeed++;
if (bulletspeed % 2 == 0)
bullet = update_bullet(bullet);
//
grade = grade + collision_detection(bullet, target);
gotoxy(0, 25);
printf("SCORE: %d", grade);
//
print_plane(plane_x, plane_y);
//
bool isgameover = is_gameover(plane_x, plane_y, target);
//Sleep(100);
//
if (isgameover)
{
clear(target, bullet);
plane_x = 0;
plane_y = 19;
isfire = 0;
system("cls");
gotoxy(8, 8);
printf("SCORE: %d", grade);
gotoxy(8, 9);
printf("GAME OVER");
grade = 0;
break;
}
if (_kbhit())
{
control = _getch();
if (control == ' ')
isfire = 1;
else
isfire = 0;
if (control == 'w' && plane_y > 0)
plane_y--;
if (control == 's' && plane_y < 20)
plane_y++;
if (control == 'a' && plane_x > 0)
plane_x--;
if (control == 'd' && plane_x < 20)
plane_x++;
}
}
return 0;
}
void gotoxy(int x, int y)//
{
COORD p;// p
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//
p.X = x;
p.Y = y;//
SetConsoleCursorPosition(handle, p);//
return;
}
void print_plane(int x, int y) //
{
if (x == 0)
{
gotoxy(x, y);
printf("*");
gotoxy(x, y + 1);
printf("***");
gotoxy(x, y + 2);
printf(" *");
}
else if (x == 1)
{
gotoxy(x, y);
printf("*");
gotoxy(x-1, y + 1);
printf("****");
gotoxy(x-1, y + 2);
printf("* *");
}
else if (x == 20)
{
gotoxy(x, y);
printf("*");
gotoxy(x - 2, y + 1);
printf("***");
gotoxy(x - 1, y + 2);
printf("* ");
}
else if (x == 19)
{
gotoxy(x, y);
printf("*");
gotoxy(x - 2, y + 1);
printf("****");
gotoxy(x - 1, y + 2);
printf("* *");
}
else
{
gotoxy(x, y);
printf("*");
gotoxy(x - 2, y + 1);
printf("*****");
gotoxy(x - 1, y + 2);
printf("* *");
}
return;
}
nodeptr_t generate_bullet(nodeptr_t listnode, int x, int y)
{
nodeptr_t newbullet = nullptr; //
newbullet = (nodeptr_t)malloc(sizeof(node_t));
newbullet->next = listnode->next;
newbullet->x = x;
newbullet->y = y;
listnode->next = newbullet;
return listnode;
}
void print_bullet(nodeptr_t listnode)
{
nodeptr_t templist = listnode;
while (templist->next != nullptr)
{
gotoxy((templist->next->x), templist->next->y);
printf("|");
templist = templist->next;
}
return;
}
nodeptr_t update_bullet(nodeptr_t listnode)
{
nodeptr_t templist = listnode;
while (templist->next != nullptr)
{
if (templist->next->y > 0)
(templist->next->y)--;
else
{
nodeptr_t tempnode = templist->next;
templist->next = tempnode->next;
tempnode->next = nullptr;
free(tempnode);
}
if (templist->next != nullptr)
templist = templist->next;
else
break;
}
return listnode;
}
nodeptr_t generate_target(nodeptr_t listnode, int x)
{
nodeptr_t newtarget = nullptr; //
newtarget = (nodeptr_t)malloc(sizeof(node_t));
newtarget->next = listnode->next;
newtarget->x = x;
newtarget->y = 0;
listnode->next = newtarget;
return listnode;
}
void print_target(nodeptr_t listnode)
{
nodeptr_t templist = listnode;
while(templist->next != nullptr)
{
gotoxy(templist->next->x, templist->next->y);
printf("+");
templist = templist->next;
}
return;
}
nodeptr_t update_target(nodeptr_t listnode)
{
nodeptr_t templist = listnode;
while (templist->next != nullptr)
{
if (templist->next->y < 21)
(templist->next->y)++;
else
{
nodeptr_t tempnode = templist->next;
templist->next = tempnode->next;
tempnode->next = nullptr;
free(tempnode);
}
if (templist->next != nullptr)
templist = templist->next;
else
break;
}
return listnode;
}
int collision_detection(nodeptr_t bulletlist, nodeptr_t targetlist)
{
int grade = 0;
nodeptr_t tempbulletlist = bulletlist;
while(tempbulletlist->next != nullptr)
{
nodeptr_t temptargetlist = targetlist;
while(temptargetlist->next != nullptr)
{
if(temptargetlist->next->x == (tempbulletlist->next->x) && temptargetlist->next->y > tempbulletlist->next->y)
{
nodeptr_t tempnode = temptargetlist->next;
temptargetlist->next = tempnode->next;
tempnode->next = nullptr;
free(tempnode);
tempnode = tempbulletlist->next;
tempbulletlist->next = tempnode->next;
tempnode->next = nullptr;
free(tempnode);
grade++;
break;
}
if (temptargetlist->next != nullptr)
temptargetlist = temptargetlist->next;
else
break;
}
if (tempbulletlist->next != nullptr)
tempbulletlist = tempbulletlist->next;
else
break;
}
return grade;
}
bool is_gameover(int x, int y, nodeptr_t targetlist)
{
nodeptr_t temptargetlist = targetlist;
while (temptargetlist->next != nullptr)
{
int tempsub = abs((temptargetlist->next->x) - x);
if (tempsub == 0 && temptargetlist->next->y > y)
{
return 1;
}
else if(tempsub == 1 && temptargetlist->next->y > y + 1)
{
return 1;
}
else if (tempsub == 2 && temptargetlist->next->y > y + 1)
{
return 1;
}
temptargetlist = temptargetlist->next;
}
return 0;
}
void clear(nodeptr_t bulletlist, nodeptr_t targetlist)
{
while (bulletlist->next != nullptr)
{
nodeptr_t temp = bulletlist->next;
bulletlist->next = temp->next;
//temp->next = nullptr;
free(temp);
}
while (targetlist->next != nullptr)
{
nodeptr_t temp = targetlist->next;
targetlist->next = temp->next;
//temp->next = nullptr;
free(temp);
}
return;
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.