c#使用计时器移动图片框并在winform中停止它

问题描述

我正在制作游戏,蛇和梯子,我想在播放器上添加一个计时器,使其可以缓慢移动。并在移动块后停止它。

代码在下面给出

namespace Snakes_Ladders {
  public partial class Form2: Form {
    bool red = false;
    int x = 0,y = 442,dicevalue;
    public Form2() {
      InitializeComponent();
    }

    private void button2_Click(object sender,EventArgs e) {
      Application.Exit();
    }

    private void timer1_Tick(object sender,EventArgs e) {
      pictureBox4.Left += 2;

    }

    private void Form2_Load(object sender,EventArgs e) {
      timer1.Start();
      this.Hide();
      pictureBox4.Visible = false;
      pictureBox3.Image = Image.FromFile(@ "C:\Users\pasha\source\repos\Snakes Ladders\Snakes Ladders\Resources\dice.png");
      pictureBox3.SizeMode = PictureBoxSizeMode.StretchImage;
    }

    private void button1_Click(object sender,EventArgs e) {
      dicevalue = AddLogics.rolldice(pictureBox3);
      label2.Text = dicevalue.ToString(); //Open Dice First time...

      if (label2.Text == "6" && red == false) {
        pictureBox4.Visible = true;
        pictureBox1.Visible = false;
        red = true;
        pictureBox4.Location = new Point(x,y);
        label4.Text = x.ToString();
        label6.Text = y.ToString();
      }

      if (red == true) {
        x += 70;
        pictureBox4.Location = new Point(x,y);
        label4.Text = x.ToString();
        label6.Text = y.ToString();
      }
    }
  }
}

同时我还使用了下面给出的类。

namespace Snakes_Ladders {
  class AddLogics {
    public static int rolldice(PictureBox px) // Roll Dice mathod...
    {
      int dice = 0;
      Random r = new Random();
      dice = r.Next(1,7);

      px.Image = Image.FromFile(@ "C:\Users\pasha\source\repos\Snakes Ladders\Snakes Ladders\Resources\" + dice + ".png ");
        px.SizeMode = PictureBoxSizeMode.StretchImage;
        return dice;
      }
    }
  }

我想在定时器移动我的图片框,并且它应该在移动骰子中显示的数字后立即停止。

解决方法

pictureBox4.Left += 2到底在做什么?你可能想做

pictureBox4.Location = new Point(pictureBox4.Location.x + 2,pictureBox4.Location.y)

这会将您的pictureBox4设置为向右2个像素(或者我不记得向左)。

在启动计时器时(如果计时器在您的PictureBox上打钩,则不会显示如何创建计时器,因为Intervall对计时器的引用很有用,因为它对计时器具有纪念意义。)。

一些其他提示。

您的代码很难阅读,我发现您就像我们所有人一样都是新手。 因此,仅在下一次编写代码时,您会想到这些事情……它将为您带来比您想象中更多的帮助:

相应地命名变量/方法

pictureBox4 ..到底是什么?为它命名,如果您正在设计器中创建它,则有一个“属性”窗口,您可以在其中更改名称。因此您可以在代码中使用有意义的方式来引用它。您的整个代码充满了Label1 ... 2 ... 3 .. PictureBox1 ... 2..3。这样您就可以自己意识到这一点,在对代码进行编程2天后检查您的代码...您可以确定说哪个标签是哪个吗?它有助于信任我。

(几乎)永远不要对对象进行硬编码(至少在项目中)

在编写游戏时,您将面临一个简单的问题,我可以将pictureBox4视为玩家...如果有2位玩家该怎么办?使用ur方法,如果您想将pictureBox4或其中所有内容写入其中,则仅将其移动。.作为此项目的示例..使方法返回一个CurrentPlayer的pictureBox,因此您始终只需要考虑1个播放器,只需在“转弯”开关结束时,播放器和“景气” 程序(几乎可以肯定)就会看起来更专业,并且逐步操作会更容易。

对于这堵文本墙,这让我想起了我自己在编程方面的起点,但是TLDR编程就是其中之一,如果u是结构化的并遵循某些规则, Will 会很有趣。 。因为唯一受“不良”代码伤害的人是你自己(或你工作的团队),你会感到压力和失去动力。保持清洁,灵活。

PS:在您提出问题之前,请下次阅读this。祝您好运!

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...