【问题标题】:How Do I Get This Program To Draw 10 Ellipses in Python?如何让这个程序在 Python 中绘制 10 个椭圆?
【发布时间】:2016-03-30 11:32:50
【问题描述】:

我正在编写程序中的第 12 章课程练习第 11 步 街机游戏,我无法显示我正在显示的 10 个椭圆 试图通过Rectangle的父类来做。我只是得到 现在有10个矩形。我知道问题出在第 34-37 行, 60-62 或 78-81。整个问题在下面的链接中列出

http://www.programarcadegames.com/index.php?chapter=lab_classes_and_graphics&lang=en

import pygame
from random import randrange 

#Colors
black = (0, 0, 0)
white = (255, 255, 255)
green = (0, 255, 0)
red = (255, 0, 0)

pygame.init()

#Set width and height of screen
size = (700, 500)
screen = pygame.display.set_mode(size)

pygame.display.set_caption("Classes")

class Rectangle():

    def __init__(self):
        self.x = 0
        self.y = 0
        self.change_x = 0
        self.change_y = 0
        self.width = 0
        self.height = 0
        self.color = [0, 255, 0]
    def draw(self, screen):
        pygame.draw.rect(screen, self.color, [self.x, self.y, self.width, self.height])
    def move(self):
        self.x = self.x + self.change_x
        self.y = self.y + self.change_y

class Ellipse(Rectangle):

    def draw(self, screen):
        pygame.draw.ellipse(screen, self.color, [self.x, self.y, self.width, self.height])



#Loop until user clicks close
done = False

#Manage how fast screen updates
clock = pygame.time.Clock()

my_list = []
for i in range(10):

    my_object = Rectangle()
    my_object.x = randrange(0, 701)
    my_object.y = randrange(0, 501)
    my_object.change_x = randrange(-3, 3)
    my_object.change_y = randrange(-3, 3)
    my_object.width = randrange(20, 71)
    my_object.height = randrange(20, 71)
    my_object.color = [0, 255, 0]
    my_list.append(my_object)

for i in range(10):

    my_ellipse = Ellipse()
    my_list.append(my_ellipse)

#Main Program Loop
while not done:
    #Main event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    #Game logic goes here

    #Screen clearing code or background image goes here
    screen.fill(black)

    #drawing code goes here
    for my_object in my_list:
        my_object.draw(screen)
        my_ellipse.draw(screen)
        my_object.move()


    #update and display drawn screen
    pygame.display.flip()

    #limit to 60 frames per second
    clock.tick(60)

#close the window and quit
pygame.quit()

【问题讨论】:

    标签: python list class loops pygame


    【解决方案1】:

    您在技术上显示的代码确实绘制了 10 个椭圆,但它们是 0 乘以 0 像素的椭圆,因此您实际上看不到任何东西。

    您需要更改设置代码以将您在循环中创建的Ellipse 实例的属性设置为有用的东西,就像前一个循环对它创建的 10 个矩形所做的那样。如果没有设置,您只是使用默认值(大部分是零)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多