2016-12-03 10 views
-2

J'ai conduit une planche de dimension 8x8 en utilisant un module de tortue. Cela ressemble à un échiquier, mais ce n'est pas le cas, puisque les blocs noirs sont distribués au hasard.Comment ajouter un objet dans un carré prédéfini en Python-3x?

Le but est que je veux faire un Algorithme A-Star. La partie de l'algorithme est terminée. Cependant, je suis coincé dans la partie interface graphique, puisque je ne connais pas Python aussi. Vous pouvez dire pourquoi n'utilisez-vous pas un langage de programmation différent? en fait, ce projet m'aidera à apprendre un peu plus cette langue, je suppose. J'utilisais le module "turtle-graphics", mais pour autant que je puisse le comprendre, il dessine les formes en utilisant un stylo, qui déplace tout le chemin spécifique en traçant les lignes. . module afin de comprendre quels sont-ils que je suis encore en cours par conséquent, je pose ces questions

Ma question est que:..

1) Je veux mettre un objet ou une image dans un spécifique En fait, le bloc que je mettrai dans l'objet sera blanc

2) Je veux aussi que cet objet bouge d'un bloc à l'autre er bloc comme un jeu d'échecs. (Cependant, ce n'est pas le cas)

3) Après un mouvement, est-il possible de remplir le bloc précédent d'une couleur? (En fait, c'est possible, j'ai fait cette partie, mais cela prenait un peu de temps, le programme doit attendre un peu pour compléter les mouvements du stylo afin de remplir ce bloc avec une couleur.)

Je suis strictement nouveau chez Python, donc ces questions peuvent être si simples. Si c'est comme ça, je suis désolé.

Merci à l'avance .. Cordialement .. Les meilleurs

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

Que demandez-vous même? Pouvez-vous clarifier, donner un code, etc.? – Douglas

+0

C'est un peu mieux. Je sais que cela ne répond pas à votre question, mais lorsque vous faites quelque chose de plus graphique, n'utilisez pas tortue. Je suggère Pygame. – Douglas

+0

Je viens d'éditer. – Forty

Répondre

0

Je crois que les pièces suivantes les comportements de vous décrivez. Elle met en place le conseil d'administration, déplace la tortue à un carré blanc, puis se déplace au hasard à des places qu'il n'a pas encore visité (en évitant les carrés noirs) jusqu'à ce qu'il court de mouvements valides:

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() 

Ceci est probablement mieux fait avec plusieurs tortues pour éviter certains des mouvements et la tortue sur le plateau peut être une image GIF au lieu d'une forme de tortue intégrée. Les carrés noirs devraient probablement être générés aléatoirement (mais avec soin), tout comme la position de départ initiale sur le plateau de la tortue.

enter image description here

+0

Merci beaucoup. C'est exactement ce que je demande. Je vais l'analyser pour comprendre :) – Forty