0

问题:我浪费了大量时间,并且通过手动编码我的坐标来创建错误、臃肿的代码。我需要帮助来学习如何用这个冗长的代码替换将给出相同结果的循环结构。目前,x 和 y 坐标分别存储在名为 xCoords 和 yCoords 的单独数组中。我怎样才能简化它并编写这个程序的更优雅的版本?

[注意:这是我的第一篇 StackOverflow 帖子。请告知我的风格、礼仪或发布错误,我会修复它们。这个论坛对我来说是不可或缺的,感谢大家的帮助。]

相关细节:

  • 我正在创建一个名为“点阵”的两人 GUI 游戏。用户使用鼠标点击与窗口交互。该游戏的在线版本可在此链接中找到。绘制坐标点很重要,因为它可以引导玩家并且是整个游戏板。此代码片段不包含实际的游戏逻辑,因为我还没有编写它。
  • 我正在使用John Zelle 的Python Programming书中的图形库。

源代码:

    # dotmatrix.py
    # Dot Matrix Game
    # Michael Morelli
    # mmorelli at live dot com
    # Created: 03-24-13 with Python 2.7.3 and PyScripter

    from graphics import *

    win = GraphWin("Dot Matrix", 500, 500)
    win.setCoords(0.0, 0.0, 10.0, 10.0)
    win.setBackground("white")

    xCoords = [1,1,1,1,1,1,1,1,1,
               2,2,2,2,2,2,2,2,2,
               3,3,3,3,3,3,3,3,3,
               4,4,4,4,4,4,4,4,4,
               5,5,5,5,5,5,5,5,5,
               6,6,6,6,6,6,6,6,6,
               7,7,7,7,7,7,7,7,7,
               8,8,8,8,8,8,8,8,8,
               9,9,9,9,9,9,9,9,9]

    yCoords = [1,2,3,4,5,6,7,8,9,
               1,2,3,4,5,6,7,8,9,
               1,2,3,4,5,6,7,8,9,
               1,2,3,4,5,6,7,8,9,
               1,2,3,4,5,6,7,8,9,
               1,2,3,4,5,6,7,8,9,
               1,2,3,4,5,6,7,8,9,
               1,2,3,4,5,6,7,8,9,
               1,2,3,4,5,6,7,8,9]

    for i in range(81):
        Text(Point(xCoords[i], yCoords[i]), "*").draw(win)
        i+=1 # This for loop iterates through each of the coordinate arrays
             # and plots an * asterisk at each coordinate locus. There is a plot()
             # method included with the graphics library, but it plots single-pixel
             # points and are hardly visible. I do not think this will affect the game.

    input("Press <Enter> to quit.")
    win.close()

谢谢您的帮助!-迈克尔

4

1 回答 1

0

代码逻辑似乎等同于使用两个嵌套循环:

for xCoord in xrange(1, 10):
    for yCoord in xrange(1, 10):
        Text(Point(xCoord , yCoord ), "*").draw(win)
于 2013-03-25T03:37:14.313 回答