移动的笑脸c#

本文关键字:笑脸 移动 | 更新日期: 2023-09-27 18:17:31

下面我用c#创建了一个程序来创建一个笑脸。它还可以在屏幕上移动。我不知道如何让笑脸从屏幕边缘弹回来。请帮助。谢谢你。

    */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;
namespace HappyFace
{
    public partial class HappyFace : Form
    {
        int xpos = 0;
        int ypos = 0;
        int width = 0;
        int length = 0;
        int startAngle = 45;
        int sweepAngle = 90;
        public HappyFace()
        {
            InitializeComponent();
        }
        private void HappyFace_Load(object sender, EventArgs e)
        {
        }
        private void HappyFace_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen myPen = new Pen(Brushes.Red, 7);
            Pen myPen2 = new Pen(Brushes.Green, 7);
            //g.DrawLine(myPen, 0, 0, 500, 500);
            //g.DrawLine(myPen, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height);
            //g.DrawLine(myPen2, 0, this.ClientRectangle.Height, this.ClientRectangle.Width, 0);
            //g.DrawLine(myPen2, this.ClientRectangle.Left, this.ClientRectangle.Bottom, this.ClientRectangle.Right, ClientRectangle.Top);
            int endX = this.ClientRectangle.Width;
            int endY = this.ClientRectangle.Height;
            //string msg = String.Format("endX = {0} endY = {1}", endX, endY);
            //MessageBox.Show(msg);
            int xCenter = this.ClientRectangle.Left + (this.ClientRectangle.Width / 2);
            int yCenter = this.ClientRectangle.Top + (this.ClientRectangle.Height / 2);
            Pen circlePen = new Pen(Brushes.Black, 9);
            //g.DrawEllipse(circlePen, xCenter - 50, yCenter - 50, 100, 100);
            // g.FillEllipse(Brushes.Orange, xCenter -50, yCenter - 50, 100, 100);
            Font myFont = new Font("Monotype Corsiva", 43, FontStyle.Bold);
            g.DrawString("Happy Face", myFont, Brushes.Aqua, 300, 25);
            //g.DrawArc(circlePen, xpos, width, length, startAngle, sweepAngle);
            g.DrawEllipse(circlePen, xpos, ypos + 130, 250, 250);
            g.FillEllipse(Brushes.PeachPuff, xpos, ypos + 130, 250, 250);
            g.DrawEllipse(circlePen, xpos + 65, ypos + 200, 20, 35);
            g.FillEllipse(Brushes.Black, xpos + 65, ypos + 200, 20, 35);
            g.DrawEllipse(circlePen, xpos + 160, ypos + 200, 20, 35);
            g.FillEllipse(Brushes.Black, xpos + 160, ypos + 200, 20, 35);
            g.DrawArc(circlePen, xpos + 60, ypos + 215, 130, 120, 35, 115);
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            xpos = xpos + 3;
            if(xpos >= this.ClientRectangle.Right - 250)
            {
                xpos = 0;
            }
            this.Invalidate();
        }
    }
}*/

移动的笑脸c#

嗯,我有点无聊。我假设物体将以45度的轨迹移动,当它与边界碰撞时,它将改变90度。

我要做的(这是一个非常简单的解决方案)是,首先,定义我希望"smiley"移动的两个轴的方向,每个计时器滴答的步骤,中心的位置和对象的大小,类似于:

int xpos = 0;
int ypos = 130;
int step = 10;
int width = 250;
int height = 250;
int directionX = +1;
int directionY = -1;

计时器只会增加x和y的位置:

private void timer1_Tick(object sender, EventArgs e)
{
     xpos += 10*directionX;
     ypos += 10*directionY;
     checkBounds();  //This would check if the object collides with the bounds 
     this.Invalidate();
}

checkBounds方法检查对象是否与边界碰撞:

private void checkBounds()
{
   if (ypos < 0 + step || ypos + height+ step > ClientRectangle.Height)
   {
       directionY *= -1;
   }
   if (xpos < 0 + step || xpos + width + step > ClientRectangle.Width)
   {
       directionX *= -1;
   }
}

最后,Paint方法与您的类似,只是调整了一些值:

private void Form2_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    Pen myPen = new Pen(Brushes.Red, 7);
    Pen myPen2 = new Pen(Brushes.Green, 7);

    int endX = this.ClientRectangle.Width;
    int endY = this.ClientRectangle.Height;

    int xCenter = this.ClientRectangle.Left + (this.ClientRectangle.Width / 2);
    int yCenter = this.ClientRectangle.Top + (this.ClientRectangle.Height / 2);

    Pen circlePen = new Pen(Brushes.Black, 9);
    Font myFont = new Font("Monotype Corsiva", 43, FontStyle.Bold);
    g.DrawString("Happy Face", myFont, Brushes.Aqua, 300, 25);
    g.DrawEllipse(circlePen, xpos, ypos, 250, 250);
    g.FillEllipse(Brushes.PeachPuff, xpos, ypos, 250, 250);
    g.DrawEllipse(circlePen, xpos + 65, ypos -130  + 200, 20, 35);
    g.FillEllipse(Brushes.Black, xpos + 65, ypos-130 + 200, 20, 35);
    g.DrawEllipse(circlePen, xpos + 160, ypos-130 + 200, 20, 35);
    g.FillEllipse(Brushes.Black, xpos + 160, ypos-130 + 200, 20, 35);
    g.DrawArc(circlePen, xpos + 60, ypos-130 + 215, 130, 120, 35, 115);
}

这段代码可以得到很大的改进,但这可能有助于您思考应该如何完成它。