文章类型: .NET
关键词: label,控件,移动,问题
内容摘要: label控件移动问题

label控件移动问题

2015/7/29 17:43:17    来源:apple    阅读:

2015-5-1 16:30:51    点击:    作者:蒲旭

如果有兴趣的请仔细阅读下面的代码。注意其中代码段的顺序,思考一下,程序运行后蛇身不会跟着蛇头走,蛇身是动态生成的.还有看一下在此程序中写入List<Label> list=new List<Label>();有没有用?

using System;
using System.Collections.Generic;
using 
System.ComponentModel;
using System.Data;
using System.Drawing;
using 
System.Linq;
using System.Text;
using System.Threading.Tasks;
using 
System.Windows.Forms;
using System.Threading;
namespace Snake
{
    public partial class Snake : Form
    {
        public Snake()
        {
            InitializeComponent();
        }
        int xold , 
yold;//记录蛇头的初始位置
        String direction = "a";//默认移动方向
        int 
snakeBody = 4;//蛇身长度
        int snakeX;//蛇身初始的x轴坐标
        int 
snakeY;//蛇身初始的y轴坐标
        List<Label> list=new 
List<Label>();
        /// <summary>
        /// 移动蛇头
        /// 
</summary>
        public void MoveHead()
        {
            while (true)
            {
                xold = 
lblSnakeHead.Left;
                yold = 
lblSnakeHead.Top;
                switch (direction)
                {
                    case "w":
                        lblSnakeHead.Top 
-= 10;
                        snakeY -= 10;
                        if 
(lblSnakeHead.Top<=10)
                        {
                            lblSnakeHead.Top = 
590;
                        }
                        break;
                    case "s":
                        lblSnakeHead.Top += 10;
                        snakeY += 
10;
                        if 
(lblSnakeHead.Top>=590)
                        {
                            lblSnakeHead.Top = 
10;
                        }
                        break;
                    case "a":
                        lblSnakeHead.Left -= 10;
                        snakeX -= 
10;
                        if (lblSnakeHead.Left <= 
10)
                        {
                            lblSnakeHead.Left = 790;
                        }
                        break;
                    case "d":
                        lblSnakeHead.Left += 10;
                        snakeX += 
10;
                        if (lblSnakeHead.Left >= 
790)
                        {
                            lblSnakeHead.Left = 10;
                        }
                        break;
                }
                MoveBody();
                Thread.Sleep(100);
            }
        }
        private void 
Snake_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
            Thread thread = 
new Thread(new ThreadStart(MoveHead));
            thread.Start();
            AddBody();
        }
        private void Snake_KeyDown(object sender, KeyEventArgs e)
        {
            //MessageBox.Show(e.KeyCode.ToString());
            direction = e.KeyCode.ToString().ToLower();
        }
        /// <summary>
        /// 生成蛇身
        /// 
</summary>
        private void AddBody()
        {
            snakeX = lblSnakeHead.Left;
            snakeY = 
lblSnakeHead.Top;
            for (int i = 1; i < snakeBody; 
i++)
            {
                 Label lbl = new 
Label();
                 lbl.Size = new 
System.Drawing.Size(10,10);
                 lbl.BorderStyle = 
System.Windows.Forms.BorderStyle.FixedSingle;
                 lbl.Location = 
new System.Drawing.Point(snakeX+10*i, snakeY);
                 lbl.Name = 
i.ToString();
                 lbl.BackColor=Color.DarkMagenta;
                 this.Controls.Add(lbl);
            }
        }
        /// <summary>
        /// 移动蛇身
        /// 
</summary>
        private void MoveBody()
        {
            int x, y;//用来接收除蛇头外的其余lbl移动前的坐标
            for (int i = 1; i < 
list.Count; i++)
            {
                x = 
list[i].Left;
                y = list[i].Top;
                list[i].Left = xold;
                list[i].Top = 
yold;
                xold = x;
                yold = y;
            }
        }
    }
}


↑ 上一篇文章:第二章:HTML 列表、表格与框架 关键词:第二章,HTML,列表,表格,框架 发布日期:2015/7/29 17:39:28
↓ 下一篇文章:线程间操作无效: 从不是创建控件的线程访问它的三种方法 关键词:C#,多线程,线程间操作无效,从不是创建控件的线程访问它.. 发布日期:2015/7/30 13:37:42
相关文章:
“VC picture控件显示透明图片,并移动图片,透明可以了,但是有重影”的解决方法 关键词:VC,移动,透明,图,阴影,picture,控件 发布日期:2018-03-07 16:33
VC,MFC使控件失去焦点的方法 关键词:VC,MFC,使控件,失去焦点,方法 发布日期:2017-11-27 13:59
VC中由于按钮的Tabstop属性造成的控件背景色在点击时刷新变化混乱的问题 关键词:VC,按钮,Tabstop,属性,按钮,背景色,变化,混乱,控件,刷新 发布日期:2017-11-28 10:03
相关目录:.NET软件开发ANDROID
我要评论
正在加载评论信息......