دانلود سورس کد برجهای هانوی در سی شارپ #C

دانلود سورس کد برجهای هانوی در سی شارپ #C
در این قسمت سورس برنامه برجهای هانوی را که با زبان برنامه نویسی سی شارپ نوشته شده است و مطمئنا با آن آشنایی دارید جهت استفاده شما قرار داده ایم.
برنامه برجهای هانوی به این صورت است که : سه میله داریم که صفحات با اندازه های مختلف بصورت پراکنده روی آنها قرار گرفته اند. باید صفحات را طوری روی میله ها جابه جا کنیم که در پایان همه صفحات به ترتیب اندازه از کوچک به بزرگ (صعودی) روی هم در برج مقصد قرار گیرند. توجه داشته باشید که در طول مسیر جابه جایی، نباید هیچ صفحه بزرگتری روی صفحه کوچکتر قرار گیرد.
این برنامه با توابع ساده و قابل فهمی طراحی شده است دارای یک فرم است که با ورود به آن میتوان تعداد صفحات برای برنامه را تعیین کرد. در فرم سه میله ی منبع، میله ی کمکی و میله مقصد نیز وجود دارد. با کلیک روی دکمه Start برنامه شروع میشود با کلیک روی دکمه Next صفحه بصورت تکی در جهت رسیدن به هدف (قرار گرفتن بصورت صودی روی میله مقصد) حرکت میکنند. در برنامه تعداد حرکتها نیز محاسبه میشود. همچنین برای خروج از برنامه نیز دکمه Exit قرار داده شده است.
برنامه اصلی #C برجهای هانوی را میتوانید در پایین صفحه دانلود کنید.
سورس کد برجهای هانوی را در زیر میتوانید مشااهده کنید. این سورس در تمام نسخه های ویژوال استودیو برای شما قابل استفاده می باشد:
sing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace HanoiTowers
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
allStands = new List[] { Stand1plates, Stand2plates, Stand3plates };
// Stand2plates.Add(3);
}
List[] allStands;
List Stand1plates = new List();
List Stand2plates = new List();
List Stand3plates = new List();
int plates = 4;
int mySource=1, myInter=2,myDest=3;
int standWidth = 30;
int plateHeight = 20;
int TotalMoves;
frmNext fnext = new frmNext();
void solveTowers(int count, int source, int dest, int inter)
{
if (count == 1)
{
try
{
MoveFromTo(source, dest);
TotalMoves++;
{
fnext.lblMove.Text = "Move from stand " + source.ToString() + " to stand " + dest.ToString();
fnext.lblMoves.Text = TotalMoves.ToString();
fnext.Location = new Point(this.Width / 2 - fnext.Width / 2, this.Height - 25);
fnext.ShowDialog();
}
label2.Text = "total moves: " + TotalMoves.ToString();
}
catch { }
}
else
{
solveTowers(count - 1, source, inter, dest);
solveTowers(1, source, dest, inter);
solveTowers(count - 1, inter, dest, source);
}
}
private void MoveFromTo(int source, int dest)
{
int top = allStands[source-1][allStands[source-1].Count - 1];
allStands[source - 1].Remove(top);
allStands[dest-1].Add(top);
RedrawPanels();
}
void start()
{
TotalMoves = 0;
for (int i = plates; i > 0; i--)
{
Stand1plates.Add(i);
}
RedrawPanels();
solveTowers(plates, mySource, myDest, myInter);
}
private void RedrawPanels()
{
pnlDestination.Invalidate();
pnlSource.Invalidate();
pnlIntermediate.Invalidate();
}
private void button1_Click(object sender, EventArgs e)
{
start();
}
private void pnl_Paint(object sender, PaintEventArgs e)
{
Panel p = (Panel)sender;
Graphics pnlGraphix = e.Graphics;
pnlGraphix.Clear(Color.White);
DrawTheStand(pnlGraphix, p);
DrawPlates(pnlGraphix, p, p.TabIndex);
}
private void DrawTheStand(Graphics graphics, Panel p)
{
graphics.FillRectangle(new SolidBrush(Color.Gray), new Rectangle(p.Width / 2 - standWidth / 2, p.Width / 2 - standWidth / 2, standWidth, p.Height - 20));
}
private void DrawPlates(Graphics graphics, Panel p, int StandNo)
{
if (Stand1plates == null) return;
Stand1plates.Sort();
Stand1plates.Reverse();
switch (StandNo)
{
case 1:
DrawStandPlates(graphics, Stand1plates, p); break;
case 2:
DrawStandPlates(graphics, Stand2plates, p); break;
case 3:
DrawStandPlates(graphics, Stand3plates, p); break;
}
}
private void DrawStandPlates(Graphics graphics, List plates, Panel p)
{
int i = 0;
foreach (int plateNo in plates)
{
i++;
graphics.FillEllipse(new SolidBrush(Color.Red), new Rectangle(p.Width / 2 - (plateNo * 30) / 2, p.Height - i * plateHeight, plateNo * 30, plateHeight));
graphics.DrawString(plateNo.ToString(), new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Bold), Brushes.Black, new Rectangle(p.Width / 2-8 , p.Height - i * plateHeight, plateNo * 30, plateHeight));
}
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
plates = Convert.ToInt32(numericUpDown1.Value);
RedrawPanels();
}
private void frmMain_Load(object sender, EventArgs e)
{
}
private void button1_Click_1(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("http://WWw.SourceCodes.ir");
}
} //ends Hanoi class
}
سورس کد برنامه برجهای هانوی با زبان سی شارپ #c را به صورت رایگان دانلود کنید
حجم فایل : 91.3 KB