项目效果展示
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_脚本之家
寄语:愿诸兄在生活中也能找到一个团队,让你能在其中发挥自己的价值,惊艳自己!