微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我正在尝试在pygame中编写一个程序,该程序如何使用一组可变的点绘制星星

如何解决我正在尝试在pygame中编写一个程序,该程序如何使用一组可变的点绘制星星

1。问题:

我想学习如何使用多个坐标作为变量并使用直线绘制星星,到目前为止,我所做的是正确的,但是如果有人可以帮助我使用其他变量并将其应用于我的代码,很棒:D

2个代码

let navigationController = self.navigationController
self.navigationController?.setToolbarHidden(false,animated: false)
let autoLinkUrl = (messageBody!["autoLinkUrl"] as? String)!
print(autoLinkUrl) /* prints: https://news.ycombinator.com/ */
            
if let requestURL = URL(string: autoLinkUrl) {
  print(requestURL) /* prints: https://news.ycombinator.com/ */
  let request : URLRequest? = URLRequest(url: requestURL)
  print(request) /* prints: Optional(https://news.ycombinator.com/) */
  self.websiteRecordingVC!.webView.load(request!) /* Fatal error is raised here */
  navigationController!.pushViewController(self.websiteRecordingVC!,animated: true)
}

3个请求:

到目前为止,这是我所拥有的,这是正确的,但是我想做出更多的变量并做出更多的线条来成为一颗星星。如果有人可以告诉我这些变量并应用它们,那就太好了!

解决方法

您可以像定义一样继续,只需定义更多coordinateX变量即可。但是,这最终将成为问题。想象一下有数百个单独的变量!

一种更好的方法是使用Python列表保存所有坐标:

point_list = [ (250,0),(500,250) ]

(关于Python列表的在线tutorials有很多。)

可以使用带有索引号(从零开始)的方括号表示法来访问(或分配)每个元素,因此point_list[0](250,0);并且point_list[1](500,250)。要获取每个坐标的x,y部分,您可以添加另一对方括号,或一次获取所有部分:

first_x = points_list[0][0]   # 250
first_y = points_list[0][1]   #   0 

first_x,first_y = points_list[0]    # 250,0

列表可以容纳大量点,例如,一个简单的三点星:

point_list = [ (148,170),(200,20),(252,(356,290),260),(44,290) ]

将它们保存在列表中的另一个好处是,您可以使用PyGame函数pygame.draw.polygon()将它们简单地绘制到屏幕上。

pygame.draw.polygon( window,YELLOW,point_list,1 )

或者您可以在列表中“重复”,画出线条:

for i in range( len( points_list ) - 1 ):
    pygame.draw.line( screen,white,points_list[i],points_list[i+1],5 )

请注意,我使用了列表长度len() ,所以在引用[i+1]时,我们没有遍历列表的末尾。 / p>

这是我使用上述想法写的一个简单示例:

screen-shot

代码:

import pygame

# Window size
WINDOW_WIDTH    = 400
WINDOW_HEIGHT   = 400

DARK_BLUE  = (   3,5,54)
STARRY     = ( 230,255,80 )


### initialisation
pygame.init()
window = pygame.display.set_mode( ( WINDOW_WIDTH,WINDOW_HEIGHT ) )
pygame.display.set_caption("Star")


# Define a star
centre_coord = ( WINDOW_WIDTH//2,WINDOW_HEIGHT//2 )
star_points  = [ (165,151),(235,(371,144),(257,219),(306,346),(94,(143,(29,144)   ]

### Main Loop
clock = pygame.time.Clock()
done = False
while not done:

    # Handle user-input
    for event in pygame.event.get():
        if ( event.type == pygame.QUIT ):
            done = True

    # Re-draw the window
    window.fill( DARK_BLUE )                             # background fill
    pygame.draw.polygon( window,STARRY,star_points )   # Draw the star
    pygame.display.flip()                                # Update the display

    # Clamp FPS
    clock.tick_busy_loop(60)

pygame.quit()

或者是32个坐标的16点星:

point_list = [ (173,63),(227,(269,34),(278,84),(327,73),(316,122),(366,131),(337,173),(380,200),227),269),278),327),316),366),337),380),(173,(131,(122,(73,(84,(34,(63,(20,34) ]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。