利用C语言实现一个最简单的飞机游戏

作者:畅游星辰大海 时间:2022-12-11 15:17:22 

前言

在前面弹跳小球的基础上实现一个简单的飞机游戏,主要包括飞机的显示、控制移动、显示复杂图案、发射激光、打靶练习等功能。

利用C语言实现一个最简单的飞机游戏

目前的飞机还很简单,大家不要着急,一步一步来,在后面会实现更复杂的飞机游戏效果。比如

  • 如何让靶子移动起来?

  • 如何统计和显示击中得分?

  • 如何实现 * * 效果?

一、利用scanf控制飞机移动

第一步利用scanf输入不同的字符,按a、s、d、w键后改变坐标2、y的值,从而控制飞机*字符上下左右移动,如图

利用C语言实现一个最简单的飞机游戏

最基础的代码如下

#include<stdio.h>
#include<stdlib.h>
int main()
{
   int i,j;
   int x=5;
   int y=10;
   char input;

while(1)
   {
       system("cls");
       //输出飞机上面的空行
       for(i=0;i<x;i++)
          printf("\n");
       //输出飞机左边的空格
       for(j=0;j<y;j++)
          printf(" ");
       printf("*");//输出飞机
       printf("\n");

scanf("%c",&input);
       if(input=='a');
          y--;
       if(input=='d');
          y++;
       if(input=='w');
          x--;
       if(input=='s');
          x++;
   }
   return 0;
}

二、getch控制飞机移动

scanf()函数要求每输入一个字符按回车键后才能执行,交互效果不好,因此第二步使用一个新的输入函数getch()(#include<conio.h>),不需要回车就可以得到输入的控制字符。另外,kbhit()函数在用户有键盘输入时返回1,否则返回 0;在没有键盘输入时 if(kbhit())下面的语句不会运行,从而避免出现用户不输入,游戏就暂停的情况。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
   int i,j;
   int x=5;
   int y=10;
   char input;

while(1)
   {
       system("cls");

for(i=0;i<x;i++)
          printf("\n");//输出飞机上面的空行
       for(j=0;j<y;j++)
          printf(" ");//输出飞机左边的空格
       printf("*");//输出飞机
       printf("\n");

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
   int i,j;
   int x=5;
   int y=10;
   char input;

while(1)
   {
       system("cls");

for(i=0;i<x;i++)
          printf("\n");//输出飞机上面的空行
       for(j=0;j<y;j++)
          printf(" ");//输出飞机左边的空格
       printf("*");//输出飞机
       printf("\n");

if(kbhit())  // 判断是否有输入
       {
           input = getch();  // 根据用户的不同输入来移动,不必输入回车
           if (input == 'a')  
               y--;  // 位置左移
           if (input == 'd')
               y++;  // 位置右移
           if (input == 'w')
               x--;  // 位置上移
           if (input == 's')
               x++;  // 位置下移
       }
   }    
   return 0;
}
   }
   return 0;
}

三、显示复杂的飞机图案

利用C语言实现一个最简单的飞机游戏

四、发射激光

按空格键后让飞机发射激光 * ,即在飞机上方显示一列竖线'|'。第四步定义变量isFire,用来记录飞机是否处于发射 * 的状态。

当isFire等于1时,将在飞机的正上方输出激光竖线。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
   int i,j;
   int x=5;
   int y=10;
   char input;
   int isFire;

while(1)
   {
       system("cls");
       if(isFire==0)
       {
          for(i=0;i<x;i++)
             printf("\n");
       }
       else
       {
           for(i=0;i<x;i++)
           {
               for(j=0;j<y;j++)
                  printf(" ");
               printf("  |\n");
           }
           isFire=0;
       }
       //下面输出一个复杂的飞机图案
       for(j=0;j<y;j++)
          printf(" ");// 输出飞机上面的空行  
       printf("  *\n");//头
       for(j=0;j<y;j++)
          printf(" ");//头下一行左边的空格
       printf("*****\n");//身子
       for(j=0;j<y;j++)
          printf(" ");
       printf(" * * \n");

if(kbhit())  // 判断是否有输入
       {
           input = getch();  // 根据用户的不同输入来移动,不必输入回车
           if (input == 'a')  
               y--;  // 位置左移
           if (input == 'd')
               y++;  // 位置右移
           if (input == 'w')
               x--;  // 位置上移
           if (input == 's')
               x++;  // 位置下移
           if (input == ' ')
               isFire = 1;
       }
   }
   return 0;
}

