質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2751閲覧

python [スライドパズル] タイルの動かし方の条件について

zoon555

総合スコア17

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/11 12:42

編集2019/06/11 12:54

スライドパズルを作るpythonのコードが分かりません

pythonでスライドパズルが作れると聞き、インターネットで調べてみたところ以下のコードを見つけました。python初心者のため何をどうしようとしているのか理解出来なかった部分があり、意味を解説していただきたいです。

###分からない箇所
54-60行目のempty_spaceに関する処理:ここでの処理がパズルのパネルをどう動かすかに関わっているのでしょうか?もしそうなら、どういう条件付けをしているのか詳しく教えていただきたいです。
piece(i,j)は動かしたい数値の座標だと理解してます。しかしpiece[0]-1のように、マイナスの部分はどこからきたのかが分かりません。

1. 0. import random, sys 2. def board(): 3. '''Make matrix board of random numbers''' 4. list1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 5. random.shuffle(list1) 6. matrix = [] 7. while list1 !=[]: 8. matrix.append(list1[:4]) 9. list1 = list1[4:] 10. return matrix 11. def zero(board): 12. '''function to find where the zero is''' 13. empty_space = None 14. for x,item in enumerate(board): 15. for y,item in enumerate(board): 16. if board[x][y] == 0: 17. empty_space = (x,y) 18. return empty_space 19. def draw_board(board): 20. '''function to draw the board''' 21. print('\n\t+-------+-------+-------+-------|') 22. for x,item in enumerate(board): 23. for y,item in enumerate(board): 24. if board[x][y] == 0: 25. print('\t| XX' , end='') 26. else: 27. print('\t| ' + '{:02d}' .format(board[x][y]), end=' ') 28. print('\n\t+-------+-------+-------+-------|') 29. def ask_number(board): 30. ''' function to ask for the number to move''' 31. num = input('\nplease type the number of the piece to move : ( q ) to quit ') 32. if num in ['q','Q']: 33. print('\n\ngame over ') 34. sys.exit() 35. num = int(num) 36. piece = () 37. for i,item in enumerate(board): 38. for j,item in enumerate(board): 39. if num == board[i][j]: 40. piece = (i,j) 41. return piece , num 42. def game(): 43. '''Run the game logic''' 44. matrix = board() 45. empty_space = zero(matrix) 46. game_on = True 47. move = 0 48. while game_on: 49. draw_board(matrix) 50. piece,num = ask_number(matrix) 51. if num > 15: 52. print('illegal move , try again ') 53. else: 54. if(empty_space==(piece[0]-1,piece[1]))\ 55. or(empty_space==(piece[0]+1,piece[1]))\ 56. or(empty_space==(piece[0],piece[1]-1))\ 57. or(empty_space==(piece[0],piece[1]+1)): 58. matrix[empty_space[0]][empty_space[1]]=num 59. matrix[piece[0]][piece[1]]=0 60. empty_space=(piece[0],piece[1]) 61. move = move +1 62. print() 63. print('you have made ',move , 'moves so far ') 64. print(2*'\n') 65. else: 66. print('illegal move , try again ') 67. if __name__ == '__main__': 68. game()

コード出典

https://www.daniweb.com/programming/software-development/threads/493259/slide-puzzle-game
このサイトの一番下のコメントから引用させていただきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ここでの処理がパズルのパネルをどう動かすかに関わっているのでしょうか?

これの答えはイエスです。

質問者さんがまず理解したほうがいいこととして、
空間座標です。

piece[0]-1のように、マイナスの部分はどこからきたのかが分かりません。

特にこれが理解していないということを顕著に表しています。

そのプログラムを実行すると、

+----+----+----+---| |14 |15 |08 |11 +----+----+----+---| |02 |06 |09 |12 +----+----+----+---| |13 |07 |XX |01 +----+----+----+---| |03 |04 |05 |10 +----+----+----+---|

などの表記になると思いますが、
01からみて、x座標の-1は、XXのエリアです。

つまり、
54行目の条件である、empty_space==(piece[0]-1,piece[1])が表しているのは、01の左のスペースが空(XX)だったらという条件になります。

あとは、x+1とかy+1などが、組み合わさっているという状態です。

参考までに座標の記事を載せておきます!

投稿2019/06/11 13:19

tail12

総合スコア607

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zoon555

2019/06/11 13:56

理解出来ました! 参考記事までありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問