IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言入门级小游戏 | 激发你对编程的兴趣( 50~100行代码) -> 正文阅读

[C++知识库]c语言入门级小游戏 | 激发你对编程的兴趣( 50~100行代码)

目录

制作一个可移动的飞机

发射激光

设置一个可击中的障碍物

完整代码


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

先来放一个效果图

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

可以通过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;
}

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

就酱,拜拜~

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 00:51:43  更:2022-09-04 00:53:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 7:50:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码