#include <stdio.h>

#include <windows.h>

#include <time.h>

//里规格:长39*2=78 (真坐标)(假坐标宽为39) 高39

//外规格:长41*2=82 (真坐标)(假坐标宽为41) 高41

#define UP 1

#define DOWN 2

#define LEFT 3

#define RIGHT 4

#define MAX_LEVEL 8

#define BULLET_NUM 20

#define MAX_LIFE 4

//程序中未写入函数参数表中且未说明的变量只有map二维数组,level_info数组和level

/*
此程序中涉及的x,y类的坐标值,分为以下两种:

假坐标:这里的坐标指的是以一个■长度为单位的坐标,而不是真正的coord坐标 (用于map数组的坐标)

真坐标:头文件自带的坐标结构coord中的坐标(也可以说是控制台里的真正坐标值)

区别:纵坐标y两值一致,假横坐标x值与真正coord横坐标(真坐标)关系是 x * 2 = coord 横坐标

      coord横坐标既指GoTo函数中的x参数,因为本程序游戏界面以一个■长度为基本单位,可以说涉及的coord横坐标全是偶数。既假坐标要变真坐标(变真坐标才能发挥真正作用),横坐标须乘以2

*/

typedef struct //这里的出现次序指的是一个AI_tank变量中的次序,游戏共有四个AI_tank变量
{ //∵设定每个AI_tank每种特殊坦克只出现一次 ∴fast_tank & firm_tank 最多出现次数不超过1

int fast_tank_order;   //fast_tank出现的次序(在第fast_tank_order次复活出现,从第0次开始),且每个AI_tank只出现一次int firm_tank_order;   //firm_tank出现的次序,同上

} LevInfo; //关卡信息(准确说是该关出现的坦克信息)

LevInfo level_info [MAX_LEVEL] = {{-1,-1},{3,-1},{-1,3},{2,3},{2,3},{2,3},{2,3},{2,3}}; //初始化,-1代表没有该类型坦克

typedef struct //子弹结构体
{

int x,y;        //子弹坐标,假坐标int direction;  //子弹方向变量bool exist;     //子弹存在与否的变量,1为存在,0不存在bool initial;   //子弹是否处于建立初状态的值,1为处于建立初状态,0为处于非建立初状态bool my;        //区分AI子弹与玩家子弹的标记,0为AI子弹,1为玩家(我的)子弹

} Bullet;

Bullet bullet [BULLET_NUM]; //考虑到地图上不太可能同时存在20颗子弹,所以数组元素设置20个

typedef struct //坦克结构体
{

int x,y;        //坦克中心坐标int direction;  //坦克方向int color;      //颜色参方向数,1到6分别代表不同颜色,具体在PrintTank函数定义有说明int model;      //坦克图案模型,值为1,2,3,分别代表不同的坦克图案,0为我的坦克图案,AI不能使用int stop;       //只能是AI坦克使用的参数,非0代表坦克停止走动,0为可以走动int revive;     //坦克复活次数int num;        //AI坦克编号(固定值,为常量,初始化函数中定下)0~3int CD;         //发射子弹冷却计时bool my;        //是否敌方坦克参数,我的坦克此参数为1,为常量bool alive;     //存活为1,不存活为0

} Tank;

Tank AI_tank[4] , my_tank; //my_tank为我的坦克,Ai_tank 代表AI坦克

//∵所有的函数都有可能对全局变量map进行读写(改变),

//∴函数中不另说明是否会对全局变量map读写

//基本操作与游戏辅助函数

void GoToxy(int x,int y); //光标移动

void HideCursor(); //隐藏光标

void keyboard (); //接受键盘输入

void Initialize(); //初始化(含有对多个数据的读写)

void Stop(); //暂停

void Getmap(); //地图数据存放与获取

void Frame (); //打印游戏主体框架

void PrintMap(); //打印地图(地图既地图障碍物)(含对level的读取)

void SideScreen (); //副屏幕打印

void GameCheak(); //检测游戏输赢

void GameOver( bool home ); //游戏结束

