因此,我在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()
在此先感謝您的幫助。
儘量只這樣的:'開放( 「rec_Scores.csv」, 「A」)爲f:' – Chirag
或只是讓'換行符=」「' –
剛* *看看問題**。有一個明顯缺失的字符。 – jonrsharpe