📄 catch.cpp
字号:
#include "stdafx.h"
#include "catch.h"
#include "stdlib.h"
#include "math.h"
#include "filereport.h"
#define SPEED_MEPTY 8
//FILEREPORT fcatch("catch.txt");
void OffSetIntArray(int *p,int a,int b,int num)
{
int i;
for(i=0;i<num;i+=2)
{
p[i]+=a;
p[i+1]+=b;
}
}
void GAMECATCH::Draw(HDC hdc,int *p)
{
MoveToEx(hdc,p[0],p[1],NULL);
LineTo(hdc,p[2],p[3]);
LineTo(hdc,p[4],p[5]);
LineTo(hdc,p[6],p[7]);
MoveToEx(hdc,p[8],p[9],NULL);
LineTo(hdc,p[10],p[11]);
LineTo(hdc,p[2],p[3]);
}
GAMECATCH::GAMECATCH()
{
//设置爪子各顶点坐标
int temp[12]={
0,32,20,32,
40,0,64,0,
64,64,40,64
};
memcpy(pCatch,temp,sizeof(temp));
OffSetIntArray(pCatch,0,-32,12);
Init();
}
void GAMECATCH::Init()
{
iAngle=9;
iToLeft=1;
iState=0;
xpos=320;
ypos=58;
iLength=0;
xoff=0;
yoff=0;
iSpeedBack=SPEED_MEPTY;
iSpeedMore=0;
}
GAMECATCH::~GAMECATCH()
{
}
void GAMECATCH::TcDrawAngleOff(HDC hdc,int *pv,float a,int num,int x0,int y0)
{
int pvdest[20]={0};
// int x0,y0;
int i;
int tempx,tempy;
memcpy(pvdest,pv,sizeof(int)*num);
/*
x0=pv[0];
y0=pv[1];
//move
for(i=0;i<num;i+=2)
{
pvdest[i]-=x0;
pvdest[i+1]-=y0;
}
*/
//rotate
for(i=0;i<num;i+=2)
{
tempx=pvdest[i];
tempy=pvdest[i+1];
pvdest[i]=tempx*cos(a)-tempy*sin(a);
pvdest[i+1]=tempx*sin(a)+tempy*cos(a);
}
//move,中心点坐标是320 58
for(i=0;i<num;i+=2)
{
pvdest[i]+=x0;
pvdest[i+1]+=y0;
}
//绘制图形
Draw(hdc,pvdest);
}
void GAMECATCH::DrawAngle(HDC hdc)
{
HPEN hpen;
hpen=(HPEN)GetStockObject(BLACK_PEN);
SelectObject(hdc,hpen);
TcDrawAngleOff(hdc,pCatch,iAngle*10*1.57/90,12,xpos,ypos);
//画出直线
if(0!=iState)
{
//如果不是摆动状态
MoveToEx(hdc,xpos,ypos,NULL);
LineTo(hdc,320,58);
}
}
void GAMECATCH::TurnAngle()
{
switch(iState)
{
case 0:
//摆动状态
if(iToLeft)
{
iAngle++;
if(iAngle>18)
{
iToLeft=0;
iAngle=18;
}
}
else
{
iAngle--;
if(iAngle<0)
{
iToLeft=1;
iAngle=0;
}
}
break;
case 1:
//伸缩状态,根据角度计算出新的坐标
xpos+=xoff;
ypos+=yoff;
iLength+=10;
if(iLength>500)
{
iState=2;//收回状态
}
break;
case 2:
xpos-=xoff*(iSpeedBack+iSpeedMore);
ypos-=yoff*(iSpeedBack+iSpeedMore);
iLength-=10*(iSpeedBack+iSpeedMore);
if(iLength<=0)
{
iState=0;//摆动状态
xpos=320;
ypos=58;
xoff=0;
yoff=0;
iSpeedBack=SPEED_MEPTY;
}
break;
}
}
void GAMECATCH::SetState(int i)
{
iState=i;
}
void GAMECATCH::KeyProc(int iKey)
{
switch(iKey)
{
case VK_DOWN:
if(0==iState)
{
//摆动状态下才能变成伸出状态
iState=1;
xoff=10*cos(iAngle*10*1.57/90);
yoff=10*sin(iAngle*10*1.57/90);
}
break;
case VK_UP:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -