当前位置: 首页>編程日記>正文

iOS开发实例 | Demo:数独小游戏

iOS开发实例 | Demo:数独小游戏

相关文章

从零开始的iOS开发:00 | Swift基础语法(上)

从零开始的iOS开发:01 | Swift基础语法(下)

从零开始的iOS开发:10 | 如何构建一个APP

从零开始的iOS开发:20 | 计算器APP

目录

一、界面设计

二、实现

三、试运行(附GIF)

四、评价


一、界面设计

        如下图。图1是用户打开程序后的主页面,点击“开始游戏”后进入游戏页面(图2,图3)。游戏界面上方是显示条,显示玩家当前选中的按钮。当玩家想要在九宫格中填入数字时,只需点击下方1-9的数字控件,显示条上会自动显示玩家当前选中的数字编号,再点击玩家想要填入的位置,就可以填入控件了。

        最下方三个按钮分别是“提交”“橡皮擦”“标记”控件。当玩家点击“提交”按钮,系统会自动为玩家结算游戏分数;当玩家点击“橡皮擦”时,可以擦除九宫格上指定位置的数字;当玩家点击“标记”时,可以为九宫格上的格子添加一个小红旗作为标记。游戏界面上方有一个导航条,点击house图标会回到主页面。

        

二、实现

       1. 先搭入口界面,包括一个image view和button;添加一个ViewController作为游戏界面;在入口界面和游戏界面之间添加segue,当点击“开始游戏”时跳转到游戏界面。

        2.为游戏界面添加必要的控件,用9x9个button实现九宫格,添加9个数字按钮和3个功能控件,为了便于用户使用,需要添加一个显示条Lable。通过用户按下button得知玩家想要在九宫上填入数字的位置坐标,button通过Tag识别。添加“提交”“橡皮擦”“标记”按钮。

        3.关联代码。将九宫格,9个数字按钮,以及3个功能控件与代码关联,同时新建一个Board类,Board类包含九宫格游戏进度和答案计算等。

//
//  ViewController.swift
//
import UIKitclass ViewController: UIViewController {var inputNumber: String = " "var board = Board()var oldx: Int = 0var oldy: Int = 0var 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.taglet hightTag: Int = pushTag / 10let lowTag: Int = pushTag % 10if 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 - 1oldy = lowTag - 1oldValue = 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 = 0var 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 = 0var countEmpty: Float = 0for 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 = 100return true} else {return false}}
}

三、试运行(附GIF)

四、评价

  • 优点:程序简单,代码量小,无复杂算法。
  • 缺点:游戏盘面相对固定,未实现数独盘面的随机生成、自动生成数独的解、以及不同难度生成。


https://www.fengoutiyan.com/post/15243.html

相关文章:

  • 什么叫数独游戏规则
  • ios编程游戏
  • 游戏实例
  • c数独
  • 小游戏数独
  • ipad数独游戏
  • 数独程序
  • 数独小程序
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機