利用数组,我们可以在空战游戏中实现多台敌机、发射闪弹等效果。大家可以用之前教程的思路,尝试分步骤实现:飞机的显示、单个敌机、多个敌机、发射常规子弹、发射闪弹,以下是完整的代码。

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>#define High 15  // 游戏画面尺寸
#define Width 25
#define EnemyNum 5 // 敌机个数// 全局变量
int position_x,position_y; // 飞机位置
int enemy_x[EnemyNum],enemy_y[EnemyNum];  // 敌机位置
int canvas[High][Width] = {0}; // 二维数组存储游戏画布中对应的元素// 0为空格,1为飞机*,2为子弹|,3为敌机@
int score; // 得分
int BulletWidth; // 子弹宽度
int EnemyMoveSpeed; // 敌机移动速度void gotoxy(int x,int y)  //光标移动到(x,y)位置
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);
}void startup() // 数据初始化
{position_x = High-1;position_y = Width/2;canvas[position_x][position_y] = 1;    int k;for (k=0;k<EnemyNum;k++){enemy_x[k] = rand()%2;enemy_y[k] = rand()%Width;canvas[enemy_x[k]][enemy_y[k]] = 3;}score = 0;BulletWidth = 0;EnemyMoveSpeed = 20;
}void show()  // 显示画面
{gotoxy(0,0);  // 光标移动到原点位置,以下重画清屏int i,j;for (i=0;i<High;i++){for (j=0;j<Width;j++){if (canvas[i][j]==0)printf(" ");   //   输出空格else if (canvas[i][j]==1)printf("*");   //   输出飞机*else if (canvas[i][j]==2)printf("|");   //   输出子弹|else if (canvas[i][j]==3)printf("@");   //  输出飞机@}printf("n");}printf("得分:%dn",score);Sleep(20);
}   void updateWithoutInput()  // 与用户输入无关的更新
{int i,j,k;for (i=0;i<High;i++){for (j=0;j<Width;j++){if (canvas[i][j]==2) {for (k=0;k<EnemyNum;k++){if ((i==enemy_x[k]) && (j==enemy_y[k]))  // 子弹击中敌机{score++;                // 分数加1if (score%5==0 && EnemyMoveSpeed>3)   // 达到一定积分后,敌机变快EnemyMoveSpeed--;if (score%5==0)   // 达到一定积分后,子弹变厉害BulletWidth++;canvas[enemy_x[k]][enemy_y[k]] = 0;enemy_x[k] = rand()%2;           // 产生新的飞机enemy_y[k] = rand()%Width;canvas[enemy_x[k]][enemy_y[k]] = 3;canvas[i][j] = 0;      // 子弹消失}}// 子弹向上移动canvas[i][j] = 0;if (i>0)canvas[i-1][j] = 2;}}}static int speed = 0;  if (speed<EnemyMoveSpeed)speed++;for (k=0;k<EnemyNum;k++){if ((position_x==enemy_x[k]) && (position_y==enemy_y[k]))  // 敌机撞到我机{printf("失败!n");Sleep(3000);system("pause");exit(0);}if (enemy_x[k]>High)   // 敌机跑出显示屏幕{canvas[enemy_x[k]][enemy_y[k]] = 0;enemy_x[k] = rand()%2;           // 产生新的飞机enemy_y[k] = rand()%Width;canvas[enemy_x[k]][enemy_y[k]] = 3;score--;  // 减分}if (speed == EnemyMoveSpeed){// 敌机下落for (k=0;k<EnemyNum;k++){canvas[enemy_x[k]][enemy_y[k]] = 0;enemy_x[k]++;         speed = 0;canvas[enemy_x[k]][enemy_y[k]] = 3;}}}
}void updateWithInput()  // 与用户输入有关的更新
{char input;if(kbhit())  // 判断是否有输入{input = getch();  // 根据用户的不同输入来移动,不必输入回车if (input == 'a' && position_y>0) {canvas[position_x][position_y] = 0;position_y--;  // 位置左移canvas[position_x][position_y] = 1;}else if (input == 'd' && position_y<Width-1){canvas[position_x][position_y] = 0;position_y++;  // 位置右移canvas[position_x][position_y] = 1;}else if (input == 'w'){canvas[position_x][position_y] = 0;position_x--;  // 位置上移canvas[position_x][position_y] = 1;}else if (input == 's'){canvas[position_x][position_y] = 0;position_x++;  // 位置下移canvas[position_x][position_y] = 1;}else if (input == ' ')  // 发射子弹{int left = position_y-BulletWidth;int right = position_y+BulletWidth;if (left<0)left = 0;if (right>Width-1)right = Width-1;int k;for (k=left;k<=right;k++) // 发射闪弹canvas[position_x-1][k] = 2; // 发射子弹的初始位置在飞机的正上方}      }
}int main()
{startup();  // 数据初始化   while (1)  // 游戏循环执行{show();  // 显示画面updateWithoutInput();  // 与用户输入无关的更新updateWithInput();  // 与用户输入有关的更新}return 0;
}

这个代码快200行了,大家吃透这个代码,相信对C语言的基本语法和逻辑结构都有了较好的掌握。

思考题:尝试让敌机也发射子弹,增加形状血量不一样的敌机boss。

下一个教程,学习EasyX图形交互功能----flappy bird源代码:知乎专栏

c语言easyx输出文字_做游戏,学编程(C语言) 6 数组之空战游戏相关推荐

  1. 教孩子学编程 python语言版_教孩子学编程 PYTHON语言版 PDF_IT教程网

    资源名称:教孩子学编程 PYTHON语言版 PDF 资源目录: 第1章Python基础--认识环境1 1.1认识Python3 1.2用Python编写程序5 1.3运行Python程序5 1.4本章 ...

  2. 孩子学python教程_教孩子学编程 PYTHON语言版 PDF_IT教程网

    资源名称:教导孩子们如何学习PYTHON编程语言版本PDF资源目录:第1章PYTHON Basics-Understanding环境1了解PYTHON 3编写程序在PYTHON中运行PYTHON程序5 ...

  3. 编程迷宫_跟我学编程第十期——迷宫游戏

    编程改变世界 图源:APPLE官网 01 效 果 演 示 IEffect demonstration 跟我学编程公益课程又和你见面了!这期ray老师将带大家来学习编程制作一个迷宫小游戏! 怎么样,你也 ...

  4. python教孩子学编程,教孩子学编程(Python语言版)

    教孩子学编程(Python语言版) 第1 章 Python 基础:认识环境 #NiceHexSpiral.py #运行后,挺奇特,整个作画过程,完全呈现. import turtle colors=[ ...

  5. 但凡原神有二十树脂,我也不会来学编程(c语言)

    但凡原神有二十树脂,我也不会来学编程(c语言)<第一天> 编程小白一只,从今天开始,将在本专栏记录本人学习编程的过程与心得~来自甘肃,普通双非,由于地域影响,想要在计算机方面得到好的出路, ...

  6. 做游戏,学编程(C语言) 6 数组之空战游戏

    利用数组,我们可以在空战游戏中实现多台敌机.发射闪弹等效果.大家可以用之前教程的思路,尝试分步骤实现:飞机的显示.单个敌机.多个敌机.发射常规子弹.发射闪弹,以下是完整的代码. #include &l ...

  7. c语言加减乘除运算代码_科协推文 || 走进C语言

    走进C语言 C语言66666!有了C语言还要女朋友干啥?没报错?C语言是世界上最好的语言!!C语言NB!!!我的头发呢?我C慈悲! 说起电脑,你可能对它有不同的印象.但是说起程序,你会想到什么? 帅气 ...

  8. c语言取余规则_这是我的C语言入门笔记

    点击上方"C语言中文社区",选择"设为星标★" 技术干货第一时间送达! 来自:大鱼机器人 精彩回顾: [万字长文]C语言高效编程与代码优化,建议收藏![推荐] ...

  9. c语言tab什么意思_这是我的C语言入门笔记。

    c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...

最新文章

  1. DDD领域驱动设计之聚合、实体、值对象
  2. mvc学习-编辑提交需要注意-mvc重点
  3. dynamic 仪表板_仪表板完成百万美元交易
  4. 实用垃圾收集,第1部分–简介
  5. (五十六)iOS多线程之NSOperation
  6. java -jar maven项目打包提示.jar中没有主清单属性
  7. c++代码好玩_一行Python代码能干嘛?快来看看吧!有表白利器哦
  8. linux安装mysql5.7.29_linux 之centos7搭建mysql5.7.29的详细过程
  9. python服务端语言_使用Python实现简单的服务器功能
  10. C#: using JsonReader avoid Deserialize Json to dynamic
  11. gispython定义查询_定义查询方法
  12. 2022年,想自学java有没有一个详细的框架?
  13. 把所有数据库厂商拉在一起,会发生什么?
  14. QQ聊天记录的备份和恢复(含迁移与合并)
  15. jni--‘jni_internal.cc:616] JNI FatalError called,RegisterNatives failed,导致system_server crash
  16. 智邦国际CRM系统实现企业信息化管理成功实施
  17. 解说微信抽奖大转盘小程序的开发过程以及一款抽奖大转盘活动软件!
  18. 分析了漫威电影后,才知道竟如此流弊
  19. C语言写一个猜数字游戏?我只想玩王者荣耀
  20. 2019年安徽省大学生计算机博弈大赛,2019年辽宁省普通高等学校本科大学生计算机博弈竞赛在我校成功举行...

热门文章

  1. andriod数据库的开发
  2. Windows下安装Hadoop
  3. 算法笔记_031:计算中值和选择问题(Java)
  4. 美国商务部发布软件物料清单 (SBOM) 的最小元素(下)
  5. 美国特勤局发布十大网络通缉犯名单
  6. 很多工控产品都在用的 CODESYS 软件中被曝10个严重漏洞
  7. 新漏洞可导致西门子 PLCs 遭远程攻击
  8. 谷歌更新漏洞披露规则:不管补丁打没打,够90天才披露
  9. POJ 3133 Manhattan Wiring(插头DP)
  10. pycharm如何设置python版本、设置国内pip镜像、添加第三方类库