2016-12-03 3 views
-2

私はタートルモジュールを使って8x8次元のボードを動かしました。それはチェス盤のように見えますが、黒いブロックはランダムに分布しているので、そうではありません。Python-3xであらかじめ定義されている四角形にオブジェクトを追加するには?

私はA-Starアルゴリズムを作りたいと考えています。アルゴリズムの部分は完了です。しかし、私はPythonも知らないので、グラフィカルインターフェイスの部分に詰まっています。なぜあなたは別のプログラミング言語を使わないのでしょうか?実際、このプロジェクトはこの言語をもう少し学ぶのに役立ちます。

私は「タートルグラフィックス」モジュールを使用していましたが、私が理解できる限り、線を描くことによって特定のパス全体を移動するペンを使用してシェイプを描画します。私はカメの機能を扱っていました。モジュールは、彼らが何であるかを理解するために、私はまだ進行中だので、私はこれらの質問を求めている

私の質問は、ということです。私は特定にオブジェクトや画像を入れたい

1)実際には、私がオブジェクトに入れたブロックは白です。

2)私はまた、そのオブジェクトを1つのブロックから2つのブロックに移動したいチェスゲームのようなブロック。 (ただし、そうではありません)

3)1回の移動後、前のブロックに色を塗りつぶすことはできますか? (実際には、私はこの部分を行っている可能性がありますが、少し時間がかかりました。つまり、そのブロックに色を塗りつぶすためにペンの動きを完了するまで少し待たなければなりません)。

私は厳密にPythonで新しくなっているので、これらの質問はとても簡単かもしれません。そういう場合、私はごめんなさい。私は次はあなたが記述行動を示すと考えている先進.. よろしく..

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

それは少し良いです。私はこれがあなたの質問に答えていないことを知っていますが、このような余分なグラフィックを何かしているときは、タートルを使用しないでください。私はPygameを提案する。 – 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

関連する問題