目录

前言

一、先看代码

二、代码解析

1、飞机图案的打印

2、控制飞机移动

getch() 函数

kbhit() 函数

3、发射激光

4、打击靶子

总结


前言

代码参考了《C语言课程设计与游戏开发实践教程》

飞机小游戏介绍:

玩家通过输入"WSAD,空格"来控制飞机的上下左右移动和发射激光,击落随机出现的目标。这里我们先实现简单的飞机移动,发射激光和打击目标后靶子消失。

一、先看代码

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>int main()
{int i, j;int X = 5;int y = 10;       // 飞机的初始位置int speed = 1;   // 飞机的移动速度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 -= speed; // 位置左移if (input == 'd')y += speed; // 位置右移if (input == 'w')X -= speed; // 位置上移if (input == 's')X += speed; // 位置下移if (input == ' ')isFire = 1;}}return 0;
}

可以先将代码运行,然后再看注释来理解这个代码。接下来我会对这段代码进行解释。

二、代码解析

1、飞机图案的打印

这个就是我们飞机的样子,可以理解为是在 3*5 的空间中用空格和 " * " 来表示。当我们理解这个后,就可以知道怎么来输出这个飞机图案了。

首先,将光标通过 for 循环来移动到需要打印飞机图案的行和列(这里我让光标移动到第5行,第10列的位置);接下来就是打印第一行的飞机图案( printf("  *\n"); );做完这些后你会发现光标已经到飞机图案第二行所在的行的最前面,这个时候就要用 for 循环来让光标移动到飞机第二行图案的前面,其他的位置用空格来占位,打印飞机的第二行符号( printf("*****\n"); );做完这些后按同样的方法将飞机最后一行的符号打印出来( printf(" * * \n"); )。这样我们的飞机图案就出来了。代码如下:

        // 下面输出一个比较复杂的飞机图案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");

2、控制飞机移动

上面我们实现了飞机的图案打印,接下来我们来实现飞机的移动。这里我们使用 getch() 函数来实现玩家从键盘输入字符 "WSAD" 来控制飞机的移动。

getch() 函数

getch()——从控制台读取一个字符,但不显示在 屏幕 上,想了解更多看这里。

这里我们使用 getch() 函数来输入字符是为了不出现所输入的字符。

kbhit() 函数

kbhit() 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。

想了解更多看这里。

代码如下:

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

3、发射激光

实现飞机移动后我们来实现飞机的发射激光。这里我们让玩家按下空格键后飞机发射 " | " 表示激光。同上面飞机的移动,只需在原来的 for 循环中再加一个 if() 判断玩家是否按下了空格键。如果按下我们就让之前定义用来表示飞机是否发射激光的变量变为 1 。通过 0(飞机没有发射激光) 和 1(飞机发射激光) 表示飞机是否发射激光。

代码如下:

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

4、打击靶子

实现飞机发射激光后,就要来实现飞机打靶了。先定义一个靶子 ny 表示靶子在第一行, 第  ny 列。同上面打印飞机的图案,我们来打印靶子 " + " 。

代码如下:

     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 循环,if 判断,getch() 函数输入的知识。

这里我只让靶子生成一次,接下来就是对这个小游戏的升级了,下次再见。

C语言——简单的飞机小游戏相关推荐

  1. 超级详细的注释C语言简单实现童年小游戏:贪吃蛇

    引言: 记得小时候还没有现在超级高端的智能手机,当时的诺基亚类型的老人机是我的最爱,而里面的贪吃蛇小游戏我总是能玩很久,所以今天就用C语言简单实现一下贪吃蛇这一个小游戏吧. 一. 准备工作: 1.VS ...

  2. C语言简单的双人小游戏

    #include<stdio.h>//双人小游戏 #include<windows.h> int main() {     printf("规则:输1聚气(用于买招式 ...

  3. C/C++实现简单打飞机小游戏【初版】

    文章目录 C版本 点子 初版1.1 静止的飞机 初版1.2 动态飞机(使用按键控制飞机移动) 初版1.3 动态飞机(按空格发射和关闭激光) 初版1.4 动态飞机(按空格发射一次激光,移动时关闭) 初版 ...

  4. C语言——简单的五子棋小游戏开发设计

    下面展示一些 功能实现 一.菜单功能模块设计 int Menu() {system("color 3F");printf("-----------------亲,欢迎来到 ...

  5. c语言简单的飞机计分小游戏

    比较简单的飞机小游戏,直接用C语言即可实现功能,我已经做了较为完整的注释,希望大家可以看得懂,对学C的有所帮助. #include <stdio.h> #include <stdli ...

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

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

  7. C语言 打飞机 小游戏

    C语言实现简单的打飞机小游戏 编译环境:vs2019 需求: 在同一个平面内,控制大炮发射的三个方向,空格发射炮弹,敌军和友军飞机会一直随机在天上飞过,击中天上飞行的敌军飞机加一分,击中友军飞机减一分 ...

  8. 基于C语言Ncurse库和链表的简单贪吃蛇小游戏

    参考:基于C语言Ncurse库和链表的简单贪吃蛇小游戏 作者:三速何时sub20 发布时间:2020-09-29 10:23:51 网址:https://blog.csdn.net/weixin_44 ...

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

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

最新文章

  1. 使php支持mbstring库以及使用
  2. 使用Comet4j实现消息推送
  3. SSM整合Shiro 身份验证及密码加密简单实现
  4. mongodb数据合并设计_「时间序列数据」和MongoDB(二)-模式设计最佳实践
  5. JavaScript实现十种经典排序算法(js排序算法)
  6. 注释那些事儿:前端代码质量系列文章(一)
  7. php mysql 平均分_平均评级计算mysql php
  8. (47)VHDL实现8位奇偶校验电路(for loop语句)
  9. 学了这几招,社交时人人都对你刮目相看(转载)
  10. CSS超全笔记(适合新手入门)
  11. numpy 用于图像处理(灰度图、转置、通道分离、图像扩展、水平镜像、水平翻转、调换x,y坐标、添加mask、随机打乱顺序、交换通道)
  12. Java学习路线总结(思维导图篇)
  13. seetaface6之画出人脸位置
  14. matlab矩阵逆时针旋转90度_matlab矩阵旋转任意角度的函数 imrotate
  15. Angluar编译过程中出现的TS2339问题
  16. 厦门大学计算机考研复试线2021,2021浙江大学、中科大、厦门大学考研复试分数线公布!...
  17. 如何提高自己的学习能力(JAVA篇)
  18. Linux面试题大全(带答案的哦)
  19. 配置mpls vpn基本组网-intranet
  20. 调试助手与康耐视智能相机Insight以太网通讯

热门文章

  1. 05react中ant-design样式框架使用
  2. java基于ssm的学校教务管理系统的设计与实现论文-计算机毕业设计
  3. pet shop 4.0架构信息-转
  4. verilog一二三段式状态机的标准区别和示例
  5. 计算机学霸装学渣,为什么很多真学霸喜欢装假学渣,你身边有这样的人吗?
  6. 浅谈搜索引擎工作原理
  7. AndroidStudio gradle 7.0+配置说明
  8. 【Java】2022年团体程序设计天梯赛 L1 和 L2-042 题解
  9. node.js PM2部署项目
  10. 鸿蒙系统能用wps吗,WPS Office鸿蒙版app