五、打靶练习

第五步在第一行通过定义一个变量ny,增加一个靶子&lsquo;十&lsquo;,控制飞机发射激光击中它,变量isKilled 用来存储是否被击。

isKilled 等于0显示靶子;

isKilled 等于1时不再显示靶子

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
   int i,j;
   int x = 5;
   int y = 10;
   char input;
   int isFire = 0;

int ny = 5; // 一个靶子,放在第一行,ny列上
   int isKilled = 0;

while (1)
   {
       system("cls");   // 清屏函数

if (!isKilled)  // 输出靶子
       {
           for (j=0;j<ny;j++)
               printf(" ");
           printf("+\n");
       }

if (isFire==0) // 输出飞机上面的空行
       {
           for(i=0;i<x;i++)
               printf("\n");
       }
       else   // 输出飞机上面的激光竖线
       {
           for(i=0;i<x;i++)
           {
               for (j=0;j<y;j++)
                   printf(" ");
               printf("  |\n");
           }
           if (y+2==ny)  // +2是因为激光在飞机的正中间,距最左边2个坐标
               isKilled = 1; // 击中靶子
           isFire = 0;
       }

// 下面输出一个复杂的飞机图案
       for (j=0;j<y;j++)
           printf(" ");        
       printf("  *\n");
       for (j=0;j<y;j++)
           printf(" ");
       printf("*****\n");
       for (j=0;j<y;j++)
           printf(" ");
       printf(" * * \n");

if(kbhit())  // 判断是否有输入
       {
           input = getch();  // 根据用户的不同输入来移动,不必输入回车
           if (input == 'a')  
               y--;  // 位置左移
           if (input == 'd')
               y++;  // 位置右移
           if (input == 'w')
               x--;  // 位置上移
           if (input == 's')
               x++;  // 位置下移
           if (input == ' ')
               isFire = 1;
       }
   }    
   return 0;
}

来源:https://blog.csdn.net/m0_73222051/article/details/127212717

标签:C语言,飞机游戏
0
投稿

猜你喜欢

  • C# memcached缓存使用实例代码

    2022-01-15 02:17:11
  • SpringBoot向容器注册bean的方法详解

    2023-09-02 10:58:22
  • Java各种排序算法汇总(冒泡,选择,归并,希尔及堆排序等)

    2021-10-05 14:46:23
  • 代码分析c++中string类

    2023-04-24 17:15:29
  • Java父线程(或是主线程)等待所有子线程退出的实例

    2022-10-23 16:25:50
  • Android编程中的5种数据存储方式

    2022-04-22 07:05:09
  • C# 基于udp广播收集局域网类所有设备信息

    2022-04-28 00:17:23
  • 深入解析JVM对dll文件和对类的装载过程

    2023-06-14 23:23:33
  • Springboot打包为Docker镜像并部署的实现

    2023-06-05 23:11:52
  • C# Assembly.Load案例详解

    2021-11-06 03:20:33
  • C#编程自学之数据类型和变量一

    2023-07-30 02:45:49
  • SWT(JFace)体验之打开多个Form

    2021-11-29 03:19:15
  • mybatis QueryWrapper的条件构造之apply、last、select解析

    2022-02-12 17:32:51
  • java打印指定年月的日历

    2023-11-11 19:21:19
  • Android进阶从字节码插桩技术了解美团热修复实例详解

    2022-05-27 18:06:07
  • springboot 集成redission 以及分布式锁的使用详解

    2023-06-20 06:48:43
  • java中的SpringBoot框架

    2022-02-10 16:50:05
  • C#中感叹号(!) 的作用总结

    2021-10-14 15:08:12
  • Android自定义view实现仿抖音点赞效果

    2021-11-04 11:58:19
  • java的多线程高并发详解

    2022-06-28 10:12:06
  • asp之家 软件编程 m.aspxhome.com