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;
              };

            } }

 效果如下:

 

你可能感兴趣的:(UP,JavaFX)