`
ansjsun
  • 浏览: 203119 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javaFX 實現粗糙版的挖地雷

    博客分类:
  • J2EE
阅读更多
首先..因為javafx剛開始接觸..不是很熟悉..既然他能調用java類..所以我們用java來構建
地雷對象
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package landmine;

/**
 *
 * @author Administrator
 */
public class Landmine {
    public Landmine getBottom() {
        return bottom;
    }

    public void setBottom(Landmine bottom) {
        this.bottom = bottom;
    }

    public Landmine getLeft() {
        return left;
    }

    public void setLeft(Landmine left) {
        this.left = left;
    }

    public Landmine getRight() {
        return right;
    }

    public void setRight(Landmine right) {
        this.right = right;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public Landmine getTop() {
        return top;
    }

    public void setTop(Landmine top) {
        this.top = top;
    }

    public Landmine getBottomLeft() {
        return bottomLeft;
    }

    public void setBottomLeft(Landmine bottomLeft) {
        this.bottomLeft = bottomLeft;
    }

    public Landmine getBottomRight() {
        return bottomRight;
    }

    public void setBottomRight(Landmine bottomRight) {
        this.bottomRight = bottomRight;
    }

    public Landmine getTopLeft() {
        return topLeft;
    }

    public void setTopLeft(Landmine topLeft) {
        this.topLeft = topLeft;
    }

    public Landmine getTopRight() {
        return topRight;
    }

    public void setTopRight(Landmine topRight) {
        this.topRight = topRight;
    }
    public void updateStatus(){
        if(this.top!=null&&this.top.status!=-1){
            this.top.status++ ;
        }
        if(this.topLeft!=null&&this.topLeft.status!=-1){
            this.topLeft.status++ ;
        }
        if(this.topRight!=null&&this.topRight.status!=-1){
            this.topRight.status++ ;
        }
        if(this.left!=null&&this.left.status!=-1){
            this.left.status++ ;
        }
        if(this.right!=null&&this.right.status!=-1){
            this.right.status++ ;
        }
        if(this.bottom!=null&&this.bottom.status!=-1){
            this.bottom.status++ ;
        }
        if(this.bottomLeft!=null&&this.bottomLeft.status!=-1){
            this.bottomLeft.status++ ;
        }
        if(this.bottomRight!=null&&this.bottomRight.status!=-1){
            this.bottomRight.status++ ;
        }
    }
    
    private Landmine top  ;
    private Landmine topLeft ;
    private Landmine topRight ;
    private Landmine bottom ;
    private Landmine bottomLeft ;
    private Landmine bottomRight ;
    private Landmine left ;
    private Landmine right ;
    private int status ;

}


和地雷地圖對象
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package landmine;

import java.util.Random;

/**
 *
 * @author Administrator
 */
public class LandmineMap {

    public static void main(String args[]) {
        System.out.println("aaaaaaaaaaaa");
        LandmineMap lm = new LandmineMap(10, 10, 20);
        lm.makeMap();
    }
    public static Landmine[] getMap(int x , int y , int lmNums){
        LandmineMap lm = new LandmineMap(x, x, lmNums);
        return lm.makeMap() ;
    }
    private int x;
    private int y;
    private int lmNums;
    private Random random = null;

    public LandmineMap(int x, int y, int lmNums) {
        this.x = x;
        this.y = y;
        this.lmNums = lmNums;
    }

    public Landmine[] makeMap() {
        random = new Random();
        Landmine[] landmines  = new Landmine[x * y];
        int location = 0;
        for (int i = 0; i < lmNums; i++) {
            location = getRandomNum();
            if (landmines[location] == null) {
                landmines[location] = new Landmine();
                landmines[location].setStatus(-1);
            } else {
                i--;
            }
        }
        for (int i = 0; i < x * y; i++) {
            if (landmines[i] == null) {
                landmines[i] = new Landmine();
            }
        }
        int[] ints = null;
        for (int i = 0; i < x * y; i++) {
            ints = this.getLocation(i);
            if (ints[0] != -1) {
                landmines[i].setTopLeft(landmines[ints[0]]);
            }
            if (ints[1] != -1) {
                landmines[i].setTop(landmines[ints[1]]);
            }
            if (ints[2] != -1) {
                landmines[i].setTopRight(landmines[ints[2]]);
            }
            if (ints[3] != -1) {
                landmines[i].setLeft(landmines[ints[3]]);
            }
            if (ints[4] != -1) {
                landmines[i].setRight(landmines[ints[4]]);
            }
            if (ints[5] != -1) {
                landmines[i].setBottomLeft(landmines[ints[5]]);
            }
            if (ints[6] != -1) {
                landmines[i].setBottom(landmines[ints[6]]);
            }
            if (ints[7] != -1) {
                landmines[i].setBottomRight(landmines[ints[7]]);
            }
        }
        for (int i = 0; i < x * y; i++) {
            if (landmines[i].getStatus() == -1) {
                landmines[i].updateStatus();
            }
        }
        return landmines ;
    }
    private int tempX = 0;
    private int tempY = 0;

    public int[] getLocation(int location) {
        int[] ints = new int[8];
        tempX = location % x;
        tempY = location / y;
        if ((tempX - 1) >= 0 && (tempY - 1) >= 0) {
            ints[0] = location - x - 1;
        } else {
            ints[0] = -1;
        }
        if ((tempY - 1) >= 0) {
            ints[1] = location - x;
        } else {
            ints[1] = -1;
        }
        if ((tempX + 1) < x && (tempY - 1) >= 0) {
            ints[2] = location - x + 1;
        } else {
            ints[2] = -1;
        }
        if ((tempX - 1) >= 0) {
            ints[3] = location - 1;
        } else {
            ints[3] = -1;
        }
        if ((tempX + 1) < x) {
            ints[4] = location + 1;
        } else {
            ints[4] = -1;
        }
        if ((tempX - 1) >= 0 && (tempY + 1) < y) {
            ints[5] = location + x - 1;
        } else {
            ints[5] = -1;
        }
        if ((tempY + 1) < y) {
            ints[6] = location + x;
        } else {
            ints[6] = -1;
        }
        if ((tempX + 1) < x && (tempY + 1) < y) {
            ints[7] = location + x + 1;
        } else {
            ints[7] = -1;
        }
        return ints;
    }

    public int getRandomNum() {
        return random.nextInt(x * y);
    }
}



這個代碼就不解釋了沒什麼好解釋的..

下麵是fx的代碼
/*
 * Main.fx
 *
 * Created on 2009-8-15, 17:42:50
 */

package landmine;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.CustomNode;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.shape.Rectangle;
import javafx.scene.paint.Color;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.MouseButton;

import javafx.scene.layout.VBox;

import javafx.scene.text.FontWeight;
import javafx.scene.text.TextOrigin;
import javafx.scene.control.TextBox;
import javafx.scene.control.Button;



/**
 * @author Administrator
 */
var x = 10 ;
var y = 10 ;

var lmNums = 20 ;

var landmines :Landmine[] = LandmineMap.getMap(x, y, lmNums) ;

var lmFxs:LmFx[] = [] ;

static var lmClose =  Color.WHITE;

var stage:Stage = null ;


class MyCustomNode extends CustomNode {

        public override function create(): Node {
                return Group {
                        content: [
                            for(j in [0 .. y-1]){
                                    for(i in [0 .. x-1]){
                                        lmFxs[j*x+i] = LmFx {
                                                isLm :  (landmines[j*x+i].getStatus()==-1);
                                                img : Rectangle {
                                                    x: i*26+8, y: j*26+8
                                                    width: 24, height: 24
                                                    fill: lmClose ;
                                                    onMouseReleased: function( e: MouseEvent ):Void {
                                                        if(e.button==MouseButton.PRIMARY){
                                                                lmFxs[j*x+i].onLeftClick() ;
                                                        }
                                                        if(e.button==MouseButton.SECONDARY){
                                                                lmFxs[j*x+i].onRightClick() ;
                                                        }
                                                    }
                                                 }
                                                 status : Text {
                                                    x: i*26+8+8, y: j*26+8+16
                                                   font : Font {
                                                        size: 12
                                                   }
                                                   visible : false ;
                                                   content : "{landmines[j*x+i].getStatus()}" ;
                                                   fill: Color.RED
                                                 }
                                        }
                                    }
                            }
                        ]
                };
        }
}



class LmFx extends CustomNode {
     override function create():Node {
        return Group {
            content:[img,status]
        };
    }
    var flag = false ;
    var img:Rectangle = null ;
    var status:Text = null ;
    var isLm = false ;
    function onLeftClick(){
        if(not flag){
            if(isLm){
               setBoard.visible = true;
             
            }else{
                img.visible = false ;
                status.visible = true ;
            }
        }
    }
    function onRightClick(){
        if(flag){
            img.fill =  lmClose;
            flag = false ;
        }else{
            img.fill =  Color.RED;
            flag = true ;
        }
    }

}

var width = bind x*24+(x-1)*2+16 ;
var height = bind  y*24+(y-1)*2+16 ;

var t1:Text = null ;
var widthField : TextBox = null  ;
var heightField : TextBox = null  ;
var setBoard = Group {
      visible : false ;
      blocksMouse: true;
      translateX: bind width / 6
      translateY: bind height / 4
                content: [
                         Rectangle {
                          stroke: Color.WHITE
                          strokeWidth: 3
                          width: bind width*2/3 ;
                          height: bind height/2 ;
                          fill : Color.BLUE;
                          opacity: 0.5
                          arcHeight: 10
                          arcWidth: 10
                        },
                       VBox {
                          translateX: bind width / 8
                          translateY: bind height / 12
                          content: [
                            Text {
                              content: "宽度:"
                              textOrigin: TextOrigin.TOP
                              fill: Color.YELLOW
                              font: Font.font ( null, FontWeight.BOLD, 15);
                            },
                            widthField = TextBox {
                                            text : "10"
                                            columns: 7
                                            selectOnFocus: true
                                    }

                            Text {
                              
                              content: "高度:"
                              textOrigin: TextOrigin.TOP
                              fill: Color.YELLOW
                              font: Font.font ( null, FontWeight.BOLD, 15);
                            },
                            heightField = TextBox {
                                            text: "10"
                                            columns: 7
                                            selectOnFocus: true
                                    },
                             Button {
                                            text: "reSet"
                                            action: function() {
                                                
                                            }
                                    }


                         
                            ]

        }
        ]
        }
        


function run(){
    stage = Stage {
    title: "挖地雷"
    scene: Scene {
        fill : Color.BLACK ;
        width: x*24+(x-1)*2+16 ;
        height: y*24+(y-1)*2+16 ;
        content: [
            MyCustomNode{},
            setBoard
        ]
    }
}
}
分享到:
评论

相关推荐

    Java大作业,仅使用JavaFX实现了一个Mario游戏.zip

    Java大作业,仅使用JavaFX实现了一个Mario游戏.zip Java大作业,仅使用JavaFX实现了一个Mario游戏.zip Java大作业,仅使用JavaFX实现了一个Mario游戏.zip Java大作业,仅使用JavaFX实现了一个Mario游戏.zip Java大...

    javaFX 实现截屏

    在这个特定的场景中,我们讨论的是使用JavaFX实现截图功能,这是一种常见的需求,特别是在开发桌面应用时,比如屏幕录制软件或者任何需要获取用户屏幕图像的应用。 首先,我们要理解JavaFX如何提供屏幕捕获的能力。...

    javafx实现好看的界面

    开发者可以通过布局管理器组织这些节点,以实现各种复杂的界面布局。 3. **样式和皮肤**:JavaFX支持CSS样式表,可以像网页设计一样为应用程序定义样式。此外,控件还可以有自定义的皮肤,提供不同的视觉效果。 4....

    基于javafx实现的文本编辑器.zip

    基于javafx实现的文本编辑器

    JavaFx实现百度文本框的下拉提示功能

    在JavaFX中,实现百度文本框的下拉提示功能,主要涉及到的是文本输入与实时匹配的概念,这在很多用户界面中都有广泛的应用,如搜索引擎、输入法等。这个功能能够提高用户体验,帮助用户快速找到他们可能正在寻找的...

    使用JavaFX实现了一个Mario游戏.zip

    使用JavaFX实现了一个Mario游戏.zip使用JavaFX实现了一个Mario游戏.zip 使用JavaFX实现了一个Mario游戏.zip使用JavaFX实现了一个Mario游戏.zip 使用JavaFX实现了一个Mario游戏.zip使用JavaFX实现了一个Mario游戏.zip...

    javafx实现五子棋游戏

    "javafx实现五子棋游戏" 一、JavaFX简介 JavaFX是一个基于Java的GUI编程框架,可以用来开发桌面应用程序、移动应用程序和嵌入式系统。JavaFX提供了一个强大的GUI组件库,可以用来创建丰富的用户界面。JavaFX还提供...

    java 飞鸽传书 简易版 javafx实现

    在这个"java 飞鸽传书 简易版"项目中,JavaFX被用来实现了文件传输的功能,类似于传统的飞鸽传书软件,允许用户在局域网内快速分享文件。 首先,我们来看“飞鸽传书”这一概念。飞鸽传书是一款基于IP Messenger协议...

    javaFX实现的图书馆后台管理系统,有数据库增删改查,基于sqlserver数据库.zip

    javaFX实现的图书馆后台管理系统,有数据库增删改查,基于sqlserver数据库.zip

    javafx实现的贪吃蛇

    这是闲来无聊写的一个贪吃蛇小游戏,有兴趣的可以下载来瞧瞧。。

    利用javafx实现的一个具有完整功能的播放器

    这是利用sun的javafx实现的具有相对完整功能的多媒体播放器-----相对于网上的“一分钟写出一个javafx播放器”而言。 注意:javafx需要一些运行环境,具体说来是: 1.jdk6update14以上 2.javafx运行包----如果你在...

    window纸牌游戏,使用java实现逻辑,javafx实现界面 分为两个难度 并且实现了 悔牌功能.zip

    window纸牌游戏,使用java实现逻辑,javafx实现界面 分为两个难度 并且实现了 悔牌功能.zip window纸牌游戏,使用java实现逻辑,javafx实现界面 分为两个难度 并且实现了 悔牌功能.zip window纸牌游戏,使用java实现...

    BUAA软件学院大二Java大作业,仅使用JavaFX实现了一个Mario游戏.zip

    BUAA软件学院大二Java大作业,仅使用JavaFX实现了一个Mario游戏 BUAA软件学院大二Java大作业,仅使用JavaFX实现了一个Mario游戏 BUAA软件学院大二Java大作业,仅使用JavaFX实现了一个Mario游戏 BUAA软件学院大二Java...

    JavaFx开发Windows画图板工具

    JavaFX是一种强大的、基于Java的富客户端应用开发框架,它为创建桌面、移动和Web应用程序提供了丰富的图形用户界面(GUI)工具集。本项目“JavaFx开发Windows画图板工具”旨在模仿Windows操作系统内置的画图应用,为...

    纯JavaFX实现的多线程分段下载工具源码

    在这个项目中,JavaFX被用来设计和实现下载工具的交互界面。 2. **多线程**: 多线程是并发编程的一种方式,允许程序同时执行多个任务。在下载工具中,多线程技术被用来并行下载文件的不同部分,从而提高下载速度...

    javafx版高校人员管理系统

    在这个"javafx版高校人员管理系统"中,开发者利用JavaFX的技术特性,创建了一个用于管理高校人员信息的应用程序,能够实现对人员的增删改查操作,同时包含了对学生升退学状态的管理功能。 一、系统架构与设计模式 ...

    jAVAfx的增删改查demo文件

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

    JavaFX实现一个画板

    在这个项目“JavaFX实现一个画板”中,我们看到开发者利用JavaFX来创建了一个功能完备的画板应用,用户可以在其中绘制线条、矩形等形状,并且在画完后还能对这些形状的属性进行编辑。 首先,JavaFX提供了一系列图形...

    javaFx实现教师绩效管理系统

    javafx+mysql实现的教师绩效管理系统,zip里面包含数据库脚本。该部分代码适合初学入门或者课程设计,希望能够共同进步。

    JavaFX + MySql 实现学生信息管理系统

    总而言之,"JavaFX + MySQL 实现学生信息管理系统"是一个典型的前后端结合项目,涵盖了Java GUI编程、数据库设计、SQL操作以及JDBC连接等多个知识点。通过这样的项目实践,开发者不仅可以提升JavaFX应用开发技能,还...

Global site tag (gtag.js) - Google Analytics