- 14
- 2月
今天终于把《C#入门经典》的第Ⅰ部分“C#语言”看完了,并且成功完成最后一个完整的例子:利用那个学习过程中被不断扩展的CardLib完成了一个控制台的游戏。
通过这个游戏的代码也感受到了面向对象编程的方法。
在这个程序中每一张牌是一个Card对象,拥有最基本的ToString()方法用于表示自身的花色和牌序和实现ICloneable接口的Clone()方法。
几张牌的集合是一个Cards对象,继承了CollectionBase类,实现了对集合中Card的索引,同时也实现了ICloneable接口的Clone()方法,返回经过复制的一个Cards对象。
一 副牌Deck则包含一个Cards集合,用于存储其中所有的牌。此外还实现了更多功能:重新洗牌Shuffle()、取得其中特定序号的牌GetCard ()、实现ICloneable接口的Clone(),再有一个用于解决在GetCard()时牌已经用完的事件LastCardDrawn()
每一个游戏玩家是一个Player()类的实例,拥有自己的Name、自己手里的几张牌PlayHand和判断自己是否已经获胜的方法HasWon()。
整 个游戏是一个Game类的实例,有一副要玩的牌playDeck、被玩家扔掉暂时不能用的牌的集合discardedCards和几个玩家的集合 players,使用SetPlayer()方法加入玩家,Reshuffle()方法来处理Deck的实例playDeck的 LastCardDrawn事件,DealHands()方法进行发牌,PlayGame()进行游戏并返回胜出者的编号。
这样,在main()函数中要做的只是建立player对象,调用newGame.SetPlayers()初始化玩家,再调用newGame.PlayGame()一切就都搞定了。
整个游戏中每一个独立的部分都与一个对象对应,代码中每一个部分保持独立,互不干扰。完成每一部分功能的时候不需要过多地考虑会不会对其他部分产生影响。That’s OOP!