c语言入门级小游戏·飞机(1.0版)| 激发你的编程兴趣(50~100行代码)

article/2025/8/24 9:51:20

目录

制作一个可移动的飞机

发射激光

设置一个可击中的障碍物

完整代码


声明:本游戏参考《c语言课程设计与游戏开发实践教程》。

先来放一个效果图

 怎么样,真的是新手级别吧?

(效果视频c语言练习草稿_game1.2.5飞机-CSDN直播)

  • 可以通过wasd四个键控制飞机的移动,按空格键可以发射激光击中前方的障碍物*,击中后障碍物消失。

下面来看看如何制作吧

制作一个可移动的飞机

#include <stdio.h>
#include <stdlib.h>  
#include <conio.h> 
int main()
{int x=15;
int y=5;
int i,n;while(1)    //意思是死循环
{
system("cls");   //清屏函数
for(i=0;i<y;i++)
printf("\n");      //输出飞机上面的空行for(n=0;n<x;n++)
printf(" ");       //输出飞机左侧的空格
printf("  *\n");     //输出飞机头部for(n=0;n<x;n++)
printf(" ");       //输出飞机身体部分左侧的空格
printf("*---*\n");  //因为飞机头部输出后有回车,所以飞机身体已经在下一行for(n=0;n<x;n++)
printf(" ");       //输出飞机尾巴部分左侧的空格
printf(" +-+ \n"); 
... ...未完待续
  • 以上代码可以输出一个完整的飞机图案,但是飞机还不能自由移动。我们本来可以使用scanf函数输入来实现控制飞机移动:if按某个键,x或者y就会+1或者-1。
  • 但是,使用scanf还要按下回车键才能使飞机移动,这样玩自然很不爽。所以这里我们使用一个新的函数getch()。
  • getch函数:该函数来自 <conio.h>函数库,因此函数头文件需要加上#include <conio.h>。只接收单个字符,接受单个字符之后不需要回车键就可以返回值,能让飞机直接移动。我们把这个函数应用到后续代码中
... ...续接上方代码
char move;     
move=getch();     //注意getch函数的使用
if(move=='a')       //注意是==不是=
x--;              //就是x-1的意思,实现让飞机左移if(move=='d')
x++;if(move=='w')
y--;if(move=='s')
y++;
}                 //这些代码都在while(1)内
}

现在这个飞机可以实现自由移动了!

发射激光

现在我们添加一些代码实现发射激光

  1. 定义一个新变量int bill(随便叫什么),这个变量负责控制激光。当bill=0的时候不发射激光,当bill=1的时候发射激光。
  2. 在system下方添加代码。如🐎1
  3. 相应在输入指令下方添加空格发射激光的指令,如🐎2
