Files
hjha-server/GameModule/GlobalManager/PlayerLuckTable.cs
xiaoou e9616125ce feat: initial commit - HJHA game server full source
6 major server modules (PdkFriendServer/GlobalSever/ServerCore/GameModule/GameNetModule) +
game logic (GameFix/GameDAL/ServerData) +
network layer (NetWorkMessage) +
data layer (ObjectModel) +
utilities (MrWu/Core/Config/CloudAPI/dll) +
adapters (zyxAdapter/base)

.NET 8.0 C# solution, 16 projects, 958 source files
2026-07-07 12:02:15 +08:00

399 lines
14 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using GlobalSever.Form;
using MrWu.Debug;
using Server;
namespace GlobalSever.Form
{
public partial class PlayerLuckTable : ServerTable
{
public override string tableText => "幸运玩家";
public PlayerLuckTable(ServerProxy server)
{
this.server = server;
InitializeComponent();
}
private void button1_Click_1(object sender, EventArgs e)
{
string wayId = textBox1.Text;
if (int.TryParse(textBox2.Text, out int userid))
{
string info = LuckPlayerManager.Instance.GetPlayerInfo(wayId, userid);
textBox3.Text = info;
}
}
private void button2_Click(object sender, EventArgs e)
{
Thread thread = new Thread(Run);
thread.Start();
}
private int[] userids = new int[] { 243601, 243602, 243603, 243604 };
private void Run()
{
FileStream fileStream = new FileStream("fightscoredata.txt", FileMode.Open);
StreamReader streamReader = new StreamReader(fileStream, Encoding.UTF8);
string wayId = "2a1651c3a1s3d1sa231";
int fightCnt = 8;
int fightCntIndex = 0;
LuckPlayerManager.FightScore[] fightScores = new LuckPlayerManager.FightScore[4];
for (int i = 0; i < fightScores.Length; i++)
{
fightScores[i] = new LuckPlayerManager.FightScore()
{
UserId = userids[i],
Value = 0
};
}
StringBuilder stringBuilder = new StringBuilder();
while (true)
{
stringBuilder.Clear();
string line = streamReader.ReadLine();
if (line == null)
{
break;
}
fightCntIndex++;
string[] values = line.Split(',');
int[] scores = new int[4];
stringBuilder.Append($"原始分数 ");
for (int i = 0; i < values.Length; i++)
{
scores[i] = int.Parse(values[i]);
stringBuilder.Append($"{i}:{scores[i]} ");
}
Debug.Info(stringBuilder.ToString());
//计算发牌
var tup = LuckPlayerManager.Instance.GetLuckValueIndex(wayId, new List<int>(userids));
if (tup.Item1 >= 0 || tup.Item2 >= 0)
{
stringBuilder.Clear();
Debug.Info($"发牌数据: {tup.Item1} {tup.Item2}");
if (tup.Item1 >= 0)
{
int maxIdx = 0;
int maxValue = int.MinValue;
for (int i = 0; i < scores.Length; i++)
{
if (scores[i] > maxValue)
{
maxValue = scores[i];
maxIdx = i;
}
}
//交换
if (tup.Item1 != maxIdx)
{
(scores[maxIdx], scores[tup.Item1]) = (scores[tup.Item1], scores[maxIdx]);
}
}
if (tup.Item2 >= 0)
{
int minIdx = 0;
int minValue = int.MaxValue;
for (int i = 0; i < scores.Length; i++)
{
if (scores[i] < minValue)
{
minValue = scores[i];
minIdx = i;
}
}
//交换
if (tup.Item2 != minIdx)
{
(scores[minIdx], scores[tup.Item2]) = (scores[tup.Item2], scores[minIdx]);
}
}
stringBuilder.Append("发牌后分数: ");
for (int i = 0; i < scores.Length; i++)
{
stringBuilder.Append($"{i}:{scores[i]} ");
}
Debug.Info(stringBuilder.ToString());
}
stringBuilder.Clear();
stringBuilder.Append($"总局统计 {fightCntIndex}:");
for (int i = 0; i < fightScores.Length; i++)
{
fightScores[i].Value += scores[i];
stringBuilder.Append($"{i}:{fightScores[i].Value} ");
}
Debug.Info(stringBuilder.ToString());
for (int i = 0; i < values.Length; i++)
{
LuckPlayerManager.Instance.AddOnceFight(wayId, userids[i], scores[i]);
}
if (fightCntIndex >= fightCnt)
{
fightCntIndex = 0;
//计算封顶
Fengding(fightScores);
stringBuilder.Clear();
stringBuilder.Append("总局分数: ");
for (int i = 0; i < fightScores.Length; i++)
{
stringBuilder.Append($"{i}:{fightScores[i].Value} ");
}
Debug.Info(stringBuilder.ToString());
LuckPlayerManager.Instance.AddScoreRecord(wayId, 20, fightCnt, fightScores);
for (int i = 0; i < fightScores.Length; i++)
{
fightScores[i].Value = 0;
}
}
Thread.Sleep(1);
}
}
private void Fengding(LuckPlayerManager.FightScore[] fightScores)
{
for (int i = 0; i < fightScores.Length; i++)
{
fightScores[i].Value *= 20;
}
//输的超出部分,赢的人贴
int loseMaxGet = 0;
int yuloseMaxGet = 0;
//权重
int[] winWeight = new int[4];
//最后一个赢钱的人
int lastWinCnt = 0;
int totalWinCnt = 0;
for (int i = 0; i < fightScores.Length; i++)
{
if (fightScores[i].Value < -2000)
{
loseMaxGet = loseMaxGet - ((int)fightScores[i].Value + 2000); //这个是多输的钱
fightScores[i].Value = -2000;
}
if (fightScores[i].Value > 0)
{
winWeight[i] = (int)fightScores[i].Value;
totalWinCnt += winWeight[i];
lastWinCnt = i;
}
}
if (loseMaxGet > 0)
{
yuloseMaxGet = loseMaxGet;
for (int i = 0; i < fightScores.Length; i++)
{
if (fightScores[i].Value > 0) //分摊 多输的钱
{
if (i == lastWinCnt)
{
fightScores[i].Value -= yuloseMaxGet;
}
else //算权重
{
int weight = (int)(winWeight[i] / (float)totalWinCnt * loseMaxGet);
fightScores[i].Value -= weight; //摊费
yuloseMaxGet = yuloseMaxGet - weight; //剩余多少摊费
}
}
}
}
}
private void button3_Click(object sender, EventArgs e)
{
if (float.TryParse(textBox4.Text, out float beilv) && int.TryParse(textBox8.Text, out int fightCnt) &&
int.TryParse(textBox5.Text, out int balanceValue))
{
if (LuckPlayerManager.Instance.AddBalanceRange(beilv, fightCnt, balanceValue))
{
textBox7.Text = $"添加平衡参数 倍率:{beilv} 值:{balanceValue}";
}
else
{
textBox7.Text = "添加失败,已存在平衡参数!";
}
}
else
{
textBox7.Text = "添加失败,参数错误!";
}
}
private void button4_Click(object sender, EventArgs e)
{
if (int.TryParse(textBox6.Text, out int userid))
{
if (LuckPlayerManager.Instance.AddBalancePlayer(userid))
{
textBox7.Text = $"添加玩家成功 userid:{userid}";
}
else
{
textBox7.Text = "添加失败,没有对应倍率的平衡参数!";
}
}
else
{
textBox7.Text = "添加失败,参数错误!";
}
}
private void button5_Click(object sender, EventArgs e)
{
if (int.TryParse(textBox6.Text, out int userid))
{
List<string> logs = LuckPlayerManager.Instance.FindBalancePlayer(userid);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < logs.Count; i++)
{
stringBuilder.Append(logs[i]);
}
textBox7.Text = stringBuilder.ToString();
}
}
private void button7_Click(object sender, EventArgs e)
{
StringBuilder stringBuilder = new StringBuilder();
//查询平衡设置
foreach (var balanceRange in LuckPlayerManager.Instance.GetAllBalanceRange())
{
stringBuilder.AppendLine(
$"倍率:{balanceRange.BeiLv},局数:{balanceRange.MaxFightCnt},平衡参数:{balanceRange.BalanceValue}");
}
textBox7.Text = stringBuilder.ToString();
}
private void button6_Click(object sender, EventArgs e)
{
if (float.TryParse(textBox4.Text, out float beilv) && int.TryParse(textBox8.Text, out int fightCnt))
{
if (LuckPlayerManager.Instance.RemoveBalanceRange(beilv, fightCnt))
{
textBox7.Text = $"移除配置成功 倍率:{beilv} fightCnt:{fightCnt}";
}
else
{
textBox7.Text = "移除失败,没有对应倍率的平衡参数!";
}
}
else
{
textBox7.Text = "移除失败,参数错误!";
}
}
private void button5_Click_1(object sender, EventArgs e)
{
//修改平衡参数
if (float.TryParse(textBox4.Text, out float beilv) && int.TryParse(textBox8.Text, out int fightCnt) &&
int.TryParse(textBox5.Text, out int balanceValue))
{
if (LuckPlayerManager.Instance.SetBalanceRange(beilv, fightCnt, balanceValue))
{
textBox7.Text = $"设置平衡参数成功 倍率:{beilv} fightCnt:{fightCnt} balanceValue:{balanceValue}";
}
else
{
textBox7.Text = "移除失败,没有对应倍率的平衡参数!";
}
}
else
{
textBox7.Text = "移除失败,参数错误!";
}
}
private void button8_Click(object sender, EventArgs e)
{
if (int.TryParse(textBox6.Text, out int userid))
{
if (LuckPlayerManager.Instance.RemoveBalancePlayer(userid))
{
textBox7.Text = $"移除玩家成功 userid:{userid}";
}
else
{
textBox7.Text = "移除玩家失败!";
}
}
else
{
textBox7.Text = "添加失败,参数错误!";
}
}
private void button9_Click(object sender, EventArgs e)
{
if (int.TryParse(textBox6.Text, out int userid))
{
List<Tuple<LuckPlayerManager.BalanceRange, LuckPlayerManager.BalancePlayer>> players =
LuckPlayerManager.Instance.GetBalancePlayers(userid);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < players.Count; i++)
{
stringBuilder.AppendLine(
$"倍率:{players[i].Item1.BeiLv} 局数: {players[i].Item1.MaxFightCnt} 平衡数:{players[i].Item1.BalanceValue} 玩家:{userid} 累计分:{players[i].Item2.Score}");
}
textBox7.Text = stringBuilder.ToString();
}
else
{
textBox7.Text = "添加失败,参数错误!";
}
}
private void button10_Click(object sender, EventArgs e)
{
if (float.TryParse(textBox4.Text, out float beilv) && int.TryParse(textBox8.Text, out int fightCnt) &&
int.TryParse(textBox6.Text, out int userid) && int.TryParse(textBox9.Text, out int score))
{
LuckPlayerManager.Instance.AddSessionFightScore(beilv, fightCnt, userid, score, false);
textBox7.Text = "修改成功!";
}
else
{
textBox7.Text = "添加失败,参数错误!";
}
}
}
}