`

javafx demo

阅读更多
/*
 * 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;
              };

            } }

 效果如下:

 

  • gui.rar (406.4 KB)
  • 下载次数: 80
2
0
分享到:
评论

相关推荐

    javaFX Demo 模板案例

    本JavaFX Demo模板案例将帮助我们了解如何使用JavaFX构建一个简单的应用程序。 首先,JavaFX提供了丰富的UI控件,如按钮、文本框、标签、菜单等,这些控件可以通过FXML(FXML Layout)或纯Java代码进行布局和设计。...

    JavaFX Demo学习2-----ImageRollover

    在"JavaFX Demo学习2-----ImageRollover"这个主题中,我们将深入探讨如何使用JavaFX来实现图像鼠标悬停时的效果变化,即Image Rollover效果。这种效果常见于网页设计和图形用户界面开发中,当鼠标指针移到图像上时,...

    javafx的一个完整demo

    在这个名为"javafx的一个完整demo"的项目中,我们将探讨如何利用JavaFX来开发一个点菜系统,并实现多窗口间的触发以及数据实时更新到页面的功能。 1. **JavaFX基础知识**:JavaFX是Oracle公司推出的一种基于Java...

    javafx 的一个简单演示demo

    javafx 的一个简单演示demo

    javafx的系列demo

    javafx的系列demo

    JAVAFX DEMO

    JAVAFX 开发案例讲解(视频),简单介绍了JAVAFX的开发流程

    JavaFX快速入门Demo

    JavaFX快速入门Demo,快速搭建自己的UI界面,快速熟悉JAVAFX开发。

    JavaFX的Demo

    一个简单的JavaFX的Demo

    JavaFX Demo学习1-----Clock

    Clock Demo 博文链接:https://ivaneye.iteye.com/blog/264628

    javafx2-demo

    javafx2-demo

    spring boot javafx 集成 实例Demo 源码

    本实例Demo展示了如何利用Spring Boot和JavaFX来构建一个完整的桌面应用程序,提供了丰富的源码供学习和参考。 在Spring Boot中,其核心特性包括自动配置、内嵌的Servlet容器、健康检查、以及对各种Spring生态系统...

    JavaFX tableview获取数据demo

    JavaFX的一个demo,带checkbox的tableview,选中一行获取所选中行的数据。

    layoutfx-sourcecode.zip

    javafx demo

    javaFX 进度条demo源码

    这个“javaFX 进度条demo源码”是一个示例程序,可以帮助开发者了解如何在JavaFX应用程序中实现和使用进度条。 在JavaFX中,进度条是`javafx.scene.control.ProgressBar`类的一个实例。这个控件可以设置为两种模式...

    javaFX maven 项目 demo 源码,直接idea打开即可

    在“javaFX maven 项目 demo 源码”中,我们可以期待找到以下关键知识点: 1. **JavaFX基础**:JavaFX包括各种UI控件(如按钮、文本框、菜单等)、布局管理器、 scenegraph 架构以及2D和3D图形支持。源码将展示如何...

    JavaFX 官方中文说明文档及完整DEMO

    JavaFX 官方中文说明文档及完整DEMO

    jAVAfx的增删改查demo文件

    在"jAVAfx的增删改查demo文件"中,我们可以深入学习如何利用JavaFX实现数据管理的基本操作:增加(Add)、删除(Delete)、修改(Modify)和查询(Query)。 1. **JavaFX基础** - JavaFX是Oracle JDK的一部分,...

    javafx删除table行的demo

    javafx删除table行的demo

    javaFX canvas的使用 demo

    这个"javaFX canvas的使用 demo"展示了如何利用Canvas API来实现模拟图层的切换效果,这对于创建复杂的图形界面或者游戏场景非常有用。在本文中,我们将深入探讨JavaFX Canvas的使用方法以及如何构建图层系统。 ...

Global site tag (gtag.js) - Google Analytics