基本信息
源码名称:c#人工智能AI 源码
源码大小:2.66M
文件格式:.zip
开发语言:C#
更新时间:2016-11-09
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace AI_Life { enum CurrentSimulation { SteeringBehaviours, EString, Ants, } //this class deals with the main windows form and manages top-level objects //of other classes //some of the class components are to help EString work public partial class mainForm : Form { //=========================================================// public static bool behaviourChanged = false, identicalBehaviour = true, eStringRunning = true; public static bool leaveTrail = false; public static bool identicalVehicles = false; internal static SB steeringBehaviour = SB.None; //=========================================================// private Point[] axisPoints = new Point[3]; private Point newPoint, oldPoint = new Point(80, 450 - 200); private SBC sBC; private Cosmos world; private AboutBox aboutBox; private Pen arrowPen = new Pen(Brushes.Red, 3), boldPen = new Pen(Brushes.PowderBlue, 2); private CurrentSimulation CS; private BufferedGraphicsContext context; //buffered display; check msdn for this class private BufferedGraphics grafx; private Random random = new Random(); private bool drawingSurfaceInitialized = false; Graphics g; //=========================================================// private PointF eStringGraph = new PointF(100 EString.generationCount, 500 - EString.errorCount); public mainForm() { InitializeComponent(); arrowPen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; axisPoints[1] = new Point(80, 450); axisPoints[0] = new Point(80, 150); axisPoints[2] = new Point(380, 450); CS = CurrentSimulation.SteeringBehaviours; context = new BufferedGraphicsContext(); } //main title private void DrawTitle() { switch (CS) { case CurrentSimulation.SteeringBehaviours: g.DrawString("Steering Behaviours", this.Font, Brushes.White, new PointF(mainPanel.Width - 140, 10)); break; case CurrentSimulation.EString: //g.DrawString("E Strings", this.Font, Brushes.White, new PointF(mainPanel.Width / 2, 10)); break; case CurrentSimulation.Ants: //g.DrawString("Sheeps", this.Font, Brushes.White, new PointF(mainPanel.Width / 2, 10)); break; default: break; } } private void ClearScreen() { g.FillRectangle(Brushes.Black, mainPanel.ClientRectangle); } private void Start() { if (g != null) { timer1.Enabled = true; if (CS == CurrentSimulation.EString) { listView1.Items.Clear(); if (textBoxTargetString.Text != "") { { EString.target = textBoxTargetString.Text; EString.Execute(g, listView1); } } } timer1.Enabled = true; } } //to accommodate different resolutions private void InitializeDrawingSurface() { listView1.Visible = false; context.MaximumBuffer = mainPanel.ClientSize; grafx = context.Allocate(mainPanel.CreateGraphics(), new Rectangle(0, 0, mainPanel.ClientSize.Width, mainPanel.ClientSize.Height)); g = grafx.Graphics; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; drawingSurfaceInitialized = true; } private void DestroyAll() { leaveTrailToolStripMenuItem.Checked = false; leaveTrail = false; timer1.Enabled = false; Cosmos.isRunning = false; eStringRunning = false; listView1.Visible = false; sBC = null; world = null; } #region Events private void timer1_Tick(object sender, EventArgs e) { if (!leaveTrail) { ClearScreen(); } switch (CS) { case CurrentSimulation.SteeringBehaviours: if (sBC != null) sBC.Step(); break; case CurrentSimulation.EString: newPoint = new Point(80 (EString.generationCount * 2), 450 - (EString.errorCount * 2)); g.DrawLine(boldPen, oldPoint, newPoint); oldPoint = newPoint; g.DrawString("E Strings", new Font(FontFamily.GenericSansSerif, 14), Brushes.White, new PointF(20, 20)); g.DrawString("Target String: " EString.target, new Font(FontFamily.GenericSansSerif, 20), Brushes.PaleGoldenrod, new PointF(20, 50)); g.DrawString("Error Graph", new Font(FontFamily.GenericSansSerif, 20), Brushes.Yellow, new PointF(180, 180)); g.DrawLine(arrowPen, axisPoints[1], axisPoints[0]); g.DrawLine(arrowPen, axisPoints[1], axisPoints[2]); g.DrawString("Y", this.Font, Brushes.White, new PointF(axisPoints[0].X - 30, axisPoints[0].Y)); g.DrawString("X", this.Font, Brushes.White, new PointF(axisPoints[2].X - 10, axisPoints[2].Y 25)); g.DrawString("0", this.Font, Brushes.White, new PointF(axisPoints[1].X - 10, axisPoints[1].Y 10)); break; case CurrentSimulation.Ants: if (world != null) { world.Step(); } break; default: break; } DrawTitle(); grafx.Render(Graphics.FromHwnd(mainPanel.Handle)); } private void startToolStripMenuItem_Click(object sender, EventArgs e) { Start(); } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } private void stopToolStripMenuItem_Click(object sender, EventArgs e) { eStringRunning = false; } private void pauseToolStripMenuItem_Click(object sender, EventArgs e) { Cosmos.isRunning = false; eStringRunning = false; timer1.Enabled = !timer1.Enabled; } private void initializeToolStripMenuItem_Click(object sender, EventArgs e) { if (!drawingSurfaceInitialized) InitializeDrawingSurface(); DestroyAll(); listView1.Visible = false; CS = CurrentSimulation.SteeringBehaviours; sBC = new SBC(g, mainPanel.ClientSize, steeringBehaviour, int.Parse(numberOfCars.Text)); Start(); } private void mainPanel_MouseClick(object sender, MouseEventArgs e) { SBC.targetPosition = new Vector2(e.X, e.Y); } private void initializeMainToolStripMenuItem_Click(object sender, EventArgs e) { listView1.Visible = false; context.MaximumBuffer = mainPanel.ClientSize; grafx = context.Allocate(mainPanel.CreateGraphics(), new Rectangle(0, 0, mainPanel.ClientSize.Width, mainPanel.ClientSize.Height)); g = grafx.Graphics; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; } private void aToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.Seek; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.Seek; } private void fleeToolStripMenuItem1_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.Flee; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.Flee; } private void arriveToolStripMenuItem1_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.Arrive; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.Arrive; } private void pursuitToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.Pursuit; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.Pursuit; } private void evadeToolStripMenuItem1_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.Evade; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.Evade; } private void wanderToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.Wander; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.Wander; } private void pathFollowingToolStripMenuItem1_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.PathFollowing; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.PathFollowing; } private void noneToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.None; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.None; } private void mainForm_KeyDown(object sender, KeyEventArgs e) { switch (CS) { case CurrentSimulation.SteeringBehaviours: if (sBC != null) { if (e.KeyCode == Keys.Insert) sBC.FirstVehicle.Mass ; if (e.KeyCode == Keys.Delete) sBC.FirstVehicle.Mass--; if (e.KeyCode == Keys.Home) sBC.FirstVehicle.MaxSpeed ; if (e.KeyCode == Keys.End) sBC.FirstVehicle.MaxSpeed--; if (e.KeyCode == Keys.PageUp) sBC.FirstVehicle.MaxForce ; if (e.KeyCode == Keys.PageDown) sBC.FirstVehicle.MaxForce--; if (e.KeyCode == Keys.Q) Vehicle.ArriveRadius ; if (e.KeyCode == Keys.A) Vehicle.ArriveRadius--; if (e.KeyCode == Keys.W) Vehicle.WanderDistance ; if (e.KeyCode == Keys.S) Vehicle.WanderDistance--; if (e.KeyCode == Keys.E) Vehicle.WanderRadius ; if (e.KeyCode == Keys.D) Vehicle.WanderRadius--; if (e.KeyCode == Keys.R) Vehicle.WanderJitter ; if (e.KeyCode == Keys.F) Vehicle.WanderJitter--; if (e.KeyCode == Keys.T) Vehicle.CohesionRadius ; if (e.KeyCode == Keys.G) Vehicle.CohesionRadius--; if (e.KeyCode == Keys.Y) Vehicle.FOV ; if (e.KeyCode == Keys.H) Vehicle.FOV--; } break; case CurrentSimulation.EString: break; case CurrentSimulation.Ants: if (world != null) { if (e.KeyCode == Keys.Insert) Cosmos.elitismRate = .1f; if (e.KeyCode == Keys.Delete) Cosmos.elitismRate -= .1f; if (e.KeyCode == Keys.Home) Cosmos.mutationRate = .1; if (e.KeyCode == Keys.End) Cosmos.mutationRate -= .1; if (e.KeyCode == Keys.PageUp) Cosmos.foodTolerance = 1; if (e.KeyCode == Keys.PageDown) Cosmos.foodTolerance--; if (e.KeyCode == Keys.Q) Cosmos.maxForce ; if (e.KeyCode == Keys.A) Cosmos.maxForce--; if (e.KeyCode == Keys.W) Cosmos.maxSpeed ; if (e.KeyCode == Keys.S) Cosmos.maxSpeed--; } break; default: break; } } private void leaveTrailToolStripMenuItem_Click(object sender, EventArgs e) { leaveTrail = !leaveTrail; } private void mirroredToolStripMenuItem_Click(object sender, EventArgs e) { SBC.mirrored = !SBC.mirrored; } private void identicalBehaviourToolStripMenuItem_Click(object sender, EventArgs e) { identicalBehaviour = !identicalBehaviour; } private void cohesionToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.Cohesion; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.Cohesion; } private void alignmentToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.Alignment; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.Alignment; } private void cFToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.CF; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.CF; } private void initializeToolStripMenuItem1_Click(object sender, EventArgs e) { if (!drawingSurfaceInitialized) InitializeDrawingSurface(); DestroyAll(); timer1.Enabled = false; oldPoint = new Point(80, 450 - 200); newPoint = new Point(80, 450 - 200); ClearScreen(); grafx.Render(Graphics.FromHwnd(mainPanel.Handle)); leaveTrail = true; EString.elitism = float.Parse(textBoxElitismRate.Text); EString.maxIteration = uint.Parse(textBoxMaxIteration.Text); EString.mutationRate = float.Parse(textBoxMutationRate.Text); EString.popSize = int.Parse(textBoxPopulationSize.Text); CS = CurrentSimulation.EString; listView1.Visible = true; eStringRunning = true; listView1.Items.Clear(); Start(); } private void initializeToolStripMenuItem2_Click(object sender, EventArgs e) { if (!drawingSurfaceInitialized) InitializeDrawingSurface(); DestroyAll(); listView1.Items.Clear(); DestroyAll(); listView1.Visible = true; CS = CurrentSimulation.Ants; world = new Cosmos(int.Parse(textBoxFood.Text), int.Parse(textBoxNo.Text), mainPanel.ClientSize, g, listView1, mainPanel, grafx); world.Step(); } private void fastModeToolStripMenuItem_Click(object sender, EventArgs e) { Cosmos.fastMode = !Cosmos.fastMode; } private void aboutToolStripMenuItem_Click(object sender, EventArgs e) { aboutBox = new AboutBox(); aboutBox.ShowDialog(); } private void mainForm_FormClosing(object sender, FormClosingEventArgs e) { Cosmos.isRunning = false; eStringRunning = false; } private void showDetailsToolStripMenuItem_Click(object sender, EventArgs e) { Cosmos.showDetails = !Cosmos.showDetails; } private void destroyAllToolStripMenuItem_Click(object sender, EventArgs e) { DestroyAll(); } private void separationToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.Separation; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.Separation; } private void elitismToolStripMenuItem1_Click(object sender, EventArgs e) { Cosmos.useElitism = !Cosmos.useElitism; } private void fCASToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.FCAS; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.FCAS; } private void cASToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.CAS; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.CAS; } private void fCSToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.FCS; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.FCS; } private void cSToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.CS; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.CS; } private void cAToolStripMenuItem_Click(object sender, EventArgs e) { behaviourChanged = true; steeringBehaviour = SB.CA; if (sBC != null) sBC.FirstVehicle.SteeringBehaviour = SB.CA; } private void weightedSumToolStripMenuItem_Click(object sender, EventArgs e) { Vehicle.weightedSum = !Vehicle.weightedSum; } private void landMinesToolStripMenuItem_Click(object sender, EventArgs e) { Cosmos.landMines = !Cosmos.landMines; } private void identicalVehiclesToolStripMenuItem_Click(object sender, EventArgs e) { mainForm.identicalVehicles = !mainForm.identicalVehicles; } private void sigmoidToolStripMenuItem_Click(object sender, EventArgs e) { Network.tF = TransferFunctions.LogSigmoid; } private void hardLimitToolStripMenuItem_Click(object sender, EventArgs e) { Network.tF = TransferFunctions.HardLimit; } private void saturatingLinearToolStripMenuItem_Click(object sender, EventArgs e) { Network.tF = TransferFunctions.SaturatingLinear; } private void positiveLinearToolStripMenuItem_Click(object sender, EventArgs e) { Network.tF = TransferFunctions.PositiveLinear; } private void dToolStripMenuItem_Click(object sender, EventArgs e) { if (sBC != null) sBC.FirstVehicle.NewPath(); } private void specialPathsToolStripMenuItem_Click(object sender, EventArgs e) { Vehicle.enableSpecialPath = !Vehicle.enableSpecialPath; } #endregion } }