`
woo_program
  • 浏览: 99544 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2实现猜数小游戏

 
阅读更多
    这是一个struts学习的入门实例,用一个比较简单的猜数游戏来实现struts2的MVC三层结构的设计思想,对于学
习Struts2的初学者来说,是一个很不错的练习实例。

1、数据实体访问层DAO

 package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import util.DBConnection;
import entity.Players;
/**
 * 	数据访问类:主要实现对数据的访问换个操作
 * @author niliang
 *
 */
public class DaoGuess {
	/**
	 * 	该方法实现注册用户
	 * @param p Players对象
	 * @throws Exception
	 */
	public void add(Players p) throws Exception {
		String sql = "insert into guess_user (name,password,times) values(?,?,?)";
		Connection conn = DBConnection.getConnection();
		PreparedStatement pst = conn.prepareStatement(sql);
		pst.setString(1, p.getName());
		pst.setString(2, p.getPwd());  
		pst.setInt(3, p.getScore());
		pst.executeUpdate();		 
		DBConnection.close(conn);
		}
	/**
	 * 	该方法实现显示所有已注册的Players对象信息
	 * @return Players类型的List集合
	 * @throws Exception
	 */
	public List<Players> findAll() throws Exception {
		String sql = "select * from guess_user order by times";
		List<Players> persons = new ArrayList<Players>();
		Connection cn = DBConnection.getConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			ps = cn.prepareStatement(sql);
			rs = ps.executeQuery();
			while (rs.next()) {
				Players p = new Players();
				p.setId(rs.getInt(1));
				p.setName(rs.getString(2));
				p.setPwd(rs.getString(3));  
				p.setScore(rs.getInt(4));
				persons.add(p);				 
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		DBConnection.close(rs, ps, cn);
		return persons;
	}
	/**
	 * 	该方法根据指定name查询Players对象信息
	 * @param name 玩家帐号
	 * @return 返回一个Players对象
	 * @throws Exception
	 */
	public Players find(String name) throws Exception {
		Players p = null;
		String sql = "select * from guess_user where name=?";
		Connection conn = DBConnection.getConnection();
		PreparedStatement pst = conn.prepareStatement(sql);
		pst.setString(1, name);
		ResultSet rs = pst.executeQuery();
		if(rs.next()){
			p=new Players();
			p.setId(rs.getInt(1));
			p.setName(rs.getString(2));
			p.setPwd(rs.getString(3));
			p.setScore(rs.getInt(4));
		}
		DBConnection.close(conn);
		return p;
	}
	/**
	 * 	该方法实现更新数据
	 * @param times 玩家猜数完成的次数
	 * @param id 玩家编号
	 * @throws Exception
	 */
	public void update(int times,int id) throws Exception{
		String sql = "update guess_user set times=? where id=?";
		Connection conn = DBConnection.getConnection();
		PreparedStatement pst = conn.prepareStatement(sql);
		pst.setInt(1,times);
		pst.setInt(2,id);
	 pst.executeUpdate();
		DBConnection.close(conn);
	}	 
}

2.实体类POJO

  package entity;
/**
 * 	实体数据类:Players对象
 * @author niliang
 *
 */
public class Players {
	/**
	 *Players对象的基本属性信息 
	 */
	private int id;
	private String name;
	private String pwd;
	private int score=100;//默认值为100
	/**
	 * 属性Id的get()方法
	 * @return
	 */
	public int getId() {
		return id;
	}
	/**
	 * 	属性Id的set()方法
	 * @param id
	 */
	public void setId(int id) {
		this.id = id;
	}
	/**
	 * 	属性Name的get()方法
	 * @return
	 */
	public String getName() {
		return name;
	}
	/**
	 * 	属性Name的set()方法
	 * @param name
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * 属性Pwd的get()方法
	 * @return
	 */
	public String getPwd() {
		return pwd;
	}
	/**
	 * 	属性Pwd的set()方法
	 * @param pwd
	 */
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	/**
	 * 属性Score的get()方法
	 * @return
	 */
	public int getScore() {
		return score;
	}
	/**
	 * 	属性Score的set()方法
	 * @param score
	 */
	public void setScore(int score) {
		this.score = score;
	}	
}

 /******************游戏信息实体类*******************************/
package game;
/**
 * 	实体数据类:GameInfo游戏信息
 * @author niliang
 *
 */
public class GameInfo {
	private int times;
	private int answer;
	private boolean success;
	private String msg; 
	private String player;
	/**
	 * 	属性Player的get()方法
	 * @return
	 */
	public String getPlayer() {
		return player;
	}
	/**
	 * 	属性Player的set()方法
	 * @param player
	 */
	public void setPlayer(String player) {
		this.player = player;
	}
	/**
	 * 	属性Msg的get()方法
	 * @return
	 */
	public String getMsg() {
		return msg;
	}
	/**
	 * 	属性Msg的set()方法
	 * @param msg
	 */
	public void setMsg(String msg) {
		this.msg = msg;
	}
	/**
	 * 	属性Sucess的get()方法
	 * @return
	 */
	public boolean isSuccess() {
		return success;
	}
	/**
	 * 	属性Success的set()方法
	 * @param success
	 */
	public void setSuccess(boolean success) {
		this.success = success;
	}
	/**
	 * 	属性Times的get()方法
	 * @return
	 */
	public int getTimes() {
		return times;
	}
	/**
	 * 	属性Times的set()方法
	 * @param times
	 */
	public void setTimes(int times) {
		this.times = times;
	}
	/**
	 * 	属性Answer的get()方法
	 * @return
	 */
	public int getAnswer() {
		return answer;
	}
	/**
	 * 	属性Anwser的set()方法
	 * @param answer
	 */
	public void setAnswer(int answer) {
		this.answer = answer;
	}
}

 3猜数游戏业务的实现
package game;

import java.util.Random;
/**
 * 	业务逻辑:实现猜数游戏的业务逻辑
 * @author niliang
 *
 */
public class GuessNumber {
	/**
	 * 	该方法实现猜数游戏
	 * @param guessNum 用户输入的数字
	 * @param info	输出的提示消息
	 */
	public void guess(int guessNum,GameInfo info){
		info.setTimes(info.getTimes()+1);
		if(guessNum == info.getAnswer()){
			info.setSuccess(true);
			info.setMsg("(O-^_^-O)恭喜你,你当前用了"+info.getTimes()+"次猜中!!!");
		}else if(guessNum<info.getAnswer()){
			info.setMsg("^_^你猜的数小了,再大点吧");			
		}else{
			info.setMsg("^_^你猜的数大了,再小点吧");	
		}
	}
	/**
	 * 	该方法实现重置游戏
	 * @param info
	 */
	public void reset(GameInfo info){
		Random random=new Random(); 
		int answer=random.nextInt()%100;
		answer=Math.abs(answer)+1;
		System.out.println("random:"+answer);
		info.setAnswer(answer);
		info.setTimes(0);
		info.setSuccess(false);
		info.setMsg("");
	}
}

 4.基本登陆注册的action

package game;

import java.util.Random;
/**
 * 	业务逻辑:实现猜数游戏的业务逻辑
 * @author niliang
 *
 */
public class GuessNumber {
	/**
	 * 	该方法实现猜数游戏
	 * @param guessNum 用户输入的数字
	 * @param info	输出的提示消息
	 */
	public void guess(int guessNum,GameInfo info){
		info.setTimes(info.getTimes()+1);
		if(guessNum == info.getAnswer()){
			info.setSuccess(true);
			info.setMsg("(O-^_^-O)恭喜你,你当前用了"+info.getTimes()+"次猜中!!!");
		}else if(guessNum<info.getAnswer()){
			info.setMsg("^_^你猜的数小了,再大点吧");			
		}else{
			info.setMsg("^_^你猜的数大了,再小点吧");	
		}
	}
	/**
	 * 	该方法实现重置游戏
	 * @param info
	 */
	public void reset(GameInfo info){
		Random random=new Random(); 
		int answer=random.nextInt()%100;
		answer=Math.abs(answer)+1;
		System.out.println("random:"+answer);
		info.setAnswer(answer);
		info.setTimes(0);
		info.setSuccess(false);
		info.setMsg("");
	}
}
////////////////////////////////////////////////////////////////
package action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

import entity.Players;

/**
 * 	拦截器:登录检查
 * @author niliang
 *
 */
public class LoginCheck extends AbstractInterceptor{

	/**
	 * 
	 */
	private static final long serialVersionUID = 2490404583704112520L;

	@Override
	/**
	 * 	重写intercept方法,执行登录检查
	 */
	public String intercept(ActionInvocation invocation) throws Exception {
		 ActionContext ac=invocation.getInvocationContext();
		 Map<String,Object> session=ac.getSession();
		 Players user=(Players)session.get("user");
		 if(user==null){
			 return "login";
		 }else{
			 return invocation.invoke();
		 }	
	}
}
 
//////////////////////////////////////////////////////////////////////////////
package action;

import java.util.List;

import dao.DaoGuess;
import entity.Players;

public class Option {
	/**
	 * 	属性玩家列表集合
	 */
	List<Players> list;
	/**
	 * 	属性list的get()方法
	 * @return 返回Players类型的集合
	 */
	public List<Players> getList() {
		return list;
	}
	/**
	 * 	属性list的set()方法
	 * @param list
	 */
	public void setList(List<Players> list) {
		this.list = list;
	}
	/**
	 * 	该方法显示所有用户
	 * @return
	 */
	public String execute(){
		DaoGuess dao=new DaoGuess();
		try {
			list=dao.findAll();
			return "show";
		} catch (Exception e) { 
			e.printStackTrace();
			return "error";
		}	
	}
}
////////////////////////////////////////////////////////////////////////
package action;

import org.apache.struts2.ServletActionContext;

import dao.DaoGuess;
import entity.Players;
/**
 * 	注册玩家的Action
 * @author niliang
 *
 */
public class RegistAction {
	/**
	 * 属性Players对象
	 */
	private Players p; 
	/**
	 * 	属性 p的get()方法
	 * @return 返回一个Players对象
	 */
	public Players getP() {
		return p;
	}
	/**
	 * 	属性 p的set()方法
	 * @param p
	 */
	public void setP(Players p) {
		this.p = p;
	}
	 
	DaoGuess dao=new DaoGuess();
	/**
	 * 	该方法执行注册Action
	 * @return
	 */
	public String execute(){
		try {
			Players player=dao.find(p.getName());
			//判断玩家是否已经注册
			if(player!=null){
				ServletActionContext.getRequest().setAttribute("reg_error", "帐号已存在");
				return "wrong";
			}
			//保存
			dao.add(p);
			return "add";
		} catch (Exception e) { 
			e.printStackTrace();
			return "error";
		}		
	}
}
 5Struts2的配置文件struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<constant name="struts.action.extension" value="do"/>
	<package name="guessGame" extends="struts-default">
	<!-- 登录拦截 -->
		<interceptors>
			<interceptor name="logincheck" class="action.LoginCheck"/>
		 <interceptor-stack name="demoStack">
		 	<interceptor-ref name="logincheck"/>
		 	<interceptor-ref name="defaultStack"/>
		 </interceptor-stack>
		</interceptors>
	<!-- 定义全局的Result -->
	<global-results>
		<result name="error">/error.jsp</result>
		<result name="login">/login.jsp</result>
	</global-results>
	<!-- 登录 -->
		<action name="login" class="action.Login">
			<result name="success" type="redirect">/menu.jsp</result>
			<result name="exit" type="redirect">/login.jsp</result>
		</action>
	<!-- 注册 -->
		<action name="regist" class="action.RegistAction">
			<result name="add" type="redirect">/login.jsp</result>
			<result name="wrong">/add_player.jsp</result>
		</action>
		
		<action name="guess" class="action.GuessAction">
	  	<interceptor-ref name="demoStack"/>	  	
			<result name="success">/success.jsp</result>
			<result name="wrong">/guess.jsp</result>
			<result name="numerror">guess.jsp</result>
			<result name="init" type="redirect">/guess.jsp</result>
		</action>
		
		<action name="option" class="action.Option">
			<interceptor-ref name="demoStack"/>				
			<result name="show">/showInfo.jsp</result>
		</action>
		
	</package>
</struts> 

   当然这里还有一个连接数据库的连接池的类(DBConnection.java)就没有列出来,读者朋友们可以自己加上。
  • 描述: 项目结构
  • 大小: 31.3 KB
  • 描述: 登陆界面
  • 大小: 29.7 KB
分享到:
评论

相关推荐

    jsp/servlet/Ajax实现的猜数游戏

    【Ajax实现的猜数游戏】是一个基于Web技术的互动应用,它利用了JavaServer Pages (JSP)、Servlet以及Ajax(Asynchronous JavaScript and XML)技术。在这个游戏中,服务器随机生成一个数字,用户在客户端进行猜测,...

    C#WinForm猜数小游戏

    【C# WinForm猜数小游戏】是一个非常适合编程初学者练习的项目,它使用C#语言和Windows Forms(WinForm)框架构建。这个小游戏的核心概念是计算机随机生成一个数字,然后让用户进行猜测,根据用户的猜测给出提示(过...

    java实现猜数游戏

    这个是纯java代码版本的,没有使用JUI窗口制作

    用JAVA实现猜数小游戏

    【标题】:用JAVA实现猜数小游戏 在编程学习中,设计并实现简单的游戏是提升技能和理解语言特性的有效方式。"用JAVA实现猜数小游戏"是一个经典的编程练习,它可以帮助初学者深入理解Java的基本语法、控制流程以及...

    C#猜数小游戏

    通过实现这个猜数小游戏,初学者可以掌握C#的基本编程概念,并逐渐提升编程技能。同时,这个游戏也可以作为进一步学习面向对象编程、错误处理和高级功能(如多线程)的起点。实践出真知,动手编写这样一个小项目,...

    使用JAVA语言,实现猜数游戏

    在本项目中,我们将探讨如何使用Java编程语言来实现一个简单的猜数游戏。这个游戏的核心机制是,计算机随机生成一个介于1和100之间的整数,然后玩家尝试猜测这个数字,程序会根据玩家的猜测给出“偏大”或“偏小”的...

    猜数游戏JAVA猜数,游戏

    猜数,游戏猜数,游戏猜数,游戏猜数,游戏猜数,游戏猜数,游猜数,游戏猜数,游戏猜数,游戏戏猜数,游戏猜数,游戏猜数,游戏

    基于vb的猜数小游戏

    以上就是基于VB的猜数小游戏的实现原理和代码解析。通过这个游戏,你可以熟悉VB的基本编程语法,理解面向对象编程的思想,以及如何创建交互式的应用程序。实际操作过程中,还可以进一步优化界面设计,增加音效、计时...

    猜数小游戏C语言源码

    【猜数小游戏C语言源码】是一个典型的编程学习资源,主要使用C语言编写,适合初学者和有一定经验的程序员进行代码阅读和分析。C语言是一种基础且强大的编程语言,广泛应用于系统开发、嵌入式系统以及游戏开发等领域...

    计时猜数小游戏(web版)

    web实验,规定时间内猜数小游戏。web实验,规定时间内猜数小游戏。

    猜数小游戏EXE版

    【猜数小游戏EXE版】是一款基于VB编程语言开发的休闲益智类应用程序,它源自于课堂上的教学示例,经过个人的改造和增强,旨在提供一个轻量级的娱乐方式,同时也锻炼用户的逻辑思维能力。 在VB(Visual Basic)环境...

    猜数小游戏

    通过这个猜数小游戏项目,学生不仅可以巩固C#的基础知识,还能学习到如何设计和实现一个简单的交互式应用程序,提升问题解决和逻辑思维能力。同时,这也是一个很好的实践机会,让学习者了解程序调试和测试的过程。

    猜数小游戏C++源码

    自己写的一个猜数小游戏C++源码,刚学没多久,老鸟勿下,新手可以参考

    猜数游戏Servlet

    根据以前提供的NumberGuessBean.java文件(模型类),编写SERVLET程序,实现猜数游戏。 重点考察: HttpServletRequest, HttpSession 猜数游戏可以参考TOMCAT提供的JSP 1.2 EXAMPLES

    猜数小游戏java代码

    这个简单的猜数游戏演示了Java的基本语法结构,包括如何导入必要的包、使用`BufferedReader`处理文本输入、生成随机数、控制流程以及逻辑判断等。对于Java初学者来说,它是一个很好的实践项目,可以帮助理解这些基本...

    请阅读附件中的程序,实现猜数游戏,使用图形方式(可以使用AWT或者SWING)来实现猜数游戏

    请阅读附件中的程序,实现猜数游戏, 使用文本方式(控制台输入输出)和使用图形方式(可以使用AWT或者SWING)来实现猜数游戏。 进入程序后,显示文本内容,提示用户输入1-100之间的数字,然后程序对其进行判断...

    猜数小游戏2.0.exe

    猜数小游戏2.0.exe

    c++猜数小游戏.cpp

    用c++编写的小游戏《猜数小游戏》,超好玩,操作简单,休闲娱乐!欢迎游玩。 用c++编写的小游戏《猜数小游戏》,超好玩,操作简单,休闲娱乐!欢迎游玩。

    java实现 JFrame界面实现 猜数游戏

    在这个场景中,我们关注的是使用Java的图形用户界面(GUI)库Swing中的JFrame来实现一个猜数游戏,并结合了幻方的演示程序。 JFrame是Java Swing中的一个核心组件,它是窗口的基础框架,可以用来创建具有菜单、按钮...

Global site tag (gtag.js) - Google Analytics