C语言——简单的飞机小游戏
目录
前言
一、先看代码
二、代码解析
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语言——简单的飞机小游戏相关推荐
- 超级详细的注释C语言简单实现童年小游戏:贪吃蛇
引言: 记得小时候还没有现在超级高端的智能手机,当时的诺基亚类型的老人机是我的最爱,而里面的贪吃蛇小游戏我总是能玩很久,所以今天就用C语言简单实现一下贪吃蛇这一个小游戏吧. 一. 准备工作: 1.VS ...
- C语言简单的双人小游戏
#include<stdio.h>//双人小游戏 #include<windows.h> int main() { printf("规则:输1聚气(用于买招式 ...
- C/C++实现简单打飞机小游戏【初版】
文章目录 C版本 点子 初版1.1 静止的飞机 初版1.2 动态飞机(使用按键控制飞机移动) 初版1.3 动态飞机(按空格发射和关闭激光) 初版1.4 动态飞机(按空格发射一次激光,移动时关闭) 初版 ...
- C语言——简单的五子棋小游戏开发设计
下面展示一些 功能实现 一.菜单功能模块设计 int Menu() {system("color 3F");printf("-----------------亲,欢迎来到 ...
- c语言简单的飞机计分小游戏
比较简单的飞机小游戏,直接用C语言即可实现功能,我已经做了较为完整的注释,希望大家可以看得懂,对学C的有所帮助. #include <stdio.h> #include <stdli ...
- c语言射击类打飞机小游戏感悟
c语言:简单飞机射击小游戏 使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,操作方法是"a""d""w"或者"←" ...
- C语言 打飞机 小游戏
C语言实现简单的打飞机小游戏 编译环境:vs2019 需求: 在同一个平面内,控制大炮发射的三个方向,空格发射炮弹,敌军和友军飞机会一直随机在天上飞过,击中天上飞行的敌军飞机加一分,击中友军飞机减一分 ...
- 基于C语言Ncurse库和链表的简单贪吃蛇小游戏
参考:基于C语言Ncurse库和链表的简单贪吃蛇小游戏 作者:三速何时sub20 发布时间:2020-09-29 10:23:51 网址:https://blog.csdn.net/weixin_44 ...
- C语言射击类打飞机小游戏
使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,击中敌机可获得积分,被敌机撞中死亡一次,每次游戏有3次机会. 在网上查询资料并且和同学讨论之后,对原来的代码有了一些改进, 改进:增加了颜色函数 ...
最新文章
- 使php支持mbstring库以及使用
- 使用Comet4j实现消息推送
- SSM整合Shiro 身份验证及密码加密简单实现
- mongodb数据合并设计_「时间序列数据」和MongoDB(二)-模式设计最佳实践
- JavaScript实现十种经典排序算法(js排序算法)
- 注释那些事儿:前端代码质量系列文章(一)
- php mysql 平均分_平均评级计算mysql php
- (47)VHDL实现8位奇偶校验电路(for loop语句)
- 学了这几招,社交时人人都对你刮目相看(转载)
- CSS超全笔记(适合新手入门)
- numpy 用于图像处理(灰度图、转置、通道分离、图像扩展、水平镜像、水平翻转、调换x,y坐标、添加mask、随机打乱顺序、交换通道)
- Java学习路线总结(思维导图篇)
- seetaface6之画出人脸位置
- matlab矩阵逆时针旋转90度_matlab矩阵旋转任意角度的函数 imrotate
- Angluar编译过程中出现的TS2339问题
- 厦门大学计算机考研复试线2021,2021浙江大学、中科大、厦门大学考研复试分数线公布!...
- 如何提高自己的学习能力(JAVA篇)
- Linux面试题大全(带答案的哦)
- 配置mpls vpn基本组网-intranet
- 调试助手与康耐视智能相机Insight以太网通讯