C++编程实例大作业.docx
《C++编程实例大作业.docx》由会员分享,可在线阅读,更多相关《C++编程实例大作业.docx(28页珍藏版)》请在冰豆网上搜索。
![C++编程实例大作业.docx](https://file1.bdocx.com/fileroot1/2023-2/1/77335118-6715-470f-98b8-e0513e2b6f01/77335118-6715-470f-98b8-e0513e2b6f011.gif)
C++编程实例大作业
C++大作业
是男人就下100层编程实例
打开VC++6.0,创建一个win32application工程,名字随便取,新建一个C++sourcefile文件复选添加到工程选项
在C++sourcefile添加如下代码
#include
#include
#include
#include
HINSTANCEhInst;
constintDLou=6;//楼层数
intCJieTi[DLou+1]={1,2,3,3,4,4,2};//阶梯类型
intLJieTi[DLou+1];//阶梯左边距
intHJieTi[DLou+1];//阶梯高度
intWJieTi[DLou+1];//阶梯宽度
intXJieTi[DLou+1];//阶梯左上脚X坐标
intYJieTi[DLou+1];//阶梯左上脚Y坐标
intTJieTi[DLou+1];//阶梯的个性数据
constintVY_JieTi=5;
constintRefreshTime=100;//刷新时间
constintAY_Num=5;
constintVX_Num=20;
constintVY_TH=26;
intzt=0;//游戏是否开始=0等待开始=1正在进行中=2结束了
staticcharText[100];
constintFixTime=12;//计算时间片
intVX=0;//X方向速度
intVY=-VY_JieTi;//Y方向速度
intAY=0;//Y方向的加速度
intManX;//角色的X坐标
intManY;//角色的Y坐标
intOManX,OManY;
intpz;
intpztime;
constintGameWindowWidth=411;//游戏窗口的有效区域宽度
constintGameWindowHeight=535;//游戏窗口的有效区域高度
constintGameTopHeight=23;//游戏的有效区域上部提示信息区宽度
constintGameMainHeight=495;//游戏主区域高度
constintGameMainWidth=376;//游戏主区域宽度
constintManWidth=16;//角色的宽度
constintManHeight=16;//角色的高度
constintDYLou=5;//楼层Y方向均分数
constintDJieTi=10;//每层分数
constintDXJieTi=3;//阶梯X方向均分数
constintVX_TS=3;
intvx_ts=0;
intLife=10;//角色的生命值
intNum=0;
intNum_time;
staticHBITMAPRoleBmp;
staticHBITMAPDingZiBmp;
staticHBITMAPLCBmp;
staticHBITMAPJieTiBmp[6];
staticHBITMAPhMemBmp;//图像缓存
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
intIsJiaCeng();//判断是否需要加一层阶梯
inton(int);
intInit();
intFixMan();//处理人物的函数
HWNDhwnd;
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,
LPSTRlpcmdLine,intnCmdShow)
{
hInst=hInstance;
staticTCHARszAppName[]=TEXT("DisplayWithScrollBar");
staticTCHARszClassName[]=TEXT("DisplayWithscrlBarClass");
MSGmsg;
WNDCLASSwndclass;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szClassName;
//注册窗口类
if(!
RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("ThispromgramerequiresWindowsNT"),szAppName,MB_ICONERROR);
return0;
}
//创建窗口
hwnd=CreateWindow(
szClassName,
TEXT("是男人就下100层"),
//创建窗口时,添加了WS_VSCROLL风格,以增加垂直滚动条
WS_OVERLAPPEDWINDOW,
50,
100,
420,
571,
NULL,
NULL,
hInstance,
NULL);
//显示窗口
ShowWindow(hwnd,nCmdShow);
//更新窗口
UpdateWindow(hwnd);
//消息循环
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
returnmsg.wParam;
}
LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{RECTrect;
staticHDChdc,hdc_Role,hdc_JieTi,hdc_lp,hdc_dz;
staticHDCMemDC;
PAINTSTRUCTps;
inti,j;
staticHPENhpen_black,hpen_blue,hpen_red,hpen_gray;
staticHBRUSHhbrush_black,hbrush_blue,hbrush_red,hbrush_gray;
staticintnClientWidth,nClientHeight;//窗口宽高
hpen_black=CreatePen(PS_SOLID,2,RGB(255,255,255));
switch(message)
{
caseWM_CREATE:
/*DC初始化*/
hdc=GetDC(hwnd);
GetClientRect(hwnd,&rect);
nClientWidth=rect.right-rect.left;
nClientHeight=rect.bottom-rect.top;
hdc_Role=CreateCompatibleDC(hdc);
hdc_JieTi=CreateCompatibleDC(hdc);
hdc_lp=CreateCompatibleDC(hdc);
hdc_dz=CreateCompatibleDC(hdc);
MemDC=CreateCompatibleDC(hdc);
/*初始化临时画布必须*/
hMemBmp=CreateCompatibleBitmap(hdc,nClientWidth,nClientHeight);
SelectObject(hdc_Role,hMemBmp);
SelectObject(hdc_JieTi,hMemBmp);
SelectObject(hdc_lp,hMemBmp);
SelectObject(hdc_dz,hMemBmp);
/*载入人物的图片*/
RoleBmp=(HBITMAP)LoadImage(hInst,"Res\\man.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
JieTiBmp[0]=(HBITMAP)LoadImage(hInst,"Res\\smallTile5.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
JieTiBmp[1]=(HBITMAP)LoadImage(hInst,"Res\\SPRING_SELF.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
JieTiBmp[2]=(HBITMAP)LoadImage(hInst,"Res\\smallTeeth3.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
JieTiBmp[3]=(HBITMAP)LoadImage(hInst,"Res\\TRANSPORT_RIGHT_SELF.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
JieTiBmp[4]=(HBITMAP)LoadImage(hInst,"Res\\TRANSPORT_LEFT_SELF.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
LCBmp=(HBITMAP)LoadImage(hInst,"Res\\tile1.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
DingZiBmp=(HBITMAP)LoadImage(hInst,"Res\\dingzi.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
Init();
return0;
caseWM_PAINT:
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdc,hpen_black);
SetTextColor(hdc,RGB(207,49,211));
SetBkMode(hdc,TRANSPARENT);
sprintf(Text,"LIFE:
%2d第%8d层,核桃(QQ:
2410250284)",Life,Num);
TextOut(hdc,25,0,Text,51);
/*绘制游戏界面的边界*/
MoveToEx(hdc,0,GameWindowHeight,NULL);
LineTo(hdc,GameWindowWidth,GameWindowHeight);
MoveToEx(hdc,GameWindowWidth,GameWindowHeight,NULL);
LineTo(hdc,GameWindowWidth,0);
/*绘制横纵向分区*/
/*
MoveToEx(hdc,0,GameTopHeight,NULL);
LineTo(hdc,GameWindowWidth,GameTopHeight);
MoveToEx(hdc,(GameWindowWidth-GameMainWidth)/2,GameTopHeight,NULL);
LineTo(hdc,(GameWindowWidth-GameMainWidth)/2,GameWindowHeight);
MoveToEx(hdc,GameWindowWidth-(GameWindowWidth-GameMainWidth)/2,GameTopHeight,NULL);
LineTo(hdc,GameWindowWidth-(GameWindowWidth-GameMainWidth)/2,GameWindowHeight);
MoveToEx(hdc,(GameWindowWidth-GameMainWidth)/2,GameTopHeight,NULL);
LineTo(hdc,GameWindowWidth-(GameWindowWidth-GameMainWidth)/2,GameTopHeight);
MoveToEx(hdc,(GameWindowWidth-GameMainWidth)/2,GameWindowHeight-GameMainHeight,NULL);
LineTo(hdc,GameWindowWidth-(GameWindowWidth-GameMainWidth)/2,GameWindowHeight-GameMainHeight);
*/
/*绘制辅助边界*/
/*
for(i=0;i<=DLou-1;i++)
{
MoveToEx(hdc,(GameWindowWidth-GameMainWidth)/2,GameWindowHeight-GameMainHeight+i*GameMainHeight/DLou,NULL);
LineTo(hdc,GameWindowWidth-(GameWindowWidth-GameMainWidth)/2,GameWindowHeight-GameMainHeight+i*GameMainHeight/DLou);
}
for(i=0;i<=DJieTi-1;i++)
{
MoveToEx(hdc,(GameWindowWidth-GameMainWidth)/2+(i+1)*GameMainWidth/DJieTi,GameWindowHeight-GameMainHeight,NULL);
LineTo(hdc,(GameWindowWidth-GameMainWidth)/2+(i+1)*GameMainWidth/DJieTi,GameWindowHeight);
}
*/
/*开始载入人物*/
SelectObject(hdc_Role,RoleBmp);
BitBlt(hdc,OManX,OManY,16,16,hdc_Role,0,0,SRCCOPY);
/*开始载入左右边带动条*/
SelectObject(hdc_lp,LCBmp);
BitBlt(hdc,0,GameTopHeight,(GameWindowWidth-GameMainWidth)/2,GameWindowHeight-GameTopHeight,hdc_lp,0,0,SRCCOPY);
BitBlt(hdc,GameWindowWidth-(GameWindowWidth-GameMainWidth)/2,GameTopHeight,(GameWindowWidth-GameMainWidth)/2,GameWindowHeight-GameTopHeight,hdc_lp,0,0,SRCCOPY);
/*绘制上面的钉子*/
SelectObject(hdc_dz,DingZiBmp);
BitBlt(hdc,(GameWindowWidth-GameMainWidth)/2,GameTopHeight,GameMainWidth,GameWindowHeight-GameTopHeight-GameMainHeight,hdc_dz,5,0,SRCCOPY);
/*开始绘制阶梯*/
for(i=0;i<=DLou-1;i++)
{
if(CJieTi[i]==0)
{
SelectObject(hdc_JieTi,JieTiBmp[0]);
//BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);
BitBlt(hdc,XJieTi[i],YJieTi[i],WJieTi[i],HJieTi[i],hdc_JieTi,0,0,SRCCOPY);
}
elseif(CJieTi[i]==1)
{
SelectObject(hdc_JieTi,JieTiBmp[1]);
//BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);
BitBlt(hdc,XJieTi[i],YJieTi[i],WJieTi[i],HJieTi[i],hdc_JieTi,0,0,SRCCOPY);
}
elseif(CJieTi[i]==2)
{
SelectObject(hdc_JieTi,JieTiBmp[2]);
//BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);
BitBlt(hdc,XJieTi[i],YJieTi[i],WJieTi[i],HJieTi[i],hdc_JieTi,0,0,SRCCOPY);
}
elseif(CJieTi[i]==3)
{
SelectObject(hdc_JieTi,JieTiBmp[3]);
//BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);
BitBlt(hdc,XJieTi[i],YJieTi[i],WJieTi[i],HJieTi[i],hdc_JieTi,0,0,SRCCOPY);
}
elseif(CJieTi[i]==4)
{
SelectObject(hdc_JieTi,JieTiBmp[4]);
//BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);
BitBlt(hdc,XJieTi[i],YJieTi[i],WJieTi[i],HJieTi[i],hdc_JieTi,0,0,SRCCOPY);
}
else
{
SelectObject(hdc_JieTi,JieTiBmp[0]);
//BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);
BitBlt(hdc,XJieTi[i],YJieTi[i],WJieTi[i],HJieTi[i],hdc_JieTi,0,0,NOTSRCCOPY);
}
}
//释放DC
ReleaseDC(hwnd,hdc_Role);
ReleaseDC(hwnd,hdc_JieTi);
ReleaseDC(hwnd,hdc_lp);
ReleaseDC(hwnd,hdc_dz);
ReleaseDC(hwnd,MemDC);
if(zt==0)
{
SetBkColor(hdc,RGB(0,0,0));
SetBkMode(hdc,OPAQUE);
sprintf(Text,"按任意键开始游戏");
TextOut(hdc,125,250,Text,16);
}
if(zt==2)
{
SetBkColor(hdc,RGB(0,0,0));
SetBkMode(hdc,OPAQUE);
sprintf(Text,"按任意键重新开始游戏");
TextOut(hdc,120,250,Text,20);
}
ReleaseDC(hwnd,hdc);
EndPaint(hwnd,&ps);
return0;
caseWM_TIMER:
Num_time++;
//时间函数,重难点
for(i=0;i<=DLou-1;i++)
{
YJieTi[i]-=VY_JieTi;
if(CJieTi[i]==3||CJieTi[i]==4)
{
TJieTi[i]++;
if(TJieTi[i]==3)
TJieTi[i]=0;
}
}
if(OManX+VX+vx_ts<(GameWindowWidth-GameMainWidth)/2)
ManX=(GameWindowWidth-GameMainWidth)/2;
elseif(OManX+VX+vx_ts+ManWidth>GameWindowWidth-(GameWindowWidth-GameMainWidth)/2)
ManX=GameWindowWidth-(GameWindowWidth-GameMainWidth)/2-ManWidth;
else
ManX=OManX+VX+vx_ts;
VY+=AY;
ManY=OManY+VY;
if(ManY>GameWindowHeight)
Life=0;
if(ManYLife=0;
/*最难的人物处理函数*/
IsJiaCeng();
FixMan();
if(Life==0)
{
KillTimer(hwnd,1);
zt=2;
}
InvalidateRect(hwnd,NULL,true);
UpdateWindow(hwnd);
return0;
caseWM_KEYDOWN:
if(zt!
=1)
{
SetTimer(hwnd,1,RefreshTime,NULL);
zt=1;
Init();
}
if(zt==1)
{
switch(wParam)
{
caseVK_LEFT:
VX=-VX_Num;break;
caseVK_RIGHT:
VX=VX_Num;break;
}
}
return0;
caseWM_KEYUP:
switch(wParam)
{
caseVK_LEFT:
VX=0;break;
caseVK_RIGHT:
VX=0;break;
}
return0;
caseWM_DESTROY:
PostQuitMessage(0);
return0;
}
returnDefWindowProc(hwnd,message,wParam,lParam);
}
intFixMan()
{
intJiaoX=0;
intJiaoY=0;
inti;
/*最难的碰撞部分已经解决*/
for(i=0;i{
if(OManY+ManHeightYJieTi[i]&&JiaoY==0)
JiaoX=OManX+int(float((YJieTi[i]+VY_JieTi-OManY-ManHeight)*(ManX-OManX))/float(ManY-OManY+VY_JieTi));
if(JiaoX>XJieTi[i]+WJieTi[i]||JiaoX+ManWidth{
JiaoX=0;
JiaoY=0;
}
else
{
JiaoY=YJieTi[i];
pz=i;
pztime=1;