首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實作中國象棋程式開發筆記(一)

     編輯:關於C語言

最近,和朋友下象棋,然後想到這個多年陳舊的程式碼(這些程式碼有些參考了網路上的一些貼子),曾經因為不知道如何實現人機對戰而放棄繼續研究。如今,這位朋友,給了我又重新找回來的興趣,所以來這裡請大家幫忙,如何實現人機對戰,讓電腦自動下呢?

目前,已經完成黑、紅兩方的下棋規則,但是還沒有實現人機對戰,目前只能人人對戰,也就是說一個具有下棋規則的棋盤而已。

為了方便大家給我出招解惑,我先說一下自己程式的原理:

1,32 個棋子都是具體的類別,並都是繼承於 ChessWorDBase。

棋子基類

using System;
using System.Collections;
using System.Windows.Forms;

namespace Zivsoft.Business.Chess
{
    /// <summary>
    /// 棋子
    /// </summary>
    internal abstract class ChessWorDBase : IChess
    {
        public const int XBoardLength = 9;
        public const int YBoardLength = 10;
        public static ArrayList All = new ArrayList();

        /// <summary>
        /// 棋盤範圍內
        /// </summary>
        /// <returns></returns>
        public virtual bool Check()
        {
            if ((this.X > 9) || (this.X < 1)) return false;
            if ((this.Y > 10) || (this.Y < 1)) return false;
            return true;
        }

        /// <summary>
        /// 被吃掉
        /// </summary>
        public virtual void Destroy()
        {
            this.IsDogFall = false;
            this.X = 0;
            this.Y = 0;
        }

        public virtual void Init()
        {
            this.IsDogFall = true;
            this.X = 0;
            this.Y = 0;
        }

        #region IChess Members
        public bool IsRedChess { get; set; }
        public bool IsDogFall { get; set; }
        public bool IsAttack { get; set; }
        public int NextX { get; set; }
        public int NextY { get; set; }
        public int X { get; set; }
        public int Y { get; set; }
        public string Name { get; set; }

        public abstract ArrayList GetNextLocation();

        public void Move(int ix, int iy)
        {
            this.MoveNext();
            if (this.Check(ix, iy, GetNextLocation()))
            {
                X = ix;
                Y = iy;
            }
        }

        private void MoveNext()
        {
            this.NextX = this.X;
            this.NextY = this.Y;
        }

        public abstract bool Check(int x, int y, ArrayList al);

        public void Move(int iX, int iY, object qz)
        {
            if (qz == null)
            {
                this.Move(iX, iY);
            }
            else
            {
                this.MoveNext();
                if (this.Check(iX, iY, GetNextLocation()))
                {
                    X = iX;
                    Y = iY;
                    ((ChessWorDBase)qz).Destroy();
                }
            }
        }
        #endregion
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved