我試圖從pygame屏幕中的文本文件顯示遊戲說明。在這一點上,我已經編碼:如何從文本文件顯示文本到pygame屏幕上?
def instructions():
screen.fill(TEAL)
with open("pongInstructions.txt", encoding = 'utf-8') as f:
for line in f:
instructText = instructionsFont.render(line, True, WHITE)
screen.blit(instructText, ((400 - (instructText.get_width()/2)),(300 - (instructText.get_height()/2))))
pygame.display.update()
當我呼籲說明功能,什麼也沒有發生。有人有一個想法,爲什麼?任何幫助是極大的讚賞!
編輯:
#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()
我已將你的代碼合併到我的主代碼中,但它仍然不顯示。這可能是我放置代碼的地方存在的一個問題 - 就像我在一個單獨的文件中運行它時一樣完美。你介意檢查一下嗎?我在原始帖子中添加了一部分代碼作爲修改。非常感謝你的幫助! – Student
我看了你的代碼並編輯了我的初始答案,評論太長了,我試着在應用上述兩個修復程序後運行你的代碼,現在它似乎正在工作。 – Molex4
Ahah我確實調用了函數,但這只是我的代碼的一部分 - 具有指令功能的部分,這就是爲什麼它看起來不完整但非常感謝。不過,我的整個菜單都起作用,它只是指示部分,而不是。如果您想看到它,我已經添加了我的整個代碼,因爲它似乎仍然沒有提示說明。 – Student