PDA

查看完全版本 : ChinaSpurs.com FBA选秀顺位确定办法


tinysands
2006-08-31, 11:11 PM
Iceman 联盟:

上一年未进入前12名季后赛的GM、以及新加入的特邀GM,组成乐透区,其余GM组成非乐透区;

如乐透区共有6名GM,则在选秀的前6轮都将采用乐透选法;即乐透区的GM被选为状元、榜眼、探花……第6的概率要高于非乐透区的GM,这里模仿NBA的乐透选秀,比如设定1000个数字,其中乐透区的GM每人占有50个数字,非乐透区的GM每人占有40个数字…等等。每一轮的概率之比会有不同,在6轮结束之后,所有GM的选秀概率将变成相同,不再区分乐透和非乐透。

本次,邀请了 邓不肯 来编写选秀的程序,当他执行完程序之后,将确定类如以下的选秀名单:
一共分A、B……P共16名GM,其中A~F为乐透区,G~P为非乐透区
结果:
状元:F 榜眼:L 探花:B………………(同时显示程序执行时间)

同时,我将随机确定A~P分别代表的是哪个GM的球队,并发送短信至一个马甲处,等 邓不肯 执行完选秀程序之后,两相对比,确定最终的选秀顺位。该马甲事后将公开,以示公正(上面有短信发送时间和接收时间的)


Admiral 联盟,除了将不区分乐透区、非乐透区(每人每轮的概率都相同)外,其余操作流程和Iceman 联盟相同


如有疑问,请回复提出

邓不肯
2006-08-31, 11:18 PM
这是大家经过讨论,即减少工作量,又保证公平性的较好办法。

请大家相信组委会的严肃性、认真性和公正性。

Tim
2006-08-31, 11:32 PM
啊啊啊啊啊,,,

最佳创意奖!

kikikilian
2006-09-01, 09:18 AM
大概沒有一個FBA會要求一個選透的程式出現吧...
支持沙子和大叔....

tinysands
2006-09-01, 02:56 PM
测试程序的效果图如下

邓不肯
2006-09-01, 03:31 PM
补充说明:A-K为非乐透区,L-P为乐透区
第一轮:乐透区的概率:非乐透区的概率 = 100:80
第二轮为95:80,第三轮为90:80,第四轮为85:80
第五轮开始,所有选手的抽签概率均相等。

Tim
2006-09-01, 06:43 PM
大叔,给偶传一个,8过偶木装C#,请传打包程序一份,外加TXT版源代码一份。

发到偶的信箱 lpj903@126.com

谢啦!!

邓不肯
2006-09-01, 10:08 PM
要安装dotnetfx.exe,23兆多,不好传。
源程序本身很小。

tinysands
2006-09-01, 11:10 PM
Admiral 联盟的程序测试结果如下

xinsuimadong
2006-09-02, 03:25 PM
要安装dotnetfx.exe,23兆多,不好传。
源程序本身很小。
大叔,源程序传给我看看吧。^^
xinsuimadong@gmail.com 谢谢啦。

邓不肯
2006-09-02, 09:46 PM
源程序在单位,要下周了。不过这个程序很简单的,基本没有学习价值。

xinsuimadong
2006-09-02, 09:58 PM
源程序在单位,要下周了。不过这个程序很简单的,基本没有学习价值。
不要紧,不要紧。。。有时间的话就传来看一下^^比较有兴趣的说。

邓不肯
2006-09-03, 08:54 PM
为公正起见,特公布抽签程序的源代码,使用Visual C# 2005

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace lottery
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox textBox4;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox textBox5;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox textBox6;
private System.Windows.Forms.TextBox textBox7;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.TextBox textBox8;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.TextBox textBox9;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.TextBox textBox10;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.TextBox textBox11;
private System.Windows.Forms.TextBox textBox12;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.TextBox textBox13;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.TextBox textBox14;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.TextBox textBox15;
private System.Windows.Forms.TextBox textBox16;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.TextBox textBox17;
private System.Windows.Forms.Label label17;
private System.Windows.Forms.Label label18;
private System.Windows.Forms.TextBox textBox18;
private System.Windows.Forms.Button btnBegin;
private System.Windows.Forms.Label label19;
private GroupBox groupBox1;
private RadioButton rbAdmiral;
private RadioButton rbIceman;
private Label label20;
private ComboBox cmbPlayers;


private ArrayList lots; // 保存所有种子数
private Player[] players; // 所有选手
private TextBox[] txts; // 保存所有文本框,以便于用循环方式进行处理
private int player_count = 16; // 选手数量
private bool isIceman = true; // 表示当前所选择的是否为Iceman联盟,由于Iceman存在优先级,所以要特别处理
private int seed_per_player = 80;
private Label lblTime; // 每位普通选手的种子数,默认为80
private int seed_count = 1380; // 11 * 80 + 5 * 100, 100是乐透选手的种子数

public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

txts = new TextBox[18];

txts[0] = this.textBox1;
txts[1] = this.textBox2;
txts[2] = this.textBox3;
txts[3] = this.textBox4;
txts[4] = this.textBox5;
txts[5] = this.textBox6;
txts[6] = this.textBox7;
txts[7] = this.textBox8;
txts[8] = this.textBox9;
txts[9] = this.textBox10;
txts[10] = this.textBox11;
txts[11] = this.textBox12;
txts[12] = this.textBox13;
txts[13] = this.textBox14;
txts[14] = this.textBox15;
txts[15] = this.textBox16;
txts[16] = this.textBox17;
txts[17] = this.textBox18;

this.cmbPlayers.SelectedIndex = 3; // 16
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

// 初始化种子
public void InitLottery()
{
if (this.isIceman)
this.seed_count = 1380;
else
this.seed_count = this.player_count * seed_per_player;

lots = new ArrayList( this.seed_count );

Random ran = new Random();
int count = 0;

while( count < this.seed_count )
{
int k = ran.Next( 1, this.seed_count + 1 );

if( !lots.Contains( k ))
{
count ++;
lots.Add( k );
}
}

players = new Player[18];

players[0] = new Player( "A");
players[1]= new Player( "B");
players[2]= new Player( "C");
players[3]= new Player( "D");
players[4]= new Player( "E");
players[5]= new Player( "F");
players[6]= new Player( "G");
players[7]= new Player( "H");
players[8]= new Player( "I");
players[9]= new Player( "J");
players[10]= new Player( "K");
players[11]= new Player( "L");
players[12]= new Player( "M");
players[13]= new Player( "N");
players[14]= new Player( "O");
players[15]= new Player( "P");
players[16] = new Player("Q");
players[17] = new Player("R");

if (this.isIceman)
{
players[11].isLot = true;
players[12].isLot = true;
players[13].isLot = true;
players[14].isLot = true;
players[15].isLot = true;
}

for (int m = 0; m < seed_per_player; m++)
{
for( int n = 0; n < this.player_count ; n ++ )
{
players[n].seeds.Add( lots[m*this.player_count + n]);
}
}

// 如果是Iceman联盟,增加乐透区选手的种子数
if (this.isIceman)
{
for (int m = 0; m < 10; m++)
{
for (int n = 0; n < 5; n++)
{
players[11 + n].seeds.Add(lots[1200 + m * 5 + n]);
}
}
}
}

// 前四轮乐透区选秀
public void PriorityPick()
{
int result = 0;

Random ran = new Random();
bool selected = false;

// 前四轮为乐透选秀
for( int p = 0; p < 4; p ++ )
{
while( true )
{
selected = false;

result = ran.Next( 1, this.seed_count + 1 );

for( int i = 0; i < this.player_count ; i ++ )
{
if( players[i].seeds.Contains( result ) )
{
if( players[i].selected == false )
{
players[i].selected = true;
selected = true;
this.txts[p].Text = players[i].name;

// 每轮之后,乐透选手的种子数减去5
for (int j = 11; j < player_count; j++)
{
players[j].TrimSeeds(5);
}

break;
}
else
break;
}
}

if( selected )
break;
}
}
}

// 非乐透选秀,从第start+1轮直到第end轮
public void EvenPick( int start, int end)
{
int result = 0;

Random ran = new Random();
bool selected = false;

for( int p = start; p < end; p ++ )
{
while( true )
{
selected = false;

result = ran.Next( 1, this.seed_count + 1 );

for( int i = 0; i < this.player_count ; i ++ )
{
if( players[i].seeds.Contains( result ) )
{
if( players[i].selected == false )
{
players[i].pick = p;
players[i].selected = true;
selected = true;
this.txts[p].Text = players[i].name;
break;
}
else
break;
}
}

if( selected )
break;
}
}
}

private void rbIceman_CheckedChanged(object sender, EventArgs e)
{
this.ClearAllText();

if (this.rbAdmiral.Checked)
{
this.cmbPlayers.Enabled = true;
this.cmbPlayers.SelectedIndex = 4;
this.isIceman = false;
this.player_count = 18; // 默认联盟人数为18
}
else
{
this.cmbPlayers.SelectedIndex = 0;
this.cmbPlayers.Enabled = false;
this.isIceman = true;
this.player_count = 16;
}
}

private void btnBegin_Click(object sender, EventArgs e)
{
this.lblTime.Text = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString();

this.ClearAllText();

this.InitLottery();

if (this.isIceman)
{
this.PriorityPick();
this.EvenPick(4, this.player_count);
}
else
{
this.EvenPick(0, this.player_count);
}
}

private void cmbPlayers_SelectedIndexChanged(object sender, EventArgs e)
{
// Iceman规定为16名选手,Admiral联盟的人数可以是10-18人
this.player_count = Convert.ToInt32(this.cmbPlayers.Text);
}

// 清空所有文本框的内容
private void ClearAllText()
{
for (int i = 0; i < this.txts.Length; i++)
{
this.txts[i].Text = "";
}
this.lblTime.Text = "";
}
}

public class Player
{
public int pick;
public bool selected;
public bool isLot;
public string name;
public ArrayList seeds;

public Player( string nam )
{
selected = false;
name = nam;
seeds = new ArrayList( 100 );
}

public void TrimSeeds( int seed )
{
if( this.isLot )
{
this.seeds.RemoveRange( 0, seed );
}
}
}
}

香瓜
2006-09-03, 10:05 PM
炫耀咩?我可什么都看不懂 =。=

tinysands
2006-09-03, 10:16 PM
BS楼上的……不务正业……BS一千遍啊一千遍……

长风
2006-09-06, 11:22 AM
这种选秀顺位确定办法好新颖,有点意思

kikikilian
2006-09-06, 02:09 PM
什麼也看不懂....

迷你石佛
2006-09-06, 09:35 PM
偶也看不懂……8过盲目支持

老刺
2006-09-14, 08:01 PM
什么时候选啊???

kikikilian
2006-09-14, 09:02 PM
选秀應該會定於名單確定之後...

而且NBA.com 和 各大美國體育網站
在開季前都應該會發出很多有關FBA選秀的文章

我一找到就會轉給大家看一看
所以選秀的事宜不用太急於一時

大概是十月中的日子吧

邓不肯
2006-09-14, 09:40 PM
报名截止到9月30日晚上8点钟。
抽签很快的,当晚就能完成。