这次我决定试试用思维导图的方式将C语言控制台版坦克大战的逻辑及流程写下了。
** 实现逻辑**
1.在此项目中需要什么函数?
2.它们之间有什么联系,怎样联系?
3.这些函数及联系又该怎样实现?
根据需要实现的逻辑才有了上面的两张思维导图。
第一张思维导图是坦克大战的流程图,也就算坦克大战这个程序是如何运行的。
第二张思维导图是坦克大战需要的函数及它们之间的联系。
1.坦克
2.子弹
3.障碍物
更加细节的划分在思维导图中。

制作地图
可能制作地图有些朋友不太清楚,那我就抛砖引玉了。
1.需要一个能在地图上打印障碍物的函数首先要有获取标准输出设备句柄,有了句柄才能在指定位置打印字符

//制作地图所需的函数
void Writechar(short x, short y, const char*pStr, WORD color)
{COORD pos = { x * 2, y };HANDLE hOutStd = GetStdHandle(STD_OUTPUT_HANDLE);    //获取标准输出设备句柄SetConsoleCursorPosition(hOutStd, pos);     //设置当前光标位置SetConsoleTextAttribute(hOutStd, color);    // 设置输出文本的颜色printf("%s", pStr);          //此时打印,就能在指定位置打印字符
}

2.需要鼠标事件处理函数利用一个switch函数来判断按下的是鼠标的哪一个键。
mer.dwMousePosition.X是光标所在位置的x坐标
mer.dwMousePosition.Y是光标所在位置的y坐标

//鼠标事件处理函数
void MouseEventProc(MOUSE_EVENT_RECORD mer)
{switch (mer.dwEventFlags){case 0:if (mer.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)            //按左键,打印钢墙{                        //x被*2,所有要除以2Writechar((mer.dwMousePosition.X) / 2, mer.dwMousePosition.Y, "▉", 0x0008);    //将打印位置地图属性Map[mer.dwMousePosition.Y][(mer.dwMousePosition.X) / 2] = 钢墙;        //设置为钢墙}else if (mer.dwButtonState == RIGHTMOST_BUTTON_PRESSED)           //按右键,打印空地{                        //x被*2,所有要除以2Writechar((mer.dwMousePosition.X) / 2, mer.dwMousePosition.Y, " ", 0x00);     //将打印位置地图属性Map[mer.dwMousePosition.Y][(mer.dwMousePosition.X) / 2] = 空地;        //设置为钢墙}break;case DOUBLE_CLICK:                   //双击左键,打印土墙Writechar((mer.dwMousePosition.X) / 2, mer.dwMousePosition.Y, "▓", 0x50);       //x被*2,所有要除以2Map[mer.dwMousePosition.Y][(mer.dwMousePosition.X) / 2] = 土墙;          //将打印位置地图属性break;                     //设置为钢墙}
}

3.键盘函数控制
我的地图编辑是,只有按下键盘按键就退出地图编辑

//输出键盘控制
int KeyEventProc(KEY_EVENT_RECORD ker)
{if (ker.bKeyDown)                                 //如果按下按键则地图制作结束,开始游戏{              flog = 0;           return flog;          }              return flog;
}

4.消息处理还需要一个将鼠标或键盘操作传递出去的函数

//消息处理函数
int MessageLoop()
{HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);          //获取标准输出设备句柄INPUT_RECORD stcRecord = { 0 };              //将输入记录记为0DWORD dwRead;SetConsoleMode(hStdin, ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT);     //设置控制台输入缓冲区的输入模式或控制台屏幕缓冲区的输出模式。while (flog)                  //按下按键就结束循环{ReadConsoleInput(hStdin, &stcRecord, 1, &dwRead);        //等待事件  等待移动鼠标或点击或按键if (stcRecord.EventType == KEY_EVENT)           //键盘事件{                    //KeyEventProc(stcRecord.Event.KeyEvent);          //退出循环//}                    //if (stcRecord.EventType == MOUSE_EVENT)           //鼠标事件{                    //MouseEventProc(stcRecord.Event.MouseEvent);         //绘制地图}                    //}                     //return 0;
}

这是我对C语言坦克大战的一些浅显的认识,希望可以帮到大家。
下载地址
链接:https://pan.baidu.com/s/1UuPTceyevUe7NQyQJvJkww
提取码:vrmb

