您的位置:首页 > 编程语言 > C#

用C#做一个简单纸牌游戏的程序

2015-07-28 15:40 381 查看
小子不才学C#没多久,想做个窗体纸牌游戏玩,但是窗体应用懂得不多,只能在控制命令台上进行游戏设计,希望有大神能帮我设计这个窗体程序,或者推荐好的窗体设计资料,谢谢了,控制命令台程序如下:

namespace BasicCardsGame

{

class OutOfRangeException : Exception

{

public Card defaultCard = null;

public OutOfRangeException(CardsCollection sourceCollection)

: base("The serial number is out of the count of cards in deck.")

{

defaultCard = sourceCollection[0];

}

}

//******************************************************************************

enum Suit { Club = 1, Diamond, Heart, Spade }

enum Rank { Ace = 1, Deuce, Three, Four, Five, Six, Seven, Eight, Nine, Ten }

//******************************************************************************

class Card : ICloneable

{

public Suit _suit;

public Rank _rank;

public Card(int suit, int rank)

{

_suit = (Suit)suit;

_rank = (Rank)rank;

}

public override string ToString()

{

return "The " + _rank + " of " + _suit;

}

public object Clone()

{

return MemberwiseClone();

}

}

//******************************************************************************

class CardsCollection : List<Card>, ICloneable

{

public object Clone()

{

CardsCollection clonedCardsCollection = new CardsCollection();

foreach (Card n in this)

{ clonedCardsCollection.Add(n.Clone() as Card); }

return clonedCardsCollection;

}

}

//******************************************************************************

class Deck : ICloneable

{

public delegate void LastCardSentEventHandler();

public event LastCardSentEventHandler LastCardSent;

public CardsCollection cardsDeck = new CardsCollection();

public Deck()

{

for (int x = 1; x <= 4; x++)

{

for (int y = 1; y <= 10; y++)

{

cardsDeck.Add(new Card(x, y));

}

}

}

public void Shuffle()

{

Random randomCard = new Random();

CardsCollection newCardDeck = new CardsCollection();

bool[] hasSerial = new bool[40];

int index = 0;

for (int n = 0; n < 40; n++)

{

while (true)

{

index = randomCard.Next(40);

if (hasSerial[index] == false) { break; }

}

hasSerial[index] = true;

newCardDeck.Add(cardsDeck[index]);

}

cardsDeck = newCardDeck;

}

public Card GetCard(int serialNumber)

{

if (serialNumber >= 1)

{

if (serialNumber % 40 == 0 && LastCardSent != null) { LastCardSent(); }

return cardsDeck[serialNumber - 1];

}

else

{

throw new OutOfRangeException(cardsDeck);

}

}

private Deck(CardsCollection paramCards)

{ paramCards = cardsDeck; }

public object Clone()

{

Deck clonedDeck = new Deck(cardsDeck.Clone() as CardsCollection);

return clonedDeck;

}

}

//******************************************************************************

class Player

{

public string Name { get; private set; }

public CardsCollection HandCards { get; private set; }

public Player() : this("") { }

public Player(string name)

{

if (name.Trim() == "") { Name = "default"; HandCards = new CardsCollection(); }

else { Name = name; HandCards = new CardsCollection(); }

}

public bool Win()

{

Suit matchSuit = HandCards[0]._suit;

bool paramJudge = true;

for (int i = 0; i < HandCards.Count; i++)

{

paramJudge &= matchSuit == HandCards[i]._suit;

}

return paramJudge;

}

}

//******************************************************************************

class Game

{

private string bugParam = "qwer";//set password

private Player[] newPlayer;

private Deck newDeck = new Deck();

private int currentCardPosition = 1;

public void SetPlayerNum(Player[] paramPlayer)

{

newPlayer = paramPlayer;

}

private void BeUsedMethod()

{

Console.WriteLine("\nAll of the cards are sent!");

Console.WriteLine("Use and shuffle the new deck." + "\n");

Deck deck = new Deck();

deck.Shuffle();

foreach (Card n in deck.cardsDeck)

{

newDeck.cardsDeck.Add(n);

}

}

public Player PlayGame()

{

bool judge = false;

int i = 0;

try

{

newDeck.LastCardSent += BeUsedMethod;

newDeck.Shuffle();

for (i = 0; i < newPlayer.Length; i++)

{

for (int x = 1; x <= 5; x++)

{

newPlayer[i].HandCards.Add(newDeck.GetCard(currentCardPosition++));

}

}

currentCardPosition = currentCardPosition - 1;

while (judge == false)

{

for (i = 0; i < newPlayer.Length; i++)

{

Console.WriteLine("\nPlayer {0}'s turn: ", newPlayer[i].Name);

Console.WriteLine("Cards in hand: ");

foreach (Card n in newPlayer[i].HandCards)

{

Console.WriteLine(n);

}

currentCardPosition++;

int currentCard = currentCardPosition;

int behindCard = currentCardPosition + 1;

Console.WriteLine("Card in table: " + newDeck.GetCard(currentCard) + " ({0})", currentCard);

while (true)

{

Console.WriteLine("Choose \"C\" to get current card or \"B\" behind card in table.");

string choice = Console.ReadLine();

if (choice.ToLower() == "c")

{

newPlayer[i].HandCards.Add(newDeck.GetCard(currentCard));

int serialNumber = 1;

Console.WriteLine("New hand: ");

foreach (Card n in newPlayer[i].HandCards)

{

Console.WriteLine("{0}: {1}", serialNumber++, n);

}

currentCardPosition = currentCard;

break;

}

if (choice.ToLower() == "b")

{

newPlayer[i].HandCards.Add(newDeck.GetCard(behindCard));

int serialNumber = 1;

Console.WriteLine("New hand: ");

foreach (Card n in newPlayer[i].HandCards)

{

Console.WriteLine("{0}: {1}", serialNumber++, n);

}

currentCardPosition = behindCard;

break;

}

}

string input = "0";

int selectedNumber=0;

while (true)

{

Console.Write("OK,throw one card: ");

input = Console.ReadLine();

if ("0123456789".IndexOf(input)>0)

{

selectedNumber = int.Parse(input);

if (selectedNumber >= 1 && selectedNumber <= 6) { break; }

else { Console.WriteLine("Please write in need!"); }

}

else

{

if (input == bugParam) { goto Bug; }//set bug

else { Console.WriteLine("Please write in need!"); }

}

}

Console.WriteLine("Discarding: {0}", newPlayer[i].HandCards[selectedNumber - 1]);

newPlayer[i].HandCards.RemoveAt(selectedNumber - 1);

if (newPlayer[i].Win() == true) { judge = true; break; }

}

}

}

catch (OutOfRangeException e)

{

Console.WriteLine(e.Message);

Console.WriteLine("Use deault card: " + e.defaultCard);

}

Bug:

return newPlayer[i];

}

}

//******************************************************************************

class Program

{

static void Main(string[] args)

{

Game newGame = new Game();

Console.WriteLine("Welcome come to this card game!");

Console.Write("Select num of player(1-7): ");

int input = 0;

while (true)

{

try

{

input = int.Parse(Console.ReadLine());

if (input > 0 && input < 8) { break; }

else { Console.Write("The num of Player isn't meet regulation!Write again:"); }

}

catch { Console.WriteLine("Error: Input number"); }

}

Console.WriteLine();

Player[] newPlayer = new Player[input];

newGame.SetPlayerNum(newPlayer);

for (int i = 0; i < input; i++)

{

Console.Write("Please input player{0}'s name: ", i + 1);

string name = Console.ReadLine();

newPlayer[i] = new Player(name);

}

Console.WriteLine("\nThe prepare work is end. \nOK,game star! Shuffle!");

Player winner = newGame.PlayGame();

Console.WriteLine("\nCongratulation the {0} to won this game!", winner.Name);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: