|
Posted on 2009-07-27 09:48 疯狂 阅读(2048) 评论(0) 编辑 收藏 所属分类: javafx
初学javafx 写了个小例子,没有使用图片, 代码较乱 如下: 预览:
 /**//*
* 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 ericjoe
*/
// var k = KeyEvent.CHAR_UNDEFINED.
var complete = false;

 var background=ImageView {
focusTraversable:true
 onKeyPressed: function( e: KeyEvent ):Void {
if(complete==false)move(e);
}
}
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
fill:Color.BLACK
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;
};

} }

|