【发布时间】:2012-04-07 20:11:09
【问题描述】:
我正在为家庭作业编写简单的纸牌游戏“战争”,现在该游戏可以运行,我正在尝试使其更加模块化和有条理。下面是Main() 的一部分,其中包含该程序的大部分内容。我应该提一下,该课程是用 C# 教授的,但它不是 C# 课程。相反,我们正在学习基本逻辑和 OOP 概念,因此我可能没有利用某些 C# 功能。
bool sameCard = true;
while (sameCard)
{
sameCard = false;
card1.setVal(random.Next(1,14)); // set card value
val1 = determineFace(card1.getVal()); // assign 'face' cards accordingly
suit = suitArr[random.Next(0,4)]; // choose suit string from array
card1.setSuit(suit); // set card suit
card2.setVal(random.Next(1,14)); // rinse, repeat for card2...
val2 = determineFace(card2.getVal());
suit = suitArr[random.Next(0,4)];
card2.setSuit(suit);
// check if same card is drawn twice:
catchDuplicate(ref card1, ref card2, ref sameCard);
}
Console.WriteLine ("Player: {0} of {1}", val1, card1.getSuit());
Console.WriteLine ("Computer: {0} of {1}", val2, card2.getSuit());
// compare card values, display winner:
determineWinner(card1, card2);
所以这是我的问题:
- 我可以在 Main() 中使用循环并仍然认为它是模块化的吗?
- 抽卡过程是否写得好/包含得当?
- 在方法中打印消息是否被认为是不好的做法(即:
determineWinner())?
我只编程了两个学期,我想在这个阶段养成良好的习惯。任何意见/建议将不胜感激。
编辑:
catchDuplicate() 现在是一个布尔方法,调用看起来像这样:
sameCard = catchDuplicate(card1, card2);
感谢@Douglas。
【问题讨论】:
-
不确定这是否真的是 StackOverflow 问题。这是一个最佳实践问题,可能是主观的,但往往会达成共识。
-
catchDuplicate是否曾经改变过card1和card2的值?如果没有,那么您应该更改其签名:sameCard = catchDuplicate(card1, card2); -
@SionSheevok 哦,好吧,如果这应该被移动,我会非常乐意。
-
@Douglas 你是对的,它没有。很好的收获,谢谢!
标签: c# oop module program-structure