From 559bd2707cdfcb98f047dd9036807bc0c4dca7a7 Mon Sep 17 00:00:00 2001 From: Ricky Yuanqi Li Date: Thu, 8 Jun 2017 22:25:12 -0700 Subject: [PATCH] Finish everything. --- out/Arcade-Haven.jar | Bin 1128843 -> 1130059 bytes out/pacman/DoublePoints.class | Bin 410 -> 441 bytes out/production/Arcade-Haven/GameMain.class | Bin 722 -> 722 bytes .../Arcade-Haven/META-INF/MANIFEST.MF | 3 - out/production/Arcade-Haven/ServerMain.class | Bin 695 -> 695 bytes .../grid/{TestData.txt => Level1.txt} | 2 +- out/production/Arcade-Haven/grid/Level2.txt | 15 + out/production/Arcade-Haven/grid/Level3.txt | 15 + .../Arcade-Haven/pacman/DoublePoints.class | Bin 760 -> 795 bytes .../Arcade-Haven/pacman/GameEngine$1.class | Bin 1207 -> 1446 bytes .../Arcade-Haven/pacman/GameEngine.class | Bin 9755 -> 10462 bytes .../Arcade-Haven/pacman/GridReadCreate.class | Bin 3843 -> 4154 bytes out/production/Arcade-Haven/pacman/Item.class | Bin 425 -> 425 bytes .../Arcade-Haven/pacman/SpeedUp.class | Bin 852 -> 852 bytes .../Arcade-Haven/pacman/TimeExtender.class | Bin 805 -> 805 bytes res/META-INF/MANIFEST.MF | 3 - src/experiment/Character.java | 23 -- src/experiment/Echo.java | 107 ------- src/experiment/SBClient.java | 158 ---------- src/experiment/SBMessage.java | 172 ----------- src/experiment/SBServer.java | 280 ------------------ src/experiment/Server2ChatTest.java | 33 --- src/pacman/GameEngine.java | 94 ++++-- src/pacman/GridReadCreate.java | 17 +- 24 files changed, 120 insertions(+), 802 deletions(-) delete mode 100644 out/production/Arcade-Haven/META-INF/MANIFEST.MF rename out/production/Arcade-Haven/grid/{TestData.txt => Level1.txt} (92%) create mode 100644 out/production/Arcade-Haven/grid/Level2.txt create mode 100644 out/production/Arcade-Haven/grid/Level3.txt delete mode 100644 res/META-INF/MANIFEST.MF delete mode 100644 src/experiment/Character.java delete mode 100644 src/experiment/Echo.java delete mode 100644 src/experiment/SBClient.java delete mode 100644 src/experiment/SBMessage.java delete mode 100644 src/experiment/SBServer.java delete mode 100644 src/experiment/Server2ChatTest.java mode change 100755 => 100644 src/pacman/GameEngine.java diff --git a/out/Arcade-Haven.jar b/out/Arcade-Haven.jar index 42a2e06d2aefb8c2e612d131b57aba8a76fe412c..44c549c5d9c33d05e643f245e5871d61f2577f16 100644 GIT binary patch delta 21512 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 delta 20251 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 SV2=C`_XSttWxu7>zr+XQG8w7> delta 176 zcmX|&F%E)25Jev@umUSADoATWVua3EdkhOtVBtyZh@H1EaSJUhEj*NQh{op6 z>a6P5`~CpdR52lGL_pSujmXI~W6h*n9#hTGFr_e*6uNuvO6G!v;)23M0LkdI@v3c1 r(*Ls5viWkW#;zQLCSO>GYTGM*uy^>EUKiFd`WZ7Zlyu1#I{YC%aAXs# diff --git a/out/production/Arcade-Haven/GameMain.class b/out/production/Arcade-Haven/GameMain.class index 1623ec873ebc735049e10463b626b8ccc47ed545..99089673f706e7a0ccb98291b7a4d9b496b7137e 100644 GIT binary patch delta 25 gcmcb_dWm&IH4`r{gD3+JgBSxpg93xVVg9MNz!@xhefXN*IPmlz6 delta 29 jcmdnax}9}HJd+?V10Mqy13wT-FbFWnFbGaAU~&flPw)hP diff --git a/out/production/Arcade-Haven/grid/TestData.txt b/out/production/Arcade-Haven/grid/Level1.txt similarity index 92% rename from out/production/Arcade-Haven/grid/TestData.txt rename to out/production/Arcade-Haven/grid/Level1.txt index 5459dde..94ab78e 100644 --- a/out/production/Arcade-Haven/grid/TestData.txt +++ b/out/production/Arcade-Haven/grid/Level1.txt @@ -12,4 +12,4 @@ 20 1 12 1 14 18 1 15 1 17 13 1 12 1 19 15 1 1 1 1 1 1 12 1 1 1 1 1 1 15 17 20 -26 11 1 11 1 1 1 11 1 11 -29 19 18 -0 17 16 22 16 22 16 16 16 22 16 22 16 18 0 \ No newline at end of file +0 17 16 22 16 22 16 16 16 22 16 22 16 18 0 diff --git a/out/production/Arcade-Haven/grid/Level2.txt b/out/production/Arcade-Haven/grid/Level2.txt new file mode 100644 index 0000000..26f59fc --- /dev/null +++ b/out/production/Arcade-Haven/grid/Level2.txt @@ -0,0 +1,15 @@ +19 16 16 16 16 16 16 16 16 16 16 16 16 16 20 +15 1 1 1 1 1 1 1 1 1 1 1 1 1 15 +18 1 14 16 20 1 14 16 20 1 19 13 1 1 17 +1 1 1 1 15 1 1 1 15 1 15 1 1 1 1 +20 1 19 16 18 1 19 16 25 1 15 1 14 16 24 +15 1 15 1 1 1 15 1 15 1 15 1 1 -28 15 +15 1 12 1 11 1 12 1 12 1 17 13 1 16 25 +15 1 1 1 15 1 1 1 1 1 1 1 1 1 15 +15 1 19 24 25 1 14 16 20 1 11 1 11 1 15 +15 1 15 15 15 1 1 1 15 1 23 20 15 1 15 +18 1 15 15 15 1 19 16 25 1 15 15 15 1 17 +1 1 12 12 12 1 15 -26 15 1 15 17 25 1 1 +20 1 1 1 1 1 12 1 12 1 12 1 12 1 19 +15 -29 14 13 1 1 1 1 1 1 1 1 1 1 15 +17 16 16 16 16 16 16 16 16 16 16 16 16 16 18 diff --git a/out/production/Arcade-Haven/grid/Level3.txt b/out/production/Arcade-Haven/grid/Level3.txt new file mode 100644 index 0000000..12d2ae1 --- /dev/null +++ b/out/production/Arcade-Haven/grid/Level3.txt @@ -0,0 +1,15 @@ +19 16 16 16 16 16 16 16 16 16 16 16 16 16 20 +15 1 1 1 1 1 1 1 1 1 1 1 1 1 15 +18 1 11 1 11 1 19 16 13 1 11 1 11 1 17 +1 1 15 1 15 1 15 1 1 1 15 1 15 1 1 +20 1 15 -26 15 1 15 -28 1 1 15 1 17 16 24 +15 1 17 16 18 1 17 16 13 1 15 1 1 1 15 +15 1 1 1 1 1 1 1 1 1 15 1 11 1 15 +15 1 19 16 13 1 19 16 20 1 15 1 12 1 15 +15 1 15 1 1 1 15 0 15 1 15 1 1 -29 15 +18 1 17 16 20 1 23 16 25 1 15 1 14 16 22 +1 1 1 1 15 1 15 0 15 1 15 1 1 1 1 +20 1 14 16 18 1 17 16 18 1 15 1 19 16 24 +15 1 1 1 1 1 1 1 1 1 12 1 12 1 15 +15 1 1 11 1 11 1 1 1 1 1 1 1 1 15 +17 16 16 22 16 22 16 16 16 16 16 16 16 16 18 diff --git a/out/production/Arcade-Haven/pacman/DoublePoints.class b/out/production/Arcade-Haven/pacman/DoublePoints.class index 0d3c91ed58fb8d1b63a5369112f7335f26250792..6a7ec23f61cc92159fcff47fe66893bc88cc26e7 100644 GIT binary patch delta 398 zcmYL^%}&BV6otQm4i#FVfZ`9Jpsi?Gm>Azcx2{cGnHUonCMKG=Gdu)Kp8};Zap42_ zM6QgdQ^n1_b7$^3-4D!Nb7D%ycLbs8-yiN2qgHEU-*n z6Eui)lZ&5Z=BX!Xbd*s_o1-YBJU)NHOXrj>Unh9u@f>S!GVH&52P;)wl!ja*Hfa*m za^}9;thb;5-a6pP-+yXO*H!ACqYR4O1tnNe N0yZ4QC{?cR{s1OHAano# delta 363 zcmYk0OHRWu6h)7dIB7n#Dc=AEN&z9<0TN;fOxXY{V9-63JuqYym57iSumD!X2ytyo z5gxqzp8f8*e#?LC<@fLB7jVy2Mb2@FW#-FC$tkmfvx52N=D~~$Mh)jI8ZKBAuP^3l ztn|sgYXuf!U}@s8sWCnNh26;(~Nb6O5VY#+z4yWzx>IcRh)lUbj8z za`{eXpL?=_w`Mymjsz}+sW=eY!(9Xn@Q#*g2<+t9(RYMrm%Z@sefeVaqvlj^bxd3R dPZQqTCek*9%w60aQtBb47Tu>94rNI=`UAhv8Eyao diff --git a/out/production/Arcade-Haven/pacman/GameEngine$1.class b/out/production/Arcade-Haven/pacman/GameEngine$1.class index b2cccd35a28364768ac15344bbe11b24a2e9f046..d2e68b6ad34410fecc12e8faf11d69d5989398ee 100644 GIT binary patch delta 807 zcmZvayH6BR6vlsdXP04y3$EaT3JQo11O*?6C?Wy^Dyt&CAI-#>m`&EjEE_c@1}#i1 z>?jNr##p$86%jD8u(G1}uP{*)gGNF0Tn3FM&dvGG_nmvrJia@xoaaTs?BeS;Kns^0 zN@;K@qtRs>+a2m@GSF;bhr>>GxdOY5Y%#FMKM+6>!gV84NO0|yLr*c`O!oJ_VV z|B$AOZp|tZnsT~rdNhaW)%4M?Ibz@_$7}{PN$NDmIiWeppyrg3L!7obqd9BJ=S=0i zfeU8tqJc~FznoPCYBYK+oAMPE$s69)>t3e0U*u5W`90ad%LVO<#D6yw`c^8_Go0~L zxzun*5laU*gS5g)dn37I$Ya@HB*;lE6Wsn&8_9Xu95rHKnRuB{@woX)p%IC4Dp0H* zTZmMq)`%_;1@BqAv}Zb8Dp@DlFf*rQt*6>dff~n>g|ZuGusRy1P*X%Fh)!0$Sels= zER?8}@FZ#^-j3a~dPg6dW^0;go=1j8r-|jcAKs#1hQbNjLg83VA#vk=+J8cAsETIL z;|zwPI7}r^=`>7kwjxi<-;LG(HjX}{WVth*r)Zh3oRs&oFivz67yLkskHS82g*kk_ zFw9r7eB%z^xyu3%_`ySdGAqWtQx>09j78f{(U q%7aRA7Kp2P1`@72PnTP7%it#2iLjY1lB4p=Zly|?E9RFbb6I zpj&f;n?7CKve0AUwofm2v_Q(ryB7K^^jjG481xug&5fw}VZ#WchDHKI6QdquhI^z9 z<4hPPElhFW*jNXTv6c`ic9$-N%7bqc2yAA z1BBH{G|`OWLg}s3I(boaSQP9M6O30YwB$>oKv(;eR9vRTcFAUQIP$@E>DWocR)j?) zS|yewk`m=odnog2v1c9SY!IrDu{5-STOn=fI^hpQ-qBJMzLTmE9b}(n-xEJ8k5-7D zQL`%hI#|Ey>P&mMe36;H@|166`Ob5Gkmn~a*ykk&1zz)uH~eOqLpC|$Gbhy{lQsM2 zLvD-tHW|+4Bkgp^6H8j1WNP^UbJY2BqgX-dlPIy$*3IV2Bxjf5~Qt@V;+{RhQs BPjUbN diff --git a/out/production/Arcade-Haven/pacman/GameEngine.class b/out/production/Arcade-Haven/pacman/GameEngine.class index 50d2722691ee59f1e432b4ca7e5f7595f5ee20ca..5684d13e7e120cd72b41c6e0b177398629ac056e 100644 GIT binary patch literal 10462 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 e^ZQZ}Nv%o6?rJ(( z-Zd{#rlo+(3Q3w-Y4_U?{R{onulbnvezQnD=CjY9bLP98?>+B%zi(%HXNGy_erGp; z3HVLNIGAy8;bmdAtJtAKfvIArhGr4&66O^RuL}Q~SoFG1^M){Qs(4FB5_W6Yqhhay zw{`5pejS5gsW_mcKMo4>j*5469KvB8M{qPAtB&Egh7)4lNs;lCh~5)>Ppdd1GN08k z4Ci#bj}~D*h{K0CFU&_OF6hV-2rugJ3IDN<>{tz-sFQGjIhFVLBuzIpLRq?rjoA^S-EdyWTD-~ah@7ofj3Hp_$iiFh6;;fQK0rybLX)U}y#UjyoTg5Ik|6XnUWGkztSi?C0*!W=Ig+K2nJqaHiwN;w|5lt zBG0vv^p9o0Je~@U8YrH z^ab)n#iL|*pGH9|hNR{)_9(d#WJED^Vb4g8auSIT<6}thmbF7x*09yhiq!JpX0wC# z>}4Cszx`W7hJzT0a=uv=lv*Xsd3cV<%JB@=aB8hx;RNCv%xIb2#(}JKIaZJ(2Uequ zV-A77xBhah&B--qO>mD4^-x#Q3mE@263(mVtA0uWpM#DbWR>67-szupJER2Xt^FWCyL=7)tz4L(P+F8j9A{RvD)98RodG= z3V5V1JAzT7`j~oi5YM=Y*X#v0ZVUQhE7GwIne6{8`g#0bgdHq+CrfFzNeB?iP-83;+NC delta 1985 zcmZuyTU1n482-+jGwd^m15Bf%h%j>TI)hA*;w3>-OEDD_!m!ae!h{zDgHb89$;3-} z3y*1ei|9g{l>!bUB+DLJt9tFJhgOfRUVF=B+PBZR$Oj*0|NHEJ@9+P=@BjCn;rv5^ z_%9EJM*+;isK9Omv#`el1$*VtspCz9_ANQ=6WDJ+#{nI03&eH2W8fg(HQ>V`fi44C zI4p-F0!IxT!+Qqa$MJNWz)2mas ziv|j?N8plyB55xhn3hWJia=Q4lkVSRE_J3|tF(>JsEJvPJJwjcYOO6TQ4(RY1Aiz7 z6{Xs?)W3}$flmc`8P?vUH7cLkKWK&aUs^$x0{m)xa0zA*76 z`b>O&~@U;T3+!1cE=&y;jbDO|*6W`!l zf$vP*z)gXE`8}XO$v3eUgCF@&T*kBQqDHZg+l1@4&GAqljg z)ZUx6SbduIcG|{)lOmzmt2~Lg!g2#?$UzVx)}xqTE||#1?8m;{tUANdr-Kl*kis~Y z+R*C!Q7Ig7_qAhbIgX{=WkwUEF8I?9Oq~3uqiE(R+lNkR$W;_L20}pB)(EQZ)M@)DS zFF2qcX1ok52)B}O8hPlba#CBxk=;j+4EQU3ZrVz8QY~k)a^s-g zhfDbv*#a*s|6uYxqNk|V(Y*n$a3iTIv$*czN`yp4%QcQ_*=V^tbQd{xK}JqI+pm}T zMM)Bq{lXjA>eo306Ug1rrIX@sU4rA!q2dJcLbDSHNXn`HD?vKvZ}3*MQ~wT(M~r>8 z8#B?#!tSQpG3L7ub=Z$ralnxv!c+=)hol5LCbA>rlDX6_GR8cDdTewEM|d#e=n}yu zDycG99Tk@PWm3Hc&fE;Vl4@_EPYN>)+Cw7iY-xc;fhK{d!rp$Jy?-AbtQS8ZW3HLZS1SSC*?*2kQr+X-&MWeONSt zB6_Dj*&7(aGST~=@r*|qNMJrb=}Tk^?R+sSQh>!yH}K)|W_h!I#7x%! Y`%1|9}pAe3U@V^C+{pS*`DnN2bTZ< delta 41 xcmZ3=wv=sy5fdZZWMif%L2d>%1|9}(23`gU20jKQ2L8$On8FxECVyoz005Z-2U!3B diff --git a/res/META-INF/MANIFEST.MF b/res/META-INF/MANIFEST.MF deleted file mode 100644 index cfcd67c..0000000 --- a/res/META-INF/MANIFEST.MF +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -Main-Class: GameMain - diff --git a/src/experiment/Character.java b/src/experiment/Character.java deleted file mode 100644 index 16f956a..0000000 --- a/src/experiment/Character.java +++ /dev/null @@ -1,23 +0,0 @@ -package experiment; - -import java.awt.image.BufferedImage; - -public class Character { - - int x, y; - - int step; - - int heightLimit; - - int [][] map; - - int lives; - - BufferedImage[] left = new BufferedImage[4]; - BufferedImage[] right = new BufferedImage[4]; - BufferedImage[] up = new BufferedImage[4]; - BufferedImage[] down = new BufferedImage[4]; - - -} diff --git a/src/experiment/Echo.java b/src/experiment/Echo.java deleted file mode 100644 index 9a5af17..0000000 --- a/src/experiment/Echo.java +++ /dev/null @@ -1,107 +0,0 @@ -package experiment; - -import java.awt.*; -import java.io.*; -import java.net.*; -import java.util.Scanner; -import javax.swing.*; - -public class Echo implements Runnable { - - private final JFrame f = new JFrame(); - private final JTextField tf = new JTextField(25); - private final JTextArea ta = new JTextArea(15, 25); - private final JButton send = new JButton("Send"); - - private static final String HOST = "127.0.0.1"; - private static final int PORT = 12345; - - private volatile PrintWriter out; - private Scanner in; - - private Thread thread; - - private Kind kind; - - public Echo(Kind kind) { - this.kind = kind; - - ta.setLineWrap(true); - ta.setWrapStyleWord(true); - f.setTitle("experiment.Echo " + kind); - f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); - f.getRootPane().setDefaultButton(send); - f.add(tf, BorderLayout.CENTER); - f.add(new JScrollPane(ta), BorderLayout.NORTH); - f.add(send, BorderLayout.SOUTH); - f.setLocation(kind.offset, 300); - f.pack(); - - send.addActionListener(e -> { - String s = tf.getText(); - if (out != null) out.println(s); - display(s); - tf.setText(""); - }); - - thread = new Thread(this, kind.toString()); - } - - public void start() { - f.setVisible(true); - thread.start(); - } - - @Override - public void run() { - try { - Socket socket; - if (kind == Kind.Client) { - socket = new Socket(HOST, PORT); - } else { - ServerSocket ss = new ServerSocket(PORT); - socket = ss.accept(); - } - in = new Scanner(socket.getInputStream()); - out = new PrintWriter(socket.getOutputStream(), true); - display("Connected"); - while (true) - display(in.nextLine()); - } catch (Exception e) { - display(e.getMessage()); - e.printStackTrace(System.err); - } - } - - private void display(final String s) { - EventQueue.invokeLater(() -> ta.append(s + "\u23CE\n")); - } - - public static void main(String[] args) { - EventQueue.invokeLater(() -> { - new Echo(Kind.Server).start(); - new Echo(Kind.Client).start(); - }); - } -} - -enum Kind { - Client(100, "Trying"), - Server(500, "Awaiting"); - - public int offset; - public String activity; - - Kind(int offset, String activity) { - this.offset = offset; - this.activity = activity; - } - - @Override - public String toString() { - return "experiment.Kind{" + - "offset=" + offset + - ", activity='" + activity + '\'' + - '}'; - } -} \ No newline at end of file diff --git a/src/experiment/SBClient.java b/src/experiment/SBClient.java deleted file mode 100644 index 4c9de19..0000000 --- a/src/experiment/SBClient.java +++ /dev/null @@ -1,158 +0,0 @@ -package experiment; - -import networking.Action; -import networking.Type; - -import java.io.*; -import java.net.InetSocketAddress; -import java.nio.channels.SocketChannel; - -/** - *

