javafx游戏_JavaFX游戏(四连环)

javafx游戏

这是我的第一个JavaFX游戏教程,也是我关于JavaFX面板的第一篇博客文章。 我仅用200几行代码就完成了这四款连接游戏,足以应付一个简单的游戏。 我在这里使用GridPane面板对磁盘进行布局,GridPane是JavaFX布局窗格之一,但它与另一个窗格不同,因为它在行和列的灵活网格中布局了其子项。

这是有关如何设置GridPanes列和行约束的代码片段:

gridpane.getColumnConstraints().addAll(new ColumnConstraints(100,100,Double.MAX_VALUE), new ColumnConstraints(100,100,Double.MAX_VALUE),new ColumnConstraints(100,100,Double.MAX_VALUE),new ColumnConstraints(100,100,Double.MAX_VALUE));gridpane.getRowConstraints().addAll(new RowConstraints(100,100,Double.MAX_VALUE), new RowConstraints(100,100,Double.MAX_VALUE),new RowConstraints(100,100,Double.MAX_VALUE),new RowConstraints(100,100,Double.MAX_VALUE));

GridPane将具有4行4列100宽的正方形网格。

您可以享受下面的其余代码。

import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.beans.property.SimpleObjectProperty;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.Reflection;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Path;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Shape;
import javafx.stage.Stage;
import javafx.util.Duration;/**** @author mark_anro*/
public class Main extends Application {/*** @param args the command line arguments*/private SimpleObjectProperty<Color> playerColorProperty = new SimpleObjectProperty<Color>(Color.RED);private int r;private int c;public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage primaryStage) {final BorderPane root = new BorderPane();final GridPane gridpane = new GridPane();primaryStage.setTitle('JavaFX Connect Four');primaryStage.setResizable(true);final Button addCellButton = new Button('Add Grids');Scene scene = new Scene(root, 750, 680, true);scene.setFill(Color.BLACK);scene.getStylesheets().add('net/glyphsoft/styles.css');gridpane.setTranslateY(20);gridpane.setAlignment(Pos.CENTER);gridpane.getColumnConstraints().addAll(new ColumnConstraints(100,100,Double.MAX_VALUE), new ColumnConstraints(100,100,Double.MAX_VALUE),new ColumnConstraints(100,100,Double.MAX_VALUE),new ColumnConstraints(100,100,Double.MAX_VALUE));gridpane.getRowConstraints().addAll(new RowConstraints(100,100,Double.MAX_VALUE), new RowConstraints(100,100,Double.MAX_VALUE),new RowConstraints(100,100,Double.MAX_VALUE),new RowConstraints(100,100,Double.MAX_VALUE));createGrids(gridpane);root.setCenter(gridpane);DropShadow effect = new DropShadow();effect.setColor(Color.BLUE);addCellButton.setEffect(effect);addCellButton.setTranslateY(10);addCellButton.setTranslateX(10);root.setTop(addCellButton);addCellButton.setOnMouseClicked(new EventHandler<MouseEvent>(){@Overridepublic void handle(MouseEvent arg0) {addGrid(gridpane);}});primaryStage.setScene(scene);primaryStage.setResizable(false);primaryStage.show();}//Add Column and Rowprivate void addGrid(final GridPane gridpane){gridpane.getColumnConstraints().addAll(new ColumnConstraints(100,100,Double.MAX_VALUE));gridpane.getRowConstraints().addAll(new RowConstraints(100,100,Double.MAX_VALUE));createGrids(gridpane);}//Create Gridsprivate void createGrids(final GridPane gridpane){gridpane.getChildren().clear();for(r=0;r<gridpane.getColumnConstraints().size(); r++){for(c=0; c<gridpane.getColumnConstraints().size(); c++){Rectangle rect = new Rectangle(100,100);Circle circ = new Circle(47);circ.centerXProperty().set(50);circ.centerYProperty().set(50);Shape cell = Path.subtract(rect, circ);cell.setFill(Color.BLUE);cell.setStroke(Color.BLUE);cell.setOpacity(.8);DropShadow effect = new DropShadow();effect.setSpread(.2);effect.setRadius(25);effect.setColor(Color.BLUE);cell.setEffect(effect);final Circle diskPreview = new Circle(40);diskPreview.setOpacity(.5);diskPreview.setFill(Color.TRANSPARENT);diskPreview.setOnMouseEntered(new EventHandler<MouseEvent>(){@Overridepublic void handle(MouseEvent arg0) {diskPreview.setFill(Color.WHITE);if(playerColorProperty.get()==Color.RED){diskPreview.setFill(Color.RED);}else{diskPreview.setFill(Color.YELLOW);}}});diskPreview.setOnMouseExited(new EventHandler<MouseEvent>(){@Overridepublic void handle(MouseEvent arg0) {diskPreview.setFill(Color.TRANSPARENT);}});final Circle disk = new Circle(40);disk.fillProperty().bind(playerColorProperty);disk.setOpacity(.5);disk.setTranslateY(-(100*(r+1)));final TranslateTransition translateTranstion = new TranslateTransition(Duration.millis(300), disk);disk.setOnMouseEntered(new EventHandler<MouseEvent>(){@Overridepublic void handle(MouseEvent arg0) {diskPreview.setFill(Color.WHITE);if(playerColorProperty.get()==Color.RED){diskPreview.setFill(Color.RED);}else{diskPreview.setFill(Color.YELLOW);}}});disk.setOnMouseExited(new EventHandler<MouseEvent>(){@Overridepublic void handle(MouseEvent arg0) {diskPreview.setFill(Color.TRANSPARENT);}});disk.setOnMouseClicked(new EventHandler<MouseEvent>(){@Overridepublic void handle(MouseEvent arg0) {if(disk.getTranslateY()!=0){translateTranstion.setToY(0);translateTranstion.play();if(playerColorProperty.get()==Color.RED){playerColorProperty.set(Color.YELLOW);disk.fillProperty().bind(new SimpleObjectProperty<Color>(Color.RED));}else{playerColorProperty.set(Color.RED);disk.fillProperty().bind(new SimpleObjectProperty<Color>(Color.YELLOW));}}}});diskPreview.setOnMouseClicked(new EventHandler<MouseEvent>(){@Overridepublic void handle(MouseEvent arg0) {if(disk.getTranslateY()!=0){translateTranstion.setToY(0);translateTranstion.play();if(playerColorProperty.get()==Color.RED){playerColorProperty.set(Color.YELLOW);disk.fillProperty().bind(new SimpleObjectProperty<Color>(Color.RED));}else{playerColorProperty.set(Color.RED);disk.fillProperty().bind(new SimpleObjectProperty<Color>(Color.YELLOW));}}}});StackPane stack = new StackPane();stack.getChildren().addAll(cell, diskPreview, disk);gridpane.add(stack, c, r); if(r==gridpane.getColumnConstraints().size()-1){stack.setEffect(new Reflection());}}}}
}

祝您编程愉快,别忘了分享!

参考:来自GlyphSoft博客的JCG合作伙伴 Mark Anro Silva的JavaFX Game(四人连接) 。


翻译自: https://www.javacodegeeks.com/2012/09/javafx-game-connect-four.html

javafx游戏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab的sort函数

1、Matlab自带排序函数sort用法 [Y,I] sort(X,DIM,MODE) sort函数默认Mode为ascend为升序&#xff0c;sort(X,descend)为降序排列。 sort(X)若X是矩阵&#xff0c;默认对X的各列进行升序排列 sort(X,dim) dim1时等效sort(X)dim2时表示对X中的各行元素升序…

django HttpResponse的用法

一、传json字典 def back_json(rquest):#JsonResponse父类是HttpResponse&#xff0c;原码里调用了json.dumps()from django.http import JsonResponseback_msg {name:name,age:123}return JsonResponse(back_msg) 二、传列表 def back_json(rquest):#JsonResponse父类是HttpR…

gcc/g++ 链接库的编译与链接

程序编译一般需要经预处理、编译、汇编和链接几个步骤。在实际应用中&#xff0c;有些公共代码需要反复使用&#xff0c;就把这些代码编译成为“库”文件。在链接步骤中&#xff0c;连接器将从库文件取得所需的代码&#xff0c;复制到生成的可执行文件中&#xff0c;这种库称为…

Speedment 3.0的新功能

如果您关注我的博客&#xff0c;那么您会知道我已经参与开源项目Speedment已有一段时间了。 在夏季和秋季&#xff0c;我完成了工具包的下一个3.0.0大型发行版的大量工作。 在这篇文章中&#xff0c;我将展示我们已经在平台中内置的一些很酷的新功能&#xff0c;并说明如何入门…

Matlab在坐标点上按顺序标序号

程序一&#xff1a; clear x[1 3 7 10]; y[2 4 9 43]; plot(x,y,r-) hold on for i1:4%用这个循环cnum2str(i);c[ ,c];text(x(i),y(i),c) end axis([0 10 0 50]) 程序二&#xff1a; xrand(10,1)*10; yrand(10,1)*10; %x,y表示任意10个点的坐标 plot(x,y,*); for i1:10text(x(…

python表情符号编码大全_Emoji的编码以及常见问题处理

我在虎嗅上看过一篇关于Emoji的趣闻, 特别有意思, 在这里跟大家分享一下。里面提到了Emoji是怎么诞生的。1999年前后&#xff0c;日本一个名叫栗田穰崇的年轻人&#xff0c;和许多直男一样&#xff0c; 给女友发的短信经常会被误解。比如&#xff0c;“知道了”被解读成“生气了…

机器学习套路三步走

机器学习的套路 1.model如何对现实的场景进行抽象2.model如何对参数进行求解3.model的效果如何评价1.抽象 例如线性回归&#xff0c;就是认为预测变量y和特征X之间存在线性关心&#xff0c;老掉牙的例子就是房价和地区收入&#xff0c;人口密度等等的线性关系 线性回归的数学假…

C及opencv指针释放问题

一个图像处理的项目运行时没有问题&#xff0c;最后关掉显示的图片时提醒触发一个断点&#xff0c;点击继续则出现以下画面&#xff1a;断点停留在释放指针的那一行。究其原因如下&#xff1a; 1.错用free释放IplImage* IplImage* input cvLoadImage("data/LOGO/2_1.jpg&…

gcc/g++基本命令简介

gcc & g现在是gnu中最主要和最流行的c & c编译器 。 g是c的命令&#xff0c;以.cpp为主&#xff0c;对于c语言后缀名一般为.c。这时候命令换做gcc即可。其实是无关紧要的。 其实编译器是根据gcc还是g来确定是按照C标准还是C标准编译链接。 下面以Test.cpp为例&#x…

python返回长度值_Python 文件 truncate() 方法(截断返回截取长度)

概述Python 文件 truncate() 方法用于截断文件并返回截断的字节长度。指定长度的话&#xff0c;就从文件的开头开始截断指定长度&#xff0c;其余内容删除&#xff1b;不指定长度的话&#xff0c;就从文件开头开始截断到当前位置&#xff0c;其余内容删除。语法truncate() 方法…

Opencv中IplImage的四字节对齐问题

一、结构解释IplImage数据结构体中有两个宽度&#xff1a;1 是width属性&#xff0c;表示图像的每行像素数&#xff1b;2 是widthStep属性&#xff0c;表示存储一行像素需要的字节数。在OpenCV里边&#xff0c;widthStep必须是4的倍数&#xff0c;从而实现字节对齐&#xff0c;…

庞佐错觉_水晶球错觉

庞佐错觉我注意到人们有时会避免进行彻底的测试。 对于某些人来说&#xff0c;这听起来像是伪造的&#xff0c;但请听我说…… 测试会产生被困的感觉&#xff0c;每引入一个新的测试&#xff0c;负担就会加重。 建立稳定&#xff0c;无干扰且质量保证的测试套件是一项艰巨的任务…

静态编译和动态编译区别

静态函数库 一般扩展名为&#xff08;.a&#xff09;,这类的函数库通常扩展名为libxxx.a 。 这类函数库在编译的时候会直接整合到程序中&#xff0c;所以利用静态函数库编译成的文件会比较大&#xff0c;这类函数库最大的优点就是编译成功的可执行文件可以独立运行&#xff0c;…

python怎么爬取电影海报_python爬虫之通过BeautifulSoup获取豆瓣最新上映电影的海报...

0.目录1.分析页面2.初步代码3.完整代码4.总结5.补充1.分析页面上一次我们讲了xpath获取豆瓣最新上映电影的海报&#xff0c;这一次会分析如何使用BeautifulSoup获取。启程&#xff1a;python爬虫之通过xpath获取豆瓣最新上映电影的海报​zhuanlan.zhihu.com首先&#xff0c;进入…

switch使用中遇到的问题

switch分支语句中case判断不会进行隐式数据类型转换&#xff1b; 1 const fn (value) > {2 let str all;3 switch (value) {4 case :5 return all0;6 case 3:7 return all3;8 case 4:9 return all4;…

opencv读取视频并保存为图片

1.功能&#xff1a;opencv读取指定文件夹中的视频文件&#xff0c;按照一定的间隔截取某些帧&#xff0c;将这些帧图像连续命名&#xff0c;存储在指定文件夹里。 2.代码如下&#xff1a; &#xff08;1&#xff09;IplImage #include <stdlib.h> #include <stdio.h&g…

将Jython嵌入到您的Java代码库中

Jython是一个使用相当可靠的语法的快速Java脚本的好工具。 实际上&#xff0c;当使用jmx为您的Java应用程序实现一些维护或监视脚本时&#xff0c;它的运行效果非常好。 如果您与其他具有python背景的团队合作&#xff0c;则将python集成到您的java应用程序是绝对有意义的。 …

C语言的编译链接过程详解

学过C语言的人都应该知道&#xff0c;我们所编辑的C语言程序是不能直接放到机器上运行的&#xff0c;它只不过是一个带".c"后缀的文件&#xff08;也称为源代码&#xff09;而已&#xff0c;需要经过一定的处理才能转换成机器上可运行的可执行文件。我们将对C语言的这…

python 谷歌登录_用Python登录Gmail并发送Gmail邮件的教程

这篇快文介绍了使用Gmail作为您的e-mail服务器&#xff0c;通过Python的内置SMTP库发送电子邮件。它并不复杂&#xff0c;我保证。下面是如何在Python中登录GMail&#xff1a;import smtplib# The below code never changes, though obviously those variables need values.ses…

Linux wget命令详解

wget是一个下载文件的工具&#xff0c;它用在命令行下。对于Linux用户是必不可少的工具&#xff0c;我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。 wget支持HTTP&#xff0c;HTTPS和FTP协议&#xff0c;可以使用HTTP代理。所谓的自动下载是指&#xff0c;wget可…