iOS開發(fā)數(shù)獨(dú)小游戲?qū)嵗?/h1>
更新時(shí)間:2021年11月03日 11:15:38 作者:易水卷長(zhǎng)空
這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)數(shù)獨(dú)小游戲?qū)嵗闹惺纠a介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了iOS實(shí)現(xiàn)數(shù)獨(dú)小游戲的具體代碼,供大家參考,具體內(nèi)容如下
一、界面設(shè)計(jì)
如下圖。圖1是用戶打開程序后的主頁面,點(diǎn)擊“開始游戲”后進(jìn)入游戲頁面(圖2,圖3)。游戲界面上方是顯示條,顯示玩家當(dāng)前選中的按鈕。當(dāng)玩家想要在九宮格中填入數(shù)字時(shí),只需點(diǎn)擊下方1-9的數(shù)字控件,顯示條上會(huì)自動(dòng)顯示玩家當(dāng)前選中的數(shù)字編號(hào),再點(diǎn)擊玩家想要填入的位置,就可以填入控件了。
最下方三個(gè)按鈕分別是“提交”“橡皮擦”“標(biāo)記”控件。當(dāng)玩家點(diǎn)擊“提交”按鈕,系統(tǒng)會(huì)自動(dòng)為玩家結(jié)算游戲分?jǐn)?shù);當(dāng)玩家點(diǎn)擊“橡皮擦”時(shí),可以擦除九宮格上指定位置的數(shù)字;當(dāng)玩家點(diǎn)擊“標(biāo)記”時(shí),可以為九宮格上的格子添加一個(gè)小紅旗作為標(biāo)記。游戲界面上方有一個(gè)導(dǎo)航條,點(diǎn)擊house圖標(biāo)會(huì)回到主頁面。

二、實(shí)現(xiàn)
1. 先搭入口界面,包括一個(gè)image view和button,添加一個(gè)ViewController作為游戲界面,在入口界面和游戲界面之間添加segue,當(dāng)點(diǎn)擊“開始游戲”時(shí)跳轉(zhuǎn)到游戲界面。
2.為游戲界面添加必要的控件,用9x9個(gè)button實(shí)現(xiàn)九宮格,添加9個(gè)數(shù)字按鈕和3個(gè)功能控件,為了便于用戶使用,需要添加一個(gè)顯示條。通過用戶按下button得知玩家想要在九宮上填入數(shù)字的位置坐標(biāo),button通過Tag識(shí)別。

3.關(guān)聯(lián)代碼。將九宮格,9個(gè)數(shù)字按鈕,以及3個(gè)功能控件與代碼關(guān)聯(lián),同時(shí)新建一個(gè)Board類,Board類包含九宮格游戲進(jìn)度和答案計(jì)算等。
//
// 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
}
}
}
三、試運(yùn)行(附GIF)


