| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3232 人关注过本帖, 2 人收藏
标题:我也国庆大赠送,新手尝试一下:猎狗追兔
只看楼主 加入收藏
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
这个帖子人气不错。

关注这个帖子的各位,有空也去看看我问的那个问题呗~
https://bbs.bccn.net/thread-351512-1-1.html
2011-10-03 15:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没事,你确实对这个不熟悉,一眼就看得出的,何况自己也有承认。真的不用考虑象限的,矢量方程化成投影标量方程,在任何方位的数学形式均不变,标量的正负号已囊括矢量方向。永远用末坐标减前一瞬间坐标,只要得数为正,就向正方向运动;得数为负,就向负方向运动;两个坐标轴分解,不管向在什么位置向哪个方向,都是同一个数学方程式。这是高中物理的基本方法,只是中国大陆的中学物理教学古里古怪,某些师生总是把正负方向看得太重,说什么加速、减速之类,好好地把一个作匀加速运动的竖直上抛过程拆解为上升和下降两个阶段,殊不知那其实就是一个匀加速运动方程就已经囊括了的东西。你这种分象限考虑的思路,很明显地就是这样来的(如果你学过高中物理的话,我敢肯定就是这种老师向你灌输的东西,没学到不怪你)。

我用C#弄出来了,第一个C#程序,呵呵,只是没找着狗和兔子的图片,也没找着怎么画点的方法,用label运动的,不漂亮,再查查资料看。

授人以渔,不授人以鱼。
2011-10-03 16:01
q332010372
Rank: 2
等 级:论坛游民
帖 子:52
专家分:61
注 册:2010-7-27
收藏
得分:0 
初试用winform做了窗体,只用了两个点表示,左下角是速度控制,但是不知道什么原因,两个点初始速度很快,然后慢慢地速度就慢了。另外就是在程序运行后,不能做其它动作,不
Temp20111003.rar (9.79 KB)
知道问题在哪

[ 本帖最后由 q332010372 于 2011-10-3 21:20 编辑 ]
2011-10-03 21:15
q332010372
Rank: 2
等 级:论坛游民
帖 子:52
专家分:61
注 册:2010-7-27
收藏
得分:0 
速度越来越慢的问题解决了,程序运行后不能做其它动作,还是没解决……而且会偶尔卡一下
Temp20111003.rar (9.96 KB)


[ 本帖最后由 q332010372 于 2011-10-4 00:11 编辑 ]
2011-10-04 00:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
生平第一个C#程序,处男作,学习深入点再弄完善
图片附件: 游客没有浏览图片的权限,请 登录注册


图片附件: 游客没有浏览图片的权限,请 登录注册


