初めまして。ufolooopと申します。
プログラミング初心者です。
現在、XcodeのSwiftにて、くじ引きのようなアプリを作ろうとしております。
arc4random_uniformを使って結果をランダムに表示させることには成功したのですが、次のトライにて、一度出た結果は表示させない方法が分からず足踏みをしています。
例えば、一度大吉が出たら、次回以降は大吉が出ないという仕様にしたいです。
下記、記述したコードになります。
お忙しいところ恐れ入りますが、どなたかfixしていただけますと幸いです。
よろしくお願いいたします。
import SpriteKit
import GameplayKit
class GameScene: SKScene {
//イラスト用スプライトを用意する let mySprite = SKSpriteNode(imageNamed: "omikuji.png") //ボタン用スプライトを用意する let btnSprite = SKSpriteNode(imageNamed: "button.png") //おみくじ結果用ラベルを用意する let myLabel = SKLabelNode(fontNamed: "Verdana-bold") private var label : SKLabelNode? private var spinnyNode : SKShapeNode? override func didMove(to view: SKView) { //背景色をつける self.backgroundColor = SKColor.white //イラストを表示する mySprite.position = CGPoint(x: 5, y: 300) addChild(mySprite) //ボタンを表示する btnSprite.position = CGPoint(x: 5, y: -300) self.addChild(btnSprite) //おみくじ結果用ラベルを表示する myLabel.text = "???" myLabel.fontSize = 65 myLabel.fontColor = SKColor.black myLabel.position = CGPoint(x: 5, y: -50) self.addChild(myLabel) // Get label node from scene and store it for use later self.label = self.childNode(withName: "//helloLabel") as? SKLabelNode if let label = self.label { label.alpha = 0.0 label.run(SKAction.fadeIn(withDuration: 2.0)) } // Create shape node to use during mouse interaction let w = (self.size.width + self.size.height) * 0.05 self.spinnyNode = SKShapeNode.init(rectOf: CGSize.init(width: w, height: w), cornerRadius: w * 0.3) if let spinnyNode = self.spinnyNode { spinnyNode.lineWidth = 2.5 spinnyNode.run(SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(Double.pi), duration: 1))) spinnyNode.run(SKAction.sequence([SKAction.wait(forDuration: 0.5), SKAction.fadeOut(withDuration: 0.5), SKAction.removeFromParent()])) } } func touchDown(atPoint pos : CGPoint) { if let n = self.spinnyNode?.copy() as! SKShapeNode? { n.position = pos n.strokeColor = SKColor.green self.addChild(n) } } func touchMoved(toPoint pos : CGPoint) { if let n = self.spinnyNode?.copy() as! SKShapeNode? { n.position = pos n.strokeColor = SKColor.blue self.addChild(n) } } func touchUp(atPoint pos : CGPoint) { if let n = self.spinnyNode?.copy() as! SKShapeNode? { n.position = pos n.strokeColor = SKColor.red self.addChild(n) } } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { for touch: AnyObject in touches { // タッチされた位置にあるものを調べて let location = touch.location(in: self) let touchNode = self.atPoint(location) // もし、ボタンなら if touchNode == btnSprite { // ???と表示してから、おみくじを振る myLabel.text = "???" shakeOmikuji() } } } // おみくじを振る処理 func shakeOmikuji() { // 【おみくじを振るアクションをつける】 // おみくじを少し右に傾けるアクション let action1 = SKAction.rotate(toAngle: -0.3, duration: 0.2) // おみくじを少し左に傾けるアクション let action2 = SKAction.rotate( toAngle: 0.3, duration: 0.2) // おみくじをひっくり返すアクション let action3 = SKAction.rotate( toAngle: 3.14, duration: 0.2) // action1,action2,action3を指定した順番に行う let actionS = SKAction.sequence( [action1, action2, action1, action2, action1, action3]) // おみくじに「左右に振ってひっくり返すアクション」をつけて、最後にkekkaを実行する mySprite.run(actionS, completion: showOmikuji) } // 結果を表示する処理 func showOmikuji() { let omikuji = ["大吉","吉","凶"] let r = Int(arc4random_uniform(3)) myLabel.text = omikuji[r] } override func update(_ currentTime: TimeInterval) { // Called before each frame is rendered }
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/15 05:13
2020/08/15 05:45
2020/08/16 13:28