A while back I developed a tournament simulator for my graphing calculator. You input deck matchups percentages for the field, number of players, and the amount of players playing each deck. It then plays a series of rounds by randomly matching players with the same records with each other. Each game is decided randomly based on the matchup percentage.
Unfortunatly, right now the program is un-optimized and clunky, in part due to the capabilities of the calculator.
I would be interested in converting it to a desktop platform and optimizing it, possibly adding features like maindeck/sideboarded matchup percentages with best of 3 games; top 8 playoffs; even possibly player skill levels with corresponding learning curves for each deck.
If anybody is interested in the idea please contribute ideas/ help.
A while back I developed a tournament simulator for my graphing calculator. You input deck matchups percentages for the field, number of players, and the amount of players playing each deck. It then plays a series of rounds by randomly matching players with the same records with each other. Each game is decided randomly based on the matchup percentage.
Unfortunatly, right now the program is un-optimized and clunky, in part due to the capabilities of the calculator.
I would be interested in converting it to a desktop platform and optimizing it, possibly adding features like maindeck/sideboarded matchup percentages with best of 3 games; top 8 playoffs; even possibly player skill levels with corresponding learning curves for each deck.
If anybody is interested in the idea please contribute ideas/ help.
When I was in high school, I made good money developing games on the TI-82/83 platform. I might be able to help optimize the program.
Private Mod Note
():
Rollback Post to RevisionRollBack
Hey all... I'm retired, not dead. Check out what I'm doing these days (and beg me to come back if you want):
I'd recommend trying this in java...seems like it would be most useful if done in an object oriented language where you don't have to do much work to integrate new decks/statistics/etc. I get cable access over @ my place on monday, so shoot me an email and I would love to help with this.
this is the code in language the calculator uses for programming on the go:
Right now it is two separate programs that work together:
The first one lets you enter different decks and their matchups (this is stored in a matrix),
The second one lets you decide how many players play each deck(the total number of players unfortunatly right now has to be an exponent of 2 (2,4,8,16, etc) ) then runs this information off saving the tournament information in a second matrix. (you can analyze this by looking at the matrix)
note: -> is the little "store to" arrow and =/= is "not equal to"
Program #1 (Metagamer)
------------------------------------------
Disp "NUM. OF DECKS?"
Prompt D
{D,D} -> dim([I])
Fill(0,[I])
For(M,1,D,1)
For(A,1,D,1)
If [I](M,A)=0 and M=/=A
Then
ClrHome
Disp "WHAT IS DECK"
Output (1,14,M)
Disp "MATCHUP VS"
Output (2,14,A)
Disp "(WIN PERCENTILE)"
Input W
W -> [I](M,A)
100-W -> [I](A,M)
End
If M=A
Then
50 -> [I](A,M)
End
End
End
Disp [I]
Program #2 TournamentSim
----------------------------------------
ClrHome
Fill(0,[H])
0 -> P
For(T,1,D,1)
Disp ":TOURNAMENT SIM:"
Disp "DECK"
Output(2,6,T)
Disp "NUM. OF PLAYERS?"
Prompt N
{P+N,1} -> dim([H])
For(E,P+1,P+N,1)
T -> [H](E,1)
End
P+N -> P
ClrHome
End
Disp "Total Players:"
Disp P
0 -> R
P -> X
While X=/=1
round(X/2,0) -> X
R+1 -> R
End
Disp "TOTAL ROUNDS:"
Disp R
{P,R+2} -> dim([H])
For(Y,2,R+1,1)
For(Z,1,P,1)
If [H](Z,Y)=0 ***
Then ***
randInt(1,P) -> F ***
While F=Z or [H](F,Y)=/=0 or [H](F,R+2)=/=[H](Z,R+2) ***
randInt(1,P) -> F ***
End ***
randInt(1,100) -> V
If V<=[I]([H](Z,1),[H](F,1))
Then
1 -> [H](Z,Y)
[H](Z,R+2)+1 -> [H](Z,R+2)
-1 -> [H](F,Y)
Else
1 -> [H](F,Y)
[H](F,R+2)+1 -> [H](F,R+2)
-1 -> [H](Z,Y)
End
End
End
End
The code denotated with asterixes is a major problem that needs to be somehow rewritten.
This code pairs up players randomly to someone with their record. When it comes to a large number of players though it becomes inneffective.
It can't pair down or give a bye. This will cause it sometimes to keep searching endlessly.
Unfortunatly, right now the program is un-optimized and clunky, in part due to the capabilities of the calculator.
I would be interested in converting it to a desktop platform and optimizing it, possibly adding features like maindeck/sideboarded matchup percentages with best of 3 games; top 8 playoffs; even possibly player skill levels with corresponding learning curves for each deck.
If anybody is interested in the idea please contribute ideas/ help.
When I was in high school, I made good money developing games on the TI-82/83 platform. I might be able to help optimize the program.
https://twitch.tv/annorax10 (classic retro speedruns & occasional MTGO/MTGA screwaround streams)
https://twitch.tv/SwiftorCasino (yes, my team and I run live dealer games for the baldman using his channel points as chips)
Right now it is two separate programs that work together:
The first one lets you enter different decks and their matchups (this is stored in a matrix),
The second one lets you decide how many players play each deck(the total number of players unfortunatly right now has to be an exponent of 2 (2,4,8,16, etc) ) then runs this information off saving the tournament information in a second matrix. (you can analyze this by looking at the matrix)
note: -> is the little "store to" arrow and =/= is "not equal to"
Program #1 (Metagamer)
------------------------------------------
Disp "NUM. OF DECKS?"
Prompt D
{D,D} -> dim([I])
Fill(0,[I])
For(M,1,D,1)
For(A,1,D,1)
If [I](M,A)=0 and M=/=A
Then
ClrHome
Disp "WHAT IS DECK"
Output (1,14,M)
Disp "MATCHUP VS"
Output (2,14,A)
Disp "(WIN PERCENTILE)"
Input W
W -> [I](M,A)
100-W -> [I](A,M)
End
If M=A
Then
50 -> [I](A,M)
End
End
End
Disp [I]
----------------------------------------
ClrHome
Fill(0,[H])
0 -> P
For(T,1,D,1)
Disp ":TOURNAMENT SIM:"
Disp "DECK"
Output(2,6,T)
Disp "NUM. OF PLAYERS?"
Prompt N
{P+N,1} -> dim([H])
For(E,P+1,P+N,1)
T -> [H](E,1)
End
P+N -> P
ClrHome
End
Disp "Total Players:"
Disp P
0 -> R
P -> X
While X=/=1
round(X/2,0) -> X
R+1 -> R
End
Disp "TOTAL ROUNDS:"
Disp R
{P,R+2} -> dim([H])
For(Y,2,R+1,1)
For(Z,1,P,1)
If [H](Z,Y)=0 ***
Then ***
randInt(1,P) -> F ***
While F=Z or [H](F,Y)=/=0 or [H](F,R+2)=/=[H](Z,R+2) ***
randInt(1,P) -> F ***
End ***
randInt(1,100) -> V
If V<=[I]([H](Z,1),[H](F,1))
Then
1 -> [H](Z,Y)
[H](Z,R+2)+1 -> [H](Z,R+2)
-1 -> [H](F,Y)
Else
1 -> [H](F,Y)
[H](F,R+2)+1 -> [H](F,R+2)
-1 -> [H](Z,Y)
End
End
End
End
This code pairs up players randomly to someone with their record. When it comes to a large number of players though it becomes inneffective.
It can't pair down or give a bye. This will cause it sometimes to keep searching endlessly.