是男人就下100层C++编程实例大作业.docx
- 文档编号:13628256
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:24
- 大小:18.81KB
是男人就下100层C++编程实例大作业.docx
《是男人就下100层C++编程实例大作业.docx》由会员分享,可在线阅读,更多相关《是男人就下100层C++编程实例大作业.docx(24页珍藏版)》请在冰点文库上搜索。
是男人就下100层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:
)",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(ManY Life=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+ManHeight 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; break; } if(OManY+ManHeight==YJieTi[i]+VY_JieTi&&ManY+ManHeight==YJieTi[i]) { if(ManX>XJieTi[i]+WJieTi[i]||ManX+ManWidth { VY=10; AY=AY_Num; VX=0; pz=DLou; pztime=0; vx_ts=0; } else { AY=0; VY=-VY_JieTi; pz=i; pztime++; } } } if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 男人 100 C+ 编程 实例 作业