void ClearMainScreen(); //主屏幕清屏函数∵system(“cls”)后打印框架有一定几率造成框架上移一行的错误∴单独编写清屏函数

void ColorChoose(int color); //颜色选择函数

void NextLevel(); //下一关(含有对level全局变量的读写)

//子弹部分

void BuildAIBullet(Tank *tank); //AI坦克发射子弹(含有对my_tank的读取,只读取了my_tank坐标)

void BuildBullet (Tank tank); //子弹发射(建立)(人机共用)(含全局变量bullet的修改)我的坦克发射子弹直接调用该函数,AI通过AIshoot间接调用

void BulletFly (Bullet bullet[BULLET_NUM]); //子弹移动和打击(人机共用),

void BulletHit (Bullet* bullet); //子弹碰撞(人机共用)(含Tank全局变量的修改),只通过BulletFly调用,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理

void PrintBullet (int x,int y,int T); //打印子弹(人机共用)

void ClearBullet (int x,int y,int T); //清除子弹(人机共用)

int BulletCheak (int x,int y); //判断子弹前方情况(人机共用)

//坦克部分

void BuildAITank (int* position, Tank* AI_tank); //建立AI坦克

void BuildMyTank (Tank* my_tank); //建立我的坦克

void MoveAITank (Tank* AI_tank); //AI坦克移动

void MoveMyTank (int turn); //我的坦克移动,只通过keyboard函数调用,既键盘控制

void ClearTank (int x,int y); //清除坦克(人机共用)

void PrintTank (Tank tank); //打印坦克(人机共用)

bool TankCheak (Tank tank,int direction); //检测坦克dirtection方向的障碍物,返值1阻碍,0 畅通

int AIPositionCheak (int position); //检测AI坦克建立位置是否有障碍物AIPositionCheak

//DWORD WINAPI InputX(LPVOID lpParameter); //声明线程函数,用于检查X键输入并设置X键的输入冷却时间

//注意map数组应是纵坐标在前,横坐标在后,既map[y][x],(∵数组行长度在前,列长度在后)

//map里的值: 个位数的值为地图方块部分,百位数的值为坦克,子弹在map上没有值(子弹仅仅是一个假坐标)

//map里的值: 0为可通过陆地,1为红砖,2黄砖,5为水,100~103为敌方坦克,200为我的坦克,

//全局变量

int map[41][41]; //地图二维数组

int key_x; // X键是否被“读入”的变量,也是子弹是否可以发射的变,

int bul_num; //子弹编号

int position; //位置计数,对应AI坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置

int speed=7; //游戏速度,调整用

int level=1; //游戏关卡数

int score=0; //游戏分数

int remain_enemy; //剩余敌人(未出现的敌人)

char* tank_figure[4][3][4]=

{

{

{"◢┃◣", "◢━◣", "◢┳◣", "◢┳◣"},{"┣●┫", "┣●┫", "━●┃", "┃●━"},{"◥━◤", "◥┃◤", "◥┻◤", "◥┻◤"}

},

{

{"┏┃┓", "┏┳┓", "┏┳┓", "┏┳┓"},{"┣●┫", "┣●┫", "━●┫", "┣●━"},{"┗┻┛", "┗┃┛", "┗┻┛", "┗┻┛"}

},

{

{"┏┃┓", "◢━◣", "┏┳◣", "◢┳┓"},{"┣●┫", "┣●┫", "━●┃", "┃●━"},{"◥━◤", "┗┃┛", "┗┻◤", "◥┻┛"}

},

{

{"╔┃╗", "╔╦╗", "╔╦╗", "╔╦╗"},{"╠█╣", "╠█╣", "━█╣", "╠█━"},{"╚╩╝", "╚┃╝", "╚╩╝", "╚╩╝"}

}

};

int main () //主函数

