public class GameModel implements BaseGameModel {
ArrayList gameObservers = new ArrayList();
private int max;
private int min;
private int result;
private String tips;
/**
* 生成随机数
* @return
*/
public int getRandomNum() {
Random rand = new Random();
int randomNum = rand.nextInt(100);
return randomNum;
}
/**
* 实现猜测游戏的逻辑
* @param number
* @param result
* @return
*/
public void play(int number) {
if(number >= min && number <= max ) {
if(number > result) {
max = number;
} else if(number < result){
min = number;
} else {
tips = "您猜对啦!";
updateGame();
return;
}
}
tips = "请输入" + min + "-" + max + "的整数";
updateGame();
}
/**
* 重新开始游戏需要重置一下范围
*/
public void restart() {
min = 0;
max = 100;
tips = "请输入" + min + "-" + max + "的整数";
result = getRandomNum();
updateGame();
}
/**
* 注册视图观察者
*/
public void registerObserver(GameObserver o) {
gameObservers.add(o);
}
/**
* 当model完成相关逻辑后,更新观察者(视图)的状态
*/
public void updateGame() {
for(GameObserver gameObserver : gameObservers) {
gameObserver.updateRange(tips);
}
}
}
GameObserver:
public interface GameObserver {
void updateRange(String tips);
}
GameView:
public class GameView implements GameObserver, ActionListener {
JFrame controlFrame;
JMenu menu;
JMenuItem startMenuItem;
BaseGameModel model;
BaseGameController controller;
JMenuBar menuBar;
JLabel gameTipsLabel;
JTextField gameNumberTextField;
JButton playButton;
JButton restartButton;
public GameView(BaseGameModel model, BaseGameController controller) {
super();
this.model = model;
this.controller = controller;
model.registerObserver((GameObserver)this);
}
public void createControlView() {
// 创建Frame,设置大小和位置
controlFrame = new JFrame("猜数字游戏");
controlFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
controlFrame.setSize(new Dimension(400, 200));
controlFrame.setLocation(500, 500);
//添加菜单项,Start、Stop、Quit
menu = new JMenu("菜单");
startMenuItem = new JMenuItem("开始游戏");
menu.add(startMenuItem);
startMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
controller.start();
}
});
JMenuItem quit = new JMenuItem("退出游戏");
quit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
menu.add(quit);
//将创建好的菜单放入菜单栏,然后将菜单栏加入到Frame中
menuBar = new JMenuBar();
menuBar.add(menu);
controlFrame.setJMenuBar(menuBar);
gameTipsLabel = new JLabel("请输入1-100的整数", SwingConstants.LEFT);
gameNumberTextField = new JTextField(2);
playButton = new JButton("Play");
playButton.setSize(new Dimension(10,40));
playButton.addActionListener(this);
restartButton = new JButton("Restart");
restartButton.setSize(new Dimension(10,40));
restartButton.addActionListener(this);
JPanel labelPanel = new JPanel(new GridLayout(1, 1));
labelPanel.add(gameTipsLabel);
JPanel playPanel = new JPanel(new GridLayout(1, 3));
playPanel.add(gameNumberTextField);
playPanel.add(playButton);
playPanel.add(restartButton);
JPanel controlPanel = new JPanel(new GridLayout(2, 1));
controlPanel.add(labelPanel);
controlPanel.add(playPanel);
gameTipsLabel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
controlFrame.getRootPane().setDefaultButton(playButton);
controlFrame.getContentPane().add(controlPanel, BorderLayout.CENTER);
controlFrame.setVisible(true);
}
public void disableStartMenuItem() {
startMenuItem.setEnabled(false);
}
public void enableStartMenuItem() {
startMenuItem.setEnabled(true);
}
public void actionPerformed(ActionEvent event) {
if(event.getSource() == playButton) {
int number = Integer.parseInt(gameNumberTextField.getText());
controller.play(number);
} else if(event.getSource() == restartButton) {
controller.start();
}
}
public void updateRange(String tips) {
gameTipsLabel.setText(tips);
}
}
Main:
public class Main {
public static void main(String args[]) {
BaseGameModel model = new GameModel();
BaseGameController gameController = new GameController(model);
}
}
Guess Number Gameindex.htmlindex.htmindex.jspdefault.htmldefault.htmdefault.jspGameServletGameServletszu.vander.game.web.GameServletGameServlet/playRestartServletRestartServletszu.vander.game.web.RestartServletRestartServlet/start
@Service
public class GuessService {
/**
* 生成随机数
* @return
*/
public int getRandomNum() {
Random rand = new Random();
int randomNum = rand.nextInt(100);
return randomNum;
}
/**
* 实现猜测游戏的逻辑
* @param number
* @param result
* @return
*/
public String getTips(int number, HttpSession session) {
String tips = "";
int result = (int) session.getAttribute("result");
int min = (int) session.getAttribute("min");
int max = (int) session.getAttribute("max");
if(number >= min && number <= max ) {
if(number > result) {
max = number;
} else if(number < result){
min = number;
} else {
tips = "您猜对啦!";
return tips;
}
}
session.setAttribute("min", min);
session.setAttribute("max", max);
tips = "请输入" + min + "-" + max + "的整数";
return tips;
}
/**
* 重新开始游戏需要重置一下范围
*/
public String start(HttpSession session) {
String tips = "";
int min = 0;
int max = 100;
session.setAttribute("min", min);
session.setAttribute("max", max);
tips = "请输入" + min + "-" + max + "的整数";
return tips;
}
}
GameController:
@Controller
public class GameController {
@Autowired
private GuessService guessService;
@RequestMapping(value="/play", method= {RequestMethod.POST, RequestMethod.GET})
public ModelAndView play(int number, HttpSession session) {
ModelAndView mv = new ModelAndView();
String tips = guessService.getTips(number, session);
mv.addObject("tips", tips);
mv.setViewName("game");
return mv;
}
@RequestMapping(value="/start", method= {RequestMethod.POST, RequestMethod.GET})
public ModelAndView start(HttpSession session) {
int result = guessService.getRandomNum();
session.setAttribute("result", result);
String tips = guessService.start(session);
ModelAndView mv = new ModelAndView();
mv.addObject("tips", tips);
mv.setViewName("game");
return mv;
}
}
GameThymeleafApplication:
@SpringBootApplication
public class GameThymeleafApplication {
public static void main(String[] args) {
SpringApplication.run(GameThymeleafApplication.class, args);
}
}
/*
*处理例外
*/
--例外简介
--处理例外-传递例外
declare
v_ename emp.ename%TYPE;
begin
SELECT ename INTO v_ename FROM emp
where empno=&no;
dbms_output.put_line('雇员名:'||v_ename);
exceptio
import java.util.ArrayList;
import java.util.List;
public class KickOutBadGuys {
/**
* 题目:13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。
* Maybe you can find out
Redis.conf配置文件及相关项说明
# Redis configuration file example
# Note on units: when memory size is needed, it is possible to specifiy
# it in the usual form of 1k 5GB 4M and so forth:
#
public static String convertInputStreamToString(InputStream is) {
StringBuilder result = new StringBuilder();
if (is != null)
try {
InputStreamReader inputReader = new InputStreamRead
原文:
http://www.sitepoint.com/3-new-javascript-apis-may-want-follow/?utm_source=html5weekly&utm_medium=email
本文中,介绍3个仍然处于草稿阶段,但应该值得关注的Javascript API.
1) Web Alarm API
&