在Python中使用桌子和乌龟图形的简单地图,带有6*6桌子和乌龟的600*600画布



我想为Python的简单文本游戏制作地图,我想将600*600个画布拆分为100*100*100象限,这些象限与2D列表中的坐标相对应。如果有人知道该怎么做,我想将我的画布分开,并将其分为几个部分作为坐标。谢谢

我的代码:

#dungos + dragos ver 0.1| #
import turtle
def main():
        tina = turtle.Turtle()
        screen = turtle.Screen()
        Map = [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]
        for row in Map:
                for item in row:
                        print(item, end=' ')
                print('n')
        screen.setup(600,600)
        tina.shape('arrow')
        tina.speed(10)
main()

我现在将添加到此信息中,我现在只是在地图上工作。

这是您600x600像素画布顶部的6x6地图的副本。该坐标在四个地图角中,有四个拐角处的部分和画布的角落本身被标记。

您的问题是,如何识别四个角落的画布坐标地图正方形占据的画布广场。每个地图正方形在画布中占据100x100像素正方形。诀窍是找出画布坐标对于任意地图正方形的4个角(i,j)。

(0,0)                                    (599,0)
+------+------+------+------+------+-----+
|      |      |      |      |      |     |
|(0,0) |      |      |      |      |(5,0)|
+------+------+------+------+------+-----+
|      |      |      |      |      |     |
|      |      |      |      |      |     |
+------+------+------+------+------+-----+
|      |      |      |      |      |     |
|      |      |      |      |      |     |
+------+------*------*------+------+-----+
|      |      |######|      |      |     |
|      |      |######|      |      |     |
+------+------*------*------+------+-----+
|      |      |      |      |      |     |
|      |      |      |      |      |     |
+------+------+------+------+------+-----+
|      |      |      |      |      |     |
| (0,5)|      |      |      |      |(5,5)|
+------+------+------+------+------+-----+
(0,599)                                 (599,599)

考虑一些具体示例:

map square     canvas square (upper left and lower right corners)
-----------------------------------------------------------------
(0,0)          (0,0), (99,99)
(5,5)          (500, 500), (599, 599)

不应该太难说服自己,这概括为

map square     canvas square
---------------------------------------------------
(i,j)          (100*i, 100*j), (100*i+99, 100*j+99)

相反,在MAP Square (x//100, y//100)中找到了画布中的任意点(x,y)

以下是代码显示如何完成类似的事情。

将屏幕坐标值转换为表索引,在handle_clicks()函数中也会打印最终结果。它显示为一系列单独的计算,使其更容易理解所涉及的内容 - 它们本来可以合并为一个计算,但这会隐藏其背后的数学推理)。

import turtle
SCREEN_MAP_SIZE = 600
SCREEN_QUAD_SIZE = 100
MAP_SIZE = int(SCREEN_MAP_SIZE/SCREEN_QUAD_SIZE)
def display_map(game_map):
    """ Output contents of game map. """
    for row in game_map:
        for item in row:
            print(item, end=' ')
        print()
def handle_clicks(x, y):
    """ Convert screen mouse clicks to game_map indices. """
    # Convert coordinate values from range:
    #   -(SCREEN_MAP_SIZE/2)...(SCREEN_MAP_SIZE/2) -> 0..SCREEN_MAP_SIZE-1
    x, y = int(x + SCREEN_MAP_SIZE/2), int(y + SCREEN_MAP_SIZE/2)
    # Convert coordinate values from range
    #   0..SCREEN_MAP_SIZE-1 -> 0..MAP_SIZE-1
    x, y = int(x/SCREEN_MAP_SIZE * MAP_SIZE), int(y/SCREEN_MAP_SIZE * MAP_SIZE)
    # Invert y coordinate value from range
    #   0..MAP_SIZE-1 -> MAP_SIZE-1..0
    y = MAP_SIZE-1 - y
    print('clicked on game_map ({}, {})'.format(x, y))
def main():
    tina = turtle.Turtle()
    screen = turtle.Screen()
    screen.onclick(handle_clicks)
    game_map = [[0 for _ in range(MAP_SIZE)] for _ in range(MAP_SIZE)]
    display_map(game_map)
    screen.setup(SCREEN_MAP_SIZE, SCREEN_MAP_SIZE)
    tina.shape('arrow')
    tina.speed(10)
    screen.mainloop()
main()

最新更新