namespace OOPHW4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn_ComboBoxTest_Click(object sender, EventArgs e)
{
CardDeck Deck = new CardDeck();
Deck.CreateDeck();
Deck.ResetDeck();
txt_Display.Text = "";
switch (cbo_SetWay.SelectedIndex)
{
case 0:
txt_Display.AppendText("ComboBox按花色排列 已被選定\n");
Deck.ResetDeck();
CardString(Deck);
break;
case 1:
txt_Display.AppendText("ComboBox亂數排列 已被選定\n");
Deck.Shuffle();
CardString(Deck);
break;
case 2:
txt_Display.AppendText("ComboBox按點數大小排列 已被選定\n");
Deck.SetDeckByRank();
CardString(Deck);
break;
default:
break;
}
}
private void btn_CheckBoxTest_Click(object sender, EventArgs e)
{
CardDeck Deck = new CardDeck();
Deck.CreateDeck();
Deck.ResetDeck();
txt_Display.Text = "";
if (chk_SetBySuit.Checked)
{
txt_Display.AppendText("CheckBox按花色排列 已被選定\n");
Deck.ResetDeck();
CardString(Deck);
}
if (chk_SetByRand.Checked)
{
txt_Display.AppendText("CheckBox亂數排列 已被選定\n");
Deck.Shuffle();
CardString(Deck);
}
if (chk_SetByRank.Checked)
{
txt_Display.AppendText("CheckBox按點數大小排列 已被選定\n");
Deck.SetDeckByRank();
CardString(Deck);
}
}
static void CardString(CardDeck deck)
{
string S="";
for (int i = 0; i <52 data-blogger-escaped-0="" data-blogger-escaped-anktostr="" data-blogger-escaped-deck.cards="" data-blogger-escaped-i="" data-blogger-escaped-if="" data-blogger-escaped-messagebox.show="" data-blogger-escaped-n="" data-blogger-escaped-pre="" data-blogger-escaped-s="" data-blogger-escaped-uittounicode="">
CardDeck.cs
namespace OOPHW4
{
class CardDeck
{
public PokerCard[] Cards = new PokerCard[52];
public void CreateDeck() //產生出52個PokerCard的物件
{
for (int i = 0; i < 52; i++)
{
Cards[i] = new PokerCard();
}
}
public void ResetDeck() //牌堆回復原始狀態
{
for (int i = 0; i < 52; i++)
{
Cards[i].Suit = i / 13 + 3;
Cards[i].Rank = i % 13 + 1;
}
}
public void Shuffle() //洗牌
{
Random rand = new Random();
PokerCard temp = new PokerCard();
for (int i = 0; i < 52; i++)
{
int T = rand.Next(52);
temp = Cards[i];
Cards[i] = Cards[T];
Cards[T] = temp;
}
}
public void SetDeckByRank()
{
for (int i = 0; i < 52; i++)
{
Cards[i].Suit = i % 4 + 3;
Cards[i].Rank = i /4 + 1;
}
}
}
}
PokerCard.cs
namespace OOPHW4
{
class PokerCard
{
public int Suit; //花色
public int Rank; //點數
public string RankToStr() //將點數轉為字串
{
switch (Rank)
{
case 1:
return "A";
case 11:
return "J";
case 12:
return "Q";
case 13:
return "K";
default:
return Convert.ToString(Rank);
}
}
public string SuitToUnicode() //將花色轉為 Unicode
{
string S;
switch(Suit)
{
case 3:
S = "\u2665";
break;
case 4:
S = "\u2666";
break;
case 5:
S = "\u2663";
break;
case 6:
S = "\u2660";
break;
default:
S = "";
break;
}
return S;
}
}
}
2014年3月24日 星期一
[Code Review] Team 01 - Hw04
Form1.cs
訂閱:
張貼留言 (Atom)
如果 CardDeck Deck = new CardDeck(); 寫在button內,
回覆刪除則每按一次就需要配置一次記憶體,離開後又把這個物件丟掉,
感覺運作缺乏效率。
ASCII轉Unicode時用switch來寫,看起來簡單易懂
回覆刪除比起老師用string陣列,對於使用陣列意識較弱的人,switch較簡易,一目了然
by 詹宛真
CardDeck Deck = new CardDeck();
回覆刪除Deck.CreateDeck();
不用在combobox跟checkbox重複new一次
然後重新配置記憶體
整個過程中做一次即可
然後CardString(Deck);不用丟Deck進去
在同一個class中可以直接使用
用CardString();即可
Form1.cs中
回覆刪除1.何不寫成MessageBox.Show(CardString(Deck));?
2.static void CardString(CardDeck deck) 函式名稱 有更清楚明瞭的命名?
By 吳珠鈺
===林高遠===
回覆刪除你不會在書局買到只有空盒子的撲克牌,所以CarDeck被new 出來的時候就要馬上有52張牌比較合理