-2
여기가 소행성 게임의 소스 코드입니다. 나는이 튜토리얼을 http://comp4431.wordpress.com/2010/08/11/tut-wk-3-asteroids/ 에 가깝게 따라 다녔다. 화재와 같은 누락 된 물질 이외에 무엇이 잘못 되었나요? starmap을 제외하고는 아무 것도 표시하지 않습니다. BTW - 디스플레이가 메인 루프 내부에, 대신 뒤에해야 업데이트 할파이썬에서 소행성 게임 만들기 - 뭐가 잘못 되었나요?
import pygame, random, math
from pygame.locals import *
from math import *
WINFLAGS=0
SCREENRECT=Rect(0,0,800,600) #screen res
NSTARS=100
NASTEROIDS=10
#colors
BLACK=(0,0,0)
WHITE=(255,255,255)
YELLOW=(255,255,0)
TRANSPARENT=(1,2,3)
clock=pygame.time.Clock()
while True:
clock.tick(30)
class Player(pygame.sprite.Sprite):
color=YELLOW
thrust_value=1.0
turn_speed=5
max_speed=10.0
base_image=pygame.Surface((21,11))
base_image.fill(TRANSPARENT)
base_image.set_colorkey(TRANSPARENT)
pointlist=[(0,0),(0,10),(20,5)]
pygame.draw.polygon(base_image,color,pointlist)
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image=self.base_image.copy()
self.rect=self.image.get_rect(center=SCREENRECT.center)
self.vx=0
self.vy=0
self.angle=0
def update(self):
self.rect.move_ip(self.vx,self.vy)
self.wrap()
def wrap(self):
if (self.rect.center[0]<0):
self.rect.move_ip(SCREENRECT.width,0)
elif (self.rect.center[0]>=SCREENRECT.width):
self.rect.move_ip(-SCREENRECT.width,0)
if (self.rect.center[1]<0):
self.rect.move_ip(SCREENRECT.height,0)
elif (self.rect.center[1]>=SCREENRECT.height):
self.rect.move_ip(0,-SCREENRECT.height)
def thrust(self):
a=radians(self.angle)
self.vx+=self.thrust_value*cos(a)
self.vy+=self.thrust_value*sin(a)
vel=sqrt(self.vx*self.vx+self.vy*self.vy)
if (vel>self.max_speed):
self.vx=self.vx*self.max_speed/vel
self.vy=self.vy*self.max_speed/vel
def turn(self,direction):
self.angle+=self.turn_speed*direction
while (self.angle<0):
self.angle+=360
while (self.angle>=360):
self.angle-=360
self.image=pygame.transform.rotate(self.base_image,-self.angle)
self.rect=self.image.get_rect(center=self.rect.center)
def fire(self):
print 'fire'
class Asteroid(pygame.sprite.Sprite):
color=YELLOW
min_speed=2
max_speed=6
base_image = pygame.Surface((40,50))
base_image.fill(TRANSPARENT)
base_image.set_colorkey(TRANSPARENT)
pointlist=[(10,0),(30,0),(40,15),(35,25),(20,50),(5,50),(0,25)]
pygame.draw.polygon(base_image,color,pointlist)
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image=self.base_image.copy()
x=int(SCREENRECT.width*random.random())
y=int(SCREENRECT.height*random.random())
self.rect=self.image.get_rect(center=(x,y))
velocity=random.randint(self.min_speed, self.max_speed)
angle=2.0*pi*random.random()#radians
self.vx=cos(angle)*velocity
self.vy=sin(angle)*velocity
def update(self):
self.rect.move_ip(self.vx,self.vy)
self.wrap()
def wrap(self):
if (self.rect.center[0]<0):
self.rect.move_ip(SCREENRECT.width,0)
elif (self.rect.center[0]>=SCREENRECT.width):
self.rect.move_ip(-SCREENRECT.width,0)
if (self.rect.center[1]<0):
self.rect.move_ip(0,SCREENRECT.height)
elif (self.rect.center[1]>=SCREENRECT.height):
self.rect.move_ip(0,-SCREENRECT.height)
def main():
#init python
pygame.init()
#create window
screen=pygame.display.set_mode(SCREENRECT.size,WINFLAGS)
#starmap
background=pygame.Surface(SCREENRECT.size)
background.fill(BLACK)
for i in range(0,NSTARS):
x=random.randint(0,SCREENRECT.width-1)
y=random.randint(0,SCREENRECT.height-1)
pygame.draw.circle(background,WHITE,(x,y),0)
#blit to screen
screen.blit(background,(0,0))
pygame.display.update()
player=Player()
render=pygame.sprite.RenderUpdates()
render.add(player)
asteroids=pygame.sprite.Group()
for i in range(0,NASTEROIDS):
asteroid=Asteroid()
render.add(asteroid)
asteroids.add(asteroid)
while True:
for event in pygame.event.get():
if event.type == QUIT or \
(event.type == KEYDOWN and event.key == K_ESCAPE):
return
keystate=pygame.key.get_pressed()
if (keystate[K_UP]):
player.thrust()
direction=keystate[K_RIGHT]-keystate[K_LEFT]
if (direction !=0):
player.turn(direction)
if (keystate[K_SPACE]):
player.fire()
for asteroid in pygame.sprite.spritecollide(player,asteroids,False):
asteroid.kill()
render.update()
render.clear(screen,background)
dirty=render.draw(screen)
pygame.display.update(dirty)
#run main()
if __name__=="__main__": main()
가능하면 근처에서이 무한 루프 주어진 아무것도 편집해야 않습니다 놀랐어요 코드는 화면에 XYZ를 표시해야하지만 그렇지 않습니다. 여기에는 그 밖의 것은 수행하지 않는 코드 예제가 있습니다.) – Patashu
이것은이 사이트를 유용하게 사용하지 않습니다. "X에 문제가 있습니다."와 같은 질문을하고 접근법의 예를 제시 할 수 있지만 여기에 전체 프로젝트를 버리고 문제 해결을 요청하는 것은 당신을 멀게하지 않을 것입니다. – magi182