JavaFx版本植物大战僵尸

     闲来没事,把以前做的Swing植物大战僵尸稍微改版了一下,用的javafx2.x,效果没有变化,边的只是代码。。源码地址:http://pan.baidu.com/share/link?shareid=249059&uk=522491644  先上两张效果图吧:

1

2

3

项目结构:

image

role包为角色,把各个部分都作为一个角色来处理,详细的下面再说;

util包为工具类,以及事件处理,用户信息等。

window为窗口,系统面板。

1.系统整体结构:

jg

  window包中MainFrame为Main类,

public class MainFrame extends Application {

private TitlePanel titlePanel;
private WelcomePanel welcomePanel ;
private HelpPanel helpPanel;
private GamePanel gamePanel;
/**
* 玩家对象
*/
private UserBean userBean;


private StackPane stack = new StackPane();
private Stage stage;


public MainFrame() {
GameUtil.initImage();
}

@Override
public void start(Stage stage) {
this.stage =stage;
Scene scene = new Scene(stack, 900, 600);
scene.getStylesheets().add("file:resources/DarkTheme.css");
stage.setResizable(false);
scene.setFill(Color.WHITE);
stage.setTitle("植物大战僵尸");
stage.getIcons().add(GameUtil.iconImage);

titlePanel = new TitlePanel(this);
welcomePanel = new WelcomePanel(this);
helpPanel = new HelpPanel(this);
gamePanel=new GamePanel(this);
stack.getChildren().addAll(titlePanel, welcomePanel,helpPanel,gamePanel);
stack.setAlignment(Pos.CENTER_RIGHT);

stage.setScene(scene);
stage.show();

}


public void switchPanel(AnchorPane fromPanel,AnchorPane toPanel) {
// 切换面板的方法
fromPanel.setVisible(false);
toPanel.setVisible(true);
}

public static void main(String[] args) {
launch(args);
}

}

Root为StackPane布局,每个面板为都为AnchorPane布局,面板叠堆到StackPane中,并提供switchPanel方法进行面板切换。运行程序后首先进入欢迎界面,点击鼠标进入选项界面。

TitlePanel中由ImageView添加各个图片,并为TitlePanel添加鼠标事件,监听OnMousePressed以及OnMouseMoved,OnMousePressed处理鼠标点击事件,OnMouseMoved主要处理鼠标移动到某个选项上变成手型。

获取鼠标点击的坐标,判断进入的图片的范围,产生响应的事件,进行面板切换和用户存档的读取。

详细参考代码。帮助面板和排行榜面板与此类似。排行榜使用的是table,用户信息存放在文件中,文件操作在fileutil以及baseDao中。

点击开始冒险进入游戏主面板。

2、游戏主面板

public GamePanel(MainFrame mainFrame) {          this.frame = mainFrame;          setVisible(false);          canvas = new Canvas(900, 600); // 构建画布          g = canvas.getGraphicsContext2D(); // 获取画笔          startGame();          getChildren().addAll(canvas);          GameMousePressed gameMousePressed = new GameMousePressed(this);          GameMouseMoved gameMouseMoved = new GameMouseMoved(this);          this.setOnMousePressed(gameMousePressed);          this.setOnMouseMoved(gameMouseMoved);      }
在GamePanel构造器中首先构建了画布和画笔,游戏元素通过画笔绘制,而不是之前的ImageView添加图片。startGame开始游戏方法,同样监听鼠标点击和移动事件。
public void startGame() {          init();          gameStatus = BaseRole.GAME_START;          // 太阳种子落下          GameUtil.generateSunSeed(this);          // 产生僵尸          GameUtil.generateZombie(this);          initTimeLine();      }
startGame方法中线初始化游戏,更新游戏状态为start,通过线程产生太阳花和僵尸,代码在gameutil中。最后使用timeline重复游戏绘制
    private void initTimeLine() {          Timeline timeline = new Timeline();          timeline.setCycleCount(Timeline.INDEFINITE);            KeyFrame keyFrame = new KeyFrame(Duration.millis(100),                  new EventHandler<ActionEvent>() {                      @Override                      public void handle(ActionEvent arg0) {                                                                                      //。。。省略部分代码                          paint();                      }                  });                    timeline.getKeyFrames().add(keyFrame);          timeline.play();      }

你可能感兴趣的:(数据库)