#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~3
int 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,3
HideCursor(); //隐藏光标
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
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
C语言c++游戏源代码大全 (602个子文件)
rcrc.aps 66KB
Script1.aps 31KB
home.bmp 720KB
ani.bmp 642KB
mapsky.bmp 576KB
map.bmp 336KB
mapbk.bmp 324KB
enemy.bmp 50KB
gameover.bmp 40KB
role.bmp 30KB
player1.bmp 26KB
tile.bmp 8KB
explode2.bmp 5KB
bore.bmp 5KB
explode1.bmp 566B
farming.vcxprojResolveAssemblyReference.cache 707B
坦克大战(Battle City)(Modified version).cpp 71KB
game.cpp 42KB
zhuxunhuan.cpp 20KB
推箱子改版.cpp 15KB
farming.cpp 11KB
zhidan.cpp 7KB
Main.cpp 7KB
waiyuan.cpp 6KB
fangxiang.cpp 6KB
Boom.cpp 3KB
一个简单的小游戏:盒子接球.cpp 3KB
tupian.cpp 2KB
xiaoguo.cpp 1KB
Thumbs.db 56KB
Thumbs.db 16KB
Thumbs.db 6KB
mt.dep 67B
016-多色彩表格.doc 4.46MB
神器简介及获取图文并茂.doc 2.6MB
032-时间线线条.doc 2.03MB
《程序设计综合实践I》报告模版.doc 1.98MB
085-帆船时间线.doc 1.35MB
015-百度百科.doc 1.11MB
018-蓝色线条.doc 864KB
045-文字表格.doc 490KB
006-彩色时间线.doc 408KB
025-中英文时间线.doc 397KB
080-淡蓝色线阶梯.doc 377KB
061-时间线.doc 366KB
075-图片蓝色字.doc 338KB
070-全版面红色块.doc 332KB
030-文字方框.doc 320KB
031-红色块线条.doc 314KB
008-彩色时间线.doc 305KB
033-红色块线条.doc 289KB
017-图片线条.doc 281KB
008-黑色块方框.doc 276KB
006-文字表格.doc 247KB
055-黑色线条.doc 246KB
023-黑色线条.doc 246KB
029-蓝色渐变时间线.doc 244KB
032-灰色块文字.doc 243KB
002-蓝色音乐平台.doc 234KB
062-蓝底色灰色块.doc 228KB
人力资源主管个人简历范文.doc 218KB
030-时间线.doc 215KB
079-淡色块时间线.doc 213KB
090-橘黄色块时间线.doc 207KB
025-蓝色块线条.doc 205KB
021-黑色线条.doc 175KB
031-黑线条.doc 174KB
005-水墨画表格.doc 171KB
014-文字线条.doc 163KB
028-红色块黑线条.doc 163KB
071-蓝色块时间线.doc 162KB
044-红色线条.doc 157KB
066-时间线.doc 156KB
020-淡色时间线.doc 155KB
005-蓝色块线条.doc 147KB
034-图片表格.doc 144KB
063-蓝色块线条.doc 135KB
033-黑色文字.doc 125KB
081-蓝色块时间线.doc 122KB
008-中英结合表格.doc 122KB
014-腾讯微博 .doc 119KB
029-淡蓝色大标题.doc 117KB
099-彩色时间条.doc 116KB
004-搜索型方块.doc 114KB
100-蓝灰色块搭配.doc 113KB
046-蓝色渐变方框.doc 110KB
文档 2.doc 109KB
096-蓝色色块加线条.doc 109KB
089-红色块时间线.doc 107KB
027-中英文线条.doc 103KB
073-黑色块时间线.doc 101KB
009-全版面蓝色块.doc 100KB
037-线条文字.doc 100KB
074-蓝黑字体相间.doc 89KB
XX大学200X届毕业生个人求职简历.doc 86KB
应聘四大的简历模板.doc 83KB
051-蓝色块线条.doc 83KB
应聘公关策划类的简历模板.doc 82KB
020-灰色块时间线.doc 82KB
应聘高校教务管理岗位简历模板.doc 81KB
共 602 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
- 脑瓜子嗡嗡的……2023-03-18总体还好,正在使用
- chulia2023-05-24#文字清晰 #即装即用 #内容与标题一致
- 聆听山语2021-05-30内容丰富!! 好多经典实例!!! 非常有用
偷摘月亮了
- 粉丝: 9
- 资源: 55
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 时间复杂度与数据结构:算法效率的双重奏
- QT 简易项目 网络调试器(未实现连接唯一性) QT5.12.3环境 C++实现
- YOLOv3网络架构深度解析:关键特性与代码实现
- 2024 CISSP考试大纲(2024年4月15日生效)
- ACOUSTICECHO CANCELLATION WITH THE DUAL-SIGNAL TRANSFORMATION LSTM NETWORK
- 深入解析:动态数据结构与静态数据结构的差异
- YOLOv2:在YOLOv1基础上的飞跃
- imgview图片浏览工具v1.0
- Toony Colors Pro 2 2.2.5的资源
- Java项目:基于SSM框架+Mysql+Jsp实现的药品管理系统(ssm+B/S架构+源码+数据库)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功