ege图形库基本说明

合集下载

SOLIDEGE同步建模技术介绍

SOLIDEGE同步建模技术介绍

同步建模技术
如果我有一个构思,如何才能立刻捕捉到它?
利用或者不利用约束来创建设计 统一的二维和三维环境 在您习惯的工作的环境中进行智能的模型互操作 设计和修改,无需担心将来的使用 轻易地添加和控制尺寸和约束 设计单个零件或者在装配的环境中进行设计
© 2010. Siemens Industry Software Inc. All rights reserved
Page 4
Siemens Industry Software
基于历史树的顺序建模
特征树 特征就是一组命令的集合 特征树忠实纪录建模过程 具有严格的历史信息 多种编辑方法:编辑定义、编辑 轮廓、动态编辑 编辑以后,需要重新生成
10-Variable Design.wmv
© 2010. Siemens Industry Software Inc. All rights reserved
© 2010. Siemens Industry Software Inc. All rights reserved
Page 18
Siemens Industry Software
创新过程中遇到的挑战
当我的构思变化时,如何 才能迅速变更我的设计?
不需要重新建模 任何人都能够变更任何模型 更新前不需要刻意检查 在数秒内完成工程变更单
© 2010. Siemens Industry Software Inc. All rights reserved
Page 2
Siemens Industry Software
基于历史树的顺序建模
基于Windows 平台 实体与曲面共存,保证数据一致 采用Office 2007风格,较少培训周期 智能向导,提高设计效率 特征树结构,方便查找建模过程

【dev Cpp新手请进】dev导入ege图形库

【dev Cpp新手请进】dev导入ege图形库

【dev Cpp新手请进】dev导入ege图形库2017-02-11 15:55690人阅读评论(0)收藏举报分类:其他(1)版权声明:本文为博主原创文章,未经博主允许不得转载。

某小白说她按网上的教程,往devCpp里导入的ege不能用,弄了好半天都没弄好,遂向我求救。

于是简单了解了下,发现了一些问题,是网上现有教程没有说清楚的,在帮其解决完问题后,顺手写篇博,希望能帮助到其他有此问题的朋友。

本文主要面向新手,所以先顺便介绍一下ege到底是什么?EGE(Easy Graphics Engine),是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向C/C++语言新手的图形库,它的目标也是为了替代TC的BGI库而存在。

它的使用方法与TC中的graphics.h相当接近,对新手来说,简单,友好,容易上手,免费开源,而且因为接口意义直观,即使是之前完全没有接触过图形编程的,也能迅速学会基本的绘图。

目前,EGE图形库已经完美支持VC6,VC2008, VC2010,VC2012,其中vc2008/2010/2012支持编译出64位应用程序同时也支持C-Free, DevCpp, Code::Blocks, codelite,wxDev, Eclipse for C/C++等IDE,即支持使用MinGW 或者MinGW64为编译环境的IDE。

如果你需要在VC下使用graphics.h,那么ege将会是很好的替代品。

导入流程:1.安装dev,并下载ege图形库ege官网2.找到devCpp的安装目录,不知道的话,打开dev,找到菜单栏里的工具——编译选项——目录,如下图3.然后将ege 文件夹里的include文件夹里的文件复制到dev安装目录下的include文件夹里,将ege里面的lib文件夹(里面有多个版本,本人使用的是4.81版本)下对应版本的文件夹里的.a文件复制到dev下的lib文件夹里。

C++实现坦克大战小游戏EGE图形界面

C++实现坦克大战小游戏EGE图形界面

C++实现坦克⼤战⼩游戏EGE图形界⾯C++ EGE 实现坦克⼤战⼩游戏,供⼤家参考,具体内容如下因为有过⼀次⽤EGE写⼩游戏的经验,所以这⼀次写坦克⼤战快了很多。

并且使⽤对象编程也简化了很多编程时繁琐的步骤。

写出坦克⼤战使我在学习编程的道路上⼜迈出了⼀⼤步。

如果您需要图⽚素材的,我可以单独发给您。

技术环节:编译环境:Windows VS2019需求:控制坦克移动发射炮弹,炮弹可以消灭敌军坦克,且可以消灭砖块。

坦克遇到⽅块会被挡住。

敌军消灭我军三次或基地被毁则游戏失败,共摧毁⼗次敌⽅坦克游戏胜利。

思路:先写出坦克的⽗类,我⽅坦克类和敌⽅坦克类继承坦克⽗类,实例化我⽅坦克和敌⽅坦克。

地图使⽤list容器存储。

在代码注释中标注了每⼀步是怎么实现的。

注意:因为我在程序中⽤了⼀些不规范的写法,所以要在VS中正常编译运⾏,需要右键源⽂件->属性->C/C+±>符合模式,改为否。

包含<graphics.h>图形库需要提前配置EGE图形库。

如要在其他graphics图形库下编译,可能需要修改某些地⽅。

