complete, step before doing ai
This commit is contained in:
56
Box.cs
Normal file
56
Box.cs
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace TicTacToe
|
||||||
|
{
|
||||||
|
public class Box
|
||||||
|
{
|
||||||
|
public Action<int> Pressed;
|
||||||
|
public int Index;
|
||||||
|
public bool BotOwned = false;
|
||||||
|
private Button _button;
|
||||||
|
public bool Filled = false;
|
||||||
|
|
||||||
|
public Box(Button button, int index)
|
||||||
|
{
|
||||||
|
_button = button;
|
||||||
|
Index = index;
|
||||||
|
button.Click += Clicked;
|
||||||
|
_button.Text = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Clicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Pressed.Invoke(Index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Destroy()
|
||||||
|
{
|
||||||
|
_button.Text = "";
|
||||||
|
_button.Click -= Clicked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetEnabled(bool value)
|
||||||
|
{
|
||||||
|
_button.Enabled = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PlayerClaim(bool bot)
|
||||||
|
{
|
||||||
|
Filled = true;
|
||||||
|
BotOwned = bot;
|
||||||
|
if (bot)
|
||||||
|
{
|
||||||
|
_button.Text = "O";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_button.Text = "X";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
222
Form1.Designer.cs
generated
222
Form1.Designer.cs
generated
@@ -28,12 +28,226 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
this.components = new System.ComponentModel.Container();
|
menuStrip1 = new MenuStrip();
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
fileToolStripMenuItem = new ToolStripMenuItem();
|
||||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
newGameToolStripMenuItem = new ToolStripMenuItem();
|
||||||
this.Text = "Form1";
|
exitToolStripMenuItem = new ToolStripMenuItem();
|
||||||
|
helpToolStripMenuItem = new ToolStripMenuItem();
|
||||||
|
aboutToolStripMenuItem = new ToolStripMenuItem();
|
||||||
|
lbl_wins = new Label();
|
||||||
|
grid_7 = new Button();
|
||||||
|
grid_4 = new Button();
|
||||||
|
grid_1 = new Button();
|
||||||
|
grid_2 = new Button();
|
||||||
|
grid_5 = new Button();
|
||||||
|
grid_8 = new Button();
|
||||||
|
grid_0 = new Button();
|
||||||
|
grid_3 = new Button();
|
||||||
|
grid_6 = new Button();
|
||||||
|
lbl_loses = new Label();
|
||||||
|
menuStrip1.SuspendLayout();
|
||||||
|
SuspendLayout();
|
||||||
|
//
|
||||||
|
// menuStrip1
|
||||||
|
//
|
||||||
|
menuStrip1.ImageScalingSize = new Size(24, 24);
|
||||||
|
menuStrip1.Items.AddRange(new ToolStripItem[] { fileToolStripMenuItem, helpToolStripMenuItem });
|
||||||
|
menuStrip1.Location = new Point(0, 0);
|
||||||
|
menuStrip1.Name = "menuStrip1";
|
||||||
|
menuStrip1.Size = new Size(800, 33);
|
||||||
|
menuStrip1.TabIndex = 3;
|
||||||
|
menuStrip1.Text = "menuStrip1";
|
||||||
|
//
|
||||||
|
// fileToolStripMenuItem
|
||||||
|
//
|
||||||
|
fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { newGameToolStripMenuItem, exitToolStripMenuItem });
|
||||||
|
fileToolStripMenuItem.Name = "fileToolStripMenuItem";
|
||||||
|
fileToolStripMenuItem.Size = new Size(54, 29);
|
||||||
|
fileToolStripMenuItem.Text = "File";
|
||||||
|
//
|
||||||
|
// newGameToolStripMenuItem
|
||||||
|
//
|
||||||
|
newGameToolStripMenuItem.Name = "newGameToolStripMenuItem";
|
||||||
|
newGameToolStripMenuItem.Size = new Size(270, 34);
|
||||||
|
newGameToolStripMenuItem.Text = "New game";
|
||||||
|
//
|
||||||
|
// exitToolStripMenuItem
|
||||||
|
//
|
||||||
|
exitToolStripMenuItem.Name = "exitToolStripMenuItem";
|
||||||
|
exitToolStripMenuItem.Size = new Size(270, 34);
|
||||||
|
exitToolStripMenuItem.Text = "Exit";
|
||||||
|
//
|
||||||
|
// helpToolStripMenuItem
|
||||||
|
//
|
||||||
|
helpToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { aboutToolStripMenuItem });
|
||||||
|
helpToolStripMenuItem.Name = "helpToolStripMenuItem";
|
||||||
|
helpToolStripMenuItem.Size = new Size(65, 29);
|
||||||
|
helpToolStripMenuItem.Text = "Help";
|
||||||
|
//
|
||||||
|
// aboutToolStripMenuItem
|
||||||
|
//
|
||||||
|
aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
|
||||||
|
aboutToolStripMenuItem.Size = new Size(164, 34);
|
||||||
|
aboutToolStripMenuItem.Text = "About";
|
||||||
|
//
|
||||||
|
// lbl_wins
|
||||||
|
//
|
||||||
|
lbl_wins.AutoSize = true;
|
||||||
|
lbl_wins.Location = new Point(337, 44);
|
||||||
|
lbl_wins.Name = "lbl_wins";
|
||||||
|
lbl_wins.Size = new Size(131, 25);
|
||||||
|
lbl_wins.TabIndex = 4;
|
||||||
|
lbl_wins.Text = "Antal Vinster: 0";
|
||||||
|
//
|
||||||
|
// grid_7
|
||||||
|
//
|
||||||
|
grid_7.Font = new Font("Segoe UI", 22F, FontStyle.Bold);
|
||||||
|
grid_7.Location = new Point(368, 260);
|
||||||
|
grid_7.Name = "grid_7";
|
||||||
|
grid_7.Size = new Size(64, 64);
|
||||||
|
grid_7.TabIndex = 5;
|
||||||
|
grid_7.Text = "O";
|
||||||
|
grid_7.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// grid_4
|
||||||
|
//
|
||||||
|
grid_4.Font = new Font("Segoe UI", 22F, FontStyle.Bold);
|
||||||
|
grid_4.Location = new Point(368, 190);
|
||||||
|
grid_4.Name = "grid_4";
|
||||||
|
grid_4.Size = new Size(64, 64);
|
||||||
|
grid_4.TabIndex = 6;
|
||||||
|
grid_4.Text = "O";
|
||||||
|
grid_4.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// grid_1
|
||||||
|
//
|
||||||
|
grid_1.Font = new Font("Segoe UI", 22F, FontStyle.Bold);
|
||||||
|
grid_1.Location = new Point(368, 120);
|
||||||
|
grid_1.Name = "grid_1";
|
||||||
|
grid_1.Size = new Size(64, 64);
|
||||||
|
grid_1.TabIndex = 7;
|
||||||
|
grid_1.Text = "X";
|
||||||
|
grid_1.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// grid_2
|
||||||
|
//
|
||||||
|
grid_2.Font = new Font("Segoe UI", 22F, FontStyle.Bold);
|
||||||
|
grid_2.Location = new Point(438, 120);
|
||||||
|
grid_2.Name = "grid_2";
|
||||||
|
grid_2.Size = new Size(64, 64);
|
||||||
|
grid_2.TabIndex = 8;
|
||||||
|
grid_2.Text = "O";
|
||||||
|
grid_2.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// grid_5
|
||||||
|
//
|
||||||
|
grid_5.Font = new Font("Segoe UI", 22F, FontStyle.Bold);
|
||||||
|
grid_5.Location = new Point(438, 190);
|
||||||
|
grid_5.Name = "grid_5";
|
||||||
|
grid_5.Size = new Size(64, 64);
|
||||||
|
grid_5.TabIndex = 9;
|
||||||
|
grid_5.Text = "O";
|
||||||
|
grid_5.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// grid_8
|
||||||
|
//
|
||||||
|
grid_8.Font = new Font("Segoe UI", 22F, FontStyle.Bold);
|
||||||
|
grid_8.Location = new Point(438, 260);
|
||||||
|
grid_8.Name = "grid_8";
|
||||||
|
grid_8.Size = new Size(64, 64);
|
||||||
|
grid_8.TabIndex = 10;
|
||||||
|
grid_8.Text = "O";
|
||||||
|
grid_8.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// grid_0
|
||||||
|
//
|
||||||
|
grid_0.Font = new Font("Segoe UI", 22F, FontStyle.Bold);
|
||||||
|
grid_0.Location = new Point(298, 120);
|
||||||
|
grid_0.Name = "grid_0";
|
||||||
|
grid_0.Size = new Size(64, 64);
|
||||||
|
grid_0.TabIndex = 13;
|
||||||
|
grid_0.Text = "O";
|
||||||
|
grid_0.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// grid_3
|
||||||
|
//
|
||||||
|
grid_3.Font = new Font("Segoe UI", 22F, FontStyle.Bold);
|
||||||
|
grid_3.Location = new Point(298, 190);
|
||||||
|
grid_3.Name = "grid_3";
|
||||||
|
grid_3.Size = new Size(64, 64);
|
||||||
|
grid_3.TabIndex = 12;
|
||||||
|
grid_3.Text = "O";
|
||||||
|
grid_3.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// grid_6
|
||||||
|
//
|
||||||
|
grid_6.Font = new Font("Segoe UI", 22F, FontStyle.Bold);
|
||||||
|
grid_6.Location = new Point(298, 260);
|
||||||
|
grid_6.Name = "grid_6";
|
||||||
|
grid_6.Size = new Size(64, 64);
|
||||||
|
grid_6.TabIndex = 11;
|
||||||
|
grid_6.Text = "O";
|
||||||
|
grid_6.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// lbl_loses
|
||||||
|
//
|
||||||
|
lbl_loses.AutoSize = true;
|
||||||
|
lbl_loses.Location = new Point(337, 69);
|
||||||
|
lbl_loses.Name = "lbl_loses";
|
||||||
|
lbl_loses.Size = new Size(146, 25);
|
||||||
|
lbl_loses.TabIndex = 14;
|
||||||
|
lbl_loses.Text = "Antal Förluster: 0";
|
||||||
|
//
|
||||||
|
// Form1
|
||||||
|
//
|
||||||
|
AutoScaleDimensions = new SizeF(10F, 25F);
|
||||||
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
|
ClientSize = new Size(800, 450);
|
||||||
|
Controls.Add(lbl_loses);
|
||||||
|
Controls.Add(grid_0);
|
||||||
|
Controls.Add(grid_3);
|
||||||
|
Controls.Add(grid_6);
|
||||||
|
Controls.Add(grid_8);
|
||||||
|
Controls.Add(grid_5);
|
||||||
|
Controls.Add(grid_2);
|
||||||
|
Controls.Add(grid_1);
|
||||||
|
Controls.Add(grid_4);
|
||||||
|
Controls.Add(grid_7);
|
||||||
|
Controls.Add(lbl_wins);
|
||||||
|
Controls.Add(menuStrip1);
|
||||||
|
MainMenuStrip = menuStrip1;
|
||||||
|
Name = "Form1";
|
||||||
|
Text = "Form1";
|
||||||
|
menuStrip1.ResumeLayout(false);
|
||||||
|
menuStrip1.PerformLayout();
|
||||||
|
ResumeLayout(false);
|
||||||
|
PerformLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
private Button btn_restart;
|
||||||
|
private MenuStrip menuStrip1;
|
||||||
|
private ToolStripMenuItem fileToolStripMenuItem;
|
||||||
|
private ToolStripMenuItem helpToolStripMenuItem;
|
||||||
|
private Label label1;
|
||||||
|
private ToolStripMenuItem aboutToolStripMenuItem;
|
||||||
|
private Button button3;
|
||||||
|
private Button button4;
|
||||||
|
private Button button5;
|
||||||
|
private Button button8;
|
||||||
|
public Button grid_7;
|
||||||
|
public Button grid_5;
|
||||||
|
public Button grid_8;
|
||||||
|
public Button grid_3;
|
||||||
|
public Button grid_6;
|
||||||
|
public Button grid_4;
|
||||||
|
public Button grid_0;
|
||||||
|
public Button grid_1;
|
||||||
|
public Button grid_2;
|
||||||
|
public Label lbl_wins;
|
||||||
|
public ToolStripMenuItem newGameToolStripMenuItem;
|
||||||
|
public Label lbl_loses;
|
||||||
|
public ToolStripMenuItem exitToolStripMenuItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
57
Form1.resx
57
Form1.resx
@@ -1,17 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<root>
|
<root>
|
||||||
<!--
|
<!--
|
||||||
Microsoft ResX Schema
|
Microsoft ResX Schema
|
||||||
|
|
||||||
Version 2.0
|
Version 2.0
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
The primary goals of this format is to allow a simple XML format
|
||||||
that is mostly human readable. The generation and parsing of the
|
that is mostly human readable. The generation and parsing of the
|
||||||
various data types are done through the TypeConverter classes
|
various data types are done through the TypeConverter classes
|
||||||
associated with the data types.
|
associated with the data types.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
... ado.net/XML headers & schema ...
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
<resheader name="version">2.0</resheader>
|
<resheader name="version">2.0</resheader>
|
||||||
@@ -26,36 +26,36 @@
|
|||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
<comment>This is a comment</comment>
|
<comment>This is a comment</comment>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
There are any number of "resheader" rows that contain simple
|
||||||
name/value pairs.
|
name/value pairs.
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
Each data row contains a name, and value. The row also contains a
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
text/value conversion through the TypeConverter architecture.
|
text/value conversion through the TypeConverter architecture.
|
||||||
Classes that don't support this are serialized and stored with the
|
Classes that don't support this are serialized and stored with the
|
||||||
mimetype set.
|
mimetype set.
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
The mimetype is used for serialized objects, and tells the
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
read any of the formats listed below.
|
read any of the formats listed below.
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
value : The object must be serialized with
|
value : The object must be serialized with
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
: and then encoded with base64 encoding.
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
value : The object must be serialized with
|
value : The object must be serialized with
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
: and then encoded with base64 encoding.
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
value : The object must be serialized into a byte array
|
value : The object must be serialized into a byte array
|
||||||
: using a System.ComponentModel.TypeConverter
|
: using a System.ComponentModel.TypeConverter
|
||||||
: and then encoded with base64 encoding.
|
: and then encoded with base64 encoding.
|
||||||
-->
|
-->
|
||||||
@@ -117,4 +117,7 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
</root>
|
</root>
|
||||||
176
Game.cs
Normal file
176
Game.cs
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Media;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Threading.Tasks.Dataflow;
|
||||||
|
|
||||||
|
namespace TicTacToe
|
||||||
|
{
|
||||||
|
public class Game
|
||||||
|
{
|
||||||
|
Form1 form;
|
||||||
|
Box[] boxes = new Box[9];
|
||||||
|
bool BotRound = false;
|
||||||
|
|
||||||
|
public Game()
|
||||||
|
{
|
||||||
|
form = Program.form;
|
||||||
|
boxes[0] = new Box(form.grid_0, 0); boxes[0].Pressed += ButtonClicked;
|
||||||
|
boxes[1] = new Box(form.grid_1, 1); boxes[1].Pressed += ButtonClicked;
|
||||||
|
boxes[2] = new Box(form.grid_2, 2); boxes[2].Pressed += ButtonClicked;
|
||||||
|
boxes[3] = new Box(form.grid_3, 3); boxes[3].Pressed += ButtonClicked;
|
||||||
|
boxes[4] = new Box(form.grid_4, 4); boxes[4].Pressed += ButtonClicked;
|
||||||
|
boxes[5] = new Box(form.grid_5, 5); boxes[5].Pressed += ButtonClicked;
|
||||||
|
boxes[6] = new Box(form.grid_6, 6); boxes[6].Pressed += ButtonClicked;
|
||||||
|
boxes[7] = new Box(form.grid_7, 7); boxes[7].Pressed += ButtonClicked;
|
||||||
|
boxes[8] = new Box(form.grid_8, 8); boxes[8].Pressed += ButtonClicked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Start()
|
||||||
|
{
|
||||||
|
Round();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ButtonClicked(int index)
|
||||||
|
{
|
||||||
|
Box box = boxes[index];
|
||||||
|
if (box.Filled) return;
|
||||||
|
box.PlayerClaim(BotRound);
|
||||||
|
RoundEnded();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Round()
|
||||||
|
{
|
||||||
|
if (BotRound)
|
||||||
|
{
|
||||||
|
BotTurn();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlayerTurn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void BotTurn()
|
||||||
|
{
|
||||||
|
SetInputEnabled(false);
|
||||||
|
|
||||||
|
Random random = new Random();
|
||||||
|
Box box;
|
||||||
|
bool[] boxCache = new bool[9];
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
int randomIndex = random.Next(0, 8);
|
||||||
|
box = boxes[randomIndex];
|
||||||
|
boxCache[randomIndex] = true;
|
||||||
|
if (!box.Filled)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
box.PlayerClaim(true);
|
||||||
|
|
||||||
|
RoundEnded();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CheckWins()
|
||||||
|
{
|
||||||
|
int[][] lines =
|
||||||
|
{
|
||||||
|
new[] {0, 1, 2},
|
||||||
|
new[] {3, 4, 5},
|
||||||
|
new[] {6, 7, 8},
|
||||||
|
new[] {0, 3, 6},
|
||||||
|
new[] {1, 4, 7},
|
||||||
|
new[] {2, 5, 8},
|
||||||
|
new[] {0, 4, 8},
|
||||||
|
new[] {2, 4, 6}
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var line in lines)
|
||||||
|
{
|
||||||
|
if (!boxes[line[0]].Filled || !boxes[line[1]].Filled || !boxes[line[2]].Filled)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (boxes[line[0]].BotOwned == BotRound &&
|
||||||
|
boxes[line[1]].BotOwned == BotRound &&
|
||||||
|
boxes[line[2]].BotOwned == BotRound)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PlayerTurn()
|
||||||
|
{
|
||||||
|
SetInputEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CheckWin()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RoundEnded()
|
||||||
|
{
|
||||||
|
if (CheckWins())
|
||||||
|
{
|
||||||
|
if (BotRound)
|
||||||
|
{
|
||||||
|
MessageBox.Show("You lost");
|
||||||
|
Program.AddLose();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox.Show("You won");
|
||||||
|
Program.AddWin();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BotRound = !BotRound;
|
||||||
|
|
||||||
|
if (IsAllBoxesFilled())
|
||||||
|
{
|
||||||
|
MessageBox.Show("Tie");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Round();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsAllBoxesFilled()
|
||||||
|
{
|
||||||
|
foreach (Box box in boxes)
|
||||||
|
{
|
||||||
|
if (!box.Filled)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetInputEnabled(bool value)
|
||||||
|
{
|
||||||
|
foreach (Box box in boxes)
|
||||||
|
{
|
||||||
|
box.SetEnabled(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Destroy()
|
||||||
|
{
|
||||||
|
foreach (Box box in boxes)
|
||||||
|
{
|
||||||
|
box.Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
43
Program.cs
43
Program.cs
@@ -1,17 +1,44 @@
|
|||||||
namespace TicTacToe
|
namespace TicTacToe
|
||||||
{
|
{
|
||||||
internal static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
/// <summary>
|
public static Form1 form = new Form1();
|
||||||
/// The main entry point for the application.
|
static Game game;
|
||||||
/// </summary>
|
static int wins = 0;
|
||||||
[STAThread]
|
static int loses = 0;
|
||||||
|
|
||||||
static void Main()
|
static void Main()
|
||||||
{
|
{
|
||||||
// To customize application configuration such as set high DPI settings or default font,
|
|
||||||
// see https://aka.ms/applicationconfiguration.
|
|
||||||
ApplicationConfiguration.Initialize();
|
ApplicationConfiguration.Initialize();
|
||||||
Application.Run(new Form1());
|
game = new Game();
|
||||||
|
game.Start();
|
||||||
|
form.newGameToolStripMenuItem.Click += NewGame;
|
||||||
|
form.exitToolStripMenuItem.Click += Exit;
|
||||||
|
Application.Run(form);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void NewGame(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
game.Destroy();
|
||||||
|
game = new Game();
|
||||||
|
game.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Exit(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Application.Exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void AddLose()
|
||||||
|
{
|
||||||
|
loses += 1;
|
||||||
|
form.lbl_loses.Text = "Antal F<>rluster: " + loses.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void AddWin()
|
||||||
|
{
|
||||||
|
wins += 1;
|
||||||
|
form.lbl_wins.Text = "Antal Vinster: " + wins.ToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user