Python游戏:控制广场。如果正方形到达随机生成的正方形的10个像素以内,它会加1个点。不起作用。为什么?

2024-09-26 17:43:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个游戏,你控制一个正方形,另一个正方形在地图上随机生成。如果第一个方格与另一个方格的距离在10个像素以内,则会添加一个点,但程序无法运行。有人能告诉我为什么吗?你知道吗

这是我的密码:

from tkinter import *
from random import uniform, randrange
tk = Tk()
canvas = Canvas(tk, width=400, height=400,bg='black')
canvas.pack()
pointcount = -1
LENGTH = 15
WIDTH = 15
LENGTH2 = randrange(1,390)
WIDTH2 = randrange(1,390)
LENGTH3 = LENGTH2 + 15
WIDTH3 = WIDTH2 + 15
X = randrange(1,400)
Y = randrange(1,400)
Snake = canvas.create_rectangle(0,0,WIDTH,LENGTH,fill="green")
Food = canvas.create_rectangle(WIDTH2,LENGTH2,WIDTH3,LENGTH3,fill="yellow")
pos = canvas.coords(Snake)
pos2 = canvas.coords(Food)
def movement_right(event):
    canvas.move(Snake,15,0)
def movement_left(event):
    canvas.move(Snake,-15,0)
def movement_down(event):
    canvas.move(Snake,0,15)
def movement_up(event):
    canvas.move(Snake,0,-15)
for i in range(1,20):
    if pos[0] - pos2[2] == 10:
        pointcount = pointcount + 1
        print("Total points : ", pointcount)
        tk.update()


tk.bind('<Left>', movement_left)
tk.bind('<Right>', movement_right)
tk.bind('<Down>', movement_down)
tk.bind('<Up>', movement_up)



tk.mainloop()

Tags: fromeventmovebinddeftkcanvassnake
1条回答
网友
1楼 · 发布于 2024-09-26 17:43:24

您必须在函数中检查它,因为其他代码只执行一次。你知道吗

您可以创建on函数来测试位置并在所有movement_函数中执行。你知道吗

我用“细胞”来设定位置

import tkinter as tk
import random

#  - constants  - (UPPER_CASE names)

SCREEN_WIDTH = 400
SCREEN_HEIGHT = 400

CELL_WIDTH = 20
CELL_HEIGHT = 20

COLS = SCREEN_WIDTH/CELL_WIDTH
ROWS = SCREEN_HEIGHT/CELL_HEIGHT

#  - functions  -

def test():
    global pointcount

    snake_pos = canvas.coords(snake)
    food_pos = canvas.coords(food)

    # calculate distance 
    diff_x = abs(snake_pos[0] - food_pos[0]) 
    diff_y = abs(snake_pos[1] - food_pos[1]) 

    print(diff_x, diff_y)

    # if snake eat food
    if diff_x == 0 and diff_y == 0:
        pointcount += 1
        print("Total points : ", pointcount)

        # move food to new place
        food_x1 = CELL_WIDTH * random.randrange(0, COLS)
        food_y1 = CELL_HEIGHT * random.randrange(0, ROWS)

        food_x2 = food_x1 + CELL_WIDTH
        food_y2 = food_y1 + CELL_HEIGHT

        canvas.coords(food, (food_x1, food_y1, food_x2, food_y2))

def movement_right(event):
    canvas.move(snake, CELL_WIDTH, 0)
    test()

def movement_left(event):
    canvas.move(snake, -CELL_WIDTH, 0)
    test()

def movement_down(event):
    canvas.move(snake, 0, CELL_HEIGHT)
    test()

def movement_up(event):
    canvas.move(snake, 0, -CELL_HEIGHT)
    test()

#  - other  - (lower_case names)

pointcount = 0

#  - main  -

root = tk.Tk()

canvas = tk.Canvas(root, width=SCREEN_WIDTH, height=SCREEN_HEIGHT, bg='black')
canvas.pack()

root.bind('<Left>', movement_left)
root.bind('<Right>', movement_right)
root.bind('<Down>', movement_down)
root.bind('<Up>', movement_up)

snake = canvas.create_rectangle(0, 0, CELL_WIDTH, CELL_HEIGHT, fill="green")

# create food in first random place
food_x1 = CELL_WIDTH * random.randrange(0, COLS)
food_y1 = CELL_HEIGHT * random.randrange(0, ROWS)

food_x2 = food_x1 + CELL_WIDTH
food_y2 = food_y1 + CELL_HEIGHT

food = canvas.create_rectangle(food_x1, food_y1, food_x2, food_y2, fill="yellow")

root.mainloop()

相关问题 更多 >

    热门问题