网站布局怎么写,自己架设服务器,为知笔记 wordpress,公司建站比较好的提前准备好游戏要的素材#xff0c;可以到爱给网去找#xff0c;飞机大战我们需要的是一个我方战机图片#xff0c;一个背景图#xff0c;三个敌方战机的图#xff0c;我方战机的图片#xff0c;敌方战机的图片#xff0c;并且将图片和.cpp放在同一文件夹下. 这里创建.…提前准备好游戏要的素材可以到爱给网去找飞机大战我们需要的是一个我方战机图片一个背景图三个敌方战机的图我方战机的图片敌方战机的图片并且将图片和.cpp放在同一文件夹下. 这里创建.cpp的文件是因为要用到图形库所以创建.cpp的文件然后图片格式都是png
1.我方飞机和背景图片的加载和贴图
#includestdio.h
#include graphics.h//图形库头文件
#define HEIGHT 503
#define WIDTH 700
IMAGE img_bk, img_plane;//定义背景图片玩家的类int main()
{initgraph(WIDTH, HEIGHT);//初始化游戏的背景loadimage(img_bk, ./back.png);//加载游戏背景图loadimage(img_plane, ./1.png);//加载游戏玩家图片putimage(0, 0, img_bk);//贴游戏背景图putimage(200,200, img_plane);//贴玩家战机的图片getchar();//防止窗口闪退}背景图片是503*700背景图片大小自己设置为了让游戏体验感增强如果铺满整个屏幕的话会不好移动. 2.去掉飞机背后的黑色背景使用一个算法函数
#includestdio.h
#include graphics.h
#define HEIGHT 503
#define WIDTH 700
IMAGE img_bk, img_plane;
void drawAlpha(IMAGE* picture, int picture_x, int picture_y) //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){if ((ix picture_x) 0 (ix picture_x) graphWidth) //防止出边界后循环显示{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) //公式 Cpαp*FP(1-αp)*BP αpsa/255 , FPsr , BPdr| ((sg * sa / 255 dg * (255 - sa) / 255) 8) //αpsa/255 , FPsg , BPdg| (sb * sa / 255 db * (255 - sa) / 255); //αpsa/255 , FPsb , BPdb}}}}
}int main()
{initgraph(WIDTH, HEIGHT);loadimage(img_bk, ./back.png);loadimage(img_plane, ./1.png);putimage(0, 0, img_bk);//贴背景前两个为图片左上角要贴在窗口的坐标drawAlpha(img_plane, 200, 200);//贴飞机图片getchar();}这个函数我看不懂是在网上搜的我来解释一下三个参数第一个是图片的地址第二个参数第三个参数的坐标是图片左上角从窗口的哪个位置贴背景肯定是从窗口的左上角贴. 注意使用这个函数在飞机移动屏幕过程中会出现异常不知道怎么解决希望有大佬可以帮帮我drawAlpha区别putimage可以把背景变透明 3.静态显示所有素材图片
#includestdio.h
#include graphics.h
#define HEIGHT 503
#define WIDTH 700
IMAGE img_bk, img_plane, img_a, img_b, img_c,img_abullet,img_bbullet,img_cbullet,img_planebullet;
struct aircraft
{int x, y;};
aircraft plane, a, b, c;
void datainit()
{plane { 150,150 };a { 0,0 };b { 300,0 };c { 450,0 };}
void drawAlpha(IMAGE* picture, int picture_x, int picture_y) //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){if ((ix picture_x) 0 (ix picture_x) graphWidth) //防止出边界后循环显示{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) //公式 Cpαp*FP(1-αp)*BP αpsa/255 , FPsr , BPdr| ((sg * sa / 255 dg * (255 - sa) / 255) 8) //αpsa/255 , FPsg , BPdg| (sb * sa / 255 db * (255 - sa) / 255); //αpsa/255 , FPsb , BPdb}}}}
}
void load()
{loadimage(img_bk, ./back.png);loadimage(img_plane, ./1.png);loadimage(img_a, ./2.png);loadimage(img_b, ./3.png);loadimage(img_c, ./4.png);loadimage(img_abullet, ./5.png);loadimage(img_bbullet, ./6.png);loadimage(img_cbullet, ./7.png);loadimage(img_planebullet, ./8.png);}
void draw()
{putimage(0, 0, img_bk);drawAlpha(img_plane,plane.x,plane.y);drawAlpha(img_a, a.x, a.y);drawAlpha(img_b, b.x, b.y);drawAlpha(img_c, c.x, c.y);drawAlpha(img_abullet,400,0 );//后两个参数是图片左上角在窗口要贴的位置drawAlpha(img_bbullet,400 ,50 );drawAlpha(img_cbullet, 400, 100);drawAlpha(img_planebullet, 400, 150);}int main()
{initgraph(WIDTH, HEIGHT);datainit();load();draw();getchar();}定义3个敌方战机a,b,c,3个敌机的子弹abullet,bbullet,cbullet,我方战机的子弹planebullet IMAGE img_a, img_b, img_c,img_abullet,img_bbullet,img_cbullet,img_planebullet; 定义一个结构体记录每个图片左上角要贴在窗口的坐标.四个结构体表示我方战机3个敌方战机在窗口上的坐标图中的初始化只是为了让图片不重叠而已。 将加载图片的函数统一放在load函数里面将贴图片的函数放在draw中. 4.我方飞机的移动
void player_move(int speed) //处理飞机移动
{if (GetAsyncKeyState(VK_UP) || GetAsyncKeyState(W)){if (plane.y 0)plane.y - speed;}if (GetAsyncKeyState(VK_DOWN) || GetAsyncKeyState(S)){if (plane.y 126 HEIGHT)plane.y speed;}if (GetAsyncKeyState(VK_LEFT) || GetAsyncKeyState(A)){if (plane.x 0)plane.x - speed;}if (GetAsyncKeyState(VK_RIGHT) || GetAsyncKeyState(D)){if (plane.x 51 WIDTH)plane.x speed;}
}这个移动函数在之前游戏里用了好多次这里就不强调了.函数中的speed参数是我方战机的速度每按一次会移动几个像素.这里的重点放在飞机边界的判断上记得加双缓冲要不然屏幕会闪 边界的判断以及飞机的移动 if (GetAsyncKeyState(VK_DOWN) || GetAsyncKeyState(S)){if (plane.y 126 HEIGHT)plane.y speed;}这里加126是为了不让程序出现异常如果正常的话应该加51因为我方战机图片大小是51*51如果是51的话会出现如下视频的错误不知道为什么请看vcr
5.敌方战机的移动
首先我们要修改一下飞机结构体的变量
struct aircraft
{int x, y;int width;//敌机图片的宽度int height;//敌机图片的高度int speed;//敌机的速度int bornflag;//敌机在窗口里面置0在外面置1};然后修改一下初始话敌机的属性.
void datainit()
{plane { 150,150 };//a { 0,0 };/*b { 300,0 };*//*c { 450,0 };*/a.speed 1;//a敌机的速度a.bornflag 1;//a敌机是否存在b.bornflag 1;c.bornflag 1;a.width 100;//a敌机的宽度a.height 100;//a敌机的高度b.speed 1;b.width 80;b.height 100;c.height 70;c.width 70;c.speed 3;}敌机a的移动 敌机a的移动 如视频所示对应的代码实现是
void ufoamove()
{static int dir1 1;if (a.bornflag 1){a.bornflag 0;a.x rand() % (WIDTH - a.width);a.y -50;}if (a.y 200){dir1 0;}else if (a.y -150){dir1 1;a.bornflag 1;}if (1 dir1){a.y a.speed;}else{a.y - a.speed;}}定义一个静态变量dir,dir为1的话表示敌机前进dir为0敌机后退。因为是static所以只有第一次初始化时候是1别的时候不执行第一句.当敌机a没在窗口里面说明a.bornflag 1就将a.bornflag 置为0敌机a要出现了随机数生成敌机a要出现的左右方向哪个地方y-50;是为了初始化的时候隐藏飞机.当敌机a前进200个像素时dir置0让敌机a后退.当敌机向上退出屏幕50个像素时重新dir1;敌机向前.此时会出现在另一个位置。在主函数中加入产生随机种子函数 srand(time(NULL));包含头文件
#includetime.h
#includestdlib.h敌机出屏幕drawAlpha这个函数会出错所以我们把draw中的drawAlpha都改成putimage,这样黑框框又出现了电子叹气
void draw()
{putimage(0, 0, img_bk);putimage(plane.x, plane.y ,img_plane );putimage(a.x, a.y ,img_a);putimage(b.x, b.y ,img_b );putimage(c.x, c.y, img_c );putimage(400, 0 ,img_abullet );putimage(400, 50 ,img_bbullet);putimage(400, 100 ,img_cbullet );putimage(400, 150, img_planebullet );}敌机b的移动
请看vcr 敌机b的移动 对应代码
void ufobmove()
{static int step b.speed;if (b.bornflag 1){b.bornflag 0;b.x rand() % (WIDTH - b.width);b.y -b.height;}if (b.x 0 || b.x b.width WIDTH){step -step;}b.x step;b.y;if (b.y HEIGHT){b.bornflag 1;}}由视频可知敌机b的移动规律是在左右移动的同时还向前移动step如果为正向右移动step如果为负表示向左移动如果b战机没有出现在窗口内b.bornflag 1将b.bornflag 置0表示要出现随机数生成b战机的坐标.y-b.height;初始化先隐藏起来.如果b战机到了左右边界step-step; 就向相反的方向移动了左右移动实质是在给b.x±step;然后y,b战机在左右移动的过程中一直往前走.当b战机出了下边界b.bornflag 1;表示b战机出了窗口. 敌机c的移动
请看vcr 敌机c的移动 对应的代码为
void ufocmove()
{static float disx 0, disy 0;static float tmpx 0, tmpy 0;static float vx 0, vy 0;float step 1000 / c.speed;if (1 c.bornflag){c.bornflag 0;tmpx rand() % (WIDTH - c.width);tmpy -c.height;disx plane.x - tmpx;disy plane.y - tmpy;vx disx / step;vy disy / step;}tmpx vx;tmpy vy;c.x (int)(tmpx 0.5);c.y (int)(tmpy 0.5);if (c.x -c.width){c.bornflag 1;}else if (c.x WIDTH){c.bornflag 1;}if (c.y HEIGHT){c.bornflag 1;}}
这个c战机是要撞向我方飞机tmpx,tmpy存放的是c战机的临时的位置刚生成时当然是他出生点的坐标disx是c战机刚出来x方向上与当时我方战机x方向上的距离同理另一个.step是假如c.speed的速度为5的话step200,就是说将x方向上的距离分为200份vx就是每一份的距离是多少像素这里强制类型转化c.x,c.y是整数因为vxvy不清楚所以0.5四舍五入一下就是整数了.如果在左右下方向超出了就c.bornflag 1;离开窗口了.
6.整体代码展示
#includestdio.h
#include graphics.h
//#includeconio.h//_getch();
#define HEIGHT 503
#define WIDTH 700
IMAGE img_bk, img_plane, img_a, img_b, img_c, img_abullet, img_bbullet, img_cbullet, img_planebullet;
struct aircraft
{int x, y;int width;int height;int speed;int bornflag;};
aircraft plane, a, b, c;
void datainit()
{plane { 150,150 };//a { 0,0 };/*b { 300,0 };*//*c { 450,0 };*/a.speed 1;a.bornflag 1;b.bornflag 1;c.bornflag 1;a.width 100;a.height 100;b.speed 1;b.width 80;b.height 100;c.height 70;c.width 70;c.speed 3;}
void drawAlpha(IMAGE* picture, int picture_x, int picture_y) //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){if ((ix picture_x) 0 (ix picture_x) graphWidth) //防止出边界后循环显示{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) //公式 Cpαp*FP(1-αp)*BP αpsa/255 , FPsr , BPdr| ((sg * sa / 255 dg * (255 - sa) / 255) 8) //αpsa/255 , FPsg , BPdg| (sb * sa / 255 db * (255 - sa) / 255); //αpsa/255 , FPsb , BPdb}}}}
}
void load()
{loadimage(img_bk, ./back.png);loadimage(img_plane, ./1.png);loadimage(img_a, ./2.png);loadimage(img_b, ./3.png);loadimage(img_c, ./4.png);loadimage(img_abullet, ./5.png);loadimage(img_bbullet, ./6.png);loadimage(img_cbullet, ./7.png);loadimage(img_planebullet, ./8.png);}
void draw()
{putimage(0, 0, img_bk);putimage(plane.x, plane.y ,img_plane );putimage(a.x, a.y ,img_a);putimage(b.x, b.y ,img_b );putimage(c.x, c.y, img_c );putimage(400, 0 ,img_abullet );putimage(400, 50 ,img_bbullet);putimage(400, 100 ,img_cbullet );putimage(400, 150, img_planebullet );}
void player_move(int speed) //处理飞机移动
{if (GetAsyncKeyState(VK_UP) || GetAsyncKeyState(W)){if (plane.y 0)plane.y - speed;}if (GetAsyncKeyState(VK_DOWN) || GetAsyncKeyState(S)){if (plane.y 51 HEIGHT)plane.y speed;}if (GetAsyncKeyState(VK_LEFT) || GetAsyncKeyState(A)){if (plane.x 0)plane.x - speed;}if (GetAsyncKeyState(VK_RIGHT) || GetAsyncKeyState(D)){if (plane.x 51 WIDTH)plane.x speed;}
}
void ufoamove()
{static int dir1 1;if (a.bornflag 1){a.bornflag 0;a.x rand() % (WIDTH - a.width);a.y -50;}if (a.y 200){dir1 0;}else if (a.y -150){dir1 1;a.bornflag 1;}if (1 dir1){a.y a.speed;}else{a.y - a.speed;}}
void ufobmove()
{static int step b.speed;if (b.bornflag 1){b.bornflag 0;b.x rand() % (WIDTH - b.width);b.y -b.height;}if (b.x 0 || b.x b.width WIDTH){step -step;}b.x step;b.y;if (b.y HEIGHT){b.bornflag 1;}}
void ufocmove()
{static float disx 0, disy 0;static float tmpx 0, tmpy 0;static float vx 0, vy 0;float step 1000 / c.speed;if (1 c.bornflag){c.bornflag 0;tmpx rand() % (WIDTH - c.width);tmpy -c.height;disx plane.x - tmpx;disy plane.y - tmpy;vx disx / step;vy disy / step;}tmpx vx;tmpy vy;c.x (int)(tmpx 0.5);c.y (int)(tmpy 0.5);if (c.x -c.width){c.bornflag 1;}else if (c.x WIDTH){c.bornflag 1;}if (c.y HEIGHT){c.bornflag 1;}}int main()
{initgraph(WIDTH, HEIGHT);BeginBatchDraw();datainit();while (1){load();draw();ufoamove();ufobmove();ufocmove();player_move(5);FlushBatchDraw();}EndBatchDraw();getchar();}7.剩下实现放在下一篇啦 文章转载自: http://www.morning.fnhxp.cn.gov.cn.fnhxp.cn http://www.morning.rdwm.cn.gov.cn.rdwm.cn http://www.morning.pfmsh.cn.gov.cn.pfmsh.cn http://www.morning.rzsxb.cn.gov.cn.rzsxb.cn http://www.morning.yfmlj.cn.gov.cn.yfmlj.cn http://www.morning.grpbt.cn.gov.cn.grpbt.cn http://www.morning.xpqsk.cn.gov.cn.xpqsk.cn http://www.morning.benqc.com.gov.cn.benqc.com http://www.morning.jpfpc.cn.gov.cn.jpfpc.cn http://www.morning.ndnhf.cn.gov.cn.ndnhf.cn http://www.morning.ybyln.cn.gov.cn.ybyln.cn http://www.morning.ryrpq.cn.gov.cn.ryrpq.cn http://www.morning.seoqun.com.gov.cn.seoqun.com http://www.morning.qrndh.cn.gov.cn.qrndh.cn http://www.morning.rykgh.cn.gov.cn.rykgh.cn http://www.morning.rltsx.cn.gov.cn.rltsx.cn http://www.morning.gpsr.cn.gov.cn.gpsr.cn http://www.morning.rxwfg.cn.gov.cn.rxwfg.cn http://www.morning.qznkn.cn.gov.cn.qznkn.cn http://www.morning.ptdzm.cn.gov.cn.ptdzm.cn http://www.morning.mmjyk.cn.gov.cn.mmjyk.cn http://www.morning.woyoua.com.gov.cn.woyoua.com http://www.morning.kfcfq.cn.gov.cn.kfcfq.cn http://www.morning.rxtxf.cn.gov.cn.rxtxf.cn http://www.morning.kfwrq.cn.gov.cn.kfwrq.cn http://www.morning.frpm.cn.gov.cn.frpm.cn http://www.morning.zljqb.cn.gov.cn.zljqb.cn http://www.morning.btlmb.cn.gov.cn.btlmb.cn http://www.morning.rwmp.cn.gov.cn.rwmp.cn http://www.morning.stlgg.cn.gov.cn.stlgg.cn http://www.morning.jtybl.cn.gov.cn.jtybl.cn http://www.morning.ywgrr.cn.gov.cn.ywgrr.cn http://www.morning.qwfl.cn.gov.cn.qwfl.cn http://www.morning.qwwhs.cn.gov.cn.qwwhs.cn http://www.morning.gpsr.cn.gov.cn.gpsr.cn http://www.morning.nhzps.cn.gov.cn.nhzps.cn http://www.morning.zmzdx.cn.gov.cn.zmzdx.cn http://www.morning.fmkbk.cn.gov.cn.fmkbk.cn http://www.morning.wrlxt.cn.gov.cn.wrlxt.cn http://www.morning.lhsdf.cn.gov.cn.lhsdf.cn http://www.morning.xlmgq.cn.gov.cn.xlmgq.cn http://www.morning.tgnwt.cn.gov.cn.tgnwt.cn http://www.morning.yrfxb.cn.gov.cn.yrfxb.cn http://www.morning.cszbj.cn.gov.cn.cszbj.cn http://www.morning.tpnx.cn.gov.cn.tpnx.cn http://www.morning.bydpr.cn.gov.cn.bydpr.cn http://www.morning.rgksz.cn.gov.cn.rgksz.cn http://www.morning.xdfkrd.cn.gov.cn.xdfkrd.cn http://www.morning.bpknt.cn.gov.cn.bpknt.cn http://www.morning.yqtry.cn.gov.cn.yqtry.cn http://www.morning.jcfqg.cn.gov.cn.jcfqg.cn http://www.morning.xtkw.cn.gov.cn.xtkw.cn http://www.morning.jzbjx.cn.gov.cn.jzbjx.cn http://www.morning.ypcd.cn.gov.cn.ypcd.cn http://www.morning.paoers.com.gov.cn.paoers.com http://www.morning.rqhdt.cn.gov.cn.rqhdt.cn http://www.morning.sqhlx.cn.gov.cn.sqhlx.cn http://www.morning.xjtnp.cn.gov.cn.xjtnp.cn http://www.morning.nmtyx.cn.gov.cn.nmtyx.cn http://www.morning.ydhck.cn.gov.cn.ydhck.cn http://www.morning.whothehellami.com.gov.cn.whothehellami.com http://www.morning.pmsl.cn.gov.cn.pmsl.cn http://www.morning.nqyfm.cn.gov.cn.nqyfm.cn http://www.morning.nfdty.cn.gov.cn.nfdty.cn http://www.morning.pmftz.cn.gov.cn.pmftz.cn http://www.morning.wrlxy.cn.gov.cn.wrlxy.cn http://www.morning.mdgb.cn.gov.cn.mdgb.cn http://www.morning.szoptic.com.gov.cn.szoptic.com http://www.morning.mjbjq.cn.gov.cn.mjbjq.cn http://www.morning.qhfdl.cn.gov.cn.qhfdl.cn http://www.morning.ktmbr.cn.gov.cn.ktmbr.cn http://www.morning.wklhn.cn.gov.cn.wklhn.cn http://www.morning.qgcfb.cn.gov.cn.qgcfb.cn http://www.morning.qxbsq.cn.gov.cn.qxbsq.cn http://www.morning.rqgjr.cn.gov.cn.rqgjr.cn http://www.morning.rjrz.cn.gov.cn.rjrz.cn http://www.morning.qmbtn.cn.gov.cn.qmbtn.cn http://www.morning.nppml.cn.gov.cn.nppml.cn http://www.morning.mwnch.cn.gov.cn.mwnch.cn http://www.morning.ylkkh.cn.gov.cn.ylkkh.cn