Ich versuche ein Spiel in Pygame zu machen, aber ich bekomme zwei Bugs.Warum steigt die Punktzahl in Pygame abrupt?
Bug 1
Meine Punktzahl abrupt im Spiel, wo mein Zustand nur 1 Punkt zu einer Zeit zu erhöhen. Mein Code Punktzahl zu erhöhen ist:
if thing_starty >display_height:
thing_stary = 0-thing_height
thing_startx= random.randrange(0,display_width)
dodged += 1
thing_speed += 1
thing_width += (dodged * 1.2)
Hier wichen meine Punktzahl ist, sollte es durch ein jedes Mal, wenn der Block geht aus dem Bildschirm erhöhen.
Bug 2
In meinem Spiel gibt es ein schwarzes Rechteck von oben folgen, aber die Sache ist, sobald es aus dem Bildschirm geht, ist es nicht back.Also kommt, nachdem der Block außerhalb des Bildschirms übergibt, ist das Spiel endet auch wenn keine Kollision vorliegt.
Der Code für den Block zurück zu kommen:
if thing_starty >display_height: #Check if block is there in the screen or not
thing_stary = 0 - thing_height
thing_startx= random.randrange(0,display_width)
dodged += 1
thing_speed += 1
thing_width += (dodged * 1.2)
Voll Code:
import pygame
import time
import random
pygame.init()
#Colours
white = (255,255,255)
black = (0,0,0)
red = (255,0,0)
#Game Display
display_width = 1080
display_height = 720
gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('Eat It! ~ Snapnel Productions')
#Clock
clock = pygame.time.Clock()
FPS = 60
#Font Size
exsmallfont = pygame.font.SysFont("comicsansms", 17)
smallfont = pygame.font.SysFont("comicsansms", 25)
medfont = pygame.font.SysFont("comicsansms", 50)
largefont = pygame.font.SysFont("comicsansms", 80)
#Car
def car(x,y):
gameDisplay.blit(carimg,(x,y))
global x, y, x_change
carimg=pygame.image.load('food.png')
#With of the car(i.e food image)
car_width=10
#Things
def things(thingx,thingy,thingw,thingh,color):
pygame.draw.rect(gameDisplay,color,[thingx,thingy,thingw,thingh])
#Things doged
def things_dodged(count):
font = pygame.font.SysFont(None, 25)
text = font.render("Dodged: "+str(count), True, red)
gameDisplay.blit(text,(0,0))
#Starting Of the game
def game_intro():
intro = True
while intro:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key ==pygame.K_c:
intro = False
if event.key ==pygame.K_q:
pygame.quit()
quit()
gameDisplay.fill(black)
#Game Initial display message
message_to_screen("Dodge It!",
red,
-200,
size="large")
message_to_screen("Press 'C' to play the game or 'Q' to quit.",
white,
150,
size="small")
pygame.display.update()
clock.tick(15)
#Text Size
def text_objects(text,color, size):
if size=="small":
textSurface=smallfont.render(text, True ,color)
elif size=="medium":
textSurface=medfont.render(text, True ,color)
elif size=="large":
textSurface=largefont.render(text, True ,color)
return textSurface,textSurface.get_rect()
#Message to screen
def message_to_screen(msg,color,y_displace=0,size="small"):
textSurf,textRect=text_objects(msg,color,size)
textRect.center = (display_width/2),(display_height/2)+y_displace
gameDisplay.blit(textSurf,textRect)
#The Game run up
def runGame():
#global x,y, x_change
gameExit = False
gameOver = False
x=(display_width*0.45)
y=(display_height*0.48)
x_change =0
#To count score
thingCount=1
dodged=0
#Block Initial Size
thing_startx = random.randrange(0,display_width)
thing_starty = -600
thing_speed = 7
thing_width = 100
thing_height = 100
while not gameExit:
while gameOver == True:
#Game Over message
gameDisplay.fill(white)
message_to_screen("Game over",
red,
y_displace=-50,
size="large")
message_to_screen("Press C to play again or Q to quit.",
red,
y_displace=50,
size="medium")
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
gameExit = True
gameOver = False
if event.key == pygame.K_c:
gameLoop()
#Game Controls
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change = -5
elif event.key == pygame.K_RIGHT:
x_change = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_change=0
x += x_change
gameDisplay.fill(white)
things(thing_startx,thing_starty,thing_width,thing_height,black)
thing_starty+=thing_speed
car(x,y)
things_dodged(dodged)
if x>display_width-car_width or x<0:
gameOver = True
#Check if block is in the screen
if thing_starty >display_height:
thing_stary = 0 - thing_height
thing_startx= random.randrange(0,display_width)
dodged += 1
thing_speed += 1
thing_width += (dodged * 1.2)
#Check Collision with block
if y < thing_starty+thing_height:
print('y crossover')
if x > thing_startx and x < thing_startx + thing_width or x+car_width > thing_startx and x + car_width < thing_startx+thing_width:
print('x crossover')
gameOver = True
pygame.display.update()
#The game run up
def gameLoop():
clock.tick(FPS)
runGame()
pygame.quit()
quit()
game_intro()
gameLoop()
ist das Essen Bild.
Vielen Dank im Voraus Kollegen, wirklich, danke, auf diesen Fehler zu achten.
Können Sie sagen, meine, wie das Bild unten erhalten? Das will ich unten auf meinem Bildschirm. –
Ihr Bug 2-Code ist der gleiche wie Bug 1, können Sie ihn aktualisieren, um den Teil darzustellen, der schief läuft? –
Meine beiden Fehler sind erfolgreich gelöst, aber jetzt möchte ich, dass Essen Bild unter dem Bildschirm sein, das ist am unteren Rand, wie mache ich das? –