質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

解決済

XcodeのSwiftでおみくじアプリを作成する際に、一度出た結果を次に出ないようにする

ufolooop
ufolooop

総合スコア0

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1回答

0評価

0クリップ

11閲覧

投稿2020/08/13 09:55

初めまして。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 }

}

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています