/******************************************
* 游戏名称:快打旋风
* 编译环境:vc6.0 / vc2010 + EasyX_v20130322(beta)
* Maker: xiongfj(1013534648@qq.com)
* 最后修改:2013-3-28
*******************************************/
#include "all.h"
#include "welcome.h"
#include <Mmsystem.h> // 使用该计时器 timeGetTime()
#pragma comment ( lib, "Winmm.lib" )
/**************/
void Init();
void Control(bool&); // 两个主角的控制
void Dispatch_role(int); // 创建玩家选取的角色
void Dispatch_emeny(); // 创建每段地图的敌人
void Dispatch_boss(); // 生成 boss
void Show_Information(); // 显示玩家敌人各种信息
void Deal_Information(); // 处理信息
void Check_boss(bool&); // 检测 boss 是否死光过关 或 玩家死翘翘
void Go_Next_Lev(); // 播放进入下一关动画
void Lift_up_down(); // 制作电梯边缘运动效果
// 全局函数指针
void (Role::* f[2])(int, int);
void (BASE_CLASS::* mf[EMENY_NUM])(int, const int&);
void (BASE_BOSS::* bf[BOSS_NUM])(int id, const int& player);
MAP Map;
int main()
{
initgraph(500, 450);
Map.Init();
mciSendString(_T("open ./res/Sounds/选人.mp3 alias xuan"), NULL, 0, NULL);
mciSendString(_T("play xuan repeat"), NULL, 0, NULL);
srand(timeGetTime());
bool game = true;
DWORD game_speed_t1 = timeGetTime(), game_speed_t2;
L::pn->pP = NULL; // 用于检测读取链表是否到尾
L::p_b->p_B = NULL;
Init();
int role = Chose_role(); // 返回玩家的选择信息
Dispatch_role(role); // 根据玩家选择的角色 new 相应的派生类,并确定玩家数量,必须在 Init() 之后!!!
BeginBatchDraw();
Go_Next_Lev();
while (game)
{
Sleep(1);
game_speed_t2 = timeGetTime();
Control(game);
if (game_speed_t2 - game_speed_t1 > 33)
{
game_speed_t1 = game_speed_t2;
if (!Map.Set_Map())
{
Map.Move_map();
Lift_up_down();
Show_Information();
if (WEAPON::out)
{
WEAPON::x = WEAPON::X + Map.x[Map.map_id];
putimage(WEAPON::x, WEAPON::y, &WEAPON::weapon[WEAPON::weapon_kind][1], SRCAND);
putimage(WEAPON::x, WEAPON::y, &WEAPON::weapon[WEAPON::weapon_kind][0], SRCINVERT);
if (++WEAPON::time > 400)
WEAPON::out = false;
}
if (FOOD::out)
{
FOOD::x = FOOD::X + Map.x[Map.map_id];
putimage(FOOD::x, FOOD::y, &FOOD::img[1], SRCAND);
putimage(FOOD::x, FOOD::y, &FOOD::img[0], SRCINVERT);
if (++FOOD::time > 400)
FOOD::out = false;
}
if (!OTHER::emeny)
for (int i = 0; i < EMENY::emeny_num; i++)
if (Emeny[i].appear[Map.part[Map.map_id]])
(Emeny[i].Mp->*mf[i])(i, PLAYER::player_num);
if (!OTHER::boss)
for (int i = 0; i < BOSS::Boss_num; i++)
if (Boss[i].appear)
(Boss[i].Bp->*bf[i])(i, PLAYER::player_num);
for (int i = 0; i < PLAYER::player_num; i++)
if (Player[i].appear)
(Player[i].Rp->*f[i])(Player[i].dir, i + 1);
if (OTHER::emeny) // 制作遮住玩家的效果
for (int i = 0; i < EMENY::emeny_num; i++)
if (Emeny[i].appear[Map.part[Map.map_id]])
(Emeny[i].Mp->*mf[i])(i, PLAYER::player_num);
if (OTHER::boss)
for (int i = 0; i < BOSS::Boss_num; i++)
if (Boss[i].appear)
(Boss[i].Bp->*bf[i])(i, PLAYER::player_num);
/***** 最后一关 boss ******/
if (Map.map_id == 4 && Map.part[4] == 7)
{
L::pn->PutImg();
L::p_b->Kick_down();
}
}
/****** 地图内每段需处理的数据 *******/
if (!Map.Move_map(true))
{
Dispatch_emeny();
Dispatch_boss();
Check_boss(game);
}
}
FlushBatchDraw();
}
closegraph();
return 0;
}
// 初始化一些必要数据
void Init()
{
int i, j, x; // 声明循环变量
/***** 效果图 ******/
loadimage(&PLAYER::light[0], _T("./res/Images/00.jpg"), 32, 32);
loadimage(&PLAYER::light[1], _T("./res/Images/01.jpg"), 32, 32);
IMAGE img;
loadimage(&img, _T("./res/Images/effect.jpg"), 600, 1000);
SetWorkingImage(&img);
for (i = 0; i < 2; i++)
{
for (x = 0; x < 6; x++)
{
getimage(&PLAYER::blood[1][x][i], x * 80, i * 80, 79, 79); // 1
getimage(&PLAYER::blood[0][x][i], x * 80, 160 + i * 80, 79, 79);
if (x < 3)// 依次为:小刀、飞镖、锤子(0-1-2)
getimage(&WEAPON::weapon[x][i], i * 48, 576 + x * 48, 47, 47);
}
getimage(&PLAYER::light[i], i * 32, 400, 32, 32);
getimage(&OTHER::lift_up_down[1], 0, 432, 344, 144);
getimage(&FOOD::img[i], i * 80, 720, 79, 79); // 鸡腿
}
SetWorkingImage();
/*******/
IMAGE eh;
loadimage(&eh, _T("./res/Images/other.jpg"));
SetWorkingImage(&eh);
for (i = 0; i < 6; i++)
getimage(&EMENY::head[i], i * 20, 0, 20, 20);
for (i = 0; i < 2; i++)
getimage(&EMENY::papaw[i], i * 70, 20, 70, 40);
for (i = 0; i < 3; i++)
getimage(&PLAYER::head[i], i * 30, 60, 30, 35);
for (i = 0; i < 5; i++) // boss 头像待加
getimage(&BOSS::head[i], i * 30, 95, 30, 30);
getimage(&OTHER::lift_up_down[0], 0, 125, 20, 20);
SetWorkingImage();
/***** 玩家 **********/
for (x = 0; x < 2; x++)
{
Player[x].role_kind = 0;
f[x] = &Role::Stand;
Player[x].dir = LEFT;
Player[x].be_kick_counter = 0;
Player[x].catch_emeny = false;
Player[x].die = false;
Player[x].appear = true;
Player[x].lying = false;
Player[x].be_kiss = false;
Player[x].emeny = 0;
Player[x].boss = 0;
Player[x].throw_dir = BACK;
Player[x].skill = NONE;
Player[x].Set_bol(0x3f);
Player[x].level = 0;
Player[x].hp = 200;
Player[x].max_hp = Player[x].hp;
Player[x].experience = 0;
Player[x].life = 3;
Player[x].x = x * 250;
Player[x].y = 0;
}
/***** 敌人 **********/
Thin_Old_Man::Load();
Small_Monkey::Load();
Big_Savage::Load();
Small_Dai::Load();
Big_Dai::Load();
Girl::Load();
int _x[2] = { 20, 270 };
int _y[3] = { 375, 400, 425 };
for (i = 0; i < EMENY_NUM; i++)
{
int a = rand() % 1 + 3;
Emeny[i].phead = &EMENY::head[a];
switch (a)
{
case 0: Emeny[i].Mp = new Small_Monkey; break;
case 1: Emeny[i].Mp = new Small_Dai; break;
case 2: Emeny[i].Mp = new Big_Dai; break;
case 3: Emeny[i].Mp = new Girl; break;
case 4: Emeny[i].Mp = new Thin_Old_Man; break;
case 5: Emeny[i].Mp = new Big_Savage; break;
default: printf("Dispatch_emeny出错\n"); break;
}
Emeny[i].x = _x[i / 3];
Emeny[i].y = _y[i % 3];
Emeny[i].stand = false;
Emeny[i].be_catch = false;
Emeny[i].attack = false;
Emeny[i].lying = true; // 防止敌人未出现就被玩家攻击
Emeny[i].start_fly = true;
Emeny[i].role = 0;
Emeny[i].be_kick_counter = 0;
Emeny[i].hp = 0;
Emeny[i].max_hp = 0;
mf[i] = &BASE_CLASS::Walk;
Emeny[i].Mp->SetHp(Emeny[i].hp);
for (j = 0; j < 8; j++)
{
Emeny[i].appear[j] = false;
if (j < 7)
{
for (int id = 0; id < MAX_MAP; id++)
{
if (j < 5)
Emeny[i].live[id][j] = 4;
else
Emeny[i].live[id][j] = 6;
}
Emeny[i].live[3][5] = 17;
}
}
}
/********* BOSS *********/
int hy[2] = { 375, 415 };
for (i = 0; i < BOSS_NUM; i++)
{
Boss[i].lying = true;
Boss[i].start_fly = true;
Boss[i].role = 0;
Boss[i].be_kick_counter = 0;
Boss[i].die = false;
Boss[i].appear = false;
Boss[i].x = 10;
Boss[i].y = hy[i];
Boss[i].hp = 300;
Boss[i].max_hp = 300;
Boss[i].ph = &BOSS::head[0];
static int a[3] = { 440, 185, 43 };/////////.......
static RECT rec = { -40, 185, 440, 280 };
bf[i] = &BASE_BOSS::Walk;
Boss[i].Bp = new B_ONE(a, &rec);
}
/******* OTHER 结构 ********/
int __y[4] = { 160, 255, 350 };
for (i = 0; i < 3; i++)
OTHER::y[i] = __y[i]; // 电梯移动的方块左上角坐标
}
// 玩家控制
void Control(bool& game)
{
/********* 玩家一 *************************/
if (GetAsyncKeyState('A') & 0x8000 && Player[0].bol[0])
{
Player[0].dir = LEFT;
f[0] = &Role::Walk;
}
if (GetAsyncKeyState('D') & 0x8000 && Player[0].bol[1])
{
Player[0].dir = RIGHT;
f[0] = &Role::Walk;
}
if (GetAsyncKeyState('W') & 0x8000 && Player[0].bol[2])
{
if (GetAsyncKeyState('A') & 0x8000 && Player[0].bol[0])
Player[0].dir = L_U;
else if (GetAsyncKeyState('D') & 0x8000 && Player[0].bol[1])
Player[0].dir = R_U;
else
Player[0].dir = UP;
f[0] = &Role::Walk;
}
if (GetAsyncKeyState('S') & 0x8
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
课程大作业-基于C++开发的红白机经典游戏双人快打旋风源码(开发环境为vs2019 + EasyX).zip 课程大作业-基于C++开发的红白机经典游戏双人快打旋风源码(开发环境为vs2019 + EasyX).zip 课程大作业-基于C++开发的红白机经典游戏双人快打旋风源码(开发环境为vs2019 + EasyX).zip 【介绍】 该游戏模拟的红白机经典游戏快打旋风。 双人版快打旋风, 同时砍杀两个boss, 杀到手软的小兵, 让你过足手瘾! 编译环境:vs2019 + EasyX_v20210730。
资源推荐
资源详情
资源评论
收起资源包目录
课程大作业-基于C++开发的红白机经典游戏双人快打旋风源码(开发环境为vs2019 + EasyX).zip (69个子文件)
说明介绍.md 212B
screenshot
3.png 198KB
1.png 177KB
5.png 208KB
4.png 194KB
2.png 230KB
Fight
Fight.vcxproj.user 221B
Fight.cpp 281KB
Fight.vcxproj 7KB
res
Sounds
玩家被击飞.wav 39KB
bk2.mp3 989KB
dada.mp3 149KB
选人.mp3 262KB
玩家死光.mp3 96KB
倒勾脚.wav 28KB
连环腿2.wav 26KB
连环腿1.wav 13KB
bk3.mp3 1.57MB
bk5.mp3 991KB
bk1.mp3 1.58MB
集聚光波.wav 30KB
击中.wav 8KB
shoot.wav 13KB
dragon_fist声.wav 21KB
飞扑.wav 34KB
甩人.wav 30KB
bk4.mp3 1.94MB
敌人倒地.wav 22KB
落地.wav 9KB
野人脚步.wav 22KB
出拳.wav 9KB
旋风腿.wav 65KB
双脚跳踢.wav 19KB
击中2.wav 26KB
起跳.wav 17KB
发出光波.wav 26KB
Images
boss2.jpg 145KB
rect_1_0.gif 156B
m4.jpg 217KB
rect_1_1.gif 255B
1player.jpg 44KB
m1.jpg 167KB
boss0.jpg 150KB
妹子.jpg 96KB
boss1.jpg 139KB
boss4.jpg 121KB
total.jpg 37KB
m2.jpg 240KB
小呆.jpg 81KB
廋老头.jpg 101KB
猴仔.jpg 75KB
大个子野人.jpg 108KB
2player.jpg 53KB
rect_2_1.gif 220B
m0.jpg 204KB
m3.jpg 183KB
rect_2_0.gif 156B
heye.jpg 191KB
other.jpg 39KB
kady.jpg 193KB
大呆.jpg 93KB
w1.jpg 47KB
effect.jpg 50KB
jack.jpg 150KB
Fight.vcxproj.filters 1KB
all.h 25KB
welcome.h 4KB
.vs
Fight
v16
.suo 44KB
Fight.sln 1KB
共 69 条
- 1
资源评论
Make程序设计
- 粉丝: 5637
- 资源: 3568
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功