用java开发一个整活餐厅

项目效果展示

java整活餐厅视频

背景介绍

创作灵感来源于武林外传之同福客栈,主要玩法是在众多人物中选择职业(店长、二级厨师、一级厨师)不同的三个人为自己经营餐厅,通过各种操作(改善菜谱、员工培训、装修店铺)进行员工赚钱能力的提高,经过7天的经营结算营业额,同时参考了之前的项目小猪斗恶狼。

静态界面设计

1.主界面(效果图):

可以通过按钮选择进入四个界面

“经营背景”、“经营帮助”、关于我们“”的按钮进入的界面就是简单的介绍玩法等,有一个返回按钮,可以回到主页,如图所示:

2.经营界面(效果)-通过点击开始经营按钮进入

(1)注册

点击注册按钮,进入注册

输入账号密码后点击“确定”,然后输入注册的账号密码,点击“确定”,就可以进入下一个界面(选择角色)。

(2)选择角色(效果图)

1)查看人物信息

当鼠标悬停在每个人物的确定按钮上,就可以显示对应的人物属性信息

2)选择人物

点下确定,就可以选择人物作为自己的员工

(这里做了一个小设计,有三种身份,我们只能各选择一种身份的员工,当选择成功时,就能看见自己挑选的员工,当选择失败后,就会显示已经存在这种员工的类型,如下图所示)

同时每位员工有自己的价值,可能有羁绊,还有雇佣的价格

当选择了三名员工后,就可以点击“确定餐厅成员”进入真正的经营界面。

(3)实际经营界面(效果图)

1)选择当前经营手段

当鼠标悬浮在“改善菜谱”、“员工培训”、“装修店铺”的按钮上时,就可以显示该操作的收费和带来的收益。(当我们的财产够用来执行该操作时,就会扣除才长,然增加员工的赚钱能力)

当我们点击左上角的开始经营后,就会让财产=原来的财产+员工的赚钱能力。70+(-12)=58

然后在接下来的日子里,要合理规划投入和收入,要在第七天达到最高的收益

2)排行榜功能

比较不同的组合和不同的经营策略带来的收益差距,降序排列

然后可以点击“再来一次”进行新的体验。

项目思路及部分代码

首先是util目录下的各种工具,用于对图片、音频等进行封装

utill工具

1.GameImage--对图片进行封装

​

​

package util;


import javafx.scene.image.Image;
import javafx.scene.image.PixelReader;
import javafx.scene.image.WritableImage;

import java.net.URL;

/**
 * 封装图片的加载操作
 */
public class GameImage {
	public static Image helpbackgroud;
	public static Image introducebackgroud;
	public static Image aboususBAckground;
	public static Image START1;
	public static Image START2;
	public static Image INTRODUCE1;
	public static Image INTRODUCE2;
	public static Image HELP1;
	public static Image HELP2;
	public static Image ABOUTUS1;
	public static Image ABOUTUS2;
	public static Image GAISHAN;
	public static Image ZHUANGXIU;
	public static Image PEIXUN;
	/**  从招聘人员界面到经营界面的图片(未接触) */
	public static Image ENTER1;
	/**  从招聘人员界面到经营界面的图片(接触)&&满足接触的条件 */
	public static Image ENTER2;
	/**  员工大头照的背景图片 */
	public static Image EMPLYEE1;
	public static Image EMPLYEE2;
	public static Image EMPLYEE3;
	public static Image EMPLYEE4;
	public static Image EMPLYEE5;
	public static Image EMPLYEE6;
	public static Image EMPLYEE7;
	public static Image EMPLYEE8;
	public static Image EMPLYEE9;
	public static Image EMPLYEE10;
	/**  员工大头照的背景图片 */
	public static Image EMPLYEE;
	/**  注册界面的背景图片 */
	public static Image FOOD;
	/** 确认注册按钮图片 */
	public static Image SUREBTN;
	public static Image BACK1;
	public static Image AGAIN;
	public static Image BAZOOKA;
	public static Image CHANGE;
	public static Image THREEBURSTS;
	/** 寄语图片 */
	public static Image SURPRISE;

	/** 游戏背景图片 */
	public static Image BACKGROUND;
	

	public static void loadImages(){
		//分辨率就是图片大小
		aboususBAckground=loadImage("image/AboutusBACKGROUND.png");
		introducebackgroud=loadImage("image/Introducebackground.png");
		helpbackgroud=loadImage("image/helpBackground.png");
		START1=loadImage("image/start.png");
		START2=loadImage("image/start2.png");
		ABOUTUS1=loadImage("image/aboutus1.png");
		ABOUTUS2=loadImage("image/aboutus2.png");
		HELP1=loadImage("image/help.png");
		HELP2=loadImage("image/help2.png");
		INTRODUCE1=loadImage("image/introduce.png");
		INTRODUCE2=loadImage("image/introduce2.png");
		PEIXUN=loadImage("image/peixun.png");
		ZHUANGXIU=loadImage("image/zhuangxiu.png");
		GAISHAN=loadImage("image/gaishan.png");
		SURPRISE=loadImage("image/surprise.png");
		ENTER1=loadImage("image/EnternextBtn1.png");
		ENTER2=loadImage("image/EnternextBtn2.png");
		EMPLYEE10=loadImage("image/employ10.png");
		EMPLYEE9=loadImage("image/employ9.png");
		EMPLYEE8=loadImage("image/employ8.png");
		EMPLYEE7=loadImage("image/employ7.png");
		EMPLYEE6=loadImage("image/employ6.png");
		EMPLYEE5=loadImage("image/employ5.png");
		EMPLYEE4=loadImage("image/employ4.png");
		EMPLYEE3=loadImage("image/employ3.png");
		EMPLYEE2=loadImage("image/employ2.png");
		EMPLYEE1=loadImage("image/employ1.png");
		EMPLYEE=loadImage("image/employ.png");
	}

	/**
	 * 根据路径加载对应的图片
	 * @param url - 图片路径
	 * @return 加载完成后的Image对象
	 */
	public static Image loadImage(String url){
		if(url != null) {
			try {
				url = url.replace("\\","/");
				String path = url;
				System.out.println("path:" + path);
				if (url.indexOf(":") == -1 && url.indexOf("/") != -1) {
					String packageDirName = url.substring(0, url.lastIndexOf("/"));
					URL pathUrl = Thread.currentThread().getContextClassLoader()
							.getResources(packageDirName).nextElement();
					path = pathUrl + url.substring(url.lastIndexOf("/"));
				}
				Image img = new Image(path);

				return img;
			}catch(Exception e){
				e.printStackTrace();
			}

		}
		return null;

	}

	/**
	 * 根据路径数组加载对应的图片
	 * @param imgPathes - 图片路径数组
	 * @return 加载完成后的Image对象数组
	 */
	public static Image [] loadImage(String [] imgPathes){
		Image [] imgs = new Image[imgPathes.length];
		for(int i = 0;i < imgs.length;i++){
			//产生image对象并放在数组中
			imgs[i] = loadImage(imgPathes[i]);
		}

		return imgs;
	}

	/**
	 * 加载给定路径的图片并按照指定大小裁剪成一维Image对象数组
	 * @param url 图片的路径
	 * @param length 裁剪图片数量
	 * @param width 每张图片的宽
	 * @param height 每张图片的高
	 * @param horizontal true表示水平裁剪,false表示垂直裁剪
	 * @return 裁剪完成后的一维Image对象数组
	 */
	public static Image [] cutImage(String url,int length,int width,int height,boolean horizontal){
		Image [] imgs = new Image[length];
		Image image = loadImage(url);
		//获取图片资源对象
		PixelReader reader = image.getPixelReader();
		for(int i = 0;i < length;i++){
			if(horizontal){
				imgs[i] = new WritableImage(reader,i*width, 0 , width, height);
			}else{
				imgs[i] = new WritableImage(reader,0, i*height , width, height);
			}


		}
		return imgs;
	}
	/**
	 * 加载给定路径的图片并按照指定大小裁剪成二维Image对象数组
	 * @param url 图片路径
	 * @param length1 行数
	 * @param length2 列数
	 * @param width 每张图片的宽
	 * @param height 每张图片的高
	 * @return 裁剪完成后的二维Image对象数组
	 */
	public static Image [][] cutImage(String url,int length1,int length2,int width,int height){
		Image [][] imgs = new Image[length1][length2];
		Image image = loadImage(url);
		//获取图片资源对象
		PixelReader reader = image.getPixelReader();
		for(int i = 0;i < length1;i++){
			for(int j = 0;j < length2;j++){
				imgs[i][j] = new WritableImage(reader,j*width, i*height , width, height);
			}

		}
		return imgs;
	}


}
​

PixelReader和PixelWriter,是像素读取和像素入写的类。须要注意的是,我们只能从JavaFX的Image中读取像素,而像素入写,必须要对Writablelmage行进作操作。cutImage函数能实现对图片(如图所示)的分割。

