C语言代码实现飞机大战

 更新时间:2020年12月02日 10:25:29   作者:Cielfire  
这篇文章主要为大家详细介绍了C语言实现简单飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现简单飞机大战的具体代码,供大家参考,具体内容如下

这个游戏的功能很单一,也就是“飞机大战”,哈哈哈哈。总共只有300多行代码左右,你也可以想想它会有多简陋,把它复制下来编译一下可以直接执行,需要的同学可以自取~

PS:我运行的环境是 dev c++,前提你要在C99的环境中执行

以下是源代码

#include<stdio.h>
#include<stdio.h>
#include<windows.h>   //将用户从键盘获得的输入进行输出 
#include<conio.h>   //获得用户键盘的输入 
//定义全局变量 
int high,width;   //定义边界 
int position_x,position_y;  //飞机位置 
int bullet_x,bullet_y;  //子弹位置 
int enemy_x,enemy_y;  //敌军飞机 
int score;    //获得分数 
int flag;    //飞机状态 
void gotoxy(int x,int y);   //光标移动到(x,y)位置
void welcometogame();     //初始化界面
int color(int c);       //更改文字颜色
void explation();   //游戏右侧显示 
void scoreandtips();  //显示游戏提示 
void show();   //显示游戏界面 
void endgame();   //游戏结束 
/**
 * 文字颜色函数   
 */
int color(int c)
{
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);    //更改文字颜色
 return 0;
}
 
 /**
 * 设置光标位置
 */
