Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 27, 2015 03:29:33

Boomer111
Зарегистрирован: 2015-01-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с кодом Python

Здравствуйте! Помогите разобраться с кодом! Язык насколько я знаю Python Нужно сделать задержку между действиями (решениями). Желательно, чтобы задержка была рандомной. Например 0,3-1 сек

код:

#!/usr/bin/python
# -*- coding: utf-8 -*-
''' Help the user achieve a high score in a real game of 2048 by using a move searcher. '''
from __future__ import print_function
import ctypes
import time
import os
# Enable multithreading?
MULTITHREAD = True
for suffix in ['so', 'dll', 'dylib']:
dllfn = 'bin/2048.' + suffix
if not os.path.isfile(dllfn):
continue
ailib = ctypes.CDLL(dllfn)
break
else:
print("Couldn't find 2048 library bin/2048.{so,dll,dylib}! Make sure to build it first.")
exit()
ailib.init_tables()
ailib.find_best_move.argtypes = [ctypes.c_uint64]
ailib.score_toplevel_move.argtypes = [ctypes.c_uint64, ctypes.c_int]
ailib.score_toplevel_move.restype = ctypes.c_float
def to_c_board(m):
board = 0
i = 0
for row in m:
for c in row: 
board |= c << (4*i)
i += 1
return board
def print_board(m):
for row in m:
for c in row:
print('%8d' % c, end=' ')
print()
def _to_val(c):
if c == 0: return 0
return 2**c
def to_val(m):
return [[_to_val(c) for c in row] for row in m]
def _to_score(c):
if c <= 1:
return 0
return (c-1) * (2**c)
def to_score(m):
return [[_to_score(c) for c in row] for row in m]
if MULTITHREAD:
from multiprocessing.pool import ThreadPool
pool = ThreadPool(4)
def score_toplevel_move(args):
return ailib.score_toplevel_move(*args)
def find_best_move(m):
board = to_c_board(m)
print_board(to_val(m))
scores = pool.map(score_toplevel_move, [(board, move) for move in range(4)])
bestmove, bestscore = max(enumerate(scores), key=lambda x:x[1])
if bestscore == 0:
return -1
return bestmove
else:
def find_best_move(m):
board = to_c_board(m)
return ailib.find_best_move(board)
def movename(move):
return ['up', 'down', 'left', 'right'][move]
def rungame(args):
from gamectrl import BrowserRemoteControl, Fast2048Control, Keyboard2048Control, Hybrid2048Control
if len(args) == 1:
port = int(args[0])
else:
port = 32000
ctrl = BrowserRemoteControl(port)
# Use Keyboard2048Control if Fast2048Control doesn't seem to be working.
# gamectrl = Fast2048Control(ctrl)
gamectrl = Hybrid2048Control(ctrl)
if gamectrl.get_status() == 'ended':
gamectrl.restart_game()
moveno = 0
start = time.time()
while 1:
state = gamectrl.get_status()
if state == 'ended':
break
elif state == 'won':
time.sleep(0.75)
gamectrl.continue_game()
moveno += 1
board = gamectrl.get_board()
move = find_best_move(board)
if move < 0:
break
print("%010.6f: Score %d, Move %d: %s" % (time.time() - start, gamectrl.get_score(), moveno, movename(move)))
gamectrl.execute_move(move)
score = gamectrl.get_score()
board = gamectrl.get_board()
maxval = max(max(row) for row in to_val(board))
print("Game over. Final score %d; highest tile %d." % (score, maxval))
if __name__ == '__main__':
import sys
rungame(sys.argv[1:])

Код с бота для игры 2048

За ранее огромное спасибо!!!

Офлайн

#2 Янв. 27, 2015 03:32:19

Boomer111
Зарегистрирован: 2015-01-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с кодом Python

На всякий прикрепляю архив со всеми файлами бота. Возможно в каких-то других файликах лежит задержка.

Прикреплённый файлы:
attachment 2048-ai-master.zip (59,4 KБ)

Офлайн

#3 Янв. 27, 2015 04:38:54

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Помогите разобраться с кодом Python

10ой строчкой добавляем модуль
180ой строчкой в конце цикла (если я правильно понял про “действия”) добавляем случайную задержку с заданным диапазоном 0.3-1 с .



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Прикреплённый файлы:
attachment 2048.py (3,2 KБ)

Офлайн

#4 Янв. 27, 2015 04:58:22

Boomer111
Зарегистрирован: 2015-01-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с кодом Python

JOHN_16
10ой строчкой добавляем модуль180ой строчкой в конце цикла (если я правильно понял про “действия”) добавляем случайную задержку с заданным диапазоном 0.3-1 с .

Всё сделал, но теперь скрипт даже не проигрывается. Выдает

Traceback (most recent call last):
  File "2048.py", line 127, in <module>
    rungame(sys.argv[1:])
  File "2048.py", line 118, in rungame
    time.sleep(random.randomint(3,10)/10.0)
AttributeError: 'module' object has no attribute 'randomint'

и еще такой вопрос. если я захочу изменить время, то как это сделать, а то я так и не понял почему там дробь.

По поводу выполнения действия - это я про расчет хода. тобишь между каждым расчетом и ходом идет задержка.

Офлайн

#5 Янв. 27, 2015 06:36:13

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Помогите разобраться с кодом Python

Boomer111
По поводу выполнения действия - это я про расчет хода. тобишь между каждым расчетом и ходом идет задержка.
Если так, то надо в другом месте вставить эту стрчоку. По поводу ошибки - это я просто описАлся , исправленный файл прилагаю.

Boomer111
и еще такой вопрос. если я захочу изменить время, то как это сделать, а то я так и не понял почему там дробь.
Формируется случайное целое число от 3 до 10, которое делится на 10 - получается случайное число от 0.3 до 1 - как вы и хотели - изменить цифры 3 и 10 на те что вам нужно




_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Прикреплённый файлы:
attachment 2048.py (3,2 KБ)

Офлайн

#6 Янв. 27, 2015 07:21:01

Boomer111
Зарегистрирован: 2015-01-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с кодом Python

Всё превосходно работает!!! Спасибо тебе огромное! Ты даже не представляешь как мне помог!
Еще такой вопрос. А что и где нужно прописать, чтобы задержка была не рандомная, а как мы однотипная, тобишь только 0,5сек или там 0,2 сек.

И можно ли прикрутить сюда антикапчу? а то во время игры изредка выскакивает

Офлайн

#7 Янв. 27, 2015 07:40:49

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Помогите разобраться с кодом Python

Boomer111
Еще такой вопрос. А что и где нужно прописать, чтобы задержка была не рандомная, а как мы однотипная, тобишь только 0,5сек или там 0,2 сек.
замените 117 строчку на
time.sleep(2)
где цифра это количество секунд
Boomer111
И можно ли прикрутить сюда антикапчу? а то во время игры изредка выскакивает
Это другой и более сложный вопрос, требующего более глубокого изучения - тут я не помогу, времени нет.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#8 Янв. 27, 2015 07:44:43

Boomer111
Зарегистрирован: 2015-01-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с кодом Python

JOHN_16
И на этом тебе огромное спасибо!!!
Можешь прикрепить файлик с задержкой в 0,6 сек, а то у меня все в блокноте в одну строчку и я не могу вообще понять где эта 117 строка

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version