⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 catch.cpp

📁 一个用vc做的挖金子的游戏
💻 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 + -