编写一个和计算机交互的“石头-剪刀-布”游戏程序。当两个人玩的时候,每个人要同时选择一项(用手势表示),然后决出胜负。规则为石头赢剪刀,剪刀赢布,布赢石头。程序必须随机选取一项但不显示给玩家,然后提示用户选择。当用户选择后,程序同时显示出计算机和用户的选择并且输出游戏结果。游戏一直进行到用户退出为止,然后输出双方输赢的次数及和局的次数。


实验过程

1. 目录结构
2. 实验代码
3. 实验效果

1 . 目录结构

2. 实验代码

MainController

package tech.zger.www.controller;import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;/*** @author zg* @create 2021/11/16 0:45*/
public class MainController implements Initializable {private static final int SCISSOR = 0;private static final int CLOTH = 1;private static final int STONE = 2;/*** 电脑玩家的选择*/@FXMLprivate ImageView computer;/*** 玩家的选择*/@FXMLprivate ImageView people;/*** 平局*/private int draw;private int win;private int fail;/*** 完成一局游戏需要点击 再来一次 才能进行下一次游戏*/private boolean changeable = true;@FXMLprivate void clickScissors() {if (changeable) {this.people.setImage(new Image(getClass().getResourceAsStream("/tech/zger/www/images/scissor.png")));int computerInput = this.generateRandomSign();if (computerInput == SCISSOR) {this.draw++;showDraw();} else if (computerInput == CLOTH) {this.win++;showWin();} else {this.fail++;showFail();}changeable = false;}}@FXMLprivate void clickCloth() {if (changeable) {this.people.setImage(new Image(getClass().getResourceAsStream("/tech/zger/www/images/cloth.png")));int computerInput = this.generateRandomSign();if (computerInput == CLOTH) {this.draw++;showDraw();} else if (computerInput == STONE) {this.win++;showWin();} else {this.fail++;showFail();}changeable = false;}}@FXMLprivate void clickStone() {if (changeable) {this.people.setImage(new Image(getClass().getResourceAsStream("/tech/zger/www/images/stone.png")));int computerInput = this.generateRandomSign();if (computerInput == STONE) {this.draw++;showDraw();} else if (computerInput == SCISSOR) {this.win++;showWin();} else {this.fail++;showFail();}changeable = false;}}@FXMLprivate void reset() {this.computer.setImage(new Image("/tech/zger/www/images/judge.png"));this.people.setImage(new Image("/tech/zger/www/images/judge.png"));this.changeable = true;}@FXMLprivate void showResult() {Stage stage = new Stage();stage.setTitle("结果预览");stage.setResizable(false);stage.getIcons().add(new Image(getClass().getResourceAsStream("/tech/zger/www/images/logo/zg.jpg")));try {Pane pane = FXMLLoader.load(getClass().getResource("/tech/zger/www/view/result.fxml"));// 总场次int all = this.draw + this.win + this.fail;// 获取id = xxx  的标签并赋值((Label) (pane.lookup("#win"))).setText("" + this.win);((Label) (pane.lookup("#lost"))).setText("" + this.fail);((Label) (pane.lookup("#draw"))).setText("" + this.draw);((Label) (pane.lookup("#all"))).setText("" + all);Scene scene = new Scene(pane, 400, 250);stage.setScene(scene);stage.show();} catch (IOException e) {e.printStackTrace();}}private int generateRandomSign() {int n = (int) (Math.random() * 10) % 3;int computerInput;if (n == SCISSOR) {this.computer.setImage(new Image("/tech/zger/www/images/scissor.png"));computerInput = SCISSOR;} else if (n == CLOTH) {this.computer.setImage(new Image("/tech/zger/www/images/cloth.png"));computerInput = CLOTH;} else {this.computer.setImage(new Image("/tech/zger/www/images/stone.png"));computerInput = STONE;}return computerInput;}private void showWin() {Alert alert = new Alert(Alert.AlertType.INFORMATION);alert.setHeaderText("YOU WIN!");alert.setContentText("点击再来一次按钮可再次进行游戏");alert.setTitle("第" + (draw + win + fail) + "次游戏的结果");alert.show();}private void showFail() {Alert alert = new Alert(Alert.AlertType.INFORMATION);alert.setHeaderText("YOU LOST!");alert.setContentText("点击再来一次按钮可再次进行游戏");alert.setTitle("第" + (draw + win + fail) + "次游戏的结果");alert.show();}private void showDraw() {Alert alert = new Alert(Alert.AlertType.INFORMATION);alert.setHeaderText("Draw!");alert.setContentText("点击再来一次按钮可再次进行游戏");alert.setTitle("第" + (draw + win + fail) + "次游戏的结果");alert.show();}@Overridepublic void initialize(URL location, ResourceBundle resources) {this.draw = 0;this.win = 0;this.fail = 0;}
}

MainApplication

package tech.zger.www;import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;import java.io.IOException;/*** @author zg* @create 2021/11/16 0:16*/
public class MainApplication extends Application {public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("石头剪刀布");primaryStage.setResizable(false);primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/tech/zger/www/images/logo/zg.jpg")));try {Pane pane = FXMLLoader.load(getClass().getResource("/tech/zger/www/view/index.fxml"));Scene scene = new Scene(pane, 600, 400);primaryStage.setScene(scene);primaryStage.show();} catch (IOException e) {e.printStackTrace();}}
}

index.fxml

<?xml version="1.0" encoding="UTF-8"?><?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?><Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0"prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1"fx:controller="tech.zger.www.controller.MainController"><children><ImageView fx:id="computer" fitHeight="150.0" fitWidth="200.0" layoutX="106.0" layoutY="75.0"pickOnBounds="true" preserveRatio="true"><image><Image url="@../images/judge.png"/></image></ImageView><Label layoutX="157.0" layoutY="26.0" text="电脑玩家"/><Button layoutX="141.0" layoutY="282.0" mnemonicParsing="false" onAction="#clickStone" text="石头"/><Button layoutX="288.0" layoutY="282.0" mnemonicParsing="false" onAction="#clickScissors"text="剪刀"/><Button layoutX="411.0" layoutY="282.0" mnemonicParsing="false" onAction="#clickCloth"prefHeight="23.0" prefWidth="40.0" text="布"/><ImageView fx:id="people" fitHeight="150.0" fitWidth="200.0" layoutX="321.0" layoutY="75.0" pickOnBounds="true"preserveRatio="true"><image><Image url="@../images/judge.png"/></image></ImageView><Label layoutX="364.0" layoutY="26.0" text="你的选择"/><Button layoutX="364.0" layoutY="349.0" mnemonicParsing="false" onAction="#showResult" text="结果预览"/><Button layoutX="181.0" layoutY="349.0" mnemonicParsing="false" onAction="#reset" text="再来一次"/></children>
</Pane>

result.fxml

<?xml version="1.0" encoding="UTF-8"?><?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?><Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="250.0"prefWidth="400.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1"><children><Label layoutX="112.0" layoutY="50.0" text="赢"/><Label fx:id="win" layoutX="233.0" layoutY="50.0" text="0" id="win"/><Label layoutX="112.0" layoutY="90.0" text="输"/><Label fx:id="fail" layoutX="233.0" layoutY="90.0" text="0" id="lost"/><Label layoutX="112.0" layoutY="131.0" text="平局"/><Label fx:id="draw" layoutX="233.0" layoutY="131.0" text="0" id="draw"/><Label layoutX="112.0" layoutY="176.0" text="总场次"/><Label fx:id="all" layoutX="233.0" layoutY="176.0" text="0" id="all"/></children>
</Pane>

3. 结果展示

