• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

setundobuffer(None) 에러

21.08.12 10:04 작성 조회수 98

0

block.setundobuffer('None')이 없으면 에러가 일어나지 않는데, 이걸 추가하면 아래와 같은 에러가 나면서 프로그램이 멈춥니다.  구글링을 해도 해결방법을 찾을 수 없어서 질문드립니다.

소스코드는 동일하나, 만약을 위해 에러코드 위에 첨부하겠습니다. 미리 감사드립니다!

<소스>

import turtle as t

import random as r

import time

class Brick():

    def __init__(self):

        self.y=0

        self.x=6

        self.color=r.randint(1,6)

        

def draw_grid(block, grid):

    top=250

    left=-150

    colors=['black', 'red', 'blue', 'orange', 'yellow', 'green', 'purple', 'white']

    for y in range(len(grid)): # 행 탐색

        for x in range(len(grid[0])): # 열 탐색

            sc_x=left+(x*20) # 사각형 객체의 하나의 크기는 20*20

            sc_y=top-(y*20)

            block.goto(sc_x, sc_y)

            block.color(colors[grid[y][x]])

            block.stamp()

if __name__=='__main__':

    sc=t.Screen()

    sc.tracer(False) # 격자 빠르게 그림 

    sc.bgcolor("black")

    sc.setup(width=600, height=700)

    grid=[[0]*12 for _ in range(24)] # 게임 격자판

    for i in range(24): # 벽 만들기 

        grid[i].insert(0,7)

        grid[i].append(7)

    grid.append([7]*14)

    for y in range(23, 20, -1): # 아래 세줄 랜덤으로 색깔 채우기 

        for x in range(1,13):

            grid[y][x]=r.randint(1,6)

    block=t.Turtle()

    block.penup() # 이걸 안하면 움직일 때 그림을 그림

    block.speed(0)

    block.shape('square')

    block.setundobuffer(None) # 메모리 버퍼 누적 삭제 

    brick=Brick()

    grid[brick.y][brick.x]=brick.color

    draw_grid(block, grid)

    while True:

        sc.update() # 격자 계속 그리기 위함

        if grid[brick.y+1][brick.x]==0:

            grid[brick.y][brick.x]=0

            brick.y+=1

            grid[brick.y][brick.x]=brick.color

        for x in grid:

            print(x)

        print()

        draw_grid(block, grid)

        time.sleep(0.1)

    sc.mainloop() # 이게 없으면 창이 바로 꺼져버림 

<오류>

Traceback (most recent call last):

  File "D:\IT Study\Python\파이썬 알고리즘 문제풀이(코딩테스트 대비)\Block_Game.py", line 47, in <module>

    draw_grid(block, grid)

  File "D:\IT Study\Python\파이썬 알고리즘 문제풀이(코딩테스트 대비)\Block_Game.py", line 22, in draw_grid

    block.stamp()

  File "C:\Users\modes\AppData\Local\Programs\Python\Python39\lib\turtle.py", line 3077, in stamp

    self.undobuffer.push(("stamp", stitem))

AttributeError: 'NoneType' object has no attribute 'push'

답변 1

답변을 작성해보세요.

0

안녕하세요^^

제가 드린 코드로 실행해 보세요. 제가 드린 코드로도 안된다면 저도 잘 모르겠습니다.