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

دانلود سورس کد بازی هشت در سی شارپ #C
در این پست بازی هشت را که مطمئنا همگی با آن آشنایی دارید، جهت استفاده و دانلود شما قرار داده ایم که با زبان سی شارپ نوشته شده است.
در بازی هشت، یک مربع شامل نه خانه داریم که اعداد از 1 تا 8 به صورت نامرتب قرار داده شده اند. بازی به این صورت است که با حرکت دادن اعداد بصورت افقی و عمودی، باید طوری آنها را مرتب کرد که از چپ به راست به ترتیب از عدد 1 به بزرگتر قرار گیرند.
در این برنامه معمای هشت که در این قسمت مشاهده میکنید، قابلیتهای جالبی برای این بازی طراحی شده است. میتوان جدول داده شده را با تعداد دفعات مختلف و سرعتهای گوناگون درهم سازی کرد و با کلیک روی هر خانه از جدول آنها را برای رسیدن به یک جدول مرتب نهایی حرکت داد. میتوان مسیر را نمایش داد، درخت را محاسبه و تولید کرد و یا جدول جدیدی را ایجاد و بازی کرد. میتوان اطلاعات درخت تولید شده را نیز درآورد. با کلیک روی گزینه محاسبه و تولید درخت، تعداد نودهای درخت، تعداد نود گسترش یافته و عمق درخت محاسبه شده و نمایش داده میشوند.
برنامه اصلی بازی هشت با سی شارپ را میتوانید در پایین صفحه دانلود کنید.
سورس کد بازی هشت را در زیر میبینید. این سورس در تمام نسخه های ویژوال استودیو برای شما قابل استفاده می باشد:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using SystemComponent;
namespace eight_eight
{
public partial class Form1 : Form
{
Node newNode;
priorityQueue pQueue;
ArrayList path = new ArrayList();
firstModel fm;
bool crtTree = false;
public Form1()
{
newNode = new Node();
InitializeComponent();
fm = new firstModel();
pQueue = new priorityQueue(true);
pQueue.FirstM = fm;
}
public void showMatrix()
{
int[,] digit = new int[3, 3];
digit = newNode.Matrix;
if (digit[0, 0] != 0)
label1.Text = digit[0, 0].ToString();
else
label1.Text = "";
if (digit[0, 1] != 0)
label2.Text = digit[0, 1].ToString();
else
label2.Text = "";
if (digit[0, 2] != 0)
label3.Text = digit[0, 2].ToString();
else
label3.Text = "";
if (digit[1, 0] != 0)
label4.Text = digit[1, 0].ToString();
else
label4.Text = "";
if (digit[1, 1] != 0)
label5.Text = digit[1, 1].ToString();
else
label5.Text = "";
if (digit[1, 2] != 0)
label6.Text = digit[1, 2].ToString();
else
label6.Text = "";
if (digit[2, 0] != 0)
label7.Text = digit[2, 0].ToString();
else
label7.Text = "";
if (digit[2, 1] != 0)
label8.Text = digit[2, 1].ToString();
else
label8.Text = "";
if (digit[2, 2] != 0)
label9.Text = digit[2, 2].ToString();
else
label9.Text = "";
}
private void createTree()
{
int depth = 0;
bool state = false;
bool[] availToMove = new bool[4];
int nodeCount = 0;
int expandedNode = 0;
//*********** create initial state ***********
queueObject queueObj = new queueObject();
queueObj.Matrix = newNode.Matrix;
queueObj.Manhatan = newNode.showManhatanInt();
queueObj.EmptyX = newNode.getEmptyX();
queueObj.EmptyY = newNode.getEmptyY();
queueObj.path.Add(-1);
if (queueObj.Manhatan != 0)
{
//************ add to queue ******************
int[,] mtrx = new int[3, 3];
pQueue.enqueue(queueObj);
nodeCount++;
while ((pQueue.getCount() != 0) && (!state))
{
queueObject queueTemp = pQueue.dequeue(); expandedNode++;
Node myNode = new Node();
myNode.importQueueObject(queueTemp);
availToMove = myNode.availableMove();
depth++;
for (int i = 0; i < 4; i++)
{
if (availToMove[i])
{
Node nodeTemp = new Node();
nodeTemp.Matrix = queueTemp.Matrix;
nodeTemp.EmptyX = queueTemp.EmptyX;
nodeTemp.EmptyY = queueTemp.EmptyY;
nodeTemp.move(i);
nodeTemp.showManhatanInt();
//******
queueObject qobj = new queueObject();
qobj.Matrix = nodeTemp.Matrix;
qobj.Manhatan = nodeTemp.showManhatanInt();
qobj.EmptyX = nodeTemp.getEmptyX();
qobj.EmptyY = nodeTemp.getEmptyY();
qobj.Gx = nodeTemp.Gx + 1;
for (int p = 0; p < queueTemp.path.Count; p++)
{ qobj.path.Add(queueTemp.path[p]); }
qobj.path.Add(i);
pQueue.enqueue(qobj); nodeCount++;
if (qobj.Manhatan == 0)
{
for (int x = 0; x < qobj.path.Count; x++)
{
path.Add(qobj.path[x]);
}
state = true;
break;
}
}
}
}
}
else
{
MessageBox.Show("جدول مرتب است");
}
nodeCountL.Text = "";
expandedNodeL.Text = "";
treeDepthL.Text = "";
nodeCountL.Text = nodeCount.ToString();
expandedNodeL.Text = expandedNode.ToString();
treeDepthL.Text = (path.Count-1 ).ToString();
pathCountL.Text = (path.Count - 2).ToString();
}
private void label3_Click(object sender, EventArgs e)
{
int cellNum;
bool[] temp = new bool[4];
string cell = sender.ToString().Substring(sender.ToString().IndexOf("Text:") + 6);
if (cell.Length > 0)
{
cellNum = Convert.ToInt16(cell);
temp = newNode.availableMoveCell(cellNum);
if (temp[0] || temp[1] || temp[2] || temp[3])
{
newNode.changeMatrixCell(cellNum);
showMatrix();
}
}
}
private void showPathB_Click(object sender, EventArgs e)
{
int pathCount = path.Count - 2;
pathCountL.Text = pathCount.ToString();
for (int i = 1; i < path.Count; i++)
{
newNode.move(((int)path[i]));
pathCountL.Text = (pathCount--).ToString();
Thread.Sleep(1000);
showMatrix();
this.Refresh();
}
path.Clear();
Node nd = new Node();
priorityQueue p = new priorityQueue(true);
newNode = nd;
pQueue = p;
}
#region ********* Buttons code ***************
#region **** new ****
private void newStartPB_MouseClick(object sender, MouseEventArgs e)
{
Node nd = new Node();
newNode = nd;
priorityQueue pq = new priorityQueue(true);
pQueue = pq;
path.Clear();
showMatrix();
nodeCountL.Text = "";
expandedNodeL.Text = "";
treeDepthL.Text = "";
}
private void newStartPB_MouseUp(object sender, MouseEventArgs e)
{
this.newStartPB.Image = global::eight_eight.Properties.Resources.start1;
}
private void newStartPB_MouseDown(object sender, MouseEventArgs e)
{
this.newStartPB.Image = global::eight_eight.Properties.Resources.start3;
}
#endregion
#region **** refresh ****
private void refreshPB_MouseClick(object sender, MouseEventArgs e)
{
int speed = 0, counter = 1000;
try
{
if ((speedCB.Text == "") || (speedCB.Text == "سريع"))
{
speed = 0;
}
else
{
speed = Convert.ToInt16(speedCB.Text);
}
if (counterCB.Text == "")
{
counter = 1000;
}
else
{
counter = Convert.ToInt16(counterCB.Text);
}
}
catch
{
MessageBox.Show("!مقادير انتخاب شده صحيح نمي باشند");
}
Random rnd = new Random();
bool[] temp = new bool[4];
int x = 0;
for (int i = 0; i < counter; i++)
{
temp = newNode.availableMove();
while (true)
{
x = rnd.Next(0, 4);
if (temp[x] == true && x < 4)
{
newNode.move(x);
if (speed != 0)
{
Thread.Sleep(speed);
showMatrix();
this.Refresh();
}
break;
}
}
}
showMatrix();
}
private void refreshPB_MouseDown(object sender, MouseEventArgs e)
{
this.refreshPB.Image = global::eight_eight.Properties.Resources.refresh2;
}
private void refreshPB_MouseUp(object sender, MouseEventArgs e)
{
this.refreshPB.Image = global::eight_eight.Properties.Resources.refresh1;
}
#endregion
#region **** create tree ****
private void createTreePB_MouseClick(object sender, MouseEventArgs e)
{
//if (crtTree)
{
createTree();
}
crtTree = true;
}
private void createTreePB_MouseDown(object sender, MouseEventArgs e)
{
this.createTreePB.Image = global::eight_eight.Properties.Resources.cteateTree2;
}
private void createTreePB_MouseUp(object sender, MouseEventArgs e)
{
this.createTreePB.Image = global::eight_eight.Properties.Resources.cteateTree1;
}
#endregion
#region **** show path ****
private void showPathPB_MouseUp(object sender, MouseEventArgs e)
{
this.showPathPB.Image = global::eight_eight.Properties.Resources.showPath1;
}
private void showPathPB_MouseDown(object sender, MouseEventArgs e)
{
this.showPathPB.Image = global::eight_eight.Properties.Resources.showPath2;
}
private void showPathPB_MouseClick(object sender, MouseEventArgs e)
{
if (crtTree)
{
int pathCount = path.Count - 2;
for (int i = 1; i < path.Count; i++)
{
newNode.move(((int)path[i]));
pathCountL.Text = (pathCount--).ToString();
Thread.Sleep(1000);
showMatrix();
this.Refresh();
}
path.Clear();
Node nd = new Node();
priorityQueue p = new priorityQueue(true);
newNode = nd;
pQueue = p;
crtTree = false;
}
}
#endregion
#region **** exit button ****
private void exitPB_MouseUp(object sender, MouseEventArgs e)
{
this.exitPB.Image = global::eight_eight.Properties.Resources.exit1;
}
private void exitPB_MouseDown(object sender, MouseEventArgs e)
{
this.exitPB.Image = global::eight_eight.Properties.Resources.exit2;
}
private void exitPB_MouseClick(object sender, MouseEventArgs e)
{
Application.Exit();
}
#endregion
private void Form1_Load(object sender, EventArgs e)
{
}
#endregion
}
}
سورس کد بازی هشت با زبان #c را به صورت رایگان دانلود کنید
حجم فایل : 1.20 MB
با سلام در این پروژه که طراحی شده بسیار سپاس گذارم که تونستید من دانشجو را بعد از سه هفته جستجو این پروژه رو دریافت کنم من دانشجو !سر رشته ام برنامه نویسیه ولی تحلیلگراییم ضعیفه خیلی خیلی ممنونم