c/c++语言开发共享C语言实现飞机游戏(1)

本文实例为大家分享了c语言实现飞机游戏的具体代码,供大家参考,具体内容如下本节我们将在上一节 实现基础上完成简单的飞机游戏。scanf 控制飞机移动我们可以使用 scanf 函数来检测输入,分别使用

c/c++开发分享C语言实现飞机游戏(1)实例为大家分享了c语言实现飞机游戏的具体代码,供大家参考,具体内容如下

本节我们将在上一节 实现基础上完成简单的飞机游戏。

scanf 控制飞机移动

我们可以使用 scanf 函数来检测输入,分别使用 a , s , d , w .来控制 x , y 坐标来实现飞机移动。

#include <stdio.h>  #include <stdlib.h>  int main(){      int i,j;      int x = 5;      int y = 10;      char input; //此处声明变量用于检测输入            while(1){          system("cls"); //清屏,linux改为clear          //输出上方空行          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 == 's')              x ++;          if(input == 'w')              x --;      }      return 0;  }

说明 :

scanf 函数中,%c 表示输入值类型为字符(char),&input表示把输入的值赋给 input 。

getch 控制飞机移动

之前我们使用 scanf 函数来控制移动,它要求每次输入之后按下回车才能继续,交互效果不好。

为了优化效果,我们使用 getch 函数,不需要回车就能得到输入字符。首先要包含 <conio.h>。

注意

一般unix/linnux系统没有<conio.h>头文件,需要从互联网下载使用。

除此之外,还需要 kbhit 函数来 监听 用户输入,如果用户输入,此函数返回 1 ,否则返回 0 ,从而避免不输入就暂停的情况。

#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"); //清屏,linux改为clear          //输出上方空行          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 == 's')                      x ++;                  if(input == 'w')                      x --;          }      }      return 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"); //飞机尾

发射激光

通常我们看到的飞机游戏都是可以哒哒哒的,所以我们现在也来给我们的飞机加个发射激光的功能。

可以定义一个变量 isfire 来表示激光状态,默认为 0 ,按下空格后改变为 1 ,此后可以加判断句,若为 1 ,则输出激光(用 “|” 表示),否则无输出。

if(isfire == 0)   {    //无激光,正常输出空行      for(i=0; i<x; i++)      printf("n");  }  else  {    //有激光,在飞机上方输出“|”      for(i=0; i<x; i++) //首先遍历x坐标,确保上方每行都有激光      {          for(j=0; j<y; j++)              printf(" "); //在y坐标之前输出空行          printf("  |n"); //到达对应飞机头的坐标输出“|”       }      isfire = 0; //每次输出激光后把isfire的值归零,不然会一直输出  }

打靶练习

在加入敌人之前,我们首先要完成打靶,也就是先要清楚怎么判断敌人是否被消灭。

我们以 “+” 表示靶子,使用变量 iskilled 来记录其是否被击中,当其值为0时说明未击中,输出靶子;否则不再输出靶子。

首先定义关于靶子的量:

int ny = 5; //ny表示靶子y坐标,默认在第一行  int iskilled = 0; //击中状态为0

然后在死循环中首行输出靶子:

if(!iskilled){      for(j=0; j<ny; j++)          printf(" ");      printf("+n");  }

这里判断条件中 ! 是指 “非” ,因为默认 iskilled 是 0 ,也就是 “否” 的意思,那么这儿条件就是 “非否” ,双重肯定表否定嘛。那么当 iskilled 为 1 的时候条件就成了 “非是”,即不执行输出。

最后输出激光后要判断是否击中:

if(y + 2 == ny){      iskilled = 1;  }

这里 y + 2 是因为激光在飞机中心输出,而飞机中心距 y 坐标有2个空格。

注意这一段代码必须插入在输出激光后面,且要在 isfire 归零之前(要是 isfire 先归零了那你还打个锤子)。

小结

完整代码:

#include <stdio.h>  #include <stdlib.h>  #include <conio.h>  int main(){      int i,j;      int x = 5;      int y = 10;      char input; //此处声明变量用于检测输入      int ny = 5; //ny表示靶子y坐标,默认在第一行      int iskilled = 0; //击中状态为0      int isfire = 0; //激光状态为0            while(1){          system("cls"); //清屏,linux改为clear          if(isfire == 0)           {    //无激光,正常输出空行              for(i=0; i<x; i++)                  printf("n");          }          else          {    //有激光,在飞机上方输出“|”              for(i=0; i<x; i++) //首先遍历x坐标,确保上方每行都有激光              {                  for(j=0; j<y; j++)                      printf(" "); //在y坐标之前输出空行                  printf("  |n"); //到达对应飞机头的坐标输出“|”               }              if(y + 2 == ny)                  iskilled = 1;              isfire = 0; //每次输出激光后把isfire的值归零,不然会一直输出          }          //更炫酷的飞机          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"); //飞机尾          printf("n");                if(kbhit()){ //判断是否有输入              input = getch();                  if(input == 'a')                      y --;                  if(input == 'd')                      y ++;                  if(input == 's')                      x ++;                  if(input == 'w')                      x --;          }      }      return 0;  }

思考题:

1.打个移动靶?

目前游戏还是很简单,大家先不要急,以后会有更多更复杂的游戏。

以上就是c/c++开发分享C语言实现飞机游戏(1)的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

需要了解更多c/c++开发分享C语言实现飞机游戏(1),都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1247418.html

(0)
上一篇 2022年9月27日
下一篇 2022年9月27日

精彩推荐