3 Star 1 Fork 1

DuskMist / MFC_school_DoodleJump

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
gamesystem.cpp 23.22 KB
一键复制 编辑 原始数据 按行查看 历史
yizitaka 提交于 2022-09-01 17:31 .
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795
#include "gamesystem.h"
#include "QMessageBox"
#include <QDebug>
#include <QDir>
#include <QtCore/QtMath>
GameSystem::GameSystem()
{
//by朱纯沣 胡太瑞
paused = 0;
endgame= 0;
tip = "游戏结束.\n你的得分为";
hardness = 0;
GetCoinNum = 0;
KillMonsterNum = 0;
shootable = 0;
player = new QMediaPlayer;
player->setSource(QUrl("qrc:/new/prefix1/music/1.wav"));
player->play();
//----
thisboardid = 0;
wantedid = 0;
wantedx = 150;
AutoHelpShow = 1;
//---
width = 300;
height = 500;
LocalX=0;
Gravity = 10;
Gametime = 0;
Mintime =0.01;
PlayerNum = 1;
MonsterNum = 3;
BulletNum = 3;
BoardNum = 30;
BoardSIDENum = 10;
//Boardstart =0;//链表开始
BoardHighest = 0;//最高的
MonsterHighest = 0;
playerlist = new GamePlayer[PlayerNum];
marks = new int[PlayerNum];
monsterlist = new GameMonster[MonsterNum];
boardlist = new GameBoard[BoardNum];
boardlistSIDE = new GameBoard[BoardSIDENum];
bulletlist= new GameBullet[BulletNum];
boardsource = new QPixmap[6];
boardsource[0].load( ":/new/prefix1/picture/board1.png");//普通
boardsource[1].load( ":/new/prefix1/picture/board2.png");//碎裂
boardsource[2].load( ":/new/prefix1/picture/board3.png");//会动
boardsource[3].load( ":/new/prefix1/picture/board4.png");//一次性
boardsource[4].load( ":/new/prefix1/picture/board5.png");//弹力
boardsource[5].load( ":/new/prefix1/picture/board6.png");//投币
bulletsource = new QPixmap[1];
bulletsource[0].load(":/new/prefix1/picture/bullet.png");
}
GameSystem::~GameSystem()
{
delete []boardsource;
delete []bulletsource;
delete []boardlist;
delete []boardlistSIDE;
delete []playerlist;
delete []monsterlist;
delete []bulletlist;
delete []marks;
delete player;
}
void GameSystem::GameInit(QString names){
UsrName=names;//增加一下用户名字的信息by黄启旭
for(int i=0;i<PlayerNum;i++){
//playerlist[i].graph.load("../picture/player1.png");//只能在本地,虽然是相对路径却无法加载
playerlist[i].graph.load(":/new/prefix1/picture/player1.png");//使用本行代码代替上面。
}
for(int i=0;i<MonsterNum;i++){
monsterlist[i].graph.load(":/new/prefix1/picture/monster1.png");
}
for(int i=0;i<PlayerNum;i++){
marks[i] = 0;
}
for(int i=0;i<BulletNum;i++){
bulletlist[i].SetRXY(0,0);
}
}
//by朱纯沣
void GameSystem::Gamestart(){
LocalH = 0;
for(int i=0;i<PlayerNum;i++){
playerlist[i].SetRXY(width/2+LocalX,150);
playerlist[i].vx = 0;
playerlist[i].vy = 0;
}
boardlist[0].SetRXY(width/2,20);boardlist[0].Type=1; //确保脚底有一个
for(int i=0;i<BoardSIDENum;i++){
SummonSIDEBoard(i);
}
for(int i=1;i<BoardNum;i++){
SummonBoard(i);
}
monsterlist[0].SetRXY(width/2,500);
for(int i=1;i<MonsterNum;i++){
SummonMonster(i);
}
for(int i=0;i<PlayerNum;i++){
marks[i] = 0;
}
}
//by朱纯沣
void GameSystem::GamePause(){
paused = !paused;
}
void GameSystem::GameEnd(){
//黄启旭
//我先把排行榜修改的内容写了
if(mode==1){
//单人模式才有
//QString t=QDir::currentPath();
QString fln1="namelist.txt";QFile qf1(fln1);
QString fln2="scorelist.txt";QFile qf2(fln2);
QString fln3="timelist.txt";QFile qf3(fln3);
//QString fln="D:\\myC++Code\\tuyatiaoyue\\mfc_school_-doodle-jump\\ranklist\\ranklist.txt";
qf1.open(QIODevice::ReadOnly);
qf2.open(QIODevice::ReadOnly);
qf3.open(QIODevice::ReadOnly);
QString QstrN[5],Qstrs[5],Qstrt[5];
std::string strs[5],strt[5];
int rankmarks[5];//记录分数的
// int timemarks[5];//记录时间的
bool tag=0;//tag为1则表示排行榜榜数还没有达到5,在后面追加
int i;
for(i=0;i<5;i++){
//排行榜共计5行所以读5行文本
rankmarks[i]=0;
//timemarks[i]=0;//初始化
QstrN[i]= qf1.readLine();//读名字
if(QstrN[i].isEmpty()){
tag=true;
break;
}
Qstrs[i]=qf2.readLine();//读分数
strs[i]=Qstrs[i].toStdString();
Qstrt[i]=qf3.readLine();//读时间
//strt[i]=Qstrt[i].toStdString();
int j=0;
//时间转换成整数
while((strs[i][j]>'9'||strs[i][j]<'0')&&j<strs[i].length()){
j++;
}
while(strs[i][j]<='9'&&strs[i][j]>='0'&&j<strs[i].length()){
rankmarks[i]*=10;
rankmarks[i]+=strs[i][j];
rankmarks[i]-='0';
j++;
}
/*j=0;
while((strt[i][j]>'9'||strt[i][j]<'0')&&j<strt[i].length()){
j++;
}
while(strt[i][j]<='9'&&strt[i][j]>='0'&&j<strt[i].length()){
timemarks[i]*=10;
timemarks[i]+=strt[i][j];
timemarks[i]-='0';
j++;
}*/
}
qf1.close();
qf2.close();
qf3.close();
if(tag){
//直接在最后面追加
qf1.open(QIODevice::Truncate|QIODevice::WriteOnly);
qf2.open(QIODevice::Truncate|QIODevice::WriteOnly);
qf3.open(QIODevice::Truncate|QIODevice::WriteOnly);
QByteArray Nmes=UsrName.toUtf8();
rankmarks[i]=LocalH;
QstrN[i].clear();
QstrN[i]=UsrName+"\n";
Qstrs[i]=QString::number(LocalH)+"\n";
Qstrt[i]=QString::number(Gametime)+"\n";
QString tmp;
for(int j=i-1;j>=0;j--){
if(rankmarks[j]<rankmarks[j+1]){
tmp=QstrN[j+1];
QstrN[j+1]=QstrN[j];
QstrN[j]=tmp;
tmp=Qstrs[j+1];
Qstrs[j+1]=Qstrs[j];
Qstrs[j]=tmp;
tmp=Qstrt[j+1];
Qstrt[j+1]=Qstrt[j];
Qstrt[j]=tmp;
rankmarks[j]^=rankmarks[j+1];
rankmarks[j+1]^=rankmarks[j];
rankmarks[j]^=rankmarks[j+1];
}
}
QByteArray lnes;
for(int j=0;j<=i;j++){
lnes=QstrN[j].toUtf8();
qf1.write(lnes);
lnes=Qstrs[j].toUtf8();
qf2.write(lnes);
lnes=Qstrt[j].toUtf8();
qf3.write(lnes);
}
qf1.close();qf2.close();qf3.close();
}
else{
if(LocalH>rankmarks[4]){
qf1.open(QIODevice::Truncate|QIODevice::WriteOnly);
qf2.open(QIODevice::Truncate|QIODevice::WriteOnly);
qf3.open(QIODevice::Truncate|QIODevice::WriteOnly);
//先把最新的信息换上去。
rankmarks[4]=LocalH;
QstrN[4].clear();
QstrN[4]=UsrName+'\n';
QString tmp;
Qstrs[4]=QString::number(LocalH);Qstrs[4]+='\n';
Qstrt[4]=QString::number(Gametime);Qstrt[4]+='\n';
for(int i=3;i>=0;i--){
if(rankmarks[i]<rankmarks[i+1]){
tmp=QstrN[i+1];
QstrN[i+1]=QstrN[i];
QstrN[i]=tmp;
tmp=Qstrs[i+1];
Qstrs[i+1]=Qstrs[i];
Qstrs[i]=tmp;
tmp=Qstrt[i+1];
Qstrt[i+1]=Qstrt[i];
Qstrt[i]=tmp;
rankmarks[i]^=rankmarks[i+1];
rankmarks[i+1]^=rankmarks[i];
rankmarks[i]^=rankmarks[i+1];
}
}
QByteArray lnes;
for(int i=0;i<5;i++){
lnes=QstrN[i].toUtf8();
qf1.write(lnes);
lnes=Qstrs[i].toUtf8();
qf2.write(lnes);
lnes=Qstrt[i].toUtf8();
qf3.write(lnes);
}
qf1.close();qf2.close();qf3.close();
}
}
}
}
//以下直到标记 by朱纯沣
int GameSystem::RandomHardness(){
if(hardness>50)hardness=50;
return (rand()%(50)+hardness);
}
void GameSystem::SummonMonster(int id){
monsterlist[id].SetRXY(rand()%width,2000+monsterlist[MonsterHighest].y);
monsterlist[id].HP = 100;
monsterlist[id].showable = 1;
if(monsterlist[id].y>monsterlist[MonsterHighest].y){MonsterHighest = id;}//更新实体最高
}
void GameSystem::SummonBoard(int id){
boardlist[id].SetRXY(rand()%width,RandomHardness()+boardlist[BoardHighest].y);
boardlist[id].RandomInit();
if(boardlist[id].y>boardlist[BoardHighest].y){BoardHighest = id;}//更新实体最高
}
void GameSystem::SummonSIDEBoard(int id){
//完全依赖于最高的实体板子
if(rand()%10>2){
boardlistSIDE[id].SetRXY(rand()%width,3*(rand()%height)+boardlist[BoardHighest].y);
boardlistSIDE[id].Type = 2;
}
else{//生成硬币
boardlistSIDE[id].SetRXY(boardlist[BoardHighest].x+rand()%30,10+boardlist[BoardHighest].y);
boardlistSIDE[id].Type = 6;
}
}
void GameSystem::ShootBullet(){
double dth = 3.1415/(BulletNum+1);
if(shootable){
for(int i=0;i<BulletNum;i++){
bulletlist[i].showable = 1;
bulletlist[i].SetRXY(playerlist[0].rx,playerlist[0].y);//头顶
bulletlist[i].SetVxy(100*qCos(dth*i+dth),100*qSin(dth*i+dth));
}
}
shootable = 0;//冷却
}
void GameSystem::GameUpdate(){
Gametime++;
hardness = LocalH/200;
//hardness = 50-50*(1/(LocalH+1));
for(int i=0;i<PlayerNum;i++){
if(playerlist[i].y-LocalH<0){//检测死亡
endgame = 1;
}
}
for(int i=0;i<PlayerNum;i++){
for(int j=0;j<MonsterNum;j++){//检测与怪物的碰撞
if(monsterlist[j].showable){
if(RectMeetPoint(monsterlist[j],playerlist[i])){
endgame = 1;
}
}
}
//-----------
for(int j=0;j<BoardSIDENum;j++){//检测与辅助的碰撞
if(boardlistSIDE[j].showable&&RectMeetPoint(boardlistSIDE[j],playerlist[i])){
if(boardlistSIDE[j].Type==6){
GetCoinNum++;
}
boardlistSIDE[j].showable = 0;
}
}
for(int j=0;j<BoardNum;j++){//检测与板子的碰撞
//break;
if(boardlist[j].showable){//如果可见
if(RectMeetDownRect(boardlist[j],playerlist[i])){//判断是否碰撞
if(playerlist[i].vy<0){
if(boardlist[j].Type!=2){//如果不是碎裂砖头
shootable = 1;
thisboardid = j;//必须在autoupdate前//或者
flag11=0;
AutoUpdate(boardlist[j].Type);//更新预期点
if(boardlist[j].Type == 5){
playerlist[i].vy = 100;
}
else{
playerlist[i].vy = 50;
}
if(boardlist[j].Type==4){//如果是一次性
boardlist[j].showable = 0;
}
}
else{boardlist[j].showable = 0;}
}
}
}
}
}
//for(int i=0;i<100;i++){ playerlist[0].vy = -10;}
for(int i=0;i<PlayerNum;i++){//玩家更新
playerlist[i].UpdateV(0.01);
playerlist[i].Update(0.01);
playerlist[i].LimitXY(width,0);
if(playerlist[i].y-LocalH > height/2){//如果屏幕上图像越过一半距离
LocalH = playerlist[i].y-height/2;
}
}
for(int i=0;i<BoardSIDENum;i++){//无用板子果子?更新。果板二向性
boardlistSIDE[i].Update();
if(boardlistSIDE[i].y-LocalH<0){
SummonSIDEBoard(i);
}
}
for(int i=0;i<BoardNum;i++){//板子更新
boardlist[i].Update();
if(boardlist[i].y-LocalH<0){
SummonBoard(i);
}
boardlist[i].LimitXY(width,0);
}
for(int i=0;i<MonsterNum;i++){//怪物更新
monsterlist[i].Update();
if(monsterlist[i].HP<=0){
monsterlist[i].showable = 0;
KillMonsterNum++;
}
if(boardlist[i].y-LocalH<0||monsterlist[i].showable==0){
SummonMonster(i);
}
}
for(int i=0;i<BulletNum;i++){//子弹更新
bulletlist[i].Update();
if(RtoS(bulletlist[i].y)<0){
bulletlist[i].showable = 0;
}
if(bulletlist[i].x>width||bulletlist[i].x<0){
bulletlist[i].showable = 0;
}
for(int j=0;j<MonsterNum;j++){
if(monsterlist[j].showable&&bulletlist[i].showable){
if(RectMeetPoint(monsterlist[j],bulletlist[i])){
//monsterlist[j].showable = 0;一刀秒
monsterlist[j].HP -= bulletlist[i].ATK;
bulletlist[i].showable = 0;
}
}
}
}
if(endgame){//检测游戏是否结束
tip.append(QString::number(LocalH));
tip.append("\n获得硬币:");
tip.append(QString::number(GetCoinNum));
tip.append("\n子弹射中数:");
tip.append(QString::number(KillMonsterNum));
if(mode!=2)QMessageBox::information(0,"About",tip);
GamePause();
GameEnd();
}
}
void GameSystem::GameShow(QPainter* GamePainter){
//屏幕空间是y走朝下的,所以要转换为y轴朝上。
GamePainter->drawRect(0+LocalX,0,width,height);//画游戏所在框
for(int i=0;i<PlayerNum;i++){
GamePainter->drawPixmap(playerlist[i].x+LocalX,RtoS(playerlist[i].y),
playerlist[i].width,playerlist[i].height,playerlist[i].graph);
//GamePainter->drawRect(playerlist[i].rx+LocalH,RtoS(playerlist[i].ry),1,1);
//=======
//GamePainter->drawRect(playerlist[i].x,RtoS(playerlist[i].y),
// playerlist[i].width,playerlist[i].height);
}
for(int i=0;i<BoardNum;i++){
//通过type显示不同图片
if(boardlist[i].showable)GamePainter->drawPixmap(boardlist[i].x+LocalX,RtoS(boardlist[i].y),
boardlist[i].width,boardlist[i].height,boardsource[boardlist[i].Type-1]);
//绘制碰撞箱
//if(boardlist[i].Type==5)GamePainter->drawRect(boardlist[i].x+LocalX,RtoS(boardlist[i].y),boardlist[i].width,boardlist[i].height);
}
for(int i=0;i<BulletNum;i++){//子弹绘制
if(bulletlist[i].showable)GamePainter->drawPixmap(bulletlist[i].x+LocalX,RtoS(bulletlist[i].y),
bulletlist[i].width,bulletlist[i].height,bulletsource[0]);
}
for(int i=0;i<MonsterNum;i++){//怪物绘制
if(monsterlist[i].showable)GamePainter->drawPixmap(monsterlist[i].x+LocalX,RtoS(monsterlist[i].y),
monsterlist[i].width,monsterlist[i].height,monsterlist[i].graph);
}
//绘制预测点
if(AutoHelpShow){
GamePainter->drawRect(boardlist[wantedid].x+LocalX,RtoS(boardlist[wantedid].y),
boardlist[wantedid].width,boardlist[wantedid].height);
GamePainter->drawRect(wantedx-boardlist[0].width/2+LocalX,RtoS(boardlist[wantedid].y),boardlist[wantedid].width,boardlist[wantedid].height);
}
for(int i=0;i<BoardSIDENum;i++){
//通过type显示不同图片
if(boardlistSIDE[i].showable)GamePainter->drawPixmap(boardlistSIDE[i].x+LocalX,RtoS(boardlistSIDE[i].y),
boardlistSIDE[i].width,boardlistSIDE[i].height,boardsource[boardlistSIDE[i].Type-1]);
//绘制碰撞箱
//if(boardlist[i].Type==5)GamePainter->drawRect(boardlist[i].x+LocalX,RtoS(boardlist[i].y),boardlist[i].width,boardlist[i].height);
}
}
bool GameSystem::RectMeetPoint(const GameObject& b,const GameObject& p){
//检测底边中点是否碰撞
if((b.x<p.rx)&&(b.y>p.ry)
&&(b.x+b.width>p.rx)&&(b.y-b.height<p.ry)){
return 1;
}
return 0;
}
bool GameSystem::RectMeetRect(const GameObject& b,const GameObject& p){
//检测是否两个矩形有重合
//使用中心距离检测算法
int dis = abs(b.y-b.height/2-p.y+p.height/2);
int max = (p.height+b.height)/2;
if( dis <max
//(abs(b.x+b.width/2-p.x-p.width/2)>(p.width+b.width)/2)
//&&1 a
//(abs(b.y+b.height/2-p.y-p.height/2)<(p.height+b.height))
)
{return 1;}
return 0;
}
bool GameSystem::RectMeetDownRect(const GameObject& b,const GameObject& p){
//检测底边两端点是否碰撞////并且对图片和碰撞脚大小修正10px
if(
(b.y-2<p.ry)&&(b.y>p.ry)&&
(((b.x<p.x+10)&&(b.x+b.width>p.x+10))||((b.x<p.x+p.width-10)&&(b.x+b.width>p.x+p.width-10)))
){
return 1;
}
return 0;
}
void GameSystem::AutoUpdate(int d){
int deltaH=0;//间隔
double deltatime=0;
int futurex=0;
int a_flag=0;
wantedid = thisboardid;//保证每次都刷新预期x
for(int i=0;i<BoardNum;i++){//找到最高可达板子//好吧恰好300就懒得算了。是一个矩形加抛物线
deltaH = abs(boardlist[i].y-playerlist[0].ry);
if(deltaH>125&& d!=5){continue;}
if(deltaH>500&& d==5){continue;}
//deltatime = 1000-10*(50-sqrt(2500-20*(y1+40)));
if(d!=5){
deltatime = (5+sqrt((125-deltaH)/5.0)); //
}
else{
deltatime = (10+sqrt((500-deltaH)/5.0)); //
}
if(boardlist[i].Type==3){
futurex = (boardlist[i].rx+0.1*deltatime*100);
}
else{
futurex = boardlist[i].rx;
}
if(boardlist[wantedid].y<boardlist[i].y){
if(a_flag==1&&boardlist[i].Type!=5){
continue;
}
wantedid = i;
wantedx = futurex;
if(boardlist[i].Type==5){
if(d==5&& deltaH<=450){
continue;
}
a_flag=1;
}
}
}
wantedx%=width;
//1=右
if((wantedx-playerlist[0].rx>150)){
direction = 0;
}
else if(wantedx-playerlist[0].rx<-150){
direction=1;
}
else if(wantedx<playerlist[0].rx){
direction = 0;
}
else{
direction = 1;
}
}
void GameSystem::AutoMove(){
if(abs(wantedx-playerlist[0].rx)<1){
}
else{
switch(direction){
//case 0:break;
case 1:playerlist[0].AddXY(0.3,0);break;
case 0:playerlist[0].AddXY(-0.3,0);break;
}
}
if(shootable){
if(canhit()==1){
ShootBullet();
}
}
}
//以上by朱纯沣
//以下by胡太瑞
void GameSystem::findplatform(){
int x1,y1;
int deset=0;
int high=0;
int position;
int m;
int t1;
for(int i=0;i<BoardNum;i++){
m=boardlist[i].x;
y1=abs(boardlist[i].y-playerlist[0].y);
if(y1>80){
continue;
}
if(boardlist[i].Type==3){
t1=1000-10*(50-sqrt(2500-20*(y1+40)));
m=(m+0.1*t1);
x1=abs(m-playerlist[0].x);
}
else{
x1=abs(boardlist[i].x-playerlist[0].x);
}
m=m%300;
deset=0;
if(x1>=150){
//超过屏幕一半直接反向
x1=300-x1;
if(m>playerlist[0].x){
deset=-1;
}
else{
deset=1;
}
}
if(boardlist[i].y>high){
high=boardlist[i].y;
position=m;
set=deset;
ifd=i;
}
}
target_x=position;
}
void GameSystem::maketime(){
if(set==0){
if(target_x>playerlist[0].x){
direct=1;
}
if(target_x<playerlist[0].x){
direct=2;
}
}
if(set==1){
direct=1;
}
if(set==-1){
direct=2;
}
}
void GameSystem::compare_x(){
if(boardlist[ifd].x==playerlist[0].x){
direct=3;
if(boardlist[ifd].Type==3){
playerlist[0].AddXY(0.1,0);
}
}
else{
switch(direct){
//case 0:break;
case 1:playerlist[0].AddXY(0.3,0);break;
case 2:playerlist[0].AddXY(-0.3,0);break;
case 3:playerlist[0].AddXY(0.1,0);break;
}
}
}
void GameSystem::findplatform3(int d2){
for(int i=0;i<20;i++){
findit(i);
}
int target=0;
int high=boardlist[d2].ry;
target=getit(d2, high);
}
int GameSystem::getit(int d2,int &high){
int r1=-1;
int number=-1;
for(int i=0;i<20;i++){
if(findx[d2*20+i]==1){
number=getit(i,high);
if(number!=-1){
r1=number;
}
}
}
if(r1==-1){
if(boardlist[d2].ry>high){
high=boardlist[d2].ry;
return d2;
}
return -1;
}
return d2;
}
int GameSystem::findit(int x1){
int deltaH=0;//间隔
double deltatime=0;
int futurex=0;
wantedid = thisboardid;//保证每次都刷新预期x
for(int i=0;i<BoardNum;i++){
findx[x1*20+i]=0;
deltaH = abs(boardlist[i].y-playerlist[0].ry);
if(deltaH>125&& boardlist[x1].Type!=5){continue;}
if(deltaH>500&& boardlist[x1].Type==5){continue;}
//deltatime = 1000-10*(50-sqrt(2500-20*(y1+40)));
if(boardlist[x1].Type!=5){
deltatime = (5+sqrt((125-deltaH)/5.0)); //
}
else{
deltatime = (10+sqrt((500-deltaH)/5.0)); //
}
if(boardlist[i].Type==3){
futurex = (boardlist[i].rx+0.1*deltatime*100);
}
else{
futurex = boardlist[i].rx;
}
if(boardlist[wantedid].y<boardlist[i].y){
wantedid = i;
wantedx = futurex;
findx[x1*20+i]=1;
}
}
wantedx%=width;
return 1;
}
//
bool GameSystem::canhit(){
//胡太瑞 黄启旭 朱纯沣
int i=0;
for(;i<3;i++)if(monsterlist[i].ry<playerlist[0].ry+450)break;
if(i==3)return false;
//if((playerlist[0].ry+40)<monsterlist[i].ry+80&&(playerlist[0].ry+40)>monsterlist[i].ry)return 1;
//if((playerlist[0].rx)<monsterlist[i].rx+35&&(playerlist[0].rx)>monsterlist[i].rx-35)return 1;//垂直方向
if(abs(playerlist[0].rx-monsterlist[i].rx)<30)return 1;
if(abs( abs(playerlist[0].rx-monsterlist[i].rx)-abs(playerlist[0].y-monsterlist[i].ry)
)<10)return 1;
//if((playerlist[0].y+playerlist[0].rx)<monsterlist[i].ry+monsterlist[i].rx+115&&(playerlist[0].ry+40+playerlist[0].rx)>monsterlist[i].ry+monsterlist[i].rx-35)return 1;
//if((playerlist[0].ry+40-playerlist[0].rx)<monsterlist[i].ry-monsterlist[i].rx+115&&(playerlist[0].ry+40-playerlist[0].rx)>monsterlist[i].ry-monsterlist[i].rx-35)return 1;
return 0;
}
C++
1
https://gitee.com/duskmist/mfc_school_-doodle-jump.git
git@gitee.com:duskmist/mfc_school_-doodle-jump.git
duskmist
mfc_school_-doodle-jump
MFC_school_DoodleJump
master

搜索帮助