#include <d3d9.h>
#include <d3dx9.h>
#include <d3dx9math.h>
#include <dinput.h>
#include <dsound.h>
#include <stdio.h>
//#include <tchar.h>
//#include <string.h>
//--------------------------------------------------------------------------
LPDIRECT3D9 dxdxzz = NULL; // Direct3D对象指针
LPDIRECT3DDEVICE9 dx = NULL; // Direct3D设备指针
LPDIRECT3DVERTEXBUFFER9 ddhcqa=0,ddhcqb=0,ddhcqwl=0,ddhcqwlb=0,ddhcqdian=0,ddhcqyan;// 顶点缓冲区指针。顶点缓冲区。
LPDIRECT3DINDEXBUFFER9 syhcqa=0,syhcqb=0,syhcqwl=0;//索引缓冲区
LPDIRECTINPUT8 didxzz= NULL;//DirectInput对象指针
LPDIRECTINPUTDEVICE8 di=0;//DirectInput设备指针
LPDIRECTSOUND8 ds=0;//DirectSound对象指针
IDirectSoundBuffer* dshcq=0;//DS缓冲区
IDirectSoundBuffer8* dshcqc=0;
LPDIRECT3DTEXTURE9 wla=0,wlb=0,wldt=0,wlqiang=0;//纹理对象指针。纹理。
LPDIRECT3DVERTEXDECLARATION9 ddsmdx,ddsmdxwl,ddsmdxwlb,ddsmdxdian,ddsmdxyan;//顶点声明对象。
IDirect3DVertexShader9* ddxrhsa=0;//顶点渲染对象。顶点渲染函数。
IDirect3DVertexShader9* ddxrhswl=0;
IDirect3DVertexShader9* ddxrhswlb=0;
IDirect3DVertexShader9* ddxrhsb=0;
IDirect3DVertexShader9* ddxrhsdian=0;
IDirect3DVertexShader9* ddxrhsyan=0;
IDirect3DPixelShader9* xsxrhsa=0;//像素渲染函数。
IDirect3DPixelShader9* xsxrhswl=0;
IDirect3DPixelShader9* xsxrhsdian=0;
LPDIRECT3DSURFACE9 txhcqa=0;//图形缓冲区。
LPDIRECT3DSURFACE9 wlhcqa=0,wlhcqb;//纹理缓冲区。
HWND ckjb;//定义窗口句柄。
HINSTANCE cxjb;//应用程序句柄。
//-----------------------------------------------------------------------------函数声明。
LRESULT WINAPI chuangkouguocheng(HWND ckjb, UINT msg, WPARAM wParam, LPARAM lParam);
void huitu();//绘图。
void chonghui();//重绘。
void shifangziyuan();//释放资源。
void wenli();//纹理。
void chushihuadx();//初始化dx。
void xuanran();//渲染。
void zbzh();//坐标转换。
//********************************俄罗斯
void xinfangkuai();//新方块
void manhang();//满行
void xieruzuobiao();//写入坐标
//********************************
//-----------------------------------------------------------------------------变量声明。
byte jphcq[256];//键盘缓冲区
int i,j,k,b,d,e,ia,ib,ic,id,ie;
float x=-5.0f,y=0.0f,bcx,bcy,z,bcz;
float f[10],ff[10],fx[10],fy[10],fz[10];
float ys[4],jd[4]={1.0f,1.0f,1.0f,1.0f};
int s[10],ss[10];
float xa=0.0f,ya=0.0f,za,bxa,bya;
float a[19]={0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,-5.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f\
,90.0f,1.0f,1.0f,100.0f};
float a1[12]={90.0f,190.0f,20.0f,0.0f,0.0f,0.0f,100.0f,90.0f,-50.0f,100.0f,90.0f,0.0f};
float a2[12]={0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,100.0f,90.0f,-50.0f,100.0f,90.0f,0.0f};
float awl[19]={0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,-5.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f\
,90.0f,1.0f,1.0f,100.0f};
float ayan[12]={0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,30.0f,-50.0f,0.0f,30.0f,0.0f};
float c10[4]={70.0f,180.0f,0.0f,-0.5f},c8[4],c[4];
//---------------------------------------------------------------------------俄罗斯
float f50[19][33];//坐标记录。
float f51[8]={90.0f,180.0f,100.0f,180.0f,90.0f,190.0f,100.0f,190.0f};
int fklx=0,hang,fkzt;//方块类型 行 方块状态
int bz1[4]={18,18,19,19},bz2[4]={8,9,8,9};//,bz2=8;// 方块类型 bz1行标志 bz2列标志
float bz=180.0f;//行界标志
int ztbz;
DWORD t,ttt,ta,tb,tc,td,te;
//----------------------------------------------------------------------------粒子
struct liziyan
{
float x[1000];
float y[1000];
float z[1000];
float a[1000];
byte sm[1000];
};
liziyan lz;//粒子
float lizi[1000],sd[1000];
float adian[12]={0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,100.0f,90.0f,-50.0f,100.0f,90.0f,0.0f};
//-----------------------------------------------------------------------------定义结构体。
struct ddjg
{
D3DXVECTOR3 x;//坐标
D3DXVECTOR3 y;//法线
D3DXVECTOR2 wl;//纹理坐标
};
struct ddjgdian
{
D3DXVECTOR3 x;//坐标
D3DXVECTOR3 y;//法线
float d;//点的大小
D3DXVECTOR2 wl;//纹理坐标
D3DXVECTOR3 ffx;//副法线
};
struct ddjgyan
{
D3DXVECTOR3 x;//坐标
D3DXVECTOR3 y;//法线
float d;//点的大小
D3DXVECTOR2 wl;//纹理坐标
D3DXVECTOR4 ffx;//副法线
};
struct ddjgwl
{
D3DXVECTOR3 x;//坐标
D3DXVECTOR3 ys;//颜色
};
struct ddjgwldian
{
D3DXVECTOR3 x;//坐标
D3DXVECTOR3 y;//法线
float d;//点的大小
};
//-----------------------------------------------------------------------------入口函数。
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS chuangkoulei;//定义窗口类。
//窗口风格,P671。
chuangkoulei.style=0;//CS_HREDRAW | CS_VREDRAW;
//指向窗口过程。
chuangkoulei.lpfnWndProc=chuangkouguocheng;
//指定紧随WNDCLASS数据结构后分配的字节数,系统将起初始化为0。
chuangkoulei.cbClsExtra=0;
//指定紧随窗口实例之后分配的字节数,系统将起初始化为0。P671
chuangkoulei.cbWndExtra=0;
//标识了该窗口类的窗口过程所在的模块实例的句柄,不能为NULL。
chuangkoulei.hInstance=hInstance;
//标识了该窗口类的图标。P672
chuangkoulei.hIcon=LoadIcon(NULL,IDI_ERROR);//读标准图标。
//标识了该窗口类的光标。P672
chuangkoulei.hCursor=LoadCursor(NULL,IDC_ARROW);//读标准光标。
//背景颜色。P672
chuangkoulei.hbrBackground=0;//(HBRUSH)GetStockObject(BLACK_BRUSH);//设置背景。
//菜单名。P672
chuangkoulei.lpszMenuName=NULL;
//定义窗口类的名字。
chuangkoulei.lpszClassName="chuangkouleiming";
//注册窗口类。
RegisterClass(&chuangkoulei);
//创建窗口。
//CreateWindow(窗口类名,标题栏,窗口样式P11,X1,Y1,X2,Y2,指向创建此窗口的父窗口,
// 指向菜单的句柄,模块实例句柄,指向结构指针P11。)
//GetDesktopWindow()获取桌面窗口句柄,无返回值。
ckjb=CreateWindow("chuangkouleiming","biaotilan",WS_OVERLAPPEDWINDOW,
100,100,800,600,GetDesktopWindow(),0,hInstance,0);
// cxjb=FindWindow("chuangkouleiming","hwb");
cxjb=hInstance;
//初始化dx。
chushihuadx();
//显示窗口。
ShowWindow(ckjb,SW_SHOWDEFAULT);
//更新窗口。
UpdateWindow(ckjb);
//---------------------------------------------------------------------
SetTimer(ckjb,1,100,NULL);
//---------------------------------------------------------------------
//消息循环。
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
//GetMessage(指向MSG结构,标识要检查其消息的窗口 如果为NULL 则获取调用该函数的程序的任一
// 窗口,要获取的消息的最小整数值,--最大整数值。最后两个参数为0则获取所有消息。)
//*
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//*/
/*
while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else{
if(jphcq[DIK_UP]&0x80)
a1[3]=a1[3]+0.1f;
a2[3]=a2[3]+0.1f;
}
}
//*/
shifangziyuan();//释放资源,退出程序。
UnregisterClass("chuangkoulei",chuangkoulei.hInstance);
return 0;
}
////////////////////////////////////////////////////////////////////////////////////重绘。
void chonghui()
{
ddjgdian* dda;//顶点缓冲区内存地址。
//ddhcqzz::Lock(加锁内存起始地址,加锁内存大小,返回内存指针地址,属性P44。)
ddhcqdian->Lock( 0, 0, (void**)&dda, 0 );
d=0;
for(int j=0;j<1000;j++)
{
dda[d].x=D3DXVECTOR3(lizi[j],0.1f,25.0f);
dda[d].y=D3DXVECTOR3(1,1,1);
dda[d].d=rand()/4000;
d=d++;
}
d=0;
f[0]=50.0f;
ddjgyan* yan;
ddhcqyan->Lock( 0, 0, (void**)&yan, 0 );
for(i=0;i<1000;i++)
{
yan[d].x=D3DXVECTOR3(lz.x[i],lz.y[i],lz.z[i]);
yan[d].y=D3DXVECTOR3(1,1,1);
yan[d].d=float((rand()/500));
// dian[d].ffx=D3DXVECTOR4(lz.a[i]+0.5f,lz.a[i]+0.5f,0.1f,lz.a[i]);
yan[d].ffx=D3DXVECTOR4(2.7f,0.2f,2.5f,lz.a[i]);
d=d++;
}
ddhcqyan->Unlock();
//--------------------------------------------------------------
ddhcqdian->Unlock();
t=GetTickCount();
if(t-ttt>10)
{
ttt=t;
lz.a[0]=0.025f;
for(i=1;i<1000;i++)
{
lz.x[i]=0.0f;//lz.x[i-1]+0.05f;
lz.y[i]=lz.y[i-1]+0.25f;
// lz.y[i]=sinf(i*(3.1415/2000.0f))*50.0f;
// lz.z[i]=lz.z[i]+0.1f;
lz.a[i]=lz.a[i-1]-0.00002f;
}
}
}
//////////////////////////////////////////////////////////
评论0