套路和之前的一样,不知道的请参考https://blog.csdn.net/A5wa41s/article/details/107189003
废话不多说,直接上代码
1.Main.java
package application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Parent root = FXMLLoader.load(getClass().getResource("/application/ui.fxml"));//加载布局文件ui.fxml
primaryStage.setTitle("石头剪刀布"); //设置标题
primaryStage.setScene(new Scene(root)); //设置主面板
primaryStage.show(); //显示主界面
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
2.MyController.java
package application;
import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundImage;
import javafx.scene.layout.BackgroundSize;
public class MyController implements Initializable {
@FXML private ImageView iv1; //敌人控件
@FXML private ImageView iv2; //自己控件
@FXML private Button jd; //剪刀控件
@FXML private Button st; //石头控件
@FXML private Button bu; //布控件
private Image jdImage = new Image("jd.jpg"); //剪刀图片
private Image stImage = new Image("st.jpg"); //石头图片
private Image buImage = new Image("bu.jpg"); //布图片
private BackgroundSize bs = new BackgroundSize(150, 150, false, false, false, false); //设置画的图形的大小
private BackgroundImage biJd = new BackgroundImage(jdImage, null, null, null, bs); //背景剪刀
private BackgroundImage biSt = new BackgroundImage(stImage, null, null, null, bs); //背景石头
private BackgroundImage biBu = new BackgroundImage(buImage, null, null, null, bs); //背景布
private int my = 0; //我出的 1为石头 2为剪刀 3为布
private int enemy = 0; //敌人出的
@Override
public void initialize(URL arg0, ResourceBundle arg1) { //首先调用此方法
again(); //重新开始
jd.setBackground(new Background(biJd)); //设置剪刀的图片
st.setBackground(new Background(biSt)); //设置石头的图片
bu.setBackground(new Background(biBu)); //设置布的图片
}
//点击图片开始游戏
public void play(ActionEvent event) {
Button b = (Button) event.getSource(); //获得点击的按钮
my = Integer.parseInt(b.getId()); //我出
switch (my) {
case 1: //剪刀
iv2.setImage(jdImage);
break;
case 2: //石头
iv2.setImage(stImage);
break;
case 3: //布
iv2.setImage(buImage);
break;
}
enemy(); //敌人出
check(); //判断输赢
}
//敌人随机
private void enemy() {
Random r = new Random();
enemy = r.nextInt(3)+1; //生成1-3随机数 敌人随机出
switch(enemy) {
case 1: //敌人出剪刀
iv1.setImage(jdImage);
break;
case 2: //敌人出石头
iv1.setImage(stImage);
break;
case 3: //敌人出布
iv1.setImage(buImage);
break;
}
}
//判断输赢
private void check() {
if(my == 1) { //我出了剪刀
switch (enemy) {
case 1: //敌人出了剪刀
System.out.println("平局!");
break;
case 2: //敌人出了石头
System.out.println("你输了!");
break;
case 3: //敌人出了布
System.out.println("你赢了!");
break;
}
}else if(my == 2) { //我出了石头
switch (enemy) {
case 1: //敌人出了剪刀
System.out.println("你赢了");
break;
case 2: //敌人出了石头
System.out.println("平局!");
break;
case 3: //敌人出了布
System.out.println("你输了!");
break;
}
}else if(my == 3) { //我出了布
switch (enemy) {
case 1: //敌人出了剪刀
System.out.println("你输了!");
break;
case 2: //敌人出了石头
System.out.println("你赢了");
break;
case 3: //敌人出了布
System.out.println("平局!");
break;
}
}
}
//重新开始
private void again() {
my = 0; //我还没出
enemy = 0; //敌人也没出
iv1.setImage(null);
iv2.setImage(null);
}
}
3.ui.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.image.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.shape.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane maxHeight="800.0" maxWidth="600.0" minHeight="800.0" minWidth="600.0" prefHeight="800.0" prefWidth="600.0" style="-fx-background-color: #eeeeee;" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MyController">
<children>
<Line endX="600.0" layoutY="300.0" strokeWidth="5.0" />
<Line endX="600.0" layoutY="600.0" strokeWidth="5.0" />
<Button id="1" fx:id="jd" layoutX="25.0" layoutY="625.0" maxHeight="150.0" maxWidth="150.0" minHeight="150.0" minWidth="150.0" mnemonicParsing="false" onAction="#play" prefHeight="150.0" prefWidth="150.0" />
<Button id="2" fx:id="st" layoutX="225.0" layoutY="625.0" maxHeight="150.0" maxWidth="150.0" minHeight="150.0" minWidth="150.0" mnemonicParsing="false" onAction="#play" prefHeight="150.0" prefWidth="150.0" />
<Button id="3" fx:id="bu" layoutX="425.0" layoutY="625.0" maxHeight="150.0" maxWidth="150.0" minHeight="150.0" minWidth="150.0" mnemonicParsing="false" onAction="#play" prefHeight="150.0" prefWidth="150.0" />
<ImageView id="iv1" fx:id="iv1" fitHeight="280.0" fitWidth="280.0" layoutX="160.0" layoutY="10.0" pickOnBounds="true" preserveRatio="true" />
<ImageView id="iv2" fx:id="iv2" fitHeight="280.0" fitWidth="280.0" layoutX="160.0" layoutY="310.0" pickOnBounds="true" preserveRatio="true" />
</children>
</AnchorPane>
运行效果如下:
学习交流请加QQ群:1062828738