🐎1.if(bill==0)
{for(i=0;i<y;i++)printf("\n");
}
else   {for(i=0;i<y;i++){for(n=0;n<(x+2);n++)   //x+2的原因是飞机头左侧空格有x+2个printf(" ");           //这个+2是为了和身体对称而手动输出的printf("|\n");         //记得换行}}
bill=0;
/*如果bill==0,就输出飞机上方的空行
如果bill!=0,也会先输出空行
这个空行坐标既是飞机的,也是激光的
这样的话,程序下方输出空行的指令就不再需要
程序下方输出空行的指令可以删去*//*else的解析:
else中进行了for的嵌套循环,外层循环使得每一行都输出|
内层循环使每一个 | 都在飞机头上方同一位置,呈现激光状*/

🐎2.... ...续接在一连串if(move==××)y/x++/--的下方
添加
if(move==' ')bill=1;这一步意思是,按下空格使bill!=0,这时就会执行图1的else

 大家理解了吗?下放给大家呈现能发射激光的完整代码

#include <stdio.h>
#include <stdlib.h>  
#include <conio.h> 
int main()
{
int x=15;
int y=5;
int i,n;
int bill=0;
char move;while(1)    //意思是死循环
{
system("cls");   //清屏函数if(bill==0)
{for(i=0;i<y;i++)printf("\n");
}
else   {for(i=0;i<y;i++){for(n=0;n<(x+2);n++)   //x+2的原因是飞机头左侧空格有x+2个printf(" ");           //这个+2是为了和身体对称而手动输出的printf("|\n");}}
bill=0;for(n=0;n<x;n++)
printf(" ");       //输出飞机左侧的空格
printf("  *\n");     //输出飞机头部for(n=0;n<x;n++)
printf(" ");       //输出飞机身体部分左侧的空格
printf("*---*\n");  //因为飞机头部输出后有回车,所以飞机身体已经在下一行for(n=0;n<x;n++)
printf(" ");       //输出飞机尾巴部分左侧的空格
printf(" +-+ \n"); move=getch();     //注意getch函数的使用
if(move=='a')       //注意是==不是=
x--;              //就是x-1的意思,实现让飞机左移
if(move=='d')
x++;
if(move=='w')
y--;
if(move=='s')
y++;
if(move==' ')
bill=1;
}                 //这些代码都在while(1)内
}

设置一个可击中的障碍物

同样是在原来代码的基础上添加代码。其实每一步的添加都不是孤立的,而是相互环扣的,请仔细思考每一步的意思。

  1. 定义新变量int a作为障碍物的横坐标(如果你想的话,可以用类比的方法添加纵坐标)。
  2. 如何实现障碍物被激光射到就消失呢?我们可以再定义一个新变量int live,live=1的时候障碍物存在,live!=0的时候障碍物不显示。如🐎3.
  3. 在输出bill代码下方,输出改变live数字的代码。见🐎4.
🐎3.
... ...
int a=10;        //障碍物的横坐标
int live=1;      //障碍物存活状态
... ...
...system("cls");
if(live==1)
{for(i=0;i<a;i++)printf(" ");    //输出障碍物左侧空格printf("*");  //输出障碍物。友情提示这个障碍物千万不能在for循环里
}//不需要else,如果条件不满足else直接会往下运行
🐎4.|  if(bill==0)
|  {
|	for(i=0; i<y; i++)
|		printf("\n");
|   }
|	else
|  {
|	for(i=0; i<y; i++)
|	{	for(n=0; n<x; n++)
|			printf(" ");
|			printf("  +");
|			printf("\n");
|	}以上是原先代码
————————————————————————————————if(x+2==a)  //意思是,如果射线横坐标+2等于障碍物坐标,那么障碍物被赋值为0,也就消失了live=0;     //+2是因为要配合机身对准机头}fire=0; 

分步完成,现在合体。

完整代码

#include <stdio.h>
#include <stdlib.h>  
#include <conio.h> 
int main()
{
int x=15;
int y=5;
int i,n;
int bill=0;
char move;int a=10;        //障碍物的横坐标
int live=1;      //障碍物存活状态while(1)    //意思是死循环
{
system("cls");   //清屏函数if(live==1)
{for(i=0;i<a;i++)printf(" ");    //输出障碍物左侧空格printf("*");
}
if(bill==0)
{for(i=0;i<y;i++)printf("\n");
}
else   {for(i=0;i<y;i++){for(n=0;n<(x+2);n++)   //x+2的原因是飞机头左侧空格有x+2个printf(" ");           //这个+2是为了和身体对称而手动输出的printf("|\n");}
if(x+2==a)  //意思是,如果射线横坐标+2等于障碍物坐标,那么障碍物被赋值为0,也就消失了live=0;     //+2是因为要配合机身对准机头}
bill=0;for(n=0;n<x;n++)
printf(" ");       //输出飞机左侧的空格
printf("  *\n");     //输出飞机头部for(n=0;n<x;n++)
printf(" ");       //输出飞机身体部分左侧的空格
printf("*---*\n");  //因为飞机头部输出后有回车,所以飞机身体已经在下一行for(n=0;n<x;n++)
printf(" ");       //输出飞机尾巴部分左侧的空格
printf(" +-+ \n"); move=getch();     //注意getch函数的使用
if(move=='a')       //注意是==不是=
x--;              //就是x-1的意思,实现让飞机左移
if(move=='d')
x++;
if(move=='w')
y--;
if(move=='s')
y++;
if(move==' ')
bill=1;
}                 //这些代码都在while(1)内
return 0;
}

如果有不懂的地方可以在评论区问我

就酱,拜拜~


http://chatgpt.dhexx.cn/article/AhmyAeIp.shtml

相关文章

C语言小游戏之扫雷完整版

C语言小游戏之扫雷 一.游戏介绍二.游戏步骤及实现的功能1.初始化雷盘2.打印雷盘3.随机布置雷4.玩家排雷5.防止玩家第一次被炸死6.统计所选位置周围八个位置中雷的个数7.递归拓展已选位置周围的区域8.标记雷及取消标记 一.游戏介绍 看到这张图片&#xff0c;相信很多小伙伴都非常…

C初阶必写的C语言小游戏—扫雷,一看就会,看完就能写

目录 一.前言二.资源环境的配置三.游戏整体构思1.游戏的开始与结束(菜单)2.创建二维数组用来布置雷和排查雷的信息3.初始化棋盘4.打印棋盘5.布置雷6.排查雷 四.所有代码及效果展示 一.前言 人尽皆知的扫雷小游戏&#xff0c;原理简单&#xff0c;写法也简单&#xff0c;我会通…

c语言代码怎样制作成一个游戏?

游戏背景 《球球大作战》是Superpop一款自主研du发的免费手机网络游戏。 以玩家间的实时互动PK产生游戏乐趣为设计宗旨&#xff0c;通过简单的规则将玩家操作直接转化为游戏策略&#xff0c;体验智谋碰撞的战斗乐趣。 游戏的基本操作包括键盘按下&#xff08;上下左右四个方向…

[ C语言 ] 用C语言实现小游戏 ---- 三子棋 代码 + 解析

前言 本篇文章记录了用C语言实现三子棋小游戏&#xff0c;主要目的是对之前C语言知识学习的巩固&#xff0c;联系各个知识&#xff0c;以及怎么样实际使用各个知识。 一、三子棋的游戏规则 玩家将会看到一个3X3的网格棋盘&#xff0c;默认玩家先下棋&#xff0c;电脑后下棋。 …

一个好玩的小游戏(纯C语言编写)

最近在看知乎是发现了一个这一个专栏 https://zhuanlan.zhihu.com/c2game 从中获取的许多知识&#xff0c;本文中的游戏也是从里面学到的&#xff0c;不过本人又自己加了一些功能。 这是一个类似于飞机大战的游戏&#xff0c;不过目前代码量比较小&#xff0c;所以看起来非常…

【用游戏学C语言】几个基本的小游戏的实现(缓慢更新中~)

目录 ​更新说明 前言 1.相关函数的简单介绍&#xff08;预备知识&#xff09; &#xff08;1&#xff09;关于函数getch() &#xff08;2&#xff09;关于函数system() &#xff08;3&#xff09;关于函数sleep() &#xff08;4&#xff09;关于函数kbhit() &#xff…

【C语言】游戏项目:《疯狂赛车》,每个人都要加油活下去

序 交换一个苹果&#xff0c;得到一个苹果&#xff1b;交换一种思想&#xff0c;得到一种思想。选择与你才干&#xff0c;性格不同的人&#xff0c;他可以弥补你的缺陷。 嗨&#xff01;这里是狐狸~~ 最近有点网抑云了&#xff0c;脑子很乱&#xff0c;不晓得想些什么&#…

Qt学习之QFile和QFileInfo

Qt项目中对文件操作是必不可少的。顾名思义&#xff1a;QFile是文件对象类&#xff0c;QFileInfo是文件信息对象类&#xff0c;结合例子我们看一下用法。 读的文件内容如下&#xff0c;以字符 “#” 或者 “;” 开始的为注释行。 [Extern_Item1] ;名称 Namelibccgext_cvi_64.so…

QT5 QFile读/写文件操作方法

文档打开读/写操作命令说明 值描述QIODevice::NotOpen未打开QIODevice::ReadOnly以只读方式打开QIODevice::WriteOnly以只写方式打开QIODevice::ReadWrite以读写方式打开QIODevice::Append以追加的方式打开&#xff0c;新增加的内容将被追加到文件末尾QIODevice::Truncate以重…

qt5之QFile读写文件

1、效果 读写文件用到的是QFile类&#xff0c; 这里&#xff0c;我显示文件内容用到的是 QTextEdit 2、创建打开和关闭按钮 // 打开文件btnOpenFile new QToolButton;btnOpenFile->setText(tr("open a file"));btnOpenFile->setToolTip(tr("open …

Qt 创建文件 用QFile和QDir类

项目需求是 根据日期创建多级子文件夹, 根目录保存 log.txt 控制台程序实现 如下执行结果 createFile 为程序目录 文档结构: 源码: #include <QtCore/QCoreApplication> #include <QDir> #include <QFile> #include <QDebug> #include <QDateTim…

QFile(文件)

QFile QFile提供一个用于读/写的接口&#xff0c;是一个可以用来读/写二进制文件的Qt资源的I/O设备&#xff0c;QFile可以单独使用&#xff0c;一般配合QTextStream或QDataStream 输入文件路径时最好使用"/"作为分隔符 构造函数&#xff1a; 常用的函数&#xff1a;…

QFileDialog

一、描述 QFileDialog 类使用户能够遍历文件系统以选择一个或多个文件或目录。 创建 QFileDialog 最简单的方法是使用静态函数&#xff1a; fileName QFileDialog::getOpenFileName(this, tr("Open Image"), "/home/jana", tr("Image Files (*.p…

Qt -- QFile文件读写操作

对于文件的读写操作&#xff0c;C 和 C 都各有一套方式。而在 Qt 中也有一套&#xff0c;即使用 QFile 对文件进行读和写操作。 文件的打开方式 文件路径说明&#xff1a;&#xff08;windows-release编译&#xff09; QFile *file new QFile("EcgCap.dat");表示这…

[QT_032]Qt学习之基本文件读写QFile

本文转自&#xff1a;《Qt编程指南》 作者&#xff1a;奇先生 Qt编程指南&#xff0c;Qt新手教程&#xff0c;Qt Programming Guide 7.2 基本文件读写QFile Qt 常见的文件读写类有三个 QFile、QTextStream 和 QDataStream&#xff0c;本节先概要介绍这三个文件读写类&…

QFileInfo

一、描述 QFileInfo 提供有关文件系统中文件的名称和位置&#xff08;路径&#xff09;、访问权限、文件类型等信息。 FileInfo 还可用于获取有关 Qt 资源的信息。这个类是隐式共享的。 二、成员函数 2.1、判断函数 1、bool isAbsolute() 文件路径是否绝对路径。 注意&am…

QFile详解(文件如果不存在则创建、判断文件是否存在、获得文件的各种详细信息、读写文件)

目录 一、QFile文件如果不存在则创建的方法 二、QFile判断文件是否存在的方法 三、QFileInfo的方法获得文件的各种详细信息 四、QFile读写文件的内容 一、QFile文件如果不存在则创建的方法 QFile f("./1234.ini");if(!f.open(QIODevice::Append)){return 0;} op…

QFile文件读写

文章目录 简介常用apiQFile类读写文件QFileQTextStream读写文件 简介 QFile类提供了一个读取和写入文件的接口&#xff0c;一个读写文本、二进制文件和资源的I/O设备。 QFile读写文件的两种方式&#xff1a; 1.QFile可以单独使用。 2.QFile与QTextStream或QDataStream一起使用…

Qt之Qfile读取文件操作

文件系统&#xff1a;   文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象&#xff0c;这些设备具有读写字节块的能力。下面是 I/O 设备的类图&#xff08;Qt5&#xff09;&#x…

常用性能测试工具的比较

目录 性能测试的重要性针对接口的性能测试 性能测试基准接口性能测试的主要指标abenchjMeterKelude性能脚本各种监控工具 参考总结 性能测试的重要性 众所周知性能测试在软件测试中占有举足轻重的作用&#xff0c;尤其是对于互联网产品这种具有大用户量&#xff0c;大数据量&a…