这里声明,这个游戏是由本人,在大一暑假自作的第二个小游戏,转载请注明原帖地址,谢谢!
所有图片都是我一个人用ps搞出来的,比较简单.........毕竟不是学图像制作的,请体谅!另外,图片
不放出来了要运行此程序一定要去下载ege库,因为要用到里面的一个函数库graphics,下载好了,
在项目->属性->配置属性->C/C++处添加库目录即可。
玩法是:主角做自由落体运动,不能让它掉到底线,要按左右按键使它站在上升的云条上面,这样
就能跟着上升,但是不能超过顶线,也不能越过左右边界,否则都是输。分数达到一定程度,难度会增加
一个出现火箭,另一个是云条上升速度增加!
里面有详细的注释,将不再一一讲解,不懂请评论提出。
1 #include<graphics.h>//这个是外部的函数库,图形库ege里面的,百度即可下载,这个函数库比win 的api 容易很多 2 #include<stdlib.h> 3 #include<time.h> 4 class zhujue//角色基类,主角 5 { 6 public: 7 void jiemian(PIMAGE image);//界面函数 8 void load(PIMAGE image);//加载界面函数 9 void judge(zhujue Q[],PIMAGE image);//撞墙判断函数 10 void rocket(zhujue Q[],PIMAGE image);//火箭出现函数 11 int x,y; 12 int temp,score; 13 }; 14 class yun:public zhujue//公开继承子类 15 { 16 public: 17 void zaoyun(yun y[],PIMAGE image,int a);//制造云条函数 18 void PanDuan(yun y[],zhujue Q[],PIMAGE image);//判断是否站在云条上面函数 19 void panduan(yun y[],zhujue Q[],PIMAGE image,PIMAGE image1);//判断是否撞火箭函数 20 void Score(zhujue Q[],yun y[]);//分数显示函数 21 int x,y; 22 }; 23 void zhujue::jiemian(PIMAGE image) 24 { 25 putimage(0,0.5,image); 26 } 27 void zhujue::load(PIMAGE image)//加载出示画面的图片函数 28 { 29 PIMAGE img9=newimage(); 30 getimage(image,"图片包\\19.jpg");//函数getimage,获取图片,第一个参数是传入的PIMAGE 变量,第二个是路径 31 putimage(0,0,image);//加载简介图片 32 //Sleep(10000);//系统延迟10秒 33 } 34 void yun::zaoyun(yun y[],PIMAGE image,int a)//制造云条 35 { 36 if(y[a].x<175)//防止重复产生x 37 y[a].x=rand()%271+176;//随机产生x 38 putimage(y[a].x,y[a].y+72*a,image);//显示云条,在特定的位置显示出图片 39 if(y[a].y+72*a<=-16)//云条到顶 40 { 41 y[a].y=460-72*a;//重新赋值y 42 y[a].x=0;//重新赋值x 43 } 44 } 45 void yun::PanDuan(yun y[],zhujue Q[],PIMAGE image)//判断是否站在云条上 46 { 47 for(int i=0;i<=5;i++)//遍历坐标的判断 48 { 49 if((y[i].x<=Q[0].x&&Q[0].x<=y[i].x+46&&Q[0].y+35<=y[i].y+72*i&&Q[0].y+35>=y[i].y-1-Q[1].score+72*i)|| 50 (y[i].x<=Q[0].x+32&&Q[0].x+32<=y[i].x+46&&Q[0].y+35<=y[i].y+72*i&&Q[0].y+35>=y[i].y-1-Q[1].score+72*i)) 51 { 52 if(Q[0].temp==0)//对左右面图像的输出判断。这里是用来当用户按左右键时,输出不同的图片 53 putimage(Q[0].x,Q[0].y,image);//temp==0,左边 54 else 55 putimage(Q[0].x,Q[0].y,image); 56 Q[0].y-=2*Q[1].score;//控制角色y上升 57 //Q.score++; 58 } 59 else //不满足站在云条条件时,输出角色图像,与上面不同的是,角色的y不会上升,即没站的效果 60 { 61 if(Q[0].temp==0) 62 putimage(Q[0].x,Q[0].y,image); 63 else 64 putimage(Q[0].x,Q[0].y,image); 65 } 66 } 67 } 68 void yun::Score(zhujue Q[],yun y[]) 69 { 70 for(int i=0;i<=5;i++) 71 { 72 if(Q[0].y==y[i].y+72*i||Q[0].y==y[i].y+72*i+1) 73 Q[0].score++; 74 } 75 setcolor(BLUE);//设置字体颜色,这个是graphics 里面的,后面都是 76 setfontbkcolor(WHITE);//背景颜色 77 setfont(-25,0,"幼圆");//字体大小和类型 78 xyprintf(67,108,"%d",Q[0].score);//在特定的坐标处显示出分数 79 } 80 void zhujue::judge(zhujue Q[],PIMAGE image) 81 { 82 if(Q[0].x<155||Q[0].x+10>496||Q[0].y+35<0||Q[0].y>460)//所有撞墙条件的判断 83 { 84 putimage(220,150,image);//失败图像输出 85 getch();//等待输入键 86 getch(); 87 Q[0].score=0;//分数清零 88 } 89 } 90 void zhujue::rocket(zhujue Q[],PIMAGE image)//产生火箭 91 { 92 if(Q[1].x<174) 93 Q[1].x=rand()%271+176; 94 if(Q[1].temp==0) 95 { 96 putimage(Q[1].x,Q[1].y,image);//输出火箭图片,前两个参数是坐标 97 Q[1].y-=2*Q[1].score; 98 } 99 if(Q[1].y<=0) 100 { 101 Q[1].y=480; 102 Q[1].x=0; 103 } 104 } 105 void yun::panduan(yun y[],zhujue Q[],PIMAGE image,PIMAGE image1)//角色与火箭的碰撞 106 { 107 for(int i=0;i<=24;i++)//对火箭全面碰撞判断 108 { 109 if(Q[0].x==Q[1].x+i&&Q[0].y+35>=Q[1].y+5&&Q[0].y<=Q[1].y+56) 110 {putimage(220,150,image);putimage(Q[1].x,Q[1].y,image1); 111 xyprintf(67,108,"%d",Q[0].score); 112 getch();getch();getch();Q[0].score=0;} 113 if(Q[0].x+30==Q[1].x+i&&Q[0].y+35>=Q[1].y+5&&Q[0].y<=Q[1].y+56) 114 {putimage(220,150,image);putimage(Q[1].x,Q[1].y,image1); 115 xyprintf(67,108,"%d",Q[0].score); 116 getch();getch();getch();Q[0].score=0;} 117 } 118 } 119 int main() 120 { 121 int d=680,f=460;//控制台的长、宽 122 initgraph(&d,&f,"//tc");//开始的动画 123 initgraph(680,460);//游戏窗口大小定义,初始化图像环境 124 HWND hWnd = getHWnd(); // 获得窗口句柄 125 SetWindowText(hWnd, TEXT("云端漂移小游戏"));// 使用 API 函数修改窗口名称 126 zhujue Q[2];//两个主角类对象 127 Q[0].x=200,Q[0].y=60;//初始化主角的初始位置,以坐标来表示 128 Q[0].temp=0,Q[0].score=0,Q[1].score=2;//初始化开始的分数,面向左边,云条上升速度,2像素 129 Q[1].x=0,Q[1].y=480,Q[1].temp=1; 130 yun y[6]; 131 PIMAGE img=newimage();//创建图片对象,变量,要用到多少张图片就建多少个 132 PIMAGE img1=newimage(); 133 PIMAGE img2=newimage(); 134 PIMAGE img3=newimage(); 135 PIMAGE img5=newimage(); 136 PIMAGE img6=newimage(); 137 PIMAGE img7=newimage(); 138 PIMAGE img8=newimage(); 139 PIMAGE img4=newimage(); 140 PIMAGE img9=newimage(); 141 getimage(img4,"图片包\\14.jpg");//获取图片 142 getimage(img,"图片包\\10.jpg"); 143 getimage(img1,"图片包\\11.jpg"); 144 getimage(img2,"图片包\\12.jpg"); 145 getimage(img3,"图片包\\13.jpg"); 146 getimage(img5,"图片包\\15.jpg"); 147 getimage(img6,"图片包\\16.jpg"); 148 getimage(img7,"图片包\\17.jpg"); 149 getimage(img8,"图片包\\18.jpg"); 150 getimage(img9,"图片包\\19.jpg"); 151 //putimage(200,95,img); 152 for(int i=0;i<=5;i++)//初始化5条云条的位置 153 { 154 y[i].x=0; 155 y[i].y=460; 156 } 157 srand((unsigned)time(NULL));//随机种子 158 Q[0].load(img9);//开头的图片输出 159 for(;is_run();y[0].y-=Q[1].score,y[1].y-=Q[1].score,y[2].y-=Q[1].score,y[3].y-=Q[1].score, 160 y[4].y-=Q[1].score,y[5].y-=Q[1].score,Q[0].y+=Q[1].score,delay_fps(60))//云条速度控制 161 { 162 //putimage(Q.x,Q.y,img5); 163 //cleardevice(); 164 165 Q[0].jiemian(img4); 166 y[0].zaoyun(y,img,0);//制造云 167 y[1].zaoyun(y,img1,1); 168 y[2].zaoyun(y,img2,2); 169 y[3].zaoyun(y,img3,3); 170 y[4].zaoyun(y,img2,4); 171 y[5].zaoyun(y,img,5); 172 if(Q[0].temp==0)//control the 图像的朝向面 173 y[0].PanDuan(y,Q,img5); 174 else 175 y[0].PanDuan(y,Q,img6); 176 y[0].panduan(y,Q,img8,img7); 177 if(keystate(VK_LEFT)==1)//是否有左按键 178 { 179 Q[0].x-=6; 180 Q[0].temp=1; 181 } 182 else if(keystate(VK_RIGHT)==1)//右 183 { 184 Q[0].x+=6; 185 Q[0].temp=0; 186 } 187 //Q.score1(Q,y); 188 y[0].Score(Q,y); 189 Q[0].judge(Q,img8); 190 if(Q[0].score>=5)//分数控制条件 191 Q[1].temp=0; 192 Q[1].rocket(Q,img7); 193 //Q.y-=10; 194 if(Q[0].score<=15)//分数大于15,增加难度,火箭出现,云条移动速度变为4 195 Q[1].score=2; 196 else if(Q[0].score>15&&y[0].y==460) 197 Q[1].score=4; 198 } 199 closegraph();//关闭图像环境 200 return 0; 201 }
效果图:
转载请注明原出处,谢谢!
时间: 2024-10-03 21:57:31