C/C++,彩色图像小游戏。
这里声明,这个游戏是由本人,在大一暑假自作的第二个小游戏,转载请注明原帖地址,谢谢!
所有图片都是我一个人用ps搞出来的,比较简单.........毕竟不是学图像制作的,请体谅!另外,图片
不放出来了要运行此程序一定要去下载ege库,因为要用到里面的一个函数库graphics,下载好了,
在项目->属性->配置属性->C/C++处添加库目录即可。
玩法是:主角做自由落体运动,不能让它掉到底线,要按左右按键使它站在上升的云条上面,这样
就能跟着上升,但是不能超过顶线,也不能越过左右边界,否则都是输。分数达到一定程度,难度会增加
一个出现火箭,另一个是云条上升速度增加!
里面有详细的注释,将不再一一讲解,不懂请评论提出。
#include<graphics.h>//这个是外部的函数库,图形库ege里面的,百度即可下载,这个函数库比win 的api 容易很多
#include<stdlib.h>
#include<time.h>
class zhujue//角色基类,主角
{
public:
void jiemian(PIMAGE image);//界面函数
void load(PIMAGE image);//加载界面函数
void judge(zhujue Q[],PIMAGE image);//撞墙判断函数
void rocket(zhujue Q[],PIMAGE image);//火箭出现函数
int x,y;
int temp,score;
};
class yun:public zhujue//公开继承子类
{
public:
void zaoyun(yun y[],PIMAGE image,int a);//制造云条函数
void PanDuan(yun y[],zhujue Q[],PIMAGE image);//判断是否站在云条上面函数
void panduan(yun y[],zhujue Q[],PIMAGE image,PIMAGE image1);//判断是否撞火箭函数
void Score(zhujue Q[],yun y[]);//分数显示函数
int x,y;
};
void zhujue::jiemian(PIMAGE image)
{
putimage(,0.5,image);
}
void zhujue::load(PIMAGE image)//加载出示画面的图片函数
{
PIMAGE img9=newimage();
getimage(image,"图片包\\19.jpg");//函数getimage,获取图片,第一个参数是传入的PIMAGE 变量,第二个是路径
putimage(,,image);//加载简介图片
//Sleep(10000);//系统延迟10秒
}
void yun::zaoyun(yun y[],PIMAGE image,int a)//制造云条
{
if(y[a].x<)//防止重复产生x
y[a].x=rand()%+;//随机产生x
putimage(y[a].x,y[a].y+*a,image);//显示云条,在特定的位置显示出图片
if(y[a].y+*a<=-)//云条到顶
{
y[a].y=-*a;//重新赋值y
y[a].x=;//重新赋值x
}
}
void yun::PanDuan(yun y[],zhujue Q[],PIMAGE image)//判断是否站在云条上
{
for(int i=;i<=;i++)//遍历坐标的判断
{
if((y[i].x<=Q[].x&&Q[].x<=y[i].x+&&Q[].y+<=y[i].y+*i&&Q[].y+>=y[i].y--Q[].score+*i)||
(y[i].x<=Q[].x+&&Q[].x+<=y[i].x+&&Q[].y+<=y[i].y+*i&&Q[].y+>=y[i].y--Q[].score+*i))
{
if(Q[].temp==)//对左右面图像的输出判断。这里是用来当用户按左右键时,输出不同的图片
putimage(Q[].x,Q[].y,image);//temp==0,左边
else
putimage(Q[].x,Q[].y,image);
Q[].y-=*Q[].score;//控制角色y上升
//Q.score++;
}
else //不满足站在云条条件时,输出角色图像,与上面不同的是,角色的y不会上升,即没站的效果
{
if(Q[].temp==)
putimage(Q[].x,Q[].y,image);
else
putimage(Q[].x,Q[].y,image);
}
}
}
void yun::Score(zhujue Q[],yun y[])
{
for(int i=;i<=;i++)
{
if(Q[].y==y[i].y+*i||Q[].y==y[i].y+*i+)
Q[].score++;
}
setcolor(BLUE);//设置字体颜色,这个是graphics 里面的,后面都是
setfontbkcolor(WHITE);//背景颜色
setfont(-,,"幼圆");//字体大小和类型
xyprintf(,,"%d",Q[].score);//在特定的坐标处显示出分数
}
void zhujue::judge(zhujue Q[],PIMAGE image)
{
if(Q[].x<||Q[].x+>||Q[].y+<||Q[].y>)//所有撞墙条件的判断
{
putimage(,,image);//失败图像输出
getch();//等待输入键
getch();
Q[].score=;//分数清零
}
}
void zhujue::rocket(zhujue Q[],PIMAGE image)//产生火箭
{
if(Q[].x<)
Q[].x=rand()%+;
if(Q[].temp==)
{
putimage(Q[].x,Q[].y,image);//输出火箭图片,前两个参数是坐标
Q[].y-=*Q[].score;
}
if(Q[].y<=)
{
Q[].y=;
Q[].x=;
}
}
void yun::panduan(yun y[],zhujue Q[],PIMAGE image,PIMAGE image1)//角色与火箭的碰撞
{
for(int i=;i<=;i++)//对火箭全面碰撞判断
{
if(Q[].x==Q[].x+i&&Q[].y+>=Q[].y+&&Q[].y<=Q[].y+)
{putimage(,,image);putimage(Q[].x,Q[].y,image1);
xyprintf(,,"%d",Q[].score);
getch();getch();getch();Q[].score=;}
if(Q[].x+==Q[].x+i&&Q[].y+>=Q[].y+&&Q[].y<=Q[].y+)
{putimage(,,image);putimage(Q[].x,Q[].y,image1);
xyprintf(,,"%d",Q[].score);
getch();getch();getch();Q[].score=;}
}
}
int main()
{
int d=,f=;//控制台的长、宽
initgraph(&d,&f,"//tc");//开始的动画
initgraph(,);//游戏窗口大小定义,初始化图像环境
HWND hWnd = getHWnd(); // 获得窗口句柄
SetWindowText(hWnd, TEXT("云端漂移小游戏"));// 使用 API 函数修改窗口名称
zhujue Q[];//两个主角类对象
Q[].x=,Q[].y=;//初始化主角的初始位置,以坐标来表示
Q[].temp=,Q[].score=,Q[].score=;//初始化开始的分数,面向左边,云条上升速度,2像素
Q[].x=,Q[].y=,Q[].temp=;
yun y[];
PIMAGE img=newimage();//创建图片对象,变量,要用到多少张图片就建多少个
PIMAGE img1=newimage();
PIMAGE img2=newimage();
PIMAGE img3=newimage();
PIMAGE img5=newimage();
PIMAGE img6=newimage();
PIMAGE img7=newimage();
PIMAGE img8=newimage();
PIMAGE img4=newimage();
PIMAGE img9=newimage();
getimage(img4,"图片包\\14.jpg");//获取图片
getimage(img,"图片包\\10.jpg");
getimage(img1,"图片包\\11.jpg");
getimage(img2,"图片包\\12.jpg");
getimage(img3,"图片包\\13.jpg");
getimage(img5,"图片包\\15.jpg");
getimage(img6,"图片包\\16.jpg");
getimage(img7,"图片包\\17.jpg");
getimage(img8,"图片包\\18.jpg");
getimage(img9,"图片包\\19.jpg");
//putimage(200,95,img);
for(int i=;i<=;i++)//初始化5条云条的位置
{
y[i].x=;
y[i].y=;
}
srand((unsigned)time(NULL));//随机种子
Q[].load(img9);//开头的图片输出
for(;is_run();y[].y-=Q[].score,y[].y-=Q[].score,y[].y-=Q[].score,y[].y-=Q[].score,
y[].y-=Q[].score,y[].y-=Q[].score,Q[].y+=Q[].score,delay_fps())//云条速度控制
{
//putimage(Q.x,Q.y,img5);
//cleardevice(); Q[].jiemian(img4);
y[].zaoyun(y,img,);//制造云
y[].zaoyun(y,img1,);
y[].zaoyun(y,img2,);
y[].zaoyun(y,img3,);
y[].zaoyun(y,img2,);
y[].zaoyun(y,img,);
if(Q[].temp==)//control the 图像的朝向面
y[].PanDuan(y,Q,img5);
else
y[].PanDuan(y,Q,img6);
y[].panduan(y,Q,img8,img7);
if(keystate(VK_LEFT)==)//是否有左按键
{
Q[].x-=;
Q[].temp=;
}
else if(keystate(VK_RIGHT)==)//右
{
Q[].x+=;
Q[].temp=;
}
//Q.score1(Q,y);
y[].Score(Q,y);
Q[].judge(Q,img8);
if(Q[].score>=)//分数控制条件
Q[].temp=;
Q[].rocket(Q,img7);
//Q.y-=10;
if(Q[].score<=)//分数大于15,增加难度,火箭出现,云条移动速度变为4
Q[].score=;
else if(Q[].score>&&y[].y==)
Q[].score=;
}
closegraph();//关闭图像环境
return ;
}
效果图:



