目录

前言

正文

一、利用scanf控制飞机移动

二、getch控制飞机移动

三、显示复杂的飞机图案

四、发射激光

五、打靶练习

写在最后


前言

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

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

  1. 如何让靶子移动起来?
  2. 如何统计和显示击中得分?
  3. 如何实现子弹散弹效果?

正文

一、利用scanf控制飞机移动

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

最基础的代码如下

#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;} 

三、显示复杂的飞机图案

四、发射激光

空格键后让飞机发射激光子弹,即在飞机上方显示一列竖线'|'。第四步定义变量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,增加一个靶子‘十‘,控制飞机发射激光击中它,变量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;
}

写在最后

【C语言】简易版_飞机小游戏相关推荐

  1. 【C语言】进阶版_飞机小游戏

    目录 前言 一.代码重构 二.新式子弹代替激光 三.优化敌方战机 四.增加积分模块 五.更好的清屏功能 写在最后 前言 没有学习函数,以上功能都在main()中实现是有点痛苦的.在学了函数之后会模块化 ...

  2. 【C语言】豪华版_飞机小游戏

    目录 前言 一.飞机显示与控制 二.发射子弹 三.击中敌机 四.多台敌机 五.发射散弹 写在最后 前言 这是飞机游戏的第三版,我们已经实现了基础版和进阶版的飞机游戏  ,但是存在的问题很明显:已经发射 ...

  3. C语言射击类打飞机小游戏

    使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,击中敌机可获得积分,被敌机撞中死亡一次,每次游戏有3次机会. 在网上查询资料并且和同学讨论之后,对原来的代码有了一些改进, 改进:增加了颜色函数 ...

  4. c语言射击类打飞机小游戏感悟

    c语言:简单飞机射击小游戏 使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,操作方法是"a""d""w"或者"←" ...

  5. Java版打飞机小游戏

    放假写的一个Java端打飞机小游戏. 复习到的知识点有:java图形界面,多线程,集合框架等. 主要的收获是知道了处理图层的方式,即JLayeredPane层次面板,主要思路 如下: 1.       ...

  6. 基于JAVA实现简易版泡泡堂小游戏

    一.简介--童年记忆 <泡泡堂>是由韩国游戏公司Nexon开发的一款休闲游戏(Casual Game),于2003年在中国大陆上线,由盛大网络运营.游戏讲述了在哈巴森林的一个村落的村民们利 ...

  7. [源码和文档分享]基于JAVA实现简易版泡泡堂小游戏

    一.简介--童年记忆 <泡泡堂>是由韩国游戏公司Nexon开发的一款休闲游戏(Casual Game),于2003年在中国大陆上线,由盛大网络运营.游戏讲述了在哈巴森林的一个村落的村民们利 ...

  8. JavaGUI简易版贪吃蛇小游戏

    做这个小游戏,主要是学习一下游戏制作的基本逻辑,加深对面向对象的理解. 游戏引擎: /*** 大牛程序员写的游戏的公共类 * 使用Game.init()方法初始化游戏* 使用Game.gameOver ...

  9. JS自制简易版数字华容道小游戏

    最近复习了下前端基础知识HTML+JS(是真的非常基础那种,久不用,基本忘完了). 复习了一小部分内容,闲暇之余打算利用刚复习的js基础知识做个小游戏,刚好手机上下载的游戏集中就有一个数字益智游戏-- ...

最新文章

  1. 使用Axure制作App原型的尺寸设置
  2. SpringCloud微服务注册调用入门-路由网关
  3. cmd命令不识别exp_GRAT2:一款功能强大的命令amp;控制(C2)工具
  4. quartz定时任务配置
  5. linux压缩zip下载,linux下wget下载文件到指定目录,解压zip文件,解压与压缩总结...
  6. 103页PPT带你从浅到深了解什么是PMP项目管理(全)
  7. wps算账怎么用计算机,WPS教程--基本编辑功能的使用--操作界面
  8. 小米盒子 android 投影仪,小米盒子连接投影仪方法
  9. Android直接回复通知
  10. librosa提取mel_fbank
  11. Android系统开发篇(二) —— 建立Android系统开发环境之Ubuntu 20.04.4 LTS
  12. 记录一下近期自己的顿悟
  13. MacOS 下恢复使用谷歌浏览器翻译功能
  14. android版本低无法安装微信,解决低版本安卓4.4.4无法安装微信的问题
  15. Android WiFi系统
  16. opcclient源码OPC客户端DA源码(c#开发)
  17. ora_arc0_oracle是啥,什么是Oracle数据库的ORA?
  18. 志汇同城-同城小程序8.6开源版源码赠送米花同城6.6.6+微同城模板
  19. windows 下.bat 文件双击无法运行
  20. 现在的年轻人,都欠债吗?

热门文章

  1. Python中随机数种子的作用及使用
  2. 第55天:三战easy-dex
  3. 批量发工资条小工具使用说明
  4. vue通过自定义指令 v-py 将名字转拼音
  5. 4.2 Hive SQL
  6. 【贪玩巴斯】带你一起攻克英语语法长难句—— 第三章——名词(短语)和名词性从句{主语、宾语、表语和同位语}全解 ——2022年2月6日-16日
  7. CDR中人民币符号怎么打
  8. 水生植物拉丁文及缩写
  9. 在 sys.servers 中找不到服务器 '******'。请验证指定的服务器名称是否正确。
  10. python123作业怎么提交_使用python提交作业