用c#写一号斗地主游戏
时间: 2023-07-01 18:16:33 浏览: 47
好的,以下是一份简单的 C# 代码示例,演示如何实现一号斗地主游戏:
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
// 初始化牌堆
List<Card> deck = new List<Card>();
for (int i = 3; i <= 15; i++)
{
deck.Add(new Card(Suit.Club, i));
deck.Add(new Card(Suit.Diamond, i));
deck.Add(new Card(Suit.Heart, i));
deck.Add(new Card(Suit.Spade, i));
}
deck.Add(new Card(Suit.Joker, 1));
deck.Add(new Card(Suit.Joker, 2));
// 洗牌
Random random = new Random();
deck = deck.OrderBy(x => random.Next()).ToList();
// 发牌
List<Card>[] hands = new List<Card>[3];
for (int i = 0; i < 3; i++)
{
hands[i] = new List<Card>();
}
for (int i = 0; i < deck.Count; i++)
{
hands[i % 3].Add(deck[i]);
}
// 显示手牌
Console.WriteLine("Player 1: " + string.Join(" ", hands[0].OrderBy(x => x.Value).Select(x => x.ToString())));
Console.WriteLine("Player 2: " + string.Join(" ", hands[1].OrderBy(x => x.Value).Select(x => x.ToString())));
Console.WriteLine("Player 3: " + string.Join(" ", hands[2].OrderBy(x => x.Value).Select(x => x.ToString())));
// 牌型判断
List<Card> playedCards = new List<Card>() { new Card(Suit.Club, 3), new Card(Suit.Club, 4), new Card(Suit.Club, 5) }; // 假设当前出牌为 3♣ 4♣ 5♣
List<Card> validCards = GetValidCards(hands[0], playedCards); // 获取玩家 1 可以出的牌
Console.WriteLine("Valid cards: " + string.Join(" ", validCards.OrderBy(x => x.Value).Select(x => x.ToString())));
// 等待玩家出牌
// ...
// 游戏结束判断
if (hands[0].Count == 0)
{
Console.WriteLine("Player 1 wins!");
}
else if (hands[1].Count == 0)
{
Console.WriteLine("Player 2 wins!");
}
else if (hands[2].Count == 0)
{
Console.WriteLine("Player 3 wins!");
}
}
static List<Card> GetValidCards(List<Card> hand, List<Card> playedCards)
{
// TODO: 实现牌型判断逻辑
// ...
}
}
enum Suit { Club, Diamond, Heart, Spade, Joker }
class Card
{
public Suit Suit { get; }
public int Value { get; }
public Card(Suit suit, int value)
{
Suit = suit;
Value = value;
}
public override string ToString()
{
string suitString;
switch (Suit)
{
case Suit.Club:
suitString = "♣";
break;
case Suit.Diamond:
suitString = "♦";
break;
case Suit.Heart:
suitString = "♥";
break;
case Suit.Spade:
suitString = "♠";
break;
case Suit.Joker:
suitString = "J";
break;
default:
throw new ArgumentException("Invalid card suit");
}
string valueString;
switch (Value)
{
case 11:
valueString = "J";
break;
case 12:
valueString = "Q";
break;
case 13:
valueString = "K";
break;
case 14:
valueString = "A";
break;
case 15:
valueString = "2";
break;
default:
valueString = Value.ToString();
break;
}
return suitString + valueString;
}
}
```
代码包含了以下功能:
- 初始化牌堆
- 洗牌
- 发牌
- 显示手牌
- 牌型判断
- 等待玩家出牌
- 游戏结束判断
请注意,这只是一份简单的示例代码,您可以根据自己的需求进行修改和优化。