python初学总结八数码小游戏

这篇博客分享了作者使用PyCharm编译的八数码小游戏,详细介绍了游戏的基本功能,包括移动和生成随机数,以及GUI界面的布局设计。文章还探讨了模式选择,包括人工移动和随机移动,并提及了回放功能的实现。虽然缺少智能移动功能,但游戏已具备可玩性。源代码被提供以便读者参考学习。
摘要由CSDN通过智能技术生成

pycharm 编译的八数码小游戏

基本游戏功能

基本游戏功能利用python的基础知识或者C语言的基础知识能够把八数码中的九个数放进一个列表里面,然后实现移动以及生成随机数和随机移动的功能。但本人能力有限,试过多种方法也无法在不创建GUI的情况下实现键盘响应的移动。

GUI界面的布局

因为tkinter无法实现grid()和pack()的一起使用,综合考虑美观等因素,我选择利用grid()的布局。所以在应用tkinter将游戏界面化时应该先大体规划好网格的分布。

在这里插入图片描述

以上我对八数码每个数字在行上采用占据两格以及列上占据一格的方法规划出了大体的框架。而且也能显得整体比较美观。

之后游戏模式里的三个Radiobutton用grid()就比较难以做到比较有序的排布了,所以用place()的方式将其有序放置。

值得注意的是label里的长和宽不是像Tk()一样像素化表示,所以字体大小和label所占大小需要自己调节。

模式选择

选择按钮利用Radiobutton来实现,然后人工移动则绑定键盘响应。随机移动则进入循环结构任其随机移动。其中我加了v.get() == 2来限制其模式切换后还会随机移动的问题,随机移动界面需要禁止0.3秒后再进行移动的操作则用after()和updated()函数进行页面更新完成。由于初学,还未学习算法,因此智能移动暂未摆设作用。

回放功能

在主函数里加入一个空列表,然后每走一步就将新的列表通过append()的方式加入到该列表中。回放时候则从第一步开始回放到结束。而禁止0.3秒后再执行下一步则与随机模式的方式一样。回放功能会在完成游戏后弹窗问是否需要。

源代码

因为初学,有许多地方可能还不完善,而且一步步增加功能,也有些不需要的函数未删除,但保留着供自己以后回顾过程用。基本上该游戏可玩。

import random
import time
import tkinter as tk

def start_game():
    global lst,goal_list,replay_list,m
    m = 0
    lst, goal_list = creat_lst()
    replay_list.append(lst.copy())
    # root.bind("<Left>", left)
    # root.bind("<Right>", right)
    # root.bind("<Up>", north)
    # root.bind("<Down>", south)
    output_lst()

def game_clear():
    global lst
    global goal_list
    if lst == goal_list:
        result = tk.Toplevel()
        label_result = tk.Label(result, text='game clear\ncongratulation!!',
                                bg='white', font=('Arial', 14),
                                width=18, height=6)
        label_result.grid()
        button_replay = tk.Button(result, text = 'review',
                                  bg='white', font = ('Arial', 14),
                                  width=18, height=2,co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值