// DrawDialog.cpp : implementation file
//
#include "stdafx.h"
#include "TCS.h"
#include "DrawDialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDrawDialog dialog
CDrawDialog::CDrawDialog(CWnd* pParent /*=NULL*/)
: CDialog(CDrawDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CDrawDialog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CDrawDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDrawDialog)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDrawDialog, CDialog)
//{{AFX_MSG_MAP(CDrawDialog)
ON_WM_PAINT()
ON_WM_SIZE()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDrawDialog message handlers
bool isheadopen = false;
void CDrawDialog::OnPaint()
{
CPaintDC sdc(this); // device context for painting
CRect rect;
this->GetClientRect(&rect);
CDC dc;
dc.CreateCompatibleDC(NULL);
CBitmap bmp_bk;
bmp_bk.CreateCompatibleBitmap(&sdc,rect.Width(),rect.Height());
dc.SelectObject(&bmp_bk);
//绘制墙
CBitmap bmp_wall;
bmp_wall.LoadBitmap(IDB_BMPWALL);
CBrush brush;
brush.CreatePatternBrush(&bmp_wall);
dc.FillRect(&rect,&brush);
//绘制记分板
CBitmap bmp_scoreboard,bmp_mask;
bmp_scoreboard.LoadBitmap(IDB_BMPSCOREBOARD);
CDC tmdc,dcmask;
tmdc.CreateCompatibleDC(NULL);
tmdc.SelectObject(&bmp_scoreboard);
dcmask.CreateCompatibleDC(&tmdc);
bmp_mask.CreateBitmap(292,62,0,0,NULL);
dcmask.SelectObject(&bmp_mask);
tmdc.SetBkColor(RGB(255,255,255));
dcmask.BitBlt(0,0,292,62,&tmdc,0,0,SRCCOPY);
dc.BitBlt(m_scoreboardrect.left,m_scoreboardrect.top,m_scoreboardrect.right,
m_scoreboardrect.bottom,&tmdc,0,0,SRCINVERT);
dc.BitBlt(m_scoreboardrect.left,m_scoreboardrect.top,m_scoreboardrect.right,
m_scoreboardrect.bottom,&dcmask,0,0,SRCAND);
dc.BitBlt(m_scoreboardrect.left,m_scoreboardrect.top,m_scoreboardrect.right,
m_scoreboardrect.bottom,&tmdc,0,0,SRCINVERT);
//绘制活动区
CBitmap bmp_cell;
bmp_cell.LoadBitmap(IDB_BMPCELL);
CBrush brush1;
brush1.CreatePatternBrush(&bmp_cell);
dc.FillRect(&m_actionrect,&brush1);
//绘制阻挡墙
dc.FillRect(&m_barwall1,&brush);
dc.FillRect(&m_barwall2,&brush);
//绘制小球
if (m_state == STATE_START || m_state == STATE_COUNTINUE
|| m_state == STATE_PAUSE)
{
CBitmap bmp_ball;
bmp_ball.LoadBitmap(IDB_BMPBALL);
CBrush brush2;
brush2.CreatePatternBrush(&bmp_ball);
CRect ballrect;
ballrect.left = m_actionrect.left + m_ballpos.x * 32 + 2;
ballrect.top = m_actionrect.top + m_ballpos.y * 32;
ballrect.right = ballrect.left + 32;
ballrect.bottom = ballrect.top + 32;
dc.FillRect(&ballrect,&brush2);
//绘制小蛇(头)
CBitmap bmp_head;
switch (m_actionorient)
{
case ORIENT_TOP:
if (isheadopen)
bmp_head.LoadBitmap(IDB_BMPHEADTOPCLOSE);
else
bmp_head.LoadBitmap(IDB_BMPHEADTOPOPEN);
break;
case ORIENT_BOTTOM:
if (isheadopen)
bmp_head.LoadBitmap(IDB_BMPHEADDOWNCLOSE);
else
bmp_head.LoadBitmap(IDB_BMPHEADDOWNOPEN);
break;
case ORIENT_LEFT:
if (isheadopen)
bmp_head.LoadBitmap(IDB_BMPHEADLEFTCLOSE);
else
bmp_head.LoadBitmap(IDB_BMPHEADLEFTOPEN);
break;
case ORIENT_RIGHT:
if (isheadopen)
bmp_head.LoadBitmap(IDB_BMPHEADRIGHTCLOSE);
else
bmp_head.LoadBitmap(IDB_BMPHEADRIGHTOPEN);
break;
}
isheadopen = !isheadopen;
CBrush brush3;
brush3.CreatePatternBrush(&bmp_head);
CRect headrect;
this->GetCellRect(m_path[0],&headrect);
dc.FillRect(&headrect,&brush3);
//绘制小蛇(身体)
CBitmap bmp_body;
bmp_body.LoadBitmap(IDB_BMPBODY);
CBrush brush4;
brush4.CreatePatternBrush(&bmp_body);
CRect bodyrect;
for (int i = 1 ; i < m_pathlen ; i++)
{
this->GetCellRect(m_path[i],&bodyrect);
dc.FillRect(&bodyrect,&brush4);
}
}
//绘制分数
// 新建字体
LOGFONT logFont;
ZeroMemory(&logFont,sizeof(logFont));
logFont.lfWidth = 6;
logFont.lfHeight = 12;
logFont.lfCharSet = GB2312_CHARSET;
strcpy(logFont.lfFaceName, "宋体" );
CFont fntNew;
fntNew.CreateFontIndirect(&logFont);
dc.SelectObject(&fntNew);
CString str;
str.Format("目前总积分:%d分",m_mark);
CSize fntsize = dc.GetTextExtent(str);
dc.SetTextColor(RGB(255,255,255));
dc.SetBkMode(TRANSPARENT);
dc.TextOut(m_scoreboardrect.left + (m_scoreboardrect.Width() - fntsize.cx) / 2,
m_scoreboardrect.top + (m_scoreboardrect.Height() - fntsize.cy) / 2 - 3,
str);
sdc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);
}
int n = 1;
BOOL CDrawDialog::OnInitDialog()
{
CDialog::OnInitDialog();
time_t t;
n = time(&t);
CalcRect();
m_state = STATE_STOP;
m_level = 500;
m_mark = 0;
return TRUE;
}
void CDrawDialog::CalcBallPos()
{
CPoint pos,temp;
n++;
srand(n);
pos.x = rand() % 15;
pos.y = rand() % 15;
temp.x = m_actionrect.left + pos.x * 32 + 5;
temp.y = m_actionrect.top + pos.y * 32 +5;
if (pos.x ==0 || pos.y == 0)
{
CalcBallPos();
return;
}
if (pos == m_ballpos)
{
CalcBallPos();
return;
}
if (PtInRect(&m_barwall1,temp))
{
CalcBallPos();
return;
}
if (PtInRect(&m_barwall2,temp))
{
CalcBallPos();
return;
}
for (int i = 0 ; i < m_pathlen ; i++)
if (pos == m_path[i])
{
CalcBallPos();
return;
}
m_ballpos = pos;
}
void CDrawDialog::Start()
{
CalcBallPos();//计算小球位置
//蛇头起始位置
memset(&m_path[0],-100,sizeof(CPoint) * 50);
m_pathlen = 7;
m_path[0].x = 1;
m_path[0].y = 0;
//游戏开始标记
m_state = STATE_START;
m_actionorient = ORIENT_BOTTOM;
this->SetTimer(1,m_level,NULL);
this->SetTimer(2,100,NULL);
this->Invalidate(false);//重画
}
void CDrawDialog::CalcRect()
{
this->GetClientRect(&m_actionrect);
m_scoreboardrect.left = m_actionrect.left + (m_actionrect.Width() - 292) / 2;
m_scoreboardrect.top = m_actionrect.top;
m_scoreboardrect.right = m_scoreboardrect.left + 292;
m_scoreboardrect.bottom = m_actionrect.top + 62;
m_actionrect.OffsetRect(30,62);
m_actionrect.right = m_actionrect.left + 480 + 3;
m_actionrect.bottom = m_actionrect.top + 480 + 3;
m_barwall1.left = m_actionrect.left + 8 * 32 + 2;
m_barwall1.top = m_actionrect.top + 9 * 32;
m_barwall1.right = m_barwall1.left + 32;
m_barwall1.bottom = m_actionrect.bottom;
m_barwall2.left = m_actionrect.left + 3 * 32 + 2;
m_barwall2.top = m_actionrect.top + 12 * 32 + 2;
m_barwall2.right = m_barwall2.left + 3 * 32;
m_barwall2.bottom = m_barwall2.top + 32;
}
void CDrawDialog::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CalcRect();
}
void CDrawDialog::OnTimer(UINT nIDEvent)
{
if (nIDEvent == 1)
{
if (m_state == STATE_START || m_state == STATE_COUNTINUE)
{
CPoint p;
if (GetActionPos(&p))
{
if (p == m_ballpos)
{
CalcBallPos();
m_pathlen++;
//加分
if (m_level == 500)
m_mark += 100;
else if (m_level == 300)
m_mark += 300;
else if (m_level == 100)
m_mark += 500;
}
MovePos();
m_path[0] = p;
if (m_pathlen == 50)
{
if (m_level == 500)
{
m_level = 300;
}else if (m_level == 300)
{
m_level = 100;
}
Start();
}
}
else
{
m_mark -= 500;//失败减分
Stop();
MessageBox("GAME OVER!","提示!");
}
}
}
else
this->Invalidate(false);
CDialog::OnTimer(nIDEvent);
}
BOOL CDrawDialog::GetActionPos(CPoint *pos)
{
//计算小蛇活动的下一个点
CPoint tmppos;
tmppos = m_path[0];
switch (m_actionorient)
{
case ORIENT_LEFT:
tmppos
没有合适的资源?快使用搜索试试~ 我知道了~
贪吃蛇游戏mfc源码展示
共77个文件
tlog:17个
bmp:13个
h:5个
需积分: 5 0 下载量 162 浏览量
2024-03-05
10:49:20
上传
评论
收藏 41.93MB RAR 举报
温馨提示
贪吃蛇游戏源码展示。mfc框架窗口编写。
资源推荐
资源详情
资源评论
收起资源包目录
TCS.rar (77个子文件)
TCS
DrawDialog.h 2KB
DrawDialog.cpp 10KB
TCSDlg.h 2KB
TCS.sln 872B
TCS.vcxproj.user 143B
TCS.cpp 2KB
TCS.suo 14KB
TCS.rc 7KB
res
head_down_open.bmp 3KB
head_right_open.bmp 3KB
head_up_close.bmp 3KB
body.bmp 3KB
Thumbs.db 32KB
head_left_open.bmp 3KB
蛇.JPG 409KB
head_up_open.bmp 3KB
head_down_close.bmp 3KB
TCS.rc2 395B
scoreboard.BMP 71KB
TCS1.ico 1KB
head_left_close.bmp 3KB
head_right_close.bmp 3KB
brick.bmp 824B
flower.bmp 3KB
TCS.ico 7KB
cell.bmp 3KB
TCS.dsw 531B
Resource.h 2KB
TCS.clw 1KB
TCS.vcxproj.filters 3KB
StdAfx.cpp 205B
ipch
tcs-6259c5e9
tcs-6fa80e20.ipch 71.31MB
TCS.vcxproj 8KB
TCS.dsp 5KB
TCSDlg.cpp 6KB
TCS.h 1KB
TCS.sdf 52.58MB
Debug
TCS_manifest.rc 202B
CL.write.1.tlog 7KB
TCS.exe.intermediate.manifest 381B
rc.command.1.tlog 4KB
DrawDialog.sbr 0B
rc.write.1.tlog 2KB
BscMake.command.1.tlog 3KB
TCS.log 4KB
TCS.lastbuildstate 65B
mt.command.1.tlog 3KB
TCS.exe.embed.manifest 667B
mt.read.1.tlog 3KB
TCS.obj 26KB
rc.read.1.tlog 34KB
TCS.ilk 14.14MB
TCSDlg.sbr 0B
StdAfx.obj 541KB
vc100.idb 1.21MB
TCS.sbr 0B
TCS.res 124KB
TCS.exe 6.07MB
vc100.pdb 2.57MB
bscmake.write.1.tlog 2KB
StdAfx.sbr 3.9MB
bscmake.read.1.tlog 4KB
link.command.1.tlog 7KB
TCS.pdb 25.62MB
link-cvtres.read.1.tlog 2B
DrawDialog.obj 75KB
link.read.1.tlog 26KB
cl.command.1.tlog 14KB
link.write.1.tlog 4KB
TCS.exe.embed.manifest.res 732B
TCS.pch 23.13MB
TCSDlg.obj 72KB
link-cvtres.write.1.tlog 2B
mt.write.1.tlog 798B
TCS.bsc 8.1MB
CL.read.1.tlog 166KB
StdAfx.h 1KB
共 77 条
- 1
资源评论
观天小蚁
- 粉丝: 279
- 资源: 239
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功