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

📄 demo.cpp

📁 小游戏 不过不怎么好玩
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//******************************************************
//HugeSoft WorkHome
//******************************************************
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <win32bk.h>
#include <vfw.h>
#include <winuser.h>
#include <winuser.h>
#include <string.h>
#include <ddraw.h>
#include <winbase.h>

#include "C:\My Documents\Stay\sdk\samples\misc\ddutil.h"
#include "midi.h"

#define		MIDI		"012.mid"

#define		STEP		5
#define		TIMER		100
#define		WIDTH		640
#define		HEIGHT		480
#define		TITLE		"HugeSoft工作室"	//窗口标题
#define		CLASSNAME	"RPG"	//窗口类名

HINSTANCE	hInst;		//应用程序实例句柄
HWND		hWndMain;	//主窗口句柄

LPDIRECTDRAW            lpDD;           // DirectDraw对象
LPDIRECTDRAWSURFACE     lpDDSPrimary;   // 主页面
LPDIRECTDRAWSURFACE     lpDDSBack;      // 后台缓冲区
LPDIRECTDRAWSURFACE     lpDDSPic1;      // 离屏页面1
LPDIRECTDRAWSURFACE     lpDDSPic2;      // 离屏页面2
LPDIRECTDRAWPALETTE     lpDDPal;        // 调色板
BOOL                    bActive;        // 应用程序是否活跃?

static int SpriteCountX=0;
static int SpriteCountY=0;
static int X=0,Y=0;
static int StepX=0,StepY=0;
int StaticX=300,StaticY=200;
static int SpriteX[]={129,178,227,276,325,374,423,472};
static int SpriteY[]={1,50,99,148,197};

//函数声明
BOOL InitSurfaces( void );
void UpdateFrame( void );
void MakeRect(RECT *rect, long left, long top, long right, long bottom);
//*******************************************************************
//函数:FreeObject
//功能:释放我们用过的所有DirectDraw对象
//*******************************************************************
void FreeObjects( void )
{
    if( lpDD != NULL )//释放DirectDraw对象
    {
        if( lpDDSPrimary != NULL )//释放主页面
        {
            lpDDSPrimary->Release();
            lpDDSPrimary = NULL;
        }
        if( lpDDSPic1 != NULL )//释放离屏页面1
        {
            lpDDSPic1->Release();
            lpDDSPic1 = NULL;
        }
        if( lpDDSPic2 != NULL )//释放离屏页面2
        {
            lpDDSPic2->Release();
            lpDDSPic2 = NULL;
        }
        if( lpDDPal != NULL )//释放调色板
        {
            lpDDPal->Release();
            lpDDPal = NULL;
        }
        lpDD->Release();
        lpDD = NULL;
    }
} 

//*******************************************************************
//函数:RestoreAll
//功能:页面丢失后,恢复页面内存
//*******************************************************************
HRESULT RestoreAll( void )
{
    HRESULT     ddrval;

	//恢复主页面,这也将恢复换页链中的所有页面
    ddrval = lpDDSPrimary->Restore();

	//恢复离屏页面
    ddrval = lpDDSPic1->Restore();
    ddrval = lpDDSPic2->Restore();

	//重新绘制页面图象
	InitSurfaces();

    return ddrval;
}

