合金弹头小游戏c语言源码-C语言实现一个打飞机的小游戏

C语言实现一个打飞机的小游戏

更新时间:2020年2月25日 07:46:11 作者:白嘉明

本文主要详细介绍C语言实现的简单的飞行飞机游戏。 文章中的示例代码非常详细,具有一定的参考价值。 有兴趣的朋友可以参考一下

本文实例分享了飞机游戏的C语言实现的具体代码,供大家参考。 具体内容如下

编译环境:vs2019

需要:

在同一平面内,控制火炮发射的三个方向,在空间内发射子弹。 敌方和友方的客机仍然会在天空中随机飞行。 击中空中飞行的敌方客机加一分,击中友方客机扣一分。

想法:

先初始化程序,然后绘制指令和地图,然后进入无限循环。 在循环中,三个主要步骤分别是实现客机在天上飞行、通过awd空格键控制游戏内容、满足游戏条件时加分。

实践:

首先,要实现客机的动画效果,本质就是在控制台输出x轴上的三个字符串,并使这三个字符串看起来同时相连。 这里我用自己写赌马游戏的经验:在第一个无限循环中,分别输出第一、二、三串的字符串来表示第一步,然后输出的x轴坐标值​​​​三个字符串是自动递增的。 ,第二个无限循环去掉前面字符串连接的痕迹,然后分别输出三个字符串,说明已经进行了第二步。 由于外层的for循环没有sleep函数,所以这看起来就是同时连接三个字符串的效果。 这样就可以用无限循环来表示三架客机是连续连接的。

下一步是通过getch函数改变大炮(一个角色)的枪口方向。 当枪口切换时,炮弹的初始化位置也会改变。 当按下空格键时,炮弹(角色)将从其初始位置初始化。 该位置沿着设定的路线不断连接。 当横横轴坐标与客机坐标一致时,判断是否为敌方客机|—0>。 如果是,则分数加一,否则分数减一。

另外,程序中还有很多细节,这里不再赘述。

困难:

看起来三根弦同时连接起来。 这是一种算法。 一旦你学会了它,你应该像记住基础知识一样牢牢地记住它。 了解了原理之后,就比较容易掌握了。

阐明:

这是一个简单的小程序。 在这个程序中达到同样疗效的方法有很多种,我使用了很多链表来存储、统计和使用各种数据。 事实上,通过单一阵法也能达到类似的疗效。 以我目前的认知,使用链表,直接输出字符串,优点是简单明了。 但同时,也造成了疗效显现上比较致命的缺陷。

注意:

由于编译器的原因,程序中的_kbhit()和_getch()函数在其他编译器上编译时可能会出现错误。 解决办法是去掉函数后面的“_”。

跑步疗效:

代码:

#include 
#include 
#include 
#include 
#include 
#include 
void HideCursor();  //隐藏光标
void gotoxy(int x, int y); //光标定位
#define R 26  //飞机每次随机尾x坐标最大值
#define N 20  //通关分数
int ax[3] = { 0 };  //三个飞机尾坐标,全局
int y[3] = { 3,7,11 }; //三个y轴,全局,查表法确定飞机的y轴位置 
    //因为炮弹的飞行距离是一次加两个格子,为了奇偶对应这里的y轴必须都是偶数
