我做了一些游戏,但我仍然是新的制作游戏。我制作了这个RPG游戏,这个代码只是游戏的一部分。游戏对游戏的不同级别执行不同的Pygame文件,如代码的这一部分所示(这是用于随机战斗的):
if (mainCharacterCoordinates.colliderect(battlefield) and (keys_pressed[pygame.K_DOWN] or keys_pressed[pygame.K_UP] or keys_pressed[pygame.K_RIGHT] or keys_pressed[pygame.K_LEFT])):
f = open('x.txt', 'w')
f.write(str(x))
f.close()
f = open('y.txt', 'w')
f.write(str(y))
f.close()
execfile('battlefield.py')
Exit = True这是游戏的截图:

我对这段代码的关注在于我的编码方式是否有效。此刻,我最关心的是游戏中的两件事。我不确定我是否以正确的方式进行了冲突(它们仍然有效,但是在代码中它看起来很糟糕,如下所示)。我在主字符的左、右、上和底部创建了4个矩形,每个对象只有一个矩形,即对象的大小。在此之后,我告诉程序,如果有碰撞在左边,不要走左边和相同的其他三个方面的主要角色。如果有更好的制造碰撞的方法,是否可以给我一些提示?这样,“mainCharacter”就不能遍历一个对象。
if (keys_pressed[pygame.K_LEFT] and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates8) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates7) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates6) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates5) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates4) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates3) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates2) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates1) and not mainCharacterCoordinatesLeft.colliderect(crossCoordinates) and not mainCharacterCoordinatesLeft.colliderect(leftborder) and not mainCharacterCoordinatesLeft.colliderect(wellCoordinates) and not mainCharacterCoordinatesLeft.colliderect(trainCoordinates) and not mainCharacterCoordinatesLeft.colliderect(graveyardCoordinates)):
mainCharacterImage=pygame.image.load(mainCharacterLeft[counter])
counter = (counter + 1) % len(mainCharacterLeft)
x -= 2
CameraX -= 2
if (keys_pressed[pygame.K_RIGHT] and not mainCharacterCoordinatesRight.colliderect(treeCoordinates8) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates7) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates6) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates5) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates4) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates3) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates2) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates1) and not mainCharacterCoordinatesRight.colliderect(crossCoordinates) and not mainCharacterCoordinatesLeft.colliderect(rightborder) and not mainCharacterCoordinatesRight.colliderect(wellCoordinates) and not mainCharacterCoordinatesRight.colliderect(trainCoordinates) and not mainCharacterCoordinatesRight.colliderect(graveyardCoordinates)):
mainCharacterImage=pygame.image.load(mainCharacterRight[counter])
counter = (counter + 1) % len(mainCharacterRight)
x += 2
CameraX += 2
if (keys_pressed[pygame.K_UP] and not mainCharacterCoordinatesTop.colliderect(treeCoordinates8) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates7) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates6) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates5) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates4) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates3) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates2) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates1) and not mainCharacterCoordinatesTop.colliderect(crossCoordinates) and not mainCharacterCoordinatesTop.colliderect(topborder) and not mainCharacterCoordinatesTop.colliderect(wellCoordinates) and not mainCharacterCoordinatesTop.colliderect(trainCoordinates) and not mainCharacterCoordinatesTop.colliderect(graveyardCoordinates)):
mainCharacterImage=pygame.image.load(mainCharacterBack[counter])
counter = (counter + 1) % len(mainCharacterBack)
y -= 2
CameraY -= 2
if (keys_pressed[pygame.K_DOWN] and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates8) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates7) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates6) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates5) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates4) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates3) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates2) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates1) and not mainCharacterCoordinatesBottom.colliderect(crossCoordinates) and not mainCharacterCoordinatesBottom.colliderect(bottomborder) and not mainCharacterCoordinatesBottom.colliderect(wellCoordinates)and not mainCharacterCoordinatesBottom.colliderect(trainCoordinates) and not mainCharacterCoordinatesBottom.colliderect(graveyardCoordinates)):
mainCharacterImage=pygame.image.load(mainCharacterFront[counter])
counter = (counter + 1) % len(mainCharacterFront)
y += 2
CameraY += 2第二个问题是我是否应该为静止物体创建函数。例如,在这个时候,我有:
crossImage1 = pygame.image.load('cross.png')
gameDisplay.blit(crossImage1,( 680 - CameraX , 300 - CameraY))我是否应该像下面看到的那样,将这些转换成像“mainCharacter”这样的函数?
def mainCharacter(x,y,CameraX,CameraY):
gameDisplay.blit(mainCharacterImage,(x - CameraX,y - CameraY))
mainCharacter(x,y,CameraX,CameraY)还是应该保留只用于移动对象的函数?
我也是新问有关我的代码问题,所以请在评论中,如果你觉得我的问题太混乱,无法回答。
这是我的全部代码:
import pygame
import random
pygame.init()
gameDisplay = pygame.display.set_mode((800,600))
pygame.display.set_caption("No Name")
clock = pygame.time.Clock()
pygame.key.set_repeat(1, 1)
pygame.mixer.music.load('09 Terras Theme (Final Fantasy VI).mp3')
pygame.mixer.music.play(-1)
Background = pygame.image.load('desert.png')
wellImage = pygame.image.load('well.png')
trainbottomImage = pygame.image.load('trainbottom.png')
traintopImage = pygame.image.load('traintop.png')
mainCharacterImage = pygame.image.load('main character (front).png')
crossImage1 = pygame.image.load('cross.png')
crossImage2 = pygame.image.load('cross.png')
crossImage3 = pygame.image.load('cross.png')
crossImage4 = pygame.image.load('cross.png')
crossImage5 = pygame.image.load('cross.png')
crossImage6 = pygame.image.load('cross.png')
crossImage7 = pygame.image.load('cross.png')
crossImage8 = pygame.image.load('cross.png')
treebottomImage1 = pygame.image.load('bottomtree.png')
treebottomImage2 = pygame.image.load('bottomtree.png')
treebottomImage3 = pygame.image.load('bottomtree.png')
treebottomImage4 = pygame.image.load('bottomtree.png')
treebottomImage5 = pygame.image.load('bottomtree.png')
treebottomImage6 = pygame.image.load('bottomtree.png')
treebottomImage7 = pygame.image.load('bottomtree.png')
treebottomImage8 = pygame.image.load('bottomtree.png')
treetopImage1 = pygame.image.load('toptree.png')
treetopImage2 = pygame.image.load('toptree.png')
treetopImage3 = pygame.image.load('toptree.png')
treetopImage4 = pygame.image.load('toptree.png')
treetopImage5 = pygame.image.load('toptree.png')
treetopImage6 = pygame.image.load('toptree.png')
treetopImage7 = pygame.image.load('toptree.png')
treetopImage8 = pygame.image.load('toptree.png')
graveyard = pygame.image.load('graveyard front.png')
CameraX = 0
CameraY = 0
x = 626
y = 384
counter = 0
f = open('x.txt')
x = int(f.readline())
f = open('y.txt')
y = int(f.readline())
CameraX = x-400
CameraY = y-300
def mainCharacter(x,y,CameraX,CameraY):
gameDisplay.blit(mainCharacterImage,(x - CameraX,y - CameraY))
Exit = False
while (Exit == False):
for event in pygame.event.get():
if event.type == pygame.QUIT:
Exit = True
mainCharacterImage = pygame.image.load('main character (front).png')
mainCharacterLeft = ['main character (left-left leg).png','main character (left-left leg).png','main character (left-left leg).png','main character (left-left leg).png','main character (left).png','main character (left).png','main character (left).png','main character (left).png','main character (left-right leg).png','main character (left-right leg).png','main character (left-right leg).png','main character (left-right leg).png']
mainCharacterRight = ['main character (right-left leg).png','main character (right-left leg).png','main character (right-left leg).png','main character (right-left leg).png','main character (right).png','main character (right).png','main character (right).png','main character (right).png','main character (right-right leg).png','main character (right-right leg).png','main character (right-right leg).png','main character (right-right leg).png']
mainCharacterBack = ['main character (back-left leg).png','main character (back-left leg).png','main character (back-left leg).png','main character (back-left leg).png','main character (back).png','main character (back).png','main character (back).png','main character (back).png','main character (back-right leg).png','main character (back-right leg).png','main character (back-right leg).png','main character (back-right leg).png']
mainCharacterFront = ['main character (front-left leg).png','main character (front-left leg).png','main character (front-left leg).png','main character (front-left leg).png','main character (front).png','main character (front).png','main character (front).png','main character (front).png','main character (front-right leg).png','main character (front-right leg).png','main character (front-right leg).png','main character (front-right leg).png']
keys_pressed = pygame.key.get_pressed()
mainCharacterCoordinates = pygame.Rect((x,y),(x+30,y+30))
wellCoordinates = pygame.Rect((0,600),(33,34))
trainCoordinates = pygame.Rect((-1000,20),(2000,54))
crossCoordinates = pygame.Rect((680,300),(80,180))
mainCharacterCoordinatesLeft = pygame.Rect((x,y+27),(1,5))
mainCharacterCoordinatesRight = pygame.Rect((x+28,y+27),(1,5))
mainCharacterCoordinatesTop = pygame.Rect((x+2,y+20),(26,5))
mainCharacterCoordinatesBottom = pygame.Rect((x+2,y+27),(26,7))
leftborder = pygame.Rect((-1200,-2000),(10,6000))
rightborder = pygame.Rect((800,-2000),(10,6000))
topborder = pygame.Rect((-1200,-200),(6000,10))
bottomborder = pygame.Rect((-1200,800),(6000,10))
treeCoordinates1 = pygame.Rect((-1200,300),(30,31))
treeCoordinates2 = pygame.Rect((-800,500),(30,31))
treeCoordinates3 = pygame.Rect((-400,400),(30,31))
treeCoordinates4 = pygame.Rect((-600,400),(30,31))
treeCoordinates5 = pygame.Rect((100,300),(30,31))
treeCoordinates6 = pygame.Rect((500,600),(30,31))
treeCoordinates7 = pygame.Rect((-1000,500),(30,31))
treeCoordinates8 = pygame.Rect((-300,700),(30,31))
graveyardCoordinates = pygame.Rect((630,350),(30,31))
if (keys_pressed[pygame.K_LEFT] and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates8) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates7) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates6) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates5) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates4) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates3) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates2) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates1) and not mainCharacterCoordinatesLeft.colliderect(crossCoordinates) and not mainCharacterCoordinatesLeft.colliderect(leftborder) and not mainCharacterCoordinatesLeft.colliderect(wellCoordinates) and not mainCharacterCoordinatesLeft.colliderect(trainCoordinates) and not mainCharacterCoordinatesLeft.colliderect(graveyardCoordinates)):
mainCharacterImage=pygame.image.load(mainCharacterLeft[counter])
counter = (counter + 1) % len(mainCharacterLeft)
x -= 2
CameraX -= 2
if (keys_pressed[pygame.K_RIGHT] and not mainCharacterCoordinatesRight.colliderect(treeCoordinates8) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates7) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates6) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates5) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates4) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates3) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates2) and not mainCharacterCoordinatesRight.colliderect(treeCoordinates1) and not mainCharacterCoordinatesRight.colliderect(crossCoordinates) and not mainCharacterCoordinatesLeft.colliderect(rightborder) and not mainCharacterCoordinatesRight.colliderect(wellCoordinates) and not mainCharacterCoordinatesRight.colliderect(trainCoordinates) and not mainCharacterCoordinatesRight.colliderect(graveyardCoordinates)):
mainCharacterImage=pygame.image.load(mainCharacterRight[counter])
counter = (counter + 1) % len(mainCharacterRight)
x += 2
CameraX += 2
if (keys_pressed[pygame.K_UP] and not mainCharacterCoordinatesTop.colliderect(treeCoordinates8) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates7) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates6) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates5) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates4) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates3) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates2) and not mainCharacterCoordinatesTop.colliderect(treeCoordinates1) and not mainCharacterCoordinatesTop.colliderect(crossCoordinates) and not mainCharacterCoordinatesTop.colliderect(topborder) and not mainCharacterCoordinatesTop.colliderect(wellCoordinates) and not mainCharacterCoordinatesTop.colliderect(trainCoordinates) and not mainCharacterCoordinatesTop.colliderect(graveyardCoordinates)):
mainCharacterImage=pygame.image.load(mainCharacterBack[counter])
counter = (counter + 1) % len(mainCharacterBack)
y -= 2
CameraY -= 2
if (keys_pressed[pygame.K_DOWN] and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates8) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates7) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates6) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates5) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates4) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates3) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates2) and not mainCharacterCoordinatesBottom.colliderect(treeCoordinates1) and not mainCharacterCoordinatesBottom.colliderect(crossCoordinates) and not mainCharacterCoordinatesBottom.colliderect(bottomborder) and not mainCharacterCoordinatesBottom.colliderect(wellCoordinates)and not mainCharacterCoordinatesBottom.colliderect(trainCoordinates) and not mainCharacterCoordinatesBottom.colliderect(graveyardCoordinates)):
mainCharacterImage=pygame.image.load(mainCharacterFront[counter])
counter = (counter + 1) % len(mainCharacterFront)
y += 2
CameraY += 2
a = random.randrange(-3000,4000)
b = random.randrange(-2000,3000)
battlefield = pygame.Rect((a,b),(10,10))
if (mainCharacterCoordinates.colliderect(battlefield) and (keys_pressed[pygame.K_DOWN] or keys_pressed[pygame.K_UP] or keys_pressed[pygame.K_RIGHT] or keys_pressed[pygame.K_LEFT])):
f = open('x.txt', 'w')
f.write(str(x))
f.close()
f = open('y.txt', 'w')
f.write(str(y))
f.close()
execfile('battlefield.py')
Exit = True
if (x <= 630 and):
graveyard = pygame.image.load('graveyard left.png')
if (x >= 660 and):
graveyard = pygame.image.load('graveyard right.png')
if(y <= 350 and ):
graveyard = pygame.image.load('graveyard back.png')
if(y >= 380 and ):
graveyard = pygame.image.load('graveyard front.png')
gameDisplay.blit(Background,(-2000 - CameraX, -600 - CameraY))
gameDisplay.blit(trainbottomImage,(-1000 - CameraX ,25 - CameraY))
gameDisplay.blit(wellImage,(0 - CameraX , 600 - CameraY))
gameDisplay.blit(treebottomImage1,( -1200 - CameraX , 300 - CameraY))
gameDisplay.blit(treebottomImage2,( -800 - CameraX , 500 - CameraY))
gameDisplay.blit(treebottomImage3,( -400 - CameraX , 400 - CameraY))
gameDisplay.blit(treebottomImage4,( -600 - CameraX , 400 - CameraY))
gameDisplay.blit(treebottomImage5,( 100 - CameraX , 300 - CameraY))
gameDisplay.blit(treebottomImage6,( 500 - CameraX , 600 - CameraY))
gameDisplay.blit(treebottomImage7,( -1000 - CameraX , 500 - CameraY))
gameDisplay.blit(treebottomImage8,( -300 - CameraX , 700 - CameraY))
gameDisplay.blit(crossImage1,( 680 - CameraX , 300 - CameraY))
gameDisplay.blit(crossImage2,( 680 - CameraX , 350 - CameraY))
gameDisplay.blit(crossImage3,( 680 - CameraX , 400 - CameraY))
gameDisplay.blit(crossImage4,( 680 - CameraX , 450 - CameraY))
gameDisplay.blit(crossImage5,( 730 - CameraX , 300 - CameraY))
gameDisplay.blit(crossImage6,( 730 - CameraX , 350 - CameraY))
gameDisplay.blit(crossImage7,( 730 - CameraX , 400 - CameraY))
gameDisplay.blit(crossImage8,( 730 - CameraX , 450 - CameraY))
gameDisplay.blit(graveyard,(630 - CameraX , 350 - CameraY))
mainCharacter(x,y,CameraX,CameraY)
gameDisplay.blit(treetopImage1,( -1200 - CameraX , 269 - CameraY))
gameDisplay.blit(treetopImage2,( -800 - CameraX , 469 - CameraY))
gameDisplay.blit(treetopImage3,( -400 - CameraX , 369 - CameraY))
gameDisplay.blit(treetopImage4,( -600 - CameraX , 369 - CameraY))
gameDisplay.blit(treetopImage5,( 100 - CameraX , 269 - CameraY))
gameDisplay.blit(treetopImage6,( 500 - CameraX , 569 - CameraY))
gameDisplay.blit(treetopImage7,( -1000 - CameraX , 469 - CameraY))
gameDisplay.blit(treetopImage8,( -300 - CameraX , 669 - CameraY))
gameDisplay.blit(traintopImage,(-1000 - CameraX ,-7 - CameraY))
pygame.display.update()
clock.tick(60)
pygame.quit()
quit()发布于 2016-02-03 04:53:06
您应该始终关闭您打开的任何文件。您可以通过使用上下文管理器来保证这一点。
with open("some_file_name") as f:
x = int(f.readline())这是一种安全(且干净)的方法,可以保证文件被关闭,无论在with块中发生了什么。
发布于 2016-02-03 00:30:11
欢迎来到这里!
首先,你有很多图像的vars。考虑使用图像列表,例如:
CROSS_IMAGE_FILENAME = ['cross.png'] * 8 # or different list
crossImages = [pygame.image.load(filename) for filename in CROSS_IMAGE_FILENAME]相机和当前位置应该分组为Points或其他什么东西,所以不用SomethingX和SomethingY,而是something.x和something.y
mainCharacter更好地命名为drawMainCharacter。在这里用动词作为函数名比较好。
Exit == False条件可以像not Exit那样写入
您真的想要读取主字符(前面).png每一个循环迭代吗?
使用列表而不是很多类似命名的变量。您的vars正是您必须写这么长的条件的原因:
if (keys_pressed[pygame.K_LEFT] and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates8) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates7) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates6) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates5) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates4) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates3) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates2) and not mainCharacterCoordinatesLeft.colliderect(treeCoordinates1) and not mainCharacterCoordinatesLeft.colliderect(crossCoordinates) and not mainCharacterCoordinatesLeft.colliderect(leftborder) and not mainCharacterCoordinatesLeft.colliderect(wellCoordinates) and not mainCharacterCoordinatesLeft.colliderect(trainCoordinates) and not mainCharacterCoordinatesLeft.colliderect(graveyardCoordinates)):可以写成这样的东西:
if keys_pressed[pygame.K_LEFT] not any(mainCharacterCoordinatesLeft.colliderect(obj) for obj in objects):其中的对象是所有游戏中的对象的列表,比如树和房子。
所有blits都应该移动到单独的函数,比如drawScene。
https://codereview.stackexchange.com/questions/118703
复制相似问题