-4
\$\begingroup\$

Four-In-A-Row AI Tournament

Today, we will be playing a Four-In-A-Row tournament. However, it is not us humans playing... instead, we must have our computers battle instead! This challenge is completely in C#.

Rules

Basic Game Rules

If you have never played, there are simple rules. 2 players take turns putting pieces into a 6x7 grid. The player chooses one of the 7 holes at the top of the grid, and puts a piece in. Gravity pulls the piece down, until it hits another piece underneath it.

The game is won when a player gets four of their pieces in a straight line, either vertical or horizontal. Diagonal lines do not count in this challenge, as I was lazy when programming my simulator. This will also make it easier for you to code your AIs.

Code Format

You will write code that goes into a function that gets called when it is your turn. You can receive an argument, states[,] board where states is an enum with defender, attacker, empty. This represents the occupation of a space. Your method must return an int.

Game Ending

The game ends when someone gets a four-in-a-row, or makes an illegal move. An illegal move is when your program returns an int that is 1) off the board (< 0 or > 6) or in a column that is completely filled. In the case of an illegal move, the opponent immediately wins.

Additionally, if your program exits the function or the program, you automatically lose the match. If your program causes a runtime error, you lose the match. You are allowed to try to make the other program cause a runtime error.

Variables

You are not allowed to access any variables, properties, or run any methods outside of your function's scope. You are not allowed to define any variables outside of your function's scope.

One exception is the Dictionary<string, object> names variables I have provided for your convenience. It is in the class Programs, so it will keep it's data for the whole match. However, the opponent uses the same dictionary to save its data. One strategy is to sabotage the enemy program by modifying the data it uses.

Closing the Loopholes

Your submission may not make any external requests, for example to an online API. Your submission may not include a library that is made to solve four-in-a-row games. As a rule of thumb, your program shouldn't need to use anything except system or anything included in the system library.

You may not exploit any loopholes, either stated or implied in the rules, unless you have asked me through comments and I agreed.

Tournament Format

This is a tournament, so the AI will be competing against each other. I will post the first answer. The next person will have to beat my program. To beat a program, you must never lose to it. You are only required to beat the program right before you. This process goes on until an answer has not been superseded after one week.

You may answer as many times as you want, but you may not counter your own program.

You may make edits to your code until it has been superseded.

In a nutshell, you must write a program that never loses to its predecessor.

Testing

Click here to see my match simulation. Paste in your code in the Programs.cs file, in your corresponding function. The attacker is the one who is trying to supersede a program. The defender is the one whos program is attempting to hold its place. The defender always moves first.

After your program has been pasted in, run it. The console will open, and it will run the simulation.

Submission Format

Your submission must be in C#. Your submission must compile correctly. Your submission must follow this format:

#<answer number>
[Previous](<Permalink to previous answer>)

    CODE HERE
    CODE HERE

TL;DR

Basically, you will be coding AIs to compete in four-in-a-row. However, read the whole thing if you want to compete!

Good luck!

\$\endgroup\$
1
  • \$\begingroup\$ @musicman523 that's in Java, this is C# - not sure if that affects dupeyness \$\endgroup\$
    – Stephen
    Commented Jul 26, 2017 at 22:48

1 Answer 1

0
\$\begingroup\$

1

First answer!

if(!variables.ContainsKey("randy")){
    variables["randy"] = new Random();
}
return ((Random)variables["randy"]).Next(0, 7);
\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged or ask your own question.