C语言+EasyX 鼠标控制角色移动

来源:互联网 发布:javascript实例大全 编辑:程序博客网 时间:2024/05/21 10:45
昨天的角色移动是键盘控制角色,今天做了改进,用鼠标控制角色移动
#include<graphics.h>#include<stdio.h>#include<conio.h>#include<math.h>int num = 0;double x0 = 0;double y2 = 450;double x1;double y3;double term;double mx;double my;IMAGE background, boy1, boy2;MOUSEMSG m,m1;void InitInstance(){loadimage(&background, "background.jpg");//加载游戏背景loadimage(&boy1, "boy1.bmp");//背景图loadimage(&boy2, "boy2.bmp");//屏蔽图}void Interface()//初始化基本数据{initgraph(1024, 768);//初始化画布大小putimage(0, 0, &background);putimage(double (x0), double (y2), 70, 124, &boy2, 70 * num, 124 * 2, SRCAND);//角色初始位置putimage(double (x0), double (y2), 70, 124, &boy1, 70 * num, 124 * 2, SRCPAINT);}//左void Left(){void Key_Down();switch (m.uMsg){case WM_LBUTTONDOWN://判断鼠标左键按下//往左走while (1){//switch (m1.uMsg)//{//case WM_LBUTTONDOWN://m.x = m1.x;//想改变mx,my的值,重新给角色一个坐标,达到中途改变路线的目的//m.y = m1.y;//Key_Down();//break;//}if (x0 <= (mx - 35) )//当角色走到目的地时跳出死循环{break;}putimage(0, 0, &background);//贴背景putimage(x0, y2, 70, 124, &boy2, 70 * num, 124 * 1, SRCAND);//屏蔽图putimage(x0, y2, 70, 124, &boy1, 70 * num, 124 * 1, SRCPAINT);//背景图  //当角色走完一套动作时,回到初始动作num++;if (num == 4)num = 0;Sleep(70);//调整角色跨步时间  //跨步距离x0 -= 7.5;}break;}}void Right(){void Key_Down();switch (m.uMsg){case WM_LBUTTONDOWN://判断鼠标左键按下//在鼠标左键按下位置记录坐标每项,mx,my//往右下角走while (1){//switch (m1.uMsg)//{//m.x = m1.x;//m.y = m1.y;//case WM_LBUTTONDOWN://Key_Down();//break;//}if (x0 >= (mx - 35) ){break;}putimage(0, 0, &background);putimage(x0, y2, 70, 124, &boy2, 70 * num, 124 * 2, SRCAND);putimage(x0, y2, 70, 124, &boy1, 70 * num, 124 * 2, SRCPAINT);num++;if (num == 4)num = 0;Sleep(70);x0 +=7.5;}break;}}void Up(){void Key_Down();switch (m.uMsg){case WM_LBUTTONDOWN://判断鼠标左键按下//在鼠标左键按下位置记录坐标每项,mx,my//往右下角走while (1){/*switch (m1.uMsg){m.x = m1.x;m.y = m1.y;case WM_LBUTTONDOWN:Key_Down();break;}*/if (  y2 <= (my - 110)){break;}putimage(0, 0, &background);putimage(x0, y2, 70, 124, &boy2, 70 * num, 124 * 3, SRCAND);putimage(x0, y2, 70, 124, &boy1, 70 * num, 124 * 3, SRCPAINT);num++;if (num == 4)num = 0;Sleep(70);y2 -= 7.5;}break;}}void Down(){void Key_Down();switch (m.uMsg){case WM_LBUTTONDOWN://判断鼠标左键按下//在鼠标左键按下位置记录坐标每项,mx,my//往左下角走while (1){/*switch (m1.uMsg){m.x = m1.x;m.y = m1.y;case WM_LBUTTONDOWN:Key_Down();break;}*/if ( y2 >= (my - 110))//当角色走到目的地时跳出死循环{break;}putimage(0, 0, &background);//贴背景putimage(x0, y2, 70, 124, &boy2, 70 * num, 0, SRCAND);//屏蔽图putimage(x0, y2, 70, 124, &boy1, 70 * num,0, SRCPAINT);//背景图  //当角色走完一套动作时,回到初始动作num++;if (num == 4)num = 0;Sleep(70);//调整角色跨步时间  //跨步距离y2 += 7.5;}break;}}void LeftDown(){void Key_Down();switch (m.uMsg){case WM_LBUTTONDOWN://判断鼠标左键按下//在鼠标左键按下位置记录坐标每项,mx,my//往左下角走while (1){/*switch (m1.uMsg){m.x = m1.x;m.y = m1.y;case WM_LBUTTONDOWN:Key_Down();break;}*/if (x0 <= (mx - 35)&&y2>=(my-110))//当角色走到目的地时跳出死循环{break;}//用勾股定理算出角色所需走的x,yterm = 1 + ((y2 - (my - 110)) / (x0 - (mx - 35)))*((y2 - (my - 110)) / (x0 - (mx - 35)));x1 = 1.5*fabs(sqrt(25 / term));//角色到达目的地的x轴距离y3 = 1.5*fabs((y2 - (my - 110)) / (x0 - (mx - 35)))*x1;//角色到达目的地的Y轴距离putimage(0, 0, &background);//贴背景putimage(x0, y2, 70, 124, &boy2, 70 * num, 124 * 4, SRCAND);//屏蔽图putimage(x0, y2, 70, 124, &boy1, 70 * num, 124 * 4, SRCPAINT);//背景图num++;//当角色走完一套动作时,回到初始动作if (num == 4)num = 0;Sleep(70);//调整角色跨步时间  //跨步距离x0 -= x1;y2 += y3;}break;}}void RightUp(){void Key_Down();switch (m.uMsg){case WM_LBUTTONDOWN://判断鼠标左键按下//在鼠标左键按下位置记录坐标每项,mx,my//往右上角走while (1){/*switch (m1.uMsg){m.x = m1.x;m.y = m1.y;case WM_LBUTTONDOWN:Key_Down();break;}*/if (x0 >= (mx - 35) && y2 <= (my - 110)){break;}term = 1 + ((y2 - (my - 110)) / (x0 - (mx - 35)))*((y2 - (my - 110)) / (x0 - (mx - 35)));x1 = 1.5*fabs(sqrt(25 / term));y3 = 1.5*fabs((y2 - (my - 110)) / (x0 - (mx - 35)))*x1;putimage(0, 0, &background);putimage(x0, y2, 70, 124, &boy2, 70 * num, 124 * 6, SRCAND);putimage(x0, y2, 70, 124, &boy1, 70 * num, 124 * 6, SRCPAINT);num++;if (num == 4)num = 0;Sleep(70);x0 += x1;y2 -= y3;}break;}}void RightDown(){void Key_Down();switch (m.uMsg){case WM_LBUTTONDOWN://判断鼠标左键按下//在鼠标左键按下位置记录坐标每项,mx,my//往右下角走while (1){/*switch (m1.uMsg){m.x = m1.x;m.y = m1.y;case WM_LBUTTONDOWN:Key_Down();break;}*/if (x0 >= (mx - 35) && y2 >= (my - 110)){break;}term = 1 + ((y2 - (my - 110)) / (x0 - (mx - 35)))*((y2 - (my - 110)) / (x0 - (mx - 35)));x1 = 1.5*fabs(sqrt(25 / term));y3 = 1.5*fabs((y2 - (my - 110)) / (x0 - (mx - 35)))*x1;putimage(0, 0, &background);putimage(x0, y2, 70, 124, &boy2, 70 * num, 124 * 5, SRCAND);putimage(x0, y2, 70, 124, &boy1, 70 * num, 124 * 5, SRCPAINT);num++;if (num == 4)num = 0;Sleep(70);x0 += x1;y2 += y3;}break;}}void LeftUp(){void Key_Down();switch (m.uMsg){case WM_LBUTTONDOWN://判断鼠标左键按下//在鼠标左键按下位置记录坐标每项,mx,my//往左上角走while (1){/*switch(m1.uMsg){m.x = m1.x;m.y = m1.y;case WM_LBUTTONDOWN:Key_Down();break;}*/if (x0 <= (mx-35) && y2 <= (my-110))//当角色走到目的地时跳出死循环{break;}//用勾股定理算出角色所需走的x,yterm = 1 + ((y2 - (my-110)) / (x0 - (mx-35)))*((y2 - (my-110)) / (x0 - (mx-35)));x1 = 1.5*fabs(sqrt(25 / term));//角色到达目的地的x轴距离y3 = 1.5*fabs((y2 - (my-110)) / (x0 - (mx-35)))*x1;//角色到达目的地的Y轴距离putimage(0, 0, &background);//贴背景putimage(x0, y2, 70, 124, &boy2, 70 * num, 124 * 7, SRCAND);//屏蔽图putimage(x0,y2, 70, 124, &boy1, 70 * num, 124 * 7, SRCPAINT);//背景图//当角色走完一套动作时,回到初始动作num++;if (num == 4)num = 0;Sleep(70);//调整角色跨步时间//跨步距离x0 -= x1;y2 -= y3;}break;}}void Key_Down(){while (1){m = GetMouseMsg();//m1= GetMouseMsg();//在鼠标左键按下位置记录坐标每项,mx,mymx = m.x;my = m.y;//左if (mx<x0  && my>(y2 + 100) && my < (y2 + 112)){Left();}//右else if (mx > x0 && my > (y2 + 100) && my < (y2 + 112)){Right();}//上else if (mx > (x0 + 20) && mx < (x0 + 50) && my < (y2 + 20)){Up();}//下else if (mx > (x0 + 20) && mx<(x0 + 50) && my>(y2 + 110)){Down();}//左上else if (mx < (x0 + 35) && my < (y2 + 100))//判断鼠标左键按下位置是否为角色左上位置{LeftUp();}//左下else if (mx < (x0 + 35) && my >(y2 + 112))//判断鼠标左键按下位置是否为角色左下位置{LeftDown();}//右下else if (mx > (x0 + 38) && my > (y2 + 120)){RightDown();}//右上else if (x0<(mx - 38) && y2>(my - 105)){RightUp();}}}int main(){InitInstance();Interface();Key_Down();getchar();closegraph();return 0;}


原创粉丝点击