以下两种代码均适用于初学者:

先上第一种粗糙的代码,讲解都在代码中了。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
//定义全局变量
int position_x,position_y ;//飞机所在的初始位置
int zidan_x,zidan_y;//子弹所在位置
int diji_x,diji_y;//敌机所在位置
int high,wide;//画面大小
int score;//得分void chushi(){//数据初始化 high=20;wide=30;position_x=10;position_y=15;zidan_x=-2;//子弹开始时失效 zidan_y=15;diji_x=0;//开始时敌机的位置可以自定义 diji_y=15;score=0;}void show(){//显示画面 system("cls");int i,j;for(i=0;i<high;i++){for(j=0;j<wide;j++){if(i==position_x&&j==position_y)printf("*");//飞机显示 else if(i==diji_x&&j==diji_y)printf("o");//敌机显示 else if(i==zidan_x&&j==zidan_y)printf("|");//子弹显示elseprintf(" ");      }printf("\n");//换行 }printf("得分为:%d",score);}void x1(){if(zidan_x>-1)zidan_x--;//子弹飞行 if(zidan_x==diji_x&&zidan_y==diji_y){//击中敌机 score++;diji_x=-1;//敌机消失,至于为什么等于-1后面会讲 diji_y=rand()%wide;//生成新的位置zidan_x=-2;//子弹失效 }if(diji_x>high) {diji_x=-1;diji_y=rand()%wide;//敌机飞出界面了重新生成 }static int speed=0;if(speed<10){speed++;}if(speed==10){speed=0;diji_x++;//每过10次循环,敌机才往下移动一次,不然刷新会太快 }}void x2(){//开始输入 char shuru;if(kbhit()){shuru=getch();if(shuru=='a')position_y--;if(shuru=='d')position_y++;if(shuru=='w')position_x--;if(shuru=='s')position_x++;//控制飞机移动 if(shuru==' '){zidan_x=position_x-1;//子弹应该从飞机上面那一行射出 zidan_y=position_y;}}}int main(){//整合函数 chushi();while(1){show();x1();x2();   }} 

这里我们运行后会发现光标乱闪和频闪严重的问题,但是不影响程序运行,不追求界面上面这个就可以了 。

下面的是界面优化后的效果:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
//定义全局变量
int position_x,position_y ;//飞机所在的初始位置
int zidan_x,zidan_y;//子弹所在位置
int diji_x,diji_y;//敌机所在位置
int high,wide;//画面大小
int score;//得分void chushi(){//数据初始化 high=20;wide=30;position_x=high/2;position_y=wide/2;zidan_x=-2;//子弹开始时失效 zidan_y=15;diji_x=0;//开始时敌机的位置可以自定义 diji_y=position_y;score=0;}void gotxy(int x,int y){//解决频闪问题 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X=x;pos.Y=y;SetConsoleCursorPosition(handle,pos);}void yincang(){//隐藏光标 CONSOLE_CURSOR_INFO cursor_info={1,0};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);}void show(){//显示画面 gotxy(0,0);int i,j;for(i=0;i<high;i++){for(j=0;j<wide;j++){if(i==position_x&&j==position_y)printf("*");//飞机显示 else if(i==diji_x&&j==diji_y)printf("o");//敌机显示 else if(i==zidan_x&&j==zidan_y)printf("|");//子弹显示elseprintf(" ");      }printf("\n");//换行 }printf("得分为:%d",score);}void x1(){if(zidan_x>-1)zidan_x--;//子弹飞行 if(zidan_x==diji_x&&zidan_y==diji_y){//击中敌机 score++;diji_x=-1;//敌机消失,至于为什么等于-1后面会讲 diji_y=rand()%wide;//生成新的位置zidan_x=-2;//子弹失效 }if(diji_x>high) {diji_x=-1;diji_y=rand()%wide;//敌机飞出界面了重新生成 }static int speed=0;if(speed<10){speed++;}if(speed==10){speed=0;diji_x++;//每过10次循环,敌机才往下移动一次,不然刷新会太快 }}void x2(){//开始输入 char shuru;if(kbhit()){shuru=getch();if(shuru=='a')position_y--;if(shuru=='d')position_y++;if(shuru=='w')position_x--;if(shuru=='s')position_x++;//控制飞机移动 if(shuru==' '){zidan_x=position_x-1;//子弹应该从飞机上面那一行射出 zidan_y=position_y;}}}int main(){//整合函数 chushi();yincang();while(1){show();x1();x2(); }} 

