Adam

Adam

  • NA
  • 131
  • 30.7k

Checkers_03

May 4 2011 6:55 AM
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;
  }
  }
  }



Answers (32)