class CCcsDlg : public CDialog
{
// Construction
public:
int m_iGameOver; //游戏结束标志
int m_iTimes; //设置时钟速度(游戏难度)
int m_iDirection; //蛇游动方向
int m_iLife; //生命点数
int m_iLen; //蛇长
int m_iColNum; //彩点个数(1~3个)
int m_iScore; //游戏得分
int Over();
void fei();
struct SColPoint m_arrColPoi[3]; //彩点
POINT m_arrSnake[600];
.............
void CCcsDlg::fei() //随机分配彩点
{
int key;
do
{
key = 0;
int x = rand()/(int)(RAND_MAX/25);
int y = (int)rand()%23;
m_arrColPoi[m_iColNum].x = 20*x;
m_arrColPoi[m_iColNum].y = 20*y;
for (int i = 0; i < m_iLen; i++)
{
if (m_arrSnake[i].x == m_arrColPoi[m_iColNum].x &&
m_arrSnake[i].y == m_arrColPoi[m_iColNum].y)
{
key = 1;
}
}
for (i = 0; i < m_iColNum; i++)
{
if (m_arrColPoi[i].x == m_arrColPoi[m_iColNum].x &&
m_arrColPoi[i].y == m_arrColPoi[m_iColNum].y)
{
key = 1;
}
}
}while (key);
int k = rand()/(int)(RAND_MAX/10);
if (k < 5)
{
m_arrColPoi[m_iColNum].col = RGB(0, 255, 0);
}
else if(k < 8)
{
m_arrColPoi[m_iColNum].col = RGB(255, 0, 0);
}
else
{
m_arrColPoi[m_iColNum].col = RGB(0, 0, 255);
}
m_iColNum++;
}
oid CCcsDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if (nIDEvent == 1)
{
//开始时钟1的计算↓
if (m_iColNum<3)
{
fei();
}
CBitmap Bitmap; /*加载背景图*/
Bitmap.LoadBitmap(IDB_BITMAP2);
CClientDC myDC(this);
CDC MemDC;
MemDC.CreateCompatibleDC(&myDC);
CBitmap *OldBitmap = MemDC.SelectObject(&Bitmap);
BITMAP bm;
Bitmap.GetBitmap(&bm);
myDC.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &MemDC, 0, 0, SRCCOPY);
Bitmap.DeleteObject();
myDC.SelectObject(OldBitmap);
//设置画笔、字体等,用于输出生命,得分.
CFont *OldFont;
CFont NewFont;
COLORREF OldPenCol;
COLORREF OldBrushCol;
LOGFONT MyFont = {40, 15, 0, 0, 30, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE,
"黑体"};
NewFont.CreateFontIndirect(&MyFont);
OldBrushCol = myDC.SetBkColor( RGB(0,0,0) );
OldPenCol = myDC.SetTextColor( RGB(255,255,255) );
OldFont = myDC.SelectObject(&NewFont);
char str1[5];
sprintf(str1, "%d", m_iScore);
myDC.TextOut(620, 25, str1);
sprintf(str1, "%d", m_iLife);
myDC.TextOut(625, 255, str1);
myDC.SetBkColor(OldBrushCol); //恢复设备环境
myDC.SetTextColor(OldPenCol);
myDC.SelectObject(OldFont);
int i;
switch (m_iDirection) //判断方向,然后移动
{
case 1:
for (i = m_iLen-1; i >= 0; i--)
{
m_arrSnake[i+1] = m_arrSnake[i];
}
m_arrSnake[0].y -= 20;
break;
case 2:
for (i = m_iLen-1; i >= 0; i--)
{
m_arrSnake[i+1] = m_arrSnake[i];
}
m_arrSnake[0].x += 20;
break;
case 3:
for (i = m_iLen-1; i >= 0; i--)
{
m_arrSnake[i+1] = m_arrSnake[i];
}
m_arrSnake[0].y += 20;
break;
case 4:
for (i = m_iLen-1; i >= 0; i--)
{
m_arrSnake[i+1] = m_arrSnake[i];
}
m_arrSnake[0].x -= 20;
break;
}
if ( m_arrSnake[0].x < 0 || m_arrSnake[0].x > 24*20 ||
m_arrSnake[0].y < 0 || m_arrSnake[0].y > 22*20 ) //碰到边GameOver
{
Over();return;
}
for (i = 3; i < m_iLen; i++) //碰到自身GameOver
{
if ( m_arrSnake[0].x == m_arrSnake[i].x && m_arrSnake[0].y == m_arrSnake[i].y )
{
Over();return;
}
}
for (i = 0; i < m_iColNum; i++)
{
if (m_arrSnake[0].x == m_arrColPoi[i].x &&
m_arrSnake[0].y == m_arrColPoi[i].y) //判断是否吃到东西
{
m_iLen++;
switch (m_arrColPoi[i].col)
{
case RGB(0, 255, 0):
{
m_iScore += 3;
break;
}
case RGB(255, 0, 0):
{
m_iScore+=6;
break;
}
case RGB(0, 0, 255):
{
m_iScore+=3;
break;
}
}
if (m_iLife < 30)
{
m_iLife += 2;
}
if (m_iTimes != 100 && m_iScore > 500 ) //据score从设时钟间隔
{
m_iTimes = 100;
OnInitDialog();
}
else if(m_iScore > 300)
{
m_iTimes = 120;
OnInitDialog();
}
else if (m_iScore > 150)
{
m_iTimes = 150;
OnInitDialog();
}
else if(m_iScore > 50)
{
m_iTimes = 180;
OnInitDialog();
}
for (int j = i; j < m_iColNum-1; j++)
{
m_arrColPoi[j] = m_arrColPoi[j+1];
}
m_iColNum--;
break;
}
}
for (i = 0; i < m_iLen; i++) // 画蛇
{
myDC.Ellipse(m_arrSnake[i].x, m_arrSnake[i].y, m_arrSnake[i].x+20, m_arrSnake[i].y+20);
}
CBrush *BrushOld; //画彩点
CBrush BrushNew;
for (i = 0; i < m_iColNum; i++)
{
BrushNew.CreateSolidBrush(m_arrColPoi[i].col);
BrushOld = myDC.SelectObject(&BrushNew);
myDC.Ellipse(m_arrColPoi[i].x, m_arrColPoi[i].y,
m_arrColPoi[i].x+20, m_arrColPoi[i].y+20);
myDC.SelectObject(BrushOld);
BrushNew.DeleteObject();
}
} //结束时钟1
贪吃蛇游戏——主要代码
最新推荐文章于 2017-03-22 13:03:14 发布
3381

被折叠的 条评论
为什么被折叠?



