Skip to content
This repository has been archived by the owner on Jul 27, 2018. It is now read-only.

Commit

Permalink
features and bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
Cyl18 committed Feb 19, 2018
1 parent ac19930 commit d5dae1c
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 13 deletions.
13 changes: 8 additions & 5 deletions CardSharp/GameComponents/Desk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,10 @@ public class Desk : MessageSenderBase, IDesk, IEquatable<Desk>

private ICommandParser _currentParser;

public Desk(string deskId)
public Desk(string deskId, string groupName = "DefaultGroupName")
{
DeskId = deskId;
GroupName = groupName;
_currentParser = new WaitingParser();
_standardParser = new StandardParser();
}
Expand Down Expand Up @@ -64,6 +65,7 @@ public GameState State
public List<Player> PlayerList => Players.ToList();

public string DeskId { get; }
public string GroupName { get; }

public Player LastSuccessfulSender { get; internal set; }

Expand Down Expand Up @@ -168,12 +170,13 @@ public static List<Card> GenerateCards()
return list;
}

public static Desk GetOrCreateDesk(string deskid)
public static Desk GetOrCreateDesk(string deskid, string groupName = "DefaultGroupName")
{
var gname = groupName ?? "DefaultGroupName";
if (Desks.ContainsKey(deskid))
return Desks[deskid];

var desk = new Desk(deskid);
var desk = new Desk(deskid, gname);
Desks.Add(deskid, desk);
return desk;
}
Expand Down Expand Up @@ -283,7 +286,7 @@ private void SaveScore(Player p, int dif, Player playerWinner)
#endif
}

public void FinishGame(bool force = false)
public void FinishGame(bool force = true)
{
if (force) {
AddMessage("游戏结束.");
Expand Down Expand Up @@ -327,7 +330,7 @@ public void BoardcastDesks()
{
foreach (var pair in Desks.Where(desk => desk.Value.State == GameState.Gaming))
{
AddMessageLine($"群{pair.Key}正在游戏中");
AddMessageLine($"群{pair.Value.GroupName}-{pair.Key}正在游戏中");
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions CardSharp/GameComponents/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public Player(string playerId)

}

public static HashSet<Player> ForceSendPlayers => new HashSet<Player>();
public static List<Player> ForceSendPlayers => new List<Player>();

public bool AutoPass { get; set; }
public bool ForceSend { get; set; }
Expand Down Expand Up @@ -80,7 +80,7 @@ protected string RoleToString()

public void SendCards(Desk desk)
{
AddMessage($"{desk.DeskId} {Cards.ToFormatString()}");
AddMessage($"{desk.DeskId}-{desk.GroupName} {Cards.ToFormatString()}");
}
}

Expand Down
15 changes: 14 additions & 1 deletion CardSharp/GameSteps/CommandParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,20 @@ private void ParsePlayerSubmitCard(Desk desk, Player player, string command)
}
else
{
desk.AddMessage("你似乎不能出这些牌哟~");
if (desk.CurrentRule != null)
{
var rule = Rules.Rules.FirstMatchRule(cardsCommand.ToCards());
if (rule != null && rule != desk.CurrentRule) {
desk.AddMessage($"你想出的牌匹配了规则{rule},但是当前规则是{desk.CurrentRule},所以你并不能出牌哟~~");
} else {
desk.AddMessage("你似乎不能出这些牌哟~");
}
}
else
{
desk.AddMessage("你似乎不能出这些牌哟~");
}

}
}
}
Expand Down
5 changes: 5 additions & 0 deletions CardSharp/GameSteps/LandlordDiscuss.cs
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,11 @@ public void Parse(Desk desk, Player player, string command)
}

if (_count >= 3) {
if (desk.SuddenDeathEnabled)
{
Parse(desk, player, "抢");
return;
}
desk.AddMessage("你们干嘛呢 我...我不干了!(╯‵□′)╯︵┻━┻");
desk.FinishGame();
}
Expand Down
11 changes: 7 additions & 4 deletions CardSharp/GameSteps/StandardParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ public void Parse(Desk desk, Player player, string command)

var pconfig = PlayerConfig.GetConfig(player);
switch (command) {
case "所有游戏":
desk.BoardcastDesks();
break;
case "获取积分":
var px = DateTime.Now - pconfig.LastTime;
if (px.TotalSeconds.Seconds() > 12.Hours()) {
Expand Down Expand Up @@ -105,13 +108,13 @@ 带有[R]的命令 是正式功能,'一般'不会做更改
desk.FinishGame();
break;
case "玩家牌":
Player.ForceSendPlayers.Add(player);
if (!Player.ForceSendPlayers.Contains(player))
{
Player.ForceSendPlayers.Add(player);
}
player.ForceSend = true;
player.AddMessage(string.Join(Environment.NewLine, desk.Players.Select(p => $"{p.PlayerId} {p.Cards.ToFormatString()}")));
break;
case "所有游戏":
desk.BoardcastDesks();
break;
}

if (command.StartsWith("设置积分")) {
Expand Down
13 changes: 13 additions & 0 deletions CardSharp/Rules/Rules.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.Linq;
using CardSharp.GameComponents;

Expand Down Expand Up @@ -54,6 +55,18 @@ public static bool IsCardsMatch(IEnumerable<Card> cards, Desk desk)
return false;
}

[Pure]
public static IRule FirstMatchRule(IEnumerable<Card> cards)
{
var cg = cards.ToListAndSort().ExtractCardGroups();
foreach (var rule in RulesList)
if (rule.IsMatch(cg, null)) {
return rule;
}

return null;
}

public static (bool exists, List<Card> cards) FirstMatch(Player player, Desk desk)
{
foreach (var rule in RulesList)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ public void ProcessGroupMessage(GroupMessageReceivedContext context)
var deskid = context.FromGroup;
var playerid = context.FromQq;
var message = context.Message;
var desk = Desk.GetOrCreateDesk(deskid);
var groupName = _mahuaApi.GetGroupsWithModel().Model.FirstOrDefault(g => g.Group == deskid)?.Name;
var desk = Desk.GetOrCreateDesk(deskid, groupName);
desk.ParseCommand(playerid, message);
desk.PlayerList.Where(player => player.Message != null && !(player is FakePlayer)).ToList().ForEach(player =>
{
Expand Down

0 comments on commit d5dae1c

Please sign in to comment.