开飞机打飞机

极度简陋版,做着玩

/20.3.27/

基本描述

  1. 玩家控制一架飞机,用 * 表示;
  2. 敌机只有一架,随机位置飞来,用 @ 表示;
  3. 子弹能发一颗 ,用 | 表示;//暂且叫做子弹吧,要不然叫导弹?感觉叫啥都行
  4. 子弹击中敌机后,子弹和敌机消失,得一分;
  5. 被敌机撞到后,游戏结束
  6. 上下左右由WSAD控制,空格 发射子弹;

存在缺陷

  1. 只有一架飞机,飞完就没了
  2. 只有一颗子弹,打完了再打,之前的就没了
  3. 有几率打不中,飞机和子弹恰好遇到,下一个循环恰好错过时,miss

C语言源代码

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>int high, wid;  //游戏场景的高和宽
int plane_h, plane_w;   //飞机位置
int bullet_h, bullet_w;     //子弹位置
int enemy_h, enemy_w;  //敌机位置
int interval; //同个计次来模拟时间间隔
int itv_enemy; //敌机移动的时间间隔
int score;  //分数void Startup();   //游戏数值初始化
void Show();    //游戏界面输出
void UpdateInput();    //与输入无关的游戏状态更新
void UpdateNormal();    //因输入导致的游戏状态更新int main()
{Startup();  //初始化while(1){   //游戏循环Show();UpdateInput();UpdateNormal();}return 0;
}void Startup(){score=0;high=25;   //初始化场景高度wid=60;    //初始化场景宽度plane_h=15;    //初始化飞机竖直坐标plane_w=10;     //初始化飞机水平坐标bullet_h=-1;    //初始化子弹竖直坐标bullet_w=10;    //初始化子弹水平坐标enemy_h=-1;     //初始化敌机竖直坐标srand(time(NULL));enemy_w=rand()%wid;    //初始化敌机水平坐标interval=0;      //初始化时间间隔计数itv_enemy=5;   //初始化敌机移动时间间隔
}
void Show(){HideCursor();   //隐藏光标gotoxy(1,1);    //回调光标、刷新画面for(int i=0;i<high;i++){for(int j=0;j<wid;j++){if( i==plane_h && j==plane_w ){ //当前位置为飞机位置printf("*");}else if( i==bullet_h && j==bullet_w ){  //当前位置为子弹位置printf("|");}else if( i==enemy_h && j==enemy_w ){  //当前位置为敌机位置printf("@");}else if( i<high && j<wid ){  //当前位置无物,且在边界内printf(" ");}}printf("|\n");  //输出右边界}for(int i=0;i<wid;i++){ //输出下边界printf("-");}printf("*\n\n得分:%d",score);
}
void UpdateInput(){char key;  //检测按下的键if(kbhit()){ //当键按下key=getch(); //获取键值if(key=='w'||key=='W'){  //当按下w键,上移if(plane_h>0)plane_h--;}if(key=='s'||key=='S'){  //当按下s键,下移if(plane_h<high-1)plane_h++;}if(key=='a'||key=='A'){  //当按下a键,左移if(plane_w>0)plane_w--;}if(key=='d'||key=='D'){  //当按下d键,右移if(plane_w<wid-1)plane_w++;}if(key==' '){            //当按下空格键,发射子弹bullet_h=plane_h-1;bullet_w=plane_w;}}
}
void UpdateNormal(){if(bullet_h>-1&&bullet_h<high){ //子弹未到边界时,向上移动bullet_h--;}if(enemy_h<high && interval%itv_enemy==0){ //敌机未到下边界时,向下移动,/每次移动的时间间隔为itv_enemyenemy_h++;}if(bullet_h==enemy_h && enemy_w==bullet_w){ //子弹打到敌机,两两消失enemy_h=high;bullet_h=-1;printf("\a"); //击中响铃score++;}if(plane_h==enemy_h && plane_w==enemy_w){ //敌机撞到玩家飞机,游戏结束printf("\t游戏结束!");exit(0);}if(interval<=100){  //时间间隔计次interval++;}else{interval=0;}
}
void gotoxy(int x,int y){ //回调光标COORD pos;pos.X=x-1;pos.Y=y-1;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}void HideCursor(){ //隐藏光标函数CONSOLE_CURSOR_INFO cursor;cursor.bVisible = FALSE;cursor.dwSize = sizeof(cursor);HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorInfo(handle, &cursor);
}

参考

  • 河海大学童晶老师的课程(做游戏,学编程)

C语言控制台小游戏 | 打飞机相关推荐

  1. c语言下落的字母,C语言控制台小游戏之下落的字符

    #include #include//使用true时应包含 #include//使用Sleep() void EntrySpace(int num)//打印空格 { int i; for (i = 0 ...

  2. c语言控制台小游戏是什么意思,闲来没事撸了一个控制台小游戏

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include #define MAXLEVEL 5 #define LEVELS 4 #defi ...

  3. c语言小游戏(c语言小游戏代码飞机大战)

    怎样用C语言编写一个小游戏? "贪吃蛇"C代码: #include #include #include #include #include #define W 78  //游戏框的 ...

  4. 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...

    很多人想学Python程序设计或者已经了解过一点Python程序设计基础,却没办法开发出一个项目. 今天,通过演示一个简单的控制台小游戏制作,手把手教你如何用Python编写一个游戏程序,即便你是个新 ...

  5. 【从入门到入土系列】C语言制作小游戏-贪吃蛇:Copy+运行即可另附注释

    系列文章 本系列持续更新中,欢迎您的访问! 系列简介 本系列由唐文疏撰写,负责记录博主的学习生涯中的一点一滴.独乐乐不如众乐乐,故此分享给大家.欢迎大家一起讨论.学习和批评指点. 博主只是一个普普通通 ...

  6. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  7. c语言 倒计时不清屏_打字游戏超细讲解(C语言基础小游戏)

    首先我们会发现我们网上看到的打字游戏都是上来就敲代码,小白看的一脸懵,所以鑫哥在这给大家送上一份超级详细的打字游戏编写流程及对应的结果展示,希望可以帮到小白进行入门学习. 话不多说,我们先看一下什么叫 ...

  8. c语言经典游戏,C语言——经典小游戏——打砖块

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言--经典小游戏--打砖块 玩法:按A与D控制球拍的移动,按S暂停游戏 百度网盘下载:http://pan.baidu.com/s/1o64ECTc ...

  9. c语言2048代码linux,C语言2048小游戏课设(附源码).doc

    PAGE PAGE 1 C语言2048小游戏课设 项目说明 本系统基于C语言开发,适用于刚入门的C语言新手项目课设,开发软件采用VC++6.0开发,VS,DEV C++等均可运行.(书生) 项目运行截 ...

最新文章

  1. mysql从表中转移数据文件_MySQL 数据文件迁移找不到表
  2. 从PM到GAN——LSTM之父Schmidhuber横跨22年的怨念(文字版)
  3. android 极光推送测试,Android 3分钟带你集成极光推送
  4. 毕业设计——第三章 开发方法及系统实现(6)(完结)
  5. 磁盘已满,如何从 Mac 中删除大文件?
  6. 涂鸦板制作教程——其中的重做和撤消我觉得不错
  7. windows环境下curl安装
  8. 一文说清:可逆与不可逆加密算法,对称与非对称加密算法-据说BCrypt比MD5要好?
  9. CDH安全认证及使用
  10. Mocking的概念及常见Mocking框架概述
  11. 原创 | GPT-4 震撼登场,惊艳四座,然而...
  12. leetcode(力扣) 718. 最长重复子数组 1143. 最长公共子序列 1035. 不相交的线 (动态规划)
  13. 用python(numpy)复现matlab代码
  14. Linux 内核clk 硬件相关层
  15. 前端 100 问:你会多少?
  16. 8、接口与面向接口编程
  17. NOIP2015普及组复赛 解题分析
  18. 海思编译kernel
  19. 三菱FX5U通过CCLINK IE Basic网络控制JET伺服FB功能块使用说明
  20. sudo -S可以不用手动输入密码,且只要第一次密码正确,后面在有效期内,密码错误也可以

热门文章

  1. 光引发剂主要用途_光引发剂分类及用途.doc
  2. 查看锐捷poe交换机供电状态_如何查看思科交换机的端口状态及配置信息
  3. 第五届蓝桥杯【省赛试题4】史丰收速算
  4. ios web应用程序_使用ios 13改善应用程序的可访问性
  5. jenkins中jdk配置_如何在Jenkins中配置JDK
  6. HTML中的块级元素和内联元素
  7. 【Java基础】JAVA实现根据文件格式对文件夹内容进行复制
  8. hdoj.1735 字数统计 20140811
  9. java 图片缩小模糊问题
  10. C++设计模式的设计原则(面向对象八大设计原则)