2017-04-21 1 views
-4

파이썬 클래스에 대한 과제를 진행 중입니다. 우리는 재귀 함수를 재작 성 게임에 추가하기 위해 노력하고 있습니다. 나는 솔직히 잃어 버렸고, 재귀 함수에서 다음에 무엇을 추가 할 지 모릅니다.Bejewled 게임에 재귀 함수 추가하기

import turtle 
import random 

turtle.setup(800,600) 
window = turtle.Screen() 

t = turtle.Turtle() 
t.speed('fastest') 


def drawDot(t, x, y, diameter, colorP): 
    t.up() 
    t.goto(x, y) 
    t.pencolor(colorP) 
    t.dot(diameter) 

def drawboard(t, x, y, diameter,board): 
    for i in range(len(board)): 
     for j in range(len(board[i])): 
      drawDot(t, x, y, diameter + 5, 'black') 
      drawDot(t, x, y, diameter, board[i][j]) 
      x = x + 60  
     y = y - 50 
     x = -300 

def shuffleboard(t, x, y, diameter, line): 
    for i in range(len(line)): 
     for j in range(len(line[i])): 
      drawDot(t, x, y, diameter + 5, 'black') 
      drawDot(t, x, y, diameter, line[i][j]) 
      x = x + 60  
     y = y - 50 
     x = -300 

def randomColor(): 
    randomColor = ['ivory', 'snow', 'gold', 'sky blue', 'indian red', 'slate gray', 'orange'] 
    num = random.randint(0,6) 
    color = randomColor[num] 
    return color 

def generateBoard(): 
    board = [] 
    for r in range(10): 
     row = [] 
     for i in range(10): 
      color = randomColor() 
      row.append(color) 
     board.append(row) 

    return board 

t1 = turtle.Turtle() 
x = -300 
y = 240 
diameter = 20 

letterX = -300 
letterY = 260 

for r in range(10): 
    t1.penup() 
    t1.goto(letterX, letterY) 
    t1.write(chr(r+ord('A')), move = False, align = 'center', font = ('Arial', 24, "normal")) 
    letterX += 60 
letterX = -300 
for r in range(10): 
    t1.penup() 
    t1.goto(letterX - 35, letterY - 40) 
    t1.write(r + 1, move = False, align = "center", font = ('Arial', 24, "normal")) 
    letterY -= 50 
t1.hideturtle() 

start = input('previous board? (Y/N) ') 
if start == "N": 
    aList=[] 
    board = generateBoard() 
    generateBoard() 
    drawboard(t, x, y, 25, board) 


if start== "Y": 
    fileName = input('enter file name(.txt): ') 
    input_file=(fileName, 'r') 
    for i in input_file: 
     aList.append(i) 

coordinate = input("enter your coordinate: ") 
letter= coordinate[0] 
number=int(coordinate[1:]) 
number=number-1 

if letter == 'A': 
    letIndex = 0 
if letter == 'B': 
    letIndex = 1 
if letter == 'C': 
    letIndex = 2 
if letter == 'D': 
    letIndex = 3 
if letter == 'E': 
    letIndex = 4 
if letter == 'F': 
    letIndex = 5 
if letter == 'G': 
    letIndex = 6 
if letter == 'H': 
    letIndex = 7 
if letter == 'I': 
    letIndex = 8 
if letter == 'J': 
    letIndex = 9  
number = int(coordinate[1:]) 
number = number - 1 
print(board[number][letIndex]) 
finalBoard = [] 
save = input("save current board? (Y/N) ") 
if save == "Y": 
    outputFileName = input("enter output file: ") 
    output_file=open(outputFileName, "w") 
    board = str(board) 
    output_file.write(board) 
    output_file.close() 
while save == "N": 
    coord = input("enter your coordinate: ") 
    letter = coord[0] 
    if letter == 'A': 
     letIndex = 0 
    if letter == 'B': 
     letIndex = 1 
    if letter == 'C': 
     letIndex = 2 
    if letter == 'D': 
     letIndex = 3 
    if letter == 'E': 
     letIndex = 4 
    if letter == 'F': 
     letIndex = 5 
    if letter == 'G': 
     letIndex = 6 
    if letter == 'H': 
     letIndex = 7 
    if letter == 'I': 
     letIndex = 8 
    if letter == 'J': 
     letIndex = 9  
    number = int(coordinate[1:]) 
    number = number - 1 
    print(board[number][letIndex]) 
    save = input('save and quit? (Y/N)') 
    if save == 'Y': 
     outputFileName = input('enter output file: ') 
     output_file=open(outputFileName, 'w') 
     for i in board: 
      finalBoard.append(i) 
     finalBoard = str(finalBoard) 
     output_file.write(finalBoard) 
     output_file.close() 

checked = [] 
def recursive(coordinate, checked, board): 
    let = coord[0] 
    num = coord[1:] 
    num1 = num-1 
    intnum = int(num1) 
    topnum = intnum-1 
    bottomnum = intnum+1 
    letindex = ord(let)-65 
    rightlet = letindex+1 
    leftlet = letindex-1 
    newright = rightlet + 65 
    newleft = leftlet + 65 
    rightcharacter = chr(newright) 
    leftcharacter = chr(newleft) 
    topcoord = let+str(topnum) 
    bottomcoord = let+str(bottomnum) 
    leftcoord = leftcharacter+num 
    rightcoord = rightcharacter+num 
    topcolor = board[topnum][letindex] 
    bottomcolor = board[bottomnum][letindex] 
    leftcolor = board[intnum][leftlet] 
    rightcolor = board[intnum][rightlet] 
    coordcolor = board[intnum][letindex] 
    print(topcoord) 
    print(bottomcoord) 
    print(leftcoord) 
    print(rightcoord) 
    print(topcolor) 
    print(bottomcolor) 
    print(leftcolor) 
    print(rightcolor) 
recursive(coordinate, checked, board) 
+1

언제든지 코드를 원하는 부분으로 좁힐 수 있습니다. – MooingRawr

+0

StackOverflow에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. MCVE 코드를 게시하고 문제를 정확하게 설명하기 전까지는 효과적으로 도움을 드릴 수 없습니다. StackOverflow는 코딩 또는 튜토리얼 서비스가 아닙니다. – Prune

답변

0

지금까지, 당신은로드, 저장, 생성하고 보드를 표시하기 위해 게임에 대한 기본 데이터 구조뿐만 아니라 토대를 만들었습니다. 하지만 추가하지 않은 것은 사용자의 이동이 평가되는 논리입니다. 이것은 재귀 함수가 유용 할 수있는 곳입니다.

지금까지 작성한 재귀 함수는 결정을 내리는 데 흥미로운 것을 정의하지만 결정을 내리지도 재귀도 아닙니다. 이 함수는 일반적으로 각 사용자 입력 후에 호출되어 이동에 대한 응답으로 다음에 수행 할 작업을 결정합니다.

비쥬얼드 게임 로직과 관련된 다른 StackOverflow 관련 정보를 살펴볼 수 있습니다. 예를 들어, logic behind a bejeweled-like game에있는이 코드는 파이썬이 아니지만 필요한 로직과 비슷한 로직을 설명하고 응답 중 하나는 재귀 적입니다.

그래도 도움이되지 않으면 자신의 StackOverflow 또는 인터넷 검색을 시도하십시오.