Tic-Tac-Toe


<%! Boolean p1=false,p2=false; String p1name,p2name; class Game{ int[][] game; int turns; String winner; public Game() { restart(); }; public void restart(){ turns = 0; game = new int[3][3]; winner = ""; for(int i=0;i<3;i++) for(int j=0;j<3;j++) game[i][j]=0; }; public void play(int r, int c){ game[r][c] = (turns%2==0)?1:2; turns++; }; public String read(int r, int c){ if (game[r][c] == 0) return "   "; if (game[r][c] == 1) return "X"; return "O"; }; public boolean is_free(int r, int c){ return game[r][c]==0; }; public String get_winner(){ return winner; }; public String current_player(){ if(turns%2==0) return "X"; return "O"; }; public boolean is_done(){ for(int i=0;i<3;i++){ if(game[i][0]==1 && game[i][1]==1 && game[i][2]==1){ winner = "X"; return true; } if(game[0][i]==1 && game[1][i]==1 && game[2][i]==1){ winner = "X"; return true; } } if(game[0][0]==1 && game[1][1]==1 && game[2][2]==1){ winner = "X"; return true; } if(game[0][2]==1 && game[1][1]==1 && game[2][0]==1){ winner = "X"; return true; } for(int i=0;i<3;i++){ if(game[i][0]==2 && game[i][1]==2 && game[i][2]==2){ winner = "O"; return true; } if(game[0][i]==2 && game[1][i]==2 && game[2][i]==2){ winner = "O"; return true; } } if(game[0][0]==2 && game[1][1]==2 && game[2][2]==2){ winner = "O"; return true; } if(game[0][2]==2 && game[1][1]==2 && game[2][0]==2){ winner = "O"; return true; } return false; }; }; Game mygame = new Game(); %> <% if(request.getParameter("p1")!=null && !p1 ){ session.setAttribute("p1",true); session.setAttribute("thisPlayer","X"); p1name = request.getParameter("p1name"); p1 = true; }%> <% if(request.getParameter("p2")!=null && !p2){ session.setAttribute("p2",true); session.setAttribute("thisPlayer","O"); p2name = request.getParameter("p2name"); p2 = true; }%> <% if(request.getParameter("leave")!=null){ if(session.getAttribute("p1")!=null){ session.removeAttribute("p1"); p1 = false; } if(session.getAttribute("p2")!=null){ session.removeAttribute("p2"); p2 = false; } session.removeAttribute("thisPlayer"); }%> <% if(!p1 && session.getAttribute("p2")==null){ %> Play as player X!
Name:
<%}%> <% if(!p2 && session.getAttribute("p1")==null ){ %> Play as player O!
Name:
<%}%> <% if(session.getAttribute("p1")!=null||session.getAttribute("p2")!=null){ %> You are currently playing as player <%= session.getAttribute("p1")!=null?"X":"O" %>
<% if(!(p1&&p2)){ %>
Current status: waiting for opponent to join
<%}%> <% } %> <% if(p1&&p2){ //Main game %> Players:
X: <%= p1name %>
O: <%= p2name %>

<% if(request.getParameter("x")!=null){ //Play move int r = Integer.parseInt(request.getParameter("x")); int c = Integer.parseInt(request.getParameter("y")); if(r>2 || r<0 || c>2 || c<0 || !mygame.is_free(r,c)){ %>
Invalid move!
<% }else{ mygame.play(r,c); } } if(request.getParameter("restart")!=null){ mygame.restart(); } %>
<%for(int i=0;i<3;i++){%> <%for(int j=0;j<3;j++){%> <%}%> <%}%>
<%= mygame.read(i,j)%>

Current Status: <% if(mygame.is_done()){ %> Player <%= mygame.get_winner()%> won! <%}else{%> Player <%= mygame.current_player()%> to play <% if(mygame.current_player().equals(session.getAttribute("thisPlayer"))){ //is it my turn? %>
Row:
Column:
<%}else{%>
<%}%> <%}%>
<% } %>