重生之我在漫威终极逆转用AI写记牌器

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