在Python中合并两个程序的代码
我的问题有点复杂,我在脑海中反复思考,但我会尽量解释清楚。我有两个Python代码,一个是我用Python写的Mastermind游戏,另一个是用Pygame做的Mastermind游戏板。我想问的是:我该如何把这两个代码合并成一个,让游戏在Pygame中运行,而不是我通常看到的命令提示符窗口呢?
如果这听起来有点乱,我很抱歉,但这就是我的问题。我只是想把我的Python代码放到Pygame的代码里,让游戏像应该的那样运行。
这是我游戏的代码:
import random
class InvalidMove(Exception):pass
class Game:
def __init__(self):
self.colors=('r','g','b','y')
self.to_guess=[random.choice(self.colors) for i in range(4)]
def match_guess(self,guess):
if len(guess)!=len(self.to_guess) or [g for g in guess if g not in self.colors]:
raise InvalidMove()
ret=[0,0]
usedindexes=[]
for i,g in enumerate(guess):
if g==self.to_guess[i]:
ret[0]+=1
usedindexes.append(i)
for i,g in enumerate(guess):
if i in usedindexes: continue
for j,c in enumerate(self.to_guess):
if c==g and j not in usedindexes:
ret[1]+=1
usedindexes.append(j)
return ret
class UI:
def make_move(self):
guess=raw_input("Guess: ")
return guess.split()
def main(self):
print("The game begins...")
print("Possible colors (enter first letter): [r]ed [g]reen [b]lue [y]ellow")
print("Enter your guess like: r g b y")
g=Game()
while True:
guess=self.make_move()
try:
bp,wp=g.match_guess(guess)
except InvalidMove:
print("Invalid guess, try again")
continue
print("Black pegs %s"%bp)
print("White pegs %s"%wp)
if bp==4:
print("You won!")
if __name__=="__main__":
u=UI()
u.main()
这是我在Pygame中做的游戏板的代码:
import pygame
from pygame.locals import *
def draw_current(men, turn, spacing, corner):
current = len(men) - 1
pos = corner[0] + current * spacing[0], turn * spacing[1] + corner[1]
screen.blit(images[men[-1]], pos)
images = { K_r: pygame.image.load('red.png'), K_g: pygame.image.load('green.png'),
K_b: pygame.image.load('blue.png'), K_y: pygame.image.load('yellow.png'),
K_SPACE: pygame.image.load('empty.png') }
pygame.init()
SCREEN_SIZE = (640, 480)
background_image_filename = 'mastermind_board.jpg'
screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
background = pygame.image.load(background_image_filename).convert()
screen.blit(background, (0, 0))
pygame.display.update()
men = []
margin = 5, 3
spacing = [x + m for m, x in zip(margin, images[K_r].get_size())]
corner = 74, 74
turn = 0
quit = False
while not quit:
for event in pygame.event.get():
if event.type == QUIT:
quit = True
break
if event.type == KEYUP:
if event.key in images:
#print event.key
men.append(event.key)
# update
draw_current(men,turn, spacing, corner)
if len(men) == 4:
turn += 1
men = []
pygame.display.update()
elif event.key in (K_q, K_ESCAPE):
quit = True
break
pygame.quit()
任何帮助或建议我都会非常感激。
2 个回答
0
第一步:把你的棋盘代码整理好,确保它是一个正确的类定义。
第二步:再写一个文件,把棋盘和游戏的代码引入进来。
这样它们就“结合”在一起了。
接下来,你需要花时间把游戏的代码修正一下,让它能使用你新建的、很酷的棋盘。
1
正如你所知道的,你不能把所有东西都放在一个文件里然后就能运行。你需要把Mastermind游戏封装起来,这样才能在pygame的循环中运行或更新它。如果把Mastermind游戏的逻辑放在一个单独的文件中,然后再导入,这样会更整洁,但这并不是必须的。
这里有一些半伪代码:
import pygame
class Mastermind(object):
def update(self, *args):
pass #do stuff
pygame.init()
while not quit:
if event:
if event == "quit":
quit = True
else:
#update the game
Mastermind.update(args)
#update the board
pygame.display.update()
pygame.quit()
当然,这个代码不会完全适合你,但我希望我解释的这个思路能够传达给你。