#include<stdio.h>
#include <time.h>
#include<conio.h>
#include<iostream>
#include<cmath>
#include<graphics.h>//包含图形库头文件
#include<mmstream.h>//播放音乐的头文件,包含多媒体设备接口文件
#define WIN_WIDTH 1240
#define WIN_HEIGHT 720
#define WALL_BRICK_SIZE 40 //定义墙的边长
#define ROW (WIN_HEIGHT/WALL_BRICK_SIZE)
#define COL (WIN_WIDTH/WALL_BRICK_SIZE)
#define ZhangPeng_NUM 5
using namespace std;
clock_t first_time=0; //记录放置炸弹的时刻
clock_t end_time=0; //随时记录放置炸弹后的时刻
clock_t boom_first_time=0; //记录爆炸特效出现的时刻
clock_t boom_end_time=0; //随时记录爆炸特效出现后的时刻
int flag_time=0; //是否出现炸弹没有为0,有则为1
int boom_time=0; //是否出现爆炸特效,没有为0,有则为1
int map[ROW][COL];//全局变量初始化为0;
IMAGE fm;
IMAGE img[4];
IMAGE role[2];
IMAGE baozha[3];
IMAGE result[2];
//开始界面
//尽量做到高内聚,低耦合,多用函数,少嵌套。
enum ATTR //定义枚举体,方便为二维数组赋值
{
SPACE,//空白
WALL, //墙
ZHANGPENG,//帐篷
DIBAN,//地板
ZHONG,//爆炸效果的中间部分
HENG,//爆炸效果的横着部分
SHU,//爆炸效果竖着的部分
ZHADAN,//炸弹
DADALIYA//敌人达达利亚
};
struct Role //定义玩家结构体
{
int x;
int y;
int width;//图片宽度
int height;//图片高度
int state;//1表示存活,0表示死亡
}player;
struct Boom //定义炸弹结构体
{
int x;
int y;
int width;
int height;
int exist;//炸弹是否存在
}boom;
struct enemy //定义敌人结构体
{
int x;
int y;
int width;
int height;
int state; //1表示存活,0表示死亡;
}dadaliya;
void load_image() //加载图片
{
loadimage(&img[0],"./images/wall.png",WALL_BRICK_SIZE,WALL_BRICK_SIZE); //强行将图片转化为设置的格式
loadimage(&img[1],"./images/zhangpeng.png",WALL_BRICK_SIZE,WALL_BRICK_SIZE); //强行将图片转化为设置的格式
loadimage(&img[2],"./images/diban.png",WALL_BRICK_SIZE,WALL_BRICK_SIZE); //强行将图片转化为设置的格式
loadimage(&img[3],"./images/zhadan.jpg",WALL_BRICK_SIZE,WALL_BRICK_SIZE); //强行将图片转化为设置的格式
loadimage(&baozha[0],"./images/zhong.png",WALL_BRICK_SIZE,WALL_BRICK_SIZE); //强行将图片转化为设置的格式
loadimage(&baozha[1],"./images/heng.png",WALL_BRICK_SIZE,WALL_BRICK_SIZE); //强行将图片转化为设置的格式
loadimage(&baozha[2],"./images/shu.png",WALL_BRICK_SIZE,WALL_BRICK_SIZE); //强行将图片转化为设置的格式
loadimage(&role[0],"./images/dadaliya.png",dadaliya.width,dadaliya.height); //强行将图片转化为设置的格式
loadimage(&role[1],"./images/keqing.png",player.width,player.height); //强行将图片转化为设置的格式
loadimage(&result[0],"./images/failure.png",WIN_WIDTH,WIN_HEIGHT); //强行将图片转化为设置的格式
loadimage(&result[1],"./images/win.png",WIN_WIDTH,WIN_HEIGHT); //强行将图片转化为设置的格式
}
void welcome() //游戏封面
{
loadimage(&fm,"./images/fengmian.png",WIN_WIDTH,WIN_HEIGHT);//加载图片
putimage(0,0,&fm);//输出图片
PlaySound(TEXT("./images/BackGroundMusic.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//播放背景音乐,链接compiler的libwinmm.a文件
}
void GameInit() //初始化场景
{
//初始化炸弹
boom.height=40;
boom.width=40;
boom.exist=false;
flag_time=0;
boom_time=0;
first_time=0;
end_time=0;
boom_first_time=0;
boom_end_time=0;
//初始化玩家
player.x=40;
player.y=40;
player.width=34;
player.height=34;
player.state=1;
//生成敌人达达利亚
int r= rand()%ROW; //不超过行数
int c=rand()%COL; //不超过列数;
while(map[r][c]!=SPACE || r<=8 ||c<=8)
{
r= rand()%ROW;
c=rand()%COL;
}
dadaliya.x=r*40;
dadaliya.y=r*40;
dadaliya.height=34;
dadaliya.width=34;
dadaliya.state=1;
//加载图片
load_image();//将对应的图片放入对应的数组
for(int i=1;i<ROW-1;i++) //关于炸弹和帐篷和有关数值全部初始化
{
for(int j=1;j<COL-1;j++)
{
if(map[i][j]==ZHADAN||map[i][j]==HENG||map[i][j]==ZHONG||map[i][j]==SHU||map[i][j]==ZHANGPENG)
{
map[i][j]=SPACE;
}
}
}
srand(GetTickCount());//随机数种子,保证rand不一样;java知识,得到从开机到现在的毫秒数作为种子;
for(int i=0;i<ROW;i++)
{
map[i][0]=map[i][COL-1]=WALL;
}
//初始化上下两行
for(int i=0;i<COL;i++)
{
map[0][i]=map[ROW-1][i]=WALL;
}
//初始化中间的墙
//随机生成帐篷,随机产生行列坐标,然后判断是否为空,是空就放帐篷;生成ZhangPeng_NUM个帐篷;
for(int i=0;i<ZhangPeng_NUM;i++)
{
r= rand()%ROW; //不超过行数
c=rand()%COL; //不超过列数;
while(r<3||c<3||r==ROW-1||c==COL-1||map[r][c]!=SPACE)
{
r= rand()%ROW;
c=rand()%COL;
}
map[r][c]=ZHANGPENG;
}
}
void special_effect() //爆炸特效并判断敌人是否死亡
{
float SHU1x=10000.0,SHU1y=10000.0,SHU2x=10000.0,SHU2y=10000.0,HENG1x=10000.0,HENG1y=10000.0,HENG2x=10000.0,HENG2y=10000.0;
float Enemy_image_central_x=dadaliya.x+dadaliya.width/2;
float Enemy_image_central_y=(float)(dadaliya.y+dadaliya.height/2);
map[boom.y/40][boom.x/40]=ZHONG;
if(map[boom.y/40+1][boom.x/40]==ZHANGPENG||map[boom.y/40+1][boom.x/40]==SPACE)
{
map[boom.y/40+1][boom.x/40]=SHU;
SHU1x=(float)((boom.x/40)*40+20);
SHU1y=(float)((boom.y/40+1)*40+20);
}
if(map[boom.y/40-1][boom.x/40]==ZHANGPENG||map[boom.y/40-1][boom.x/40]==SPACE)
{
map[boom.y/40-1][boom.x/40]=SHU;
SHU2x=(float)((boom.x/40)*40+20);
SHU2y=(float)((boom.y/40-1)*40+20);
}
if(map[boom.y/40][boom.x/40+1]==ZHANGPENG||map[boom.y/40][boom.x/40+1]==SPACE)
{
map[boom.y/40][boom.x/40+1]=HENG;
HENG1x=(float)((boom.x/40+1)*40+20);
HENG1y=(float)((boom.y/40)*40+20);
}
if(map[boom.y/40][boom.x/40-1]==ZHANGPENG||map[boom.y/40][boom.x/40-1]==SPACE)
{
map[boom.y/40][boom.x/40-1]=HENG;
HENG2x=(float)((boom.x/40-1)*40+20);
HENG2y=(float)((boom.y/40)*40+20);
}
//判断爆炸特效是否接触达达利亚,如果接触则,达达利亚死亡
double res1,res2,res3,res4; //计算四个方向的爆炸效果中心距离离敌人图片中心距离
res1= sqrt((SHU1x-Enemy_image_central_x)*(SHU1x-Enemy_image_central_x)+(SHU1y-Enemy_image_central_y)*(SHU1y-Enemy_image_central_y));
res2= sqrt((SHU2x-Enemy_image_central_x)*(SHU2x-Enemy_image_central_x)+(SHU2y-Enemy_image_central_y)*(SHU2y-Enemy_image_central_y));
res3= sqrt((HENG1x-Enemy_image_central_x)*(HENG1x-Enemy_image_central_x)+(HENG1y-Enemy_image_central_y)*(HENG1y-Enemy_image_central_y));
res4= sqrt((HENG2x-Enemy_image_central_x)*(HENG2x-Enemy_image_central_x)+(HENG2y-Enemy_image_central_y)*(HENG2y-Enemy_image_central_y));
float min_distance=WALL_BRICK_SIZE/2.0+dadaliya.height/2.0;
if(res1<=min_distance||res2<=min_distance||res3<=min_distance||res4<=min_distance)
dadaliya.state=0;
}
void special_effect_end() //爆炸特效结束
{
map[boom.y/40][boom.x/40]=SPACE;
if(map[boom.y/40+1][boom.x/40]==SHU)
map[boom.y/40+1][boom.x/40]=SPACE;
if(map[boom.y/40-1][boom.x/40]==SHU)
map[boom.y/40-1][boom.x/40]=SPACE;
if(map[boom.y/40][boom.x/40+1]==HENG)
map[boom.y/40][boom.x/40+1]=SPACE;
if(map[boom.y/40][boom.x/40-1]==HENG)
map[boom.y/40][boom.x/40-1]=SPACE;
}
void GameDraw() //不断绘图
{
cleardevice();//清屏
for(int i=1;i<ROW-1;i++)
{
for(int j=1;j<COL-1;j++)
{
putimage(j*WALL_BRICK_SIZE,i*WALL_BRICK_SIZE,&img[2]); //铺地板
}
C++刻晴炸弹人(改良版)
5星 · 超过95%的资源 需积分: 24 73 浏览量
2022-10-14
12:07:50
上传
评论
收藏 38.69MB ZIP 举报
软件开发技术局
- 粉丝: 122
- 资源: 26
最新资源
- Tableau实训一-教育网站指标评估
- 基于Python爬虫+词云图+情感分析对某东上完美日记的用户评论分析(数据集+代码).rar
- 古诗105-听琴听琴听琴听琴听琴听琴听琴听琴听琴听琴听琴听琴听琴听琴听琴听琴听琴
- 一个普通的SpringCloud样例
- PSE-PCN考试题库该题库答案为真实选项,另外选项为额外插入,非原题选项
- 数据挖掘实战-基于KMeans算法对超市客户进行聚类分群(数据集+代码).rar
- css网页设计.pdf
- 数据分析案例-顾客购物数据可视化分析(数据集+代码).rar
- 19613fc3f7378acf2787f12bbf7a34a1.JPG
- mmexport1718846385059.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论10