四、評(píng)價(jià)
優(yōu)點(diǎn):程序簡(jiǎn)單,代碼量小,無復(fù)雜算法。
缺點(diǎn):游戲盤面相對(duì)固定,未實(shí)現(xiàn)數(shù)獨(dú)盤面的隨機(jī)生成、自動(dòng)生成數(shù)獨(dú)的解、以及不同難度生成。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
-
講解Java中如何構(gòu)造內(nèi)部類對(duì)象以及訪問對(duì)象
這篇文章主要介紹了講解Java中如何構(gòu)造內(nèi)部類對(duì)象以及訪問對(duì)象,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下 2015-09-09
-
iOS實(shí)現(xiàn)點(diǎn)擊圖片放大和長(zhǎng)按保存圖片的示例
本篇文章主要介紹了iOS實(shí)現(xiàn)點(diǎn)擊圖片放大和長(zhǎng)按保存圖片的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧 2018-03-03
-
iOS 16 CocoaAsyncSocket 崩潰修復(fù)詳解
這篇文章主要為大家介紹了iOS 16 CocoaAsyncSocket 崩潰修復(fù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪 2023-01-01
-
IOS 開發(fā)之PickerView文字和隨機(jī)數(shù)的使用
這篇文章主要介紹了IOS 開發(fā)之PickerView文字和隨機(jī)數(shù)的使用的相關(guān)資料,這里提供實(shí)例幫助大家理解掌握這部分內(nèi)容,需要的朋友可以參考下 2017-08-08
-
iOS App開發(fā)中的UIPageControl分頁控件使用小結(jié)
UIPageControl分頁控件的例子簡(jiǎn)單來說即是我們平時(shí)翻動(dòng)多個(gè)桌面頁時(shí)及底部帶有的圓點(diǎn)頁碼標(biāo)注,這里我們來看一下iOS App開發(fā)中的UIPageControl分頁控件使用小結(jié),需要的朋友可以參考下 2016-06-06
-
iOS中UIWebView網(wǎng)頁加載組件的基礎(chǔ)及使用技巧實(shí)例
UIWebView是開發(fā)中很常用的應(yīng)用內(nèi)調(diào)用網(wǎng)頁瀏覽的控件,這里整理了一些iOS中UIWebView網(wǎng)頁加載組件的基礎(chǔ)及使用技巧實(shí)例 ,需要的朋友可以參考下 2016-06-06
-
iOS App設(shè)計(jì)模式開發(fā)中對(duì)建造者模式的運(yùn)用實(shí)例
這篇文章主要介紹了iOS App設(shè)計(jì)模式開發(fā)中對(duì)建造者模式的運(yùn)用實(shí)例,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下 2016-04-04
最新評(píng)論
本文實(shí)例為大家分享了iOS實(shí)現(xiàn)數(shù)獨(dú)小游戲的具體代碼,供大家參考,具體內(nèi)容如下
一、界面設(shè)計(jì)
如下圖。圖1是用戶打開程序后的主頁面,點(diǎn)擊“開始游戲”后進(jìn)入游戲頁面(圖2,圖3)。游戲界面上方是顯示條,顯示玩家當(dāng)前選中的按鈕。當(dāng)玩家想要在九宮格中填入數(shù)字時(shí),只需點(diǎn)擊下方1-9的數(shù)字控件,顯示條上會(huì)自動(dòng)顯示玩家當(dāng)前選中的數(shù)字編號(hào),再點(diǎn)擊玩家想要填入的位置,就可以填入控件了。
最下方三個(gè)按鈕分別是“提交”“橡皮擦”“標(biāo)記”控件。當(dāng)玩家點(diǎn)擊“提交”按鈕,系統(tǒng)會(huì)自動(dòng)為玩家結(jié)算游戲分?jǐn)?shù);當(dāng)玩家點(diǎn)擊“橡皮擦”時(shí),可以擦除九宮格上指定位置的數(shù)字;當(dāng)玩家點(diǎn)擊“標(biāo)記”時(shí),可以為九宮格上的格子添加一個(gè)小紅旗作為標(biāo)記。游戲界面上方有一個(gè)導(dǎo)航條,點(diǎn)擊house圖標(biāo)會(huì)回到主頁面。
二、實(shí)現(xiàn)
1. 先搭入口界面,包括一個(gè)image view和button,添加一個(gè)ViewController作為游戲界面,在入口界面和游戲界面之間添加segue,當(dāng)點(diǎn)擊“開始游戲”時(shí)跳轉(zhuǎn)到游戲界面。
2.為游戲界面添加必要的控件,用9x9個(gè)button實(shí)現(xiàn)九宮格,添加9個(gè)數(shù)字按鈕和3個(gè)功能控件,為了便于用戶使用,需要添加一個(gè)顯示條。通過用戶按下button得知玩家想要在九宮上填入數(shù)字的位置坐標(biāo),button通過Tag識(shí)別。
3.關(guān)聯(lián)代碼。將九宮格,9個(gè)數(shù)字按鈕,以及3個(gè)功能控件與代碼關(guān)聯(lián),同時(shí)新建一個(gè)Board類,Board類包含九宮格游戲進(jìn)度和答案計(jì)算等。
// // 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 } } }
三、試運(yùn)行(附GIF)
四、評(píng)價(jià)
優(yōu)點(diǎn):程序簡(jiǎn)單,代碼量小,無復(fù)雜算法。
缺點(diǎn):游戲盤面相對(duì)固定,未實(shí)現(xiàn)數(shù)獨(dú)盤面的隨機(jī)生成、自動(dòng)生成數(shù)獨(dú)的解、以及不同難度生成。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
講解Java中如何構(gòu)造內(nèi)部類對(duì)象以及訪問對(duì)象
這篇文章主要介紹了講解Java中如何構(gòu)造內(nèi)部類對(duì)象以及訪問對(duì)象,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09iOS實(shí)現(xiàn)點(diǎn)擊圖片放大和長(zhǎng)按保存圖片的示例
本篇文章主要介紹了iOS實(shí)現(xiàn)點(diǎn)擊圖片放大和長(zhǎng)按保存圖片的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03iOS 16 CocoaAsyncSocket 崩潰修復(fù)詳解
這篇文章主要為大家介紹了iOS 16 CocoaAsyncSocket 崩潰修復(fù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01IOS 開發(fā)之PickerView文字和隨機(jī)數(shù)的使用
這篇文章主要介紹了IOS 開發(fā)之PickerView文字和隨機(jī)數(shù)的使用的相關(guān)資料,這里提供實(shí)例幫助大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-08-08iOS App開發(fā)中的UIPageControl分頁控件使用小結(jié)
UIPageControl分頁控件的例子簡(jiǎn)單來說即是我們平時(shí)翻動(dòng)多個(gè)桌面頁時(shí)及底部帶有的圓點(diǎn)頁碼標(biāo)注,這里我們來看一下iOS App開發(fā)中的UIPageControl分頁控件使用小結(jié),需要的朋友可以參考下2016-06-06iOS中UIWebView網(wǎng)頁加載組件的基礎(chǔ)及使用技巧實(shí)例
UIWebView是開發(fā)中很常用的應(yīng)用內(nèi)調(diào)用網(wǎng)頁瀏覽的控件,這里整理了一些iOS中UIWebView網(wǎng)頁加載組件的基礎(chǔ)及使用技巧實(shí)例 ,需要的朋友可以參考下2016-06-06iOS App設(shè)計(jì)模式開發(fā)中對(duì)建造者模式的運(yùn)用實(shí)例
這篇文章主要介紹了iOS App設(shè)計(jì)模式開發(fā)中對(duì)建造者模式的運(yùn)用實(shí)例,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-04-04