int i;   //循环用变量
int fd[3];   //控制飞机种类
void cshcxhs()    //初始化函数
{
 system("title 打飞机小游戏");  //标题
 system("mode con cols=100 lines=30"); //宽100,高30
 HideCursor();    //光标隐藏
 gotoxy(46, 12);    //介绍游戏规则
 printf("游戏规则:");
 gotoxy(36, 14);
 printf("w a d键控制方向,空格键发射炮弹");
 gotoxy(26, 16);
 printf("击中敌军飞机 |---0> 加一分,击中友军飞机 >>>>>> 减一分");
 gotoxy(40, 18);
 printf("累计得分 %d 结束游戏",N);
 Sleep(2800);
 system("cls");
 
 int k;     //循环用变量
 gotoxy(40, R);    //初始化炮台
 for (k = 0; k < 17; k++)
 printf("_");
 gotoxy(46, R);
 printf("[_O_]");
 gotoxy(48, 25);    //中间x:48
 printf("|");
 int j;
 srand((unsigned)time(NULL));  //初始化随机种子
 for (j = 0; j "); 
 else    
 printf(">>>>>>"); 
 gotoxy(ax[i] - 1, y[i]); //清除飞机尾部留下的痕迹
 printf(" ");
 ax[i]++;   //然后飞机尾坐标自增,下次自飞机尾输出整架飞机
}
void dhpdxshs()   //画出飞机,并让飞机在飞过x94的时候消失
{
 for (i = 0; i = 94) //判断每架飞机头有没有超过94
 {
  gotoxy(94, y[i]); //满足条件在每架飞机的94处输出空格
  printf(" ");
  if (ax[i]+6 > 100) //每架飞机的飞机头超过100,则重置一个随机数
  {
  ax[i] = rand() % R; //修改为小于R的随机数
  fd[i] = rand() % 2;
  }
 }
 }
}
int da = 2;  //da = 1为最左 默认中间 炮台方向,全局变量
int yip = 0;  //是否开炮,0不开,1,2,3三个方向
int rtde = 1;  //是否发射完毕,必须等待炮弹发射完成
int shells_x;  //炮弹坐标
int shells_y;
void ckkzhs()
{
 char ch;
 ch = _getch();
 if (ch == 'd' || ch == 'D')
 {
 gotoxy(49, 25);
 printf("/");  //炮台右转
 gotoxy(47, 25);
 printf(" ");
 da = 3;   //最右状态
 }
 if (ch == 'A' || ch == 'a')
 {
 gotoxy(47, 25);
 printf("\");  //转义转义字符
 gotoxy(48, 25);
 printf(" ");
 da = 1;   //最左状态
 }
 if (ch == 'W' || ch == 'w')
 {
 gotoxy(48, 25);
 printf("|");  
 gotoxy(47, 25);
 printf(" ");
 gotoxy(49, 25);
 printf(" ");
 da = 2;
 }
 if (ch == ' '&& rtde == 0) //大炮处于发射完毕状态,且按下空格
 {
 if (da == 2)  //中 炮台朝向
  yip = 2;
 
 if (da == 1)  //左
 {
  yip = 1;
  shells_x = 45;  //初始化炮弹的坐标
 }
 if (da == 3)  //右
 {
  yip = 3;
  shells_x = 51;
 }
 shells_y = 23;  //初始化炮弹的坐标
 }
}
void dpfshs()   //向三个不同方向发射炮弹
{
 rtde = 1;   //循环,炮弹移动时代表未开炮完毕
 if (yip == 2)
 {
 shells_x = 48;
 gotoxy(shells_x, shells_y-=2);
 printf("o");
 gotoxy(shells_x, shells_y+2);
 printf(" ");
 }
 if (yip == 1)
 {
 gotoxy(shells_x-=2, shells_y-=2);
 printf("o");
 gotoxy(shells_x+2, shells_y+2);
 printf(" ");
 }
 if (yip == 3)
 {
 gotoxy(shells_x+=2, shells_y-=2);
 printf("o");
 gotoxy(shells_x-2, shells_y+2);
 printf(" ");
 }
 if (shells_y <= 1)  //炮弹越界,消除炮弹
 {
 yip = 0;  //炮弹越界,炮弹停下
 gotoxy(48, 1);  //并消除
 printf(" ");
 gotoxy(23, 1);
 printf(" ");
 gotoxy(73, 1);
 printf(" "); 
 rtde = 0;  //炮弹越界,开炮完毕,可进行下一轮开炮
 }
}
int score;   //得分
void pdfsjzhs()  //判断是否击中和统计信息
{
 
 for (i = 0; i = ax[i] && shells_x <= ax[i] + 6 && shells_y == y[i])//击中时
  {
  if(fd[i]==1)
   score++;   //击中一次,得分加一
  else
  {
   score--;
   if (score = N)  //游戏结束判断
 {
 system("cls"); //清屏
 gotoxy(39,15); 
 printf("您通关了,最终得分:%d !", N);
 gotoxy(0, 29);
 exit(0);
 }
}
void process()  //流程
{
 while (1)
 {
 dhpdxshs();  //飞机动画函数
 if (_kbhit()) 
 {
  ckkzhs(); //操作函数
 }
 
 dpfshs();  //大炮效果函数
 pdfsjzhs();  //判断是否击中和统计信息
 Sleep(18);
 }
}
int main()
{
 cshcxhs(); //初始化程序
 process(); //流程
 return 0;
}
void HideCursor()
{
 CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void gotoxy(int x, int y)
{
 COORD pos = { x,y };
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

缺点:

我在程序中输出客机时,采用的是在客机尾部直接输出整个客机的方法,并且飞机尾部的x坐标是自增的。 这是一个非常愚蠢但非常简单的方法。 这种做法导致客机在掠过控制台最大长度的同时,未能一一清理客机机身。 一旦机头越过控制台最大长度,就会出现程序输出错误。 “边界”是让客机消失的自然效果,所以我们要用最后一架客机所在的y轴上的最后6条x轴条纹作为木板来遮挡客机,从而达到类似的效果。

因为程序没有创意合金弹头小游戏c语言源码,都是我自己写的。 由于本人能力有限,在写这个程序的时候,隐隐感觉自己的程序有很多代码复用性,结构严谨,运行效率低等问题。 为了解决以上问题,同时我对很多函数和变量标识符都采用了盲写和汉语拼音的做法。

作为一名C语言菜鸟,对于未知的知识我一直抱有学习和谦虚的态度。 如果有人能对我的程序的可重用性、严谨性和运行效率提出建议,我将非常感激。

以上就是本文的全部内容。 希望对您的学习有所帮助合金弹头小游戏c语言源码,也希望您多多支持脚本之家。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 游戏源码 合金弹头小游戏c语言源码-C语言实现一个打飞机的小游戏 https://www.wkzy.net/game/168808.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务