如何将对象添加到Python-3x中预定义的正方形中?

四十

我使用乌龟模块驱动了一个8x8尺寸的电路板。它看起来像棋盘,但不是,因为黑色块是随机分布的。

目的是我要制定一个A-Star算法。算法部分完成。但是,由于我也不了解Python,因此我陷入了图形界面部分。您可能会说,为什么不使用其他编程语言?我想,实际上,这个项目将帮助我学习更多这种语言。

我当时使用的是“海龟图形”模块,但据我所知,它是使用笔绘制形状的,它通过画线来移动整个特定路径。我正在处理海龟模块的功能,以便了解它们是什么,我仍在进行中,因此,我在问这些问题。

我的问题是:

1)我想将一个对象或图像放入一个特定的块中。实际上,我放入对象中的块将是白色的。

2)我还希望该对象像国际象棋一样从一个方块移动到另一个方块。(但是,不是)

3)一动后,是否可以用颜色填充前一个块?(实际上,我可能已经完成了这一部分,但是这很耗时。我的意思是,程序必须稍等一下才能完成笔的移动,以便用一种颜色填充该块。)

我是Python的新手,因此这些问题可能是如此简单。如果那样的话,对不起。

谢谢先进..最好的问候..

import turtle
import image
Tess=turtle.Turtle()
Tess.pensize(1)
Tess.speed(-100)
w=40

def mysquare(who,thecolor,size):
    who.pendown()
    who.pencolor('black')
    who.fillcolor(thecolor)
    who.begin_fill()
    who.setheading(0)
    for i in range(4):
        who.forward(size)
        who.left(90)
    who.end_fill()

for j in range(8):
  for i in range(8):
#      print(i,j)
      if i==5 and j==7 or i==5 and j==6 or i==3 and j==5 or i==7 and j==5 or i==2 and j==4 or i==4 and j==4 or i==5 and j==4 or i==6 and j==4:
          scolor='black'
      else:
          scolor='white'
      Tess.penup()
      Tess.goto((i-4)*w,(j-4)*w)
      mysquare(Tess,scolor,w)
克兰

我相信以下内容会显示您描述的行为。它设置了棋盘,将乌龟移动到一个白色方块,然后将其随机移动到尚未访问过的方块(避免出现黑色方块),直到用尽有效的移动为止:

from turtle import Turtle, Screen
from random import choice

WIDTH = 40
BOARD_SIZE = 8
COLOR_EMPTY, COLOR_BLOCKED, COLOR_VISITED, COLOR_FAILED = 'white', 'black', 'green', 'red'

blocked_squares = [(5, 7), (5, 6), (3, 5), (7, 5), (2, 4), (4, 4), (5, 4), (6, 4)]  # should generate randomly

