Введение
Для проекта в моем IT-университете я должен создать игру-деминера в приложении Strut2. Для сервера я использую Tomcat.
Вы можете увидеть, как выглядит игра на данный момент:
Когда я нажимаю на коробке мы должны увидеть номер или мину. Для этого случая есть два параметра (X и Y), которые используются для обновления статуса выбранного поля. И чтобы сделать окно кликабельным, я использую код:
<a href="
<s:url action='demineur' method="connexion">
<s:param name="x" value="#x.index"/>
<s:param name="y" value="#y.index"/>
</s:url>
">
Когда мы хотим играть в эту игру, мы должны ввести имя пользователя:
Когда мы входим в игру, у нас есть сеанс, который создается с именем игрока, и во время сеанса мы сохраняем игру.
И когда мы взаимодействуем с игрой сохранение игры - обновление
Шахта создается с помощью API (ModeleDemineur: 1.1), предоставленного учителем, и отображает его как:
demineur. jsp
<table>
<s:iterator status="x" var="ligne" value="cases">
<tr>
<s:iterator status="y" var="case" value="ligne">
<td>
<s:if test="getCachee()">
<a href="
<s:url action='demineur' method="connexion">
<s:param name="x" value="#x.index"/>
<s:param name="y" value="#y.index"/>
</s:url>
">
<img src="${pageContext.request.contextPath}/img/cellCovered.png"/>
</a>
</s:if>
<s:else>
<s:if test="getValeur() == -1">
<img src="${pageContext.request.contextPath}/img/mineExploded.png"/>
</s:if>
<img src="${pageContext.request.contextPath}/img/box<s:property value='getValeur()'/>.png"/>
</s:else>
</td>
</s:iterator>
</tr>
</s:iterator>
</table>
ActionDemineur. java
public class ActionDemineur extends ActionSupport implements SessionAware {
String username;
GestionDemineur demineur;
Plateau plateau;
Case[][] cases;
String val;
String x,y;
private Map<String, Object> session;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public GestionDemineur getDemineur() {
return demineur;
}
public void setDemineur(GestionDemineur demineur) {
this.demineur = demineur;
}
public Plateau getPlateau() {
return plateau;
}
public void setPlateau(Plateau plateau) {
this.plateau = plateau;
}
public Case[][] getCases() {
return cases;
}
public void setCases(Case[][] cases) {
this.cases = cases;
}
public String getVal() {
return val;
}
public void setVal(String val) {
this.val = val;
}
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
@Override
public void setSession(Map<String, Object> map) {
this.session = map;
}
public Map<String, Object> getSession() {
return session;
}
public String connexion() throws ExceptionLoginDejaPris {
if(!session.containsKey("user"))
{
if(username != null)
{
session.put("user", username);
}
else {
return INPUT;
}
}
if(!session.containsKey("plateau")) {
System.err.println("plateau not found");
demineur = new GestionDemineur();
demineur.connexion(username);
plateau = demineur.getPlateau(username);
cases = plateau.getMonPlateau();
session.put("plateau", plateau);
session.put("user", username);
}
username = (String) session.get("user");
plateau = (Plateau) session.get("plateau");
cases = plateau.getMonPlateau();
System.err.println(plateau);
if(x != null && y != null)
{
System.err.println("x and y not null");
System.err.println(Integer.parseInt(x) + " -- " + Integer.parseInt(y));
try {
plateau.decouvrirCase(Integer.parseInt(x), Integer.parseInt(y));
} catch (BombeException e) {
session.remove("plateau", plateau);
session.remove("user", username);
return "perdu";
}
System.err.println(plateau.getMonPlateau()[Integer.parseInt(x)][Integer.parseInt(y)]);
}
return SUCCESS;
}
}
Struts. xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<package name="/" extends="struts-default">
[...]
<action name="demineur" class="struts.ActionDemineur" method="connexion">
<result name="input">/WEB-INF/pages/connexionDemineur.jsp</result>
<result name="success">/WEB-INF/pages/demineur.jsp</result>
<result name="perdu">/WEB-INF/pages/perduDemineur.jsp</result>
</action>
</package>
</struts>
pom. xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.univ-orleans.ufrst.info.l3.pnt</groupId>
<artifactId>HelloStruts2</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.22</version>
</dependency>
[...]
<dependency>
<groupId>fr.miage.orleans.tp</groupId>
<artifactId>ModeleDemineur</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>13</source>
<target>13</target>
<encoding>UTF-8</encoding>
</configuration>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.25.v20191220</version>
</plugin>
</plugins>
</build>
<properties>
<maven.compiler.source>13</maven.compiler.source>
<maven.compiler.target>13</maven.compiler.target>
</properties>
</project>
Ошибки
ERROR ParametersInterceptor Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'x' on 'class com.opensymphony.xwork2.ActionSupport: Error setting expression 'x' with value ['0', ]
ERROR ParametersInterceptor Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'y' on 'class com.opensymphony.xwork2.ActionSupport: Error setting expression 'y' with value ['4', ]
Мои эссе
Я попытался добавить в распорки. xml в строку xml <interceptor-ref name=params />
, но он удаляет данные в сеансе, которые имеют сохранение игра и текущее имя пользователя.
Спасибо за вашу помощь в будущем