2016-12-03 1 views
-2

거북이 모듈을 사용하여 8x8 크기의 보드를 몰 았습니다. 검은 색 블록이 무작위로 배포되기 때문에 체스 판처럼 보입니다.Python-3x에서 미리 정의 된 사각형에 객체를 추가하는 방법은 무엇입니까?

내가 목표로하는 것은 A-Star 알고리즘을 만들고 싶다는 것입니다. 알고리즘 부분이 완료되었습니다. 그러나 파이썬도 잘 모르기 때문에 그래픽 인터페이스 부분에 빠져 있습니다. 왜 다른 프로그래밍 언어를 사용하지 않는지 말할 수 있습니다. 사실,이 프로젝트는 내가이 언어를 조금 더 배우는 것을 도울 것입니다.

"turtle-graphics"모듈을 사용하고 있었지만 이해할 수있는 한 선을 그 어서 전체 특정 경로로 이동하는 펜을 사용하여 도형을 그립니다. 거북이의 기능을 다루었습니다. .. 그들은이 무엇인지 이해하기 위해 모듈 나는 아직도 진행 따라서, 나는이 질문을 부탁 해요입니다

내 질문이 있다는 것입니다.

1) 나는 특정로 개체 또는 이미지를 넣어 원하는 블록. 실제로 객체에 넣은 블록은 흰색이됩니다.

2) 객체가 한 블록에서 다른 블록으로 이동하기를 원합니다. 체스 게임 같은 블록. (단, 그렇지 않습니다)

3) 한 번 이동 한 후 이전 블록을 채울 수 있습니까? (실제로이 부분을 할 수도 있지만 약간 시간이 많이 걸렸습니다. 즉,이 프로그램은 펜 움직임을 완료하기 위해 색을 채우기 위해 약간 기다려야합니다.)

저는 파이썬에서 완전히 새로운 것입니다. 따라서 이러한 질문은 매우 간단 할 수 있습니다. 그렇게되면 미안해. 고급 .. 안부에서

덕분에 ..

import turtle 
import image 
Tess=turtle.Turtle() 
Tess.pensize(1) 
Tess.speed(-100) 
w=40 

def mysquare(who,thecolor,size): 
    who.pendown() 
    who.pencolor('black') 
    who.fillcolor(thecolor) 
    who.begin_fill() 
    who.setheading(0) 
    for i in range(4): 
     who.forward(size) 
     who.left(90) 
    who.end_fill() 

for j in range(8): 
    for i in range(8): 
#  print(i,j) 
     if i==5 and j==7 or i==5 and j==6 or i==3 and j==5 or i==7 and j==5 or i==2 and j==4 or i==4 and j==4 or i==5 and j==4 or i==6 and j==4: 
      scolor='black' 
     else: 
      scolor='white' 
     Tess.penup() 
     Tess.goto((i-4)*w,(j-4)*w) 
     mysquare(Tess,scolor,w) 
+0

무엇을 묻고 계십니까? 명확하게 할 수 있고 코드를 줄 수 있습니까? – Douglas

+0

그건 좀 나아 졌어. 나는 이것이 당신의 질문에 답하고 있지 않다는 것을 안다. 그러나 당신이 이와 같은 여분의 그래픽을 할 때, 거북이를 사용하지 말라. 나는 파이 게임을 제안한다. – Douglas

+0

방금 ​​편집했습니다. – Forty

답변

0

나는 다음과 같은 전시 당신이 설명하는 행동을 생각합니다. 그것은 보드를 설정하는 흰색 사각형에 거북이를 이동 한 후 무작위로 이미이 유효 이동 부족까지 (검은 색 사각형을 피하는) 방문하지 않은 사각형으로 이동합니다

from turtle import Turtle, Screen 
from random import choice 

WIDTH = 40 
BOARD_SIZE = 8 
COLOR_EMPTY, COLOR_BLOCKED, COLOR_VISITED, COLOR_FAILED = 'white', 'black', 'green', 'red' 

blocked_squares = [(5, 7), (5, 6), (3, 5), (7, 5), (2, 4), (4, 4), (5, 4), (6, 4)] # should generate randomly 

def mysquare(turtle, i, j, color, size): 
    turtle.penup() 
    turtle.goto((i - BOARD_SIZE//2) * size, (j - BOARD_SIZE//2) * size) 
    turtle.pendown() 
    turtle.fillcolor(color) 
    turtle.setheading(0) 

    turtle.begin_fill() 
    for _ in range(4): 
     turtle.forward(size) 
     turtle.left(90) 
    turtle.end_fill() 

def board_to_screen(position): 
    y, x = position 
    return ((x - BOARD_SIZE//2) * WIDTH + WIDTH/2, (y - BOARD_SIZE//2) * WIDTH + WIDTH/2) 

def move(): 
    global position 

    positions = [] 

    for j_delta in (-1, 0, 1): 
     if 0 <= position[0] + j_delta < BOARD_SIZE: 
      for i_delta in (-1, 0, 1): 
       if 0 <= position[1] + i_delta < BOARD_SIZE: 
        if board[position[0] + j_delta][position[1] + i_delta]: 
         new_position = (position[0] + j_delta, position[1] + i_delta) 
         if new_position != position: 
          positions.append(new_position) 
    j, i = position 

    if positions: 
     board[j][i] = False 
     mysquare(tess, i, j, COLOR_VISITED, WIDTH) 
     position = choice(positions) 
     screen.ontimer(move, 1000) 
    else: 
     mysquare(tess, i, j, COLOR_FAILED, WIDTH) 

    tess.penup() 
    tess.goto(board_to_screen(position)) 
    screen.update() 

tess = Turtle(shape='turtle') 
tess.speed('fastest') 

screen = Screen() 
screen.tracer(0) 

board = [] 

for j in range(BOARD_SIZE): 
    board.append(list()) 
    for i in range(BOARD_SIZE): 
     board[j].append(True) 
     square_color = COLOR_EMPTY 
     if (i, j) in blocked_squares: 
      square_color = COLOR_BLOCKED 
      board[j][-1] = False 
     mysquare(tess, i, j, square_color, WIDTH) 

screen.update() 

position = (3, 3) 
tess.penup() 
tess.goto(board_to_screen(position)) 

screen.ontimer(move, 1000) 

screen.exitonclick() 

이 아마 더 일부 거북이를 피하기 위해 여러 개의 거북이를 사용했으며 거북이는 내장 된 거북이 모양 대신 GIF 이미지가 될 수 있습니다. 흑색 사각형은 아마도 거북이의 보드에서 초기 시작 위치처럼 무작위로 (그러나 신중하게) 생성되어야합니다.

enter image description here

+0

정말 고마워요. 이것은 내가 바라는 바로 그 것이다. 나는 그것을 이해하기 위해 그것을 분석 할 것이다 :) – Forty

관련 문제