void gotoxy(int x,int y)
{
  COORD c;
  c.X=x;
  c.Y=y;
  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
 
 
 
void welcometogame() //开始界面
{
 int n;
 color(15);
 gotoxy(43,10);
 printf("飞 机 大 战");
 color(11);
 gotoxy(25, 22);
 printf("1.开始游戏");
 gotoxy(45, 22);
 printf("2.游戏说明");
 gotoxy(65, 22);
 printf("3.退出游戏");
 gotoxy(40,27);
 color(3);
 printf("请选择 1 2 3:");    
 color(14);
  scanf("%d", &n);   //输入选项
  switch (n)
  {
   case 1:
   system("cls");
   show();
     break;
   case 2:
     explation();    //游戏说明函数
     break;
   case 3:
     exit(0);    //退出游戏
     break;
 default:  
  color(12);
  gotoxy(40,28);
  printf("请输入1-3之间的数!");
  _getch();  //输入任意键
  system("cls"); //清屏
  welcometogame();
  }
}
 
 
void explation() //游戏提示 
{
 int i,j = 1;
  system("cls");
  color(10);
  gotoxy(44,1);
  printf("游戏说明");
  color(2);
  for (i = 3; i <= 28; i++)  //输出上下边框===
 {
 for (j = 6; j <= 80; j++) //输出左右边框||
 {
  gotoxy(j, i);
  if (i == 3 || i == 28) printf("=");
  else if (j == 6 || j == 80) printf("||");
 }
 }
  color(3);
  gotoxy(20,5);
  printf("1. W,A,S,D 分别控制飞机的上下左右移动");
  color(10);
  gotoxy(20,8);
  printf("2. 按空格发射子弹,打中敌机即可得到一分");
  color(14);
  gotoxy(20,11);
  printf("3.碰到敌机子弹死亡");
  color(11);
  gotoxy(20,14);
  printf("4. ESC :退出游戏");
  color(4);
  gotoxy(20,17);
  printf("5. 玩的愉快!!!");
  color(7);
 gotoxy(20,20);
 printf("/*****按任意键返回主页面*****/");
  _getch();        //按任意键返回主界面
  system("cls");
  welcometogame();
}
 
void scoreandtips()//游戏侧边提示 
{
 gotoxy(50,8);
 color(14);
 printf("游戏得分:%d ",score);
 gotoxy(50,10);
 printf("用W A S D 分别控制飞机的移动");
 gotoxy(50,12);
 printf("按下空格键即为发射炮弹");
 gotoxy(50,14);
 printf("@ 的样子就是敌人的飞机");
}
 
 
void HideCursor() // 用于隐藏光标
{
 CONSOLE_CURSOR_INFO cursor_info = {1, 0}; // 第二个值为0表示隐藏光标
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
 
 
void startup()   //数据初始化 
{
 high=20;   //定义游戏界面的高度 
 width=40;   //游戏界面的宽度 
 
 position_x=high-3;  //定义飞机的初始位置 
 position_y=width/2;
 
 bullet_x=0;
 bullet_y=position_y; 
 
 enemy_x=0;
 enemy_y=position_y;
 
 score=0;
 
 flag=0;    //飞机完好 
 
 HideCursor();
}
 
void show()    //显示界面 
{
 
 int i,j,k;
 for(i=0;i<high;i++)
 {
 for(j=0;j<width;j++)
 {
  if(flag)
  break;
  else if((i==position_x)&&(j==position_y)) //飞机坐标 
  {
  printf("^");
  }
  else if((i==enemy_x)&&(j==enemy_y))  //敌机坐标 
  printf("@");
  else if((i==bullet_x)&&(j==bullet_y))  //子弹坐标 
   printf("|");
  else if ((j==width-1)||(i==high-1)||(j==0)||(i==0))  //打印边界 
  printf("-");
  else
  printf(" ");
 }
 printf("\n"); 
 }
 printf("\n");
 if((position_x==enemy_x)&&(position_y==enemy_y))
 {
 
 flag=1;   //飞机撞毁 游戏结束 
 system("cls");
 printf("游戏结束!!!\n");
 
 }
 else
 {
  printf("分数 %d",score);
  }
  /** _getch();        //按任意键返回主界面
    system("cls");
    welcometogame();
 */ 
 
 }
 
void endgame()
{
 int k,f;
 system("cls");
 printf("输入1再玩一次,输入2返回主菜单,输入3退出游戏");
 scanf("%d",&k);
 system("cls");
 switch(k) 
 {
  case 1:
   printf("重新玩游戏");
   system("cls");
   startup();   // 数据初始化
   show();
   break;
  case 2:
   printf("返回主菜单");
   system("cls");
   welcometogame();
   startup();   
   break;
  case 3:printf("退出成功");
   exit(0);
   break;
  default:
   color(12);
   gotoxy(40,28);
   system("cls");
   printf("输入错误,输入任意键回到主菜单");
   _getch();  //输入任意键
   welcometogame(); 
   startup();   
   system("cls");  //清屏
 } 
}
 
 
void withoutInpute()   //与用户输入无关
{
 if(bullet_x>0)    //子弹上升效果 
 bullet_x--;
 if((bullet_x==enemy_x)&&(bullet_y==enemy_y)) //子弹命中敌机 
 {
 score++;
 bullet_x=-1; 
 enemy_x=1;
 enemy_y=2+rand()%width-2;
 } 
 
 
 static int speed;
 if(speed<30)   //减慢敌机速度,不影响飞机和子弹速度 
 speed++;
 if(speed==30)
 {
 if(enemy_x<high)
  enemy_x++;
 else 
 {
  enemy_x=0;
  enemy_y=2+rand()%width-2;
 }
 speed=0;
 }
 
 
 
 
}
void withInpute()   //与用户输入有关 
{
 char input;
 if(kbhit())     //控制飞机方向 
 {
 input=getch();
 if((input=='w')&&position_x>1)
  position_x--; 
 if((input=='s')&&position_x<high-2)
  position_x++; 
 if((input=='a')&&position_y>1)
  position_y--; 
 if((input=='d')&&position_y<width-2)
  position_y++;
 if(input==' ')
 {
  bullet_x=position_x-1;
  bullet_y=position_y;
 }
 }
}
 
int main()
{
 system("mode con cols=100 lines=30");  //设置控制台的宽高
 welcometogame();
 startup();   // 数据初始化
 //explation();
 while(1)   // 游戏循环执行
 {
 gotoxy(0,0);
 show();   // 显示画面
 scoreandtips(); 
 if(flag == 1)
 {
  endgame(); 
 }
 withoutInpute(); // 与用户输入无关的更新
 withInpute();  // 与用户输入有关的更新
 }
 return 0;
 } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 带头结点单链表(详解)

    带头结点单链表(详解)

    这篇文章主要介绍了带头结点单链表 (详解),需要的朋友可以参考下
    2023-07-07
  • C++深入探究二阶构造模式的原理与使用

    C++深入探究二阶构造模式的原理与使用

    C++中经常会因为调用系统资源失败导致出现BUG,所以在类调用构造函数需要分配系统资源时会出现BUG,从而导致类对象虽然被创建,但是只是个半成品,为了避免这种情况需要使用二阶构造模式
    2022-04-04
  • C++函数重载的细节图文详解

    C++函数重载的细节图文详解

    函数重载即函数名相同,函数形参列表不同(函数特征标不同)的一类函数称为函数重载,下面这篇文章主要给大家介绍了关于C++函数重载的相关资料,需要的朋友可以参考下
    2022-12-12
  • C语言连续生成多个随机数实现可限制范围

    C语言连续生成多个随机数实现可限制范围

    这篇文章主要介绍了C语言连续生成多个随机数实现可限制范围,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C++ 二维数组参数传递的实现方法

    C++ 二维数组参数传递的实现方法

    这篇文章主要介绍了C++ 二维数组参数传递的实现方法的相关资料,这里提供三种方法帮助大家实现这样的功能,需要的朋友可以参考下
    2017-08-08
  • C++实现inline hook的原理及应用实例

    C++实现inline hook的原理及应用实例

    这篇文章主要介绍了C++实现inline hook的原理及应用,需要的朋友可以参考下
    2014-08-08
  • C+继承之同名覆盖,函数重写与多态详解

    C+继承之同名覆盖,函数重写与多态详解

    这篇文章主要介绍了C+继承之同名覆盖,函数重写与多态,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下,希望能够给你带来帮助
    2021-09-09
  • C++赋值函数+移动赋值函数+移动构造函数详解

    C++赋值函数+移动赋值函数+移动构造函数详解

    这篇文章主要介绍了C++赋值函数+移动赋值函数+移动构造函数详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • C语言折半查找法的超详细讲解

    C语言折半查找法的超详细讲解

    折半查找法也叫做⼆分查找,顾名思义就是把数据分成两半,再判断所查找的key在哪⼀半中,再重复上述步骤知道找到⽬标key,下面这篇文章主要给大家介绍了关于C语言折半查找法的相关资料,需要的朋友可以参考下
    2022-06-06
  • VSCode远程代码开发及DNS隧道端口转发实现远程办公代码

    VSCode远程代码开发及DNS隧道端口转发实现远程办公代码

    这篇文章主要介绍了VSCode远程代码开发及DNS隧道端口转发实现远程办公,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04

最新评论