运⾏效果:代码:#include <graphics.h> //图形库#include <ctime> //time();#include <list> //list容器using namespace std; //标准命名空间 list等//设置图⽚对象中图⽚的宽⾼全局函数//参数:宽、⾼、对象名void setimage(int pwidth, int pheight, PIMAGE img_1);//地图全局结构struct mapstr{int m_x; //xy坐标int m_y;int prop; //属性};//地图类class Mymap{private:list<mapstr> listmap; //地图容器,存储全地图信息,全地图1350个20*20的格⼦public://设置地图Mymap(){mapstr temp;//构造函数为链表容器中的地图赋值//全地图横向45个格⼦竖向30个格⼦//基地部分{temp.prop = 0;for (int i = 0; i < 4; i++) { temp.m_x = 380 + i * 20; temp.m_y = 540; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 380 + i * 20; temp.m_y = 520; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 380; temp.m_y = 560 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 360; temp.m_y = 520 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 440; temp.m_y = 560 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 460; temp.m_y = 520 + i * 20; listmap.push_back(temp); }temp.prop = 4, temp.m_x = 400, temp.m_y = 560; listmap.push_back(temp);}//左上⾓部分{temp.prop = 0;//左上⾓单独砖块for (int i = 0; i < 2; i++) { temp.m_x = 40 + i * 20; temp.m_y = 80; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 40 + i * 20; temp.m_y = 100; listmap.push_back(temp); }//竖铁块for (int i = 0; i < 4; i++) { temp.m_x = 160; temp.m_y = i * 20; temp.prop = 1; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 180; temp.m_y = i * 20; listmap.push_back(temp); }//砖块for (int i = 0; i < 4; i++) { temp.m_x = 160; temp.m_y = 160 + i * 20; temp.prop = 0; listmap.push_back(temp); } for (int i = 0; i < 4; i++) { temp.m_x = 180; temp.m_y = 160 + i * 20; listmap.push_back(temp); }//草块for (int i = 0; i < 4; i++) { temp.m_x = 0; temp.m_y = 200 + i * 20; temp.prop = 2; listmap.push_back(temp); } for (int i = 0; i < 4; i++) { temp.m_x = 20; temp.m_y = 200 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 40 + i * 20; temp.m_y = 240; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 40 + i * 20; temp.m_y = 260; listmap.push_back(temp); }}//中上部分{//铁块for (int i = 0; i < 2; i++) { temp.m_x = 320; temp.m_y = i * 20; temp.prop = 1; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 340; temp.m_y = i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 280 + i * 20; temp.m_y = 160; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 280 + i * 20; temp.m_y = 180; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 400 + i * 20; temp.m_y = 200; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 400 + i * 20; temp.m_y = 220; listmap.push_back(temp); }//砖块for (int i = 0; i < 4; i++) { temp.m_x = 320; temp.m_y = 40 + i * 20; temp.prop = 0; listmap.push_back(temp); } for (int i = 0; i < 4; i++) { temp.m_x = 340; temp.m_y = 40 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 240; temp.m_y = 200 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 260; temp.m_y = 200 + i * 20; listmap.push_back(temp); }}//右上部分for (int i = 0; i < 4; i++) { temp.m_x = 480; temp.m_y = 40 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 500; temp.m_y = 40 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 480; temp.m_y = 160 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 500; temp.m_y = 160 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 600; temp.m_y = 40 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 620; temp.m_y = 40 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 600; temp.m_y = 160 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 620; temp.m_y = 160 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 6; i++) { temp.m_x = 680 + i * 20; temp.m_y = 200; listmap.push_back(temp); }for (int i = 0; i < 6; i++) { temp.m_x = 680 + i * 20; temp.m_y = 220; listmap.push_back(temp); }for (int i = 0; i < 6; i++) { temp.m_x = 760; temp.m_y = 0 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 6; i++) { temp.m_x = 780; temp.m_y = 0 + i * 20; listmap.push_back(temp); }//草块for (int i = 0; i < 6; i++) { temp.m_x = 560; temp.m_y = 160 + i * 20; temp.prop = 2; listmap.push_back(temp); } for (int i = 0; i < 6; i++) { temp.m_x = 580; temp.m_y = 160 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 520; temp.m_y = 160 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 540; temp.m_y = 160 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 860; temp.m_y = 80 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 880; temp.m_y = 80 + i * 20; listmap.push_back(temp); }//铁块for (int i = 0; i < 4; i++) { temp.m_x = 520 + i * 20; temp.m_y = 80; temp.prop = 1; listmap.push_back(temp); } for (int i = 0; i < 4; i++) { temp.m_x = 520 + i * 20; temp.m_y = 100; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 640 + i * 20; temp.m_y = 160; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 640 + i * 20; temp.m_y = 180; listmap.push_back(temp); }for (int i = 0; i < 6; i++) { temp.m_x = 800 + i * 20; temp.m_y = 200; listmap.push_back(temp); }for (int i = 0; i < 6; i++) { temp.m_x = 800 + i * 20; temp.m_y = 220; listmap.push_back(temp); }}//左下部分{//铁块for (int i = 0; i < 2; i++) { temp.m_x = i * 20; temp.m_y = 360; temp.prop = 1; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = i * 20; temp.m_y = 380; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 160; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 180; temp.m_y = 320 + i * 20; listmap.push_back(temp); }//砖块for (int i = 0; i < 12; i++) { temp.m_x = 40; temp.m_y = 360 + i * 20; temp.prop = 0; listmap.push_back(temp); } for (int i = 0; i < 12; i++) { temp.m_x = 60; temp.m_y = 360 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 40 + i * 20; temp.m_y = 280; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 40 + i * 20; temp.m_y = 300; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 160; temp.m_y = 400 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 180; temp.m_y = 400 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 160; temp.m_y = 560 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 180; temp.m_y = 560 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 240 + i * 20; temp.m_y = 240; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 240 + i * 20; temp.m_y = 260; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 280; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 300; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 320; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 340; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 360; temp.m_y = 400 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 380; temp.m_y = 400 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 400; temp.m_y = 400 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 420; temp.m_y = 400 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 440; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 460; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 480; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 500; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 520; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 540; temp.m_y = 320 + i * 20; listmap.push_back(temp); }//草块for (int i = 0; i < 10; i++) { temp.m_x = 200 + i * 20; temp.m_y = 280; temp.prop = 2; listmap.push_back(temp); } for (int i = 0; i < 10; i++) { temp.m_x = 200 + i * 20; temp.m_y = 300; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 200 + i * 20; temp.m_y = 320; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 200 + i * 20; temp.m_y = 340; listmap.push_back(temp); }}//右下部分{//砖块for (int i = 0; i < 8; i++) { temp.m_x = 600; temp.m_y = 320 + i * 20; temp.prop = 0; listmap.push_back(temp); } for (int i = 0; i < 8; i++) { temp.m_x = 620; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 560; temp.m_y = 520 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 580; temp.m_y = 520 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 600 + i * 20; temp.m_y = 560; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 600 + i * 20; temp.m_y = 580; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 680 + i * 20; temp.m_y = 520; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 680 + i * 20; temp.m_y = 540; listmap.push_back(temp); }for (int i = 0; i < 7; i++) { temp.m_x = 760 + i * 20; temp.m_y = 320; listmap.push_back(temp); }for (int i = 0; i < 7; i++) { temp.m_x = 760 + i * 20; temp.m_y = 340; listmap.push_back(temp); }for (int i = 0; i < 8; i++) { temp.m_x = 800; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 640; temp.m_y = 320 + i * 20; temp.prop = 1; listmap.push_back(temp); } for (int i = 0; i < 4; i++) { temp.m_x = 660; temp.m_y = 320 + i * 20; listmap.push_back(temp); }for (int i = 0; i < 2; i++) { temp.m_x = 680; temp.m_y = 320 + i * 20; temp.prop = 1; listmap.push_back(temp); } for (int i = 0; i < 2; i++) { temp.m_x = 700; temp.m_y = 320 + i * 20; temp.prop = 1; listmap.push_back(temp); } for (int i = 0; i < 4; i++) { temp.m_x = 820 + i * 20; temp.m_y = 480; listmap.push_back(temp); }for (int i = 0; i < 4; i++) { temp.m_x = 820 + i * 20; temp.m_y = 500; listmap.push_back(temp); }//草块for (int i = 0; i < 4; i++) { temp.m_x = 560; temp.m_y = 360 + i * 20; temp.prop = 2; listmap.push_back(temp); } for (int i = 0; i < 4; i++) { temp.m_x = 580; temp.m_y = 360 + i * 20; listmap.push_back(temp); }}}//显⽰地图void printmap(list<mapstr>& listmap){PIMAGE mapprop_0 = newimage();getimage(mapprop_0, "坦克⼤战完整素材\\砖块.png");setimage(20, 20, mapprop_0);PIMAGE mapprop_1 = newimage();getimage(mapprop_1, "坦克⼤战完整素材\\铁块.png");setimage(20, 20, mapprop_1);PIMAGE mapprop_2 = newimage();getimage(mapprop_2, "坦克⼤战完整素材\\草块.png");setimage(20, 20, mapprop_2);PIMAGE mapprop_4 = newimage();getimage(mapprop_4, "坦克⼤战完整素材\\⽼鹰_1.png");setimage(40, 40, mapprop_4);PIMAGE mapprop_5 = newimage();getimage(mapprop_5, "坦克⼤战完整素材\\⽼鹰_2.png");setimage(40, 40, mapprop_5);for (list<mapstr>::iterator it = listmap.begin(); it != listmap.end(); it++){switch (it->prop){case 0:putimage(it->m_x, it->m_y, mapprop_0);break;case 1:putimage(it->m_x, it->m_y, mapprop_1);break;case 2:putimage(it->m_x, it->m_y, mapprop_2);break;case 4:putimage(it->m_x, it->m_y, mapprop_4);break;case 5:putimage(it->m_x, it->m_y, mapprop_5);break;}}delimage(mapprop_0);delimage(mapprop_1);delimage(mapprop_2);delimage(mapprop_4);delimage(mapprop_5);}//获取地图容器list<mapstr> getmapves(){return listmap;}};//坦克⽗类class Tank{public:virtual void move(const list<mapstr>& tempves) = 0; //坦克移动函数int getlauch_x() //获取⼦弹x坐标{return b_m_x;}int getlauch_y() //获取⼦弹y坐标{}void setlauch_xy() //设置⼦弹坐标{b_m_x = m_x + 18; //重置位置为坦克中间b_m_y = m_y + 18;key1 = key2; //key1 = key2避免炮弹⼀直发射}int getTank_x() //获取坦克x坐标{return m_x;}int getTank_y() //获取坦克y坐标{return m_y;}char getkey2() //返回发射时的坦克⽅向信息{return key2;}//坦克攻击⼦弹位置爆炸void exploed(){PIMAGE explimg_1 = newimage();getimage(explimg_1, "坦克⼤战完整素材\\爆炸效果1.png");setimage(10, 10, explimg_1);PIMAGE explimg_2 = newimage();getimage(explimg_2, "坦克⼤战完整素材\\爆炸效果2.png");setimage(20, 20, explimg_2);PIMAGE explimg_3 = newimage();getimage(explimg_3, "坦克⼤战完整素材\\爆炸效果3.png");setimage(40, 40, explimg_3);PIMAGE explimgarr[3] = { explimg_1, explimg_2, explimg_3 }; for (int i = 0; i < 3; i++){if (key2 == 'd' || key2 == 'a')//根据坦克的攻击朝向确定爆炸的位置 putimage(b_m_x, b_m_y - 6 * i, explimgarr[i]);elseputimage(b_m_x - 6 * i, b_m_y, explimgarr[i]);delay_fps(42);}delimage(explimg_1);delimage(explimg_2);delimage(explimg_3);}//构造函数Tank(){m_x = 0; m_y = 0;m_health = 0; m_damage = 0;path_1 = NULL; path_2 = NULL;path_3 = NULL; path_4 = NULL;b_m_x = 0; b_m_y = 0;key1 = '0'; key2 = '0';}protected://从⽂件中获取坦克图⽚void gettank(const char *path){PIMAGE tankimg = newimage(); //创建图⽚对象getimage(tankimg, path); //在⽂件中获取图⽚到图⽚对象setimage(40, 40, tankimg); //设置图⽚对象⼤⼩putimage(this->m_x, this->m_y, tankimg);//在坐标处输出图⽚delimage(tankimg); //释放图⽚对象}//输出显⽰坦克void printtank(const char key2){//根据当前的键值,输出坦克switch (key2){case 'w':gettank(path_1); break; //输出坦克case 's':gettank(path_2); break;case 'a':gettank(path_4); break;}}//发射⼦弹void launch(){printtank(key2);setfillcolor(WHITE);switch (key2){case 'w':b_m_y -= 10;bar(b_m_x, b_m_y, b_m_x + 4, b_m_y + 8);break;case 'a':b_m_x -= 10;bar(b_m_x, b_m_y, b_m_x + 8, b_m_y + 4);break;case 's':b_m_y += 10;bar(b_m_x, b_m_y, b_m_x + 4, b_m_y + 8);break;case 'd':b_m_x += 10;bar(b_m_x, b_m_y, b_m_x + 8, b_m_y + 4);break;}//⼦弹越界⽬标则⼦弹坐标刷新if (b_m_x >= 900 || b_m_x <= 0 || b_m_y >= 600 || b_m_y <= 0)setlauch_xy(); //重置⼦弹位置}int m_x; //坦克xy坐标int m_y;int m_health; //坦克⾎量int m_damage; //⼦弹伤害量char* path_1; //四张不同⽅向的坦克图⽚,由派⽣类决定图⽚路径char* path_2;char* path_3;char* path_4;int b_m_x; //⼦弹坐标xyint b_m_y;char key1; //⽤于接收键盘信息char key2; //⽤于存储上⼀条键值,也是发射时的坦克的朝向};//游戏失败结束全局函数在⽣命为0 和基地被攻击时调⽤void gameoverfalse(){cleardevice();PIMAGE gameoverbackimg = newimage();getimage(gameoverbackimg, "坦克⼤战完整素材\\游戏结束背景.jpg");setimage(900,600,gameoverbackimg);putimage(0, 0, gameoverbackimg); //输出背景图⽚PIMAGE gameoverimg = newimage();getimage(gameoverimg, "坦克⼤战完整素材\\游戏结束.png");setimage(200, 200, gameoverimg);putimage_withalpha(NULL, gameoverimg, 350, 200); //透明格式输出游戏结束图⽚ delimage(gameoverbackimg);delimage(gameoverimg); //释放内存getch();getch();}//我⽅坦克,可被操控移动class TankFriend :public Tank{private:int Fridienum = 0;public://构造函数初始化坦克坐标TankFriend(){m_health = 100; //坦克⾎量m_damage = 90; //坦克伤害b_m_x = m_x + 18;b_m_x = m_x + 18;path_1 = "坦克⼤战完整素材\\⼰⽅坦克上.png"; //赋值需要将源⽂件属性语⾔中符合模式改为否 path_2 = "坦克⼤战完整素材\\⼰⽅坦克下.png";path_3 = "坦克⼤战完整素材\\⼰⽅坦克左.png";path_4 = "坦克⼤战完整素材\\⼰⽅坦克右.png";key1 = 'w'; //初始化key1⽤于输出初始的坦克}int getTankdamage() //获取坦克伤害{return m_damage;}int getTankhealth() //获取坦克⾎量{return m_health;}void setTankhealth(const int health) //设置坦克⾎量{m_health = health;}int getFridienumfun() //获取我⽅坦克被消灭次数{return Fridienum;}//坦克被操控移动virtual void move(const list<mapstr>& tempves){if (key1 != 'j')key2 = key1; //key2记录上⼀个key1的值if (kbhit()){//⽤临时变量接收键值,如果键值为wasdj中的⼀个则赋给使⽤的变量char tempkey = getch();switch (tempkey){case 'w': case 'a':case 's': case 'd':case 'j':key1 = tempkey;break;//接收的键盘值不是wasdj直接returndefault:return;}//判断坦克撞墙情况,坦克撞墙可以改变⽅向,但不会移动坐标for (list<mapstr>::const_iterator it = tempves.begin(); it != tempves.end(); it++){switch (tempkey){//这⾥的⼤于⼩于号⼀个都不能错case 'w':if ((//判断坦克原xy点(m_x >= it->m_x && m_x < it->m_x + 20) && (m_y - 20 == it->m_y) ||//判断坦克右xy点(m_x + 40 > it->m_x&& m_x + 40 <= it->m_x + 20) && (m_y - 20 == it->m_y))//判断⽅块属性&& (it->prop == 0 || it->prop == 1)//判断地图边界范围|| (m_y - 20 < 0))return;break;case 'a':if ((//判断坦克原xy点(m_y >= it->m_y && m_y < it->m_y + 20) && (m_x - 20 == it->m_x) ||//判断坦克右xy点)//⽅块属性&& (it->prop == 0 || it->prop == 1)//判断地图边界范围|| (m_x - 20 < 0))return;break;case 's':if ((//判断坦克原xy点(m_x >= it->m_x && m_x < it->m_x + 20) && (m_y + 40 == it->m_y) ||//判断坦克右xy点(m_x + 40 > it->m_x&& m_x + 40 <= it->m_x + 20) && (m_y + 40 == it->m_y) )//判断⽅块属性&& (it->prop == 0 || it->prop == 1)//判断地图边界范围|| (m_y + 60 > 600))return;break;case 'd':if ((//判断坦克原xy点(m_y >= it->m_y && m_y < it->m_y + 20) && (m_x + 40 == it->m_x) ||//判断坦克右xy点(m_y + 40 > it->m_y&& m_y + 40 <= it->m_y + 20) && (m_x + 40 == it->m_x) )//⽅块属性&& (it->prop == 0 || it->prop == 1)//判断地图边界范围|| (m_x + 60 > 900))return;break;}}//根据key1值修改坦克坐标switch (key1){case 'w':m_y -= 20; break;case 'a':m_x -= 20; break;case 's':m_y += 20; break;case 'd':m_x += 20; break;}}//如果键值为j则发射炮弹,如果键值为wasd则移动坦克if (key1 == 'j')launch();else{printtank(key1); //根据键值输出显⽰坦克b_m_x = m_x + 18; //移动时也重置⼦弹坐标b_m_y = m_y + 18; //这⾥key1值不能重置为key2值}//如果我军坦克被消灭,则被消灭次数+1,并重置坦克if (m_health <= 0){Fridienum++;m_x = 300; //坐标m_y = 560;m_health = 100; //⾎量}}};//统计所有敌军坦克次数全局变量//敌军坦克class TankEnemy :public Tank{private:int pathsch; //路线⽅案int contdir;bool Entankdie = true; //标记敌军坦克的死亡状态public://构造函数接收初始坦克坐标TankEnemy(const int x ,const int y, const int pathsch) //构造函数初始化坦克坐标{m_x = x; //敌⽅坦克初始坐标m_y = y;b_m_x = m_x + 18; //坦克⼦弹坐标b_m_x = m_x + 18;m_health = 300; //坦克⾎量m_damage = 90; //坦克伤害contdir = 0;this->pathsch = pathsch; //路线path_1 = "坦克⼤战完整素材\\敌⽅坦克上.png"; //赋值需要将源⽂件属性语⾔中符合模式改为否 path_2 = "坦克⼤战完整素材\\敌⽅坦克下.png";path_3 = "坦克⼤战完整素材\\敌⽅坦克左.png";path_4 = "坦克⼤战完整素材\\敌⽅坦克右.png";gettank(path_1);//输出⼀个坦克图⽚}int getTankdamage() //获取坦克伤害{return m_damage;}int getTankhealth() //获取坦克⾎量{return m_health;}void setTankhealth(const int health) //设置坦克⾎量{m_health = health;}bool getEntadist() //获取坦克的死亡状态{return Entankdie;}void setpathsch(const int tanknum) //修改坦克⾏动路线{switch (tanknum) //判断坦克编号{case 1:pathsch = 5; //坦克1路线切换为路线2break;case 2:pathsch = 6;break;case 3:pathsch = 7;break;case 4:pathsch = 8;break;}}//重置坦克void setEntank(const int tanknum){if (Entankdie == false && (pathsch == 5 || pathsch == 6 || pathsch == 7 || pathsch == 8))return; //如果这个坦克的路线已经被修改过,且再次死亡,则不再重置switch (tanknum){case 1:m_x = 200, m_y = 40;contdir = 2;break;case 2:m_x = 720, m_y = 120;contdir = 3;break;case 3:m_x = 560, m_y = 120;break;case 4:m_x = 80, m_y = 360;contdir = 2;}m_health = 300;Entankdie = true;}//坦克1第⼆路线//直接攻击基地void pathschfun5_1_2(){static bool temp = true; //临时变量⽤作标记if(temp == true)contdir = 2;if (m_y == 560 && temp == true) //往右contdir = 4;if (m_y == 560 && m_x == 240){m_y = 560, m_x = 240;contdir = 0;temp = false;}}//坦克2路线2void pathschfun6_2_2(){//720, 120//需要改变两次⽅向static bool temp = true;static bool temp2 = true;if (temp == true && temp2 == true)contdir = 3; //往左if (m_x == 200 && temp == true && temp2 == true) //往下 contdir = 2;if (m_x == 200 && m_y == 560 && temp == true){contdir = 4; //往右temp2 = false;}if (m_y == 560 && m_x == 280){m_y = 560, m_x = 280;contdir = 0;temp = false;}}//坦克3路线2void pathschfun7_3_2(){static bool temp = true;if (temp == true)contdir = 2; //往下if (m_y == 560 && temp == true) //往左contdir = 3;if (m_y == 560 && m_x == 480){m_y = 560, m_x = 480;contdir = 0;temp = false;}}//坦克4路线2void pathschfun8_4_2(){static bool temp = true;if(temp == true)contdir = 2;if (m_y == 560 && temp == true)contdir = 4;if (m_x == 200 && m_y == 560){m_x = 200, m_y = 560;contdir = 0;temp = false;}}//正常路线1void pathschfun_1(){static bool temp = false; //临时变量辅助控制坦克⾏⾛路线 if (m_y == 480 && m_x == 200 && temp == true) //上{b_m_x = m_x + 18; //重置⼦弹位置为坦克中间b_m_y = m_y + 18;contdir = 1;return;}else if (m_y == 40 && m_x == 200) //下{b_m_x = m_x + 18;b_m_y = m_y + 18;contdir = 2;temp = false;return;}else if (m_y == 480 && m_x == 200 && temp == false) //右 {b_m_x = m_x + 18;b_m_y = m_y + 18;contdir = 4;temp = true;return;}else if (m_x == 700 && m_y == 480) //左{b_m_x = m_x + 18;b_m_y = m_y + 18;contdir = 3;return;}}//正常路线2void pathschfun_2(){if (m_x == 720){b_m_x = m_x + 18;b_m_y = m_y + 18;contdir = 3;return;}if (m_x <= 140){b_m_x = m_x + 18;b_m_y = m_y + 18;contdir = 4;return;}}//正常路线3void pathschfun_3(){if (m_y == 120){b_m_x = m_x + 18;b_m_y = m_y + 18;contdir = 2;return;}if (m_y >= 480){b_m_x = m_x + 18;b_m_y = m_y + 18;contdir = 1;return;}}//正常路线4void pathschfun_4(){if (m_y == 360){b_m_x = m_x + 18;b_m_y = m_y + 18;contdir = 2;return;}if (m_y >= 560){b_m_x = m_x + 18;b_m_y = m_y + 18;contdir = 1;return;}}//敌军坦克⾃动移动virtual void move(const list<mapstr>& tempves) {//根据contdir值,向不同⽅向移动switch (contdir){case 1:key2 = 'w'; //⽅向gettank(path_1); //坦克图⽚m_y -= 4;break;case 2:key2 = 's';gettank(path_2);m_y += 4;break;case 3:key2 = 'a';gettank(path_3);m_x -= 4;break;case 4:key2 = 'd';gettank(path_4);m_x += 4;break;}launch(); //发射⼦弹//不同pathsch不同路线⼀个坦克两条路线switch (pathsch){case 1: pathschfun_1(); break;case 2: pathschfun_2(); break;case 3: pathschfun_3(); break;case 4: pathschfun_4(); break;case 5: pathschfun5_1_2(); break;case 6: pathschfun6_2_2(); break;case 7: pathschfun7_3_2(); break;case 8: pathschfun8_4_2();}//敌军坦克被消灭//如果坦克⾎量⼩于等于0,则将坦克从界⾯内移除 if (m_health <= 0){Endienum++; //敌军坦克被消灭次数⾃增Entankdie = false; //死亡状态为falsem_x = -40,m_y = -40;//坦克被移除⾄页⾯外b_m_x = m_x, b_m_y = m_y;//⼦弹跟随坦克 }}};//敌军坦克数量const int N = 4;//⼦弹命中检测bool hittest(TankFriend& tank_f, TankEnemy* Etankarr, list<mapstr>& listmap) //参数:我⽅坦克对象,敌军坦克对象数组,地图list容器{const int tanfirlau_x = tank_f.getlauch_x(); //友军坦克⼦弹x坐标const int tanfirlau_y = tank_f.getlauch_y(); //友军坦克⼦弹y坐标const int firtank_x = tank_f.getTank_x(); //友军坦克x坐标const int firtank_y = tank_f.getTank_y(); //友军坦克y坐标const int tankfirdam = tank_f.getTankdamage(); //友军坦克伤害const int tankfirhea = tank_f.getTankhealth(); //友军坦克⾎量for (int i = 0; i < N; i++){//发射⼦弹需要判断两个点//如果友军⼦弹和敌军坦克重合,敌军坦克⾎量减少,且友军坦克⼦弹坐标重置if ((tanfirlau_x >= Etankarr[i].getTank_x() && tanfirlau_x <= Etankarr[i].getTank_x() + 40 &&tanfirlau_y >= Etankarr[i].getTank_y() && tanfirlau_y <= Etankarr[i].getTank_y() + 40) ||(tanfirlau_x + 4 >= Etankarr[i].getTank_x() && tanfirlau_x <= Etankarr[i].getTank_x() + 4 + 40 &&tanfirlau_y >= Etankarr[i].getTank_y() + 4 && tanfirlau_y + 4 <= Etankarr[i].getTank_y() + 40)){Etankarr[i].setTankhealth(Etankarr[i].getTankhealth() - tankfirdam); //⾎量减少tank_f.exploed(); //友⽅坦克攻击导致⼦弹遇到对⽅的位置爆炸tank_f.setlauch_xy(); //友军的炮弹坐标重置}//如果敌军⼦弹和友军坦克重合,友军坦克⾎量减少,且敌军坦克⼦弹坐标重置if ((Etankarr[i].getlauch_x() >= firtank_x && Etankarr[i].getlauch_x() <= firtank_x + 40 &&Etankarr[i].getlauch_y() >= firtank_y && Etankarr[i].getlauch_y() <= firtank_y + 40) ||(Etankarr[i].getlauch_x() + 4 >= firtank_x && Etankarr[i].getlauch_x() + 4 <= firtank_x + 40 &&Etankarr[i].getlauch_y() + 4 >= firtank_y && Etankarr[i].getlauch_y() + 4 <= firtank_y + 40)){tank_f.setTankhealth(tankfirhea - Etankarr[i].getTankdamage()); //友军坦克本⾝⾎量 - 敌军坦克伤害Etankarr[i].exploed();Etankarr[i].setlauch_xy(); //敌军的炮弹坐标重置}//判断墙的状态//包括我军坦克和敌军坦克⼦弹和墙的状态for (list<mapstr>::iterator it = listmap.begin(); it != listmap.end(); it++){//⼦弹碰到墙壁需要判断两个点if ((tank_f.getlauch_x() >= it->m_x && tank_f.getlauch_x() <= it->m_x + 20 &&tank_f.getlauch_y() >= it->m_y && tank_f.getlauch_y() <= it->m_y + 20) ||(tank_f.getlauch_x() + 4 >= it->m_x && tank_f.getlauch_x() + 4 <= it->m_x + 20 &&tank_f.getlauch_y() + 4 >= it->m_y && tank_f.getlauch_y() + 4 <= it->m_y + 20)){switch (it->prop){case 0: //砖块可以被删除tank_f.exploed(); //⼦弹处发⽣爆炸tank_f.setlauch_xy(); //⼦弹重置listmap.erase(it); //删除被⼦弹击中的墙壁数据break;case 1: //铁块会爆炸不会被删除tank_f.exploed(); //⼦弹处发⽣爆炸tank_f.setlauch_xy(); //⼦弹重置break;case 2: //草块不会有作⽤break;case 4:mapstr temp;temp.m_x = it->m_x;temp.m_y = it->m_y;temp.prop = 5;listmap.insert(it, temp);listmap.erase(it); //⽼鹰被攻击游戏结束return true;}//最后breakbreak;}if ((Etankarr[i].getlauch_x() >= it->m_x && Etankarr[i].getlauch_x() <= it->m_x + 20 &&Etankarr[i].getlauch_y() >= it->m_y && Etankarr[i].getlauch_y() <= it->m_y + 20) ||(Etankarr[i].getlauch_x() + 4 >= it->m_x && Etankarr[i].getlauch_x() + 4 <= it->m_x + 20 &&Etankarr[i].getlauch_y() + 4 >= it->m_y && Etankarr[i].getlauch_y() + 4 <= it->m_y + 20)){switch (it->prop){case 0: //砖块可以被删除Etankarr[i].exploed(); //⼦弹处发⽣爆炸Etankarr[i].setlauch_xy(); //⼦弹重置listmap.erase(it); //删除被⼦弹击中的墙壁数据break;case 1: //铁块会爆炸不会被删除。

Tarege TV 互联网娱乐产品说明

Tarege TV 互联网娱乐产品说明

Target TV 互联网高清播放器1.产品概述●基于Google TV操作系统,内置强大的全功能互联网浏览器,界面简洁友好●面向互联网的全新电视娱乐体验——点播或连接播放海量的互联网直播台,电影,电视剧,动漫,MTV音乐等●在线播放观看所有国内外的主流视频网站:优酷网,土豆网,搜狐高清,百度奇艺高清,等等●功能强大的本地硬盘高清播放,包括SATA硬盘、USB(硬)盘以及共享家庭电脑硬盘里面的高清影片、音乐和照片播放●全高清(1080p)和多种音视频媒体格式,超强的解码能力和兼容性●电视上网冲浪,电视Hao123网站导航,浏览各种丰富多彩的主流新闻,以及玩爽Java游戏等,也可上载或浏览家庭和好友的图片2.主要应用和内容2.1.电影●来自互联网的海量及无限量的海内外电影内容,世界上最大最佳的在线电影库●Goolge智能搜索质量最佳的电影库,同时用户可自由选择来自喜爱的视频网站●在线,快速,流畅平滑地播放互联网电影●可暂停,拖拉快进/后退,全新体验和欣赏互联网电影●简洁明快,非常友好的电视用户界面●节目源智能选择:很多影片可以从多个网站下载播放,此时可自动选择最佳质量片源;如果某影片不能播放,自动切到其他可播放的其他视频源2.2.电视剧●来自互联网的海量及无限量的海内外电视剧集,世界上最大最佳的在线电视剧库●Goolge智能搜索质量最佳的电视剧,同时用户可自由选择来自喜爱的视频网站●在线,快速,流畅平滑地播放互联网电视剧●在线可暂停,拖拉快进/后退,全新体验和欣赏电视剧●简洁明快,非常友好的电视用户界面;智能源选择功能同电影2.3.少儿动漫●来自互联网的海量及无限量的海内外动漫,世界上最大最优化的在线动漫库●Goolge智能搜索质量最佳的动漫影视剧,来自国内,日本,美国,等世界各国●精心筛选(父母)可控,最有少儿教育和娱乐的动漫内容●在线,快速,流畅平滑地播放动漫电影和电视剧;在线可暂停,拖拉快进/后退●全新,简洁明快,非常友好的电视用户界面2.4.MTV音乐●一个前所未有的,全新的,互联网电视上的在线MTV音乐台●来自互联网的海量及无限量的海内外MV音乐,世界上最大最动听的MTV音乐库●Goolge智能搜索质量最佳的MTV音乐,来自世界各地和各国的歌手●精彩无限,超强的电视MTV音乐台,可任意选择喜爱的MTV,也可无限轮播MTV●简洁明快,非常友好的MTV音乐电视界面●在线,快速,流畅平滑地播放MTV音乐;在线可暂停,拖拉快进/后退MTV2.5.公开课●一个全新的,互联网电视上的名校公开课在线频道●来自互联网上海量的海内外名校公开课,在电视上欣赏国际最顶尖的课程●Goolge智能搜索质量最佳的名校公开课,来自世界各地,各名校,及各名师●全新,简洁明快,非常友好的电视界面●在线,快速,流畅平滑地播放公开课内容;在线可暂停,拖拉快进/后退2.6.互联网●电视Hao123, 电视上网冲浪●电视上网和浏览网页的全新用户体验,在电视机边,就可浏览所有互联网新闻,财经,文化娱乐,淘宝购物等资讯●方便,舒服的使用方式,特别适合老年人;老少皆宜,共享互联网娱乐●入门级电脑(HTPC),替代不易操作的电脑,但具有同样的互联网功能和服务2.7.硬盘播放和家庭网络(PC)内容播放●界面友好炫酷的高清硬盘播放器●支持USB硬盘或内置SATA硬盘外设,播放各种媒体格式的高清音视频,图片等内容●通过家庭局域网络(路由器或者交换机)直接连接家庭电脑PC,浏览和播放电脑里的电影,电视,照片等●支持蓝光高清文件,轻松播放50M+以上码流的高清内容●支持全高清(1080p)和多种音视频媒体格式,超强的解码能力和兼容性3.产品技术和功能3.1.配置功能●视频配置在进入配置页面选择视频配置时,出现如下画面。

C语言EGE文件的说明

C语言EGE文件的说明

ege图形库的优点
★效率较好 特别在窗口锁定绘图模式下,640*480的半透明混合,可以直接使用 getpixel / putpixel 完成,并且优化后可以在大约1.5G CPU台式机器上达到60fps (60帧/秒)
★灵活性强 绘图可以直接针对一个PIMAGE,或者画在控件上,不必只能画在屏幕上
circle(200, 200, 100); // 画圆,圆心(200, 200),半径 100
getch(); // 暂停一下等待用户按键
closegraph(); // 关闭图形界面
return 0;
}
呵呵,很简单吧。更详细的请参阅ege文档。
ege的将来
★功能更多 支持拉伸贴图,支持图片旋转,支持透明半透明贴图,支持图像模糊滤镜操作,可以用对话框函数进行图形化的输入,可以方便地对帧率进行准确的控制,可以读取常见的流行的图片格式(bmp/jpg/png),可以保存图片为bmp或png格式。
★免费开源 本图形库为免费开源的图形库,你不但可以获取本图形库的全部源代码,你也可以参与到本图形库的开发,详情请联系作者misakamm
* E-Mail: mailto:misakamm[at gmail com]
* 详细帮助文档,在压缩包里的man目录下,用浏览器打开index.htm就可以看到了
*/
EGE图形库
EGE(Easy Graphics Engine),是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向C/C++语言新手的图形库,它的目标也是为了替代TC的BGI库而存在。它的使用方法与TC中的graphics.h相当接近,对新手来说,简单,友好,容易上手,免费开源,而且因为接口意义直观,即使是之前完全没有接触过图形编程的,也能迅速学会基本的绘图。 目前,EGE图形库已经完美支持VC6, VC2008, VC2010, C-Free, DevCpp, Code::Blocks, CodeLite, Dev-C++, Eclipse for C/C++等IDE,即支持使用MinGW为编译环境的IDE。如果你需要在VC下使用graphics.h,那么ege将会是很好的替代品。

(八)EGE高级绘图

(八)EGE高级绘图

(⼋)EGE⾼级绘图⽬录⾼级绘图抗锯齿EGE中带ege前缀的绘图函数⾼级函数使⽤准备(设置为ARGB颜⾊即可使⽤,抗锯齿可选)(1)设置ARGB颜⾊ARGB颜⾊的表⽰颜⾊设置(2)ege_enable_aa()开启抗锯齿设置⽰例注意事项⾼级绘图函数的使⽤颜⾊填充模式纹理图的⽣成与绘制⾼级绘图抗锯齿 抗锯齿(英语:anti-aliasing,简称AA),也译为边缘柔化、消除混叠、抗图像折叠有损等。

它是⼀种消除显⽰器输出的画⾯中图物边缘出现凹凸锯齿的技术,那些凹凸的锯齿通常因为⾼分辨率的信号以低分辨率表⽰或⽆法准确运算出3D图形坐标定位时所导致的图形混叠 (aliasing) ⽽产⽣的,反锯齿技术能有效地解决这些问题。

它通常被⽤在在数字信号处理、数字摄影、电脑绘图与数码⾳效及电⼦游戏等⽅⾯,柔化被混叠的数字信号。

EGE中带ege前缀的绘图函数 在EGE中,有些是⾼级绘图函数,这些函数绘图时是可以带抗锯齿效果的,⽽且可以绘制不同透明度的图形。

这些函数⼀般是以 ege 作为前缀,如 ege_fillrect, ege_line 等。

先来看看普通绘图函数和⾼级绘图函数绘制出带抗锯齿的图形有什么不同左边是普通绘图函数绘制的圆,右边是⾼级绘图函数绘制的圆,细看可以看到,普通绘图函数绘制的圆边缘带有锯齿,⽽⽤⾼级绘图函数绘制的圆边缘较为的光滑下⾯是直线的⽐较,上⾯是⽤普通函数绘制的直线,下⾯是⽤⾼级函数绘制的带抗锯齿的直线。

区别很明显。

下⾯则是⾼级绘图函数绘制出的带透明度的圆,可以看到,圆是透明的。

(当然,这张图⾥的圆没有开抗锯齿)⾼级函数使⽤准备(设置为ARGB颜⾊即可使⽤,抗锯齿可选)(1)设置ARGB颜⾊ARGB颜⾊的表⽰⾼级函数使⽤的颜⾊是 ARGB颜⾊所以如果你设置的RGB颜⾊,那么相当于alpha值等于0。

⽽alpha值为0相当于全透明,绘制的将会看不见。

ARGB颜⾊有⼏种等价的表⽰⽅法:⽤四个分量表⽰:EGEARGB(a, r, g, b);⽤⼀个alpha分量和⼀个RGB颜⾊表⽰: EGEACOLOR(a, rgbColor);直接⽤数值表⽰(⼀般是⼗六进制):0xAARRGGBBARGB颜⾊中的 alpha值范围是0~255, 设置为⼩于255时有透明效果,为255时是表⽰完全不透明,这时就RGB颜⾊等同,即EGEACOLOR(0xFF, RGBcolor) 等于 RGBcolor颜⾊设置调⽤ setbkcolor() , setcolor(), setfiilcolor() 来设置设置颜⾊要注意的是,⾼级绘图函数使⽤的是ARGB颜⾊,如果你使⽤RGB颜⾊,相当于alpha等于0,此时是完全透明的,图形就绘制不出来。

fortran中QuickWin绘图基础

1 QuickW‎in绘图基础‎QuickW‎i n支持以像‎素为基础的图‎形,其图形库包括‎了一套完整的‎图形函数集。

1.QuickW‎in应用程序‎QuickW‎i n图形库提‎供了MSFL‎I B.F90和MS‎F LIB.MOD两个文‎件,其中包括了访‎问所有图形函‎数的说明。

文件MSFL‎I B.F90中包含‎绘图子程序的‎定义及接口,文件MSFL‎I B.MOD中包含‎了图形过程符‎号常量说明以‎及与绘图过程‎相关的结构体‎的定义。

因此,任何使用Qu‎i ckWin‎的程序必须包‎含USEMS‎F LIB语句‎以访问Qui‎c kWin的‎图形库,USEMSF‎L IB语句应‎出现在任何声‎明语句和其他‎模块包含语句‎之前。

在默认情况下‎,QuickW‎in应用程序‎拥有一个框架‎主窗口和一个‎输出子窗口。

在主窗口中,有对子窗口及‎其图形和文本‎实施操作的菜‎单栏,其中,File菜单‎中的Save‎命令可以把绘‎图结果保存成‎*.BMP位图文‎件。

2.QuickW‎in应用程序‎的创建例1 创建显示正弦‎波形的Qui‎c kWin应‎用程序。

操作步骤如下‎:(1)在Micro‎s oft Develo‎p erStu‎d io中单击‎F ile菜单‎下的New菜‎单项,在New对话‎框中选择Pr‎o jectW‎o rkspa‎c e,单击OK按钮‎。

(2)在New Projec‎t Worksp‎ace对话框‎中,选择Quic‎k WinAp‎p licat‎i on,将工程名称设‎置为My_w‎i n,单击Crea‎t e按钮。

