2017-02-23 103 views
-1

因此,我在python中製作了一個空間入侵者遊戲,遊戲將獲取玩家已經獲得的分數並將其添加到csv文件中。我的CSV文件的代碼是:在Python中添加csv文件

col = pygame.sprite.spritecollideany(player, mobs) 
if col: 
    with open("rec_Scores.csv", "a", newline" ") as f: 
     w = csv.writer(f, dilimiter = ",") 
     for i in range(len(score)): 
      w.writerow(name[i], score[i]]) 
    crashed = True 

但是,我得到的錯誤:

File "C:\Users\Harry\Desktop\Desktop\Computing Project\Galaxian.py", line 162 
    with open("rec_Scores.csv", "a", newline" ") as f: 
              ^
SyntaxError: invalid syntax 

我真的堅持這個問題,我不知道如何解決它。任何幫助將非常感激。這裏是我的代碼,因爲我可能以完全愚蠢的方式去做這件事:

import pygame 
import random 
import sys 
import csv 

# --- constants --- (UPPER_CASE names) 

WHITE = (255, 255, 255) 
BLACK = (0, 0, 0) 
RED = (255, 0, 0) 
GREEN = (0, 255, 0) 
BLUE = (0, 0, 255) 
ORANGE = (255, 255, 0) 
YELLOW = (0, 255, 255) 

DISPLAY_WIDTH = 720 
DISPLAY_HEIGHT = 720 # sets res for the screen 

FPS = 60 

# --- classes --- (CamelCase names) 

class Player(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("images\\user1.gif").convert() 
     self.image = pygame.transform.scale(self.image, (50, 50)) 
     self.rect = self.image.get_rect() 
     self.speed_x = 0 

    def update(self): 
     self.speed_x = 0 
     keystate = pygame.key.get_pressed() 
     if keystate[pygame.K_LEFT]: 
      self.speed_x = -10 
     if keystate[pygame.K_RIGHT]: 
      self.speed_x = 10 
     self.rect.x += self.speed_x 
     if self.rect.right > DISPLAY_WIDTH: 
      self.rect.right = DISPLAY_WIDTH 
     if self.rect.left < 0: 
      self.rect.left = 0 

    def shoot(self): 
     bullet = Bullet(self.rect.centerx, self.rect.top) 
     all_sprites.add(bullet) 
     bullet_group.add(bullet) 

class Mob(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.speed_y = random.randrange(5, 11) 
     self.image = pygame.image.load("images\\enemy1.gif").convert() 
     self.image = pygame.transform.scale(self.image, (50, 50)) 
     self.rect = self.image.get_rect() 
     self.speed_x = 0 
     self.rect.x = random.randrange(0, DISPLAY_WIDTH - self.rect.width) 
     self.rect.y = random.randrange(-500, -40) 
     self.speedy = random.randrange(5, 11) 

    def update(self): 
     self.rect.y += self.speedy 
     if self.rect.top > DISPLAY_HEIGHT + 10: 
      self.rect.x = random.randrange(0, DISPLAY_WIDTH - self.rect.width) 
      self.rect.y = random.randrange(-500, -40) 


class Bullet(pygame.sprite.Sprite): 
    def __init__(self, x, y): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("images\\laser1.gif").convert() # sets the laser to be the image laser1.gif 
     self.image = pygame.transform.scale(self.image, (15, 25)) # trasforms the size to fit the screen 
     self.rect = self.image.get_rect() # sets hit box up, will fit around the image 
     self.rect.bottom = y 
     self.rect.centerx = x 
     self.speed_y = -30 

    def update(self): 
     self.rect.y += self.speed_y 
     if self.rect.bottom < 0: 
      self.kill() 
# --- functions --- (lower_case names) 

# --- main --- (lower_case names) 

score =0 
name = raw_input("Enter your name: ") 
# - init - 

pygame.init() 
pygame.mixer.init() 

display = pygame.display.set_mode((DISPLAY_WIDTH, DISPLAY_HEIGHT)) 
display_rect = display.get_rect() 

# - objects and groups - 

all_sprites = pygame.sprite.Group() # creates class that all sprites will be in 
mobs = pygame.sprite.Group() # creates class that all mobs will be stored in 
bullet_group = pygame.sprite.Group() # creates class that all bullets will be stored in 
player = Player() # assigns the player variable to the player class 
player.rect.center = ((DISPLAY_WIDTH/2), DISPLAY_HEIGHT/1.2) # sets the player to spawn at the bottom and in the middle of the screen 
all_sprites.add(player) # adds player to the all_sprites group 

for z in range(12): # spawns 13 enemies 
    mob = Mob() 
    mobs.add(mob) 
    all_sprites.add(mob) 

# - other - 

pygame.mixer.music.load("audio\\soundtrack.mp3") 
pygame.mixer.music.play(-1) # sets music to play in an infinite loop 
pygame.mixer.music.set_volume(0.2) 

# - mainloop - 
crashed = False 
clock = pygame.time.Clock() 

while not crashed: 

    # - events - 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      crashed = True 

     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LCTRL: 
       player.shoot() 
     print(event) 

    # - updates (without draws) - 

    all_sprites.update() # updates sprite positions without drawing them onto the screen 

    # - draws (without updates) - 

    background = pygame.image.load("images\\background.jpg") # assigns the picture to a variable called background 
    background = pygame.transform.scale(background, (DISPLAY_WIDTH, DISPLAY_HEIGHT)) # streches the picture to fit the screen 

    display.blit(background, (0, 0)) # displays the background image 

    all_sprites.draw(display) # draws all sprites onto the screen 

    font = pygame.font.SysFont("monospace", 15) 
    text = font.render("Score: " + str(score), True, BLACK) 
    display.blit(text, (0, 0)) 

    pygame.display.update() # updates display 
    # - Checks for a hit - 

    col = pygame.sprite.groupcollide(mobs, bullet_group, True, True) 
    if col: # if col = true then 
     mob = Mob() # spawns new mob 
     mobs.add(mob) 
     all_sprites.add(mob) 
     score += 10 

    # - checks for a collision - 
    col = pygame.sprite.spritecollideany(player, mobs) 
    if col: 
     with open("rec_Scores.csv", "a", newline" ") as f: 
      w = csv.writer(f, dilimiter = ",") 
      for i in range(len(score)): 
       w.writerow(name[i], score[i]]) 
     crashed = True 

    # - FPS - 

    clock.tick(FPS) # built in function to make the program stay below specified frame per second 

# - end - 
pygame.quit() 

在此先感謝您的幫助。

+0

儘量只這樣的:'開放( 「rec_Scores.csv」, 「A」)爲f:' – Chirag

+0

或只是讓'換行符=」「' –

+0

剛* *看看問題**。有一個明顯缺失的字符。 – jonrsharpe

回答

1

with open("rec_Scores.csv", "a", newline" ") as f:

應該是:

with open("rec_Scores.csv", "a") as f:

delimiter被誤拼爲dilimiter但無論如何不需要。

f.writerow參數不是你想要的。

下一次嘗試making a working reproducer,其中包含需要工作的所有代碼位,包括導入語句。

實際工作版本:

import csv 
name=['foo','bar'] 
score=[12345,54321] 
with open("rec_Scores.csv", "a") as f: 
    w = csv.writer(f) 
    for i in range(len(score)): 
     w.writerow([str(name[i]),str(score[i])]) 
+0

已經解決了這個問題,非常感謝你 –