写一下胡牌的思路
和牌算法在下面的类里面
思路:
步骤一:从数组中找到一对做”将”,并从数组中移除
依次进行步骤二的检查 检查完最后一种情况而没有返回 "能胡牌" 则返回 不能胡牌
步骤二: 余牌数量为0 则返回 “能胡牌” 否则进入下一步.
步骤三: 判断余牌前三张是否相同 相同-> 步骤四 ; 不同 -> 步骤五.
步骤四: 移除余牌中的前三张牌 , 返回步骤二.
步骤五: 若余牌中第一个数为N , 则判断是否有N + 1 与 N + 2 同时存在与余牌中 , 有将N , n+1 , n+2 从余牌中移除并返回 步骤二, 否则返回 步骤一
出牌,判断和牌算法在下面会贴相应的代码
–以下是我的代码—
缓存类
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// Player缓存
/// </summary>
public class PlayerChache
{
private static PlayerChache instance;
private List<Card> library;
private bool Iscurrent;//是否当前出牌者
private bool auto;
private bool cando;//当前是否有吃碰杠的行为
/// <summary>
/// 单例属性
/// </summary>
public static PlayerChache Instance
{
get
{
if (instance == null)
{
instance = new PlayerChache();
}
return instance;
}
}
/// <summary>
/// 获取牌库中牌的数量
/// </summary>
public int CardsCount
{
get { return library.Count; }
}
public List<Card> Library
{
get
{
return library;
}
}
public bool Iscurrent1
{
get
{
return Iscurrent;
}
set
{
Iscurrent = value;
}
}
public bool Auto
{
get
{
return auto;
}
set
{
auto = value;
}
}
public bool Cando
{
get
{
return cando;
}
set
{
cando = value;
}
}
/// <summary>
/// 私有构造
/// </summary>
private PlayerChache()
{
library = new List<Card>();
}
/// <summary>
/// 向牌库中添加牌
/// </summary>
/// <param name="card"></param>
public void AddCard(Card card)
{
card.BelongTo = CharacterType.Desk;
library.Add(card);
}
/// <summary>
/// 删除一张牌
/// </summary>
/// <param name="card"></param>
public void DeleteCard(Card card)
{
library.Remove(card);
}
/// <summary>
/// 清除内容
/// </summary>
public void ClearAll() {
library.Clear();
Iscurrent = false;
instance = null;
}
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// 桌面缓存区
/// </summary>
public class CardCache
{
private static CardCache instance;
private List<Card> library;
private CharacterType ctype;
private Suits rule;
public void Init()
{
}
/// <summary>
/// 单例属性
/// </summary>
public static CardCache Instance
{
get
{
if (instance == null)
{
instance = new CardCache();
}
return instance;
}
}
public Suits Rule
{
set { rule = value; }
get { return rule; }
}
/// <summary>
/// 索引器
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public Card this[int index]
{
get
{
return library[index];
}
}
/// <summary>
/// 获取牌库中牌的数量
/// </summary>
public int CardsCount
{
get { return library.Count; }
}
/// <summary>
/// 总权值
/// </summary>
public Card TotalWeight
{
get
{
return GameController.GetWeight(library.ToArray(), rule);
}
}
/// <summary>
/// 私有构造
/// </summary>
private CardCache()
{
library = new List<Card>();
}
/// <summary>
/// 发牌
/// </summary>
public Card Deal()
{
Card ret = library[library.Count - 1];
library.Remove(ret);
return ret;
}
/// <summary>
/// 向牌库中添加牌
/// </summary>
/// <param name="card"></param>
public void AddCard(Card card )
{
card.BelongTo = CharacterType.Desk;
library.Add(card);
}
/// <summary>
/// 清空桌面
/// </summary>
public void Clear()
{
if (library.Count != 0)
{
CardSprite[] cardSprites = GameObject.Find("showpoint").GetComponentsInChildren<CardSprite>();//注意这里要用GetComponentsInChildren,不能用GetComponentInChildren
for (int i = 0; i < cardSprites.Length; i++)
{
cardSprites[i].transform.parent = null;
cardSprites[i].Destroy();
}
while (library.Count != 0)
{
Card card = library[library.Count - 1];
library.Remove(card);
// CardControl.Instance.AddCard(card);
}
}
}
/// <summary>
/// 手牌排序
/// </summary>
public void Sort()
{
CardRules.SortCards(library, true);
}
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// AI缓存
/// </summary>
public class AICache
{
private static AICache instance;
private List<Card> library;
private bool Iscurrent;//是否当前出牌者
/// <summary>
/// 单例属性
/// </summary>
public static AICache Instance
{
get
{
if (instance == null)
{
instance = new AICache();
}
return instance;
}
}
/// <summary>
/// 获取牌库中牌的数量
/// </summary>
public int CardsCount
{
get { return library.Count; }
}
/// <summary>
/// 私有构造
/// </summary>
private AICache()
{
library = new List<Card>();
}
/// <summary>
/// 向牌库中添加牌
/// </summary>
/// <param name="card"></param>
public void AddCard(Card card)
{
card.BelongTo = CharacterType.Desk;
library.Add(card);
}
public List<Card> Library
{
get
{
return library;
}
}
public bool Iscurrent1
{
get
{
return Iscurrent;
}
set
{
Iscurrent = value;
}
}
/// <summary>
/// 删除一张牌
/// </summary>
/// <param name="card"></param>
public void DeleteCard(Card card)
{
library.Remove(card);
}
/// <summary>
/// 清除内容
/// </summary>
public void ClearAll()
{
library.Clear();
Iscurrent = false;
instance = null;
}
}
玩家出牌及AI出牌的控制类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//玩家出牌
public class PlayCard : MonoBehaviour
{
private GameController controller;
private void Start()
{
controller = GameObject.Find("GameControll").GetComponent<GameController>();
}
/// <summary>
/// 遍历选中的牌和牌精灵
/// </summary>
public bool CheckSelectCards()
{
CardSprite[] sprites = this.GetComponentsInChildren<CardSprite>();
//找出所有选中的牌
List<Card> selectedCardsList = new List<Card>();
List<CardSprite> selectedSpriteList = new List<CardSprite>();
for (int i = 0; i < sprites.Length; i++)
{
if (sprites[i].Select)
{
selectedSpriteList.Add(sprites[i]);
selectedCardsList.Add(sprites[i].Poker);
}
}
//排好序
CardRules.SortCards(selectedCardsList, true);
//出牌
return CheckPlayCards(selectedCardsList, selectedSpriteList);
}
/// <summary>
/// 检测是否符合type类信息
/// </summary>
/// <returns></returns>
public