转载请注明原出处,谢谢!
C/C++,彩色图像小游戏。的更多相关文章
- jQuery实践-网页版2048小游戏
▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...
- 拼图小游戏之计算后样式与CSS动画的冲突
先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...
- 推荐10款超级有趣的HTML5小游戏
HTML5的发展速度比任何人的都想像都要更快.更加强大有效的和专业的解决方案已经被开发......甚至在游戏世界中!这里跟大家分享有10款超级趣味的HTML5游戏,希望大家能够喜欢! Kern Typ ...
- 如何开发一个简单的HTML5 Canvas 小游戏
原文:How to make a simple HTML5 Canvas game 想要快速上手HTML5 Canvas小游戏开发?下面通过一个例子来进行手把手教学.(如果你怀疑我的资历, A Wiz ...
- JavaScript版拼图小游戏
慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...
- C语言-纸牌计算24点小游戏
C语言实现纸牌计算24点小游戏 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节 ...
- Cocos2d-x 版本小游戏 《是男人就下100层》 项目开源
这个是很久就开始动手写的一个小游戏了,直到最近才把它收尾了,拖拖拉拉的毛病总是很难改啊. 项目是基于 cocos2d-x v2.2 版本 ,目前只编译到了 Win8 平台上,并且已经上传到了商店,支持 ...
- Chrome 中的彩蛋,一款小游戏,你知道吗?
今天看到一篇文章,介绍chrome中的彩蛋,带着好奇心进去看了一眼,没想到发现了一款小游戏,个人觉得还不错,偶尔可以玩一下,放松放松心情!^_^ 当 Chrome 无法连接到互联网时, 或者上着网突然 ...
- 软件工程:黄金G点小游戏1.0
我们要做的是黄金G点小游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值. ...
随机推荐
- Flask 重新认识
总是觉的学习东西有点猴子掰玉米的感觉.今天就重新再掰一次吧. Installation: 安装之前建议先安装virtualenv,这个东东是帮助你在多个python版本之间保持同步,不至于python ...
- css中关于居中的问题
居中是最常用的一种css格式,不同的居中方法适和不同的环境中,下面总结了几种常用的居中方法,你可以不用它,但是无论你是一个资深前端大牛,还是小小初学者,当你见到它的时候不认识它就是你的不对啦!!! h ...
- 方维 o2o app源码出售
方维 o2o app源码出售 方维o2oapp源码出售 1.本人官方5万购买,现把方维o2o app 源码低价出售: 2.包括网站源码本地搭建包成功提供指导 3.包括网站说明文档,不包含app说明文档 ...
- c#控制打印机杂项
因项目中需要用到控制打印机的相关信息,此贴将网络寻找的资料做了些整理 1. C# 如何设置系统的默认打印机 using System.Runtime.InteropServices; [DllIm ...
- TCP和UDP的区别
(1)TCP是面向连接的传输控制协议,而UDP提供了无连接的数据报服务:(2)TCP具有高可靠性,确保传输数据的正确性,不出现丢失或乱序:UDP在传输数据前不建立连接,不对数据报进行检查与修改,无须等 ...
- HTML设计模式学习笔记
本周我主要学习了HTML的设计模式,现将我的学习内容总结如下: 一.盒模型的学习 CSS中有一种基础的设计模型叫做盒模型,它定义了元素是如何被看做盒子来解析的.我主要学习了六种盒模型,分别为内联盒模型 ...
- Eclipse自动补全设置
如果你用过Visual Studio的自动补全功能后,再来用eclipse的自动补全功能,相信大家会有些许失望. 但是eclipse其实是非常强大的,eclipse的自动补全没有VS那么好是因为ecl ...
- Logging with Log4net (二)
log4net 是.net 的一款日志记录框架. 它提供了很多的方法来帮助记录日志: 使用起来也比较方便: 选中项目,点击右键,然后选择 Manage NuGet Packages... 安装log4 ...
- 初识WEB:输入URL之后的故事
1. 概述2. HTTP请求过程3. 相关性能检测及优化手段4. 浏览器的呈现过程5. 浏览器的呈现引擎6. 引用及延伸阅读 概述 为什么输入www.cnblogs.com之后敲一个回车,浏览器就会显 ...
- 自己动手写一个简单的MVC框架(第二版)
一.ASP.NET MVC核心机制回顾 在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件. 在这个System.W ...