  • 初始界面

  • 进行游戏

  • 再来一次

  • 结果预览

JavaFX实验2 石头剪刀布相关推荐

  1. android石头剪刀布的小游戏,JavaFX实现石头剪刀布小游戏

    用JavaFX写一个石头剪刀布的小游戏,供大家参考,具体内容如下 课程上布置的作业,其实java很少用来写这种程序的 - GUI界面部分 - 石头剪刀布的逻辑部分 书上教的是JavaFX,其实还有很多 ...

  2. 【数据库实验】《小型MIS的开发》— JavaFx 开发 民航票务管理系统

    <小型MIS的开发> 需求描述 数据库建表 用户表的 SQL 航班信息表的 SQL 项目演示 GitHub 网址获取源代码 比较重要的知识点 JavaFx 中 spring 工厂如何创建 ...

  3. 【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT)图形化界面(JavaFx)

    页面置换算法图形化界面 前言 运行效果 源码 FIFO LRU OPT FXML界面 控制器 启动类 前言 其实以前操作系统实验的时候我写过了三份了:(命令行) 页面置换算法 (FIFO.LRU.OP ...

  4. java小时钟实验报告_JAVA实验报告(运用JavaFx实现时钟动画).doc

    JAVA实验报告(运用JavaFx实现时钟动画),javafx时钟,javafx动画,javafx等待动画,javafx动画效果,时钟动画,ppt时钟动画,时钟机关之星动画化,flash时钟动画,fl ...

  5. JavaFx/Java 大作业 五子棋 实验报告

    Java大作业五子棋实验报告 实验目的 通过此次实验,对这一学期学习的内容尤其是界面开发部分做了一个很好的回顾,看似简单的五子棋程序,设计好也确实费了我一点功夫 功能模块简介和系统结构图 ChessG ...

  6. 实验报告:小学数学练习、石头剪刀布游戏

    课设格式要求 1.目录两字间空一格 自动生成目录 2.字体正文宋体小四 小标题宋体小三  3.添加的流程图必须为传统流程图格式  4.各图表下必须有序号以及图片名称 字号要求为宋体5号 eg:图1.1 ...

  7. idea 编写javafx_用JavaFX编写图块引擎

    idea 编写javafx 随着JavaFX嵌入式版本的问世,我们的框架对于游戏开发变得越来越有趣,因为我们现在可以瞄准平板电脑和智能手机等小型消费类设备. 因此,我决定对JavaFX进行更多的游戏编 ...

  8. 用JavaFX编写图块引擎

    随着JavaFX嵌入式版本的问世,我们的框架对于游戏开发变得越来越有趣,因为我们现在可以瞄准平板电脑和智能手机等小型消费类设备. 因此,我决定对JavaFX进行更多的游戏编写实验. 这次,我想使用Ca ...

  9. 石头剪刀布程序流程图_机器学习终章:剪刀石头布猜拳机器人

    8.1. 简介 TensorFlow对于我们普通人来说一直是高冷的存在,都是大神们的狂欢.喵家最近将TensorFlow移植到喵家编程软件Kittenblock中,希望能让人工智能,机器学习尽快落地. ...

最新文章

  1. UISearchBar和 UISearchDisplayController的使用
  2. linux下dns设置详解
  3. XCTF-Reverse:simple-unpack
  4. HTML边框为零,html – 保证金,填充,边框全部为零后仍有空格?
  5. html 窗口页面设置
  6. VC6获取硬盘序列号、型号、修订版本号
  7. [vue] 使用vue开发过程你是怎么做接口管理的?
  8. 为什么idea的断点变黑了_IntelliJ IDEA Debug回退断点
  9. linux部署多个tomcat服务,Linux 一台服务器部署多个tomcat
  10. oracle升级后报 06502,Oracle数据库升级后报ORA-00704和ORA-39700错误
  11. mui获取php表格,Mui table实现数据提取方法
  12. 开源 免费 java CMS - FreeCMS-数据对象-answer
  13. 【Android】Service生命周期回顾
  14. Delphi可视化精讲视频教程-丁鹏-专题视频课程
  15. Python url的编码转换
  16. linux wget 安装包,linux系统下安装wget。
  17. 处理团队人际关系的九大原则
  18. ios代码拨打电话时,电话号码格式兼容性处理问题:
  19. Java小技巧输出26个英文字母,不用一个一个手打
  20. 再说System Verilog 与 Verilog 的关系

热门文章

  1. codeforces global round 23
  2. python使用tpot做分类
  3. cocos creator做一个儿童数字答题的微信小游戏(1)
  4. html 空白处理,HTML 的空白符处理规则
  5. 招生技巧丨体验课,学员来了,如何把他留下?
  6. 三维数据可视化 python
  7. 计算机通过io接口对什么实现控制器,《微机原理与接口技术》第6章 微计算机IO接口基础.ppt...
  8. 光纤数据转发卡学习资料第220篇:基于Kintex-7 XC7K160T 的CameraLink转四路光纤数据转发卡(Full Camera Link图像转万兆以太网适配器 )
  9. CockroachDB架构-存储层
  10. 关于手动备份postgres 及mysql数据库