Thanks for Save() and Load() methods. They work good but when I save somethink and Load it, it is loaded after press some key... and How would you do method StepBack ?? I didnt tell u before because I dont know about it:D ok so I will just do Binary seialization, and could I later do also Events?? because it all will be also for Windows Form. Can you tell me about some good tutorial for Windows Form after which I ll be able to remake dll also for WF?? And what about exceptions??. The rest I wont do.Below is whole code. You already can play checker, I just must finish a couple of details. THX!
.exe:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ClassLibrary1;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace Checkers
{
class Checkers
{
static Saveboard Board;
static char[,] Area;
static bool choose = true;
static void DrawBoard(bool firstTime)
{
//only need to do some things the first time the board is drawn
const int X = 8;
const int Y = 8;
int num = 8;
if (firstTime) Console.Clear();
// save cursor position
int origRow = Console.CursorTop;
int origCol = Console.CursorLeft;
// reset to 0,0
Console.SetCursorPosition(0, 0);
for (int i = 0; i < X; i++)
{
for (int y = 0; y < Y; y++)
{
Console.Write(Area[i, y]);
}
if (firstTime)
{
Console.WriteLine(num);
num--;
}
else
{
Console.WriteLine();
}
}
if (firstTime) Console.WriteLine("ABCDEFGH");
Console.SetCursorPosition(0, 10);
if(choose)
Console.WriteLine("Player 1");
else
Console.WriteLine("Player 2");
// restore cursor postion
Console.CursorTop = origRow;
Console.CursorLeft = origCol;
}
static void Save()
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = File.Create("saveboard.bin"))
formatter.Serialize(fs, Board);
}
static void Load()
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = File.OpenRead("saveboard.bin"))
Board = (Saveboard)formatter.Deserialize(fs);
}
public static void Keys()
{
bool redraw = false;
int col = 0;
int row = 0;
while (true)
{
var ch = Console.ReadKey().Key;
switch (ch)
{
case ConsoleKey.RightArrow:
Area = Board.MoveRight(out col, out row, out redraw);
break;
case ConsoleKey.DownArrow:
Area = Board.MoveDown(out col, out row, out redraw);
break;
case ConsoleKey.LeftArrow:
Area = Board.MoveLeft(out col, out row, out redraw);
break;
case ConsoleKey.UpArrow:
Area = Board.MoveUp(out col, out row, out redraw);
break;
case ConsoleKey.Enter:
Area = Board.EnterPressed(out col, out row, out redraw, out choose);
break;
case ConsoleKey.S:
Save();
break;
case ConsoleKey.L:
Load();
break;
}
if (redraw) DrawBoard(false);
Console.SetCursorPosition(col, row); // in case it's not in the right position following the move
}
}
static void Main()
{
Board = new Saveboard();
Area = Board.InitializeBoard();
DrawBoard(true);
Console.ReadKey(true);
Keys();
}
}
}
DLL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ClassLibrary1
{
public class Saveboard
{
public const int X = 8;
public const int Y = 8;
public char[,] Area = new char[X, Y];
char[,] Area2 = new char[X, Y];
int switcher = 0;
char Symbol = (char)5;
char Symbol2 = (char)6;
char Symbol3 = (char)4;
char Symbol4 = (char)3;
bool pick = true;
bool dir = true;
bool dir2 = true;
bool dir3 = true;
bool dir4 = true;
bool dir5 = true;
bool dir6 = true;
bool queen = true;
bool que = true;
bool que2 = true;
bool que3 = true;
bool que4 = true;
bool que5 = true;
bool que6 = true;
bool arr = true;
bool again = true;
bool player = true;
int xpos = 0;
int ypos = 0;
public char[,] InitializeBoard()
{
for (int i = 0; i < X; i++)
{
for (int y = 0; y < Y; y++)
{
if (switcher % 2 == 0)
Area[i, y] = 'X';
else
Area[i, y] = 'Y';
switcher++;
}
switcher++;
}
Area[0, 1] = Symbol;
Area[0, 3] = Symbol;
Area[0, 5] = Symbol;
Area[0, 7] = Symbol;
Area[1, 0] = Symbol;
Area[1, 2] = Symbol;
Area[1, 4] = Symbol;
Area[1, 6] = Symbol;
Area[7, 0] = Symbol2;
Area[7, 2] = Symbol2;
Area[7, 4] = Symbol2;
Area[7, 6] = Symbol2;
Area[6, 1] = Symbol2;
Area[6, 3] = Symbol2;
Area[6, 5] = Symbol2;
Area[6, 7] = Symbol2;
/*Area[4, 3] = Symbol;
Area[5, 2] = Symbol2;
Area[5, 4] = Symbol2;*/
Checkerboard();
return Area;
}
void Checkerboard()
{
for (int i = 0; i < X; i++)
{
for (int y = 0; y < Y; y++)
{
if (switcher % 2 == 0)
Area2[i, y] = 'X';
else
Area2[i, y] = 'Y';
switcher++;
}
switcher++;
}
}
public char[,] MoveRight(out int col, out int row, out bool redraw)
{
if (xpos + 1 == X)
{
redraw = true;
}
else if (pick)
{
xpos++;
redraw = true;
}
else
redraw = true;
col = xpos;
row = ypos;
return Area;
}
public char[,] MoveDown(out int col, out int row, out bool redraw)
{
if (player == true)
{
if (ypos + 1 == Y)
{
redraw = true;
}
else if (pick == true)
{
ypos++;
redraw = true;
}
else //pick = false
{
if (dir == true && arr == true)
{
if (xpos + 1 == X)
{
if (Area[ypos + 1, xpos - 1] == Symbol2)
{
ypos++; xpos--;
dir5 = false;
}
ypos++; xpos--;
dir3 = false;
dir2 = true;
}
else if (Area[ypos + 1, xpos + 1] == Symbol2)
{
if (xpos + 2 == X)
{
if (Area[ypos + 1, xpos - 1] == Symbol2)
{
ypos++;
xpos--;
dir5 = false;
}
ypos++;
xpos--;
dir3 = false;
dir2 = true;
}
else
{
ypos++;
xpos++;
ypos++;
xpos++;
dir4 = false;
dir2 = false;
}
}
else
{
ypos++;
xpos++;
dir2 = false;
}
again = true;
dir = false;
}
else if (dir2 == false)
{
if (xpos - 2 < 0 )
{
ypos--; xpos--;
dir3 = true;
dir = true;
}
else if (dir4 == false)
{
if (xpos - 3 < 0)
{
xpos++; ypos--;
dir = true;
dir3 = true;
}
else if (Area[ypos - 1, xpos - 3] == Symbol2)/////////////////////////
{
if (xpos - 4 < 0)
{
xpos++; ypos--;
dir = true;
dir3 = true;
}
else
{
ypos++;
xpos--;
dir6 = false;
dir3 = false;
}
}
ypos--;
xpos--;
xpos--;
xpos--;
dir3 = false;
dir4 = true;
}
else if (Area[ypos, xpos - 2] == Symbol2)
{
if (xpos - 3 < 0)
{
xpos--; ypos--;
dir = true;
dir3 = true;
}
else
{
ypos++;
xpos--;
xpos--;
xpos--;
dir5 = false;
dir3 = false;
}
}
else
{
xpos--;
xpos--;
dir3 = false;
}
again = true;
dir2 = true;
}
else if (dir3 == false)
{
if (dir5 == false)
{
ypos--;
xpos++;
dir5 = true;
}
else if (dir6 == false)
{
ypos--;
xpos++;
dir6 = true;
}
ypos--;
xpos++;
again = false;
dir3 = true;
dir = true;
}
redraw = true;
}
}
//************************** PLAYER 2 ********************************** MOVE DOWN
else if (player == false)
{
if (ypos + 1 == Y)
{
redraw = true;
}
else if (pick == true)
{
ypos++;
redraw = true;
}
else //pick = false
{
if (que == true && queen == false)
{
if (dir == true)
{
if (xpos + 1 == X)
{
if (Area[ypos + 1, xpos - 1] == Symbol)
{
ypos++; xpos--;
dir5 = false;
}
xpos--;
ypos++;
dir3 = false;
dir2 = true;
redraw = true;
}
else if (Area[ypos + 1, xpos + 1] == Symbol)
{
if (xpos + 2 == X)
{
if (Area[ypos + 1, xpos - 1] == Symbol)
{
ypos++;
xpos--;
dir5 = false;
}
ypos--;
xpos--;
dir3 = false;
dir2 = true;
}
else
{
ypos++;
xpos++;
ypos++;
xpos++;
dir4 = false;
dir2 = false;
}
}
else { xpos++; ypos++; dir2 = false; }
again = true;
arr = false;
dir = false;
}
else if (dir2 == false)
{
if (xpos - 2 < 0 || xpos - 3 < 0)
{
ypos--; xpos--;
dir3 = true;
dir = true;
}
else if (dir4 == false)
{
if (xpos - 3 < 0)
{
xpos++; ypos--;
dir = true;
dir3 = true;
}
else if (Area[ypos - 1, xpos - 3] == Symbol)
{
if (xpos - 4 < 0)
{
xpos++; ypos--;
dir = true;
dir3 = true;
}
else
{
xpos--;
ypos++;
dir6 = false;
dir3 = false;
}
}
ypos--;
xpos--;
xpos--;
xpos--;
dir4 = true;
}
else if (Area[ypos, xpos - 2] == Symbol)
{
if (xpos - 3 < 0)
{
xpos--; ypos--;
dir = true;
dir3 = true;
}
else
{
ypos++;
xpos--;
xpos--;
xpos--;
dir5 = false;
dir3 = false;
}
}
else
{
xpos--;
xpos--;
dir3 = false;
}
again = true;
arr = false;
dir2 = true;
}
else if (dir3 == false)
{
if (dir5 == false)
{
ypos--;
xpos++;
dir5 = true;
}
else if (dir6 == false)
{
xpos++;
ypos--;
dir6 = true;
}
ypos--;
xpos++;
arr = true;
dir3 = true;
dir = true;
again = false;
}
}
} redraw = true;
}
else
redraw = true;
col = xpos;
row = ypos;
return Area;
}
public char[,] MoveLeft(out int col, out int row, out bool redraw)
{
if (xpos - 1 < 0 )
{
redraw = true;
}
else if (pick == true)
{
xpos--;
redraw = true;
}
else
redraw = true;
col = xpos;
row = ypos;
return Area;
}
public char[,] MoveUp(out int col, out int row, out bool redraw)
{
if (player == true)
{
if (ypos - 1 < 0)
{
redraw = true;
}
else if (pick == true)
{
ypos--;
redraw = true;
}
else
if (dir == true && queen == false)
{
if (que == true)
{
if (xpos + 1 == X) /// 2
{
if (Area[ypos - 1, xpos - 1] == Symbol2)
{
ypos--; xpos--;
que5 = false;
}
ypos--;
xpos--;
que2 = true;
que3 = false;
}
else if (Area[ypos - 1, xpos + 1] == Symbol2)
{
if (xpos + 2 == X)
{
if (Area[ypos - 1, xpos - 1] == Symbol2)
{
ypos--;
xpos--;
que5 = false;
}
ypos--; xpos--;
que2 = true;
que3 = false;
}
else
{
ypos--;
xpos++;
ypos--;
xpos++;
que4 = false;
que2 = false;
}
}
else
{
ypos--;
xpos++;
que2 = false;
}
again = true;
arr = false;
que = false;
}
else if (que2 == false)
{
if (xpos - 2 < 0) // 1
{
ypos++; xpos--;
que = true;
que3 = true;
}
else if (que4 == false)
{
if (xpos - 3 < 0) // 3
{
xpos++; ypos++;
que = true;
que3 = true;
}
else if (Area[ypos - 1, xpos - 3] == Symbol2)
{
if (xpos - 3 < 0)
{
ypos--; xpos--;
que = true;
que3 = true;
}
else if (xpos - 4 < 0)
{
ypos++; xpos++;
que = true;
que3 = true;
}
else
{
ypos++;
xpos--;
que6 = false;
que3 = false;
}
}
ypos++;
xpos--;
xpos--;
xpos--;
que3 = false;
que4 = true;
}
else if (Area[ypos, xpos - 2] == Symbol2)
{
if (xpos - 3 < 0)
{
xpos--; ypos++;
que = true;
que3 = true;
}
else
{
ypos--;
xpos--;
xpos--;
xpos--;
que5 = false;
que3 = false;
}
}
else
{
xpos--;
xpos--;
que3 = false;
}
again = true;
arr = false;
que2 = true;
}
else if (que3 == false)
{
if (que5 == false)
{
ypos++;
xpos++;
dir5 = true;
}
else if (que6 == false)
{
ypos++;
xpos++;
que6 = true;
}
ypos++;
xpos++;
arr = true;
que3 = true;
que = true;
again = false;
}
}// pick = false
}
//************************************* player 2 ************************** UP ARROW
else if (player == false)
{
if (ypos - 1 < 0)
{
redraw = true;
}
else if (pick == true)
{
ypos--;
redraw = true;
}
else // pick = false
if (que == true && arr == true)
{
if (xpos + 1 == X ) // 2 ZMENA
{
if (Area[ypos - 1, xpos - 1] == Symbol)
{
ypos--; xpos--;
que5 = false;
}
ypos--;
xpos--;
que2 = true;
que3 = false;
}
else if (Area[ypos - 1, xpos + 1] == Symbol)
{
if (xpos + 2 == X)
{
if (Area[ypos - 1, xpos - 1] == Symbol)
{
ypos--;
xpos--;
que5 = false;
}
ypos--; xpos--;
que2 = true;
que3 = false;
}
else
{
ypos--;
xpos++;
ypos--;
xpos++;
que4 = false;
que2 = false;
}
}
else
{
ypos--;
xpos++;
que2 = false;
}
again = true;
que = false;
}
else if (que2 == false)
{
if (xpos - 2 < 0 ) // 1 ZMENA
{
ypos++; xpos--;
que = true;
que3 = true;
}
else if (que4 == false)
{
if (xpos - 3 < 0) // 3 ZMENA
{
xpos++; ypos++;
que = true;
que3 = true;
}
else if (Area[ypos + 1, xpos - 3] == Symbol)
{
if (xpos - 3 < 0)
{
ypos--; xpos--;
que = true;
que3 = true;
}
else if (xpos - 4 < 0)
{
ypos++; xpos++;
que = true;
que3 = true;
}
else
{
ypos--;
xpos--;
que6 = false;
que3 = false;
}
}
ypos++;
xpos--;
xpos--;
xpos--;
que3 = false;
que4 = true;
}
else if (Area[ypos, xpos - 2] == Symbol)
{
if (xpos - 3 < 0)
{
xpos--; ypos++;
que = true;
que3 = true;
}
else
{
ypos--;
xpos--;
xpos--;
xpos--;
que5 = false;
que3 = false;
}
}
else
{
xpos--;
xpos--;
que3 = false;
}
again = true;
que2 = true;
}
else if (que3 == false)
{
if (que5 == false)
{
ypos++;
xpos++;
que5 = true;
}
else if (que6 == false)
{
ypos++;
xpos++;
que6 = true;
}
ypos++;
xpos++;
que3 = true;
que = true;
again = false;
}
}
redraw = true;
col = xpos;
row = ypos;
return Area;
}
public char[,] EnterPressed(out int col, out int row, out bool redraw, out bool choose)
{
if (player == true)
{
if (pick == true && Area[ypos, xpos] == Symbol)
{
Area[ypos, xpos] = Area2[ypos, xpos];
redraw = true;
pick = false;
dir = true;
again = false;
}
else if (pick == true && Area[ypos, xpos] == Symbol3)
{
Area[ypos, xpos] = Area2[ypos, xpos];
redraw = true;
pick = false;
dir = true;
que = true;
queen = false;
again = false;
}
else if (pick == false && Area[ypos, xpos] == 'Y') // SAVE
{
if (dir5 == false && (Area[ypos - 1, xpos + 1] == Symbol2))
{
Area[ypos - 1, xpos + 1] = Area2[ypos, xpos];
if (queen == false)
Area[ypos, xpos] = Symbol3;
else
Area[ypos, xpos] = Symbol;
player = false;
}
else if (dir4 == false && (Area[ypos - 1, xpos - 1] == Symbol2))
{
Area[ypos - 1, xpos - 1] = Area2[ypos, xpos];
if (queen == false)
Area[ypos, xpos] = Symbol3;
else
Area[ypos, xpos] = Symbol;
player = false;
}
else if (dir6 == false && (Area[ypos - 1, xpos + 1] == Symbol2))
{
Area[ypos - 1, xpos + 1] = Area2[ypos, xpos];
if (queen == false)
Area[ypos, xpos] = Symbol3;
else
Area[ypos, xpos] = Symbol;
player = false;
}
else if (que4 == false && (Area[ypos + 1, xpos - 1] == Symbol2))
{
Area[ypos + 1, xpos - 1] = Area2[ypos, xpos];
Area[ypos, xpos] = Symbol3;
player = false;
}
else if (que5 == false && (Area[ypos + 1, xpos + 1] == Symbol2))
{
Area[ypos + 1, xpos + 1] = Area2[ypos, xpos];
Area[ypos, xpos] = Symbol3;
player = false;
}
else if (que6 == false && (Area[ypos + 1, xpos + 1] == Symbol2))
{
Area[ypos + 1, xpos + 1] = Area2[ypos, xpos];
Area[ypos, xpos] = Symbol3;
player = false;
}
else if (ypos == 7 && Area[ypos, xpos] == 'Y')
{
Area[ypos, xpos] = Symbol3;
}
else if (again == false)
{
if (queen == false)
{
Area[ypos, xpos] = Symbol3;
queen = true;
}
else
Area[ypos, xpos] = Symbol;
player = true;
}
else
{
if (queen == false)
{
Area[ypos, xpos] = Symbol3;
queen = true;
}
else
Area[ypos, xpos] = Symbol;
player = false;
}
queen = true;
arr = true;
player = false;
pick = true;
dir = true;
dir2 = true;
dir3 = true;
dir4 = true;
dir5 = true;
que2 = true;
que3 = true;
que4 = true;
que5 = true;
again = true;
redraw = true;
}
else
redraw = false;
}
//*************************************** PLAYER 2 ************************** ENTER
else if (player == false)
{
if (pick == true && Area[ypos, xpos] == Symbol2)
{
Area[ypos, xpos] = Area2[ypos, xpos];
redraw = true;
pick = false;
que = true;
again = false;
}
else if (pick == true && Area[ypos, xpos] == Symbol4)
{
Area[ypos, xpos] = Area2[ypos, xpos];
redraw = true;
pick = false;
dir = true;
que = true;
queen = false;
}
else if (pick == false && Area[ypos, xpos] == 'Y') // SAVE
{
if (que5 == false && (Area[ypos + 1, xpos + 1] == Symbol))
{
Area[ypos + 1, xpos + 1] = Area2[ypos, xpos];
if (queen == false)
Area[ypos, xpos] = Symbol4;
else
Area[ypos, xpos] = Symbol2;
player = false;
}
else if (que4 == false && (Area[ypos + 1, xpos - 1] == Symbol))
{
Area[ypos + 1, xpos - 1] = Area2[ypos, xpos];
if (queen == false)
Area[ypos, xpos] = Symbol4;
else
Area[ypos, xpos] = Symbol2;
player = false;
}
else if (que6 == false && (Area[ypos + 1, xpos + 1] == Symbol))
{
Area[ypos + 1, xpos + 1] = Area2[ypos, xpos];
if (queen == false)
Area[ypos, xpos] = Symbol4;
else
Area[ypos, xpos] = Symbol2;
player = false;
}
else if (dir4 == false && (Area[ypos - 1, xpos - 1] == Symbol))
{
Area[ypos - 1, xpos - 1] = Area2[ypos, xpos];
Area[ypos, xpos] = Symbol4;
player = false;
}
else if (dir5 == false && (Area[ypos - 1, xpos - 1] == Symbol))
{
Area[ypos - 1, xpos - 1] = Area2[ypos, xpos];
Area[ypos, xpos] = Symbol4;
player = false;
}
else if (dir6 == false && (Area[ypos - 1, xpos + 1] == Symbol))
{
Area[ypos - 1, xpos + 1] = Area2[ypos, xpos];
Area[ypos, xpos] = Symbol4;
player = false;
}
else if (ypos == 0 && Area[ypos, xpos] == 'Y')
{
Area[ypos, xpos] = Symbol4;
}
else if (again == false)
{
if (queen == false)
{
Area[ypos, xpos] = Symbol4;
queen = true;
}
else
Area[ypos, xpos] = Symbol2;
player = false;
}
else
{
if (queen == false)
{
Area[ypos, xpos] = Symbol4;
queen = true;
}
else
Area[ypos, xpos] = Symbol2;
player = true;
}
queen = true;
pick = true;
player = true;
dir = true;
arr = true;
dir2 = true;
dir3 = true;
dir4 = true;
dir5 = true;
que2 = true;
que3 = true;
que4 = true;
que5 = true;
again = true;
redraw = true;
}
else
redraw = true;
}
choose = player;
col = xpos;
row = ypos;
redraw = true;
return Area;
}
}
}