- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发我的第一个自制应用程序(称为:“Busdriver”)并有几个问题。
致我个人:自 2016 年 11 月以来,我一直在使用 xCode 和 swift,并制作了我的第一个 Cardplay 应用程序。该应用程序运行良好,但我确信有很多可能性可以简化我的代码。
所以首先:有没有办法删除另一个数组中的整个数组?例如:
let cardValues = [["D2",2,"black],["D3",3,"black]["D4",4,"red]]
// i want to get this result:
// [["D2",2,"black],["D3",3,"black]]
另一个问题是,有没有办法总结以下代码行:
var playingCards = [["♦2", 2, "red"], ["♦3", 3, "red"], ["♦4", 4, "red"], ["♦5", 5, "red"], ["♦6", 6, "red"], ["♦7", 7, "red"], ["♦8", 8, "red"], ["♦9", 9, "red"], ["♦10", 10, "red"], ["♦B", 11, "red"], ["♦D", 12, "red"], ["♦K", 13, "red"], ["♦A", 20, "red"], ["♥2", 2, "red"], ["♥3", 3, "red"], ["♥4", 4, "red"], ["♥5", 5, "red"], ["♥6", 6, "red"], ["♥7", 7, "red"], ["♥8", 8, "red"], ["♥9", 9, "red"], ["♥10", 10, "red"], ["♥B", 11, "red"], ["♥D", 12, "red"], ["♥K", 13, "red"], ["♥A", 20, "red"], ["♣2", 2, "black"], ["♣3", 3, "black"], ["♣4", 4, "black"], ["♣5", 5, "black"]]
var cardDeckPlayer1 = []
var cardDeckPlayer2 = []
var cardDeckPlayer3 = []
var cardDeckPlayer4 = []
var cardDeckPlayer5 = []
var cardDeckPlayer6 = []
let numberOfPlayers = 4 // this value varies from 2 to 6
if numberOfPlayers == 2
{
cardDeckPlayer1.insert(playingCards[0], at: 0)
playingCards.remove(at: 0)
cardDeckPlayer1.insert(playingCards[0], at: 1)
playingCards.remove(at: 0)
cardDeckPlayer1.insert(playingCards[0], at: 2)
playingCards.remove(at: 0)
cardDeckPlayer1.insert(playingCards[0], at: 3)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(playingCards[0], at: 0)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(SplayingCards[0], at: 1)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(SpielKarten[0], at: 2)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(playingCards[0], at: 3)
playingCards.remove(at: 0)
}
if numberOfPlayers == 3
{
cardDeckPlayer1.insert(playingCards[0], at: 0)
playingCards.remove(at: 0)
cardDeckPlayer1.insert(playingCards[0], at: 1)
playingCards.remove(at: 0)
cardDeckPlayer1.insert(playingCards[0], at: 2)
playingCards.remove(at: 0)
cardDeckPlayer1.insert(playingCards[0], at: 3)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(playingCards[0], at: 0)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(playingCards[0], at: 1)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(playingCards[0], at: 2)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(playingCards[0], at: 3)
playingCards.remove(at: 0)
cardDeckPlayer3.insert(playingCards[0], at: 0)
playingCards.remove(at: 0)
cardDeckPlayer3.insert(playingCards[0], at: 1)
playingCards.remove(at: 0)
cardDeckPlayer3.insert(playingCards[0], at: 2)
playingCards.remove(at: 0)
cardDeckPlayer3.insert(playingCards[0], at: 3)
playingCards.remove(at: 0)
}
if numberOfPlayers == 4
{
cardDeckPlayer1.insert(playingCards[0], at: 0)
playingCards.remove(at: 0)
cardDeckPlayer1.insert(playingCards[0], at: 1)
playingCards.remove(at: 0)
cardDeckPlayer1.insert(playingCards[0], at: 2)
playingCards.remove(at: 0)
cardDeckPlayer1.insert(playingCards[0], at: 3)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(playingCards[0], at: 0)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(playingCards[0], at: 1)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(playingCards[0], at: 2)
playingCards.remove(at: 0)
cardDeckPlayer2.insert(playingCards[0], at: 3)
playingCards.remove(at: 0)
cardDeckPlayer3.insert(playingCards[0], at: 0)
playingCards.remove(at: 0)
cardDeckPlayer3.insert(playingCards[0], at: 1)
playingCards.remove(at: 0)
cardDeckPlayer3.insert(playingCards[0], at: 2)
playingCards.remove(at: 0)
cardDeckPlayer3.insert(playingCards[0], at: 3)
playingCards.remove(at: 0)
cardDeckPlayer4.insert(playingCards[0], at: 0)
playingCards.remove(at: 0)
cardDeckPlayer4.insert(playingCards[0], at: 1)
playingCards.remove(at: 0)
cardDeckPlayer4.insert(playingCards[0], at: 2)
playingCards.remove(at: 0)
cardDeckPlayer4.insert(playingCards[0], at: 3)
playingCards.remove(at: 0)
// etc. until if numberOfPlayers == 6...
所以我想要一个函数、类或其他任何东西,它可以简化上面的代码,根据 numberOfPlayers 值,将创建 2 或 3 或 4 或 5 或 6 个卡片组,并且这个 cardDecks 分别存在于前 4 个数组中在 playingCards 数组中。
所以来自数组 playingCards = [[1,2,3],[4,5,6],[7,8,9],[10,11,12], [13,14,15 ],[16,17,18],[19,20,21],[21,22,23],[24,25,26],[27,28,29],[30,31,32], [33,34,35],[36,37,38],[39,40,41],[42,43,44],[45,46,47]]
结果应该是这样的:
numberOfPlayers = 3
cardDeckPlayer1 = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
cardDeckPlayer2 = [[13,14,15],[16,17,18],[19,20,21],[21,22,23]]
cardDeckPlayer3 = [[24,25,26],[27,28,29],[30,31,32],[33,34,35]]
// etc.
我#m 不是很喜欢类(class)和结构,仍然需要在这个领域学习很多东西,但到目前为止,阅读书籍对我没有帮助。因此,如果有人可以帮助我使我的代码结构更清晰,那就太好了。
感谢您的帮助,抱歉英语不好,自行车道
最佳答案
我强烈建议你开发一个合适的数据模型层,而不是将东西存储在数组和子数组中。这是对其进行模式化的一种方法:
struct Card: CustomStringConvertible {
var rank: Rank
var suit: Suit
var color: Color {
switch self.suit {
case .spade, .club: return .black
case .heart, .diamond: return .red
}
}
var description: String {
return "\(suit.rawValue)\(rank.description) \(color.rawValue)"
}
enum Rank: Int, CustomStringConvertible {
case two = 2, three, four, five, six, seven, eight, nine, ten
case jack, queen, king, ace
var description: String {
switch self {
case .two, .three, .four, .five, .six, .seven, .eight, .nine, .ten:
return "\(self.rawValue)"
case .jack:
return "J"
case .queen:
return "Q"
case .king:
return "K"
case .ace:
return "A"
}
}
}
enum Suit: String {
case spade = "♠︎"
case heart = "♥"
case club = "♣"
case diamond = "♦︎"
}
enum Color: String {
case red = "red"
case black = "black"
}
}
struct Player {
var deck = [Card]()
static func byDistributing(cards: [Card], toNumberOfPlayers n: Int) -> [Player] {
guard 2 <= n && n <= 6 else {
fatalError("numberOfPlayer must be between 2 and 6")
}
guard cards.count % n == 0 else {
fatalError("cards.count must be divisible by numberOfPlayers") // so every one got an equal-length deck
}
let numberOfCardsPerPlayer = cards.count / n
let players = stride(from: 0, to: cards.count, by: numberOfCardsPerPlayer).map { i -> Player in
let deck = Array(cards[i..<(i + numberOfCardsPerPlayer)])
return Player(deck: deck)
}
return players
}
}
它使用了很多 enum
所以你不能有卡片 1 或 clown 或类似的东西。现在,我不是纸牌玩家,所以您必须原谅我对纸牌组构成的无知。以下是构建卡片组的方法:
// A standard 52-card deck in America
var playingCards = [Card]()
for suit in [Card.Suit.diamond, .heart, .club, .spade] {
for value in 2...14 {
let rank = Card.Rank(rawValue: value)!
playingCards.append(Card(rank: rank, suit: suit))
}
}
// Now distribute it among 4 players
let players = Player.byDistributing(cards: playingCards, toNumberOfPlayers: 4)
print(players[0].deck) // all diamonds
print(players[1].deck) // all hearts
print(players[2].deck) // all clubs
print(players[3].deck) // all spades
(您的下一个问题可能是关于如何洗牌,因此我们如何在 byDistributing
中将这些牌分发给玩家并不重要。无论如何它们应该是随机的!)
关于快速缩短代码(功能类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45828557/
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How do short URLs services work? 我经常看到来自 bitly.com 的缩短
if (args.join(" ").toLowerCase() === "are you" || args.join(" ").toLowerCase() === "are you doing")
学习Golang,想知道是否有更短的编写方法 if tiletype == 0 || tiletype == 2 { levelmap[pass
sum_num = 0 for human in humans: sum_num += human.limbs return sum_num 假设对象 human 具有属性 limbs ,如下
我想问一下是否有一种方法可以像在 MSSQL 中那样缩短这个条件,因为我也有类似的条件。 if(docType == "PO" || docType == "II" || docType == "IA
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我在单页上有一些 15-20 个 Highcharts (使用 slider ,每张幻灯片 1-2 个图表)、一些条形图、一些柱形图、一些饼图,具有不同的显示选项。我使用的是在我的闭包内有多种方法,其
几周前,我在下拉菜单的一些代码上得到了一些帮助,但我想知道是否可以使代码更短,因为下面显示的当前代码相当大,任何帮助都会很棒。 $(document).ready(function(){ $(
这里是新的。我只是想知道是否有可能使这个 if 语句更短且冗余更少。 if (!a && b) { if (c == d && e > 0) { return;
我有这个代码。 c = getch() if c == "r":
我有几行代码用于迭代列表中的字典,我想缩短它。它按原样完美运行,但似乎代码太多,我正在尝试了解如何在 Python 中(或一般情况下)保持代码高效。 for d in dev['devices']:
如果代码如下,如何缩短 if 语句? $a = null; $b = "foo"; if ((empty($a) && !empty($b)) || (!empty($a) && empty($b))
我需要计算应用的每日独立用户数。 我可以唯一识别用户的唯一方法是通过他们的 UUID(这是外部提供的,所以我不得不使用它)。 我知道我的每日用户数是几百万。 我想在 Redis 中使用一个 bitse
载体 a和 b可以使用 toString(width = 10) 缩短在 Base R 中导致以 .... 结尾的较短向量 但是,我想知道如何使缩短的向量以 ..., last vector elem
是否有缩短 HTML 页面的库(最好是 Python 库)?我的意思是它会生成一个可能更小的(就字符数而言,包括换行符 Silly example 可以改成: Silly example
如何缩短这段 CSS 的代码?当它在移动 View 中时,它将隐藏表格的某些列。我的表有 137 列,我只想查看 5 列。 @media only screen and (max-width: 800
我所拥有的是主目录中的文件路径,我希望将其处理为包含“~”的缩短路径。 例如,我的输入可能是:"/home/username/test"或 /home/./username/test或 /home/.
我们为文档生成一个 GUID,并且需要将该 GUID 包含在 C40 编码的条码(Type 29 2D)中,并且具有以下限制。 最长可达 25 个字符只能使用大写字母数字字符,不能使用特殊字符。 我曾
这个问题已经有答案了: Ternary operators in JavaScript without an "else" (13 个回答) 已关闭 4 年前。 我一直使用这样的三元表达式,但我不喜欢
首先,我想确保我知道这样一个事实:重新哈希是一个明智的话题。不过,我想听听您的一些意见,以及您会采取什么方法。 我正在构建一个分布式应用程序,其中节点远程创建由 UUID 标识的实体。最终,所有实体应
我是一名优秀的程序员,十分优秀!