蛇游戏中的分数系统

时间:2017-06-27 10:27:36

标签: php python pygame point

我希望在我简单的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()

1 个答案:

答案 0 :(得分:1)

on_loop 方法内部,在使用 for 循环检查冲突之前,您将分数设置为0。因此,当您在中调用此方法而循环时,它会继续将分数设置为0,然后才能通过吃苹果添加一个点。