问题描述
我正在制作游戏,蛇和梯子,我想在播放器上添加一个计时器,使其可以缓慢移动。并在移动块后停止它。
代码在下面给出
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。祝您好运!