ยังไงที่ร้านขายผลลัพธ์ของวิธีการ

0

คำถาม

ฉันกำลังพยายามวาด description ในการสุ่มตำแหน่งและการสุ่มแบบสี rgb ค่าและฉันต้องการ 1000 ของพวกเขาจะถูกสร้างขึ้น ปัญหาของฉันกำลังเผชิญหน้ากับคืนนั้น everytime วสำหรับการวาดเกิดขึ้นมัน randomizes มันทั้งหมดอีกครั้งมีทางอื่นจะทำให้มันไม่เกิดขึ้น

import pygame
import sys
import random
pygame.init()
win = pygame.display.set_mode((800,600))
pygame.display.set_caption("Simulation")

def safeZone():
        #Draws a top rectangle
    pygame.draw.rect(win, (50,205,50), (0, 0, 800, 100))
    
def dot():
    width = 10
    height = 10
    spawnX = random.randrange(1, 801)
    spawnY = random.randrange(1, 601)
    r = random.randrange(1, 256)
    g = random.randrange(1, 256)
    b = random.randrange(1, 256)
    pygame.draw.rect(win, (r, g, b), (spawnX, spawnY, width, height))

def population(size):
    for x in range(size):
        dot()

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    win.fill((255, 255, 255))
    safeZone() # Always draw dots after safe zone
    population(1000)
    pygame.display.update()

pygame.quit()


pygame python
2021-11-22 19:27:48
3

คำตอบที่ดีที่สุด

1

สร้างจุดงคลังสื่อแล้วก็วาดที่จุดเก็บสะสมไว้ ตอนนี้คุณสามารถปรับปรุงจุดตำแหน่งต่างหากและพวกเขาจะ redraw อยู่ในตำแหน่งใหม่. นี่ฉันกำลังแต่ละจุดเคลื่อนย้าสุ่มจำนวนมากในทุกๆเรื่อยๆ

import pygame
import sys
import random
pygame.init()
win = pygame.display.set_mode((800,600))
pygame.display.set_caption("Simulation")

class Dot:
    def __init__(self):
        self.spawnX = random.randrange(0, 800)
        self.spawnY = random.randrange(0, 600)
        self.r = random.randrange(0, 256)
        self.g = random.randrange(0, 256)
        self.b = random.randrange(0, 256)

def safeZone():
        #Draws a top rectangle
    pygame.draw.rect(win, (50,205,50), (0, 0, 800, 100))
    
def drawdot(dot):
    width = 10
    height = 10
    pygame.draw.rect(win, (dot.r, dot.g, dot.b), (dot.spawnX, dot.spawnY, width, height))

def population(dots):
    for dot in dots:
        dot.spawnX += random.randrange(-3,4)
        dot.spawnY += random.randrange(-3,4)
        drawdot(dot)

alldots = [Dot() for _ in range(1000)]

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    win.fill((255, 255, 255))
    safeZone() # Always draw dots after safe zone
    population(alldots)
    pygame.display.update()

เป็นสิ่งคุ้มที่ทำการแก้ไขคือการร้านขายทั้งสี่เหลี่ยมในวัตถุ:

...
class Dot:
    def __init__(self):
        self.location = [
            random.randrange(0, 800),
            random.randrange(0, 600),
            10, 10
        ]
        self.color = (
            random.randrange(0, 256),
            random.randrange(0, 256),
            random.randrange(0, 256)
        )
    def move(self, dx, dy ):
        self.location[0] += dx
        self.location[1] += dy

def drawdot(dot):
    pygame.draw.rect(win, dot.color, dot.location)

def population(dots):
    for dot in dots:
        dot.move( random.randrange(-3,4), random.randrange(-3,4) )
        drawdot(dot)
...
2021-11-22 19:39:00

คำถามก็คือเรื่อง pygame. ดังนั้นโปรดใช้ pygame.Rect. คุณยังสามารถใช้ pygame.Color.
Rabbid76

ขอบคุณสำหรับเป็นอย่างเร็วการตอบสนองนี้ทำงาน wonderfully! ฉันพยายามจะคิดให้ออกยังไงที่ร้านขายของพวกเขาประจำตำแหน่งต่างหากดังนั้นมันดีมาก
WaffleKyle

