python新手制作一个模仿原神的抽卡(2)

        通过几个小时的痛苦折磨,终于知道了原因,是因为opencv播放的时候太慢了,有一点多出来的时间让ffplay有了破音的可能。

import time
import threading

import cv2
import numpy as np
from ffpyplayer.player import MediaPlayer

#不知道为什么,有下面两行代码就不能正常退出了
#cv2.namedWindow("No Border Window", cv2.WINDOW_NORMAL)
#cv2.setWindowProperty("No Border Window", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)

class Video:
	def __init__(self,way):
		self.url = f'video/{way}.mp4'
		

		self.cap = cv2.VideoCapture(self.url)
		#print(self.cap)

		self.rate = self.cap.get(5)
		self.FrameNumber = self.cap.get(7)

		self.frame_width = int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH))
		self.frame_height = int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
		
		self.fps = int(250 / self.cap.get(cv2.CAP_PROP_FPS))

		#print(self.frame_width,self.frame_height,self.fps)

	def video(self):

		while(self.cap.isOpened()):
			ret,frame = self.cap.read()

			#print(ret,frame)
			try:
				src = cv2.resize(frame,(self.frame_width,self.frame_height),interpolation=cv2.INTER_CUBIC)
				cv2.imshow('',src)
			except:
				break
			if cv2.waitKey(self.fps) & 0xFF == ord('q'):
				break

		self.cap.release()
		cv2.destroyAllWindows()
		


	def music(self):
		player = MediaPlayer(self.url)
		time.sleep(self.FrameNumber/self.rate)


	def start(self):
		vd = threading.Thread(target=self.video)
		mc = threading.Thread(target=self.music)
		mc.start()
		vd.start()

		


if __name__ == '__main__':
	main = Video('glod_ten')
	main.start()

最终靠threading库解决了,反正改着改着,就改成库了………………反正之后会重构,不管惹

然后再花了几分钟的时间,用pandas库制作了比较简易的内容提取:

import pandas as pd

class Data:
	def __init__(self,way):
		self.url = f'data/{way}.csv'
		self.read()

	def read(self):
		'''读取或者刷新数据至内存'''
		self.csv = pd.read_csv(self.url,engine='c')
		#print(self.csv)
		self.radius = len(self.csv)
		#print(self.radius)
		self.data = []
		count = sorted(list(self.csv.frequency))
		count_num = (int(count[-1]) - int(count[0]))/100
		#print(count,count_num)
		for i in range(len(self.csv)):
			number = self.csv.number[i]
			name = self.csv.name[i]
			rarity = self.csv.rarity[i]
			frequency = self.csv.frequency[i]
			if frequency >= int(count[-1]) - count_num:
				rarity = 5
			elif frequency < int(count[0]) + 80 * count_num:
				rarity = 3
			elif frequency >= int(count[0]) + 80 * count_num and frequency < int(count[-1]) - count_num:
				rarity = 4
			self.data.append({'number':int(number),'name':name,'rarity':int(rarity),'frequency':int(frequency)})
		#print(self.data)

	def save(self,datas):
		"""保存并刷新在内存中的数据"""
		new_datas = 'number,name,rarity,frequency\n'
		for i in datas:
			for value in i.values():
				new_datas += str(value) + ','
			new_datas = new_datas.strip(',')
			new_datas += '\n'
		print(new_datas)

		with open(self.url,'w') as fl:
			fl.write(new_datas)
		
		self.read()

	def change_frequency(self,object_num):
		"""记录次数并保存"""
		self.data[object_num-1]['frequency'] += 1
		print(self.data)
		self.save(self.data)


if __name__ == '__main__':
	main = Data('test')
	main.change_frequency(1)

看着好乱,没事,反正之后会重构的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值