KingDZ 变菜鸟,每日一个C#小实例之---控制美女头像
呵呵,记住偶的博客域名 www.cnblogs.com/hihell
为什么叫这个呢?因为我想叫 hi+hello 结果一不小心没打上o直接就成hihell了,哈哈哈哈好了,从今天开始呢,偶就是每天写几个小实例,当然都是关于C#的,可能偶尔我会写一下ASP.NET的,不过,看时间了,当然呢,我这些文章里面可能很多都是很简单的,所以呢,老鸟飞过。
特别声明:本系列文章,读者范围为:了解C#基本语言,或者学过C#半年以上,望高手飞过,嘴下留情。
哈哈,俺KingDZ又要变回那个青涩的菜菜了。说白了,其实我下面的文章,不管你是高手,还是菜菜。都会学到一些有价值的东东,要不俺写他干什么啊,自娱自乐,哈哈。
好了,废话不多说,直接开始我们今天的第一个例子,用键盘控制美女头像,乱动,哈哈,偶用JS写过,偶用HTML5写过,偶也用过C#写过,其他的啊,其他的偶用Silverlight写过....
开始吧。第一步,准备图片。
然后我们开始加载我们的头像-----我采用的是动态加载的办法,因为这个有一个好处就是,方便大家以后修改,-----当然我们可以采用某些设计模式。
string imgPath = string.Empty; imgPath = Directory.GetCurrentDirectory().Substring(0,Directory.GetCurrentDirectory().Length-10)+@"/Image/1.jpg"; pic.Load(imgPath); pic.SizeMode = PictureBoxSizeMode.Zoom;
这里面说一下,一点点有技术含量的地方,---------------得到winForm的路径,哈哈,其实简单的不行,就是 Directory
它是一个获取软件运行目录的类,以后我们的实例中可定会遇到他在其他方面的应用,具体的用法还需要大家慢慢的去体会.
好了,下面我们要做的就是移动图片了,移动图片,需要的有什么呢?第一:方向,当然我们这次先采用4个方向,第二:速度
好了,开始准备啊.我们先添加一个Move类,这个为一会我们的程序做准备,好了,我们下面来熟悉一下窗体的坐标.
首先找到窗体的 KeyDown 事件,这个毫无疑问,就是按键盘的事件,当然,你要是自己可以用委托去写,俺也不管地。
MessageBox.Show(e.KeyCode.ToString()+":"+e.KeyValue);
哈哈,好了,我们先找到,我们需要的这几个键对应的值
OK,看到了吗,这么着很简单就测出来我们需要的按键了,我们用冒号前面的也行,后面的也行,看你自己的了。
然后我们继续。下面我们可以得到的是图片的长宽和坐标。
在窗体的Load事件里面添加
lblWidth.Text = pic.Width.ToString(); lblHeight.Text = pic.Height.ToString(); lblX.Text = pic.Left.ToString(); lblY.Text = pic.Top.ToString();
大家不要觉得没有意义,上面的很简单,可是,大家知不知道,有时,最有用的就是这些简单的小测试。
我们下面所做的移动,无非就是,当按下键盘 ← 然后图片的X坐标减去速度和图片本身的长度呢,举个简单的例子就是,假如图片的移动速度是5,然后图片的长度是10,下载的X坐标是100,好了,也就是说按下 ← ,X坐标就变成了 95 了,呵呵,图片的长度就是一个判断,防止图片移动出窗体。OK,我们下面实现的左右移动。
完善Move类
enum Direction
{
Left,
Right,
Up,
Down
}
声明一个枚举,用来记录按下那个方向了。
class Move { int speed = 5; public int GetMove(Direction direction) { int movenum = 0; switch (direction) { case Direction.Right: case Direction.Up: movenum = +speed; break; case Direction.Left: case Direction.Down: movenum = -speed; break; default: movenum = 0; break; } return movenum; } }
这个很好理解了,speed 的移动的速度。 然后我们返回相应的数值即可,特别注意的就是我们的这个按下 ↑ → 则是加速,相应的那个是减速。呵呵,其实也不能这么理解,自己慢慢体会吧,
好了,左右移动实现完成了
private void Form1_KeyDown(object sender, KeyEventArgs e) { Move m = new Move(); switch (e.KeyCode.ToString()) { case "Left": pic.Left += pic.Left > 0 ? m.GetMove(Direction.Left) : 0; break; case "Right": pic.Left += pic.Left < this.Size.Width - pic.Width ? m.GetMove(Direction.Right) : this.Size.Width - pic.Width; break; default: break; } lblWidth.Text = pic.Width.ToString(); lblHeight.Text = pic.Height.ToString(); lblX.Text = pic.Left.ToString(); lblY.Text = pic.Top.ToString(); }
这里面要说明的就是一些,关于窗体坐标和咱们图片的坐标了,防止就是图片移动到不是窗体的部分,那就看不到了,哈哈, this.Size.Width是获取窗体的宽度。其他的就是一些简单的逻辑了,大家自己吧
上下方向的移动自己做好了吧。
简单的窗体移动时间了,当然你可以让他自己移动。
这个需要是的我们的 time_tick事件了,哈哈,贪吃蛇的原理就是这么实现的,你可以自己尝试一下。简单的例子里面可能包含很多基础的东西。
这篇文章到此结束了,大家自己看看能收获多少吧,
高手飞过,谨以此系列文章献给刚刚入门的菜鸟。
作者:KingDZ
出处:http://www.cnblogs.com/hihell/
关于作者:作者喜欢编程,擅长ASP.NET网站开发,喜欢MVC,SilverLight开发,喜欢交流,喜欢创新
我的QQ:860866679 MSN:wangdezhen@live.com 期待有共同志向者交流进步。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题
可以通过KingDZ's
Email 联系我,非常感谢。