/*
* JDI.fx
*
* Created on 2009-7-22, 19:06:20
*/
package gui;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.paint.Color;
import javafx.scene.effect.Reflection;
import javafx.scene.shape.Line;
import javafx.scene.shape.Rectangle;
import javafx.scene.*;
import javafx.scene.effect.*;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.KeyCode;
import javafx.scene.image.*;
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;
import javafx.animation.Interpolator;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
/**
* @author dbsuser
*/
// var k = KeyEvent.CHAR_UNDEFINED.
var complete = false;
var background=ImageView {
focusTraversable:true
onKeyPressed: function( e: KeyEvent ):Void {
if(complete==false)move(e);
}
image: Image {
url: "{__DIR__}pic/cs.jpg"
height:700
width:600
smooth:true
}
}
var logot=0;
var logarc=Rectangle {
x: 0, y: 0
width: 200, height: 80
fill: Color.BLUEVIOLET
}
var logoline=Line {
startX: 10, startY:40
endX: 690, endY: 40
strokeWidth: 1
stroke: Color.RED
}
var gamelogo=Text {
fill:Color.BLACK
translateX:bind logot
effect:Reflection {
fraction: 0.75
topOffset: 0.0
topOpacity: 0.4
bottomOpacity: 0.0
}
font : Font {
size: 30;
}
x: -120, y: 30
content: "move game"
}
var goNum=0;
var state= bind if(complete)then "complete! use {goNum} steps" else "step:{goNum}";
var statex=0;
var gamestate=Text {
fill:Color.YELLOWGREEN
font : Font {
size: 24
}
x: 800, y: 65
content: bind state;
}
var gameline=Line {
startX: 10, startY:80
endX: 690, endY: 80
strokeWidth: 1
stroke: Color.BLUEVIOLET
}
var gameframe=Rectangle {
x: 10, y: 100
width: 580, height: 580
fill: Color.BLACK
focusTraversable:true
}
var t=[1..8];
var r= new java.util.Random();
var cards:Card[]= getCards();
function getCards():Card[]{
var n = 0;
var cardsinit:Card[];
for(i in [0..7]){
var card=Card{
recX:10+(580/3)*n
recY:100+(580/3)*(i/3)
cardTextX: 10+(580/3)*n+70
cardTextY:100+(580/3)*(i/3)+120
cardTextConten:getTextContent();
}
insert card into cardsinit;
n++;
if(n==3)then n=0;
}
t=[1..8];
cardsinit;
}
var main=true;
var changeButton=Button {
text: "change"
layoutX:900
layoutY:10
onMousePressed: function( e: MouseEvent ):Void {
cards=getCards();
btx=10+(580/3)*2;
bty=100+(580/3)*2;
complete=false;
goNum=0;
}
onKeyPressed: function( e: KeyEvent ):Void {
if(complete==false)move(e);
}
}
var htext="help";
var helpButton=Button {
text: bind htext;
layoutX:1000
layoutY:10
width:100
action: function() {
htext=if(htext=="help") then "back to game" else "help";
main=if(main==true)then false else true;
}
onKeyPressed: function( e: KeyEvent ):Void {
if(complete==false)move(e);
}
}
var rightgroup=Group {
translateX:bind statex;
content: [
changeButton,
gamestate,
helpButton
]
}
function getTextContent():Integer{
// println(t.size());
var i = t[r.nextInt(sizeof t)];
delete i from t;
return i;
}
var btx:Number=10+(580/3)*2;
var bty:Number=100+(580/3)*2;
var cardBlank = Rectangle {
x: bind btx ,
y: bind bty ,
width: 580/3, height: 580/3
fill: Color.BLACK
}
var cardsc=0.0;
var cardsGroup= Group {
opacity:bind cardsc;
focusTraversable:true
content:bind [
cards,
cardBlank
]
}
var helptext = Text {
font : Font {
size: 24
}
fill:Color.YELLOWGREEN
x: 150, y: 300
content: " use ↑↓← → to move the chess";
}
var scorrt=0;
var scorrtext = Text {
font : Font {
size: 12
}
translateX:bind scorrt;
fill:Color.YELLOWGREEN
layoutX:-110
layoutY:95
// x: 10, y: 95
content: "a javafx example";
}
var mainSence = Scene {
width: 600
height:700
content:bind [
background,
rightgroup,
logoline,
scorrtext,
logarc,
gamelogo,
gameline,
gameframe,
if(main)then cardsGroup else helptext
]
}
Stage {
title: "move game"
resizable:false
scene: mainSence
}
function move(e:KeyEvent):Void{
changeButton.focusTraversable=false;
if(e.code==KeyCode.VK_DOWN){
if(cardBlank.y==100){
// println("cont not move")
}else{
for(g in cards){
if(g.recY-cardBlank.y==-580/3 and g.recX==cardBlank.x){
g.recY+=580/3;
g.cardTextY+=580/3;
bty-=580/3;
break;
}
}
goNum++;
}
}
if(e.code==KeyCode.VK_UP){
if(cardBlank.y==100+(580/3)*2){
// println("cont not move")
}else{
for(g in cards){
if(g.recY-cardBlank.y==580/3 and g.recX==cardBlank.x){
g.recY-=580/3;
g.cardTextY-=580/3;
bty+=580/3;
break;
}
}
goNum++;
}
}
if(e.code==KeyCode.VK_LEFT){
if(cardBlank.x==10+(580/3)*2){
// println("cont not move")
}else{
for(g in cards){
if(g.recX-cardBlank.x==580/3 and g.recY==cardBlank.y){
g.recX-=580/3;
g.cardTextX-=580/3;
btx+=580/3;
break;
}
}
goNum++;
}
}
if(e.code==KeyCode.VK_RIGHT){
if(cardBlank.x==10){
// println("cont not move")
}else{
for(g in cards){
if(g.recX-cardBlank.x==-580/3 and g.recY==cardBlank.y){
g.recX+=580/3;
g.cardTextX+=580/3;
btx-=580/3;
break;
}
}
goNum++;
}
}
checkComplete();
// showOk
}
function checkComplete():Void{
var num=0;
for(card in cards){
if(card.atRightPosition())then num++;
}
if(num==8)then complete=true;
}
class Card extends Group{
// public var opac:Number;
public var recX:Number;
public var recY:Number;
public var cardTextX:Number;
public var cardTextY:Number;
public var cardTextConten:Integer;
var cardrec= Rectangle {
x: bind recX;
y: bind recY;
width: 580/3, height: 580/3
fill: Color.RED
stroke:Color.BLACK
}
var cardTet= Text {
font : Font {
size: 90
embolden:true
}
x: bind cardTextX;,
y: bind cardTextY;
content: "{cardTextConten}";
}
override var content = bind [cardrec, cardTet];
//override var opacity= bind cardsc;
function getText():String{
return cardTet.content;
}
function atRightPosition():Boolean{
var nowP= (this.recX-10)*3/580+1+((this.recY-100)*3/580)*3;
var a:String="{nowP}";
var arr = a.split("[.]");
if(arr[1].equals("0"))then a=arr[0] else a="{Integer.parseInt(arr[0])+1}";
return a==this.getText();
}
}
Timeline {
repeatCount:1
keyFrames : [
KeyFrame {
time : 1s
canSkip : true
values : [
logot=>140 tween Interpolator.LINEAR
]
action: function(){
cardstime.play();
}
}
]
}.play();
Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames : [
at(10s){scorrt=>720 tween Interpolator.EASEIN}
]
}.play();
var cardstime =Timeline {
repeatCount:1
keyFrames : [
KeyFrame {
time : 1s
canSkip : true
values : [
cardsc=>1.0 tween Interpolator.EASEIN
]
action: function() {
println(cardsc);
statetime.play();
}
}
]
}
var statetime = Timeline {
repeatCount:1
keyFrames : {
at(1s)
{
statex=>-580 tween Interpolator.LINEAR;
};
} }
效果如下:
分享到:
相关推荐
本JavaFX Demo模板案例将帮助我们了解如何使用JavaFX构建一个简单的应用程序。 首先,JavaFX提供了丰富的UI控件,如按钮、文本框、标签、菜单等,这些控件可以通过FXML(FXML Layout)或纯Java代码进行布局和设计。...
在"JavaFX Demo学习2-----ImageRollover"这个主题中,我们将深入探讨如何使用JavaFX来实现图像鼠标悬停时的效果变化,即Image Rollover效果。这种效果常见于网页设计和图形用户界面开发中,当鼠标指针移到图像上时,...
在这个名为"javafx的一个完整demo"的项目中,我们将探讨如何利用JavaFX来开发一个点菜系统,并实现多窗口间的触发以及数据实时更新到页面的功能。 1. **JavaFX基础知识**:JavaFX是Oracle公司推出的一种基于Java...
javafx 的一个简单演示demo
javafx的系列demo
JAVAFX 开发案例讲解(视频),简单介绍了JAVAFX的开发流程
JavaFX快速入门Demo,快速搭建自己的UI界面,快速熟悉JAVAFX开发。
一个简单的JavaFX的Demo
Clock Demo 博文链接:https://ivaneye.iteye.com/blog/264628
javafx2-demo
本实例Demo展示了如何利用Spring Boot和JavaFX来构建一个完整的桌面应用程序,提供了丰富的源码供学习和参考。 在Spring Boot中,其核心特性包括自动配置、内嵌的Servlet容器、健康检查、以及对各种Spring生态系统...
JavaFX的一个demo,带checkbox的tableview,选中一行获取所选中行的数据。
javafx demo
这个“javaFX 进度条demo源码”是一个示例程序,可以帮助开发者了解如何在JavaFX应用程序中实现和使用进度条。 在JavaFX中,进度条是`javafx.scene.control.ProgressBar`类的一个实例。这个控件可以设置为两种模式...
在“javaFX maven 项目 demo 源码”中,我们可以期待找到以下关键知识点: 1. **JavaFX基础**:JavaFX包括各种UI控件(如按钮、文本框、菜单等)、布局管理器、 scenegraph 架构以及2D和3D图形支持。源码将展示如何...
JavaFX 官方中文说明文档及完整DEMO
在"jAVAfx的增删改查demo文件"中,我们可以深入学习如何利用JavaFX实现数据管理的基本操作:增加(Add)、删除(Delete)、修改(Modify)和查询(Query)。 1. **JavaFX基础** - JavaFX是Oracle JDK的一部分,...
javafx删除table行的demo
这个"javaFX canvas的使用 demo"展示了如何利用Canvas API来实现模拟图层的切换效果,这对于创建复杂的图形界面或者游戏场景非常有用。在本文中,我们将深入探讨JavaFX Canvas的使用方法以及如何构建图层系统。 ...