一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - iOS開發數獨小游戲實例

iOS開發數獨小游戲實例

2021-12-29 14:46易水卷長空 IOS

這篇文章主要為大家詳細介紹了iOS開發數獨小游戲實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了iOS實現數獨小游戲的具體代碼,供大家參考,具體內容如下

一、界面設計

如下圖。圖1是用戶打開程序后的主頁面,點擊“開始游戲”后進入游戲頁面(圖2,圖3)。游戲界面上方是顯示條,顯示玩家當前選中的按鈕。當玩家想要在九宮格中填入數字時,只需點擊下方1-9的數字控件,顯示條上會自動顯示玩家當前選中的數字編號,再點擊玩家想要填入的位置,就可以填入控件了。

最下方三個按鈕分別是“提交”“橡皮擦”“標記”控件。當玩家點擊“提交”按鈕,系統會自動為玩家結算游戲分數;當玩家點擊“橡皮擦”時,可以擦除九宮格上指定位置的數字;當玩家點擊“標記”時,可以為九宮格上的格子添加一個小紅旗作為標記。游戲界面上方有一個導航條,點擊house圖標會回到主頁面。

iOS開發數獨小游戲實例

 二、實現

1. 先搭入口界面,包括一個image view和button,添加一個ViewController作為游戲界面,在入口界面和游戲界面之間添加segue,當點擊“開始游戲”時跳轉到游戲界面。

2.為游戲界面添加必要的控件,用9x9個button實現九宮格,添加9個數字按鈕和3個功能控件,為了便于用戶使用,需要添加一個顯示條。通過用戶按下button得知玩家想要在九宮上填入數字的位置坐標,button通過Tag識別。

iOS開發數獨小游戲實例

3.關聯代碼。將九宮格,9個數字按鈕,以及3個功能控件與代碼關聯,同時新建一個Board類,Board類包含九宮格游戲進度和答案計算等。

//
//  ViewController.swift
//
import UIKit
 
class ViewController: UIViewController {
 
    var inputNumber: String = " "
    var board = Board()
    var oldx: Int = 0
    var oldy: Int = 0
    var oldValue: Int = 0
    @IBOutlet weak var display: UILabel!
    
    @IBAction func inNumber(_ sender: UIButton) {
        if let  num = sender.currentTitle{
            switch num {
            case "" :inputNumber = "" ;display.text = ""
            case "1" :inputNumber = "1" ;display.text = "1"
            case "2" :inputNumber = "2" ;display.text = "2"
            case "3" :inputNumber = "3" ;display.text = "3"
            case "4" :inputNumber = "4" ;display.text = "4"
            case "5" :inputNumber = "5" ;display.text = "5"
            case "6" :inputNumber = "6" ;display.text = "6"
            case "7" :inputNumber = "7" ;display.text = "7"
            case "8" :inputNumber = "8" ;display.text = "8"
            case "9" :inputNumber = "9" ;display.text = "9"
            default:
                break
            }
        }
    }
 
    @IBAction func setNumber(_ sender: UIButton) {
        let pushTag: Int = sender.tag
        let hightTag: Int = pushTag / 10
        let lowTag: Int = pushTag % 10
        if board.question[hightTag - 1][lowTag - 1] == 0 {
            sender.setTitle(inputNumber, for: UIControl.State.normal)
            board.change(x: hightTag - 1, y: lowTag - 1, value: Int(inputNumber) ?? 0)
            oldx = hightTag - 1
            oldy = lowTag - 1
            oldValue = Int(inputNumber) ?? 0
        }
    }
    
    @IBAction func eraser(_ sender: UIButton) {
        inputNumber = " "
        display.text = "橡皮擦"
    }
 
    @IBAction func finish(_ sender: UIButton) {
        if board.check() {
            display.text = "You Win!"
        } else {
            display.text = "Score: (board.score)"
        }
    }
    
    @IBAction func backHome(_ sender: UIBarButtonItem) {
        dismiss(animated: true, completion: nil)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        display.text = "begin"
    }
}
//
//  Board.swift
//
import UIKit
class Board{
    var score: Int = 0
    var question: [[Int]] = [[0,0,0,1,8,0,9,3,0],
                             [1,8,6,0,0,0,0,0,7],
                             [0,5,0,7,4,0,0,0,0],
                             [5,0,4,0,0,0,3,0,6],
                             [0,0,0,3,9,4,0,0,2],
                             [2,3,0,0,0,0,0,1,0],
                             [0,0,9,0,0,3,0,0,8],
                             [0,0,2,9,0,5,7,0,0],
                             [0,7,0,0,0,8,0,9,0],]
    var nowBoard: [[Int]] = [[0,0,0,1,8,0,9,3,0],
                             [1,8,6,0,0,0,0,0,7],
                             [0,5,0,7,4,0,0,0,0],
                             [5,0,4,0,0,0,3,0,6],
                             [0,0,0,3,9,4,0,0,2],
                             [2,3,0,0,0,0,0,1,0],
                             [0,0,9,0,0,3,0,0,8],
                             [0,0,2,9,0,5,7,0,0],
                             [0,7,0,0,0,8,0,9,0],]
    var answer: [[Int]] = [[4,2,7,1,8,6,9,3,5],
                           [1,8,6,5,3,9,2,4,7],
                           [9,5,3,7,4,2,6,8,1],
                           [5,9,4,8,2,1,3,7,6],
                           [7,6,1,3,9,4,8,5,2],
                           [2,3,8,6,5,7,4,1,9],
                           [6,1,9,4,7,3,5,2,8],
                           [8,4,2,9,1,5,7,6,3],
                           [3,7,5,2,6,8,1,9,4],]
    func getNum(x: Int, y: Int) -> Int {
        return nowBoard[x][y]
    }
    func change(x: Int, y: Int, value: Int) {
        nowBoard[x][y] = value
    }
    func check() -> Bool {
        var countCorrect: Float = 0
        var countEmpty: Float = 0
        for i in 0...8{
            for j in 0...8 {
                if nowBoard[i][j] == answer[i][j] {
                    countCorrect += 1
                }
                if question[i][j] == 0 {
                    countEmpty += 1
                }
            }
        }
        //score = Int(((countQues -  countCorrect) / countQues) * 100)
        score = Int( ((countCorrect +  countEmpty - 81) / countEmpty) * 100 )
        if nowBoard == answer {
            score = 100
            return true
        } else {
            return false
        }
    }
}

三、試運行(附GIF)

iOS開發數獨小游戲實例

iOS開發數獨小游戲實例

四、評價

優點:程序簡單,代碼量小,無復雜算法。

缺點:游戲盤面相對固定,未實現數獨盤面的隨機生成、自動生成數獨的解、以及不同難度生成。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/a26013/article/details/121088864

延伸 · 閱讀

精彩推薦
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111312021-03-15
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5282021-01-16
主站蜘蛛池模板: 91天堂国产在线 在线播放 | s0e一923春菜花在线播放 | 国产精品天天影视久久综合网 | 欧美二区三区 | 91夜夜人人揉人人捏人人添 | 色婷婷综合久久久中文字幕 | 精品欧美一区二区三区久久久 | 狠狠婷婷综合缴情亚洲 | 农村老妇1乱69系列小说 | 91视频a | 亚洲咪咪| 四虎影视免费观看免费观看 | 波多野结衣在线看 | 欧美特黄视频在线观看 | 国产精品一区二区国产 | 暖暖的视频完整视频韩国免费 | 成人 在线欧美亚洲 | 欧美一区二区三区精品国产 | 亚洲午夜性春猛交xxxx | naruto tube18动漫 mm131亚洲精品久久 | hd性欧美俱乐部中文 | 99九九成人免费视频精品 | 久久电影院久久国产 | 91资源在线视频 | 午夜理伦片免费 | 国产ay | 欧美日韩一区二区三区韩大 | 欧美一级片免费在线观看 | 男人猛戳女人下部30分钟 | 日日艹| 日韩在线视频免费不卡一区 | 99久久精品免费看国产一区二区 | 无颜之月5集全免费看无删除 | 大奶喷水 | 天码毛片一区二区三区入口 | 国产成人精品一区二三区2022 | 亚色九九九全国免费视频 | 日本高清在线精品一区二区三区 | 免费看欧美一级特黄a大片一 | 每天都要睡男人(nph) | 欧美国产高清 |