首页
网站开发
桌面应用
管理软件
微信开发
App开发
嵌入式软件
工具软件
数据采集与分析
其他
首页
>
> 详细
辅导COMP 424程序设计、java编程语言辅导 讲解R语言编程|辅导留学生 Statistics统计、回归、迭代
项目预算:
开发周期:
发布时间:
要求地区:
COMP 424: Code description
Pentago-Twist
Project TAs: Erfan Seyedsalehi and Samin Yeasar
Overview
An implementation of Pentago-twist (follow the link:
Player games requires: a server (the real board) to be launched, and then two clients (agents) to connect to the server
via TCP sockets; this allows for clients to be run on separate computers. We also provide a GUI which displays the
game in a nice and intuitive way for learning the strategy behind Pentago-twist. Note that games between agents can
be played without the GUI to increase speed. All source code is found in the src directory. You must NOT edit any
packages, other than stu- dent player, which can be modified as much as you want so long as it (1) compiles, and, (2)
that you do not use any external libraries, but you can use default internal Java libraries (like Math and Util). If you
edit other packages you must be aware that your edits will not be used during the tournament; e.g., so if you know
what you’re doing, you may want to edit Autoplay.java to run many test games of your agent against another agent (or
perhaps against itself).
1
src
| — autoplay ( Autoplays games; can be ignored)
| — boardgame (Package for implementing boardgames, logging, GUI, and server TCP protocol, can be ignored for this project)
| — student player (Package containing your agent)
| | — StudentPlayer.java (The class you will implement your AI within)
| | — MyTools.java (Placeholder for any extra code you may need)
| — pentago twist (The package implementing all game logic)
| | — PentagoBoardPanel.java (Implements the GUI, can be ignored)
| | — PentagoBoard.java (Used for server logic, can be ignored)
| | — PentagoCoord.java (Simple class representing a board coordinate)
| | — PentagoMove.java (A move object for Pentago. Relevant functions)
| | —PentagoCoord getMoveCoord() (Returns the coordinate object for this move.)
| | — Quadrant getASwap() (Returns the first quadrant selected for swapping.)
| | — Quadrant getBSwap() (Returns the second quadrant selected for swapping.)
| | — PentagoBoardState.java (Implements all game logic, most important. Note that PentagoBoardState (PBS) manages
logic concerning whose turn it is, rules, and the positions of all pieces)
| | — Enum Piece (Three types: BLACK, WHITE, EMPTY)
| | — Enum Quadrant (Four types: TL (top left), TR (top right),BL (bottom left), BR (bottom right))
| | — Object clone() ( Clones the PBS, allowing manipulation of the clone without affecting the original.
Must be typecasted to a PBS to work on the clone)
| | — Move getRandomMove() (Returns a random, legal move.)
| | — List getAllLegalMoves() (Returns all legal moves for the current player from the perspective of the PBS)
| | — boolean isLegal(PentagoMove m) (Returns whether or not m is a legal move)
| | — void processMove(PentagoMove m) (Processes m on the board and updates the PBS as if
the move was played. This allows you to project and determine the impact of moves.)
| | — Piece getPieceAt(PentagoCoord c) (Returns the Piece at c on the board.)
| | — int getOpponent() ( Returns opponent of current player on PBS.)
| | — PentagoPlayer.java (Abstract class that all players extend)
| | — RandomPentagoPlayer.java (A random player, can be used as a baseline)
Coding tips
The PentagoBoardState (PBS) you are given to work with in your ChooseMove method is a copy of the real PBS,
so you can modify it without worrying about changing the real PBS. However, you should clone the PBS and then
process moves on the cloned PBS to assess the impact of doing different moves on the PBS; note that a cloned PBS
that processed a move can also be cloned again.
Work flow: Eclipse
We recommend that you develop your agent using Eclipse to avoid complication to compile and run the project. You
can also use IntelliJ, which also provides very easy way to run java project. The root directory of the project package
is a valid Eclipse project. There are two ways to get it running, based on the following clicks:
2
• From GitHub: File → Import → Git → Projects from Git → Clone URI !→ put in field URI https://github.com/SaminYeasar/pentago -
twist → keep pressing Next until the end!
• From source: File → Import → General → Existing projects into workspace and then select the root of the
project package.
You may need to set the launch configurations manually as follows: File → Import → Run/Debug → Launch configurations
and then navigate to the eclipse directory and select those launches.
Note: GitHub is a great tool for managing your project. However, if you choose to use it, please set the project access
to private - this is free for students.
Quick Start Pentago-Twist with Eclipse
If using Eclipse and you’ve set it up as described above, you can easily start a game. Simply click Run in Eclipse,
then click on GUI. This will launch the GUI for you. Then, click the launch tab in the GUI, and select Launch Server.
Then, the first client you launch will be the first player; for example, select Launch Human Player next. Then, to set the
second player, select the next client class; for example, select Launch Client (pentago twist.RandomPentagoPlayer).
You can now play against a random player in the GUI to get a feel for the game. Changing the Clients you select will
determine who/what plays who/what - so you can run two humans against each other too, and similarly two agents
against each other.
Playing Games
Here we provide documentation for the server and client programs. The commands outlined in this section are the
commands that are called by the provided build.xml file (if using ant) and launch configurations (if using Eclipse).
The details provided in this section are especially useful for advanced use of the provided code, such as playing games
where the clients are located on different machines than the server. All of these commands assume that you have
compiled the code and stored the class files in a directory named bin located inside the root directory of the project
package (Eclipse will automatically do these things). In a nutshell, if you want to run from the command line, you
will need three terminal shells open and simultaneously running: one to launch the server, one to launch a Client for
the first player, and one to launch a Client for the second player.
Launching the Server
To start the server from the root folder of the project package, run the command:
java -cp bin boardgame.Server [-p port] [-ng] [-q] [-t n] [-ft n] [-k] (1)
where:
• (-p) port sets the TCP port to listen on. (default=8123)
• (-ng) suppresses display of the GUI
• (-q) indicates not to dump log to console.
• (-t n) sets the timeout to n milliseconds. (default=2000)
• (-ft n) sets the first move timeout to n milliseconds. (default=30000)
• (-k) launch a new server every time a game ends (used to run multiple games without the GUI)
For example, assuming the current directory is the root directory of the project package, the command:
java -cp bin boardgame.Server -p 8123 -t 300000 (2)
3
launches a server on port 8123 (the default TCP port) with the GUI displayed and a timeout of 300 seconds. The
server waits for two clients to connect. Closing the GUI window will not terminate the server; the server exits once
the game is finished. If the -k arg was passed, then a new server starts up and waits for connections as soon as the
previous one exits. Log files for each game are automatically written to the logs subdirectory. The log file for a game
contains a list of all moves, names of the two players that participated, and other parameters. The server also maintains
a file, outcomes.txt, which stores a summary of all game results. At present this consists of the integer game sequence
number, the name of each player, the color and name of the winning player, the number of moves, and the name of the
log file.
Launching a Client
As stated previously, the server waits for two client players to connect before starting the game. If using the GUI, one
can launch clients (which will run on the same machine as the server) from the Launch menu. This starts a regular
client running in a background thread, which plays using the selected player class. In order to play a game of Pentagotwist
using the GUI, choose Launch human player from the Launch menu (as described in Section 4). Clients can also
be launched from the command line. From the root directory of the project package, run the command:
java -cp bin boardgame.Client [playerClass [serverName [serverPort]]] (3)
where:
• playerClass is the player to be run (default=pentago twist.RandomPentagoPlayer)
• serverName is the server address (default=localhost)
• serverPort is the port number (default=8123)
For example, the command:
java -cp bin boardgame.Client pentago twist.RandomPentagoPlayer localhost 8123 (4)
launches a client containing the random Pentago-twist player, connecting to a server on the local machine using the
default TCP port. The game starts immediately once two clients are connected. The two approaches of launching
players from the GUI and launching players from the command line can also be combined. For instance, one can
use the GUI to manually play against the random player (or any other agent) by first launching a human player using
the GUI, and subsequently launching the random player, either by selecting it in the GUI or running the appropriate
command from the command line. The order can also be switched; the player that connects to the server first will
move first.
Autoplay
The provided Autoplay script can be used to play a large batch of games between two agents automatically. It launches
a Server with the options -k -ng, and then repeatedly launches pairs of agents to play against one another. To use
Autoplay, run the following command from the root directory of the project package:
java -cp bin autoplay.Autoplay n games (5)
where n games is a positive integer number of games to play. The default behaviour of Autoplay is to play the student
agent against the random player, with the random player agent going first every second game. You can modify this
behaviour by editing Autoplay.java.
4
Implementing a Player
New agents are created by extending the class pentago twist.PentagoPlayer. The skeleton for a new agent is provided
by the class student player.StudentPlayer, and you should proceed by directly modifying that file. In implementing
your agent, you have two primary responsibilities:
1. Change the constructor of the StudentPlayer class so that it calls super with your student number.
2. Change the code in the method chooseMove to implement your agent’s strategy for choosing moves (the real
work).
To launch your agent from the command line, run the command:
java -cp bin boardgame.Client student player.StudentPlayer (6)
You can also launch your agent by selecting it from the Launch menu in the GUI. The project specification has further
details on implementing your player, and, in particular, what you need to submit.
5
软件开发、广告设计客服
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-23:00
微信:codinghelp
热点项目
更多
代做ceng0013 design of a pro...
2024-11-13
代做mech4880 refrigeration a...
2024-11-13
代做mcd1350: media studies a...
2024-11-13
代写fint b338f (autumn 2024)...
2024-11-13
代做engd3000 design of tunab...
2024-11-13
代做n1611 financial economet...
2024-11-13
代做econ 2331: economic and ...
2024-11-13
代做cs770/870 assignment 8代...
2024-11-13
代写amath 481/581 autumn qua...
2024-11-13
代做ccc8013 the process of s...
2024-11-13
代写csit040 – modern comput...
2024-11-13
代写econ 2070: introduc2on t...
2024-11-13
代写cct260, project 2 person...
2024-11-13
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 9951568
© 2021
www.rj363.com
软件定制开发网!