首页 > 编程语言 >python | 小游戏 开局托儿所 自动化脚本 pyautogui

python | 小游戏 开局托儿所 自动化脚本 pyautogui

时间:2024-01-13 21:00:43浏览次数:23  
标签:pyautogui tmp map python max range 小游戏 print 10

小游戏开局托儿所自动化脚本 pyautogui

纯sb游戏,我脚本都不是总能上100分。当然,跟我算法不是最优肯定也有关系。

别玩这游戏,纯浪费时间。

image

好久不写这种带算法的代码了,调了半天。

import pyautogui

def like(boxa, boxb):
	if abs(boxa.top-boxb.top) < 10 and abs(boxa.left-boxb.left) < 10:
		# print(boxa, boxb)
		return True
	return False

def loc2xy(locbox):
	if locbox.left - zeroloc[0] > 0:
		d_x = (locbox.left - zeroloc[0]) // 60
	else:
		d_x = 0

	if (locbox.top - zeroloc[1]) > 0:
		d_y = (locbox.top - zeroloc[1])  // 60
	else:
		d_y = 0
	return (d_x, d_y)

def xy2loc(x, y):
	# print((zeroloc[0]+60*y, zeroloc[1]+60*x))
	return (zeroloc[0]+62*y, zeroloc[1]+62*x)

# sb csdn 别偷我代码

# 返回右边一个非0位置 和数值
def next_right(i, j):
	if j == 9:
		return (None, 999)
	if _map[i][j+1] == 0:
		return next_right(i, j+1)
	else:
		return ((i, j+1), _map[i][j+1])

def next_down(i, j):
	if i == 15:
		return (None, 999)
	if _map[i+1][j] == 0:
		return next_down(i+1, j)
	else:
		return ((i+1, j), _map[i+1][j])
	
# 拖拽鼠标函数
def drag(x1, y1, x2, y2):
	pyautogui.moveTo(x1, y1)
	pyautogui.dragTo(x2, y2, 0.2)

def show_map():
	for __ in _map:
		print(__)

# 计算范围内的加和(包括边界)
def calc_map(x1, y1, x2, y2):
	_sum = 0
	for i in range(x1, x2+1):
		for j in range(y1, y2+1):
			_sum += _map[i][j]
	return _sum

# 清零区域
def clean_map(x1, y1, x2, y2):
	for i in range(x1, x2+1):
		for j in range(y1, y2+1):
			_map[i][j] = 0

locations = []
real_locs = []
setloc = pyautogui.locateOnScreen(f'img/set.png', confidence=0.9)
zeroloc = (setloc.left, setloc.top+127)
print(zeroloc)

for i in range(1, 10):
	locations.append(pyautogui.locateAllOnScreen(f'img/{i}.png', confidence=0.9))

# 除去相同的
length = 0
for _ in range(9):
	a = []
	locs = list(locations[_])
	for i in range(len(locs)):
		ok = True
		for j in range(i+1, len(locs)):
			if like(locs[i], locs[j]):
				ok = False
				break
		if ok:
			a.append(locs[i])
	length += len(a)
	real_locs.append(a)
# print(real_locs)
print(length)
# assert length == 160
print('ok')

# 整理地图 10*16
_map = [[0 for j in range(10)] for i in range(16)]
for i in range(len(real_locs)):
	for loc in real_locs[i]:
		x, y = loc2xy(loc)
		_map[y][x] = i+1

show_map()