{

int i;unsigned int interval[12]={1,1,1,1,1,1,1,1,1,1,1,1} ;  //间隔计数器数组,用于控制速度srand(time(NULL)); //设置随机数种子(若不设置种子而调用rand会使每次运行的随机数序列一致)随机数序列指:如首次调用rand得到1,第二次得2,第三次3,则此次随机数序列为1,2,3HideCursor();                         //隐藏光标system("mode con cols=112 lines=42"); //控制窗口大小Frame ();                             //打印游戏主体框架Initialize();                         //初始化,全局变量level初值便是1

// HANDLE h1 , h2 ; //定义句柄变量

for(;;){if(interval[0]++%speed==0)        //速度调整用,假设interval[0]为a, 语句意为 a % 2==0,a=a+1;{GameCheak();                  //游戏胜负检测BulletFly ( bullet );for(i=0 ; i<=3 ; i++)         //AI坦克移动循环{if(AI_tank[i].model==2 && interval[i+1]++%2==0) //四个坦克中的快速坦克单独使用计数器1,2,3,4MoveAITank( & AI_tank[i]);if(AI_tank[i].model!=2 && interval[i+5]++%3==0) //四个坦克中的慢速坦克单独使用计数器5,6,7,8MoveAITank( & AI_tank[i]);}for(i=0;i<=3;i++)                                   //建立AI坦克部分if(AI_tank[i].alive==0 && AI_tank[i].revive<4 && interval[9]++%90==0)  //一个敌方坦克每局只有4条命{                                               //如果坦克不存活。计时,每次建立有间隔  1750 msBuildAITank( &position, & AI_tank[i] );     //建立AI坦克(复活)break;                                      //每次循环只建立一个坦克}for(i=0;i<=3;i++)if(AI_tank[i].alive)BuildAIBullet(&AI_tank[i]);                 //AIshoot自带int自增计数CD,不使用main中的CD intervalif(my_tank.alive && interval[10]++%2==0 )keyboard ();if(my_tank.alive==0 && interval[11]++%30==0 && my_tank.revive < MAX_LIFE)BuildMyTank( &my_tank );}Sleep(5);}return 0;

}

///这里的多线程暂时不用 //x键用于子弹发射,x键的冷却时间不能和上下左右一同设置,那样就太快了
DWORD WINAPI InputX(LPVOID lpParameter) //如果不用多线程运行,那么在x键冷却时间内程序会因Sleep将会挂起,暂停运行
{ //因为只有一个变量改变,而且变量改变先后顺序是显而易见的,所以不必设置缓冲区
for(;

坦克大战C语言实现(课程设计)相关推荐

  1. java坦克大战互相碰撞_Java课程设计——坦克大战

    坦克大战--坦克类 一. 团队课程设计博客链接 二.个人负责模块和任务说明 模块:坦克类(玩家坦克类+电脑坦克类),代码整合 三.代码的提交记录截图 四.负责模块和任务详细说明 玩家坦克继承Visib ...

  2. java坦克大战总体功能设计_java课程设计——坦克大战

    ##一.团队课程设计博客链接: ##二.个人负责模块或任务说明: ###模块:GUI设计(游戏面板,登录面板,主窗体,显示关卡面板) ##三.自己的代码提交记录截图 ##四.自己负责模块或任务详细说明 ...

  3. 基于强化学习的坦克大战python语言实现

    这个项目是基于一个人工智能算法(基于全连接线性BP网络的增强学习模型)代理玩经典游戏坦克大战. 在个游戏中,机器控制的坦克主要目标是射击敌方坦克并保卫自家的根据地.         游戏中坦克的动作空 ...

  4. c语言编程课程心得,c语言编程课程设计心得.docx

    C语言编程课程设计心得 C语言编程课程设计心得 河南城建学院 <C语言程序设计>课程设计报告 适用专业工程管理专业课程名称C语言程序设计指导教师赵军民.魏新红.张芳芳 设计人:051409 ...

  5. c语言程序设计迷宫,C语言程序设计课程设计-迷宫.doc

    C语言程序设计课程设计-迷宫 大 学 C语言程序设计 课程设计(论文) 题目: 迷宫问题 院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 讲 师 起止时间: 2009.12.14 ...

  6. c语言课设学生管理程序,c语言程序课程设计学生成绩管理程序.doc

    c语言程序课程设计学生成绩管理程序 武汉科技大学 二〇一〇~二〇一一学年第一学期 信息科学与工程学院 课程设计报告书 课程名称: C语言课程设计 班 级: 自动化2009级2班 学 号: 姓 名: 指 ...

  7. c语言程序课程设计问题,矩形问题-C语言程序课程设课程设计(论文).doc

    矩形问题-C语言程序课程设课程设计(论文) PAGE PAGE \* MERGEFORMAT 20课程设计(论文)题 目 名 称 矩形问题 课 程 名 称 C语言程序课程设计 学 生 姓 名 xxx ...

  8. C语言扫地雷游戏的题目简介,C语言程序设计课程设计(论文)-扫地雷游戏.doc...

    C语言程序设计课程设计(论文)-扫地雷游戏 辽 宁 工 业 大 学 C语言程序设计 课程设计(论文) 题目: 扫地雷游戏 院(系): 软件学院 专业班级: 电子商务091班 学 号: 学生姓名: 指导 ...

  9. c语言程序设计课程设计心得体会,C语言程序课程设计心得体会

    在科技高度发展的今天,计算机在人们之中的作用越来越突出,学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要. 在这个星期里,我们专业的学生在专业老师的带领下进行了c ...

  10. c语言课设宿舍管理程序,C语言程序课程设计宿舍管理软件.doc

    C语言程序课程设计宿舍管理软件.doc 课程设计(论文) 题 目 名 称 宿舍管理软件 课 程 名 称 C语言程序课程设计 学 生 姓 名 学 号 系 .专 业 信息工程系.信息大类 指 导 教 师 ...

最新文章

  1. 如何在StackOverflow上获得第一个标签徽章-以及为什么它很重要。
  2. 【总结】循序渐进,有三AI不得不看的技术综述(超过100篇核心干货)
  3. protel快捷键大全
  4. 【转】登录后自动显示未读快件
  5. Project facet Dynamic Web Module version 3.1 is not supported.
  6. python中的异或操作_Python中的异或和位操作的反转
  7. 机器人门禁控制盒怎么接线方法_RFID门禁系统原理、初始密码、密码修改方法...
  8. 我的世界基岩版种子和java版种子_我的世界:当前基岩版最强村庄神种,村庄下面集合所有要素...
  9. python实现时序异常检测_时序预测 01 - 异常检测 Smoothed z-score algorithm 标准化的一些实践、调参总结 -Python/pandas/numpy...
  10. 安卓手机版php服务器地址,Almp——安卓系统上搭建本地php服务器环境
  11. 计算机实践游戏报告范文,关于在校学生玩电脑游戏的调查报告
  12. 如何删除电脑上一些恶意安装软件?
  13. 经济基础知识(中级)【1】
  14. 资深网络安全工程师挣多少钱?年薪近百万
  15. python读取stl文件三维坐标_python vtk 读取三维raw数据存为stl
  16. 机械硬盘低级格式化软件_西数硬盘专用修复工具_WD HDD Repair Tool|西部数据硬盘修复工具 V3.6 中文版 - 偶要下载站...
  17. AD之PCB各层说明
  18. 【Linux安全管理】Firewalld详解
  19. 病毒也遵循二八法则?超级传播者背后的科学道理
  20. JS 函数中的 arguments 类数组对象

热门文章

  1. PDF文件编辑方法之PDF如何分割页面
  2. Linux下nano怎么用,nano的快捷键命令,^是什么,M是什么
  3. P4343 自动刷题机
  4. Python将.dat文件转换成.csv文件
  5. python实现dat文件批量转换为 excel文件 关键词 批量格式转换 dat文件 excel读写 诺祺 可发表知乎ed csdn ed
  6. html弹力球游戏源码,js版弹力球实例
  7. 51单片机LCD1602 定时器时钟 实现年月日时分秒显示
  8. java计算机毕业设计WEBOA办公信息管理系统源码+mysql数据库+系统+lw文档+部署
  9. ZEGO Meetup 第二期 | 视频直播+的技术实践之道
  10. [安卓系统导航升级系统,车机升级系统]汽车系统升级更新,诺威达k2201升级包