2017-06-27 33 views
-5

即時通訊尋找添加一個評分系統到我簡單的Python蛇遊戲,但我不太清楚如何解決它,想知道如果你們可以看看,即時通訊尋找使它,所以當你吃一個'蘋果'你得到1分,這將加在右上角。評分系統在蛇遊戲

from pygame.locals import * 
from random import randint 
import pygame 
import time 




class Apple: 
x = 0 
y = 0 
step = 44 

def __init__(self,x,y): 
    self.x = x * self.step 
    self.y = y * self.step 

def draw(self, surface, image): 
    surface.blit(image,(self.x, self.y)) 


class Player: 
x = [0] 
y = [0] 
step = 44 
direction = 0 
length = 3 

updateCountMax = 2 
updateCount = 0 

def __init__(self, length): 
    self.length = length 
    for i in range(0,2000): 
     self.x.append(-100) 
     self.y.append(-100) 


    # initial positions, no collision. 
    self.x[1] = 1*44 
    self.x[2] = 2*44 

#min x ∥x∥ 1 s.t.∥Ax−b∥ ∞ ≤δ. 

def update(self): 

    self.updateCount = self.updateCount + 1 
    if self.updateCount > self.updateCountMax: 

     # update previous positions 
     for i in range(self.length-1,0,-1): 
      self.x[i] = self.x[i-1] 
      self.y[i] = self.y[i-1] 

     # update position of head of snake 
     if self.direction == 0: 
      self.x[0] = self.x[0] + self.step 
     if self.direction == 1: 
      self.x[0] = self.x[0] - self.step 
     if self.direction == 2: 
      self.y[0] = self.y[0] - self.step 
     if self.direction == 3: 
      self.y[0] = self.y[0] + self.step 

     self.updateCount = 0 


def moveRight(self): 
    self.direction = 0 

def moveLeft(self): 
    self.direction = 1 

def moveUp(self): 
    self.direction = 2 

def moveDown(self): 
    self.direction = 3 

def draw(self, surface, image): 
    for i in range(0,self.length): 
     surface.blit(image,(self.x[i],self.y[i])) 

class Game: 
def isCollision(self,x1,y1,x2,y2,bsize): 
    if x1 >= x2 and x1 <= x2 + bsize: 
     if y1 >= y2 and y1 <= y2 + bsize: 
      return True 
    return False 

class App: 

windowWidth = 800 
windowHeight = 600 
player = 0 
apple = 0 


def __init__(self): 
    self._running = True 
    self._display_surf = None 
    self._image_surf = None 
    self._apple_surf = None 
    self.game = Game() 
    self.player = Player(3) 
    self.apple = Apple(5,5) 

def on_init(self): 
    pygame.init() 
    self._display_surf = pygame.display.set_mode ((self.windowWidth,self.windowHeight), pygame.HWSURFACE) 

    pygame.display.set_caption('Snake') 
    self._running = True 
    self._image_surf = pygame.image.load("block.jpg").convert() 
    self._apple_surf = pygame.image.load("apple.jpg").convert() 
    icon = pygame.image.load('apple.jpg') 
    pygame.display.set_icon(icon) 

def on_event(self, event): 
    if event.type == QUIT: 
     self._running = False 

def on_loop(self): 
    self.player.update() 
    score = 0 

    # does snake eat apple? 
    for i in range(0,self.player.length): 
     if self.game.isCollision(self.apple.x,self.apple.y,self.player.x [i], self.player.y[i],44): 
      self.apple.x = randint(2,9) * 44 
      self.apple.y = randint(2,9) * 44 
      self.player.length = self.player.length + 1 
      score += 1 
      print (score) 


    # does snake collide with itself? 
    for i in range(2,self.player.length): 
     if self.game.isCollision(self.player.x[0],self.player.y[0],self.player.x[i], self.player.y[i],40): 
      pygame.image.load("End.jpg").convert() 
      print("You lose! Collision: ") 
      print("x[0] (" + str(self.player.x[0]) + "," + str(self.player.y[0]) + ")") 
      print("x[" + str(i) + "] (" + str(self.player.x[i]) + "," + str (self.player.y[i]) + ")") 
      exit(0) 

# Capitalism is not sustainable for the future. 

    pass 

def on_render(self): 
    self._display_surf.fill((0,0,0)) 
    self.player.draw(self._display_surf, self._image_surf) 
    self.apple.draw(self._display_surf, self._apple_surf) 
    pygame.display.flip() 

def on_cleanup(self): 
    pygame.quit() 

def on_execute(self): 
    if self.on_init() == False: 
     self._running = False 

    while(self._running): 
     pygame.event.pump() 
     keys = pygame.key.get_pressed() 

     if (keys[K_RIGHT]): 
      self.player.moveRight() 

     if (keys[K_LEFT]): 
      self.player.moveLeft() 

     if (keys[K_UP]): 
      self.player.moveUp() 

     if (keys[K_DOWN]): 
      self.player.moveDown() 

     if (keys[K_ESCAPE]): 
      self._running = False 

     self.on_loop() 
     self.on_render() 

     time.sleep (50.0/1000.0); 
    self.on_cleanup() 

if __name__ == "__main__" : 
theApp = App() 
theApp.on_execute() 
+2

這就像有史以來最簡單的得分系統遊戲一樣。每次吃東西時只需添加一個。 –

+0

[我的Snake遊戲中的評分系統]可能的重複(https://stackoverflow.com/questions/44699924/scoring-system-in-my-snake-game) –

回答

1

裏面你on_loop方法,您使用的是循環來檢查碰撞之前設定分數等於0。因此,當您在中調用此方法時,一遍又一遍地循環播放,它會一直將分數設置爲0,然後才能通過吃蘋果爲其添加點。