关于c语言坦克大战的相关推荐

  1. stg游戏c语言,坦克大战改版

    <坦克大战改>是一款国内玩家模仿FC经典游戏坦克大战所自制的小游戏,游戏中玩家将会控制坦克保卫基地,一旦基地失守关卡就会失败.游戏支持手柄震动 ,同时包含有关卡编辑器,让玩家能够自由编辑关 ...

  2. c语言坦克大战程序设计,用纯C语言实现坦克大战

    好久没给大家看有意思的C语言实现的代码了,今天给大家分享一个C语言实现坦克大战的游戏源码,依旧是纯C语言,点c文件,但是是在TC的环境下,运行效果截图如下: 上下左右控制方向,空格为发射炮弹,还带声音 ...

  3. 坦克大战项目c语言代码,c语言 坦克大战 游戏源码下载

    [实例简介]坦克大战  C语言  源代码 [实例截图] [核心代码] void GamePlay()/*玩游戏的过程*/ { int i,j,lose=0;/*lose是1的时候表示失败*/ int ...

  4. c语言坦克大战源代码vc 6.0,坦克大战(VC6.0) - 源码下载|源代码 - 源码中国

    压缩包 : 坦克大战.rar 列表 坦克大战\BattleCity.aps 坦克大战\BattleCity.dsp 坦克大战\BattleCity.dsw 坦克大战\BattleCity.ncb 坦克 ...

  5. c语言坦克大战程序设计,C语言坦克大战源码分析

    /* Note:Your choice is C IDE */ #include "graphics.h" #include "stdlib.h" #inclu ...

  6. win10使用C语言运行坦克大战游戏(转载)

    转自:C语言坦克大战 运行效果 注:本游戏win7可完美运行,win10的话,小坦克和子弹的打印会略有鬼畜(变形,只打印半边等).win10完美运行方案:点击屏幕左下角"开始"界面 ...

  7. C语言编写的坦克大战exe小游戏

    C语言编写的坦克大战exe小游戏! (含有部分C++函数,不过不需要知道实现细节,主要用于键盘读取等) 适合初学者学习的坦克大战代码,无图片,游戏全部功能画面显示全部由 printf 打印的哦! C+ ...

  8. C语言(C++)复刻《坦克大战2.0》

    本人代码的编写基于以下博主的代码之上,进行编写. C语言坦克大战_Rivival_S 的博客-CSDN博客_c语言坦克大战r 基于这位博主还原的红白游戏机的经典内容,我在此基础上,又进行了一系列的改进 ...

  9. c语言课程设计坦克大战,funcodec++课程设计_坦克大战

    <funcodec++课程设计_坦克大战>由会员分享,可在线阅读,更多相关<funcodec++课程设计_坦克大战(24页珍藏版)>请在人人文库网上搜索. 1.课程设计一 坦克 ...

最新文章

  1. kafka--storm--mongodb
  2. 包区别 版本_详解Linux下二进制包、源代码包、rpm包区别与联系
  3. 正则表达式shell
  4. php与其它语言组合开发,PHP相对于其它语言有哪些魅力?
  5. mysql 磁盘限额_Linux运维知识之为Linux MySQL数据库设置磁盘限额
  6. 排序算法之--桶排序(桶,像桶一样的排序,听起来很有趣哦0。0)
  7. Python程序:求最小公倍数
  8. iPhone SE 2渲染图曝光:采用刘海全面屏
  9. python推荐系统设置_用Python构建你自己的推荐系统
  10. nginx虚拟目录支持PHP,nginx设置虚拟目录
  11. 还没用上 JDK 11,12 就要来了
  12. OpenCV-差分法实现绿叶识别(图像差分+颜色通道)
  13. [充电]Code Review
  14. 批处理添加允许弹出临时窗口站点
  15. 用联发科芯片的手机能升级鸿蒙吗,华为鸿蒙系统降临!首批升级手机确定,联发科芯片被放弃?...
  16. ZedGraph例子
  17. Spring Cloud Gray 微服务灰度中间件
  18. 《老路用得上的商学课》91-95学习笔记
  19. elasticsearch两年学习资料整理分享
  20. 台式计算机国标码,在计算机中,国标码是属于什么码?

热门文章

  1. 【BDTC 2017】去年挤不进去的推荐系统论坛又来了!
  2. #Reading Paper# APG: Adaptive Parameter Generation Network for Click-Through Rate Prediction
  3. AP Ezreal-不屈的呐喊-Candy攻略
  4. fatal: remote error: The unauthenticated git protocol on port 9418 is no longer support问题解决
  5. 我们投出去的简历为什么已读不回?来看面试官如何筛选简历、挑选求职者?
  6. 计算机英语z,计算机词汇(R-Z)
  7. 如何制作Win7 usb启动盘
  8. Stall Reservations POJ
  9. 河北大学暑假训练营 第一周 平方数
  10. Flutter开发:遇到库冲突问题的解决方法