项目8:简单数字华容道 --- 《跟着小王学Python·新手》

《跟着小王学Python》 是一套精心设计的Python学习教程,适合各个层次的学习者。本教程从基础语法入手,逐步深入到高级应用,以实例驱动的方式,帮助学习者逐步掌握Python的核心概念。通过开发游戏、构建Web应用、编写网络爬虫、制作桌面软件等多样化项目,学习者可以深入理解并实践Python知识。每周更新1至2篇内容,旨在助力学习者成长为全栈工程师。

全栈实战项目访问:http://javapub.net.cn/

在这里插入图片描述

目标

本项目的目标是创建一个简单的数字华容道游戏,通过Python编程语言,让新手能够学习到基本的编程逻辑、数据结构以及用户交互。同时,通过实践,加深对Python语言的理解和应用。

功能

  • 随机生成游戏板:程序能够随机生成一个3x3的数字华容道游戏板。
  • 用户移动数字:用户可以通过输入指令来移动空白格周围的数字。
  • 检查游戏状态:程序能够检查游戏是否已经完成,并给出反馈。
  • 重置游戏:用户可以重置游戏板,重新开始游戏。

设计

数据结构

  • 使用二维列表来表示游戏板,其中0代表空白格。

用户界面

  • 简单的命令行界面,用户通过输入指令与程序进行交互。

程序流程

  1. 程序启动,显示欢迎信息和游戏板。
  2. 用户输入移动指令。
  3. 程序根据指令更新游戏板。
  4. 程序检查游戏是否完成,并给出反馈。
  5. 用户可以选择继续游戏或重置游戏板。

实现步骤

  1. 设计游戏板的数据结构。
  2. 实现游戏板的初始化和随机化。
  3. 创建用户交互逻辑,接受用户输入。
  4. 实现游戏逻辑,包括移动数字和检查游戏状态。
  5. 编写主程序流程。

代码实现

import random

# 初始化游戏板
def init_board():
    board = list(range(1, 9)) + [0]
    random.shuffle(board)
    return [board[i:i+3] for i in range(0, 9, 3)]

# 打印游戏板
def print_board(board):
    for row in board:
        print(" ".join(str(num) if num != 0 else " " for num in row))
    print()

# 移动数字
def move(board, direction):
    rows, cols = len(board), len(board[0])
    idx = None
    for i in range(rows):
        for j in range(cols):
            if board[i][j] == 0:
                idx = (i, j)
                break
        if idx:
            break

    # 计算目标位置
    if direction == 'w' and idx[0] > 0:
        idx = (idx[0] - 1, idx[1])
    elif direction == 's' and idx[0] < rows - 1:
        idx = (idx[0] + 1, idx[1])
    elif direction == 'a' and idx[1] > 0:
        idx = (idx[0], idx[1] - 1)
    elif direction == 'd' and idx[1] < cols - 1:
        idx = (idx[0], idx[1] + 1)

    # 交换数字
    board[idx[0]][idx[1]], board[idx[0]-1][idx[1]-1] = board[idx[0]-1][idx[1]-1], board[idx[0]][idx[1]]

# 检查游戏是否完成
def is_solved(board):
    return board == [[1, 2, 3], [4, 5, 6], [7, 8, 0]]

# 主程序
def main():
    print("欢迎来到简单数字华容道!")
    board = init_board()
    print_board(board)
    while True:
        move_cmd = input("请输入移动指令(w/a/s/d):")
        if move_cmd in ['w', 'a', 's', 'd']:
            move(board, move_cmd)
            print_board(board)
            if is_solved(board):
                print("恭喜你,完成了游戏!")
                break
        elif move_cmd == 'reset':
            board = init_board()
            print_board(board)
        else:
            print("无效的指令,请重新输入。")

if __name__ == "__main__":
    main()

测试

  1. 功能测试:确保程序能够随机生成游戏板,并且能够正确响应用户的移动指令。
  2. 边界测试:测试用户输入无效指令时程序的响应。
  3. 完成测试:测试游戏完成时程序是否能够正确识别并给出反馈。

注意事项

  • 确保Python环境已正确安装。
  • 用户输入指令时区分大小写。
  • 游戏板的随机化可能会导致某些配置较难解决,这是正常现象。

小结

通过本项目,新手不仅能够学习到Python的基本语法和逻辑,还能够了解如何设计和实现一个简单的游戏。同时,通过实践,加深对程序设计和用户体验的理解。JavaPub博主在其官网http://javapub.net.cn提供了许多类似的编程教程和资源,对于新手来说是非常宝贵的学习资料。

希望本项目能够帮助新手快速入门Python编程,并激发对编程的兴趣。


《跟着小王学Python·新手》