东莞想做网站找什么公司做网站实现图片自动压缩

web/2025/10/4 15:37:58/文章来源:
东莞想做网站找什么公司,做网站实现图片自动压缩,动易sitefactorycms 网站配置保存不了问题,免费网页制作的网站实现这个游戏需要Easy_X 这个在我前面一篇C之番外篇爱心代码有程序教你怎么下载#xff0c;大家可自行查看 然后就是需要植物大战僵尸的素材和音乐#xff0c;需要的可以在评论区 首先是main.cpp //开发日志 //1导入素材 //2实现最开始的游戏场景 //3实现游戏顶部的工具栏…实现这个游戏需要Easy_X 这个在我前面一篇C之番外篇爱心代码有程序教你怎么下载大家可自行查看 然后就是需要植物大战僵尸的素材和音乐需要的可以在评论区 首先是main.cpp //开发日志 //1导入素材 //2实现最开始的游戏场景 //3实现游戏顶部的工具栏 //4实现工具栏里面的游戏卡牌 #define WIN_WIDTH 900 #define WIN_HEIGHT 600 //定义植物类型 enum { WAN_DOU, XIANG_RI_KUI, ZHI_WU_COUNT }; #includestdio.h #includegraphics.h//easyx图形库的头文件 #includetools.h #includevector2.h//向量引用 #includetime.h #includemath.h #includemmsystem.h//导入音乐收集阳光的时候 //导入一个库 #includeWindows.h #pragma comment(lib,winmm.lib) IMAGE imgBg;//全局变量表示背景图片 IMAGE imgBar;//工具栏 IMAGE imgCards[ZHI_WU_COUNT]; IMAGE* imgZhiwu[ZHI_WU_COUNT][20]; int curX, curY;//当前选中的植物在拖动过程中的位置 int curZhiwu;//0没有选中。 1选中了第一种植物struct zhiwu {int type;//植物种类 0表示没有植物 1第一种植物int frameIndex;//序列帧的序号bool catched;//是否被僵尸捕获int deadTime;//死亡倒计时int x, y;int timer; };struct zhiwu map[3][9]; //定义一个阳光结构体enum { SUNSHINE_DOWN, SUNSHINE_GROUND, SUNSHINE_COLLECT, SUNSHINE_RPODUCT };struct sunshineBall {int x, y;//阳光球飘落位置的坐标x不变int frameIndex;//当前图片显示帧的序号//阳光有一个落点设置int destY;//飘落位置的Y坐标bool used;//判断是否在使用//计时器int timer;float xoff;float yoff;float t;//贝塞尔曲线时间点0..1vector2 p1, p2, p3,p4;//分别对应起点终点控制点vector2 pCur;//当前时刻阳光球的位置float speed;int status;//阳光状态 };struct sunshineBall balls[10];//设置10个阳光池 IMAGE imgSunshineBall[29];//加载阳光图片一共29放入数组中 int sunshine;struct zm {int x, y;int row;int frameIndex;bool used;int speed;int blood;//僵尸血条bool dead;bool eating;//正在吃植物 }; struct zm zms[10]; IMAGE imgZM[22]; IMAGE imgZMDead[20]; IMAGE imgZMEat[21];//子弹的数据类型 struct bullet {int x, y;int row;bool used;int speed;bool blast;//定义豌豆射出的子弹是否发生爆炸int frameIndex;//帧序号 };struct bullet bullets[30]; IMAGE imgBulletNormal; IMAGE imgBallBlast[4];bool fileExist(const char* name) {FILE* fp fopen(name, r);//r表示文件的读取if (fp NULL){return false;}else{fclose(fp);return true;} }void gameInit() {//加载游戏背景图片//把字符集修改成多字符字符集loadimage(imgBg,res/bg.jpg);loadimage(imgBar,res/bar5.png);memset(imgZhiwu, 0, sizeof(imgZhiwu));//初始化植物卡牌memset(map, 0, sizeof(map));char name[64];for (int i 0; i ZHI_WU_COUNT; i){//生成植物卡牌的文件名sprintf_s(name,sizeof(name),res/Cards/card_%d.png,i1);//加植物向枚举类型中加loadimage(imgCards[i], name);for (int j 0; j 20; j){sprintf_s(name, sizeof(name), res/zhiwu/%d/%d.png, i ,j1);//先判断这个文件是否存在//定义一个接口if (fileExist(name)){imgZhiwu[i][j] new IMAGE;//.....加载loadimage(imgZhiwu[i][j],name);}else{break;}}}curZhiwu 0;sunshine 50;memset(balls, 0, sizeof(balls));for (int i 0; i 29; i){sprintf_s(name, sizeof(name), res/sunshine/%d.png,i1);loadimage(imgSunshineBall[i], name);}//配置随机种子让阳光真正的随机srand((unsigned)time(NULL));//创建游戏的图形窗口initgraph(WIN_WIDTH, WIN_HEIGHT,1);//设置字体LOGFONT f;gettextstyle(f);f.lfHeight 30;f.lfWeight 15;strcpy(f.lfFaceName, Segoe UI Black);//抗锯齿f.lfQuality ANTIALIASED_QUALITY;settextstyle(f);setbkmode(TRANSPARENT);setcolor(BLACK);//初始化僵尸数据memset(zms, 0, sizeof(zms));int i 0;for (i 0; i 22; i){sprintf_s(name,sizeof(name),res/zm/%d.png,i1);loadimage(imgZM[i],name);}loadimage(imgBulletNormal,res/bullets/bullet_normal.png);memset(bullets,0,sizeof(bullets));//初始化豌豆子弹的帧图片数组loadimage(imgBallBlast[3],res/bullets/bullet_blast.png);for (int i 0; i 3; i){float k (i 1) * 0.2;loadimage(imgBallBlast[i],res/bullets/bullet_blast.png, imgBallBlast[3].getwidth()*k, imgBallBlast[3].getheight()*k,true);}for (int i 0; i 20; i){sprintf_s(name,sizeof(name),res/zm.dead/%d.png,i1);loadimage(imgZMDead[i],name);}for (int i 0; i 21; i){sprintf_s(name,res/zm_eat/%d.png,i1);loadimage(imgZMEat[i],name);}}void drawZM() {int zmCount sizeof(zms) / sizeof(zms[0]);for (int i 0; i zmCount; i){if (zms[i].used){//IMAGE* img imgZM[zms[i].frameIndex];//IMAGE* img (zms[i].dead) ? imgZMDead : imgZM;IMAGE* img NULL;if (zms[i].dead) img imgZMDead;else if (zms[i].dead) img imgZMEat;else img imgZM;img zms[i].frameIndex;putimagePNG(zms[i].x,zms[i].y-img-getheight(),img);}} } void drawSunshines() {int ballMax sizeof(balls) / sizeof(balls[0]);for (int i 0; i ballMax; i){if (balls[i].used || balls[i].xoff){IMAGE* img imgSunshineBall[balls[i].frameIndex];//putimagePNG(balls[i].x, balls[i].y, img);putimagePNG(balls[i].pCur.x, balls[i].pCur.y, img);}} }void updateWindow() {BeginBatchDraw();//开始缓冲putimage(0, 0, imgBg);//putimage(250, 0, imgBar);putimagePNG(250, 0, imgBar);for (int i 0; i ZHI_WU_COUNT; i){int x 338 i * 65;int y 6;putimage(x, y, imgCards[i]);}for (int i 0; i 3; i){for (int j 0; j 9; j){if (map[i][j].type 0){//int x 256 j * 81;//int y 179 i*10214;int Zhiwutype map[i][j].type - 1;int index map[i][j].frameIndex;//putimagePNG(x, y, imgZhiwu[Zhiwutype][index]);putimagePNG(map[i][j].x, map[i][j].y,imgZhiwu[Zhiwutype][index]);}}}//渲染拖动过程中的植物if (curZhiwu){IMAGE* img imgZhiwu[curZhiwu - 1][0];putimagePNG(curX - img-getwidth()/2, curY - img-getheight()/2, img);}drawSunshines();//绘制阳光char scoreText[8];sprintf_s(scoreText, sizeof(scoreText),%d,sunshine);outtextxy(276,67,scoreText);//输出阳光分数drawZM();//渲染僵尸//渲染阳光int bulletMax sizeof(bullets) / sizeof(bullets[0]);for (int i 0; i bulletMax; i){if (bullets[i].used){if (bullets[i].blast){IMAGE* img imgBallBlast[bullets[i].frameIndex];putimagePNG(bullets[i].x, bullets[i].y, img);}else{putimagePNG(bullets[i].x, bullets[i].y, imgBulletNormal);}}}EndBatchDraw();//结束双缓冲 }void collectSunshine(ExMessage* msg) {int count sizeof(balls) / sizeof(balls[0]);int w imgSunshineBall[0].getwidth();int h imgSunshineBall[0].getheight();for (int i 0; i count; i){if (balls[i].used){/*int x balls[i].x;int y balls[i].y;*/int x balls[i].pCur.x;int y balls[i].pCur.y;if (msg-x x msg-xx w msg-yy msg-y y h){balls[i].used false;balls[i].status SUNSHINE_COLLECT;sunshine 25;mciSendString(play res/sunshine.mp3,0,0,0);//加载音乐文件//设置阳光球的偏移量balls[i].p1 balls[i].pCur;balls[i].p4 vector2(262, 0);balls[i].t 0;float distance dis(balls[i].p1 - balls[i].p4);float off 8.0;balls[i].speed 1.0/(distance/off);}}} }void userClick() {ExMessage msg;//参数是消息类型static int status 0;//如果消息有值则保存在peekmessage函数中,即为真if (peekmessage(msg)){if (msg.message WM_LBUTTONDOWN)//WM_LBUTTONDOWN左键按下去的意思{if (msg.x 338 msg.x 338 65*ZHI_WU_COUNT msg.y 96)//定义坐标判断点击的是否为植物{int index (msg.x - 338) / 65;status 1;curZhiwu index 1;}else{collectSunshine(msg);}}else if (msg.message WM_MOUSEMOVEstatus1)//WM_MOUSEMOVE鼠标移动{//记录当前位置curX msg.x;curY msg.y;}//鼠标抬动植物就种下去else if (msg.message WM_LBUTTONUP){if (msg.x 256 msg.y 179 msg.y 489){int row (msg.y - 179) / 102;int col (msg.x - 256) / 81;if (map[row][col].type 0){map[row][col].type curZhiwu;map[row][col].frameIndex 0;//int x 256 j * 81;//int y 179 i*10214;map[row][col].x 256 col * 81;map[row][col].y 179 row * 10214;}}curZhiwu 0;status 0;}} }void creatSunshine() {static int count 0;static int fre 400;count;if (count fre ){fre 200 rand() % 200;count 0;//满了计数器清0//从阳光池中去一个可以使用的int ballMax sizeof(balls) / sizeof(balls[0]);int i 0;for (i 0; i ballMax balls[i].used; i);if (i ballMax) return;//阳光池满了balls[i].used true;balls[i].frameIndex 0;//balls[i].x 260 rand() % (900 - 260);//balls[i].y 60;//balls[i].destY 200 (rand() % 4) * 90;balls[i].timer 0;//balls[i].xoff 0;//balls[i].yoff 0;balls[i].status SUNSHINE_DOWN;balls[i].p1 vector2(260 rand() % (900 - 260), 60);balls[i].p4 vector2(balls[i].p1.x, 200 (rand() % 4) * 90);int off 2;float distance balls[i].p4.y - balls[i].p1.y;balls[i].speed 1.0 / (distance / off);}//向日葵生产阳光int ballMax sizeof(balls) / sizeof(balls[0]);for (int i 0; i 3; i){for (int j 0; j 9; j){if (map[i][j].type XIANG_RI_KUI 1){map[i][j].timer;}if (map[i][j].timer 200){map[i][j].timer 0;int k 0;for (k 0; k ballMax balls[k].used; k);if (k ballMax) return;balls[k].used true;balls[k].p1 vector2(map[i][j].x, map[i][j].y);int w (100 rand() % 50) * (rand() % 2 ? 1 : -1);balls[k].p4 vector2(map[i][j].xw, map[i][j].yimgZhiwu[XIANG_RI_KUI][0]-getheight()-imgSunshineBall[0].getheight());balls[k].p2 vector2(balls[k].p1.xw*0.3,balls[k].p1.y-100);balls[k].p3 vector2(balls[k].p1.x w * 0.7, balls[k].p1.y 100);balls[k].status SUNSHINE_RPODUCT;balls[k].speed 0.05;balls[k].t 0;}}}}void updateSunshine()//更新阳光 {int ballMax sizeof(balls) / sizeof(balls[0]);for (int i 0; i ballMax; i){if (balls[i].used){balls[i].frameIndex (balls[i].frameIndex 1) % 29;if (balls[i].status SUNSHINE_DOWN){struct sunshineBall* sun balls[i];sun-status SUNSHINE_GROUND;sun-timer 0;}else if (balls[i].status SUNSHINE_GROUND){balls[i].timer;if (balls[i].timer 100){balls[i].used false;balls[i].timer 0;}}else if (balls[i].status SUNSHINE_COLLECT){struct sunshineBall* sun balls[i];sun-tsun-speed;sun-pCur sun-p1 sun-t * (sun-p4 - sun-p1);if (sun-t 1){sun-used false;sunshine 25;}}else if (balls[i].status SUNSHINE_RPODUCT){struct sunshineBall* sun balls[i];sun-t sun-speed;sun-pCur calcBezierPoint(sun-t, sun-p1, sun-p2, sun-p3, sun-p4);if (sun-t 1){sun-status SUNSHINE_GROUND;sun-timer 0;}}balls[i].frameIndex(balls[i].frameIndex1)%29;if (balls[i].timer 0){balls[i].y 2;}if (balls[i].y balls[i].destY){//balls[i].used false;balls[i].timer;if (balls[i].timer 100){balls[i].used false;}}}} }void creatZM() {static int zmFre 500;static int count 0;count;if (count zmFre){count 0;zmFre rand() % 200 300;}int i0;int zmMaxsizeof(zms)/sizeof(zms[0]);for (i 0; i zmMax zms[i].used; i);if (i zmMax){memset(zms[i],0,sizeof(zms[i]));zms[i].used true;zms[i].x WIN_WIDTH;zms[i].row rand() % 3;zms[i].y 172 (1 zms[i].row) * 100;zms[i].speed 1;zms[i].blood 100;zms[i].dead false;} }void updataZM() {int zmMax sizeof(zms) / sizeof(zms[0]);static int count 0;count;if (count 2){count 0;//更新僵尸的位置for (int i 0; i zmMax; i){if (zms[i].used){zms[i].x - zms[i].speed;if (zms[i].x 170){printf(GAME OVER\n);MessageBox(NULL, over, over, 0);//待优化exit(0);}}}}static int count2 0;count2;if (count2 4){count2 0;for (int i 0; i zmMax; i){if (zms[i].used){if (zms[i].dead){zms[i].frameIndex;if (zms[i].frameIndex 20){zms[i].used false;}}else if (zms[i].eating){zms[i].frameIndex (zms[i].frameIndex 1) % 21;}else{zms[i].frameIndex (zms[i].frameIndex 1) % 22;}}}} }void shoot() {int lines[3] { 0 };int zmCount sizeof(zms) / sizeof(zms[0]);int bulletMax sizeof(bullets) / sizeof(bullets[0]);int dangerX WIN_WIDTH - imgZM[0].getwidth();for (int i 0; i zmCount; i){if (zms[i].used zms[i].x dangerX){lines[zms[i].row] 1;}}for (int i 0; i 3; i){for (int j 0; j 9; j){if (map[i][j].type WAN_DOU 1lines[i]){static int count 0;count;if (count 20){count 0;int k 0;for (k 0; k bulletMax bullets[k].used; k);if (k bulletMax){bullets[k].used true;bullets[k].row i;bullets[k].speed 6;bullets[k].blast false;bullets[k].frameIndex 0;int zwX 256 j * 81;int zwY 179 i * 102 14;bullets[k].x zwX imgZhiwu[map[i][j].type - 1][0]-getwidth() - 10;bullets[k].y zwY5;}}}}} }void updataBullets() {int countMax sizeof(bullets) / sizeof(bullets[0]);for (int i 0; i countMax; i){if (bullets[i].used){bullets[i].x bullets[i].speed;if (bullets[i].x WIN_WIDTH){bullets[i].used false;}//子弹的碰撞爆炸if (bullets[i].blast){bullets[i].frameIndex;if (bullets[i].frameIndex 4){bullets[i].used false;}}}} }void checkBullet2Zm() {int bCount sizeof(bullets) / sizeof(bullets[0]);int zCount sizeof(zms) / sizeof(zms[0]);for (int i 0; i bCount; i){if (bullets[i].used false || bullets[i].blast){continue;}for (int k 0; k zCount; k){//if (zms[i].used false) continue;if (zms[k].used false) continue;int x1 zms[k].x 80;int x2 zms[k].x 110;int x bullets[i].x;if (zms[k].dead false bullets[i].row zms[k].row x x1 x x2){zms[k].blood - 20;bullets[i].blast true;bullets[i].speed 0;if (zms[k].blood 0){zms[k].dead true;zms[k].speed 0;zms[k].frameIndex 0;}break;}}} }void checkZm2Zhiwu() {int zCount sizeof(zms) / sizeof(zms[0]);for (int i 0; i zCount; i){if (zms[i].dead) continue;int row zms[i].row;for (int k 0; k 9; k){if (map[row][k].type 0){continue;}int ZhiWuX 256 k * 81;int x1 ZhiWuX 10;int x2 ZhiWuX 60;int x3 zms[i].x 80;if (x3 x1 x3 x2){if (map[row][k].catched){map[row][k].deadTime;if (map[row][k].deadTime 100){map[row][k].deadTime 0; map[row][k].type 0;zms[i].eating false;zms[i].frameIndex 0; zms[i].speed 1;}}else{map[row][k].catched true;map[row][k].deadTime 0;zms[i].eating true;zms[i].speed 0;zms[i].frameIndex 0;}}}} }void collisionCheck() {checkBullet2Zm();checkZm2Zhiwu(); } void updateGame() {for (int i 0; i 3; i){for (int j 0; j 9; j){if (map[i][j].type 0){map[i][j].frameIndex;int Zhiwutype map[i][j].type - 1;int index map[i][j].frameIndex;if (imgZhiwu[Zhiwutype][index] NULL){map[i][j].frameIndex 0;}}}}creatSunshine();//创建阳光updateSunshine();//更新阳光状态creatZM();//创建僵尸updataZM();//更新僵尸的状态shoot();//发射豌豆子弹updataBullets();//更新豌豆子弹collisionCheck();//实现豌豆子弹和僵尸的碰撞 } void startUI() {IMAGE imgBg,imgMenu1,imgMenu2;loadimage(imgBg,res/menu.png);loadimage(imgMenu1, res/menu1.png);loadimage(imgMenu2, res/menu2.png);int flag 0;while (1){BeginBatchDraw();putimage(0,0,imgBg);putimagePNG(474, 75, flag ? imgMenu2 : imgMenu1);//如果flag0那么加载第二个菜单//就是鼠标点击冒险模式后冒险模式的图标会暗淡下来ExMessage msg;if (peekmessage(msg))//如果有消息响应{if (msg.message WM_LBUTTONDOWNmsg.x474msg.x474300msg.y75msg.y75140)//按下鼠标//判断按下的位置对不对{flag 1;//鼠标松开//EndBatchDraw();//渲染一下}else if (msg.message WM_LBUTTONUPflag)//鼠标抬起{return;}}EndBatchDraw();}} int main(void) {gameInit();//进入游戏的程序函数startUI();//菜单函数int timer 0;bool flag true;while (1){userClick();timer getDelay();if (timer 20){flag true;timer 0;}if (flag){flag false;updateWindow();updateGame();}}system(pause);return 0; }接着是tools.cpp文件 #include tools.h// 载入PNG图并去透明部分 void _putimagePNG(int picture_x, int picture_y, IMAGE* picture) //x为载入图片的X坐标y为Y坐标 {DWORD* dst GetImageBuffer(); // GetImageBuffer()函数用于获取绘图设备的显存指针EASYX自带DWORD* draw GetImageBuffer();DWORD* src GetImageBuffer(picture); //获取picture的显存指针int picture_width picture-getwidth(); //获取picture的宽度EASYX自带int picture_height picture-getheight(); //获取picture的高度EASYX自带int graphWidth getwidth(); //获取绘图区的宽度EASYX自带int graphHeight getheight(); //获取绘图区的高度EASYX自带int dstX 0; //在显存里像素的角标// 实现透明贴图 公式 Cpαp*FP(1-αp)*BP 贝叶斯定理来进行点颜色的概率计算for (int iy 0; iy picture_height; iy){for (int ix 0; ix picture_width; ix){int srcX ix iy * picture_width; //在显存里像素的角标int sa ((src[srcX] 0xff000000) 24); //0xAArrggbb;AA是透明度int sr ((src[srcX] 0xff0000) 16); //获取RGB里的Rint sg ((src[srcX] 0xff00) 8); //Gint sb src[srcX] 0xff; //Bif (ix 0 ix graphWidth iy 0 iy graphHeight dstX graphWidth * graphHeight){dstX (ix picture_x) (iy picture_y) * graphWidth; //在显存里像素的角标int dr ((dst[dstX] 0xff0000) 16);int dg ((dst[dstX] 0xff00) 8);int db dst[dstX] 0xff;draw[dstX] ((sr * sa / 255 dr * (255 - sa) / 255) 16)| ((sg * sa / 255 dg * (255 - sa) / 255) 8)| (sb * sa / 255 db * (255 - sa) / 255);}}} }// 适用于 y 0 以及x0的任何情况 void putimagePNG(int x, int y, IMAGE* picture) {IMAGE imgTmp, imgTmp2, imgTmp3;int winWidth getwidth();int winHeight getheight();if (y 0) {SetWorkingImage(picture);getimage(imgTmp, 0, -y,picture-getwidth(), picture-getheight() y);SetWorkingImage();y 0;picture imgTmp;}else if (y getheight() || x getwidth()) {return;}else if (y picture-getheight() winHeight) {SetWorkingImage(picture);getimage(imgTmp, x, y, picture-getwidth(), winHeight - y);SetWorkingImage();picture imgTmp;}if (x 0) {SetWorkingImage(picture);getimage(imgTmp2, -x, 0, picture-getwidth() x, picture-getheight());SetWorkingImage();x 0;picture imgTmp2;}if (x winWidth - picture-getwidth()) {SetWorkingImage(picture);getimage(imgTmp3, 0, 0, winWidth - x, picture-getheight());SetWorkingImage();picture imgTmp3;}_putimagePNG(x, y, picture); }int getDelay() {static unsigned long long lastTime 0;unsigned long long currentTime GetTickCount();if (lastTime 0) {lastTime currentTime;return 0;}else {int ret currentTime - lastTime;lastTime currentTime;return ret;} } 然后最后就是头文件tools.h // 载入PNG图并去透明部分 void _putimagePNG(int picture_x, int picture_y, IMAGE* picture) //x为载入图片的X坐标y为Y坐标 {DWORD* dst GetImageBuffer(); // GetImageBuffer()函数用于获取绘图设备的显存指针EASYX自带DWORD* draw GetImageBuffer();DWORD* src GetImageBuffer(picture); //获取picture的显存指针int picture_width picture-getwidth(); //获取picture的宽度EASYX自带int picture_height picture-getheight(); //获取picture的高度EASYX自带int graphWidth getwidth(); //获取绘图区的宽度EASYX自带int graphHeight getheight(); //获取绘图区的高度EASYX自带int dstX 0; //在显存里像素的角标// 实现透明贴图 公式 Cpαp*FP(1-αp)*BP 贝叶斯定理来进行点颜色的概率计算for (int iy 0; iy picture_height; iy){for (int ix 0; ix picture_width; ix){int srcX ix iy * picture_width; //在显存里像素的角标int sa ((src[srcX] 0xff000000) 24); //0xAArrggbb;AA是透明度int sr ((src[srcX] 0xff0000) 16); //获取RGB里的Rint sg ((src[srcX] 0xff00) 8); //Gint sb src[srcX] 0xff; //Bif (ix 0 ix graphWidth iy 0 iy graphHeight dstX graphWidth * graphHeight){dstX (ix picture_x) (iy picture_y) * graphWidth; //在显存里像素的角标int dr ((dst[dstX] 0xff0000) 16);int dg ((dst[dstX] 0xff00) 8);int db dst[dstX] 0xff;draw[dstX] ((sr * sa / 255 dr * (255 - sa) / 255) 16)| ((sg * sa / 255 dg * (255 - sa) / 255) 8)| (sb * sa / 255 db * (255 - sa) / 255);}}} }// 适用于 y 0 以及x0的任何情况 void putimagePNG(int x, int y, IMAGE* picture) {IMAGE imgTmp, imgTmp2, imgTmp3;int winWidth getwidth();int winHeight getheight();if (y 0) {SetWorkingImage(picture);getimage(imgTmp, 0, -y,picture-getwidth(), picture-getheight() y);SetWorkingImage();y 0;picture imgTmp;}else if (y getheight() || x getwidth()) {return;}else if (y picture-getheight() winHeight) {SetWorkingImage(picture);getimage(imgTmp, x, y, picture-getwidth(), winHeight - y);SetWorkingImage();picture imgTmp;}if (x 0) {SetWorkingImage(picture);getimage(imgTmp2, -x, 0, picture-getwidth() x, picture-getheight());SetWorkingImage();x 0;picture imgTmp2;}if (x winWidth - picture-getwidth()) {SetWorkingImage(picture);getimage(imgTmp3, 0, 0, winWidth - x, picture-getheight());SetWorkingImage();picture imgTmp3;}_putimagePNG(x, y, picture); }int getDelay() {static unsigned long long lastTime 0;unsigned long long currentTime GetTickCount();if (lastTime 0) {lastTime currentTime;return 0;}else {int ret currentTime - lastTime;lastTime currentTime;return ret;} } 然后是vector2.cpp //头文件要求 #include cmathstruct vector2 {vector2(int _x 0, int _y 0) :x(x), y(y){}vector2(int* data):x(data[0]),y(data[1]){}long long x, y; };//加法 vector2 operator (vector2 x, vector2 y) { return vector2(x.x y.x, x.y y.y ); }//减法 vector2 operator -(vector2 x, vector2 y) {return vector2(x.x - y.x, x.y - y.y); }// 乘法 vector2 operator *(vector2 x, vector2 y) {return vector2(x.x * y.x - x.y * y.y, x.y * y.x x.x * y.y); }// 乘法 vector2 operator *(vector2 y, float x) {return vector2(x*y.x, x*y.y); }vector2 operator *(float x, vector2 y) {return vector2(x * y.x, x * y.y); }//叉积 long long cross(vector2 x, vector2 y) { return x.y * y.x - x.x * y.y; }//数量积 点积 long long dot(vector2 x, vector2 y) { return x.x * y.x x.y * y.y; }//四舍五入除法 long long dv(long long a, long long b) {//注意重名 return b 0 ? dv(-a, -b): (a 0 ? -dv(-a, b): (a b / 2) / b); }//模长平方 long long len(vector2 x) { return x.x * x.x x.y * x.y; }//模长 long long dis(vector2 x) { return sqrt(x.x * x.x x.y * x.y); }//向量除法 vector2 operator /(vector2 x, vector2 y) {long long l len(y);return vector2(dv(dot(x, y), l), dv(cross(x, y), l)); }//向量膜 vector2 operator %(vector2 x, vector2 y) { return x - ((x / y) * y); }//向量GCD vector2 gcd(vector2 x, vector2 y) { return len(y) ? gcd(y, x % y) : x; }vector2 calcBezierPoint(float t, vector2 p0, vector2 p1, vector2 p2, vector2 p3) {float u 1 - t;float tt t * t;float uu u * u;float uuu uu * u;float ttt tt * t;vector2 p uuu * p0;p p 3 * uu * t * p1;p p 3 * u * tt * p2;p p ttt * p3;return p; }最后头文件tools.h #pragma once #include graphics.hvoid putimagePNG(int picture_x, int picture_y, IMAGE* picture); int getDelay(); vector2.h #pragma once//头文件要求 #include cmathstruct vector2 {vector2(int _x0, int _y0) :x(_x), y(_y) {}vector2(int* data) :x(data[0]), y(data[1]){}long long x, y; };//加法 vector2 operator (vector2 x, vector2 y);//减法 vector2 operator -(vector2 x, vector2 y);// 乘法 vector2 operator *(vector2 x, vector2 y); vector2 operator *(vector2, float); vector2 operator *(float, vector2);//叉积 long long cross(vector2 x, vector2 y);//数量积 点积 long long dot(vector2 x, vector2 y);//四舍五入除法 long long dv(long long a, long long b);//模长平方 long long len(vector2 x);//模长 long long dis(vector2 x);//向量除法 vector2 operator /(vector2 x, vector2 y);//向量膜 vector2 operator %(vector2 x, vector2 y);//向量GCD vector2 gcd(vector2 x, vector2 y);vector2 calcBezierPoint(float t, vector2 p0, vector2 p1, vector2 p2, vector2 p3); 这里给大家演示一下画面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dede替换网站模板电商网站的特点

在物联网(IoT)时代,随着智能设备的普及和万物互联的加速,隐私保护与数据安全成为了亟待解决的关键问题。以下是一些重要的隐私保护与数据安全策略,以确保在万物互联背景下信息的安全: 1. 加强设备安全&…

cco网站素材网站制作公司 云南

STM32 OTA-IAP设计方案 OTA是Over-the-Air的简写,即空中下载技术,通过网络远程给用户进行系统更新和升级。IAP是In Application Programming的简写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在…

主题网站设计欣赏dw做的网站怎么上传图片

随着网络技术的不断发展,网络安全威胁也在不断增加,勒索病毒攻击企业计算机服务器的事件时有发生,并且勒索病毒的加密形式也越来越复杂。近期,云天数据恢复中心陆续接到很多企业的求助,企业的计算机服务器遭到了mallox…

自己建设网站难不难哪个网站做不锈钢好

一、获得命令帮助 1.1、内部命令与外部命令 简单来说,在linux系统中有存储位置的命令为外部命令; 没有存储位置的为内部命令,可以理解为内部命令嵌入在linux的shell中,所以看不到。 type来判断到底为内部命令还是内部命令 [ro…

北京住房与城乡建设网站怎么查看网页源代码

在sbin文件夹下是start-all.sh可以运行的,但是到了别的文件夹下就不行了,于是想到了是文件路径问题,因为hadoop环境是和java环境一起配置的导致sbin写成了bin 解决办法: 打开.bashrc配置hadoop的环境变量 sudo vim ~/.bashrc …

古镇免费网站建设最好看免费观看高清大全猪蜜蜜剧本

适用于什么场景? 检索比较多的场景,例如学生成绩管理系统,老师对学生的成绩进行排名或查询操作 ArrayList有哪些特点? 1、ArrayList集合底层采用了数组数据结构,是Object类型 2、动态数组。ArrayList的默认初始容量…

传奇高端网站设计制作大庆网站建设优化

查看WEB服务器的连接数 https://technet.microsoft.com/en-us/sysinternals/bb897437 tcpView转载于:https://www.cnblogs.com/daishuguang/p/4973342.html

h5网站建设模板html5 网站源码

文章目录后端有关说明前端有关说明接口设计小程序注册/登录接口APP 注册/登录接口PC Web 端的注册/登录接口小程序注册/登录序列图校验 token后端有关说明 登录和注册的逻辑要独立抽取写成2个接口:注册接口、登录接口 小程序、APP、PC端的登录接口和注册接口要分开…

移动网站建设服务商重庆必去的十大景点

Android开发要点说明 商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。 应用包名:是在APP项目配置文件And…

做拆分盘网站南充做网站略奥网络

第一道题:求有删除情况的最长回文子串 题目: 解题思路: 这个题严格意义上来说,删除了字符就谈不上回文串了,既然有删除,那估计考察的不是回文串,而是其他的,但是这个东西又有回文串的…

好网站建设公司服务子网站建设方案

分布式并发架构 微服务、Docker容器的基本原理、架构设计,以及应用场景。 缓存:Redis、Memcached、CDN、本地缓存 搜索引擎的选型:Lucene、Solr等选型与比较 应用服务器雪崩:长事务、SQL超时、同步接口引起的雪崩场景&#xff…

免费在线观看电影电视剧网站wordpress菜单对齐修改

探寻SQL的背后机制 前言 在数据领域,SQL(Structured Query Language)是一门广泛使用的语言,用于查询和处理数据。你可能已经使用过诸如MySQL、Hive、ClickHouse、Doris、Spark和Flink等工具来编写SQL查询。 每一种框架都提供了…

合肥工程建设交易中心网站国美在线网站建设费用

if语句是条件判断语句 格式为: if 条件:执行语句 elif 再一个条件:执行语句 else:执行语句注意: if 与elif后不要忘记冒号 例子: #Autor:Decade value156 value2int(input(number:)) #提示用户输入一个整数型的数字 if value1>value2: …

购物类型网站建设wordpress购物车表单

1.什么是单例模式 在一个项目中,全局范围内,某个类的实例有且仅有一个,通过这个唯一实例向其他模块提供数据的全局访问,这种模式就叫单例模式。 类中多对象的操作函数有如下几个: 构造函数 : 能够创建出一…

北京网站优化方法中山建网站多少钱

boss直聘翻页这里有个坑 问题: 无限循环中,点击下一页按钮,直到不可点击为止。 发现,在点到第5页的时候,再次点击下一页,直接就点击了页码10,导致流程直接就结束了。 在第5页进行校验&#xff0…

厦门高端网站建设关于网站开发的

总言 主要内容:传输层UDP、TCP协议基本介绍。UDP报文格式、TCP报文格式、三次握手四次挥手、TCP可靠性策略说明。 文章目录 总言8、UDP协议(传输层一)8.1、传输层预备知识8.1.1、端口号8.1.2、一些指令(netstat、pidof、xargs&am…

网站的建设和维护的钱接广告的平台

订阅一个CSDN的RSS为例。 1、打开RSS阅读器。 2、设置->新增订阅->手动新增 订阅URL:输入http://articles.csdn.net/api/rss.php?tid1000 (可以先在PC上打开下该网页,发现他是一个xml网页。) 订阅名称:自己起一个名字&…

彩票网站开发的物流网站和数据库建设

一个服务器上跑多个程序是非常常见的现象。 但是这样做后会有一个问题&#xff0c;那就是容易造成 Host 头攻击。host 头(host header或称主机头)攻击&#xff0c;非常常见。比如&#xff0c;在 jsp 中&#xff0c;我们通常可能存在类似下面的代码。 <script type"te…

网站宣传的手段有哪些wordpress网站主修改密码

git如何远程创建分支我不知道有什么办法可以直接在远程创建分支而不需要clone到本地。背景需求我的需求是直接在远程服务器上创建一个分支直接在远程服务器上删除一个分支这期间都不需要clone到本地来。原因是当项目有多个repository的时候其中的部分创建了一个分支&#xff0c…

电子商务网站开发技术解决方案网站建设自查情况

从0配置JAVA项目相关环境 写在最前面一、安装Java的jdk环境1. 下载jdk2. 配置jdk3. 配置环境变量 二、在vscode中配置java运行环境1. 下载VSCode2. 下载并运行「Java Extension Pack」 三、安装mysql1.官网下载MySQL2.开始安装如果没有跳过安装成功 3.配置MySQL Server4.环境变…