คำตอบกับการสุ่มเลือกเมล็ดพันธ์เป็นมากกแห่งเหล่าอัศวินราชินีและอสรและเรียบง่าย มันสามารถใช้เมล็ดพันธ์แบบสุ่มค่าแทนที่จะเป็นยากที่คำสั่งซึ่งจะทำให้สิ่งที่ต้องการพฤติกรรม.
Zada Zorg

ฉันคิดว่าฉันเข้าใจว่าอะไรถามคำถามเป็นคนยังไง ทำให้การสุ่มเลือกเมล็ดพันธ์อยู่ในจุดฟังก์ชันจะแก้ปัญหาเหมือนไม่มีปัญหาอยู่เลยสินะ ในเวลาเดียวกันฉันเห็นด้วยนั่นมันไม่ใช่ที่เหมาะสมทั่วไปก็ลำบากพอแล้ว
Zada Zorg
0

คุณโทรเรียกฟังก์ชัน dot() ซึ่งคุณต้องกำหนด randomization. คุณควรจะแนะนำให้รู้จักเป็นชิ้นส่วนของรหัสนั่น randomizes งค่าของออกไปข้างนอก dot() ฟังก์ชันและร้านขายพวกเขาจะอยู่แยกตารางคู่ลำดับแล้วโทรเรียกฟังก์ชัน.

2021-11-22 19:33:27

เป็นคำตอบที่เหมาะสมจะแสดงรหัสแสนรู้ที่จะทำอย่างนี้
Tim Roberts

ฉันคิดว่ามันไม่สมเหตุสมผลเลยสำหรับเรื่องง่ายๆอย่าง แต่ถ้ามันเป็นกฎของชุมชน--ฉันจะเอามันเข้ามาในบัญชีผู้ใช้
Anna D.

จำได้ไหมว่าความคิดที่นี่คือการสร้างรายชื่อสินค้าของคำตอบสำหรับคนรุ่นหลัง พวกเราจะไม่ตอบรับคนคนเดียวพ่อตอบคำถามของเราที่ดูแลระยะยาวบริการ. ดังนั้นคำตอบจริงๆต้องเป็นที่สมบูรณ์ที่สุดเท่าที่จะทำได้ สิ่งที่เหมือนของช่อควรจะเป็นความเห็นเลิกประชุม.
Tim Roberts
0

รายละเอียดของคุณฟังดูเหมือนคุณไม่จำเป็นต้องพยายามที่จะเก็บผลลัพธ์มากที่คุณต้องการให้โพรเซสจะเป็นคนเดียวกันทุกครั้งแต่ยังคงบังเอิญหรอ? คุณสามารถใช้งานคำสั่งเมล็ดพันธ์?

import random
random.seed(10)
print(random.random())

เห็นส่วนเชื่อมโยงนี้สำหรับรายละเอียดลึกกว่านี้: เมล็ดพันธ์แบบสุ่ม

2021-11-22 19:39:52

ไม่คุณต้องเข้าใจผิดเกี่ยวกับปัญหา เขาไม่ต้องการเหมือนสุ่มลำดับกันและเวลา เขาต้องการที่ประจำตำแหน่ randomized ครั้งเดียว
Tim Roberts

นี่คือวิธีที่ดีที่จะแก้ปัญหาเดิม มันคือต้องการเพียงหนึ่งเส้นของรหัสแล้วก็ขอแนะนำบางอย่า deterministic ผลลัพธ์เดียวกันนั่นแหละ ซึ่งเป็นมาตรฐานเข้าไปในเกมซึ่งใช้ขั้นตอนถูกสร้างขึ้งทุกสรรพสิ่งมาสู่โลกใบนี้
Zada Zorg

@ZadaZorg มันไม่ใช่วิธีที่ดี. คุณต้องเข้าใจผิดเกี่ยวกับปัญหา เขาไม่ต้องการคนเดียวกันจุดทุกครั้งเกมส์แข่งกับใครแถวๆนี้ เขาต้องการที่แตกต่างกัตั้งค่าของตำแหน่งแต่เขาไม่อยากให้พวกเขาเปลี่ยนแปลงในทุกๆเรื่อยๆ นั่นคือพื้นฐานปัญหาแล้ว ที่ initialization จำเป็นต้องออกไปจากวง คุณตอบคำถามนั่นมันไม่ได้ถาม
Tim Roberts

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่