这里面主要加了两段函数:

 void gotxy(int x,int y){//解决频闪问题 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X=x;pos.Y=y;SetConsoleCursorPosition(handle,pos);}
void yincang(){//隐藏光标 CONSOLE_CURSOR_INFO cursor_info={1,0};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);}

但这里需要注意的是如果打印复杂的飞机图案就不能直接改动了,光标的移动会导致画面出现重复,建议用 system(“cls”)来清屏。

其他的地方就请发挥想象力,修改弹道或者飞机图案等等。

希望能给你们带来帮助!!!!

C语言飞机大战简易版(包含两种界面)相关推荐

  1. C语言execvp实现简易Shell的两种方法

    方法一: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <wait. ...

  2. C语言---飞机大战游戏

    飞机大战小游戏(包含图片.音效) 示例演示: 一.建立的全部源文件 二.源代码 1.飞机大战2.0 .cpp 2.开场动画.cpp 3.游戏结束.cpp 4.头文件connect.h 三.图片资源 四 ...

  3. C语言飞机大战题目,C语言飞机大战源码.pdf

    C语言飞机大战源码.pdf include include include include include using namespace std; /* all the structures */ ...

  4. 飞机大战c语言设计报告,中南大学电信-C语言飞机大战实验报告.doc

    中南大学电信-C语言飞机大战实验报告 C语言课程设计报告 题 目 C语言飞机大战 学生姓名 学 号 指导教师 学 院 信息科学与工程学院 专业班级 电子信息工程2班 完成时间 程序框图 按任意键进入游 ...

  5. c语言制作飞机大战试训报告,c语言飞机大战源代码.doc

    c语言飞机大战源代码.doc include include include include define N 35 void printint N;输出 void movebulint N;子弹移动 ...

  6. 指针数组下标JAVA_Java语言中可用下标和指针两种方式表示数组元素。

    [判断题]一行可以写多条预处理命令 [判断题]如果一个java程序中有多个类,编译后只生成一个字节码文件,其名字同主类名一致. [判断题]Protected类型的实例变量只能在本类中使用,其他类中不可 ...

  7. c语言中的普通字符包括什么,【判断题】C语言中的字符常量通常有两种形式:普通字符和转义字符。...

    [判断题]C语言中的字符常量通常有两种形式:普通字符和转义字符. 更多相关问题 ---Can you speak French?---Yes, but only____.A.a littleB.lit ...

  8. R语言生存分析COX回归分析实战:两种治疗方法发生肾功能损害的情况

    R语言生存分析COX回归分析实战:两种治疗方法发生肾功能损害的情况 目录

  9. linux中复制字符串出错,C语言实现字符串的复制的两种方法

    本文将要为您介绍的是C语言实现字符串的复制的两种方法,具体操作方法: 利用数组实现 1 #include 2 #include 3 4 void copy_string(char str1[],cha ...

最新文章

  1. 2021-7-14 深度学习服务器Linux终端网络训练training(顶会ECCV网络BiSeNet)
  2. 【RAC】使用一条“ps”命令获取Linux环境下全部RAC集群进程信息
  3. 线上飙升800%,load达到12的解决过程
  4. LintCode-落单的数 III
  5. BZOJ 3479: [Usaco2014 Mar]Watering the Fields( MST )
  6. hdoj 1285 确定比赛名次 【拓扑排序】
  7. 斯坦福大学CS520知识图谱系列课程学习笔记:第三讲高级的知识图谱是什么样的
  8. MongoDB学习探讨
  9. 备战毕设——JAVA基础(简单的数据类型和语句类型)
  10. PBOC规范研究之四、文件结构及访问(转)
  11. JS 使用正则表达式参考,分组捕获,遍历输出所有匹配结果
  12. 优化神器 beamoff
  13. java swing浏览器_浏览器控件JxBrowser Swing开发者快速入门指南
  14. InVEST实践及在生态系统服务供需、固碳、城市热岛、论文写作等实际项目中的具体应用
  15. 计算机专业英语学术论文框架,计算机专业英语研究学术论文.pdf
  16. 服务器系统更新后找不到硬盘,重装win10系统找不到硬盘完美解决方法
  17. 制作u盘winpe启动盘_如何下载优启通U盘启动盘制作工具并制作启动盘?
  18. C语言wifi程序代码,STM32F103 WIFI程序 C语言.docx
  19. 32.字典练习---银行卡与初始密码
  20. Spring Cloud详解(九)Sleuth日志跟踪

热门文章

  1. 树莓派学习手记——制作一个空调遥控器(红外接收、发射的实现)
  2. itchat和matplotlib的结合使用爬取微信信息
  3. 湖首大学计算机硕士学费,2020年湖首大学研究生读几年
  4. USB-C PD多协议快充取电协议芯片,专为小家电市场打造
  5. USB接口Ntag 213/215/216系列读卡器发卡器 Ntag标签读写器发卡器 NFC标签读卡器 ISO14443读卡器 TypeA标签发卡器
  6. 孔令德《计算机图形学实践教程Visual C++版》第二版之案例名称
  7. 小程序引导关注公众号
  8. 零基础学Java,这些学习要点一定得注意!
  9. 又是一波冲击! | 自动驾驶再次被苏醒(提供部分源码)
  10. Linux之crontab(例行性任务)