//*******************************************************************
//函数:WindowProc
//功能:主窗口的消息处理过程
//*******************************************************************
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, 
                            WPARAM wParam, LPARAM lParam )
{
	static HINSTANCE hInstance ;
	static int KeyFlag=0;
	static int MouseFlag=0;
	static int MoveFlag=0;
	POINT pt;
	static BOOL bPaused;

    switch( message )
    {
    case WM_ACTIVATEAPP://应用程序激活消息
        bActive = wParam;
        break;
	case WM_CREATE:
		hInstance = ((LPCREATESTRUCT)lParam) ->hInstance ;
		SetTimer(hWnd,0,TIMER,NULL);
		StepX=X=StepY=Y;

		m_bOpened = m_bPaused = m_bPlaying = FALSE;
		m_wDeviceID = 0;

		MID_Open(MIDI);
		break;

	case WM_TIMER:
		if(!MID_IsPlaying(&bPaused))
		{
			MID_SeekTo(0,0);
			MID_Play();
		}
		switch(KeyFlag)
		{
		case 1:
			if(Y+200>30)
				Y-=STEP;
			if(SpriteCountX!=0)
				SpriteCountX=0;
			if(SpriteCountY>=3)
				SpriteCountY=0;
			else
				SpriteCountY++;
			break;

		case 2:
			if(X+300<580)
				X+=STEP;
			if(SpriteCountX!=2)
				SpriteCountX=2;
			if(SpriteCountY>=3)
				SpriteCountY=0;
			else
				SpriteCountY++;
			break;

		case 3:
			if(X+300<580||Y+200>30)
			{
				X+=STEP-1;
				Y-=STEP-1;
			}
			if(SpriteCountX!=1)
				SpriteCountX=1;
			if(SpriteCountY>=3)
				SpriteCountY=0;
			else
				SpriteCountY++;
			break;

		case 4:
			if(Y+200<430)
				Y+=STEP;
			if(SpriteCountX!=4)
				SpriteCountX=4;
			if(SpriteCountY>=3)
				SpriteCountY=0;
			else
				SpriteCountY++;
			break;

		case 6:
			if(X+300<580||Y+200<430)
			{
				X+=STEP-1;
				Y+=STEP-1;
			}
			if(SpriteCountX!=3)
				SpriteCountX=3;
			if(SpriteCountY>=3)
				SpriteCountY=0;
			else
				SpriteCountY++;
			break;

		case 7:
			if(X+300>30)
				X-=STEP;
			if(SpriteCountX!=6)
				SpriteCountX=6;
			if(SpriteCountY>=3)
				SpriteCountY=0;
			else
				SpriteCountY++;
			break;

		case 11:
			if(X+300>30||Y+200<430)
			{
				X-=STEP-1;
				Y+=STEP-1;
			}
			if(SpriteCountX!=5)
				SpriteCountX=5;
			if(SpriteCountY>=3)
				SpriteCountY=0;
			else
				SpriteCountY++;
			break;

		case 8:
			if(X+300>30||Y+200>30)
			{
				X-=STEP-1;
				Y-=STEP-1;
			}
			if(SpriteCountX!=7)
				SpriteCountX=7;
			if(SpriteCountY>=3)
				SpriteCountY=0;
			else
				SpriteCountY++;
			break;

		}
		break;

	case WM_MOUSEMOVE:
		{
			pt.x=MAKEPOINTS(lParam).x;
			pt.y=MAKEPOINTS(lParam).y;

			StepX=pt.x-StaticX-25;
			StepY=pt.y-StaticY-25;
			MouseFlag=2;

			if(pt.x>StaticX+X&&pt.x<StaticX+X+49&&pt.y>StaticY+Y&&pt.y<StaticY+Y+49)
			{
				SpriteCountY=4;
				MoveFlag=1;
			}
			else
			{
				SpriteCountY=3;
				MoveFlag=0;
			}
		}
		break;

	case WM_LBUTTONDOWN:
		if(MoveFlag==1)
			MouseFlag=1;
		break;

	case WM_LBUTTONUP:
		if(MoveFlag!=1)
			MouseFlag=0;
		break;

	case WM_RBUTTONDOWN:
		if(MouseFlag==1)
		{
//			GetCursorPos(&pt);
//			ScreenToClient(hWnd,&pt);
		}
		break;

    case WM_KEYDOWN://击键消息
        switch( wParam )
        {
		case VK_UP:
			if(KeyFlag==2)
				KeyFlag=3;
			else if(KeyFlag==7)
				KeyFlag=8;
			else if(KeyFlag==3)
				KeyFlag=3;
			else if(KeyFlag==8)
				KeyFlag=8;
			else
				KeyFlag=1;
			break;

		case VK_RIGHT:
			if(KeyFlag==1)
				KeyFlag=3;
			else if(KeyFlag==4)
				KeyFlag=6;
			else if(KeyFlag==3)
				KeyFlag=3;
			else if(KeyFlag==6)
				KeyFlag=6;
			else
				KeyFlag=2;
			break;
			
		case VK_DOWN:
			if(KeyFlag==2)
				KeyFlag=6;
			else if(KeyFlag==7)
				KeyFlag=11;
			else if(KeyFlag==6)
				KeyFlag=6;
			else if(KeyFlag==11)
				KeyFlag=11;
			else
				KeyFlag=4;
			break;

		case VK_LEFT:
			if(KeyFlag==1)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -