Compare commits

..

No commits in common. "a4932332538d9e4f8a0cfbcc1aba72912aa28d40" and "1653fb98e76da18d3a5fca20711c39053d88c704" have entirely different histories.

2 changed files with 9 additions and 215 deletions

View File

@ -1,72 +0,0 @@
import random
from typing import Optional
class TicTacToeGame:
def __init__(self):
self.board = [" "] * 9
self.player_symbol = "X"
self.computer_symbol = "O"
self.current_player = "X" # X先走
def print_board(self) -> str:
"""返回棋盘字符串"""
board_str = (
f"\n {self.board[0]} | {self.board[1]} | {self.board[2]} \n"
"-----------\n"
f" {self.board[3]} | {self.board[4]} | {self.board[5]} \n"
"-----------\n"
f" {self.board[6]} | {self.board[7]} | {self.board[8]} \n"
)
return board_str
def check_winner(self) -> Optional[str]:
"""检查是否有玩家获胜"""
win_combinations = [
[0, 1, 2], [3, 4, 5], [6, 7, 8], # 横向
[0, 3, 6], [1, 4, 7], [2, 5, 8], # 纵向
[0, 4, 8], [2, 4, 6] # 对角线
]
for combo in win_combinations:
if self.board[combo[0]] == self.board[combo[1]] == self.board[combo[2]] != " ":
return self.board[combo[0]]
return None
def is_board_full(self) -> bool:
"""检查棋盘是否已满"""
return " " not in self.board
def computer_move(self) -> int:
"""电脑AI移动"""
for i in range(9):
if self.board[i] == " ":
self.board[i] = self.computer_symbol
if self.check_winner() == self.computer_symbol:
return i
self.board[i] = " "
for i in range(9):
if self.board[i] == " ":
self.board[i] = self.player_symbol
if self.check_winner() == self.player_symbol:
self.board[i] = self.computer_symbol
return i
self.board[i] = " "
move_order = [4, 0, 2, 6, 8, 1, 3, 5, 7]
for move in move_order:
if self.board[move] == " ":
return move
return -1
def make_move(self, position: int) -> bool:
"""玩家移动"""
if 0 <= position <= 8 and self.board[position] == " ":
self.board[position] = self.current_player
return True
return False
def switch_player(self):
"""切换当前玩家"""
self.current_player = "O" if self.current_player == "X" else "X"

152
main.py
View File

@ -6,13 +6,6 @@ import random
from .back import time_long, volume, isUserExist, insertUser, seconds_to_hms, ml_to_l_ml, get_user_name from .back import time_long, volume, isUserExist, insertUser, seconds_to_hms, ml_to_l_ml, get_user_name
import pymysql import pymysql
from .Tool import get_tool_name from .Tool import get_tool_name
import astrbot.api.message_components as Comp
from astrbot.core.utils.session_waiter import (
session_waiter,
SessionController,
)
import aiohttp # 需要异步HTTP客户端
from TicTacToeGame import TicTacToeGame
@register("helloworld", "YourName", "一个简单的 Hello World 插件", "1.0.0") @register("helloworld", "YourName", "一个简单的 Hello World 插件", "1.0.0")
class MyPlugin(Star): class MyPlugin(Star):
@ -62,14 +55,14 @@ class MyPlugin(Star):
time.append(round(random.uniform(1, 600), 2)) time.append(round(random.uniform(1, 600), 2))
V.append(round(random.uniform(0.01,100), 2)) V.append(round(random.uniform(0.01,100), 2))
a.append(time_long(time[i])) a.append(time_long(time[i]))
b.append(volume(V[i])) b.append(volume(V[i]))
sql = "INSERT INTO dajiao (openid, timelong, volume) VALUES (%s, %s, %s),(%s, %s, %s),(%s, %s, %s),(%s, %s, %s),(%s, %s, %s),(%s, %s, %s),(%s, %s, %s),(%s, %s, %s),(%s, %s, %s),(%s, %s, %s)" sql = "INSERT INTO dajiao (openid, timelong, volume) VALUES (%s, %s, %s)"
values = (user_name,time[0],V[0]),(user_name,time[1],V[1]),(user_name,time[2],V[2]),(user_name,time[3],V[3]),(user_name,time[4],V[4]),(user_name,time[5],V[5]),(user_name,time[6],V[6]),(user_name,time[7],V[7]),(user_name,time[8],V[8]),(user_name,time[9],V[9]) values = (user_name,time[i],V[i])
cur.execute(sql,values) cur.execute(sql,values)
conn.commit() conn.commit()
cur.close() cur.close()
conn.close() conn.close()
yield event.plain_result(f"Hello,{get_user_name(event.get_sender_id())},准备开始挑战十连咯!\n第一次你坚持了{time[0]}s哦,{a[0]}.射出{V[0]}ml,{b[0]}!\n第二次你坚持了{time[1]}s哦,{a[1]}.射出{V[1]}ml,{b[1]}!\n第三次你坚持了{time[2]}s哦,{a[2]}.射出{V[2]}ml,{b[2]}!\n第四次你坚持了{time[3]}s哦,{a[3]}.射出{V[3]}ml,{b[3]}!\n第五次你坚持了{time[4]}s哦,{a[4]}.射出{V[4]}ml,{b[4]}!\n第六次你坚持了{time[5]}s哦,{a[5]}.射出{V[5]}ml,{b[5]}!\n第七次你坚持了{time[6]}s哦,{a[6]}.射出{V[6]}ml,{b[6]}!\n第八次你坚持了{time[7]}s哦,{a[7]}.射出{V[7]}ml,{b[7]}!\n第九次你坚持了{time[8]}s哦,{a[8]}.射出{V[8]}ml,{b[8]}!\n第十次你坚持了{time[9]}s哦,{a[9]}.射出{V[9]}ml,{b[9]}!\n哎呀,一点也打不出来了!杂鱼!") yield event.plain_result(f"Hello,{get_user_name(event.get_sender_id())}, 第一次你坚持了{time[0]}s哦,{a[0]}.射出{V[0]}ml,{b[0]}!\n第二次你坚持了{time[1]}s哦,{a[1]}.射出{V[1]}ml,{b[1]}!\n哎呀,一点也打不出来了!")
@filter.command("打打你的") @filter.command("打打你的")
@ -312,138 +305,11 @@ class MyPlugin(Star):
testNumber = testNumber + 1 testNumber = testNumber + 1
yield event.plain_result(f"累积结果: {testNumber}") yield event.plain_result(f"累积结果: {testNumber}")
@filter.command("麦否?")
async def QAQtest(self, event: AstrMessageEvent):
@filter.command("Dora") yield event.plain_result("包的")
async def Dora(self, event: AstrMessageEvent):
async with aiohttp.ClientSession() as session:
async with session.get('https://www.doro.asia/api/random-sticker') as resp:
if resp.status == 200:
data = await resp.json()
if data.get('success', False):
image_url = data['sticker']['url']
chain = [
Comp.At(qq=event.get_sender_id()), # At 消息发送者
Comp.Plain("来看这个图:"),
Comp.Image.fromURL(image_url), # 使用API返回的图片URL
]
yield event.chain_result(chain)
else:
yield "获取表情包失败"
else:
yield "API请求失败"
@filter.command("来句骚话")
async def lovelive(self, event: AstrMessageEvent):
async with aiohttp.ClientSession() as session:
async with session.get('https://api.lovelive.tools/api/SweetNothings') as resp:
if resp.status == 200:
text = await resp.text() # 获取返回的文本内容
chain = [
Comp.At(qq=event.get_sender_id()), # At 消息发送者
Comp.Plain(text) # 使用API返回的文本
]
yield event.chain_result(chain)
else:
yield "获取骚话失败"
@filter.command("部署") @filter.command("部署")
async def bushutest(self, event: AstrMessageEvent): async def bushutest(self, event: AstrMessageEvent):
yield event.plain_result("自动部署成功!!") yield event.plain_result("自动部署成功!!")
@filter.command("井字棋")
async def tic_tac_toe_handler(self, event: AstrMessageEvent):
"""井字棋游戏处理器"""
try:
# 初始化游戏
game = TicTacToeGame()
# 发送初始说明和空棋盘
instructions = (
"欢迎来到井字棋游戏!\n"
"输入1-9的数字来选择位置:\n"
" 1 | 2 | 3 \n"
"-----------\n"
" 4 | 5 | 6 \n"
"-----------\n"
" 7 | 8 | 9 \n"
"\n当前棋盘:" + game.print_board()
)
yield event.plain_result(instructions)
@session_waiter(timeout=60, record_history_chains=False)
async def game_waiter(controller: SessionController, event: AstrMessageEvent):
nonlocal game
# 玩家回合
if game.current_player == game.player_symbol:
try:
move = int(event.message_str) - 1
if not game.make_move(move):
await event.send(event.make_result(chain=[Comp.Plain("无效移动,请重试。")]))
controller.keep(timeout=60, reset_timeout=True)
return
except ValueError:
await event.send(event.make_result(chain=[Comp.Plain("请输入1-9的数字。")]))
controller.keep(timeout=60, reset_timeout=True)
return
else:
# 电脑回合
move = game.computer_move()
game.board[move] = game.current_player
# 检查游戏状态
winner = game.check_winner()
if winner:
result = event.make_result()
result.chain = [
Comp.Plain(f"{game.print_board()}\n"),
Comp.Plain("恭喜你赢了!" if winner == game.player_symbol else "电脑赢了!")
]
await event.send(result)
controller.stop()
return
if game.is_board_full():
result = event.make_result()
result.chain = [
Comp.Plain(f"{game.print_board()}\n"),
Comp.Plain("平局!")
]
await event.send(result)
controller.stop()
return
# 切换玩家并继续游戏
game.switch_player()
# 发送更新后的棋盘
result = event.make_result()
if game.current_player == game.player_symbol:
result.chain = [
Comp.Plain(f"{game.print_board()}\n"),
Comp.Plain("轮到你走了请输入1-9:")
]
else:
result.chain = [
Comp.Plain(f"{game.print_board()}\n"),
Comp.Plain("电脑思考中...")
]
await event.send(result)
# 重置超时时间
controller.keep(timeout=60, reset_timeout=True)
try:
await game_waiter(event)
except TimeoutError:
yield event.plain_result("井字棋游戏超时结束!")
except Exception as e:
yield event.plain_result(f"游戏出错: {str(e)}")
finally:
event.stop_event()
except Exception as e:
logger.error(f"井字棋游戏错误: {str(e)}")
yield event.plain_result("游戏发生错误,请稍后再试。")