一个基础的问题,请高手近来赐教,低手近来学习。谢谢!!

Easych Easych 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在下面的程序中想删除pcard居然删除不了,按道理讲鼠标单击之后,pcard就被删除了,可是它还在,仍响应下一次操作。其中的Card是我定义的一个类,具体的实现可看后面。

程序如下:
#include <bitmap>
#include<iostream>
#include"Card.h"
using namespace std;

SimpleWindow *myWindow=new SimpleWindow("myWindow",15.,9.,Position(1.,1.));
Card *pcard;
int MouseEvent(const Position &p)
{
if(pcard->IsHited(p))
{
delete pcard; //就是这里,单击之后,它没被删除,下次还响应
//什么原因????
cout<<"has delete"<<endl;//这个信息每次都输出

}
return 1;

}


int ApiMain()
{
myWindow->Open();
pcard=new Card("c1.bmp",1,Club,*myWindow);
pcard->Draw();
myWindow->SetMouseClickCallback(MouseEvent);
return 0;
}

下面是Card类的实现 Card.cpp

#include <cassert>
#include <bitmap>
#include <randint>
#include"Card.h"

//此处为构造函数
Card::Card(string BmpFile,int Value, DesignAndColor CardDesign,
SimpleWindow &W):CardValue(Value),Window(W),
CardDesignAndColor(CardDesign),IsFaceSide(0),HasTaken(0)
{
FaceBmp.SetWindow(Window);
FaceBmp.Load(BmpFile);
assert(FaceBmp.GetStatus() == BitMapOkay);
BackBmp.SetWindow(Window);
BackBmp.Load("s0.bmp");


}
int Card::GetCardValue()
{
return CardValue;
}
DesignAndColor Card::GetCardDesignAndColor()
{
return CardDesignAndColor;
}
void Card::Draw()
{
if(IsFaceSide)
FaceBmp.Draw();
else
BackBmp.Draw();
return;
}
void Card::SetPosition(const Position&p)
{
FaceBmp.SetPosition(p);
BackBmp.SetPosition(p);
return;
}
void Card::EraseCard()
{
FaceBmp.Erase();
return;
}
void Card::TurnCard()
{
if(IsFaceSide)
{
BackBmp.Draw();
IsFaceSide=0;
}
else
{
FaceBmp.Draw();
IsFaceSide=1;
}

return;
}
bool Card::IsHited(const Position &p)
{
if(FaceBmp.IsInside(p)&&BackBmp.IsInside(p))
{
return 1;
}
else
return 0;

}
SimpleWindow Card::GetWindow()
{
return Window;
}

下面是Card.h
#ifndef CARD_H
#define CARD_H

#include <cassert>
#include <bitmap>

enum DesignAndColor {Hearts,Spade,Club,Piece};
class Card
{
public:
Card(string BmpFile,int Value, DesignAndColor CardDesign,SimpleWindow &W);
int GetCardValue();
DesignAndColor GetCardDesignAndColor();
void Draw();
void SetPosition(const Position &p);
void TurnCard();
void EraseCard();
bool IsHited(const Position &p);
SimpleWindow GetWindow();
private:
int CardValue;
DesignAndColor CardDesignAndColor;
Position CardPositon;
BitMap FaceBmp;
BitMap BackBmp;
SimpleWindow &Window;
bool IsFaceSide;
bool HasTaken;
};

#endif
...全文
评论 6
收藏 已收藏
分享
返回顶部
Easych
C++ 语言 65,214 成员 250,514 内容