📄 game.cpp
字号:
// Game.cpp: implementation of the CGame class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "5_1.h"
#include "Game.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGame::CGame()
{
int i,j;
heart.LoadBitmap(IDB_BITMAP11);
m1.bitmapb.LoadBitmap(IDB_BITMAP2);
m2.bitmapb.LoadBitmap(IDB_BITMAP3);
m1.bitmapa.LoadBitmap(IDB_BITMAP7);
m2.bitmapa.LoadBitmap(IDB_BITMAP8);
m1.shotb.LoadBitmap(IDB_BITMAP5);
m2.shotb.LoadBitmap(IDB_BITMAP9);
m1.shota.LoadBitmap(IDB_BITMAP6);
m2.shota.LoadBitmap(IDB_BITMAP10);
//生命数量为3
m1.lifes=3;
m2.lifes=3;
//红心显示
heart1=true;
heart2=true;
//滚球数量50
ballnum=50;
for(i=0;i<6;i++)
ball[i].bitmap.LoadBitmap(IDB_BITMAP4);
//滚球开始出现的位置
for(i=0;i<3;i++)
{
ball[i].point.x=4+i;
ball[i].point.y=0;
ball[i+3].point.x=9+i;
ball[i+3].point.y=0;
}
//老鼠开始出现的位置
m1.point.x=0;
m1.point.y=10;
m2.point.x=15;
m2.point.y=10;
//老鼠开始的方向
m1.direction=1;
m2.direction=-1;
//清理背景数组,或1或0
for(i=0;i<16;i++)
for(j=0;j<11;j++)
yy[i][j]=0;
yy[4][1]=1;
yy[5][1]=1;
yy[6][1]=1;
yy[9][1]=1;
yy[10][1]=1;
yy[11][1]=1;
for(i=0;i<16;i++)
yy[i][3]=1;
yy[5][3]=0;
yy[10][3]=0;
for(i=5;i<11;i++)
yy[i][5]=1;
for(i=4;i<12;i++)
yy[i][7]=1;
for(i=0;i<5;i++)
yy[i][9]=1;
for(i=11;i<16;i++)
yy[i][9]=1;
for(i=0;i<16;i++)
yy[i][11]=1;
}
CGame::~CGame()
{
}
void CGame::DrawScore(CDC *pDC)
{
int nOldDC=pDC->SaveDC();
//设置字体
CFont font;
if(0==font.CreatePointFont(250,"Comic Sans MS"))
{
AfxMessageBox("Can't Create Font");
}
pDC->SelectObject(&font);
//设置字体颜色及其背景颜色
CString str;
pDC->SetTextColor(RGB(0,10,244));
pDC->SetBkColor(RGB(0,255,0));
//输出数字
str.Format("%d",m1.score);
if(m2.score>=0)
pDC->TextOut(40,28,str);
str.Format("%d",m2.score);
if(m2.score>=0)
pDC->TextOut(740,28,str);
pDC->RestoreDC(nOldDC);
}
void CGame::Draw(CDC *pDC)
{
int i,j;
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
//在不同位置显示位图
//显示老鼠位图
if(m2.lifes>0)
{
Dc.SelectObject(m2.direction==1?m2.bitmapb:m2.bitmapa);
pDC->BitBlt(m2.point.x*50,m2.point.y*50,50,50,&Dc,0,0,SRCCOPY);
}
if(m1.lifes>0)
{
Dc.SelectObject(m1.direction==1?m1.bitmapb:m1.bitmapa);
pDC->BitBlt(m1.point.x*50,m1.point.y*50,50,50,&Dc,0,0,SRCCOPY);
}
//画滚球
//大于六个的画六个
j=ballnum-m1.score;
j=j-m2.score;
if(j>6)
j=6;
for(i=0;i<j;i++)
{
Dc.SelectObject(ball[i].bitmap);
pDC->BitBlt(ball[i].point.x*50,ball[i].point.y*50,50,50,&Dc,0,0,SRCCOPY);
}
//检查界面数组
//2表示m2的子弹,3表示m1的子弹
for(i=0;i<16;i++)
for(j=0;j<12;j++)
{
if(yy[i][j]==2)
{
Dc.SelectObject(m2.direction==1?m2.shotb:m2.shota);
pDC->BitBlt(i*50,j*50,50,50,&Dc,0,0,SRCCOPY);
}
if(yy[i][j]==3)
{
Dc.SelectObject(m1.direction==1?m1.shotb:m1.shota);
pDC->BitBlt(i*50,j*50,50,50,&Dc,0,0,SRCCOPY);
}
}
//画老鼠的生命数量
for(i=0;i<m1.lifes;i++)
{
Dc.SelectObject(m1.bitmapb);
pDC->StretchBlt(i*40+10,0,30,30,&Dc,0,0,50,50,SRCCOPY);
}
for(i=0;i<m2.lifes;i++)
{
Dc.SelectObject(m2.bitmapa);
pDC->StretchBlt(760-i*40,0,30,30,&Dc,0,0,50,50,SRCCOPY);
}
//显示分数
DrawScore(pDC);
//显示红心
Dc.SelectObject(heart);
if(heart1)
pDC->BitBlt(250,0,50,50,&Dc,0,0,SRCCOPY);
if(heart2)
pDC->BitBlt(500,0,50,50,&Dc,0,0,SRCCOPY);
}
void CGame::BallMove()
{ int i,j,k;
j=ballnum-m1.score;
j=j-m2.score;
if(j>6)
j=6;
for( i=0;i<j;i++)
{
//其中三个
if((i==1)||(i==3)||(i==5))
{
//向右移动
ball[i].point.x++;
//到了边界,在左边出现
if(ball[i].point.x>15)
ball[i].point.x=0;
//下面空,下掉
if(yy[ball[i].point.x][ball[i].point.y+1]!=1)
for(k=ball[i].point.y;k<12;k++)
if(yy[ball[i].point.x][k]==1)
{
ball[i].point.y=k-1;
break;
}
//到了最底面
if((ball[i].point.x==15)&&(ball[i].point.y==10))
{
//在上面出现
if(i==1)
{
ball[i].point.x=10;
ball[i].point.y=-1;
}
else
{
ball[i].point.x=5;
ball[i].point.y=-1;
}
}
}
//同上
else if((i==2)||(i==4)||(i==0))
{
ball[i].point.x--;
if(ball[i].point.x<0)
ball[i].point.x=15;
if(yy[ball[i].point.x][ball[i].point.y+1]!=1)
for(k=ball[i].point.y;k<12;k++)
if(yy[ball[i].point.x][k]==1)
{
ball[i].point.y=k-1;
break;
}
if((ball[i].point.x==0)&&(ball[i].point.y==10))
{
if(i==2)
{
ball[i].point.x=5;
ball[i].point.y=0;
}
else
{
ball[i].point.x=10;
ball[i].point.y=0;
}
}
}
}
}
void CGame::KillMouse()
{
int i;
for(i=0;i<6;i++)
{
//老鼠的位置和滚球的位置
if(m1.point==ball[i].point)
{
//生命减少
m1.lifes--;
//老鼠重新出现
m1.point.x=7;
m1.point.y=6;
}
//同上
if(m2.point==ball[i].point)
{
m2.lifes--;
m2.point.x=8;
m2.point.y=6;
}
}
}
void CGame::KillBall()
{
for(int i=0;i<6;i++)
//m2的子弹
if(yy[ball[i].point.x][ball[i].point.y]==2)
{
//m2的分数添加
m2.score++;
//滚球消失
ball[i].point.x=5;
ball[i].point.y=-1;
}
//同上
else if(yy[ball[i].point.x][ball[i].point.y]==3)
{
m1.score++;
ball[i].point.x=10;
ball[i].point.y=-1;
}
}
void CGame::GetHeart()
{
//是哪个老鼠是得到了哪个红心
//第一只老鼠
if((m1.point.x==5)&&(m1.point.y==0))
//第一只红心
if(heart1)
{
m1.lifes++;
heart1=false;
}
if((m2.point.x==5)&&(m2.point.y==0))
if(heart1)
{
m2.lifes++;
heart1=false;
}
if((m1.point.x==10)&&(m1.point.y==0))
if(heart2)
{
m1.lifes++;
heart2=false;
}
if((m2.point.x==10)&&(m2.point.y==0))
if(heart2)
{
m2.lifes++;
heart2=false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -