C++编程实例大作业_第1页
C++编程实例大作业_第2页
C++编程实例大作业_第3页
C++编程实例大作业_第4页
C++编程实例大作业_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+大作业是男人就下100层编程实例打开VC+6.0,创建一个win32 application工程,名字随便取,新建一个C+ source file文件复选添加到工程选项在C+ source file添加如下代码#include <windows.h>#include <stdio.h>#include<stdlib.h>#include <time.h>HINSTANCE hInst;const int DLou=6;/楼层数int CJieTiDLou+1=1,2,3,3,4,4,2;/阶梯类型int LJieTiDLou+1;/阶梯左边距

2、int HJieTiDLou+1;/阶梯高度int WJieTiDLou+1;/阶梯宽度int XJieTiDLou+1;/阶梯左上脚X坐标int YJieTiDLou+1;/阶梯左上脚Y坐标int TJieTiDLou+1;/阶梯的个性数据const int VY_JieTi=5;const int RefreshTime=100;/刷新时间const int AY_Num=5;const int VX_Num=20;const int VY_TH=26;int zt=0;/游戏是否开始=0等待开始=1正在进行中=2结束了static char Text100;const int FixTi

3、me=12;/计算时间片int VX=0;/X方向速度int VY=-VY_JieTi;/Y方向速度int AY=0;/Y方向的加速度int ManX;/角色的X坐标int ManY;/角色的Y坐标int OManX,OManY;int pz;int pztime;const int GameWindowWidth=411;/游戏窗口的有效区域宽度const int GameWindowHeight=535;/游戏窗口的有效区域高度const int GameTopHeight=23;/游戏的有效区域上部提示信息区宽度const int GameMainHeight=495;/游戏主区域高度c

4、onst int GameMainWidth=376;/游戏主区域宽度const int ManWidth=16;/角色的宽度const int ManHeight=16;/角色的高度const int DYLou=5;/楼层Y方向均分数const int DJieTi=10;/每层分数const int DXJieTi=3;/阶梯X方向均分数const int VX_TS=3;int vx_ts=0;int Life=10;/角色的生命值int Num=0;int Num_time;static HBITMAP RoleBmp;static HBITMAP DingZiBmp;static

5、HBITMAP LCBmp;static HBITMAP JieTiBmp6;static HBITMAP hMemBmp;/图像缓存LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int IsJiaCeng();/判断是否需要加一层阶梯int on(int);int Init();int FixMan();/处理人物的函数HWND hwnd;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpcmdLine,int nCmdShow)hInst=hI

6、nstance;static TCHAR szAppName=TEXT("DisplayWithScrollBar");static TCHAR szClassName=TEXT("DisplayWithscrlBarClass");MSG msg;WNDCLASS wndclass;wndclass.style=CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProc=WndProc;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hInstance=hInstanc

7、e;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("This promgrame requir

8、es Windows NT"),szAppName,MB_ICONERROR); return 0;/创建窗口hwnd=CreateWindow( szClassName, TEXT("是男人就下100层"), /创建窗口时,添加了WS_VSCROLL风格,以增加垂直滚动条 WS_OVERLAPPEDWINDOW, 50, 100, 420, 571, NULL, NULL, hInstance, NULL);/显示窗口ShowWindow(hwnd,nCmdShow);/更新窗口UpdateWindow(hwnd);/消息循环while(GetMessage(&

9、amp;msg,NULL,0,0) TranslateMessage(&msg); DispatchMessage(&msg);return msg.wParam;LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) RECT rect;static HDC hdc,hdc_Role,hdc_JieTi,hdc_lp,hdc_dz;static HDC MemDC;PAINTSTRUCT ps;int i,j;static HPEN hpen_black,hpen_blue,hp

10、en_red,hpen_gray;static HBRUSH hbrush_black,hbrush_blue,hbrush_red,hbrush_gray;static int nClientWidth,nClientHeight; /窗口宽高hpen_black=CreatePen(PS_SOLID,2,RGB(255,255,255);switch(message)case WM_CREATE: /*DC初始化*/hdc=GetDC(hwnd); GetClientRect(hwnd,&rect); nClientWidth=rect.right-rect.left ; nCli

11、entHeight=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,h

12、MemBmp); SelectObject(hdc_JieTi,hMemBmp); SelectObject(hdc_lp,hMemBmp); SelectObject(hdc_dz,hMemBmp); /*载入人物的图片*/ RoleBmp= (HBITMAP)LoadImage(hInst,"Resman.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE); JieTiBmp0= (HBITMAP)LoadImage(hInst,"RessmallTile5.bmp", IMAGE_BITMAP,0,0,LR_LOADFR

13、OMFILE); JieTiBmp1= (HBITMAP)LoadImage(hInst,"ResSPRING_SELF.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE); JieTiBmp2= (HBITMAP)LoadImage(hInst,"RessmallTeeth3.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE); JieTiBmp3= (HBITMAP)LoadImage(hInst,"ResTRANSPORT_RIGHT_SELF.bmp", IMAGE_BI

14、TMAP,0,0,LR_LOADFROMFILE); JieTiBmp4= (HBITMAP)LoadImage(hInst,"ResTRANSPORT_LEFT_SELF.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE); LCBmp= (HBITMAP)LoadImage(hInst,"Restile1.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DingZiBmp= (HBITMAP)LoadImage(hInst,"Resdingzi.bmp", IMAGE_

15、BITMAP,0,0,LR_LOADFROMFILE); Init(); return 0;case WM_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,

16、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,GameTopHeigh

17、t,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);

