Ошибка Pygame: не удалось создать раздел DIB
Я только что загрузил pygame (модуль python) со страницы загрузки на его веб-сайте ( http://pygame.org/download.shtml) и выбрал пакет под названием "pygame-1.9.1.win32-py2.7.msi"., Когда я попытался выполнить программу, я получил эту ошибку:
Traceback (most recent call last):
File "C:\Users\kkkkllkk53\The Mish Mash Files\langtons ant.py", line 16, in <module>
windowSurface = pygame.display.set_mode((window_length, window_length), 0, 32)
error: Couldn't create DIB section
Я без понятия что это значит. Может кто-нибудь помочь мне?
Я использую 64-битный ноутбук Windows 7 HP. Рассматриваемая программа была попыткой визуализировать "Муравей Лэнгтона" и выглядит так:
import pygame, sys
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
colour_code = { True: red, False: white }
pygame.init()
mainClock = pygame.time.Clock()
cell_length = 10
num_cells_per_side = 10000
window_length = cell_length * num_cells_per_side
windowSurface = pygame.display.set_mode((window_length, window_length), 0, 32)
pygame.display.set_caption('Langtons ant')
windowSurface.fill(white)
def cell_2_rect(x, y):
rect_x = ( 5000 + x ) * cell_length
rect_y = ( 5000 + y ) * cell_length
return pygame.Rect( rect_x, rect_y )
ant_x = 0
ant_y = 0
ant_angle = 1
angles = { 0: [1, 0], 1: [0, -1], 2: [-1, 0], 3: [0, 1] }
row = [ False ] * num_cells_per_side
matrix = [ row.copy() ] * num_cells_per_side
def turn_ant():
turn = matrix[ant_y, ant_x]
if turn:
ant_angle += 1
else:
ant_angle -= 1
ant_angle = ant_angle % 4
def move_ant():
displacement = angles[ ant_angle ]
delta_x = displacement[0]
delta_y = displacement[1]
ant_x += delta_x
ant_y += delta_y
def update_square():
cell = matrix[ant_x][ant_y]
cell = not cell
pygame.draw.rect( windowSurface, colour_code[cell], cell_2_rect(ant_x, ant_y) )
def show_ant():
pygame.draw.rect( windowSurface, red, cell_2_rect(ant_x, ant_y) )
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
update_square()
turn_ant()
move_ant()
show_ant()
pygame.display.update()
mainClock.tick(100)
1 ответ
Вы пытаетесь создать слишком большой дисплей:
cell_length = 10
num_cells_per_side = 10000
window_length = cell_length * num_cells_per_side
windowSurface = pygame.display.set_mode((window_length, window_length), 0, 32)
равна: (100000,100000)
Попробуйте что-то вроде (800x600)
,
Если вам нужен больший мир, вы можете попробовать создать большую поверхность (не отображать), а затем перетащить на экран только то, что вам нужно.