zoukankan      html  css  js  c++  java
  • C/C++,彩色图像小游戏。

          这里声明,这个游戏是由本人,在大一暑假自作的第二个小游戏,转载请注明原帖地址,谢谢!

    所有图片都是我一个人用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 }

    效果图:

    转载请注明原出处,谢谢!

  • 相关阅读:
    阅读计划
    第一课 课堂练习总结
    人月神话读后感
    软件工程概论11-软件演化
    【HDU4366】【DFS序+分块】Successor
    【转载】【元胞自动机】生命游戏(时间简史)
    【BZOJ2741】【块状链表+可持久化trie】FOTILE模拟赛L
    【BZOJ3295】【块状链表+树状数组】动态逆序对
    【HDU4391】【块状链表】Paint The Wall
    【POJ2887】【块状链表】Big String
  • 原文地址:https://www.cnblogs.com/linguanh/p/4146181.html
Copyright © 2011-2022 走看看