18、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(

19、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)*GameMai

20、nWidth/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,GameTopHeig

21、ht,(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

22、,(GameWindowWidth-GameMainWidth)/2,GameTopHeight,GameMainWidth,GameWindowHeight-GameTopHeight-GameMainHeight,hdc_dz,5,0,SRCCOPY);/*开始绘制阶梯*/for(i=0;i<=DLou-1;i+)if(CJieTii=0)SelectObject(hdc_JieTi,JieTiBmp0);/BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);BitBlt(hdc,XJieTii,YJieTii,WJieTii,HJieT

23、ii,hdc_JieTi,0,0,SRCCOPY);else if(CJieTii=1)SelectObject(hdc_JieTi,JieTiBmp1);/BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);BitBlt(hdc,XJieTii,YJieTii,WJieTii,HJieTii,hdc_JieTi,0,0,SRCCOPY);else if(CJieTii=2)SelectObject(hdc_JieTi,JieTiBmp2);/BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);BitB

24、lt(hdc,XJieTii,YJieTii,WJieTii,HJieTii,hdc_JieTi,0,0,SRCCOPY);else if(CJieTii=3)SelectObject(hdc_JieTi,JieTiBmp3);/BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);BitBlt(hdc,XJieTii,YJieTii,WJieTii,HJieTii,hdc_JieTi,0,0,SRCCOPY);else if(CJieTii=4)SelectObject(hdc_JieTi,JieTiBmp4);/BitBlt(MemDC,0,0,

25、16,16,hdc_Role,0,0,NOTSRCERASE);BitBlt(hdc,XJieTii,YJieTii,WJieTii,HJieTii,hdc_JieTi,0,0,SRCCOPY);else SelectObject(hdc_JieTi,JieTiBmp0);/BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);BitBlt(hdc,XJieTii,YJieTii,WJieTii,HJieTii,hdc_JieTi,0,0,NOTSRCCOPY);/释放DCReleaseDC(hwnd,hdc_Role);ReleaseDC(hwnd

26、,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,"按任意键重新开始游戏");TextOu

27、t(hdc,120,250,Text,20);ReleaseDC(hwnd,hdc);EndPaint(hwnd,&ps); return 0;case WM_TIMER:Num_time+;/时间函数,重难点 for(i=0;i<=DLou-1;i+) YJieTii-=VY_JieTi; if(CJieTii=3|CJieTii=4) TJieTii+; if(TJieTii=3) TJieTii=0; if(OManX+VX+vx_ts<(GameWindowWidth-GameMainWidth)/2)ManX=(GameWindowWidth-GameMainWi

28、dth)/2; else if(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<GameWindowHeight-GameMainHeight) Life=0; /*最

29、难的人物处理函数*/ IsJiaCeng(); FixMan(); if(Life=0) KillTimer(hwnd,1); zt=2; InvalidateRect(hwnd,NULL,true);UpdateWindow(hwnd);return 0;case WM_KEYDOWN:if(zt!=1)SetTimer(hwnd,1,RefreshTime,NULL);zt=1;Init();if(zt=1)switch(wParam)case VK_LEFT:VX=-VX_Num;break; case VK_RIGHT:VX=VX_Num;break;return 0;case WM_

30、KEYUP: switch(wParam) case VK_LEFT:VX=0;break; case VK_RIGHT:VX=0;break; return 0;case WM_DESTROY: PostQuitMessage(0); return 0;return DefWindowProc(hwnd,message,wParam,lParam);int FixMan()int JiaoX=0;int JiaoY=0;int i;/*最难的碰撞部分已经解决*/for(i=0;i<DLou;i+) if(OManY+ManHeight<YJieTii+VY_JieTi&&

31、amp;ManY+ManHeight>YJieTii&&JiaoY=0) JiaoX=OManX+int(float(YJieTii+VY_JieTi-OManY-ManHeight)*(ManX-OManX)/float(ManY-OManY+VY_JieTi);if(JiaoX>XJieTii+WJieTii|JiaoX+ManWidth<XJieTii) JiaoX=0; JiaoY=0;else JiaoY=YJieTii; pz=i; pztime=1; break;if(OManY+ManHeight=YJieTii+VY_JieTi&&a

32、mp;ManY+ManHeight=YJieTii) if(ManX>XJieTii+WJieTii|ManX+ManWidth<XJieTii) VY=10; AY=AY_Num; VX=0; pz=DLou; pztime=0; vx_ts=0; else AY=0; VY=-VY_JieTi; pz=i; pztime+; if(JiaoX=0&&JiaoY=0) OManX=ManX; OManY=ManY;else OManX=JiaoX; OManY=JiaoY;if(pz!=DLou) on(pz);sprintf(Text,"%d%d&qu

33、ot;,pz,CJieTipz);return 0;/*步上阶梯的函数*/int on(int k)int i=k;/*碰到灰色阶梯*/if(CJieTii=5) if(pztime%4=1)TJieTii=rand()%10; if(TJieTii=0|TJieTii=1|TJieTii=2)&&pztime%4=1) OManY=YJieTii+1;VY=0;AY=AY_Num;pz=DLou;pztime=0; else OManY=YJieTii-ManHeight;VY=-VY_JieTi;AY=0;pz=i;pztime+; /*遇到反时针方向的滑轮,已经解决*/e

34、lse if(CJieTii=4)OManY=YJieTii-ManHeight;VY=-VY_JieTi;vx_ts=-VX_TS;AY=0;/*遇到顺时针方向的滑轮,已经解决*/else if(CJieTii=3)OManY=YJieTii-ManHeight;VY=-VY_JieTi;vx_ts=VX_TS;AY=0;/*碰上弹簧,已经解决*/else if(CJieTii=1)OManY=YJieTii-ManHeight;VY=-VY_TH;VX=0;AY=AY_Num;pz=DLou;/*碰上钉子板*/else if(CJieTii=2)OManY=YJieTii-ManHeigh

35、t;VY=-VY_JieTi;AY=0;if(pztime%10=1)Life-=3;if(Life<0)Life=0;/*碰上蓝色板部分,已经解决*/elseOManY=YJieTii-ManHeight;VY=-VY_JieTi;AY=0;if(pztime=1&&Life>0&&Life<10)Life+;return 0;/*是否需要加一个阶梯的函数,已经解决的没有问题了*/int IsJiaCeng()int i,j;if(YJieTi0<=GameWindowHeight-GameMainHeight) Num+; for(i

36、=0;i<DLou-1;i+) YJieTii=YJieTii+1; XJieTii=XJieTii+1; HJieTii=HJieTii+1; WJieTii=WJieTii+1; CJieTii=CJieTii+1; LJieTii=LJieTii+1; TJieTii=TJieTii+1; if(pz!=DLou&&pz>0) pz-=1; j=rand()%DJieTi;if(j=0|j=1|j=2|j=3)CJieTiDLou-1=0;else if(j=4)CJieTiDLou-1=1;else if(j=5)CJieTiDLou-1=2;else if

37、(j=6)CJieTiDLou-1=3;else if(j=7)CJieTiDLou-1=4;elseCJieTiDLou-1=5;LJieTiDLou-1=rand()%(DJieTi-DXJieTi+1);XJieTiDLou-1=LJieTiDLou-1*GameMainWidth/DJieTi+(GameWindowWidth-GameMainWidth)/2;YJieTiDLou-1=YJieTiDLou-2+GameMainHeight/DLou;HJieTiDLou-1=GameMainHeight/(DYLou*DLou);WJieTiDLou-1=GameMainWidth*

38、DXJieTi/DJieTi;if(CJieTiDLou-1=5) TJieTiDLou-1=rand()%10; else TJieTiDLou-1=0;return 1; elsereturn 0;int Init()/初始化游戏int i,j;while(CJieTi2!=0&&CJieTi3!=0&&CJieTi4!=0&&CJieTi5!=0)srand( (unsigned)time( NULL ) );/设置随机种子保证每次随机的结果均不相同for(i=0;i<=DLou-1;i+)j=rand()%DJieTi;if(j=0

39、|j=1|j=2|j=3)CJieTii=0;else if(j=4)CJieTii=1;else if(j=5)CJieTii=2;else if(j=6)CJieTii=3;else if(j=7)CJieTii=4;elseCJieTii=5;/产生随机数组/产生合理的阶梯类型数组for(i=0;i<=DLou-1;i+)LJieTii=rand()%(DJieTi-DXJieTi+1);/产生阶梯布置的随机数组HJieTii=GameMainHeight/(DYLou*DLou);WJieTii=GameMainWidth*DXJieTi/DJieTi;XJieTii=LJieTii*GameMainWidth/DJieTi+(GameWindowWidth-GameMainWidth)/2; YJieTii=GameWindowHeight-GameMainHeight+i*GameMainHeight/DLou+(DYLou-1)*GameMainHeight/(DYLou*DLou);/*计算出初始角色状态*/for(i=0;i<=3;i+)if(CJieTii+2=0) OManX=XJieTii+2+(WJieTii+2-ManWidth)/2; OManY=YJieTii+2-ManWidth; pz=i+2; pztim

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论