change = True
while change == True:   # 循环直到没有可以消除的
	change = False
	for i in range(16):
		for j in range(10):
			row_list = [(i,j)]
			count = _map[i][j]   # 求和
			tmp, num = next_right(i, j)  # 横向相加
			while tmp is not None:
				count += num
				row_list.append(tmp)
				if count > 10:
					break
				elif count == 10:   # 横向消除
					loc1 = xy2loc(i,j)
					loc2 = xy2loc(tmp[0], tmp[1])
					drag(loc1[0], loc1[1], loc2[0]+45, loc2[1]+45)
					change = True
					# 清除数据
					for _loc in row_list:
						_map[_loc[0]][_loc[1]] = 0
					# print(((i,j),(tmp[0],tmp[1])))
					# show_map()
				else:
					tmp, num = next_right(tmp[0], tmp[1])


			column_list = [(i,j)]
			count = _map[i][j]   # 求和
			tmp, num = next_down(i, j)  # 竖向相加
			while tmp is not None:
				count += num
				column_list.append(tmp)
				if count > 10:
					break
				elif count == 10:   # 竖向消除
					loc1 = xy2loc(i,j)
					loc2 = xy2loc(tmp[0], tmp[1])
					drag(loc1[0], loc1[1], loc2[0]+45, loc2[1]+45)
					change = True
					# 清除数据
					for _loc in column_list:
						_map[_loc[0]][_loc[1]] = 0
					# print(((i,j),(tmp[0],tmp[1])))
					# show_map()
				else:
					tmp, num = next_down(tmp[0], tmp[1])

			# 斜向消除只需要遍历到最大column和row
			# print((i,j))
			row_max = row_list.pop()
			column_max = column_list.pop()
			j_max = row_max[1]
			i_max = column_max[0]
			# print((i_max, j_max))
			# show_map()
			# print(calc_map(i,j,i_max,j_max))
			# print('-------------')
			for i_index in range(i, i_max):
				for j_index in range(j, j_max):
					_tmp_sum = calc_map(i, j, i_index, j_index)
					if _tmp_sum == 10:
						show_map()
						print(f'> {(i,j)} -> {(i_index, j_index)}')
						loc1 = xy2loc(i,j)
						loc2 = xy2loc(i_index, j_index)
						drag(loc1[0], loc1[1], loc2[0]+45, loc2[1]+45)
						change = True
						clean_map(i, j, i_index, j_index)
					# elif _tmp_sum > 10:
					# 	break

标签:pyautogui,tmp,map,python,max,range,小游戏,print,10
From: https://www.cnblogs.com/Mz1-rc/p/17962922

相关文章

  • python-爬元气桌面壁纸
    一、利用xpath来抓取图片url地址是:唯美壁纸-唯美手机壁纸-唯美手机动态壁纸-元气壁纸(cheetahfun.com)数据解析方式xpath二、分析在浏览器中打开网页链接后,F12找到元素,可以看到图片的的内容可以在源代码中找到,分析发现,每一个图片分别对应着一个li的标签【在<licla......
  • python中的Map和Filter
    map会将⼀个函数映射到⼀个输入列表的所有元素上。这是它的规范:规范map(function_to_apply,list_of_inputs)大多数时候,我们要把列表中所有元素⼀个个地传递给⼀个函数,并收集输出。比方说:items=[1, 2, 3, 4, 5]squared =[]for iinitems:squared.append(i**2)Ma......
  • python中的*args**和**kwargs
    首先并不是必须写成*args和**kwargs。只有变量前⾯的*(星号)才是必须的。当然你也可以写成*var和**vars等等,而写成*args和**kwargs只是⼀个通俗的命名约定。*args和**kwargs主要用于函数定义,你可以将不定数量的参数传递给⼀个函数。*args是⽤来发送⼀个非键值对的可变数......
  • linux环境Python安装
    1、下载源码华为云镜像地址下载pythonPython加速地址:https://repo.huaweicloud.com/python/2、安装前置依赖yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devellibffi-d......
  • python socket服务端
    pythonsocket服务端importsocket#创建socket对象server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#绑定IP地址和端口号server_socket.bind(('127.0.0.1',8000))#监听连接server_socket.listen(1)print('等待客户端连接...')whileTru......
  • python中如何在多层循环中使用break/continue
    关于break/continue这两个关键字在平常的使用过程中一直比较迷糊。好不容易理解了吧,过段时间不使用好像忘记了什么。这个问题也是很多初学者比较容易提及的问题。先通过一个简单的单层循环来了解一下这两个关键字的使用。print('=============单层循环使用=============')for......
  • python回调函数
    回调函数在各种编程函数中都是比较常见的,回调函数的出现主要是为了降低函数之间调用的耦合性,从而实现解耦。简单来说,如果一个函数可以作为被传递就称这个函数为回调函数。比如:func1(func2()),那么func2就是回调函数。此时,只需要知道func2这个函数的功能是什么,在执行func1时调用fu......
  • 十行python代码实现文件去重,去除重复文件的脚本
    1.导入依赖'''导入依赖'''frompathlibimportPathimportfilecmp2.函数说明filecmp.cmp(path1,path2,shallow=True)path1/path2:待比较的两个文件路径。shallow:默认为True,即只比较os.stat()获取的元数据(创建时间,大小等信息)是否相同,设置为False的话,在对比文件的......
  • python经典有序序列的list列表推导式
    生成一个数据列表#初始化一个列表list_1=[]#使用循环生成一个列表数据forvalinrange(0,20,1):#加入集合list_1.append(val)#打印列表数据print(list_1)#[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]使用列表推导式生......
  • Python 潮流周刊第 35 期(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。周刊全文:https://pythoncat.top/posts/2024-01-13-weekly以下是本期摘要:......