Ich versuche, Anweisungen für ein Spiel aus einer Textdatei in einem Pygame-Bildschirm anzuzeigen. An dieser Stelle habe ich folgendes codiert:Wie zeige ich Text aus einer Textdatei auf einem Pygame-Bildschirm an?
Wenn ich die Instruktionsfunktion anrufe, passiert gar nichts. Hat jemand eine Idee, warum? Jede Hilfe wird sehr geschätzt!
EDIT:
#Imports and Initialize Pygame Screen
import pygame
import sys
import time
import random
import codecs
pygame.init()
screenSize = (800,600)
screen = pygame.display.set_mode((screenSize),0)
pygame.display.set_caption("Tasnim's Pong")
instructionsFile = [line.strip('\n')
for line in open('pongInstructions.txt', 'r', encoding = 'utf-8').readlines()]
font = pygame.font.SysFont("americantypewriter", 16)
def instructions(screen):
screen.fill(TEAL)
for n, line in enumerate(instructionsFile):
text = font.render(line, 1, WHITE)
text_rect = text.get_rect()
text_rect.centerx = screenSize[0]//2
text_rect.centery = n*25 + 50
screen.blit(text, text_rect)
pygame.display.update()
#Define Colours
WHITE = (255,255,255)
BLUE = (0,0,255)
BLACK = (0,0,0)
GRAY = (128, 128, 128)
MAROON = (128, 0, 0)
NAVYBLUE = (0, 0, 128)
OLIVE = (128, 128, 0)
PURPLE = (128, 0, 128)
TEAL = (0,128,128)
PINK = (226,132,164)
MUTEDBLUE = (155,182,203)
PLUM = (221,160,221)
#All Fonts
startscreenTitleFont = pygame.font.SysFont("americantypewriter", 120)
startscreenPlayerChoiceFont = pygame.font.SysFont("americantypewriter", 60)
startscreenQuitFont = ("americantypewriter", 60)
startscreenCreditsFont = ("americantypewriter", 60)
instructionsFont = pygame.font.SysFont("americantypewriter",60)
quitFont = pygame.font.SysFont("americantypewriter",60)
maingameP1ScoreFont = pygame.font.SysFont("americantypewriter",70)
maingameP2ScoreFont = pygame.font.SysFont("americantypewriter",70)
maingamePlayerOneFont = pygame.font.SysFont("americantypewriter",50)
maingamescoreFont = pygame.font.SysFont("americantypewriter",25, bold = True)
winnerFont = pygame.font.SysFont("americantypewriter",25)
instructionsFile = [line.strip('\n')
for line in open('pongInstructions.txt', 'r', encoding = 'utf-8').readlines()]
font = pygame.font.SysFont("americantypewriter", 16)
#Introduction Screen
def startscreen():
go = True
choice = 1
screen.fill(MUTEDBLUE)
pygame.display.update()
pongTitle = startscreenTitleFont.render("Pong", True, WHITE)
screen.blit(pongTitle,((400 - (pongTitle.get_width()/2)),0))
playerchoiceTitle = startscreenPlayerChoiceFont.render("Two Player Game", True, WHITE)
screen.blit(playerchoiceTitle, ((400 - (playerchoiceTitle.get_width()/2)),160))
playerchoice2Title = startscreenPlayerChoiceFont.render("One Player Game", True, WHITE)
screen.blit(playerchoice2Title, ((400 - (playerchoice2Title.get_width()/2)),275))
instructionsTitle = instructionsFont.render("How To Play", True, WHITE)
screen.blit(instructionsTitle, ((400 - (instructionsTitle.get_width()/2)),390))
quitgameTitle = quitFont.render("Quit", True, WHITE)
screen.blit(quitgameTitle, ((400 - (quitgameTitle.get_width()/2)),495))
pygame.display.update()
#Choices for Introduction Screen
while go:
for event in pygame.event.get():
if event.type == pygame.QUIT:
go = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
if choice != 1:
choice = choice - 1
elif event.key == pygame.K_DOWN:
if choice != 4:
choice = choice + 1
elif event.key == pygame.K_RETURN:
if choice == 1:
playTwoPlayer()
elif choice == 2:
playOnePlayer()
elif choice == 3:
instructions()
elif choice == 4:
quitGame()
if choice == 1:
screen.fill(MUTEDBLUE)
pongTitle = startscreenTitleFont.render("Pong", True, WHITE)
screen.blit(pongTitle,((400 - (pongTitle.get_width()/2)),0))
playerchoiceTitle = startscreenPlayerChoiceFont.render("Two Player Game", True, NAVYBLUE)
screen.blit(playerchoiceTitle, ((400 - (playerchoiceTitle.get_width()/2)),160))
playerchoice2Title = startscreenPlayerChoiceFont.render("One Player Game", True, WHITE)
screen.blit(playerchoice2Title, ((400 - (playerchoice2Title.get_width()/2)),275))
instructionsTitle = instructionsFont.render("How To Play", True, WHITE)
screen.blit(instructionsTitle, ((400 - (instructionsTitle.get_width()/2)),390))
quitgameTitle = quitFont.render("Quit", True, WHITE)
screen.blit(quitgameTitle, ((400 - (quitgameTitle.get_width()/2)),495))
elif choice == 2:
screen.fill(MUTEDBLUE)
pongTitle = startscreenTitleFont.render("Pong", True, WHITE)
screen.blit(pongTitle,((400 - (pongTitle.get_width()/2)),0))
playerchoiceTitle = startscreenPlayerChoiceFont.render("Two Player Game", True, WHITE)
screen.blit(playerchoiceTitle, ((400 - (playerchoiceTitle.get_width()/2)),160))
playerchoice2Title = startscreenPlayerChoiceFont.render("One Player Game", True, NAVYBLUE)
screen.blit(playerchoice2Title, ((400 - (playerchoice2Title.get_width()/2)),275))
instructionsTitle = instructionsFont.render("How To Play", True, WHITE)
screen.blit(instructionsTitle, ((400 - (instructionsTitle.get_width()/2)),390))
quitgameTitle = quitFont.render("Quit", True, WHITE)
screen.blit(quitgameTitle, ((400 - (quitgameTitle.get_width()/2)),495))
elif choice == 3:
screen.fill(MUTEDBLUE)
pongTitle = startscreenTitleFont.render("Pong", True, WHITE)
screen.blit(pongTitle,((400 - (pongTitle.get_width()/2)),0))
playerchoiceTitle = startscreenPlayerChoiceFont.render("Two Player Game", True, WHITE)
screen.blit(playerchoiceTitle, ((400 - (playerchoiceTitle.get_width()/2)),160))
playerchoice2Title = startscreenPlayerChoiceFont.render("One Player Game", True, WHITE)
screen.blit(playerchoice2Title, ((400 - (playerchoice2Title.get_width()/2)),275))
instructionsTitle = instructionsFont.render("How To Play", True, NAVYBLUE)
screen.blit(instructionsTitle, ((400 - (instructionsTitle.get_width()/2)),390))
quitgameTitle = quitFont.render("Quit", True, WHITE)
screen.blit(quitgameTitle, ((400 - (quitgameTitle.get_width()/2)),495))
if choice == 4:
screen.fill(MUTEDBLUE)
pongTitle = startscreenTitleFont.render("Pong", True, WHITE)
screen.blit(pongTitle,((400 - (pongTitle.get_width()/2)),0))
playerchoiceTitle = startscreenPlayerChoiceFont.render("Two Player Game", True, WHITE)
screen.blit(playerchoiceTitle, ((400 - (playerchoiceTitle.get_width()/2)),160))
playerchoice2Title = startscreenPlayerChoiceFont.render("One Player Game", True, WHITE)
screen.blit(playerchoice2Title, ((400 - (playerchoice2Title.get_width()/2)),275))
instructionsTitle = instructionsFont.render("How To Play", True, WHITE)
screen.blit(instructionsTitle, ((400 - (instructionsTitle.get_width()/2)),390))
quitgameTitle = quitFont.render("Quit", True, NAVYBLUE)
screen.blit(quitgameTitle, ((400 - (quitgameTitle.get_width()/2)),495))
pygame.display.update()
pygame.display.update()
#Two Player Game
def playTwoPlayer():
screen.fill(MUTEDBLUE)
play = True
startballSPACE = True
#Two Player Game- Set Variables
playeroneScore = 0
playertwoScore = 0
ballx = 400
bally = 350
balldx = 0
balldy = 0
xOne = 775
yOne = 275
xTwo = 0
yTwo = 275
dyOne = 0
dyTwo = 0
heightPaddleoneandtwo = 150
paddleheight = 150
go = True
while go:
if playeroneScore == 3:
winnerPlayerOne()
if playertwoScore == 3:
winnerPlayerTwo()
balldxdir = random.choice([-5,5])
balldydir = random.choice([-5,5])
for event in pygame.event.get():
if event.type == pygame.QUIT:
quitGame()
elif event.type == pygame.KEYDOWN:
#Controls for player one- Up and Down key
if event.key == pygame.K_UP:
dyOne = -10
directiony = 3
elif event.key == pygame.K_DOWN:
dyOne = 10
directiony = 4
#Controls for player two- W and S key
elif event.key == pygame.K_w:
dyTwo = -10
directionyTWO = 2
elif event.key == pygame.K_s:
dyTwo = 10
directionyTWO = 1
#Controls to quit
elif event.key == pygame.K_q:
startscreen()
#Controls to start game (press space bar)
elif startballSPACE == True:
if event.key == pygame.K_SPACE:
play = True
balldx = balldxdir
balldy = balldydir
startballSPACE = False
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
dyOne = 0
directiony = 0
elif event.key == pygame.K_w or event.key == pygame.K_s:
dyTwo = 0
directionyTWO = 0
screen.fill(MUTEDBLUE)
#Paddle Positioning
yOne = yOne + dyOne
yTwo =yTwo + dyTwo
#Screen Top and Bottom Collision Check
if yOne > (600 - heightPaddleoneandtwo) and directiony == 4:
dyOne = 0
yOne = (600 - heightPaddleoneandtwo)
if yOne < 100 and directiony == 3:
dyOne = 0
yOne = 100
if yTwo > (600 - heightPaddleoneandtwo) and directionyTWO == 1:
dyTwo = 0
yTwo = (600 - heightPaddleoneandtwo)
if yTwo < 100 and directionyTWO == 2:
dyTwo = 0
yTwo = 100
#Makes Ball Bounce in opposite direction
if play == True:
if ballx == xOne and bally <= (yOne + heightPaddleoneandtwo) and bally >= yOne:
balldx = -balldx
#Makes Paddle Shorter on collisions with ball (makes game tougher)
if heightPaddleoneandtwo >= 10:
heightPaddleoneandtwo = heightPaddleoneandtwo - 7
else:
heightPaddleoneandtwo = heightPaddleoneandtwo
#Makes Ball Bounce in opposite direction
elif bally >= 580:
balldy = -balldy
elif ballx == (xTwo + 25) and bally <= (yTwo + heightPaddleoneandtwo) and bally >= yTwo:
balldx = -balldx
#Makes Paddle Shorter on collisions with ball (makes game tougher)
if heightPaddleoneandtwo >= 10:
heightPaddleoneandtwo = heightPaddleoneandtwo - 7
else:
heightPaddleoneandtwo = heightPaddleoneandtwo
elif bally <= 110:
balldy = -balldy
elif ballx<0 or ballx>800:
#Adds score if ball passes paddle
if ballx>800:
playeroneScore = playeroneScore + 1
startballSPACE = True
elif ballx < 0:
startballSPACE = True
playertwoScore = playertwoScore + 1
ballx = 400
bally = 350
balldx = 0
balldy = 0
yOne = 275
y2Two = 275
heightPaddleoneandtwo = 150
play = False
ballx = ballx + balldx
bally = bally - balldy
#Draw all screen components
pygame.draw.rect(screen, WHITE,(xOne, yOne, 25, heightPaddleoneandtwo),0)
pygame.draw.rect(screen, WHITE,(xTwo, yTwo, 25, heightPaddleoneandtwo),0)
pygame.draw.circle (screen, WHITE, (ballx,bally), 10, 0)
textScore = maingamescoreFont.render("Score", True, WHITE)
screen.blit(textScore, (((800/2)-(textScore.get_width()/2),0)))
textPlayeroneScore = maingameP1ScoreFont.render(str(playeroneScore), True, WHITE)
screen.blit(textPlayeroneScore, (0,0))
textPlayertwoScore = maingameP2ScoreFont.render(str(playertwoScore), True, WHITE)
screen.blit(textPlayertwoScore, ((800 - textPlayertwoScore.get_width()),0))
pygame.draw.rect (screen, WHITE, (0,90,800,10),0)
pygame.draw.rect (screen, WHITE, (395,112,10,25),0)
pygame.draw.rect (screen, WHITE, (395,162,10,25),0)
pygame.draw.rect (screen, WHITE, (395,212,10,25),0)
pygame.draw.rect (screen, WHITE, (395,262,10,25),0)
pygame.draw.rect (screen, WHITE, (395,312,10,25),0)
pygame.draw.rect (screen, WHITE, (395,362,10,25),0)
pygame.draw.rect (screen, WHITE, (395,412,10,25),0)
pygame.draw.rect (screen, WHITE, (395,462,10,25),0)
pygame.draw.rect (screen, WHITE, (395,512,10,25),0)
pygame.draw.rect (screen, WHITE, (395,562,10,25),0)
pygame.draw.rect (screen, WHITE, (395,612,10,25),0)
pygame.draw.rect (screen, WHITE, (45,0,3,100),0)
pygame.draw.rect (screen, WHITE, (752,0,3,100),0)
playerOneText = maingamePlayerOneFont.render("Player 1", True, WHITE)
playerTwoText = maingamePlayerOneFont.render("Player 2", True, WHITE)
screen.blit(playerOneText, (70,15))
screen.blit(playerTwoText, (525,15))
pygame.display.update()
def instructions():
screen.fill(TEAL)
for n, line in enumerate(instructionsFile):
text = font.render(line, 1, WHITE)
text_rect = text.get_rect()
text_rect.centerx = screenSize[0]//2
text_rect.centery = n*25 + 50
screen.blit(text, text_rect)
pygame.display.update()
def winnerPlayerOne():
screen.fill(TEAL)
winnerP1Message = winnerFont.render("Congrats Player 1. You Win! Press 'c' to continue", True, WHITE)
screen.blit(winnerP1Message, ((400 - (winnerP1Message.get_width()/2)),(300 - (winnerP1Message.get_height()/2))))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
quitGame()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_c:
startscreen()
def winnerPlayerTwo():
screen.fill(TEAL)
winnerP2Message = winnerFont.render("Congrats Player 2. You Win! Press 'c' to continue", True, WHITE)
screen.blit(winnerP2Message, ((400 - (winnerP2Message.get_width()/2)),(300 - (winnerP2Message.get_height()/2))))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
quitGame()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_c:
startscreen()
def CPUwinner():
screen.fill(TEAL)
computerWinner = winnerFont.render("Better luck next time... The computer has won! Press 'c' to continue", True, WHITE)
screen.blit(computerWinner, ((400 - (computerWinner.get_width()/2)),(300 - (computerWinner.get_height()/2))))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
quitGame()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_c:
startscreen()
def quitGame():
pygame.quit()
sys.exit()
def playOnePlayer():
screen.fill(MUTEDBLUE)
play = True
startballSPACE = True
#One Player Game- Set Variables
playeroneScore = 0
playertwoScore = 0
ballx = 400
bally = 350
balldx = 0
balldy = 0
xOne = 775
yOne = 275
xTwo = 0
yTwo = 275
dyOne = 0
dyTwo = 0
heightPaddleoneandtwo = 150
paddleheight = 150
go = True
while go:
if playeroneScore == 3:
winnerPlayerOne()
if playertwoScore == 3:
CPUwinner()
balldxdir = random.choice([-5,5])
balldydir = random.choice([-5,5])
for event in pygame.event.get():
if event.type == pygame.QUIT:
quitGame()
elif event.type == pygame.KEYDOWN:
#Controls for player one- Up and Down key
if event.key == pygame.K_UP:
dyTwo = -10
directiony = 3
elif event.key == pygame.K_DOWN:
dyTwo = 10
directiony = 4
#Controls to quit
elif event.key == pygame.K_q:
startscreen()
#Controls to start game (press space bar)
elif startballSPACE == True:
if event.key == pygame.K_SPACE:
play = True
balldx = balldxdir
balldy = balldydir
startballSPACE = False
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
dyTwo = 0
directionyTWO = 0
screen.fill(MUTEDBLUE)
#Paddle Positioning
yTwo = yTwo + dyTwo
yOne = bally - (heightPaddleoneandtwo/2)
#Screen Top and Bottom Collision Check
if yOne > (600 - heightPaddleoneandtwo):
dyOne = 0
yOne = (600 - heightPaddleoneandtwo)
if yOne < 100:
dyOne = 0
yOne = 100
if yTwo > (600 - heightPaddleoneandtwo) and directiony == 4:
dyTwo = 0
yTwo = (600 - heightPaddleoneandtwo)
if yTwo < 100 and directiony == 3:
dyTwo = 0
yTwo = 100
#Makes Ball Bounce in opposite direction
if play == True:
if ballx == xOne and bally <= (yOne + heightPaddleoneandtwo) and bally >= yOne:
balldx = -balldx
#Makes Paddle Shorter on collisions with ball (makes game tougher)
if heightPaddleoneandtwo >= 10:
heightPaddleoneandtwo = heightPaddleoneandtwo - 7
else:
heightPaddleoneandtwo = heightPaddleoneandtwo
#Makes Ball Bounce in opposite direction
elif bally >= 580:
balldy = -balldy
elif ballx == (xTwo + 25) and bally <= (yTwo + heightPaddleoneandtwo) and bally >= yTwo:
balldx = -balldx
#Makes Paddle Shorter on collisions with ball (makes game tougher)
if heightPaddleoneandtwo >= 10:
heightPaddleoneandtwo = heightPaddleoneandtwo - 7
else:
heightPaddleoneandtwo = heightPaddleoneandtwo
elif bally <= 110:
balldy = -balldy
elif ballx<0 or ballx>800:
#Adds score if ball passes paddle
if ballx>800:
playeroneScore = playeroneScore + 1
startballSPACE = True
elif ballx < 0:
startballSPACE = True
playertwoScore = playertwoScore + 1
ballx = 400
bally = 350
balldx = 0
balldy = 0
yOne = 275
y2Two = 275
heightPaddleoneandtwo = 150
play = False
ballx = ballx + balldx
bally = bally - balldy
#Draw all screen components
pygame.draw.rect(screen, WHITE,(xOne, yOne, 25, heightPaddleoneandtwo),0)
pygame.draw.rect(screen, WHITE,(xTwo, yTwo, 25, heightPaddleoneandtwo),0)
pygame.draw.circle (screen, WHITE, (ballx,bally), 10, 0)
textScore = maingamescoreFont.render("Score", True, WHITE)
screen.blit(textScore, (((800/2)-(textScore.get_width()/2),0)))
textPlayeroneScore = maingameP1ScoreFont.render(str(playeroneScore), True, WHITE)
screen.blit(textPlayeroneScore, (0,0))
textPlayertwoScore = maingameP2ScoreFont.render(str(playertwoScore), True, WHITE)
screen.blit(textPlayertwoScore, ((800 - textPlayertwoScore.get_width()),0))
pygame.draw.rect (screen, WHITE, (0,90,800,10),0)
pygame.draw.rect (screen, WHITE, (395,112,10,25),0)
pygame.draw.rect (screen, WHITE, (395,162,10,25),0)
pygame.draw.rect (screen, WHITE, (395,212,10,25),0)
pygame.draw.rect (screen, WHITE, (395,262,10,25),0)
pygame.draw.rect (screen, WHITE, (395,312,10,25),0)
pygame.draw.rect (screen, WHITE, (395,362,10,25),0)
pygame.draw.rect (screen, WHITE, (395,412,10,25),0)
pygame.draw.rect (screen, WHITE, (395,462,10,25),0)
pygame.draw.rect (screen, WHITE, (395,512,10,25),0)
pygame.draw.rect (screen, WHITE, (395,562,10,25),0)
pygame.draw.rect (screen, WHITE, (395,612,10,25),0)
pygame.draw.rect (screen, WHITE, (45,0,3,100),0)
pygame.draw.rect (screen, WHITE, (752,0,3,100),0)
playerOneText = maingamePlayerOneFont.render("Player 1", True, WHITE)
playerTwoText = maingamePlayerOneFont.render("CPU", True, WHITE)
screen.blit(playerOneText, (70,15))
screen.blit(playerTwoText, (630,15))
pygame.display.update()
startscreen()
Ich habe deinen Code in meinen Hauptcode aufgenommen, er wird jedoch immer noch nicht angezeigt. Es kann ein Problem sein mit dem, wo ich den Code platziert habe - wie wenn ich es in einer separaten Datei ausführe funktioniert es perfekt. Würde es dir etwas ausmachen, es zu überprüfen? Ich habe einen Teil meines Codes als Bearbeitung in meinem ursprünglichen Beitrag hinzugefügt.Vielen Dank für deine Hilfe! – Student
Ich habe mir Ihren Code angesehen und meine erste Antwort bearbeitet, es war zu lang für einen Kommentar. Ich habe versucht, Ihren Code auszuführen, nachdem ich die beiden erwähnten Fixes angewendet habe, und es scheint jetzt zu funktionieren. – Molex4
Ahah ich rufe die Funktion, aber das ist nur ein Teil meines Codes - der Teil mit der Anleitung Funktion, weshalb es unvollständig aussieht, aber vielen Dank. Allerdings funktioniert mein gesamtes Menü, es ist einfach der Instruktionsbereich, der nicht funktioniert. Ich habe meinen gesamten Code hinzugefügt, wenn Sie ihn sehen möchten, da er die Anweisungen immer noch nicht aufruft. – Student