HarmonyOS 鸿蒙Next 数独游戏代码

HarmonyOS 鸿蒙Next 数独游戏代码

import random

def print_board(board):
    for i in range(9):
        if i % 3 == 0 and i != 0:
            print("- - - - - - - - - - - - -")
        for j in range(9):
            if j % 3 == 0 and j != 0:
                print("| ", end="")
            if j == 8:
                print(board[i][j])
            else:
                print(str(board[i][j]) + " ", end="")

def is_valid(board, num, pos):
    # Check row
    for i in range(len(board[0])):
        if board[pos[0]][i] == num and pos[1] != i:
            return False

    # Check column
    for i in range(len(board)):
        if board[i][pos[1]] == num and pos[0] != i:
            return False

    # Check box
    box_x = pos[1] // 3
    box_y = pos[0] // 3

    for i in range(box_y * 3, box_y * 3 + 3):
        for j in range(box_x * 3, box_x * 3 + 3):
            if board[i][j] == num and (i, j) != pos:
                return False

    return True

def solve(board):
    find = find_empty(board)
    if not find:
        return True
    else:
        row, col = find

    for i in range(1, 10):
        if is_valid(board, i, (row, col)):
            board[row][col] = i

            if solve(board):
                return True

            board[row][col] = 0

    return False

def find_empty(board):
    for i in range(len(board)):
        for j in range(len(board[0])):
            if board[i][j] == 0:
                return (i, j)  # row, col
    return None

def generate_sudoku():
    board = [[0 for _ in range(9)] for _ in range(9)]
    solve(board)

    # Remove some numbers to create the puzzle
    for _ in range(40):
        row = random.randint(0, 8)
        col = random.randint(0, 8)
        while board[row][col] == 0:
            row = random.randint(0, 8)
            col = random.randint(0, 8)
        board[row][col] = 0

    return board

def play_sudoku():
    board = generate_sudoku()
    solution = [row[:] for row in board]
    solve(solution)

    while True:
        print_board(board)
        row = int(input("Enter the row (0-8): "))
        col = int(input("Enter the column (0-8): "))
        num = int(input("Enter the number (1-9): "))

        if board[row][col] == 0:
            if num == solution[row][col]:
                board[row][col] = num
                if all(0 not in row for row in board):
                    print("Congratulations! You solved the Sudoku!")
                    break
            else:
                print("Incorrect number. Try again.")
        else:
            print("This cell is already filled. Choose another one.")

if __name__ == "__main__":
    play_sudoku()

更多关于HarmonyOS 鸿蒙Next 数独游戏代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next 数独游戏代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙Next数独游戏的代码开发主要基于ArkUI框架,使用TypeScript或JavaScript进行编写。以下是一个简单的数独游戏代码示例,展示了如何实现数独的初始化和基本交互。

import { Grid, Text, Button } from '@ohos/arkui';

class SudokuGame {
  private grid: number[][];
  private size: number = 9;

  constructor() {
    this.grid = this.createEmptyGrid();
    this.generatePuzzle();
  }

  private createEmptyGrid(): number[][] {
    return Array.from({ length: this.size }, () => Array(this.size).fill(0));
  }

  private generatePuzzle(): void {
    // 这里可以添加生成数独谜题的逻辑
    // 例如,使用回溯算法生成一个合法的数独谜题
  }

  public renderGrid(): Grid {
    const grid = new Grid();
    grid.columnsTemplate = '1fr '.repeat(this.size);

    for (let i = 0; i < this.size; i++) {
      for (let j = 0; j < this.size; j++) {
        const cell = new Text();
        cell.text = this.grid[i][j] === 0 ? '' : this.grid[i][j].toString();
        grid.addChild(cell, i, j);
      }
    }

    return grid;
  }

  public handleCellClick(row: number, col: number): void {
    // 处理单元格点击事件
    // 例如,允许用户输入数字或标记候选数
  }
}

const sudokuGame = new SudokuGame();
const grid = sudokuGame.renderGrid();

// 在ArkUI中显示网格
const root = new Grid();
root.addChild(grid);

这个示例代码展示了如何在鸿蒙Next中创建一个简单的数独游戏界面,并处理基本的交互逻辑。开发者可以根据需要扩展功能,如添加数独生成算法、输入验证、游戏计时等。

回到顶部