C 언어의 비행기 대전 게임

본 논문 의 사례 는 여러분 에 게 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;
 }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기