斯威夫特.对图像阵列中选定的索引进行随机化



所以我想做的是创建一个游戏,在屏幕上显示随机图像,你必须选择正确的图像。从180的阵列中显示六个随机可点击的图像(目标(,第七个图像(主目标(指示您必须点击哪个图像。我不能实现的是显示第七个图像,它必须在屏幕上随机显示其他六个图像中的一个。我试过一些东西,但我永远无法随机选择不同的。我当前的代码甚至不会显示第七个图像。如有任何帮助,我们将不胜感激。我搜索过这个问题以前是否有人回答过,但要么没有,要么我太愚蠢了,不知道我在看什么(现在(,这更有可能。提前感谢!

我不会包括整个阵列。

@State private var targetArray = ["Target1", "Target2", "Target3", "Target4", "Target5", "Target6", "Target7", "Target8", "Target9", "Target10"]
@State private var MainTarget = Int.random(in: 0...5)
@State private var numbers = Array(0...6)
@State private var score = 0
var body: some View {
ZStack {
Image("Background")
.resizable()
.edgesIgnoringSafeArea(.all)
ZStack {
Rectangle()
.foregroundColor(Color(red: 135/255, green: 130/255, blue: 100/255)).cornerRadius(20)
.padding(.top, 55)
.padding(.bottom, 530)
.padding([.leading, .trailing], 25)
}
VStack {
HStack {
Spacer()
//TODO: add button
Text("X")
.fontWeight(.bold)
.foregroundColor(.white)
.font(.system(size: 30))
.frame(width: 50, height: 50)
Spacer()
Text("Score:")
.foregroundColor(.white)
.bold()
.font(.system(size: 30))
.padding(.all, 10)
Spacer()
Text(String(score))
.bold()
.foregroundColor(.white)
.font(.system(size: 30))
.padding(.all, 10)
Spacer()
}
Text("TARGET")
.foregroundColor(.white)
.font(.system(size: 30))
.bold()
.padding([.leading,
.trailing], 5)
HStack {
Spacer()
Image(String(self.MainTarget))
.renderingMode(.original)
.resizable()
.aspectRatio(contentMode: .fit)
.cornerRadius(20)
.padding(15)
Spacer()
}
Spacer()
HStack {
Spacer()
//button1
Button(action: {
self.numbers = self.numbers.map({ _ in
Int.random(in: 0...self.targetArray.count - 1)
})
if self.MainTarget == self.numbers[0] {
self.score += 1
}
else if self.MainTarget != self.numbers[0] {
self.score -= 1
//TODO: add game over
}
}) {
TargetView(targetArray: $targetArray[numbers[0]])
}

(这是在没有测试的情况下完成的(

嘿!可以肯定的是,您的问题在于,您试图将self.MainTarget渲染为图像,而实际上它只是一个随机整数。尝试更换

Image(String(self.MainTarget))
.renderingMode(.original)
.resizable()
.aspectRatio(contentMode: .fit)
.cornerRadius(20)
.padding(15)

带有

Image(self.targetArray[self.MainTarget])
.renderingMode(.original)
.resizable()
.aspectRatio(contentMode: .fit)
.cornerRadius(20)
.padding(15)

最新更新