然后loadImage和cutImage函数对图片进行封装后,在其他代码中引用Gameimage就可以调用想用的图片,如下图所示

2.LovoImage---实现往画布中添加元素的效果

package util;

import javafx.event.EventHandler;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.scene.paint.Paint;

import java.net.URL;

/**
 * 图片组件
 * @author lenovo
 *
 */
public class LovoImage extends ImageView{
	/**图片宽度*/
	private int width;
	/**图片高度*/
	private int height;
	private BorderPane p;
	/**
	 * 构造方法
	 * @param url 图片URL路径
	 * @param x 组件X坐标
	 * @param y 组件Y坐标
	 * @param width 组件宽度
	 * @param height 组件高度
	 * @param container 加入容器
	 */
	public LovoImage(String url,int x,int y,int width,int height,Pane container) {
		this(url,x,y,width,height,container,false);
	}
	public LovoImage(Image image,int x,int y,int width,int height,Pane container) {
		this.setImage(image);
		this.width = width;
		this.height = height;
		this.setLayoutX(x);
		this.setLayoutY(y);
		p = new BorderPane();
		p.setLayoutX(x);
		p.setLayoutY(y);
		p.setPrefSize(width, height);
		p.setCenter(this);
		container.getChildren().add(p);

	}

	
	/**
	 * 构造方法
	 * @param url 图片URL路径
	 * @param x 组件X坐标
	 * @param y 组件Y坐标
	 * @param width 组件宽度
	 * @param height 组件高度
	 * @param container 加入容器
	 */
	public LovoImage(String url,int x,int y,int width,int height,Pane container,boolean border) {
		this.width = width;
		this.height = height;
		
		this.flushImage(url);
		this.setLayoutX(x);
		this.setLayoutY(y);
		
		BorderPane p = new BorderPane();
		p.setLayoutX(x);
		p.setLayoutY(y);
		p.setPrefSize(width, height);
		p.setCenter(this);
		
		if(border) {
			p.setBorder(this.getViewBorder());
		}


		
		container.getChildren().add(p);
	}
	