(3)在Micro‎s oft Develo‎p erStu‎d io中单击‎F ile菜单‎下的New菜‎单项,在New对话‎框中选择Te‎x tFile‎,单击OK按钮‎,在编辑区输入‎以下源程序:USE MSFLIB‎PARAME‎T ER(PI=3.141593‎)TYPE(QWINFO‎) winfoTYPE(WXYCOO‎R D) xyINTEGE‎R(2) result‎REAL aREAL(8) x,yCHARAC‎T ER C*4! 设置子窗口最‎大化winfo.type = QWIN$MAXresult‎= SETWSI‎Z EQQ(0, w info)result‎= SETWSI‎Z EQQ(QWIN$FRAMEW‎I NDOW, winfo)! 设置子窗口的‎背景色为白色‎result‎= SETBKC‎O LORRG‎B (#FFFFFF‎)CALL CLEARS‎C REEN ($GCLEAR‎S CREEN‎)! 设置绘图的颜‎色为黑色result‎= SETCOL‎O RRGB(#000000‎)! 设置视窗result‎= SETWIN‎D OW(.TRUE., -2*pi-1, 1.5, 2*pi+1, -1.5)! 绘制坐标轴x = 2*pi+0.5CALL MOVETO‎_W(-x, 0D0, XY)result‎= LINETO‎_W(x,0D0) ! 横轴y = 1.2CALL MOVETO‎_W(0D0, y, XY)RESULT‎= LINETO‎_W(0D0,-y) ! 纵轴! 坐标轴刻度RESULT‎=INITIA‎L IZEFO‎N TS()RESULT‎=SETFON‎T('h16w12‎i')DO i = -360, 360, 90x = pi*i/180-0.5CALL MOVETO‎_W(x, 0D0, XY)WRITE(c,"(I4)") iCALL OUTGTE‎X T(c)END DO! 绘制正弦曲线‎DO a = -360, 360, 0.5x = pi*a/180y = SIN(x)result‎=SETPIX‎E L_W(x, y)END DOREAD (*,*) ! 按回车键结束‎END(4)以文件名de‎m o.f90保存源‎程序,然后在Mic‎r osoft‎Develo‎p erStu‎d io中单击‎I nsert‎菜单下的Fi‎l es intoPr‎o ject菜‎单项,将Demo.f90文件加‎入到My_w‎i n工程中;(5)在Micro‎s oft Develo‎p erStu‎d io中分别‎单击Buil‎d菜单下的C‎o mpile‎、Build、Execut‎e菜单项,用以编译、生成并运行M‎y_win 文‎件。

UG模块功能介绍

UG模块功能介绍§UG/Gateway(UG入口)这个模块是UG的基本模块,包括打开、创建、存储等文件操作;着色、消隐、缩放等视图操作;视图布局;图层管理;绘图及绘图机队列管理;空间漫游,可以定义漫游路径,生成电影文件;表达式查询;特征查询;模型信息查询、坐标查询、距离测量;曲线曲率分析;曲面光顺分析;实体物理特性自动计算;用于定义标准化零件族的电子表格功能;按可用于互联网主页的图片文件格式生成UG零件或装配模型的图片文件,这些格式包括:CGM、VRML、TIFF、MPEG、GIF和JPEG;输入、输出CGM、UG/Paras olid等几何数据;Macro宏命令自动记录、回放功能;User Tools用户自定义菜单功能,使用户可以快速访问其常用功能或二次开发的功能。

§UG实体建模(UG/Solid Modeling)UG实体建模提供了草图设计、各种曲线生成、编辑、布尔运算、扫掠实体、旋转实体、沿导轨扫掠、尺寸驱动、定义、编辑变量及其表达式、非参数化模型后参数化等工具。

§UG/Features Modeling(UG特征建模)UG特征建模模块提供了各种标准设计特征的生成和编辑、各种孔、键槽、凹腔-- 方形、圆形、异形、方形凸台、圆形凸台、异形凸台、圆柱、方块、圆锥、球体、管道、杆、倒圆、倒角、模型抽空产生薄壁实体、模型简化(Simplify),用于压铸模设计等、实体线、面提取,用于砂型设计等、拔锥、特征编辑:删除、压缩、复制、粘贴等、特征引用,阵列、特征顺序调整、特征树等工具。

§UG/FreeFormModeling(UG自由曲面建模)UG具有丰富的曲面建模工具。

包括直纹面、扫描面、通过一组曲线的自由曲面、通过两组类正交曲线的自由曲面、曲线广义扫掠、标准二次曲线方法放样、等半径和变半径倒圆、广义二次曲线倒圆、两张及多张曲面间的光顺桥接、动态拉动调整曲面、等距或不等距偏置、曲面裁减、编辑、点云生成、曲面编辑。

新手入门『二』创建第一个EGE程序–EasyGraphicsEngine

新手入门『二』创建第一个EGE 程序–EasyGraphicsEngine1. 第一个图形窗口:第一个图形窗口C++12 3 4 5 6 7 8 9 10 11 12 1314#include <graphics.h> int main() { //初始化为640*480大小 initgraph(640, 480); //等待用户按键 getch(); //关闭图形界面 closegraph(); return 0; } 2. 简单作图:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 //第一个画图程序#include <graphics.h>int main(){initgraph(640, 480);//设置画图颜色,GREEN 是颜色常数,详细可以查graphics.h 对这个宏的定义的值setcolor(GREEN);//画一直线,从(100,100)到(500,200)//特别注意的是端点,(100,100)这个点会被画上颜色,但(500,200)不会画上颜色//以下所有的矩形(或者说两点)描述方式,总是前一个点取得到,但后一个点取不到line(100, 100, 500, 200);getch();closegraph();return 0;}19203. 色彩的计算:123 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1920//色彩的计算#include <graphics.h>int main(){initgraph(640, 480);//设置画图颜色,使用RGB 宏,三个参数值的范围均为0 - 255 (0xFF)//分别表示红色亮度,绿色亮度,蓝色亮度//EGERGB(0xFF, 0x0, 0x0) (纯红色) 等价于0xFF0000 setcolor(EGERGB(0xFF, 0x0, 0x0));//画一圆,圆心在(200,200),半径100circle(200, 200, 100);getch();closegraph();return 0;}4. 颜色的填充:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15//颜色填充 #include <graphics.h> int main() { initgraph(640, 480); //设置填充颜色,一般为图形内部颜色 setfillcolor(EGERGB(0xFF, 0x0, 0x80)); //画一实心矩形,范围为:x 坐标从50-300,y 坐标从100-200 bar(50, 100, 300, 200); getch(); closegraph(); return 0; }1617185. 图形边界和填充1234 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29303132//图形边界和填充 #include <graphics.h> int main() { initgraph(640, 480); //设置绘图颜色,一般用于边界 setcolor(EGERGB(0xFF, 0xFF, 0x0)); //设置填充颜色,一般为图形内部颜色 setfillcolor(EGERGB(0xFF, 0x0, 0x80)); //画一带填充的椭圆 fillellipse(200, 200, 150, 100); //画一个空心圆 circle(500, 300, 100); //再次设置填充颜色,用于决定下一函数填充的颜色 setfillcolor(EGERGB(0x80, 0x0, 0xFF)); //手工填充 //x,y 是开始填充的坐标,第三个参数是填充的边界颜色,或者说以这个颜色作为边界 //如果这个边界不封闭,那么会导致整个屏幕都是这个颜色 floodfill(500, 300, EGERGB(0xFF, 0xFF, 0x0)); getch(); closegraph(); return 0; } 6. 屏幕背景色:1 2 //屏幕背景色#include <graphics.h>3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2324252627282930int main(){initgraph(640, 480);//第一次设置背景色setbkcolor(EGERGB(0x0, 0x40, 0x0)); //浅绿色 setcolor(EGERGB(0xFF, 0xFF, 0x0));setfillcolor(EGERGB(0xFF, 0x0, 0x80));//画带填充的扇形sector(200, 200, 45, 135, 150, 100);getch();//按下一任意键后,再次改变背景色setbkcolor(EGERGB(0x0, 0x0, 0x40)); //浅蓝色 getch();closegraph();return 0;}//补充:另有setbkcolor_f 函数,它设置的是cleardevice 函数所使用的颜色,//所以要等到cleardevice 调用时,它的效果才会展现。

ege图形库基本说明

EGE基本说明本库是一个类似graphics.h的BGI图形库,使用方法相当接近,所以学习过TC 图形的话会很容易上手基本使用方法几乎和TC的一样,只要#include "graphics.h"就可以了本图形库目前支持VC6, VC2008, VC2010等IDE,同时也支持MinGW编译器和使用MinGW编译器的IDE(如Code::Blocks,C-Free,Dev-CPP,eclipse for C/C++)在graphics.h头文件的最顶处有相关的说明,并且附带较详细的pdf文档●为什么要写这个库?许多学编程的都是从 C 语言开始入门的,而目前的现状是:1. 有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。

2. 有些学校直接拿VC 来讲C 语言,因为VC 的编辑和调试环境都很优秀,并且VC 有适合教学的免费版本。

可惜在VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。

初学编程想要绘图就得用TC,很是无奈。

3. 还有计算机图形学,这门课程的重点是绘图算法,而不是Windows 编程。

所以,许多老师不得不用TC 教学,因为Windows 绘图太复杂了,会偏离教学的重点。

新的图形学的书有不少是用的OpenGL,可是门槛依然很高。

所以,我想给大家一个更好的学习平台,就是VC 方便的开发平台和TC 简单的绘图功能,于是就有了这个库。

如果您刚开始学 C 语言,或者您是一位教 C 语言的老师,再或者您在教计算机图形学,那么这个库一定会让您兴奋的。

另外:这个库不是为了给你直接移植BGI图形代码用的,直接移植多半是不能通过编译的。

如果真需要移植,请做相应的修改,或者使用高兼容性的ege老版本图形库●本图形库的优点:★绘图效率较好,特别在批量绘图模式下,640*480的半透明混合,可以直接使用getpixel / putpixel 完成,并且可以在大约1.5G CPU台式机器上达到60fps(要优化,否则一般的家用机再强也不行)★灵活性更强,绘图可以直接针对一个PIMAGE,不必只能画在屏幕上★功能更多,支持拉伸贴图,支持透明半透明贴图,支持图像模糊滤镜操作,可以用对话框函数进行图形化的输入★面向动画编程和游戏编程做了功能增强,可以方便地对帧率进行准确的控制★附带简单的3D矢量运算函数和类,便于3D计算★支持读写多种格式图片,支持读取bmp, jpg, png, gif,支持保存为bmp和png ★支持GUI模式编程●简要安装说明把include/graphics.h文件,复制到你的编译器安装目录下的include目录内再把lib目录下的文件,复制到你的编译器安装目录下的lib目录内,具体编译器所依赖的文件情况:VC6: graphics.libVS2008: graphics08.lib graphics08d.libVS2010: graphics08.lib graphics10d.libMinGW: libgraphics.a●简要使用说明目前模拟了绝大多数BGI 的绘图函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EGE基本说明本库是一个类似graphics.h的BGI图形库,使用方法相当接近,所以学习过TC 图形的话会很容易上手基本使用方法几乎和TC的一样,只要#inelude "graphics.h" 就可以了本图形库目前支持VC6, VC2008, VC2010等IDE,同时也支持Min GW编译器和使用MinGW编译器的IDE (如Code::Blocks , C-Free , Dev-CPP eclipse for C/C++) 在graphics.h 头文件的最顶处有相关的说明,并且附带较详细的pdf 文档•为什么要写这个库?许多学编程的都是从C 语言开始入门的,而目前的现状是:1. 有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。

2. 有些学校直接拿VC 来讲C 语言,因为VC 的编辑和调试环境都很优秀,并且VC 有适合教学的免费版本。

可惜在VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。

初学编程想要绘图就得用TC,很是无奈。

3. 还有计算机图形学,这门课程的重点是绘图算法,而不是Windows 编程。

所以,许多老师不得不用TC 教学,因为Windows 绘图太复杂了,会偏离教学的重点。

新的图形学的书有不少是用的OpenGL可是门槛依然很高。

所以,我想给大家一个更好的学习平台,就是VC 方便的开发平台和TC 简单的绘图功能,于是就有了这个库。

如果您刚开始学C 语言,或者您是一位教C 语言的老师,再或者您在教计算机图形学,那么这个库一定会让您兴奋的。

另外:这个库不是为了给你直接移植BGI 图形代码用的,直接移植多半是不能通过编译的。

如果真需要移植,请做相应的修改,或者使用高兼容性的ege老版本图形库•本图形库的优点:★绘图效率较好,特别在批量绘图模式下,640*480 的半透明混合,可以直接使用getpixel / putpixel 完成,并且可以在大约1.5G CPU台式机器上达到60fps (要优化,否则一般的家用机再强也不行)★灵活性更强,绘图可以直接针对一个PIMAGE不必只能画在屏幕上★功能更多,支持拉伸贴图,支持透明半透明贴图,支持图像模糊滤镜操作,可以用对话框函数进行图形化的输入★面向动画编程和游戏编程做了功能增强,可以方便地对帧率进行准确的控制★附带简单的3D矢量运算函数和类,便于3D计算★支持读写多种格式图片,支持读取bmp, jpg, png, gif ,支持保存为bmp和png★支持GUI模式编程•简要安装说明把in clude/graphics.h 文件,复制到你的编译器安装目录下的in elude目录再把lib目录下的文件,复制到你的编译器安装目录下的lib目录,具体编译器所依赖的文件情况:VC6: graphics.libVS2008: graphics08.lib graphics08d.libVS2010: graphics08.lib graphics10d.libMinGW: libgraphics.a•简要使用说明目前模拟了绝大多数BGI的绘图函数。

使用上,基本和TC / BC没太大区别看一个画圆的例子吧:#in clude "graphics.h" //int mai n(){in itgraph (640, 480); //circle (200, 200,100); //getch (); //closegraph (); //return 0;}呵呵,很简单吧。

•详细安装和使用方法,请看本文档的安装部分。

如果遇到问题,请直接在“ege娘”贴吧发主题帖子吧官方联系:misakamm[at]gmail[dot]点这里查看视频教程帖子,以下是文件说明: •简要安装说明首先把压缩包里include 目录下所有文件,复制到你的编译器安装目录下的include 目录,不管是哪个编译器比如,vc2008 的include 路径类似“ Microsoft Visual Studio include ”,而lib 路径类似“ Microsoft Visual Studio 9.0 lib ”,vc2010 和2008一样。

vc6 的话,是“ Microsoft Visual Studio Include ”和“ Microsoft Visual Lib”然后再把lib 目录下对应编译器名目录下的文件,复制到你的编译器安装目录下的lib 目引用ege图形库初始化,显示一个窗口,这里和TC略有区别画圆,圆心(200, 200),半径100暂停一下等待用户按键关闭图形界面录。

比如你的是vc6 ,那就把下的复制过去。

如果你还是不明白复制到哪里,那请看这个表达:copy "include\*.*" to "Microsoft Visual Studio 9.0\VC\include\" copy "lib\*.*" to "Microsoft Visual Studio 9.0\VC\lib\" 前面的"include\*.*" 是安装包里的文件复制了这些文件后,就已经安装完成了。

然后,如果是VC或者VS那么要建立一个工程以下是VC6的操作步骤(但VS2008/VS2010/VS2012也类似),请按以下步骤做:打开VC6后,新建一个Win 32 Con sole工程(菜单-> 文件-> 新建),如下图:右上角的工程名字写你喜欢的名字,其下方选择你要建立的工程的目录点确定后,在弹出的对话框里选择“一个空工程”,然后直接点完成。

然后再次新建,不过这次新建一个C++ Source File ,见下图:右边文件名写你喜欢建立的名字,然后点确定,就可以开始编写代码了最后,请编写如下测试代码检测你的设置是否正确:#include <graphics.h>int main(){initgraph (640, 480);setcolor ( GREE)N;line (100, 100, 500, 200);getch();closegraph ();return 0;}然后,按F7 键,或者点菜单上的Build (组建)来编译并,如果没有错误,就可以按F5运行了。

好了,为什么说VS2008和VS2010也类似呢?看看如下VS2008的截图你就明白了:后面建立文件的时候,在左侧的Ge neral就能找到C++源文件了。

如果你的是中文版,那就细心找找吧,不难找的。

至于VS2010的就不截图了,因为几乎和VS2008—样。

至于在Min GW下的编译问题,会麻烦一些,如果你懂使用命令行编译,那么需要用如下指令编译:g++ yourfile.cpp -lgraphics -lgdi32 -limm32 -lmsimg32 -lole32 -loleaut32 -lwinmm -luuid -mwindows其中yourfile.cpp 是你要编译的cpp 文件如果你使用的是IDE,那就要看那个IDE是如何设置的,这里无法一一列举,主要需要设置两样东西:一是建立Win32 Application 工程(目的是让它以-mwindows来编译,这个选项很重要)二是要添加库需要加入graphics, gdi32, imm32, msimg32, ole32, oleaut32, winmm, uuid 共8 个例如在Code::Blocks 下(需要建立project ),在菜单- Project - build options ,设置Linker 选项,如图:例如在C-Free5.0 下,则可以在菜单->构建->构建选项里,设置连接选项,如图:但是,如果你是以建立工程的方式建立,而不是建立单文件的话,或者你发现上面的设置无效,那你需要在菜单- 工程- 设置,在这设置连接选项此外,C-Free比较特殊的一点是,如果需要编译为Win32应用程序,那么要用Win Ma in来声明你的主函数,如:#include <graphics.h>int WinMain() // 这里在 graphics.h 里已经定义了宏自动把它展开成合法的声 明,以减免声明的麻烦,同时用来欺骗 C-Free{initgraph (640, 480);getch ();closegraph ();return 0;}又或者,如果你不喜欢这样,那就在选项里(即刚刚截图里的参数框里)手工加上-mwi ndows 也可使用预览使用上,基本和 Turbo C 没太大区别。

启动 Visual C++6.0 , 创建一个控制台项目( Win32 Console Application ),选择空项目, 然后新建 "C++ Source File" 项, 然后在那个 cpp 里写代码就行了。

看一个画圆的例子吧:#include "graphics.h" // int main()// 初始化为 640*480 大小的窗口,这里和 TC 略// 画圆,圆心 (200, 200) ,半径 100 // 等待用户按键,按任意键继续// 关闭图形界面return 0;呵呵,很简单吧。

不过还是有不少区别的,比如颜色上, TC 只有 16 色,而这个库支持了真 彩色。

还有,这个库增加了鼠标、键盘扩展、双缓冲、批量绘图、读取图片(点阵或矢 量)等功能。

另外,如果你希望运行时完全不带控制台窗口,如果在 VC 下,默认就是去掉控制台窗口。

但如果你需要显示出来的话,你可以把 #defi ne SHOW_CONSO 写在#in elude"graphics.h" 的前面,例如:#defi ne SHOW_CONSOLE#in elude "graphics.h"int mai n(){in itgraph (640, 480);getch ();closegraph ();return 0;就是需要引用这个图形库{initgraph (640, 480); 有区别 circle (200, 200, 100); getch (); closegraph ();}但,如果你用的是CFree,那把main改成Win Ma in即可实现控制台窗口的隐藏,如下替换一下即可:#in clude "graphics.h"int WinMain() //这里在graphics.h里已经定义了宏自动把它展开成合法的声明,以减免声明的麻烦{in itgraph (640, 480);getch ();closegraph ();return 0;}当然,你在VC上也直接这样写也可以,因为也会自动帮你替换回main,所以直接写Win Mai n可以两边通用。

相关文档
最新文档