A plug-and-play client instance. It has two sets of sending functions: - * pre-login and post-login. In pre-login phase, you can call - * {@link SBClient#login(String, String)} and - * {@link SBClient#signup(String, String)}. In post-login phase, you can call - * {@link SBClient#sendMessage(String, String)} to send a message, - * {@link SBClient#userlist()} to obtain a list of online users and - * {@link SBClient#logoff()} to leave. There will be a response message to each - * of these functions.

- * - *

Every function call returns a {@link SBMessage} object that is just sent - * to the server. You should put this message into a pending queue until you - * receives server's response then make a action correspondingly. The server's - * response has the same sequence number so you can distinguish them. Messages - * sent from other users has sequence number (-2), so you know they are messages - * actively sent from the server that doesn't need to be checked locally. You - * can put incoming messages directly to the dialog box.

- */ -public class SBClient { - - /** SocketChannel connected to the server. */ - private SocketChannel schannel; - - /** Reader of socket, used to receive messages from the server. */ - private ObjectInputStream in; - - /** Writer of socket, used to write messages to the server. */ - private ObjectOutputStream out; - - /** - * Current sequence number that is used to send the next message. It is - * initialized to a random number to avoid palyback attack. - */ - int sequence; - - /** - * Starts a client instance - * @param host host address (e.g., csil-xx.cs.ucsb.edu) - * @param port host port number - * @throws IOException cannot connect to server - */ - public SBClient(String host, int port) - throws IOException, ClassNotFoundException { - // set up client connection - schannel = SocketChannel.open(); - schannel.configureBlocking(true); - if (!schannel.connect(new InetSocketAddress(host, port))) - System.exit(1); - out = new ObjectOutputStream(schannel.socket().getOutputStream()); - in = new ObjectInputStream(schannel.socket().getInputStream()); - sequence = (int)(Math.random() * 10000); - - // init handshake - SBMessage init = sendInfo("init"); - System.out.println(init); - SBMessage ack = (SBMessage) in.readObject(); - System.out.println(ack); - } - - /** - * Close a running client instance. - * @throws IOException error happened when closing socket - */ - public void close() throws IOException { - schannel.close(); - } - - public boolean isAlive() { - return schannel.isConnected(); - } - - public SocketChannel getSchannel() { - return schannel; - } - - public ObjectInputStream getIn() { - return in; - } - - public ObjectOutputStream getOut() { - return out; - } - - public SBMessage login(String username, String password) throws IOException { - SBMessage msg = new SBMessage() - .setType(Type.control) - .setAction(Action.login) - .setSequence(sequence++) - .setBody(username + " " + password); - out.writeObject(msg); - return msg; - } - - public SBMessage signup(String username, String password) throws IOException { - SBMessage msg = new SBMessage() - .setType(Type.control) - .setAction(Action.signup) - .setSequence(sequence++) - .setBody(username + " " + password); - out.writeObject(msg); - return msg; - } - - public SBMessage sendMessage(String username, String body) throws IOException { - SBMessage msg = new SBMessage() - .setType(Type.message) - .setReceiver(username) - .setSequence(sequence++) - .setBody(body); - out.writeObject(msg); - return msg; - } - - public SBMessage logoff() throws IOException { - SBMessage msg = new SBMessage() - .setType(Type.control) - .setAction(Action.bye) - .setSequence(sequence++); - out.writeObject(msg); - return msg; - } - - public SBMessage userlist() throws IOException { - SBMessage msg = new SBMessage() - .setType(Type.control) - .setAction(Action.userlist) - .setSequence(sequence++); - out.writeObject(msg); - System.out.println("sent: " + msg); - return msg; - } - - public SBMessage sendInfo(String body) throws IOException { - SBMessage msg = new SBMessage() - .setType(Type.info) - .setReceiver("Server") - .setBody(body); - out.writeObject(msg); - return msg; - } - - public static void main(String[] args) - throws IOException, InterruptedException, ClassNotFoundException { - SBClient client = new SBClient("csil-24.cs.ucsb.edu", 23333); - client.login("sjobs", "12345678"); - client.userlist(); - client.logoff(); - } -} diff --git a/src/experiment/SBMessage.java b/src/experiment/SBMessage.java deleted file mode 100644 index a865829..0000000 --- a/src/experiment/SBMessage.java +++ /dev/null @@ -1,172 +0,0 @@ -package experiment; - -import networking.Action; -import networking.Type; - -import java.io.Serializable; -import java.util.Date; - -/** - *

An {@link SBMessage} is a message being transmitted between a - * {@link SBServer} and a {@link SBClient}. It encapsulates necessary - * information in a message, making parsing easier. Every {@link SBMessage} has - * a type and action. You can think of action as a subtype. It also has a - * timestamp representing the time this message being created, which is useful - * in some cases. {@link SBMessage} applies factory constructor design pattern, - * so you can set message fields in a way you feel most comfortable. For - * example, the following expression creates a conversation message:

- * - *
- * {@code
- * experiment.SBMessage msg = new experiment.SBMessage()
- *         .setType(networking.Type.message)
- *         .setAction(networking.Action.send)
- *         .setSequence(sequence++)
- *         .setSender("Alice")
- *         .setReceiver("Bob")
- *         .setBody("Hey how are you doing?");
- * }
- * 
- * - *

For parsing, as long as you know message type and action, you know what - * fields are related and valid.

- * - *

There is a sequence number for each message. At the beginning, a client - * and a server decide the initial sequence number. For each of the following - * message pairs, sequence should be incremented by 1. This is useful when you - * have a lot of messages sent and want to figure out which message do all - * responses you receive from the server response to. The detail design is still - * under working.

- * - *

{@link Type#message} is a conversation message. It doesn't have an action. - * It should set {@link SBMessage#receiver} and {@link SBMessage#body} fields.

- * - *

{@link Type#control} is a general purpose message that is used to perform - * something. It uses {@link SBMessage#action} field to specify what exactly - * it wants to do. Currently it supports

- * - *
    - *
  • {@link Action#signup} for user signup, with {@link SBMessage#sender} - * (for username) and {@link SBMessage#body} (for password) set;
  • - *
  • {@link Action#login} for user login, with {@link SBMessage#sender} - * (for username) and {@link SBMessage#body} (for password) set;
  • - *
  • {@link Action#bye} for user logoff, which doesn't need any fields
  • - *
  • {@link Action#userlist} to acquire online user list.
  • - *
- * - *

{@link Type#info} is a message sent by the server to tell client some - * information. Currently this type isn't being used.

- */ -public class SBMessage implements Serializable { - - /** Message type. */ - public Type type; - - /** Message action, associated to its type. */ - public Action action; - - /** Time this instance initialized. */ - public Date timestamp = new Date(); - - /** Sequence number. Invalid if smaller than 0. */ - public int sequence = -1; - - /** Sender username, if any. */ - public String sender; - - /** Recipient username, if any. */ - public String receiver; - - /** Message body. */ - public String body; - - /** - * General purpose flag. You can use it to indicate something that is - * either true of false, e.g., whether login succeeds or not, etc. - */ - boolean flag; - - public SBMessage() { - } - - public SBMessage setType(Type type) { - this.type = type; - return this; - } - - public SBMessage setAction(Action action) { - this.action = action; - return this; - } - - public SBMessage setSequence(int sequence) { - this.sequence = sequence; - return this; - } - - public SBMessage setBody(String body) { - this.body = body; - return this; - } - - public SBMessage setSender(String sender) { - this.sender = sender; - return this; - } - - public SBMessage setReceiver(String receiver) { - this.receiver = receiver; - return this; - } - - public SBMessage setFlag(boolean flag) { - this.flag = flag; - return this; - } - - public Type getType() { - return type; - } - - public Action getAction() { - return action; - } - - public Date getTimestamp() { - return timestamp; - } - - public int getSequence() { - return sequence; - } - - public String getBody() { - return body; - } - - public String getSender() { - return sender; - } - - public String getReceiver() { - return receiver; - } - - public boolean getFlag() { - return flag; - } - - @Override - public String toString() { - return "experiment.SBMessage{" + - "type=" + type + - ", action=" + action + - ", timestamp=" + timestamp + - ", sequence=" + sequence + - ", sender='" + sender + '\'' + - ", receiver='" + receiver + '\'' + - ", body='" + body + '\'' + - ", flag=" + flag + - '}'; - } -} diff --git a/src/experiment/SBServer.java b/src/experiment/SBServer.java deleted file mode 100644 index ea218c8..0000000 --- a/src/experiment/SBServer.java +++ /dev/null @@ -1,280 +0,0 @@ -package experiment; - -import networking.Action; -import networking.DBManage; -import networking.Type; - -import java.io.*; -import java.net.ServerSocket; -import java.net.Socket; -import java.util.Hashtable; -import java.util.Map; -import java.util.logging.Logger; - -/** - * {@link SBServer} is the main server that validates user login and user - * message forwarding. When it starts, it listens to a specific port for all - * incoming messages. - * - * Every connection is handled by a separated {@link SBServer.ClientConnector} - * object, which extends {@link Thread} so can run on another thread. It talks - * to each clients using a specific SBTalk protocol. Each message is of the - * format: - * - * Message = Type Action Data - * - * There are two Type for now: MSG and CTRL. MSG is used for user's dialog, and - * CTRL is for general purpose, e.g., login, logoff, register, etc. - */ -public class SBServer { - - /** The port the server will listen on. */ - private final int port; - - /** The socket that used to listen on {@code port}. */ - private ServerSocket listener; - - /** Contains all online users and their input stream (so you can write to them easily). */ - private final Map clientWriters = new Hashtable<>(); - - /** Writes server's log. */ - private final Logger logger = Logger.getLogger(SBServer.class.getName()); - - /** A database connection that is used in various methods. */ - private final DBManage db = new DBManage(); - - /** - * Initializes the server. Only the port number is set. {@link SBServer#run()} - * needs to be called explicitly so the server will be able to listen to - * incoming messages. - * - * @param port the port number this server will listen on - */ - public SBServer(int port) { - this.port = port; - logger.info("Server binds to port " + port); - logger.info("Server starts"); - } - - /** - * Runs the server so it listens for incoming messages and dispatches them - * to a separate handler thread. - */ - public void run() { - try { - listener = new ServerSocket(this.port); - } catch (IOException e) { - logger.severe("Server cannot start. Unable to create a ServerSocket"); - return; - } - while (true) { - try { - Socket socket = listener.accept(); - logger.info("Accepted a new connection"); - new ClientConnector(socket).start(); - } catch (IOException e) { - logger.warning("Error on accepting a new connection"); - close(); - } - } - } - - /** - * Closes the server. This method should only be called on a running server. - */ - public void close() { - db.disconnect(); - clientWriters.forEach((k, v) -> { - try { - v.close(); - } catch (IOException e) { - logger.warning("Error on closing connection to " + k); - } - }); - try { - listener.close(); - } catch (IOException e) { - logger.warning("Error on closing the server's ServerSocket"); - } finally { - listener = null; - } - } - - /** - * A {@link ClientConnector} is a user connection thread. It handles - * the communication between a user and the server. It is a inner class of - * server because it has to share states with the server. - */ - private class ClientConnector extends Thread { - - /** The user's name it connects to. */ - private String name; - - /** The connection to this user. */ - private Socket socket; - - /** Reader of socket. */ - private ObjectInputStream in; - - /** Writer of socket. */ - private ObjectOutputStream out; - - /** - * Creates a {@link ClientConnector} given a newly accepted socket. - * @param socket a newly accepted socket to be handled - */ - public ClientConnector(Socket socket) { - this.socket = socket; - } - - /** - * Responses to each incoming message based on its type and action. - * @param msg message sent from the user - * @throws IOException all exceptions related to socket - */ - private void response(SBMessage msg) throws IOException { - - System.out.println("\033[33mreceived message: " + msg + "\033[0m"); - - Type type = msg.getType(); - Action action = msg.getAction(); - - if (type == Type.message) { - - msg.setSender(name); - ObjectOutputStream receiverWriter = clientWriters.get(msg.receiver); - if (receiverWriter != null) { - receiverWriter.writeObject(msg); - out.writeObject(serverInfo("sent", true)); - } else { - out.writeObject(serverInfo("receiver not online", false)); - } - - } else if (type == Type.control) { - if (action == Action.login) { - - try { - String[] loginInfo = msg.getBody().split(" "); - if (db.userIdentityValidation(loginInfo[0], loginInfo[1]) == 0) { - name = loginInfo[0]; - clientWriters.put(name, out); - out.writeObject(serverInfo("succeed", true, msg.getSequence())); - logger.info("user <" + loginInfo[0] + "> log in"); - } else { - out.writeObject(serverInfo("fail", false, msg.getSequence())); - } - } catch (Exception e) { - e.printStackTrace(); - out.writeObject(serverInfo("wrong format", false, msg.getSequence())); - } - - } else if (action == Action.bye) { - - clientWriters.remove(name); - out.writeObject(serverInfo("bye", true, msg.getSequence())); - try { - socket.close(); - } catch (IOException e) { - logger.warning("Error on closing socket"); - } - - } else if (action == Action.signup) { - - String[] signupInfo = msg.getBody().split(" "); - if (db.userRegistration(signupInfo[0], signupInfo[1])) { - out.writeObject(serverInfo("succeed", true, msg.getSequence())); - } else { - out.writeObject(serverInfo("fail", false, msg.getSequence())); - } - - } else if (action == Action.userlist) { - - StringBuilder sb = new StringBuilder(); - clientWriters.forEach((username, out) -> sb.append(username).append(" ")); - logger.info("userlist: " + sb.toString()); - out.writeObject(serverInfo(sb.toString(), true, msg.getSequence())); - - } else { - out.writeObject(serverInfo("cannot understand message", false, msg.getSequence())); - } - } else if (type == Type.info) { - out.writeObject(serverInfo("received", true, msg.getSequence())); - } else { - out.writeObject(serverInfo("cannot understand message", false, msg.getSequence())); - } - } - - /** - * Creates a {@link SBMessage} of {@link Type#info} type with given body. - * @param body message body - * @return a newly created {@link SBMessage} - */ - private SBMessage serverInfo(String body) { - return new SBMessage().setType(Type.info).setBody(body); - } - - /** - * Creates a {@link SBMessage} of {@link Type#info} type with given body - * and a given flag indicating success or not. - * @param body message body - * @param flag flag indicating success or not of last action - * @return a newly created {@link SBMessage} - */ - private SBMessage serverInfo(String body, boolean flag) { - return new SBMessage().setType(Type.info).setBody(body).setFlag(flag); - } - - private SBMessage serverInfo(String body, boolean flag, int sequence) { - return new SBMessage().setType(Type.info).setBody(body).setFlag(flag).setSequence(sequence); - } - - /** - * A new {@link ClientConnector} is spawned for every connection - * accepted by the server. It first validates user login, then put user - * into server's online user list. It listens to user messages and call - * {@link ClientConnector#response(SBMessage)} to parse user message and - * make response. - */ - @Override - public void run() { - try { - out = new ObjectOutputStream(socket.getOutputStream()); - in = new ObjectInputStream(socket.getInputStream()); - - while (true) { - SBMessage message = (SBMessage)in.readObject(); - if (message == null) { - socket.close(); - clientWriters.remove(name); - logger.info(name + " logged off"); - return; - } - - try { - response(message); - } catch (Exception e) { - out.writeObject(serverInfo("error on receiving message", false)); - } - } - - } catch (IOException e) { - logger.info("user <" + name + "> log out"); - } catch (ClassNotFoundException e) { - logger.warning("Class SBMessage not found"); - } finally { - if (name != null) - clientWriters.remove(name); - try { - socket.close(); - } catch (IOException e) { - logger.warning(e.getMessage()); - } - } - } - } - - public static void main(String[] args) throws Exception { - SBServer server = new SBServer(23333); - server.run(); - } -} diff --git a/src/experiment/Server2ChatTest.java b/src/experiment/Server2ChatTest.java deleted file mode 100644 index 54bb1c3..0000000 --- a/src/experiment/Server2ChatTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package experiment; - -import java.io.IOException; -import java.io.PrintWriter; -import java.net.Socket; -import java.util.Scanner; - -/** - * Created by yuanqili on 5/23/17. - */ -public class Server2ChatTest { - - public static void main(String[] args) throws IOException { - - Socket socket = new Socket("localhost", 23333); - PrintWriter out = new PrintWriter(socket.getOutputStream(), true); - Scanner in = new Scanner(socket.getInputStream()); - - -// out.println("login timcook 123456"); - - out.println("login ucsb 12345678"); - out.println("info hahaha"); - out.println("userlist"); - out.println("message timcook hahahaha"); - -// System.out.println(in.nextLine()); -// System.out.println(in.nextLine()); - - while (in.hasNextLine()) - System.out.println(in.nextLine()); - } -} diff --git a/src/pacman/GameEngine.java b/src/pacman/GameEngine.java old mode 100755 new mode 100644 index f235bf0..279ff38 --- a/src/pacman/GameEngine.java +++ b/src/pacman/GameEngine.java @@ -87,11 +87,6 @@ public class GameEngine extends JPanel implements ActionListener { */ Color fontColor = new Color(255, 54, 42); - /** - * An instance of GridReadCreate which represents the grid for the game. - */ - GridReadCreate grid = new GridReadCreate(); - /** * An instance of Pacman, containing the character variables and methods. */ @@ -173,6 +168,31 @@ class Time { */ String username; + /** + * This boolean checks if the game should move on to the next level. + */ + boolean nextLevel = true; + + /** + * Level number + */ + int level = 1; + + /** + * An instance of GridReadCreate which represents the grid for the game. + */ + GridReadCreate grid = new GridReadCreate(level); + + /** + * Decides which level is the last level. + */ + int lastLevel = 3; + + /** + * Keeps track of the total score among all levels. + */ + int totalScore =0; + public GameEngine() {} public GameEngine(PrintWriter out, String username) { @@ -232,11 +252,18 @@ public void keyPressed(KeyEvent e) { pause = true; break; case KeyEvent.VK_R: - if(pac.lossCondition() || (timeLimit[0]-(frameCount/100)) <=0) + if(pac.lossCondition() || (timeLimit[0]-(frameCount/100)) <=0 || (grid.winCondition() && (level == lastLevel))) reset = true; break; case KeyEvent.VK_SPACE: - start = true; + if(grid.winCondition() && (level < lastLevel)) + { + nextLevel = true; + } + else + { + start = true; + } break; } } @@ -298,8 +325,9 @@ public void run() { } characterSetup(); reset = false; - } else if (reset && (pac.lossCondition() || (timeLimit[0] - (frameCount / 100)) <= 0)) { + } else if (reset && (pac.lossCondition() || (timeLimit[0] - (frameCount / 100)) <= 0 || (grid.winCondition() && level == lastLevel))) { lives = 3; + level = 1; timeLimit[0] = constTimeLimit; firstGameOver = true; frameCount = 0; @@ -307,8 +335,22 @@ public void run() { ghostsY = new int[]{30, 210, 390, 240}; if (activeItem.peekFirst() != null) deactivateAllItems(); + grid = new GridReadCreate(level); + characterSetup(); + grid.score = 0; + totalScore = 0; + } + if(grid.winCondition() && nextLevel && (level < lastLevel)) + { + level += 1; + lives = 3; + timeLimit[0] = constTimeLimit; + firstGameOver = true; + frameCount = 0; + if (activeItem.peekFirst() != null) + deactivateAllItems(); + grid = new GridReadCreate(level); characterSetup(); - grid = new GridReadCreate(); grid.score = 0; } revalidate(); @@ -331,12 +373,20 @@ private void winScreen(Graphics g) { g.fillRect(50, 450 / 2 - 30, 450 - 100, 50); g.setColor(new Color(220, 200, 25)); //grid.score += (timeLimit - (frameCount/100)) * 10; - String s = "Score: " + grid.score; + String s = "Score: " + (grid.score + totalScore); g.drawString(s, 20, 20); - g.drawString("YOU WON!", 190, 220); + if(level < lastLevel) { + g.drawString("YOU WON!", 180, 213); + g.drawString("PRESS SPACE TO MOVE ON TO THE NEXT LEVEL", 68, 236); + } + else + { + g.drawString("YOU WON!", 190, 210); + g.drawString("PRESS R TO RESTART AT LEVEL 1", 130, 240); + } } - /** + /**pr * Displays the losing screen. * * @param g Graphics object that contains a method for drawing strings. @@ -394,7 +444,7 @@ private void resetScreen(Graphics g) { g.fillRect(50, 450 / 2 - 30, 450 - 100, 50 + 30); g.setColor(new Color(220, 200, 25)); g.drawString("YOU LOST!", 190, 220); - g.drawString("PRESS R TO RESTART GAME", 130, 250); + g.drawString("PRESS R TO RESTART AT LEVEL 1", 130, 250); } /** @@ -474,26 +524,36 @@ public void draw(Graphics g) { gho4.drawGhost(g2d); String l = "Lives: " + lives; String l2 = "Time: " + (timeLimit[0] - (frameCount / 100)); - String s = "Score: " + grid.score; + String s = "Score: " + (grid.score + totalScore); + String lev = "Level: " + level; g.drawString(s, 20, 20); + g.drawString(lev, 190, 440); g.drawString(l, 360, 20); g.drawString(l2, 180, 20); if (grid.winCondition()) { - if (firstGameOver) { + if (firstGameOver && (level == lastLevel)) { grid.score += (timeLimit[0] - (frameCount / 100)) * 10; firstGameOver = false; // write score to server if (out != null && username != null) - out.println("updatescore " + username + " " + grid.score); + out.println("updatescore " + username + " " + totalScore); + } + else + { + if(firstGameOver) { + grid.score += (timeLimit[0] - (frameCount / 100)) * 10; + totalScore += grid.score; + } } winScreen(g); } if (pac.lossCondition() || (timeLimit[0] - (frameCount / 100)) <= 0) { if (firstGameOver) { + totalScore += grid.score; firstGameOver = false; // write score to server if (out != null && username != null) - out.println("updatescore " + username + " " + grid.score); + out.println("updatescore " + username + " " + totalScore); } resetScreen(g); } diff --git a/src/pacman/GridReadCreate.java b/src/pacman/GridReadCreate.java index b70cf79..93c31d0 100644 --- a/src/pacman/GridReadCreate.java +++ b/src/pacman/GridReadCreate.java @@ -25,7 +25,7 @@ public class GridReadCreate extends JPanel { /** * Name of the file where grid data is stored. */ - final static String FILE_NAME = PATH + "TestData.txt"; + static String FILE_NAME; /** * Array that contains the numbers for each portion of the 15x15 grid. @@ -45,14 +45,16 @@ public class GridReadCreate extends JPanel { /** * Number of dots in the grid. */ - int totalDots = 111; + int totalDots = 0; //111 /** * Default constructor for GridReadCreate objects. Reads and translates a * file into the array. Also creates an instance of a SpeedUp item. + * @param level Chooses which level to load */ - GridReadCreate() { + GridReadCreate(int level) { + FILE_NAME= PATH + "Level" + level + ".txt"; try { translateTo2DArray(readFile(FILE_NAME)); } catch (IOException e) { @@ -93,8 +95,13 @@ List readFile(String name) throws IOException { void translateTo2DArray(List list) { for (int i = 0; i < 15; i++) { String[] split = list.get(i).split(" "); - for (int j = 0; j < split.length; j++) - arr[i][j] = Integer.parseInt(split[j]); + for (int j = 0; j < split.length; j++) { + arr[i][j] = Integer.parseInt(split[j].trim()); + if((arr[i][j]==1) || arr[i][j] < 0) + { + totalDots += 1; + } + } } }