def mysquare(turtle, i, j, color, size):
    turtle.penup()
    turtle.goto((i - BOARD_SIZE//2) * size, (j - BOARD_SIZE//2) * size)
    turtle.pendown()
    turtle.fillcolor(color)
    turtle.setheading(0)

    turtle.begin_fill()
    for _ in range(4):
        turtle.forward(size)
        turtle.left(90)
    turtle.end_fill()

def board_to_screen(position):
    y, x = position
    return ((x - BOARD_SIZE//2) * WIDTH + WIDTH / 2, (y - BOARD_SIZE//2) * WIDTH + WIDTH / 2)

def move():
    global position

    positions = []

    for j_delta in (-1, 0, 1):
        if 0 <= position[0] + j_delta < BOARD_SIZE:
            for i_delta in (-1, 0, 1):
                if 0 <= position[1] + i_delta < BOARD_SIZE:
                    if board[position[0] + j_delta][position[1] + i_delta]:
                        new_position = (position[0] + j_delta, position[1] + i_delta)
                        if new_position != position:
                            positions.append(new_position)
    j, i = position

    if positions:
        board[j][i] = False
        mysquare(tess, i, j, COLOR_VISITED, WIDTH)
        position = choice(positions)
        screen.ontimer(move, 1000)
    else:
        mysquare(tess, i, j, COLOR_FAILED, WIDTH)

    tess.penup()
    tess.goto(board_to_screen(position))
    screen.update()

tess = Turtle(shape='turtle')
tess.speed('fastest')

screen = Screen()
screen.tracer(0)

board = []

for j in range(BOARD_SIZE):
    board.append(list())
    for i in range(BOARD_SIZE):
        board[j].append(True)
        square_color = COLOR_EMPTY
        if (i, j) in blocked_squares:
            square_color = COLOR_BLOCKED
            board[j][-1] = False
        mysquare(tess, i, j, square_color, WIDTH)

screen.update()

position = (3, 3)
tess.penup()
tess.goto(board_to_screen(position))

screen.ontimer(move, 1000)

screen.exitonclick()

最好使用多只乌龟来避免某些移动,并且板上的乌龟可以是GIF图像,而不是内置的乌龟形状。黑色方块可能应该随机生成(但要小心),就像乌龟板上的初始起始位置一样。

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将对象添加到向量中?

来自分类Dev

如何将对象添加到枚举定义的类?

来自分类Dev

如何将对象添加到作为对象内键值的数组中?

来自分类Dev

如何将对象沿着索引添加到多个数组中

来自分类Dev

如何将对象从ng-repeat添加到控制器数组($ scope)中?

来自分类Dev

在for循环中使用此ArrayList时如何将对象添加到ArrayList中?

来自分类Dev

当列表是自定义类对象时,如何将对象正确添加到列表中?

来自分类Dev

如何通过拖放将对象添加到UITableView中?

来自分类Dev

如何在Python中使用循环将对象添加到类中?

来自分类Dev

如何在iOS的Swift中制作可重定位的3x3正方形?

来自分类Dev

如何将对象数组添加到阿波罗客户端突变请求中?

来自分类Dev

如何将对象添加到数组中,但仅当数组的当前元素为 0 时?

来自分类Dev

如何使用NODEJS和FileStream将对象追加/添加到JSON对象中的特定对象

来自分类Dev

使用CSS3在现有的正方形中添加半透明正方形,无需额外的DIV

来自分类Dev

如何将元素添加到数组中的对象

来自分类Dev

Java:如何将数据添加到对象中?

来自分类Dev

Laravel:如何将键值添加到对象中?

来自分类Dev

如何将键值对添加到数组中的对象?

来自分类Dev

如何将_添加到json对象中的空格?

来自分类Dev

如何将带编号的对象迭代添加到python列表中?

来自分类Dev

如何将用户定义的对象添加到LinkedList?

来自分类Dev

在Java中,如何通过对象的构造函数将对象添加到数组?

来自分类Dev

Python将对象添加到同一对象方法中的列表

来自分类Dev

将对象添加到预分配的对象数组中

来自分类Dev

将对象添加到预分配的对象数组中

来自分类Dev

如何将对象从ArrayList添加到另一个类中的另一个ArrayList

来自分类Dev

将对象添加到BindingList中的BindingList中

来自分类Dev

如何使用Swift在异步完成块中的特定索引处将对象添加到数组

来自分类Dev

CQRS / DDD如何使用命令将对象添加到集合中?

Related 相关文章

  1. 1

    如何将对象添加到向量中?

  2. 2

    如何将对象添加到枚举定义的类?

  3. 3

    如何将对象添加到作为对象内键值的数组中?

  4. 4

    如何将对象沿着索引添加到多个数组中

  5. 5

    如何将对象从ng-repeat添加到控制器数组($ scope)中?

  6. 6

    在for循环中使用此ArrayList时如何将对象添加到ArrayList中?

  7. 7

    当列表是自定义类对象时,如何将对象正确添加到列表中?

  8. 8

    如何通过拖放将对象添加到UITableView中?

  9. 9

    如何在Python中使用循环将对象添加到类中?

  10. 10

    如何在iOS的Swift中制作可重定位的3x3正方形?

  11. 11

    如何将对象数组添加到阿波罗客户端突变请求中?

  12. 12

    如何将对象添加到数组中,但仅当数组的当前元素为 0 时?

  13. 13

    如何使用NODEJS和FileStream将对象追加/添加到JSON对象中的特定对象

  14. 14

    使用CSS3在现有的正方形中添加半透明正方形,无需额外的DIV

  15. 15

    如何将元素添加到数组中的对象

  16. 16

    Java:如何将数据添加到对象中?

  17. 17

    Laravel:如何将键值添加到对象中?

  18. 18

    如何将键值对添加到数组中的对象?

  19. 19

    如何将_添加到json对象中的空格?

  20. 20

    如何将带编号的对象迭代添加到python列表中?

  21. 21

    如何将用户定义的对象添加到LinkedList?

  22. 22

    在Java中,如何通过对象的构造函数将对象添加到数组?

  23. 23

    Python将对象添加到同一对象方法中的列表

  24. 24

    将对象添加到预分配的对象数组中

  25. 25

    将对象添加到预分配的对象数组中

  26. 26

    如何将对象从ArrayList添加到另一个类中的另一个ArrayList

  27. 27

    将对象添加到BindingList中的BindingList中

  28. 28

    如何使用Swift在异步完成块中的特定索引处将对象添加到数组

  29. 29

    CQRS / DDD如何使用命令将对象添加到集合中?

热门标签

归档