重生之我在漫威终极逆转用AI写记牌器
2024/09/12191 浏览攻略
本文为作者原创内容,未经作者本人和营地同意不得转载
在漫威终极逆转的世界里,每个玩家都是超级英雄,每张卡牌都蕴藏着无限可能。王,一个默默无闻的游戏爱好者,意外获得了一次重生的机会。他回到了游戏的起点,带着对未来的记忆,决心这一次要成为游戏的主宰。"这一次,我要用智慧和策略,改写结局。" 王坐在电脑前,眼中闪烁着坚定的光芒。他的手指在键盘上飞速舞动,一行行代码逐渐构建出他的杰作——一款能够预测对手牌型的AI记牌器。这款记牌器,不仅仅是一个工具,它是王在游戏中的超能力,是他挑战命运的武器。随着记牌器的完成,王的游戏技巧开始突飞猛进,他的名字迅速在玩家之间传开。但随着王的名声越来越大,他也引起了那些隐藏在暗处的势力的注意。他们开始试图夺取王的AI记牌器,甚至不惜动用一切手段。王意识到,他所面对的不仅仅是一场游戏,而是一场关乎整个漫威宇宙命运的战争。"不管前方有多少困难,我都将勇往直前。" 王站在虚拟的游戏世界之巅,望着脚下繁华的数字都市,心中充满了决心。他知道,这场终极逆转的游戏,才刚刚开始……
回到现实世界,闲来无事,国服一直没记牌器,于是就找AI聊聊天,看看能不能帮我写一个手动的记牌器,就是每回合摸了什么牌,自己记录,结果居然可行。

把卡组图片以1.png到12.png放到文件目录下,执行python代码就可以了,点击会变灰。

只记录自己的卡牌好像差点意思,如果是征服模式,两个人需要对战多场的,记录双方的会有点用吧。

又搞了个文字版本的,读取卡组.txt中的文字信息展示,点击变灰。
图片版源码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QGridLayout
from PyQt5.QtGui import QPixmap, QIcon, QImage, QColor
from PyQt5.QtCore import Qtclass CardWidget(QWidget):
def __init__(self, card_number, parent=None):
super().__init__(parent)
self.card_number = card_number
self.is_clicked = False # 跟踪点击状态
self.initUI() def initUI(self):
self.setFixedSize(75, 105) # 调整卡牌大小
self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
self.label = QLabel(self)
self.label.setPixmap(QPixmap(f'{self.card_number}.png'))
self.label.setScaledContents(True)
self.label.setGeometry(0, 0, 75, 105)
self.label.mousePressEvent = self.mousePressEvent def mousePressEvent(self, event):
self.is_clicked = not self.is_clicked
if self.is_clicked:
self.label.setPixmap(self.to_grayscale(QPixmap(f'{self.card_number}.png')))
else:
self.label.setPixmap(QPixmap(f'{self.card_number}.png'))
event.accept() def to_grayscale(self, pixmap):
"""将图片转换为黑白"""
original_image = pixmap.toImage()
grayscale_image = QImage(original_image.size(), QImage.Format_RGB32)
for x in range(original_image.width()):
for y in range(original_image.height()):
color = original_image.pixel(x, y)
red, green, blue, _ = QColor(color).getRgb()
grayscale = (red + green + blue) // 3
grayscale_color = QColor(grayscale, grayscale, grayscale)
grayscale_image.setPixel(x, y, grayscale_color.rgb())
return QPixmap.fromImage(grayscale_image)class CardDisplay(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI() def initUI(self):
self.setGeometry(0, 0, 300, 315) # 总大小
self.setWindowTitle('Card Display')
self.setWindowIcon(QIcon('card_icon.png'))
self.setStyleSheet("background-color: transparent;")
self.layout = QGridLayout(self) for i in range(1, 13):
card = CardWidget(i, self)
self.layout.addWidget(card, (i-1)//4, (i-1)%4) def keyPressEvent(self, event):
if event.key() == Qt.Key_Escape:
QApplication.instance().quit()
elif event.key() == Qt.Key_F1:
self.reset_cards() def reset_cards(self):
for i in range(self.layout.count()):
card_widget = self.layout.itemAt(i).widget()
card_widget.is_clicked = False
card_widget.label.setPixmap(QPixmap(f'{card_widget.card_number}.png'))if __name__ == '__main__':
app = QApplication(sys.argv)
display = CardDisplay()
display.show()
sys.exit(app.exec_())
文字版源码
import tkinter as tk# 全局字典用于存储卡牌标签,使用(card_name, side)作为键
labels = {}# 读取卡组文件并解析卡组
def read_decks(filename):
with open(filename, 'r', encoding='utf-8') as file:
lines = file.readlines() my_deck = []
opponent_deck = []
current_deck = None for line in lines:
line = line.strip()
if line == "[我的卡组]":
current_deck = my_deck
elif line == "[对方卡组]":
current_deck = opponent_deck
elif line and current_deck is not None:
current_deck.append(line) return my_deck, opponent_deck# 创建悬浮窗口
def create_window(my_deck, opponent_deck):
root = tk.Tk()
root.title("记牌器")
root.attributes('-topmost', 1) # 窗口始终在最前面 # 创建标签以显示卡组,并存储标签对象
for i, card in enumerate(my_deck):
label = tk.Label(root, text=card, fg="black")
label.grid(row=i, column=0, padx=10, pady=5)
labels[(card, 'my')] = label
label.bind("<Button-1>", lambda event, card_name=card, side='my': toggle_color(card_name, side)) for i, card in enumerate(opponent_deck):
label = tk.Label(root, text=card, fg="black")
label.grid(row=i, column=2, padx=10, pady=5)
labels[(card, 'opponent')] = label
label.bind("<Button-1>", lambda event, card_name=card, side='opponent': toggle_color(card_name, side)) # 创建一个分隔线
tk.Label(root, text="VS").grid(row=0, column=1, padx=10) # 绑定F1键以重置颜色
root.bind("<F1>", lambda event: reset_colors()) root.mainloop()# 点击卡牌后改变颜色
def toggle_color(card_name, side):
label = labels.get((card_name, side))
if label:
current_color = label.cget("fg")
new_color = "grey" if current_color == "black" else "black"
label.config(fg=new_color)# 重置卡牌颜色到初始状态
def reset_colors():
for label in labels.values():
label.config(fg="black")# 主程序入口
if __name__ == "__main__":
my_deck, opponent_deck = read_decks("卡组.txt")
create_window(my_deck, opponent_deck)
AI太好玩啦,想想还能干点什么。对了,图片版本打包成可执行的exe失败了,文字版本倒是可以,有人需要的话留言私信,我上传到网盘吧,应该没人打个牌愿意那么累吧,游戏嘛,开心就好,等待大佬的记牌器吧。