	/**
	 * 更新图片
	 * @param url 图片URL
	 */
	public void flushImage(String url) {
		if(url != null) {
			try {
				url = url.replace("\\","/");
				String path = url;
				System.out.println("path:" + path);
				if (url.indexOf(":") == -1 && url.indexOf("/") != -1) {
						String packageDirName = url.substring(0, url.lastIndexOf("/"));
						URL pathUrl = Thread.currentThread().getContextClassLoader()
								.getResources(packageDirName).nextElement();
						path = pathUrl + url.substring(url.lastIndexOf("/"));
				}
				System.out.println("path:" + path);
				Image img = new Image(path, width, height, false, false);

				this.setImage(img);
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
	
	private Border getViewBorder() {
		return  new Border(new BorderStroke(Paint.valueOf("#000"), 
				BorderStrokeStyle.SOLID, new CornerRadii(5), new BorderWidths(1)));
	}
	public void onMouseEntered(EventHandler<? super MouseEvent> var1) {
		p.setOnMouseEntered(var1);
	}
	public void onMouseExited(EventHandler<? super MouseEvent> var1) {
		p.setOnMouseExited(var1);
	}
	public void onMouseClicked(EventHandler<? super MouseEvent> var1) {
		p.setOnMouseClicked(var1);
	}
	
}

使用方法如图所示,可以控制图片的位置:

3.LovoCanvas----可以实现在画布上清除图片、文字,绘制图片、文字的效果

package util;

import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;

/**
 * Canvas组件
 */
public class LovoCanvas extends Canvas {

    private GraphicsContext graphics;

    public LovoCanvas(double x, double y, double width, double height, Pane container){
        super(width,height);
        this.setLayoutX(x);
        this.setLayoutX(y);
        container.getChildren().add(this);
        graphics = this.getGraphicsContext2D();

    }
    public void clearRect(double x, double y, double width, double height){
        graphics.clearRect(x,y,width,height);
    }

    public void fillRect(double x, double y, double width, double height, Color color){
        graphics.setFill(color);
        graphics.fillRect(x,y,width,height);
    }
    public void drawImage(Image image,double x,double y){
        graphics.drawImage(image, x, y);
    }
    public void drawImage(Image image,double x,double y,double width,double height){
        graphics.drawImage(image, x, y,width,height);
    }
    public void drawImage(Image image,double sx, double sy, double sw,
                          double sh, double dx, double dy, double dw, double dh){
        graphics.drawImage(image, sx, sy,sw,sh,dx,dy,dw,dh);
    }

    public void fillText(String text, double x,double y){
           graphics.fillText(text,x,y);
    };



}

 使用示例如下图所示:

4.FileUpdateDownload--用于利用读取文件实现排行榜功能

package util;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileUpdateDownload {
    public static String Pathname = "a.txt";
    //写文件,如果没有该文件,    如果这个文件不存在,那么就会帮我们自动创建一个,创建完以后的纯文本文件放在哪里呢?如果不指定目录就会放在这个 Java project 工程下面,与src目录和target目录同级。
    public static void saveAsFileWriter(String datas){
        datas = datas+"\n";
        FileWriter fwriter = null;
        try {
            // true表示不覆盖原来的内容,而是加到文件的后面。若要覆盖原来的内容,直接省略这个参数就好
            fwriter = new FileWriter(Pathname,true);
            fwriter.write(datas);
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                fwriter.flush();
                fwriter.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
    //读文件
    public static String saveAsFileRead(){
        StringBuilder result = new StringBuilder();
        try{
            BufferedReader br = new BufferedReader(new FileReader(Pathname));
            String s = " ";
            while((s = br.readLine())!=null){
                result.append(System.lineSeparator()+s);
            }
            br.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        return result.toString();
    }
    //重制文件内容
    public static void saveAsFileUpDate(){
        FileWriter fwriter = null;
        try {
            fwriter = new FileWriter(Pathname);
            fwriter.write("游戏次数如下:\n");
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                fwriter.flush();
                fwriter.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

 5.MusicUtill--用于音乐的播放控制

package util;


import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

public class MusicUtil {
	public static String MUSIC_BK="audio/Summer.mp3";
	public static String MUSIC_BK2="audio/Summertime.mp3";
	

      public static MediaPlayer getMediaPlayer(Class clazz,String musicPath){

          return new  MediaPlayer(new Media(clazz.getClassLoader().getResource(musicPath).toString()));
      }

}

  界面代码逻辑

1.MainView和Main-运行和初始化舞台

package View;

import javafx.application.Application;

public class Main {
    public static void main(String[] args) {

        Application.launch(MainView.class);
    }
}

package View;

	import character.employee_list;
import javafx.application.Application;
	import javafx.scene.Scene;
	import javafx.scene.input.KeyCode;
	import javafx.scene.layout.BorderPane;
	import javafx.scene.media.MediaPlayer;
	import javafx.stage.Stage;
import util.GameImage;


	public class MainView extends Application {
	    private  Scene scene;
	   private BorderPane root;

	    @Override
	    public void start(Stage stage ) throws Exception {

	    	        GameImage.loadImages();
	    	         root=new BorderPane();
//	    	        root.setCenter(new GameView(root));
	    	        root.setCenter(new LoginView(root));
	    	         scene=new Scene(root,800,600);
	    	        stage.setScene(scene);
	    	        stage.setResizable(false);
//	    	        this.handle();
	    	        stage.setTitle("Restaurant System");
	    	        stage.show();
	    	    }
//
	    	    public Scene getScene() {
	    	        return scene;
	    	    }

	    	    }

//



 最终进入LogView界面。

补: javaFX画面设置(容器大小---从大到小)    舞台->场景->面板->面板元素

 2.LoginView--通过按钮进入其他界面

package View;

import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.media.MediaPlayer;
import util.GameImage;
import util.LovoImage;
import util.MusicUtil;


public class LoginView extends Pane {
    private BorderPane root;
    private LovoImage image;
    private LovoImage startImg;
    private LovoImage optionImg;
    private LovoImage helpImg;
    private LovoImage aboutusImage;
    public LoginView(BorderPane root){
        this.root = root;
        image = new LovoImage(GameImage.BACKGROUND,0,0,800,600,this);
        startImg=new LovoImage(GameImage.START1,50,130,200,100,this);
        optionImg=new LovoImage(GameImage.INTRODUCE1,50,240,200,100,this);
        helpImg=new LovoImage(GameImage.HELP2,50,350,200,100,this);
        aboutusImage=new LovoImage(GameImage.ABOUTUS2,50,460,200,100,this);
        root.setCenter(this);
        this.handle();
    }
    private  void handle(){
        startImg.setOnMouseEntered((e)->{
            startImg.setImage(GameImage.START2);
        });
        startImg.setOnMouseExited((e)->{
            startImg.setImage(GameImage.START1);
        });
        startImg.setOnMouseClicked((e)->{
           new RegisterView(root);
           System.out.println("进入注册界面");
        });
        optionImg.setOnMouseEntered((e)->{
            optionImg.setImage(GameImage.INTRODUCE2);
        });
        optionImg.setOnMouseExited((e)->{
            optionImg.setImage(GameImage.INTRODUCE1);
        });
        optionImg.setOnMouseClicked((e)->{
            new OptionView(root);
            System.out.println("进入介绍游戏界面");

        });
        helpImg.setOnMouseEntered((e)->{
            helpImg.setImage(GameImage.HELP1);
        });
        helpImg.setOnMouseExited((e)->{
            helpImg.setImage(GameImage.HELP2);

        });
        helpImg.setOnMouseClicked((e)->{
        new HelpView(root);
        System.out.println("进入游戏介绍攻略界面");


        });
        
    aboutusImage.setOnMouseEntered((e)->{
    	aboutusImage.setImage(GameImage.ABOUTUS1);
        });
    aboutusImage.setOnMouseExited((e)->{
    	aboutusImage.setImage(GameImage.ABOUTUS2);

        });
    aboutusImage.setOnMouseClicked((e)->{
    	new AboutusView(root);
    	System.out.println("进入关于我们界面");
        });

    }
}

这里通过匿名内部类实现按钮点击后界面的跳转

3.AboutusView和HelpView和OptionView---进行简短的介绍

同时它们都有BorderPane root参数的构造方法,通过LoginView的按钮实现跳转

举例(AboutusView):

package View;

import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import util.GameImage;
import util.LovoImage;

public class AboutusView extends Pane {
	 private  BorderPane root;
	 private LovoImage btnImage;
	 private LovoImage backgroundImage;
		public AboutusView(BorderPane root) {
			this.root=root;
			backgroundImage=new LovoImage(GameImage.aboususBAckground, 0, 0, 800, 600, this);
	     	btnImage=new LovoImage(GameImage.BACK1,700,550,10,10,this);
	     	root.setCenter(this);
			this.handle();
		}
		public void handle() {
			btnImage.setOnMouseClicked((e)->{
				new LoginView(root);
			});
		}
}

 4.ReisterView---实现注册的功能

登录成功后跳转到GameView

package View;


import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import util.GameImage;
import util.LovoImage;

public class RegisterView extends Pane {
	private   String  username=null;
	private   String  password=null;
    private  BorderPane root;
    private  TextArea textArea;
    private LovoImage backGroundImage;
    private LovoImage BACK1Img;
    private LovoImage sureBtn;
    private TextField tf=new TextField();//用户名文本框对象
    private PasswordField pf=new PasswordField();   //密码文本框对象
    private TextArea tArea=new TextArea();//用于显示是否登录成功的信息
	private Button loginBtn;
	private Button registerBtn;
	private TextArea ta =new TextArea();
	private Label label1;
	private Label label2;
	private boolean isRegister=false;
	
	


    public RegisterView(BorderPane root) {
    	GridPane rootGP =new GridPane();
        final ScrollPane scrollPane=new ScrollPane(ta);
        ta.setPrefColumnCount(15);
        ta.setEditable(false);
         loginBtn =new Button("登录");
         registerBtn=new Button("注册");
 label1 =new Label("用户名:");
 label2 =new Label("密码:");
 label1.setTextFill(Color.WHITE);
 label2.setTextFill(Color.WHITE);
         tf.setPromptText("请输入用户名");
         pf.setPromptText("请输入密码");
         tf.setPrefHeight(50);
         tf.setPrefWidth(400);
         pf.setPrefHeight(50);
         pf.setPrefWidth(400);
         rootGP.add(label1, 0, 0);
         rootGP.add(tf, 1, 0);
         rootGP.add(label2, 0, 1);
         rootGP.add(pf, 1, 1); 
         rootGP.add(loginBtn, 10, 20);
         rootGP.add(registerBtn, 20, 20);
         rootGP.add(scrollPane, 10, 40, 50, 50);
         root.setCenter(this);
     	root.setCenter(rootGP);

     	BACK1Img=new LovoImage(GameImage.BACK1,700,550,10,10,this.root);
      	sureBtn=new LovoImage(GameImage.SUREBTN, 300, 100, 53,36,this.root);
      	sureBtn.setImage(null);
         this.handle();
    }
    public void handle(){

         BACK1Img.setOnMouseClicked((e)->{
             new LoginView(root);
         });
         loginBtn.setOnMouseClicked((e)->{
        	 
        	 if(isRegister==false) {
        		 ta.clear();
        		 ta.setText("你还没有注册呢");
        		 tf.clear();
            	 pf.clear();
//            	 )&&isRegister==true


        	 }else {
        		 if(username.equals(tf.getText())&&password.equals(pf.getText())) {
                		 ta.clear();
                		 tf.clear();
                    	 pf.clear();
                    	 ta.setText("登录成功!");
                    	 BACK1Img.setImage(null);
                  		 new GameView(root);




                	 
        		 }else {
            		 ta.clear();
            		 ta.setText("你输入的密码或者账号错误!");
            		 tf.clear();
                	 pf.clear();
        		 }
        	 }

         });
         registerBtn.setOnMouseClicked((e)->{
        	 ta.clear();
        	 label1.setText("要注册的用户名:");
        	 label2.setText("要确认的密码:");
        	 sureBtn.setImage(GameImage.SUREBTN);
        	 ta.setText("点击确定按钮,确定注册");
        	 tf.clear();
        	 pf.clear();
         });

        sureBtn.setOnMouseClicked((e)->{
        	System.out.println("1");
       	 username=tf.getText();
       	 password=pf.getText();
          	 if(!username.isEmpty()&&!password.isEmpty()) {
            	 label1.setText("用户名:");
            	 label2.setText("密码:");
          		 ta.clear();
        		 isRegister=true;
        		 sureBtn.setImage(null);
        		 System.out.println("ok");
        		 ta.setText("注册成功");
        		 tf.clear();
        		 pf.clear();
        	 }else {
        		 ta.clear();
        		 ta.setText("你输入的用户名或者是密码为空哦");
        	 }
         });
         
    }
}

 5.GameView(实现员工的选择)

这里需要设计一个员工的属性、装员工的列表、还有自己作为店长的属性

1)eployee

设计了一些属性,比如他是做什么的,能赚多少钱等。同时与一个图片和按钮配套。

package character;

import javafx.scene.control.Button;
import util.LovoImage;

public class employee {
	private String name;
	private int level;//分为1到3,1是店长,2是一级厨师,3是二级厨师
	private int Favorability;//表示好感度
	private int earn_money_ablity;//表示员工为老板的赚钱的能力
	private int salary;//员工薪水
	private String workSkill;//员工特有的工作技能&&介绍
	private String province;//来自省份,可以做不同地区的菜
	private LovoImage image; //依附于一张图片
	private LovoImage Btnimage;//同时要依附于一个按钮

	public employee(String name, int level, int favorability, int earn_money_ablity, int salary, String workSkill,
			String province) {
		super();
		this.name = name;
		this.level = level;
		Favorability = favorability;
		this.earn_money_ablity = earn_money_ablity;
		this.salary = salary;
		this.workSkill = workSkill;
		this.province = province;
	}
	//重写contain 方法中的equal
	public boolean equals(Object obj) {  
        if (obj instanceof employee) {      
       	 employee u = (employee) obj;           
   return this.getName().equals(u.getName());        
  }        
  return super.equals(obj); }
	public int getLevel() {
		return level;
	}
	public void setLevel(int level) {
		this.level = level;
	}
	public int getFavorability() {
		return Favorability;
	}
	public void setFavorability(int favorability) {
		Favorability = favorability;
	}
	public int getEarn_money_ablity() {
		return earn_money_ablity;
	}
	public void setEarn_money_ablity(int earn_money_ablity) {
		this.earn_money_ablity = earn_money_ablity;
	}
	public int getSalary() {
		return salary;
	}
	public void setSalary(int salary) {
		this.salary = salary;
	}
	public String getWorkSkill() {
		return workSkill;
	}
	public void setWorkSkill(String workSkill) {
		this.workSkill = workSkill;
	}
	public int getProvince() {
		if(this.province.equals("四川")) {
			return 1;
		}else if(this.province.equals("湖南")) {
			return 2;
		}else if(this.province.equals("云南")) {
			return 3;
		}else if(this.province.equals("广东")) {
			return 4;
		}else if(this.province.equals("浙江")) {
			return 5;
		}else if(this.province.equals("湖北")) {
			return 6;
		}else if(this.province.equals("安徽")) {
			return 7;
		}
		return -1;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public LovoImage getImage() {
		return image;
	}
	public void setImage(LovoImage image) {
		this.image = image;
	}
	public LovoImage getBtnimage() {
		return Btnimage;
	}
	public void setBtnimage(LovoImage btnimage) {
		Btnimage = btnimage;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}


}

2)employee_list
package character;

import java.util.ArrayList;
import java.util.Iterator;

import View.GameView;
import javafx.scene.control.Button;
import sun.text.resources.cldr.es.FormatData_es_419;
import util.GameImage;
import util.LovoImage;

public class employee_list {
	ArrayList<employee> arrayList=new ArrayList<employee>();
	private GameView gameView;
	private boolean[] provinceBond_juadge;//用于地域羁绊的判断
	private int Sum_earn;
	
	private boolean level1=false;//是否招到了店长
	private boolean level2=false;//是否招到了一级厨师
	private boolean level3=false;//是否招到了二级厨师
	public  int provinceBond=0;//表示地域羁绊
	private int personBondValue=1;//个人羁绊加成
	private ArrayList<String> personalBond=new ArrayList<>();//表示个人专属羁绊 注:个人羁绊数值要设计得很高,(数值低的员工才有羁绊--------(升华)1.合作的重要性2.说明每个人都有各自的优势,只是要通过)
	
//	public employee(String name, int level, int favorability, int earn_money_ablity, int salary, String workSkill,
//			String province) {
	private static employee e1=new employee("QHW", 1, 10, 20, 1, "会做川菜,大家都叫他狗子,员工的好感度会高些(店长)",
			"四川");
	private static employee e2=new employee("LXY", 1, 1, 40, 2, "会做湘菜,大家都叫他李哥,业务能力强(店长)",
			"湖南");
	private static employee e3 =new employee("WYK", 1, 5, 20, -5, "会做川菜,四川-“北京”人,会自己贴钱给餐厅(店长)",
			"四川");
	private static employee e4 =new employee("LJ", 2, 20, 30, 10, "会做滇菜,米其林腚级厨师(一级厨师)----不是所有人都是天生的厨师(滑稽)",
			"云南");
	private static employee e5=new employee("LCR", 2, 0, 20, 1, "会做川菜,还会烘培(一级厨师)",
			"四川");
	private static employee e6=new employee("CYF", 2, 0, 20, 1, "会做粤菜,美食家(一级厨师)",
			"广东");
	private static employee e7=new employee("JJH", 3, 0, 20, 1, "会做浙菜,会整活的二级厨师",
			"浙江");
	private static employee e8=new employee("XJJ", 3, 0, 20, 1, "会做川菜,爱笑的二级厨师",
			"四川");
	private static employee e9=new employee("XZX", 3, 0, 5, 1, "会做鄂菜,”高情商“的二级厨师",
			"湖北");
	private static employee e10=new employee("WYK", 3, 0, 10, 0, "会做徽菜,乐观的二级厨师",
			"安徽");

	
	//
	public employee_list() {
		// TODO Auto-generated constructor stub
		
	}
	
	public int sum_earn() {
		int sum=0;
		for (employee employee : arrayList) {
			sum+=employee.getEarn_money_ablity();
		}
		return sum;
	}
	public int sum_Salary() {
		int sum=0;
		for (employee employee : arrayList) {
			sum+=employee.getSalary();
		}
		return sum;
	}
	public int sum_Popularity() {
		int sum=0;
		for (employee employee : arrayList) {
			sum+=employee.getFavorability();
		}
		return sum;
	}
	public boolean add(employee e) {//加入员工
		boolean isadd=false;
		if(level1==false) {
		if(e.getLevel()==1) {
			level1=true;
			arrayList.add(e);
			isadd=true;
			}}
		if(level2==false) {
		if(e.getLevel()==2) {
			level2=true;
			arrayList.add(e);
			isadd=true;
			}}
		if(level3==false) {
	if(e.getLevel()==3) {
		level3=true;
		arrayList.add(e);
		isadd=true;
		}}
	if(isadd==false) {
		System.out.println("该员工的类型已经存在了哦!");
	}
	return isadd;

	}
	//移除员工
	public void remove() {
		if(!arrayList.isEmpty()) {
			switch (arrayList.get(arrayList.size()-1).getLevel()) {
			case 1:
				level1=false;
				break;
			case 2:
				level2=false;
				break;
			case 3:
				level3=false;
			break;

			default:
				break;
			}
			arrayList.remove(arrayList.size()-1);
		}
	}
	public String display() {
		String aString="";
		for (int i = 0; i < arrayList.size(); i++) {
//			System.out.print("\t"+arrayList.get(i).getName());
			aString=aString.concat(" "+arrayList.get(i).getName());
		}
		return aString;
	}
	public boolean contains(ArrayList<employee> arr,employee e){
		boolean asd=false;
		for (employee employee : arr) {
			if(employee.getName().equals(e.getName())) {
				asd=true;
			}
		}
		return asd;
	}

	//羁绊总和
	public void sumBond() {
		provinceBond_juadge=new boolean[7];
		for (int i = 0; i < arrayList.size(); i++) {
			System.out.println("sdsadsd");
			//程序优化
			for (int j = 0; j < 7; j++) {
				if(arrayList.get(i).getProvince()==j+1&&provinceBond_juadge[j]==false) {
				provinceBond_juadge[j]=true;
				provinceBond++;
				System.out.println("diqujibanjia+1");
			}
				
			}
			
		}

		//老是返回false 
//		https://blog.youkuaiyun.com/u010015108/article/details/52798966 (原因分析)
		System.out.println(this.contains(arrayList, e3));
		System.out.println(this.contains(arrayList, e10));
		if(this.contains(arrayList, e3)&&this.contains(arrayList, e10)) {
			personalBond.add("恭喜获得了“坤坤”羁绊,获得坤坤搭配,干活不累的效果(装修店铺收益高)");
			System.out.println("asdsadsadsadsad");
			personBondValue=2;
		}
		if(this.contains(arrayList, e1)&&this.contains(arrayList, e9)) {
			personalBond.add("恭喜获得了“满汉全鑫”羁绊,获得菜品更加美味的效果,改善菜谱收益高");
			personBondValue=3;
		}
	}
	public String displayString(ArrayList<String>  arr) {
		String aString="";

		if(arr.size()==0) {
			return "无";
		}else {
			for (String string : arr) {
				aString=aString.concat("\t"+string);
			}
			return aString;
		}
		
	}
public int getSum_earn() {
		return Sum_earn;
	}

	public void setSum_earn(int sum_earn) {
		Sum_earn = sum_earn;
	}

	//	public  String display() {
//		String a="";
//		for (int i = 0; i < arrayList.size(); i++) {
//			a=a+"\t"+arrayList.get(i).getName();
//		}
//		return a;
//		
//	}
	public employee getE4() {
		return e4;
	}
	public void setE4(employee e4) {
		this.e4 = e4;
	}
	public employee getE3() {
		return e3;
	}
	public void setE3(employee e3) {
		this.e3 = e3;
	}
	public employee getE10() {
		return e10;
	}
	public void setE10(employee e10) {
		this.e10 = e10;
	}
	public employee getE1() {
		return e1;
	}
	public void setE1(employee e1) {
		this.e1 = e1;
	}
	public employee getE2() {
		return e2;
	}
	public void setE2(employee e2) {
		this.e2 = e2;
	}
	public ArrayList<employee> getArrayList() {
		return arrayList;
	}
	public void setArrayList(ArrayList<employee> arrayList) {
		this.arrayList = arrayList;
	}
	public static employee getE5() {
		return e5;
	}
	public static void setE5(employee e5) {
		employee_list.e5 = e5;
	}
	public static employee getE6() {
		return e6;
	}
	public static void setE6(employee e6) {
		employee_list.e6 = e6;
	}
	public static employee getE7() {
		return e7;
	}
	public static void setE7(employee e7) {
		employee_list.e7 = e7;
	}
	public static employee getE8() {
		return e8;
	}
	public static void setE8(employee e8) {
		employee_list.e8 = e8;
	}
	public static employee getE9() {
		return e9;
	}
	public static void setE9(employee e9) {
		employee_list.e9 = e9;
	}



	public int getProvinceBond() {
		return provinceBond;
	}

	public void setProvinceBond(int provinceBond) {
		this.provinceBond = provinceBond;
	}

	public ArrayList<String> getPersonalBond() {
		return personalBond;
	}

	public void setPersonalBond(ArrayList<String> personalBond) {
		this.personalBond = personalBond;
	}

	public int getPersonBondValue() {
		return personBondValue;
	}

	public void setPersonBondValue(int personBondValue) {
		this.personBondValue = personBondValue;
	}

	public boolean isLevel1() {
		return level1;
	}

	public void setLevel1(boolean level1) {
		this.level1 = level1;
	}

	public boolean isLevel2() {
		return level2;
	}

	public void setLevel2(boolean level2) {
		this.level2 = level2;
	}

	public boolean isLevel3() {
		return level3;
	}

	public void setLevel3(boolean level3) {
		this.level3 = level3;
	}
	
	
}

包含了一些设计的羁绊,选择了特定的人员之后, 可以让personBondValue的值增加,可以影响最后的收入。同时包括统计员工带来一天收入的函数sum_earn()和雇佣员工收费的函数sum_Salary()。还有添加(add)和删除(remove)人员等等。

3)employer
package character;

public class employer {

private int popularity;//表示人缘
private int confident;//表示自信度
private int property;//表示财产
private int professionalKnowleadge;//表示专业知识
//通关要求的数值
private int Successful_popularity=1;//表示人缘
private int Successful_confident=2;//表示自信度
private int Successful_property=600;//表示财产
private int Successful_professionalKnowleadge=1;//表示专业知识

public employer(int popularity, int confident, int property, int professionalKnowleadge) {
	super();
	this.popularity = popularity;
	this.confident = confident;
	this.property = property;
	this.professionalKnowleadge = professionalKnowleadge;
}
public int getPopularity() {
	return popularity;
}
public void setPopularity(int popularity) {
	this.popularity = popularity;
}
public int getConfident() {
	return confident;
}
public void setConfident(int confident) {
	this.confident = confident;
}
public int getProperty() {
	return property;
}
public void setProperty(int property) {
	this.property = property;
}
public int getProfessionalKnowleadge() {
	return professionalKnowleadge;
}
public void setProfessionalKnowleadge(int professionalKnowleadge) {
	this.professionalKnowleadge = professionalKnowleadge;
}
 public boolean juadge() {
	 //用于判断是否达成优秀的餐厅经营者的条件
	 if(popularity>=Successful_popularity&&confident>=Successful_confident&&
			 property>=Successful_property&&
			 professionalKnowleadge>=Successful_professionalKnowleadge) {
		 return true;
	 }

		return false;
 }
public int getSuccessful_popularity() {
	return Successful_popularity;
}
public void setSuccessful_popularity(int successful_popularity) {
	Successful_popularity = successful_popularity;
}
public int getSuccessful_confident() {
	return Successful_confident;
}
public void setSuccessful_confident(int successful_confident) {
	Successful_confident = successful_confident;
}
public int getSuccessful_property() {
	return Successful_property;
}
public void setSuccessful_property(int successful_property) {
	Successful_property = successful_property;
}
public int getSuccessful_professionalKnowleadge() {
	return Successful_professionalKnowleadge;
}
public void setSuccessful_professionalKnowleadge(int successful_professionalKnowleadge) {
	Successful_professionalKnowleadge = successful_professionalKnowleadge;
}
 
}
 4)GameView

主要让epmloyer_list中所有的员工都展示出来,给每个员工的按钮挂载监听事件,判断是否能添加该名员工,当员工满3个时,进入下一个界面的按钮就可以点击。

package View;

import character.employee_list;
import javafx.scene.control.Button;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import util.GameImage;
import util.LovoCanvas;
import util.LovoImage;

public class GameView  extends Pane{
	//招兵买马界面
 BorderPane root;
 private LovoImage  enternextBtnImg;
 private LovoCanvas canvas;
 private LovoImage BACK1Img;
 private  employee_list employee_list=new employee_list();
 private String  str_choose="";
 private String str_introduce="";
 private String str_Warning="";
 private LovoCanvas canvas2;
 private boolean isunderdo=false;
 public GameView(BorderPane root) {
	 this.root=root;
	 isunderdo=true;
     canvas=new LovoCanvas(0,0,800,600,this);
     canvas2=new LovoCanvas(0,0,800,600,this);
canvas.drawImage(GameImage.FOOD, 0, 0);
employee_list.getE1().setImage(new LovoImage(GameImage.EMPLYEE1,0,20,150,180,this));
employee_list.getE2().setImage(new LovoImage(GameImage.EMPLYEE2,160,20,150,180,this));
employee_list.getE3().setImage(new LovoImage(GameImage.EMPLYEE3,320,20,150,180,this));
employee_list.getE4().setImage(new LovoImage(GameImage.EMPLYEE4,480,20,150,180,this));
employee_list.getE5().setImage(new LovoImage(GameImage.EMPLYEE5,640,20,150,180,this));
employee_list.getE1().setBtnimage(new LovoImage(GameImage.SUREBTN,50,200,53,36,this));
employee_list.getE2().setBtnimage(new LovoImage(GameImage.SUREBTN,210,200,53,36,this));
employee_list.getE3().setBtnimage(new LovoImage(GameImage.SUREBTN,370,200,53,36,this));
employee_list.getE4().setBtnimage(new LovoImage(GameImage.SUREBTN,530,200,53,36,this));
employee_list.getE5().setBtnimage(new LovoImage(GameImage.SUREBTN,690,200,53,36,this));
employee_list.getE6().setImage(new LovoImage(GameImage.EMPLYEE6,0,235,150,180,this));
employee_list.getE7().setImage(new LovoImage(GameImage.EMPLYEE7,160,235,150,180,this));
employee_list.getE8().setImage(new LovoImage(GameImage.EMPLYEE8,320,235,150,180,this));
employee_list.getE9().setImage(new LovoImage(GameImage.EMPLYEE9,480,235,150,180,this));
employee_list.getE10().setImage(new LovoImage(GameImage.EMPLYEE10,640,235,150,180,this));
employee_list.getE6().setBtnimage(new LovoImage(GameImage.SUREBTN,50,415,53,36,this));
employee_list.getE7().setBtnimage(new LovoImage(GameImage.SUREBTN,210,415,53,36,this));
employee_list.getE8().setBtnimage(new LovoImage(GameImage.SUREBTN,370,415,53,36,this));
employee_list.getE9().setBtnimage(new LovoImage(GameImage.SUREBTN,530,415,53,36,this));
employee_list.getE10().setBtnimage(new LovoImage(GameImage.SUREBTN,690,415,53,36,this));
enternextBtnImg=new LovoImage(GameImage.ENTER1, 650, 550, 100, 50, this);
canvas.getGraphicsContext2D().setFill(Color. YELLOW);
canvas.getGraphicsContext2D().setFont(new Font("黑体", 20));
canvas2.getGraphicsContext2D().setFill(Color. RED);
canvas2.getGraphicsContext2D().setFont(new Font("黑体", 20));
//画生命值
//(这里的代码只运行一次)
     root.setCenter(this);
     this.handle();
 }
 private void draw() {
	 canvas.fillText("你挑选的员工是:"+str_choose, 450, 480);
	 canvas.fillText("对象介绍"+str_introduce, 0,500 );
	 canvas2.fillText(str_Warning, 300,500 );
 }
 private void clear() {
	 if(employee_list.getArrayList().size()<3) {
		str_introduce="";
		str_Warning="";
		str_choose="";
        canvas.clearRect(0,400, 800, 600);
        canvas2.clearRect(0,400, 800, 600);
        canvas.drawImage(GameImage.FOOD, 0, 0);
        }else {
    		str_introduce="";
    		str_Warning="";
            canvas.clearRect(0,400, 800, 600);
            canvas.drawImage(GameImage.FOOD, 0, 0);
        }
 }
 private  void handle(){
	  //重量级代码,(让没有获得屏幕焦点的需要监听的控件重新获得焦点)----非常重量级
	 root.requestFocus();
	 enternextBtnImg.setOnMouseEntered((e)->{
		 if(employee_list.getArrayList().size()==3) {
			 enternextBtnImg.setImage(GameImage.ENTER2);
			 }
        });
	 enternextBtnImg.setOnMouseExited((e)->{
		 enternextBtnImg.setImage(GameImage.ENTER1);
        });
	 enternextBtnImg.setOnMouseClicked((e)->{
		 if(employee_list.getArrayList().size()==3) {
			 new Game_twoView(root,this);
			 }
		 
        });
	 //后期可以加循环进行优化
	 	
	 	employee_list.getE1().getBtnimage().setOnMouseEntered((e)->{
	 		clear();
	 		str_introduce="\t姓名:"+employee_list.getE1().getName()+"\n个人介绍:"+employee_list.getE1().getWorkSkill()+"\n薪资:"+
	 	employee_list.getE1().getSalary()+"\n赚钱能力:"+employee_list.getE1().getEarn_money_ablity();
	 		draw();
        });
	 	employee_list.getE1().getBtnimage().setOnMouseExited((e)->{
	 		clear();
	 		draw();
        });
	 	employee_list.getE1().getBtnimage().setOnMouseClicked((e)->{
	 		clear();
	 		if(employee_list.add(employee_list.getE1())) {
	 			str_choose=str_choose.concat( " "+employee_list.display());
	 			System.out.println(str_choose);
	 			draw();
	 		}else {
				str_Warning="该员工的类型已经存在了哦!";
				draw();
			}

        });
	employee_list.getE2().getBtnimage().setOnMouseEntered((e)->{
 		clear();
 		str_introduce="\t姓名:"+employee_list.getE2().getName()+"\n个人介绍:"+employee_list.getE2().getWorkSkill()+"\n薪资:"+
 	employee_list.getE2().getSalary()+"\n赚钱能力:"+employee_list.getE2().getEarn_money_ablity();
 		draw();
    });
 	employee_list.getE2().getBtnimage().setOnMouseExited((e)->{
 		clear();
 		draw();
    });
 	employee_list.getE2().getBtnimage().setOnMouseClicked((e)->{
 		clear();
 		if(employee_list.add(employee_list.getE2())) {
 			str_choose=str_choose.concat( " "+employee_list.display());
 			System.out.println(str_choose);
 			draw();
 		}else {
			str_Warning="该员工的类型已经存在了哦!";
			draw();
		}
    });
employee_list.getE3().getBtnimage().setOnMouseEntered((e)->{
		clear();
		str_introduce="\t姓名:"+employee_list.getE3().getName()+"\n个人介绍:"+employee_list.getE3().getWorkSkill()+"\n薪资:"+
	employee_list.getE3().getSalary()+"\n赚钱能力:"+employee_list.getE3().getEarn_money_ablity();
		draw();
});
	employee_list.getE3().getBtnimage().setOnMouseExited((e)->{
 		clear();
 		draw();
});
	employee_list.getE3().getBtnimage().setOnMouseClicked((e)->{
 		clear();
 		if(employee_list.add(employee_list.getE3())) {
 			str_choose=str_choose.concat( " "+employee_list.display());
 			System.out.println(str_choose);
 			draw();
 		}else {
			str_Warning="该员工的类型已经存在了哦!";
			draw();
		}
});
employee_list.getE4().getBtnimage().setOnMouseEntered((e)->{
	clear();
	str_introduce="\t姓名:"+employee_list.getE4().getName()+"\n个人介绍:"+employee_list.getE4().getWorkSkill()+"\n薪资:"+
employee_list.getE4().getSalary()+"\n赚钱能力:"+employee_list.getE4().getEarn_money_ablity();
	draw();
});
	employee_list.getE4().getBtnimage().setOnMouseExited((e)->{
 		clear();
 		draw();
});
	employee_list.getE4().getBtnimage().setOnMouseClicked((e)->{
 		clear();
 		if(employee_list.add(employee_list.getE4())) {
 			str_choose=str_choose.concat( " "+employee_list.display());
 			System.out.println(str_choose);
 			draw();
 		}else {
			str_Warning="该员工的类型已经存在了哦!";
			draw();
		}
});
employee_list.getE5().getBtnimage().setOnMouseEntered((e)->{
	clear();
	str_introduce="\t姓名:"+employee_list.getE5().getName()+"\n个人介绍:"+employee_list.getE5().getWorkSkill()+"\n薪资:"+
employee_list.getE5().getSalary()+"\n赚钱能力:"+employee_list.getE5().getEarn_money_ablity();
	draw();
});
	employee_list.getE5().getBtnimage().setOnMouseExited((e)->{
 		clear();
 		draw();
});
	employee_list.getE5().getBtnimage().setOnMouseClicked((e)->{
 		clear();
 		if(employee_list.add(employee_list.getE5())) {
 			str_choose=str_choose.concat( " "+employee_list.display());
 			System.out.println(str_choose);
 			draw();
 		}else {
			str_Warning="该员工的类型已经存在了哦!";
			draw();
		}
});
employee_list.getE6().getBtnimage().setOnMouseEntered((e)->{
	clear();
	str_introduce="\t姓名:"+employee_list.getE6().getName()+"\n个人介绍:"+employee_list.getE6().getWorkSkill()+"\n薪资:"+
employee_list.getE6().getSalary()+"\n赚钱能力:"+employee_list.getE6().getEarn_money_ablity();
	draw();
});
	employee_list.getE6().getBtnimage().setOnMouseExited((e)->{
 		clear();
 		draw();
});
	employee_list.getE6().getBtnimage().setOnMouseClicked((e)->{
 		clear();
 		if(employee_list.add(employee_list.getE6())) {
 			str_choose=str_choose.concat( " "+employee_list.display());
 			System.out.println(str_choose);
 			draw();
 		}else {
			str_Warning="该员工的类型已经存在了哦!";
			draw();
		}
});
employee_list.getE7().getBtnimage().setOnMouseEntered((e)->{
	clear();
	str_introduce="\t姓名:"+employee_list.getE7().getName()+"\n个人介绍:"+employee_list.getE7().getWorkSkill()+"\n薪资:"+
employee_list.getE7().getSalary()+"\n赚钱能力:"+employee_list.getE7().getEarn_money_ablity();
	draw();
});
	employee_list.getE7().getBtnimage().setOnMouseExited((e)->{
 		clear();
 		draw();
});
	employee_list.getE7().getBtnimage().setOnMouseClicked((e)->{
 		clear();
 		if(employee_list.add(employee_list.getE7())) {
 			str_choose=str_choose.concat( " "+employee_list.display());
 			System.out.println(str_choose);
 			draw();
 		}else {
			str_Warning="该员工的类型已经存在了哦!";
			draw();
		}
});
employee_list.getE8().getBtnimage().setOnMouseEntered((e)->{
	clear();
	str_introduce="\t姓名:"+employee_list.getE8().getName()+"\n个人介绍:"+employee_list.getE8().getWorkSkill()+"\n薪资:"+
employee_list.getE8().getSalary()+"\n赚钱能力:"+employee_list.getE8().getEarn_money_ablity();
	draw();
});
	employee_list.getE8().getBtnimage().setOnMouseExited((e)->{
 		clear();
 		draw();
});
	employee_list.getE8().getBtnimage().setOnMouseClicked((e)->{
 		clear();
 		if(employee_list.add(employee_list.getE8())) {
 			str_choose=str_choose.concat( " "+employee_list.display());
 			System.out.println(str_choose);
 			draw();
 		}else {
			str_Warning="该员工的类型已经存在了哦!";
			draw();
		}
});
employee_list.getE9().getBtnimage().setOnMouseEntered((e)->{
	clear();
	str_introduce="\t姓名:"+employee_list.getE9().getName()+"\n个人介绍:"+employee_list.getE9().getWorkSkill()+"\n薪资:"+
employee_list.getE9().getSalary()+"\n赚钱能力:"+employee_list.getE9().getEarn_money_ablity();
	draw();
});
	employee_list.getE9().getBtnimage().setOnMouseExited((e)->{
 		clear();
 		draw();
});
	employee_list.getE9().getBtnimage().setOnMouseClicked((e)->{
 		clear();
 		if(employee_list.add(employee_list.getE9())) {
 			str_choose=str_choose.concat( " "+employee_list.display());
 			System.out.println(str_choose);
 			draw();
 		}else {
			str_Warning="该员工的类型已经存在了哦!";
			draw();
		}
});
employee_list.getE10().getBtnimage().setOnMouseEntered((e)->{
	clear();
	str_introduce="\t姓名:"+employee_list.getE10().getName()+"\n个人介绍:"+employee_list.getE10().getWorkSkill()+"\n薪资:"+
employee_list.getE10().getSalary()+"\n赚钱能力:"+employee_list.getE10().getEarn_money_ablity();
	draw();
});
	employee_list.getE10().getBtnimage().setOnMouseExited((e)->{
 		clear();
 		draw();
});
	employee_list.getE10().getBtnimage().setOnMouseClicked((e)->{
 		clear();
 		if(employee_list.add(employee_list.getE10())) {
 			str_choose=str_choose.concat( " "+employee_list.display());
 			System.out.println(str_choose);
 			draw();
 		}else {
			str_Warning="该员工的类型已经存在了哦!";
			draw();
		}
});
	root.setOnKeyPressed((e)->{       
		if (e.getCode()== KeyCode.E||e.getText()=="e") {
			//实现大小写字母的监听事件
			System.out.println("检测到了E键被按下");

				System.out.println("进行删除操作");
				 employee_list.remove();
				 System.out.println(employee_list.display());
			}else {
				System.out.println("ffffff");
			}
			
		});
//	});
}
 //set和get方法
public employee_list getEmployee_list() {
	return employee_list;
}
public void setEmployee_list(employee_list employee_list) {
	this.employee_list = employee_list;
}
public boolean isIsunderdo() {
	return isunderdo;
}
public void setIsunderdo(boolean isunderdo) {
	this.isunderdo = isunderdo;
}
 
 }

 6.Game_twoView(经营界面)

package View;

import character.employee_list;
import character.employer;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import sun.security.krb5.internal.rcache.AuthTimeWithHash;
import util.FileUtil;
import util.GameImage;
import util.LovoCanvas;
import util.LovoImage;

public class Game_twoView extends Pane implements Runnable{
	//餐厅经营界面
	private LovoCanvas canvas;
	private LovoCanvas canvas2;
	private LovoCanvas canVas3;
	private Button bt1=new Button();
	private ProgressBar pb =new ProgressBar();
	private BorderPane root;
	private employee_list employee_list;
	//输入 人缘,自信度,财产,表示专业知识
	private employer employer=new employer(10,10,0,10);
	private float count=0;
	private boolean isPress=false;
	private boolean underdo=true;//表示线程是否正在运行
	private int day=1;
	private LovoImage  againBtn ;
	private LovoImage gaishanImage;
	private LovoImage peixunImage;
	private LovoImage zhuangxiuImage;
	private TextArea ta =new TextArea();
	private boolean iszhuangxiu=false;
	private boolean ispeixun=false;
	private boolean isgaishan=false;
	private boolean isdayupdate=false;
	public float addcount() {
		if(count<100) {
			count+=5;
			return count;
		}else {
			return count;
		}

	}
	public Game_twoView(BorderPane root,GameView gameView) {
		GridPane gPane =new GridPane();
        final ScrollPane scrollPane=new ScrollPane(ta);
        ta.setPrefColumnCount(15);
        ta.setEditable(false);
		this.root=root;
		canvas=new LovoCanvas(0, 0, 800, 600, this);
		canvas=new LovoCanvas(0, 0, 800, 600, this.root);
		canvas2=new LovoCanvas(0, 0, 800, 600, this.root);
		canVas3=new LovoCanvas(0, 0, 800, 600, this.root);
		bt1.setLayoutX(105);
		bt1.setLayoutY(34);
		bt1.setMnemonicParsing(false);
		bt1.setText("开始经营!");
		pb.setLayoutX(33);
		pb.setLayoutY(123);
		pb.setPrefWidth(500);
		pb.setProgress(0);
		//把 gameView 的员工名单传过来(灰常重要)
		this.employee_list=gameView.getEmployee_list();
		gPane.add(bt1, 5, 5);
		gPane.add(pb, 5, 10);
        gPane.add(scrollPane, 10, 40, 50, 50);
		this.root.setCenter(this);
		this.root.setCenter(gPane);
		canvas.getGraphicsContext2D().setFill(Color. WHITE);
		canvas.getGraphicsContext2D().setFont(new Font("黑体", 18));
		canvas2.getGraphicsContext2D().setFill(Color.YELLOW);
		canvas2.getGraphicsContext2D().setFont(new Font("黑体", 25));
		canVas3.getGraphicsContext2D().setFill(Color.BLUE);
		canVas3.getGraphicsContext2D().setFont(new Font("黑体", 16));
		againBtn=new LovoImage(GameImage.AGAIN, 400, 400, 158, 50, this.root);
		againBtn.setImage(null); 
		//下面三行代码不能让图片显示出来,但一定要先实例化,因为要在Handle中调用
		gaishanImage=new LovoImage(GameImage.GAISHAN, 0, 200, 100, 200, this.root);
		peixunImage=new LovoImage(GameImage.PEIXUN, 150, 200, 100, 200, this.root);
		zhuangxiuImage =new LovoImage(GameImage.ZHUANGXIU, 300, 200, 100, 200, this.root);
		gaishanImage.setImage(null);
		peixunImage.setImage(null);
		zhuangxiuImage.setImage(null);
		employee_list.sumBond();
		//好感度累积
		employer.setPopularity(employee_list.sum_Popularity()+employer.getPopularity());
		System.out.println("zxaaS SAs A Sa sa SA  :"+employee_list.getProvinceBond());
			//在线程外初始化十分关键,不然每次在线程中的累加就变成了赋值
	      employer.setProperty((employer.getProperty()-employee_list.sum_Salary()));
	      employee_list.setSum_earn(employee_list.sum_earn());
		Draw_employer_information();
		new Thread(this).start();
	}

	//装修店铺,seteranmomey+20,setproperity-100
	private void handle() {
		 peixunImage.setOnMouseEntered((e)->{
			 //显示培训要花20块,赚钱能力提升10
			 ta.setText("员工培训要花20块,赚钱能力提升10");
			 System.out.println("1");
	        });
		 peixunImage.setOnMouseExited((e)->{
			 
	        });
		 peixunImage.setOnMouseClicked((e)->{
				ispeixun=true;
			 
	        });
		 gaishanImage.setOnMouseEntered((e)->{
			 System.out.println("2");
			 ta.setText("改善菜谱要花30块,赚钱能力提升12");
	        });
		 gaishanImage.setOnMouseExited((e)->{

	        });
		 gaishanImage.setOnMouseClicked((e)->{
/
			 isgaishan=true;
	        });
		 zhuangxiuImage.setOnMouseEntered((e)->{
			 
			 System.out.println("3");
			 ta.setText("装修店铺要花50块,赚钱能力提升25");
	        });
		 zhuangxiuImage.setOnMouseExited((e)->{

	        });
		 zhuangxiuImage.setOnMouseClicked((e)->{
			 iszhuangxiu=true;
	        });
		bt1.setOnMouseClicked((e)->{
			pb.setProgress(0);
			isPress=true;
			isdayupdate=true;
			clear();
			Draw_employer_information();
			});
		againBtn.setOnMouseClicked((e)->{
			System.out.println("HHHH");
			new GameView(root);
			clear();

	        againBtn.setImage(null);
	        peixunImage.setImage(null);
	        zhuangxiuImage.setImage(null);
	        gaishanImage.setImage(null);
		});
	}
	//用于经营完毕后,雇佣主信息的打印
	private void Draw_employer_information() {
		canvas2.fillText("第"+day+"天", 100, 150);
		canvas.fillText("你目前的财产:\t"+employer.getProperty(), 450, 380);
		canvas.fillText("你目前的自信度:\t"+employer.getConfident(), 450, 400);
		canvas.fillText("员工目前对你好感度的总和:\t"+employer.getPopularity(), 450, 420);
		canvas.fillText("你目前的专业知识能力值:\t"+employer.getProfessionalKnowleadge(), 450, 440);
		canvas.fillText("你目前的员工的赚钱能力:\t"+employee_list.getSum_earn(), 450, 460);
		canVas3.fillText("你的员工目前有的地区羁绊指数(对员工进行培训,有奇效)是:"+employee_list.getProvinceBond()+
				"\n你员工的个人羁绊:"+employee_list.displayString(employee_list.getPersonalBond()), 0, 500);
	}
	private void clear() {
        canvas.clearRect(0, 0, 800, 600);
        canvas2.clearRect(0, 0, 800, 600);
        canVas3.clearRect(0, 0, 800, 600);

	}
	private String panduan(int i,int j) {
		if(i>j) {
			return ">";
		}else if (i<j) {
			return "<";
		}else {
			return "=";
		}
		
	}
	@Override
	public void run() {
		handle();
		// TODO Auto-generated method stub
		while(underdo) {
			//可能jpg和png会有不同的效果,让这些选项一直显示
			peixunImage.setImage(GameImage.PEIXUN);
			gaishanImage.setImage(GameImage.GAISHAN);   
			zhuangxiuImage.setImage(GameImage.ZHUANGXIU);
			// 解决emplyer的数值无法实现二次变化的问题(try一try)
			if(isgaishan==true) {
				if(employer.getProperty()-30>0) {
					
					 employer.setProperty(employer.getProperty()-30);
					 int i=1;
					 if(employee_list.getPersonBondValue()==3) {
						 i=employee_list.getPersonBondValue();
					 }
					 employee_list.setSum_earn(employee_list.getSum_earn()+12*i);
					 System.out.println(employer.getProperty());
					 System.out.println(employee_list.getSum_earn());
						clear();
						Draw_employer_information();
				}else {
					ta.setText("你的钱不够哦");
				}
				isgaishan=false;
			}
			if(ispeixun==true) {
					if(employer.getProperty()-30>0) {
						 System.out.println("sdasd");
						 employer.setProperty(employer.getProperty()-20);
						 //地区羁绊对员工培训有加成;
						 employee_list.setSum_earn(employee_list.getSum_earn()+10*employee_list.getProvinceBond());
						 System.out.println(employer.getProperty());
						 System.out.println(employee_list.getSum_earn());
							clear();
							Draw_employer_information();
					}else {
						ta.setText("你的钱不够哦");
					}
				ispeixun=false;
			}
			if(iszhuangxiu==true) {
					clear();
					Draw_employer_information();
					
					if(employer.getProperty()-50>0) {
						 employer.setProperty(employer.getProperty()-50);
						 int i=1;
						 if(employee_list.getPersonBondValue()==2) {
							 i=2;
						 }
						 employee_list.setSum_earn(employee_list.getSum_earn()+25*i);
						 System.out.println(employer.getProperty());
						 System.out.println(employer.getProperty());
					}else {
						ta.setText("你的钱不够哦");
					}
				iszhuangxiu=false;
			}
			//每天钱增加(要考虑到初始化)
			if(isdayupdate==true) {
				employer.setProperty(employer.getProperty()+employee_list.getSum_earn());
				clear();
				Draw_employer_information();
				isdayupdate=false;
			}
			
			//规定第几天是结束节点
			if(day==7) {
				if(employer.juadge()) {
					underdo=false;
					 Platform.runLater(()->{//游戏结束
		                    Alert alert =new Alert(Alert.AlertType.INFORMATION);
		                    alert.setTitle("Congratulation!");
		                    alert.setHeaderText("恭喜你,是个优秀的经营者");
		                    alert.setContentText("\n员工对你的好感度是:"+employer.getPopularity()+panduan(employer.getPopularity(), employer.getSuccessful_popularity())+employer.getSuccessful_popularity()
		                    +"\n你的总资产是:"+employer.getProperty()+panduan(employer.getProperty(), employer.getSuccessful_property())+employer.getSuccessful_property()
		                    +"\n你的自信度是:"+employer.getConfident()+panduan(employer.getConfident(), employer.getSuccessful_confident())+employer.getSuccessful_confident()
		                    +"\n你的专业知识数值是:"+employer.getProfessionalKnowleadge()+panduan(employer.getProfessionalKnowleadge(), employer.getSuccessful_professionalKnowleadge())+employer.getSuccessful_professionalKnowleadge()
		                    		);
		                    alert.show();
		                    alert.setOnCloseRequest((e)->{
		                    	System.out.println("sdasd");
		                    	clear();
		                    	new EndView(root,this);
		                    });
					System.out.println("你赢了");
	                    });
				}else {
					againBtn.setImage(GameImage.AGAIN);  
					underdo=false;
					handle();
	                Platform.runLater(()->{//游戏结束
	                    Alert alert =new Alert(Alert.AlertType.INFORMATION);
	                    alert.setTitle("失败了,再接再厉");
	                    alert.setHeaderText("很可惜,你的一些能力没有达到规定的数值,没有成为一位优秀的经营者");
	                    alert.setContentText("\n员工对你的好感度是:"+employer.getPopularity()+panduan(employer.getPopularity(), employer.getSuccessful_popularity())+employer.getSuccessful_popularity()
	                    +"\n你的总资产是:"+employer.getProperty()+panduan(employer.getProperty(), employer.getSuccessful_property())+employer.getSuccessful_property()
	                    +"\n你的自信度是:"+employer.getConfident()+panduan(employer.getConfident(), employer.getSuccessful_confident())+employer.getSuccessful_confident()
	                    +"\n你的专业知识数值是:"+employer.getProfessionalKnowleadge()+panduan(employer.getProfessionalKnowleadge(), employer.getSuccessful_professionalKnowleadge())+employer.getSuccessful_professionalKnowleadge()
	                    		);
	                    alert.show();
	                    alert.setOnCloseRequest((e)->{
	                    	System.out.println("sdasd");
	                    	clear();
//	                    	new EndView(root);
	                    });
	                });
				}
			}
			
			if(isPress==true) {

				if(count>=100) {
					count=0;
					isPress=false;
					day++;
					System.out.println("day:"+day);
				}else {
					pb.setProgress(addcount()/100);
					System.out.println(count);
					System.out.println("addcount:"+addcount());
				}
			}
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
		}

		
		day=1;
	}
	public employee_list getEmployee_list() {
		return employee_list;
	}
	public void setEmployee_list(employee_list employee_list) {
		this.employee_list = employee_list;
	}
	public employer getEmployer() {
		return employer;
	}
	public void setEmployer(employer employer) {
		this.employer = employer;
	}

	}

 主要利用如图所示的代码实现了一个进度条的功能

例如通过如图所示的代码判断现在的钱能否能进行改善菜谱的操作,如果进行了就要修改目前的资金和员工的赚钱能力。

 通过如图所示代码实现当时间到七天时,弹出一个Alert窗口,判断获得的资产是否满足要求,然后跳转到排行榜界面

			if(day==7) {
				if(employer.juadge()) {
					underdo=false;
					 Platform.runLater(()->{//游戏结束
		                    Alert alert =new Alert(Alert.AlertType.INFORMATION);
		                    alert.setTitle("Congratulation!");
		                    alert.setHeaderText("恭喜你,是个优秀的经营者");
		                    alert.setContentText("\n员工对你的好感度是:"+employer.getPopularity()+panduan(employer.getPopularity(), employer.getSuccessful_popularity())+employer.getSuccessful_popularity()
		                    +"\n你的总资产是:"+employer.getProperty()+panduan(employer.getProperty(), employer.getSuccessful_property())+employer.getSuccessful_property()
		                    +"\n你的自信度是:"+employer.getConfident()+panduan(employer.getConfident(), employer.getSuccessful_confident())+employer.getSuccessful_confident()
		                    +"\n你的专业知识数值是:"+employer.getProfessionalKnowleadge()+panduan(employer.getProfessionalKnowleadge(), employer.getSuccessful_professionalKnowleadge())+employer.getSuccessful_professionalKnowleadge()
		                    		);
		                    alert.show();
		                    alert.setOnCloseRequest((e)->{
		                    	System.out.println("sdasd");
		                    	clear();
		                    	new EndView(root,this);
		                    });
					System.out.println("你赢了");
	                    });

 7.EndView(排行榜)

通过调用FileUpdateDownload工具中修改、添加用户信息,更新排行榜

package View;

import character.employee_list;
import javafx.scene.canvas.Canvas;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import util.FileUpdateDownload;
import util.GameImage;
import util.LovoCanvas;
import util.LovoImage;

public class EndView extends Pane {
 BorderPane root;
 private Game_twoView game_twoView;
 private LovoCanvas canvas2;
 private LovoCanvas canvas;
 private LovoImage falseImage;
 private LovoImage surpriseImage;
 private LovoImage backgrImage;
 private   LovoImage  againImg;
 private boolean ispress=false;
 private 	FileUpdateDownload fileUpdateDownload= new FileUpdateDownload();
public EndView(BorderPane root, Game_twoView  game_twoView) {
	//这里可以做个类似于排行榜的界面
	//可以看每个员工组合不同的营业额

	//写入文件
	fileUpdateDownload.saveAsFileWriter("你带领的员工是:"+game_twoView.getEmployee_list().display()+"   你获得的财产:"+game_twoView.getEmployer().getProperty());
	
	this.game_twoView=game_twoView;
	this.root=root;
	System.out.println(game_twoView.getEmployee_list().display());
//注意lovoimage 一定要写在画布之上
    canvas=new LovoCanvas(0,0,800,600,this);
    canvas.drawImage(GameImage.FOOD, 0, 0);
	canvas.getGraphicsContext2D().setFill(Color. WHITE);
    canvas.getGraphicsContext2D().setFont(new Font("黑体", 25));
    canvas2=new LovoCanvas(0,0,800,600,this);
   	canvas2.getGraphicsContext2D().setFill(Color. WHITE);
       canvas2.getGraphicsContext2D().setFont(new Font("黑体", 25));
//       backgrImage=new LovoImage(GameImage.FOOD, 0, 0, 800, 600, this);
       //不能用lovoimage ,因为会把画布遮住
	surpriseImage=new LovoImage(GameImage.SURPRISE, 0, 0, 47, 45, this);
	//打出历史记录:(没有反应)
	canvas2.fillText(fileUpdateDownload.saveAsFileRead(), 0, 100);
  againImg=new LovoImage(GameImage.AGAIN,600,500,10,10,this);
    this.handle();
    root.setCenter(this);
}
public void handle(){
//	canvas.drawImage(GameImage.FOOD, 0, 0); 不能实现对上一图层的遮掩
    againImg.setOnMouseClicked((e)->{
        new GameView(root);
        canvas.clearRect(800, 600, 0, 0);

    });
    surpriseImage.setOnMouseClicked((e)->{
    	System.out.println(ispress);
        if(ispress==false) {
        	canvas2.clearRect(0, 0, 800, 600);
    	canvas.fillText("感谢你的体验!"
    			+ "\n寄语:普通的经营也有特别的道理————————"
    			+ "\n1.要注重细节"
    			+ "\n2.你duck不必太看重一个人的能力"
    			+ "\n3.你或许可以little关注一个团队的效应"
    			+ "\n4.或许对自己而言,在某个条件下自己也\n"
    			+ "能有某种“化学反应”,让自己都被惊艳到!"
    			, 0, 100);
    	ispress=true;
        }else {
        	canvas2.fillText(fileUpdateDownload.saveAsFileRead(), 0, 100);
    				canvas.clearRect(0, 0, 800, 600);
    				ispress=false;
    			}
    });
}
}

总结:因为是使用javaFx组件,所以新版本可能会不兼容。同时由于是整活程序,个人色彩很多,数值设置不科学,有些属性,好感度、自信度也没有用到,随机事件也没有添加,后期有时间的话可以填个坑。

同时这个项目还是蛮有意义的,虽然是整活,设计了一些省份的加分和选择不同的人之前的羁绊的加分,就是想体现团队的作用,下面附上下载链接

下载

源码:

链接:https://pan.baidu.com/s/1nsRmb0XOEuZ3NDMSWtrOFg?pwd=k5a2
提取码:k5a2

运行文件:

链接:https://pan.baidu.com/s/1jlo9tcVO0TvD-HXikTtPCw?pwd=f7jo
提取码:f7jo

大家如果想把自己的java程序变成可以执行的exe,那就可以去看这篇博客

图文详解如何将java编写的程序转为exe文件_java_脚本之家

寄语:愿诸兄在生活中也能找到一个团队,让你能在其中发挥自己的价值,惊艳自己!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值