私は、私の個人的な Python プロジェクトのために、単純な (そう思った) スターフィールド アニメーションを書きました。ゲームが「遊べる」段階になったちょうどその頃、私は別のプロジェクトに着手することにしました。Windows/Ubuntu デュアルブートの実験。Windows/Ubuntu の実験の詳細は実際のページめくりですが、関連する問題は「なぜこのコードは Windows XP では問題なく動作するのに、Ubuntu 12.04 ではあらゆる種類のクラッシュを引き起こすのか」ということです。
このコードは、Pygame 1.9 を使用して Python 2.7 用に作成されました。
import pygame, random, sys
from pygame import *
pygame.init()
width = 400
height = 400
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
DISPLAYSURF = pygame.display.set_mode((width, height))
stars = 50
starfield = []
for i in range(stars):
x = random.randrange(0, width)
y = random.randrange(0, height)
starfield.append([x, y])
clock = pygame.time.Clock()
FPS = 60
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
DISPLAYSURF.fill(BLACK)
starCounter = 0
for star in starfield:
starCounter += 1
x, y = star
starDraw = pygame.PixelArray(DISPLAYSURF)
starDraw[x][y] = WHITE
del starDraw
#fake parallax scrolling effect
star[1] += 1
if starCounter % 3 == 1:
star[1] += 1
if starCounter % 5 == 1:
star[1] += 1
if star[1] > height:
star[0] = random.randrange(0, width)
star[1] = 0
最終的に、PixelArray のナンセンスを surface.set_at() に置き換え、PixelArray オブジェクトのインスタンス化に関連するすべてのコードを削除することで、これを解決しました。しかし、それはセグメンテーション違反 (Pygame パラシュートの種類) だけではありませんでした。あらゆる種類の奇妙なエラー メッセージが表示されました。gcclibrary に関するもの、malloc() に関するものなど。以前は IDLE などを使用していなかったことに注意してください。私はいつもコマンドラインやターミナルからすべてを実行しています。
私が経験していた種類のエラーは、必ずしも私には関係ありません。Ubuntuが喜んで彼らを指差して笑っている間、Windowsは彼らを黙らせるだけだったという事実はそうです。明らかに、これは PEBKAC の結果であるに違いありませんが、一体なぜ Windows がその情報を私から隠しているのでしょうか? そして、この議論の裏返しです。Ubuntuでのコーディングは、別の種類の悪い習慣を許しますか? Windows が特定の種類の segfault を黙らせる場合、Ubuntu は別のエラー セットをキャッチしますか? また、すべての主要な OS がキャッチするかどうかを決定する可能性のあるさまざまなグーフボール エラーすべてに注意する必要がありますか? 私はこれに約1年しか参加していないので、露出不足で気づいていない情報がたくさんあります.
つまり、PixelArray オブジェクトを作成する必要があると感じた場合に備えて、古いコードのエラーを表示したい場合は、それも気にしません。:)