程序代码:
using System;
using System.Collections.Generic;
using using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 猎狗追兔
{
    public partial class Form1 : Form
    {
        private Coord origin = new Coord { X = 400, Y = 20 };   // 坐标原点位置
        private const double tininess = 0.00001;                // 微小步进量

        private Animal rabbit = new Animal { Name = "兔子", Speed = 5.00, X = -200.00, Y = 0.00 };
        private Animal hounter = new Animal { Name = "猎狗", Speed = -15.00, X = -200.00, Y = 400.00 };

        public Form1()
        {
            InitializeComponent();

            Text = "猎狗追兔";
            MaximizeBox = false;
        }

        // 兔子定位
        private void SetRabbit(double x, double y)
        {
            Rabbit.Top = Convert.ToInt32(origin.Y) + Convert.ToInt32(y) - Rabbit.Height / 2;
            Rabbit.Left = Convert.ToInt32(origin.X) + Convert.ToInt32(x) - Rabbit.Width / 2;
        }

        // 猎狗定位
        private void SetHounter(double x, double y)
        {
            Hounter.Top = Convert.ToInt32(origin.Y) + Convert.ToInt32(y) - Hounter.Height / 2;
            Hounter.Left = Convert.ToInt32(origin.X) + Convert.ToInt32(x) - Hounter.Width / 2;
        }

        private void Arrange()
        {
            Home.Text = "兔子窝";
            Home.AutoSize = false;
            Home.TextAlign = ContentAlignment.MiddleCenter;
            Home.Width = 50;
            Home.Height = 30;
            Home.BorderStyle = BorderStyle.FixedSingle;
            Home.Top = Convert.ToInt32(origin.Y) - Home.Height / 2;
            Home.Left = Convert.ToInt32(origin.X) - Home.Width / 2;

            Hounter.Text = hounter.Name;
            SetHounter(hounter.X, hounter.Y);
            label1.Text = "猎狗速率:";
            label1.Top = this.Height - label1.Height - 50;
            label1.Left = 20;
            textBox1.Text = Convert.ToString(hounter.Speed);
            textBox1.Height = label1.Height;
            textBox1.Width = 40;
            textBox1.Top = label1.Top;
            textBox1.Left = label1.Left + label1.Width;

            Rabbit.Text = rabbit.Name;
            SetRabbit(rabbit.X, rabbit.Y);
            label2.Text = "兔子速率:";
            label2.Top = label1.Top - label2.Height - 10;
            label2.Left = label1.Left;
            textBox2.Text = Convert.ToString(rabbit.Speed);
            textBox2.Height = label2.Height;
            textBox2.Width = 40;
            textBox2.Top = label2.Top;
            textBox2.Left = label2.Left + label2.Width;

            Reset.Text = "重置";
            Reset.Top = this.Height - Reset.Height - 50;
            Reset.Left = this.Width - Reset.Width - 50;

            StartRun.Text = "开始";
            StartRun.Top = Reset.Top;
            StartRun.Left = Reset.Left - StartRun.Width;
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            Arrange();
        }

        private void StartRun_Click(object sender, EventArgs e)
        {
            rabbit.Speed = Convert.ToDouble(textBox2.Text);
            hounter.Speed = Convert.ToDouble(textBox1.Text);
            Run();
        }

        private void Run()
        {
            double angle;                   // 猎狗速度方向角
            Boolean success = false;        // 是否抓到兔子

            while ((rabbit.X < 0.00) && !success)
            {
                angle = Math.Atan((rabbit.X - hounter.X) / (hounter.Y - rabbit.Y));
                rabbit.X += rabbit.Speed * tininess;
                SetRabbit(rabbit.X, rabbit.Y);
                hounter.X -= hounter.Speed * Math.Sin(angle) * tininess;
                hounter.Y += hounter.Speed * Math.Cos(angle) * tininess;
                SetHounter(hounter.X, hounter.Y);
                if (hounter.Y <= 0.0)
                {
                    success = true;
                }
            }
            if (success)
            {
                MessageBox.Show("逮住兔子了!");
            }
            else
            {
                MessageBox.Show("兔子逃脱了!");
            }
        }

        private void Reset_Click(object sender, EventArgs e)
        {
            rabbit.X = -200.00;
            rabbit.Y = 0.00;
            hounter.X = -200.00;
            hounter.Y = 400.00;
            Arrange();
        }
    }

    public class Coord : Object
    {
        private double x;
        private double y;

        public double X
        {
            get { return this.x; }
            set { this.x = value; }
        }

        public double Y
        {
            get { return this.y; }
            set { this.y = value; }
        }
    }

    // 动物类
    public class Animal : Object
    {
        private String name;
        private double x;
        private double y;
        private double speed;

        public String Name
        {
            get { return this.name; }
            set { this.name = value; }
        }

        public double X
        {
            get { return this.x; }
            set { this.x = value; }
        }

        public double Y
        {
            get { return this.y; }
            set { this.y = value; }
        }

        public double Speed
        {
            get { return this.speed; }
            set { this.speed = value; }
        }
    }
}


[ 本帖最后由 TonyDeng 于 2011-10-4 03:35 编辑 ]

授人以渔,不授人以鱼。
2011-10-04 03:28
kifine
Rank: 2
等 级:论坛游民
帖 子:48
专家分:49
注 册:2011-5-9
收藏
得分:0 
啊,抛物线啊,不会
2011-10-04 05:08
快速回复:我也国庆大赠送,新手尝试一下:猎狗追兔
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024390 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved