鱼C论坛

 找回密码
 立即注册
查看: 2138|回复: 4

tkinter 贪吃蛇游戏

[复制链接]
发表于 2020-12-2 20:06:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import tkinter as tk
import random as rd
import time
class Food:
    def __init__(self, map_x_y):
        falg = rd.choice([1, 2])
        self.x1 = rd.choice([x for x in range(20, 481, 20)])
        self.y1 = rd.choice([y for y in range(20, 481, 20)])
        self.x2 = self.x1
        self.y2 = self.y1
        if falg == 1:
            self.x2 += 10
        else:
            self.y2 += 10

        map_x_y.create_line(self.x1, self.y1, self.x2, self.y2, fill='yellow', width=10)
class Snake:
    def __init__(self,map_x_y):
        falg = rd.choice([1, 2])
        self.x1 = rd.choice([x for x in range(20, 481, 20)])
        self.y1 = rd.choice([y for y in range(20, 481, 20)])
        self.x2 = self.x1
        self.y2 = self.y1
        if falg == 1:
            self.x2 += 60
        else:
            self.y2 += 60

        map_x_y.create_line(self.x1, self.y1, self.x2, self.y2, fill='yellow', width=10)

    def default_move(self, direction, map_x_y):
        if direction == 'x':
            map_x_y.create_line(self.x1, self.y1-10, self.x2, self.y2+10, fill='yellow', width=10)


    def move_w(self):
        pass

    def move_a(self):
        pass

    def move_s(self):
        pass

    def move_d(self):
        pass



class Game:
    LEAGL_X = [0, 500]
    LEAGL_Y = [0, 500]
    def __init__(self):
        game_win = tk.Toplevel()
        game_win.title('GAME')
        game_win.geometry('500x500')
        game_map = tk.Canvas(game_win, bg='red', width=500, height=500)
        snake = Snake(game_map) # 生成蛇
        food = Food(game_map)  # 生存食物

        game_map.focus_set()
        game_map.bind(sequence='<w>', func=snake.move_w)
        game_map.bind(sequence='<a>', func=snake.move_a)
        game_map.bind(sequence='<d>', func=snake.move_d)
        game_map.bind(sequence='<s>', func=snake.move_s)
        game_map.pack()
        while True:
            print(1)
            if snake.x1 == snake.x2:
                snake.default_move('x', game_map)
            else:
                snake.default_move('y', game_map)


class Window:
    def __init__(self):
        root = tk.Tk()
        root.title('GAME')
        root.geometry('300x300')

        tk.Button(root,text='PLAY',command=Game).pack()
        root.mainloop()
window = Window()

由于我也是现学现做,依葫芦画瓢,以上代码还有很多没有完善了地方,但是出现了一个致命的问题,Toplevel窗口不显示出来,这是为什么呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-2 20:22:36 | 显示全部楼层
game_win = tk.Toplevel(root)  # tk.Toplevel()要这么用,要把主窗口参数传入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-2 20:29:00 | 显示全部楼层
笨鸟学飞 发表于 2020-12-2 20:22
game_win = tk.Toplevel(root)  # tk.Toplevel()要这么用,要把主窗口参数传入

还是显示不出来,主窗口一直处于未响应状态
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-2 20:32:20 | 显示全部楼层
import tkinter as tk

root = tk.Tk()
root.title('GAME')
root.geometry('300x300')
game_win = tk.Toplevel(root)
tk.Button(root,text='PLAY').pack()
root.mainloop()

完全没问题啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-2 20:41:07 | 显示全部楼层

你这样的确没有问题,我的想法实在Canvas上面动态的刷新画面,但是Canvas的窗口根本就不显示,除非我把while循环去掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 06:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表