精华内容
下载资源
问答
  • 使用NetBeans进行J2ME开发1。首先安装jdk-6-windows-i586。exe软件,路径假设为D:\java\jdk1。6。0。安装过程系统会自动再安装一个虚拟环境路程:D:\java\jre1。6。0。2。配置jdk的环境变量右点击“我的电脑”->...

    使用NetBeans进行J2ME开发

    1。首先安装jdk-6-windows-i586。exe软件,路径假设为D:\java\jdk1。6。0。

    安装过程系统会自动再安装一个虚拟环境路程:D:\java\jre1。6。0。

    2。配置jdk的环境变量

    右点击“我的电脑”->属性,进入属性界面,选择“高级”选项,点击“环境变量”,进行环境变量配置。

    点击“系统变量”下面的新建按钮,在弹出的“新建系统变量”对话框中输入:变量名为JAVA_HOME,变量值为d:\java\jdk1。6。0

    点击系统变量新建按钮,在新建系统变量对话框中输入:

    变量名为CLASSPATH,

    变量值为:d:\java\jdk1。

    6。0\lib;d:\java\jdk1。6。0\lib\*。jar; (分号作为路径分隔标志,要保留)。

    选择变量名为Path的系统变量,点击系统变量下面的编辑按钮,在变量值中添加:d:\java\jdk1。6。0\bin;d:\java\jre1。

    6。0\bin;

    3。安装j2me_wireless_toolkit-2_2-ml-windows。exe,假设该软件安装路径为D:\java\WTK22,安装过程会提示JDK的安装路径(因为要求JDK的支持),确认正确即可。

    4。安装apache-tomcat-5。

    5。20。exe,假设安装路径为:D:\java\Tomcat 5。5java认证更多详细资料,安装过程会自动寻找jre的安装路径,确认正确即行。

    5。 。配置tomcat的环境变量

    参考第2点进入新建系统环境变量对话框,变量名为TOMCAT_HOME,变量值为:D:\java\Tomcat 5。

    5,

    参考第2点,选择CLASSPATH系统变量,进入编辑系统变量对话框,在变量值中添加D:\java\Tomcat 5。5\common\lib\servlet-api。jar;

    在d:\java\tomcat\bin里双击tomcat5。

    exe启动tomcat

    然后在IE地址栏输入:http://localhost:8080/index。jsp

    如能进入页面表示tomcat安装成功。否则要考虑上述各软件重新安装或检查配置是否配置。

    6。将D:\java\Tomcat 5。

    5\common\lib下的servlet-api。jar文件拷到D:\java\jre1。6。0\lib\ext文件夹下。

    7。解压eclipse-SDK-3。3。2-win32。zip软件到D:\java文件夹下,可看到在java文件夹下新建了一个D:\java\eclipse-SDK-3。

    3。2-win32文件夹,里面有一个eclipse文件夹。

    8。解压tomcatPluginV321 。zip软件,得到一个文件夹:com。sysdeo。eclipse。tomcat_3。2。1,将整个文件夹复制到D:\java\eclipse- SDK-3。

    3。2-win32\eclipse文件夹下的plugins文件夹中 。

    9。将eclipseme。feature_1。5。0_site。zip文件夹解压,解压后会有两个文件夹features和plugins。将两个文件夹内的内容分别拷贝到D:\java\ eclipse-SDK-3。

    3。2-win32\eclipse文件夹下的features和plugins目录下。

    10。在java下面新建一文件夹:D:\java\workspace

    11。进入D:\java\eclipse-SDK-3。3。2-win32\eclipse文件夹,点击eclipse。

    exe图标,启动eclipse(第一次启动过程提示workspace路径,选择第10点设置的路径),进入window菜单的preferences选项,进行参数配置。

    1)。 进入界面,出现J2ME,表示J2ME插件已经安装进eclipse。

    2)。 点击左边的J2ME,出现界面

    在WTK Root中选择WTK的安装路径。

    3)。 点击左边J2ME下的Device Management,出现界面。

    点击import,出现界面

    点击浏览按钮,选中WTK的bin目录,如d:\java\WTK22\bin,然后按refresh按钮

    4)。

    再点击finish完成J2ME的配置操作

    12。在进入window菜单的preferences选项界面,点击左边的Tomcat选项,设置tomcat version为version 5。x,设置tomcat-home为D:\java\Tomcat 5。

    5,点击最右下角的APPLY按钮提交。

    在进入window菜单的preferences选项界面àjavaà修改Installed JREs的路径

    在进入window菜单的preferences选项界面àTomcatà设置Tomcat home

    安装插件后,删除Configuration文件夹的内容。

    全部

    展开全文
  • 之前只会做JSP,现在忽然接到任务,要用JAVA 做小游戏, 需然会点JAVA 页面编程语言,但是对于做小游戏来说,我门都还没入, 在这请求各位前辈赐教方法,如果有教程就好,要么也来推荐推荐一两本书, 让我买来...
  • 用Java开发贪食蛇小游戏

    万次阅读 多人点赞 2020-12-13 00:33:39
    如何用Java开发贪食蛇小游戏? 一、实验内容 1、实现贪吃蛇游戏基本功能 2、进行交互界面的设计 二、贪食蛇游戏逻辑架构 三、贪食蛇开发流程 四、结果演示 五、完整源代码

    用Java开发贪食蛇小游戏

    一、实验内容

    1、实现贪吃蛇游戏基本功能,屏幕上随机出现一个“食物”,称为豆子,上下左右控制“蛇”的移动,吃到“豆子”以后“蛇”的身体加长一点,得分增加,“蛇”碰到边界或,蛇头与蛇身相撞,蛇死亡,游戏结束。为游戏设计初始欢迎界面,游戏界面,游戏 结束界面。
    2、进行交互界面的设计,要有开始键、暂停键和停止退出的选项。对蛇吃到豆子进行分值计算,可以设置游戏速度,游戏音乐等拓展元素。

    二、贪食蛇游戏逻辑架构

    在这里插入图片描述

    三、贪食蛇开发流程

    1、准备开发环境

    (1)打开eclipse。
    (2)新建SnakeGame项目,在该项目下新建Snake主类和Panel类;新建一个folder:resource存放资源,在该文件resource下再新建两个folder:sound和image,把游戏所需图片文件和音频文件放进去。

    图片音频resource链接: 链接: https://pan.baidu.com/s/1QpznYZA8v3lylNgRWpbdXg
    提取码: uve7
    在这里插入图片描述

    2、设计游戏图纸

    在这里插入图片描述

    3、画出白布窗口frame
    	JFrame frame = new JFrame();
    	frame.setBounds(200, 50, 800, 600);
    	frame.setResizable(false);// 设置窗口不可更改
    	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	frame.setVisible(true);// 使窗口可视
    
    4、在窗口上添加画布
    frame.add(new Panel());
    
    5、在画布上添加标题
    ImageIcon title;// 定义游戏界面开头栏图标
    title.paintIcon(this, g, 5, 0);// 用画笔g画title图标
    
    6、在画布上添加黑色游戏框,添加游戏背景图(游戏区)
    g.fillRect(5, 35, 775, 525);// 用画笔g画游戏界面黑框
    g.drawImage(bj, 5, 35, this);// 添加游戏界面背景图片
    
    7、在游戏区放上静态的蛇
    for (int i = 1; i < len; i++) {// 不能从0开始,0用来存放蛇头了
    	    body.paintIcon(this, g, snakex[i], snakey[i]);
    	}
    
    8、初始化蛇
     public void initSnake() {
    	len = 3;
    	snakex[0] = 55;//一定要注意初始坐标的选取,不能随意取,
    	snakey[0] = 35;
    	snakex[1] = 30;
    	snakey[1] = 35;
    	snakex[2] = 5;
    	snakey[2] = 35;
    	foodx = 5 + 25 * rand.nextInt(30);// 横坐标可容纳30个food调用rand方法随机生成
    	foody = 35 + 25 * rand.nextInt(21);// 纵坐标可容纳21个food
    	fx = "R";// 重新初始化蛇头方向,不然每次一重新开始又立马撞到自己然后over掉!
    	score = 0;
        }
    
    9、控制蛇头的方向
    	if (fx == "R") {
    	    right.paintIcon(this, g, snakex[0], snakey[0]);// 蛇头放在头节点,即第一个数组元素中
    	} else if (fx == "L") {
    	    left.paintIcon(this, g, snakex[0], snakey[0]);
    	} else if (fx == "U") {
    	    up.paintIcon(this, g, snakex[0], snakey[0]);
    	} else if (fx == "D") {
    	    down.paintIcon(this, g, snakex[0], snakey[0]);
    	}
    
    10、放上游戏开始、游戏结束提示
    // 画跳出的游戏开始提示字符
    	if (isStarted == false) {
    	    g.setColor(Color.white);// 重新设置画笔字体颜色
    	    g.setFont(new Font("arial", Font.BOLD + Font.ITALIC, 45));// 重新设置画笔字体类型,加粗,大小
    	    g.drawString("Press Space to Your Show Time", 50, 475);// 画它,放在窗口中坐标为(75,300)的地方
    	    g.setColor(Color.red);
    	    begin.paintIcon(this, g, 250, 150);
    	}
    
    	// 画游戏结束界面
    	if (isFailed) {
    	    g.setColor(Color.white);
    	    g.setFont(new Font("arial", Font.BOLD, 40));
    	    g.drawString("Press Space to Restart", 200, 360);
    	    g.setColor(Color.red);
    	    g.setFont(new Font("arial", Font.BOLD + Font.ITALIC, 73));// 同时设置粗体与斜体用加号
    	    g.drawString("Game Over ! ", 200, 250);
    	    fail.paintIcon(this, g, 0, 380);
    	}
    
    11、按空格键控制游戏开始
    12、让蛇动起来
    if (isStarted && !isFailed) {
    	    // 递归方法,每间隔一个时钟周期,蛇移动一格,后一节身体的坐标变成前一节身体的坐标,蛇头直接向前移动一格,一直画一直画
    	    for (int i = len - 1; i > 0; i--) {
    		snakex[i] = snakex[i - 1];
    		snakey[i] = snakey[i - 1];
    	    }	    
    
    13、实现转向
     if (fx == "R") {
    		snakex[0] = snakex[0] + 25;// 向右移动就横坐标加25
    		if (snakex[0] > 755)// 当向右运动超出边界时,蛇死,游戏结束
    		    Failed();
    	    } else if (fx == "L") {
    		snakex[0] = snakex[0] - 25;
    		if (snakex[0] < 5)
    		    Failed();
    	    } else if (fx == "U") {
    		snakey[0] = snakey[0] - 25;
    		if (snakey[0] < 35)
    		    Failed();
    	    } else if (fx == "D") {
    		snakey[0] = snakey[0] + 25;
    		if (snakey[0] > 535)
    		    Failed();
    	    }
    
    13、添加食物,吃掉食物
     // 当蛇吃到食物时身体会变长
    	    if (snakex[0] == foodx && snakey[0] == foody) {
    		eat.loop(2);
    		foodx = 5 +25*rand.nextInt(30);// 食物被吃掉后继续随机生成
    		foody = 35 +25*rand.nextInt(21);// 21是用黑框宽度525除以每一格的宽度25得来的,算对很重要,不然运行起来会有毛病
    		len++;// 蛇身变长一节
    		score = score + 100;// 每吃掉一个食物,分数增加100
    	    }
    
    14、游戏结束功能

    背景音乐停止播放
    游戏结束音乐响起
    蛇不动了
    游戏结束界面跳出

    15、实现重新开始功能

    本游戏通过空格键控制游戏的暂停和开始。如果游戏尚未结束,按空格键可实现暂停;如果游戏已经结束,按空格键可实现游戏重新开始。

    16、添加分数和长度
    g.setColor(Color.white);// 设置画笔字体颜色
    	g.setFont(new Font("华文行楷", Font.BOLD, 20));// 设置画笔字体类型,加粗,大小
    	g.drawString("Len:" + len, 550, 24); // 在窗口右上角画len字符串
    	g.drawString("Score:" + score, 630, 24);// 画Score字符串
    
    17、添加背景音乐
    18、让背景音乐循环播放
    bgm.loop(Clip.LOOP_CONTINUOUSLY);// 循环播放背景音乐
    
    19、实现音乐播放和停止
     private void Failed() {
    	over.loop(1);// 游戏结束时播放死亡音乐
    	bgm.stop();// 游戏结束时使背景音乐暂停
    	isFailed = true;// 设置游戏处于结束状态
        }
    
    20、将源代码导出成可执行文件(后面有空再补充)

    (1)
    在这里插入图片描述
    (2)
    在这里插入图片描述
    (3)

    找到该游戏项目的主类
    找到该游戏的主类 选择导出的目的地
    选择Finish

    在这里插入图片描述
    (4)成功导出到目的地
    在这里插入图片描述

    四、测试演示

    1、视频链接:Java贪食蛇游戏演示
    (因无法上传视频只能提供视频链接和部分截图了)

    2、游戏开始界面在这里插入图片描述
    3、游戏结束界面在这里插入图片描述

    五、完整源程序代码

    Snake类

    import javax.swing.JFrame;
    
    public class Snake {
    
        public static void main(String[] args) {
    	JFrame frame = new JFrame();
    	frame.setBounds(200, 50, 800, 600);
    	frame.setResizable(false);// 设置窗口不可更改
    	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	frame.add(new Panel());
    	frame.setVisible(true);// 使窗口可视
        }
    }
    

    Panel 类

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Random;
    import javax.imageio.ImageIO;
    import javax.sound.sampled.*;
    import javax.swing.ImageIcon;
    import javax.swing.JPanel;
    import javax.swing.Timer;
    
    //新建画布Panel
    public class Panel extends JPanel implements KeyListener, ActionListener {
    
        // 定义组件
    
        ImageIcon title;// 定义游戏界面开头栏图标
        ImageIcon body;// 定义蛇身图标
        ImageIcon up;// 定义向上的蛇头图标
        ImageIcon down;// 向下的蛇头图标
        ImageIcon right;// 向右的蛇头图标
        ImageIcon left;// 向左的蛇头图标
        ImageIcon food;// 食物图标
        ImageIcon begin;// 游戏开始图标
        ImageIcon fail;// 游戏结束图标
        BufferedImage bj = null;
        /*
         * 游戏区的背景,定义成bufferedImage类型,该类型对象生成的图片在内存里有一个图像缓冲区,
         * 可利用该缓冲区对图片进行操作,比如设置图像透明与否、大小变换等等
         */
    
        int len = 3;// 定义蛇的初始长度为3
        int score = 0;// 添加分数
        int[] snakex = new int[650];// 定义蛇身数组x
        int[] snakey = new int[650];// 定义蛇身数组y
        int foodx;// 定义食物横坐标
        int foody;// 定义食物纵坐标
        String fx = "R";// U、L、R、D代表四个方向的蛇头
        boolean isStarted = false;// 定义布尔类型标志游戏是否开始
        boolean isFailed = false;// 蛇是否阵亡标志
        boolean isVictory = false;// 游戏胜利
    
        Timer timer = new Timer(100, this);// 定义一个时钟,即每间隔100ms,蛇重画一次,连贯起来便形成蛇在运动的视觉效果
        Random rand = new Random();// 引进随机函数,用于随机生成食物
        Clip bgm;// 背景音乐
        Clip over;// 游戏结束音乐
        Clip eat;// 吃到食物时的音乐
    
        // Panel的构造函数
        public Panel() {
    	loadImages();// 加载图片;load方法加载指定的文件名作为作为动态库,文件名参数必须是一个完整的路径名
    	initSnake();// 初始化蛇的方法
    	this.setFocusable(true);// 设置获取键盘焦点,focusable表示移动光标时是否能聚焦到组件上
    	this.addKeyListener(this);// 添加键盘监听器方法,方法摘要有:keyPressed(按下某键时),keyReleased(释放某键时),keyTyped(键入某键时)
    	timer.start();// 启动时钟方法
    	loadBGM();// 加载音乐
        }
    
        // 游戏界面设计画组件, 调用绘制容器组件方法paintComponent
        public void paintComponent(Graphics g) {// 添加一个画笔g
    	super.paintComponent(g);// 调用父类方法
    	this.setBackground(Color.DARK_GRAY);// 设置画布Panel背景色
    
    	title.paintIcon(this, g, 5, 0);// 用画笔g画title图标
    	g.fillRect(5, 35, 775, 525);// 用画笔g画游戏界面黑框
    	g.drawImage(bj, 5, 35, this);// 添加游戏界面背景图片
    	g.setColor(Color.white);// 设置画笔字体颜色
    	g.setFont(new Font("华文行楷", Font.BOLD, 20));// 设置画笔字体类型,加粗,大小
    	g.drawString("Len:" + len, 550, 24); // 在窗口右上角画len字符串
    	g.drawString("Score:" + score, 630, 24);// 画Score字符串
    
    	// 利用String 变量fx实现动态画蛇头,即可根据蛇运动的方向相应地调整蛇头的方向
    	if (fx == "R") {
    	    right.paintIcon(this, g, snakex[0], snakey[0]);// 蛇头放在头节点,即第一个数组元素中
    	} else if (fx == "L") {
    	    left.paintIcon(this, g, snakex[0], snakey[0]);
    	} else if (fx == "U") {
    	    up.paintIcon(this, g, snakex[0], snakey[0]);
    	} else if (fx == "D") {
    	    down.paintIcon(this, g, snakex[0], snakey[0]);
    	}
    
    	// 用循环的方法画蛇身,此时的蛇还是静态的
    	for (int i = 1; i < len; i++) {// 不能从0开始,0用来存放蛇头了
    	    body.paintIcon(this, g, snakex[i], snakey[i]);
    	}
    
    	// 画食物
    	food.paintIcon(this, g, foodx, foody);
    
    	// 画跳出的游戏开始提示字符
    	if (isStarted == false) {
    	    g.setColor(Color.white);// 重新设置画笔字体颜色
    	    g.setFont(new Font("arial", Font.BOLD + Font.ITALIC, 45));// 重新设置画笔字体类型,加粗,大小
    	    g.drawString("Press Space to Your Show Time", 50, 475);// 画它,放在窗口中坐标为(75,300)的地方
    	    g.setColor(Color.red);
    	    begin.paintIcon(this, g, 250, 150);
    	}
    
    	// 画游戏结束界面
    	if (isFailed) {
    	    g.setColor(Color.white);
    	    g.setFont(new Font("arial", Font.BOLD, 40));
    	    g.drawString("Press Space to Restart", 200, 360);
    	    g.setColor(Color.red);
    	    g.setFont(new Font("arial", Font.BOLD + Font.ITALIC, 73));// 同时设置粗体与斜体用加号
    	    g.drawString("Game Over ! ", 200, 250);
    	    fail.paintIcon(this, g, 0, 380);
    	}
        }
    
        // 初始化蛇,用initSnake方法
        public void initSnake() {
    	len = 3;
    	snakex[0] = 55;//一定要注意初始坐标的选取,不能随意取,
    	snakey[0] = 35;
    	snakex[1] = 30;
    	snakey[1] = 35;
    	snakex[2] = 5;
    	snakey[2] = 35;
    	foodx = 5 + 25 * rand.nextInt(30);// 横坐标可容纳30个food调用rand方法随机生成
    	foody = 35 + 25 * rand.nextInt(21);// 纵坐标可容纳21个food
    	fx = "R";// 重新初始化蛇头方向,不然每次一重新开始又立马撞到自己然后over掉!
    	score = 0;
        }
    
        // 自动生成的键盘监听器方法
        @Override
        public void keyTyped(KeyEvent e) {
        }
    
        // 定义响应键盘按下的行为的方法
        @Override
        public void keyPressed(KeyEvent e) {
    	int keyCode = e.getKeyCode();
    
    	// 当按下空格键时
    	if (keyCode == KeyEvent.VK_SPACE) {
    	    if (isFailed) {// 先判断当前游戏状态
    		isFailed = false;
    		initSnake();// 输了,初始化蛇
    	    } else {
    		isStarted = !isStarted;
    	    }
    	    repaint();// 重画界面
    
    	    // 通过空格键控制音乐的暂停和开始
    	    if (isStarted) {
    		bgm.loop(Clip.LOOP_CONTINUOUSLY);// 循环播放背景音乐
    	    } else {
    		bgm.stop();// 停止播放背景音乐
    	    }
    	}
    
    	// 当按下"——>"键时
    	else if (keyCode == KeyEvent.VK_LEFT) {
    	    fx = "L";
    	}
    	// 当按下"<——"键时
    	else if (keyCode == KeyEvent.VK_RIGHT) {
    	    fx = "R";
    	}
    	// 当按下向上键时
    	else if (keyCode == KeyEvent.VK_UP) {
    	    fx = "U";
    	}
    	// 当按下向下键时
    	else if (keyCode == KeyEvent.VK_DOWN) {
    	    fx = "D";
    	}
        }
    
        @Override
        public void keyReleased(KeyEvent e) {
        }
    
        // 定义操作事件的方法
        @Override
        public void actionPerformed(ActionEvent e) {// 事件监听器ActionEvent在动作发生时调用,对应的处理方法为actionPerformed
    
    	// 当游戏已经开始并且没有结束时,用循环的方法画蛇身,此处可实现蛇的动态运动效果
    	if (isStarted && !isFailed) {
    	    // 递归方法,每间隔一个时钟周期,蛇移动一格,后一节身体的坐标变成前一节身体的坐标,蛇头直接向前移动一格,一直画一直画
    	    for (int i = len - 1; i > 0; i--) {
    		snakex[i] = snakex[i - 1];
    		snakey[i] = snakey[i - 1];
    	    }
    	    
    	 // 当蛇吃到食物时身体会变长
    	    if (snakex[0] == foodx && snakey[0] == foody) {
    		eat.loop(2);
    		foodx = 5 +25*rand.nextInt(30);// 食物被吃掉后继续随机生成
    		foody = 35 +25*rand.nextInt(21);// 21是用黑框宽度525除以每一格的宽度25得来的,算对很重要,不然运行起来会有毛病
    		len++;// 蛇身变长一节
    		score = score + 100;// 每吃掉一个食物,分数增加100
    	    }
    
    	    // 定义蛇移动的方法
    	    if (fx == "R") {
    		snakex[0] = snakex[0] + 25;// 向右移动就横坐标加25
    		if (snakex[0] > 755)// 当向右运动超出边界时,蛇死,游戏结束
    		    Failed();
    	    } else if (fx == "L") {
    		snakex[0] = snakex[0] - 25;
    		if (snakex[0] < 5)
    		    Failed();
    	    } else if (fx == "U") {
    		snakey[0] = snakey[0] - 25;
    		if (snakey[0] < 35)
    		    Failed();
    	    } else if (fx == "D") {
    		snakey[0] = snakey[0] + 25;
    		if (snakey[0] > 535)
    		    Failed();
    	    }
    
    	    
    	    // 当蛇碰到自身时,游戏结束
    	    for (int i = 1; i < len; i++) {// for循环的作用是不管蛇头碰到哪一节身体都会over,遍历一遍看看是哪一节
    		if (snakex[i] == snakex[0] && snakey[i] == snakey[0]) {
    		    Failed();
    		}
    	    }
    	    repaint();// 每一次行为后都要重画以实现动态性与实时性
    	}
    	timer.start();// 时钟开始
        }
    
        // 游戏结束时的方法
        private void Failed() {
    	over.loop(1);// 游戏结束时播放死亡音乐
    	bgm.stop();// 游戏结束时使背景音乐暂停
    	isFailed = true;// 设置游戏处于结束状态
        }
    
        // 加载音乐的方法
        private void loadBGM() {
    	InputStream is;// 定义字节输入流变量
    	AudioInputStream ais;// 该类为inputstream的直接子类,用于读取音频
    	FloatControl gainControl;// 该类提供对一系列浮点值的控制,此处定义用来控制音频音量大小
    
    	try {
    	    bgm = AudioSystem.getClip();
    	    is = this.getClass().getClassLoader().getResourceAsStream("sound/background.wav");// 通过类加载器找到字节流
    	    ais = AudioSystem.getAudioInputStream(is);// 转换成音频字节流
    	    bgm.open(ais);
    	    gainControl = (FloatControl) bgm.getControl(FloatControl.Type.MASTER_GAIN);
    	    gainControl.setValue(-10.0f);// 控制调整bgm的音量大小
    
    	    eat = AudioSystem.getClip();
    	    is = this.getClass().getClassLoader().getResourceAsStream("sound/eat.wav");
    	    ais = AudioSystem.getAudioInputStream(is);
    	    eat.open(ais);
    	    gainControl = (FloatControl) eat.getControl(FloatControl.Type.MASTER_GAIN);
    	    gainControl.setValue(3.0f);
    
    	    over = AudioSystem.getClip();
    	    is = this.getClass().getClassLoader().getResourceAsStream("sound/over.wav");
    	    ais = AudioSystem.getAudioInputStream(is);
    	    over.open(ais);
    	    gainControl = (FloatControl) over.getControl(FloatControl.Type.MASTER_GAIN);
    	    gainControl.setValue(3.0f);
    
    	} catch (LineUnavailableException e) {
    	    e.printStackTrace();
    	} catch (UnsupportedAudioFileException e) {
    	    e.printStackTrace();
    	} catch (IOException e) {
    	    e.printStackTrace();
    	}
        }
    
        // 加载图片的方法
        private void loadImages() {
    	InputStream is;// 定义输入流对象is
    	try {// 之所以整这么麻烦是为了把图片等资源都整合在当前SnakeGame项目的一个文件夹里,方便后面将整个源代码导出成exe程序
    	    is = getClass().getClassLoader().getResourceAsStream("images/title.png");// 通过类加载器查找图片
    	    title = new ImageIcon(ImageIO.read(is));// 让title画出其相对应的图标
    
    	    is = getClass().getClassLoader().getResourceAsStream("images/bj.jpg");
    	    bj = ImageIO.read(is);
    
    	    is = getClass().getClassLoader().getResourceAsStream("images/body.png");
    	    body = new ImageIcon(ImageIO.read(is));
    
    	    is = getClass().getClassLoader().getResourceAsStream("images/up.png");
    	    up = new ImageIcon(ImageIO.read(is));
    
    	    is = getClass().getClassLoader().getResourceAsStream("images/down.png");
    	    down = new ImageIcon(ImageIO.read(is));
    
    	    is = getClass().getClassLoader().getResourceAsStream("images/right.png");
    	    right = new ImageIcon(ImageIO.read(is));
    
    	    is = getClass().getClassLoader().getResourceAsStream("images/left.png");
    	    left = new ImageIcon(ImageIO.read(is));
    
    	    is = getClass().getClassLoader().getResourceAsStream("images/food.png");
    	    food = new ImageIcon(ImageIO.read(is));
    
    	    is = getClass().getClassLoader().getResourceAsStream("images/fail.png");
    	    fail = new ImageIcon(ImageIO.read(is));
    
    	    is = getClass().getClassLoader().getResourceAsStream("images/begin.png");
    	    begin = new ImageIcon(ImageIO.read(is));
    
    	} catch (IOException e) {
    	    e.printStackTrace();
    	}
        }
    }
    
    

    本代码还可继续扩展:

    (1)设置分数等级及晋级机制
    (2)设置不同速度模式
    (3) 根据蛇长到一定程度速度也相应加快,增加挑战性
    (4)添加不同种类食物,添加奖励机制和障碍物机制 (5)添加开始、暂停、结束、退出等按钮(需添加鼠标监听器)

    展开全文
  • 【IT168 技术】使用NetBeans进行J2ME开发1.首先安装JDK-6-Windows-i586.exe软件,路径假设为D:\Java\jdk1.6.0。安装过程系统会自动再安装一个虚拟环境路程:D:\java\jre1.6.0。2.配置jdk的环境变量右点击“我的电脑...

    【IT168 技术】使用NetBeans进行J2ME开发

    1.首先安装JDK-6-Windows-i586.exe软件,路径假设为D:\Java\jdk1.6.0。

    安装过程系统会自动再安装一个虚拟环境路程:D:\java\jre1.6.0。

    2.配置jdk的环境变量

    右点击“我的电脑”->属性,如图所示,进入属性界面,选择“高级”选项,点击“环境变量”,进行环境变量配置。

    点击“系统变量”下面的新建按钮,在弹出的“新建系统变量”对话框中输入:变量名为JAVA_HOME,变量值为d:\java\jdk1.6.0

    点击系统变量新建按钮,在新建系统变量对话框中输入:

    变量名为CLASSPATH,

    变量值为:d:\java\jdk1.6.0\lib;d:\java\jdk1.6.0\lib\*.jar; (分号作为路径分隔标志,要保留)。

    选择变量名为Path的系统变量,点击系统变量下面的编辑按钮,在变量值中添加:d:\java\jdk1.6.0\bin;d:\java\jre1.6.0\bin;

    3.安装j2me_wireless_toolkit-2_2-ml-Windows.exe,假设该软件安装路径为D:\java\WTK22,安装过程会提示JDK的安装路径(因为要求JDK的支持),确认正确即可。

    4.安装apache-tomcat-5.5.20.exe,假设安装路径为:D:\java\Tomcat 5.5,安装过程会自动寻找jre的安装路径,确认正确即行。

    5. .配置tomcat的环境变量

    参考第2点进入新建系统环境变量对话框,变量名为TOMCAT_HOME,变量值为:D:\java\Tomcat 5.5,

    参考第2点,选择CLASSPATH系统变量,进入编辑系统变量对话框,在变量值中添加D:\java\Tomcat 5.5\common\lib\Servlet-api.jar;

    在d:\java\tomcat\bin里双击tomcat5.exe启动tomcat

    如能进入页面表示tomcat安装成功。否则要考虑上述各软件重新安装或检查配置是否配置。

    6.将D:\java\Tomcat 5.5\common\lib下的servlet-api.jar文件拷到D:\java\jre1.6.0\lib\ext文件夹下。

    7.解压Eclipse-SDK-3.3.2-win32.zip软件到D:\java文件夹下,可看到在java文件夹下新建了一个D:\java\eclipse-SDK-3.3.2-win32文件夹,里面有一个eclipse文件夹。

    8.解压tomcatPluginV321 .zip软件,得到一个文件夹:com.sysdeo.eclipse.tomcat_3.2.1,将整个文件夹复制到D:\java\eclipse-SDK-3.3.2-win32\eclipse文件夹下的plugins文件夹中 。

    9.将eclipseme.feature_1.5.0_site.zip文件夹解压,解压后会有两个文件夹features和plugins。将两个文件夹内的内容分别拷贝到D:\java\ eclipse-SDK-3.3.2-win32\eclipse文件夹下的features和plugins目录下。

    10.在java下面新建一文件夹:D:\java\workspace

    11.进入D:\java\eclipse-SDK-3.3.2-win32\eclipse文件夹,点击eclipse.exe图标,启动eclipse(第一次启动过程提示workspace路径,选择第10点设置的路径),进入window菜单的preferences选项,进行参数配置,如下图。

    1). 进入界面,出现J2ME,表示J2ME插件已经安装进eclipse。

    2). 点击左边的J2ME,出现界面

    在WTK Root中选择WTK的安装路径。

    3). 点击左边J2ME下的Device Management,出现界面。

    点击import,出现界面

    点击浏览按钮,选中WTK的bin目录,如d:\java\WTK22\bin,然后按refresh按钮

    4). 再点击finish完成J2ME的配置操作

    12.在进入window菜单的preferences选项界面,点击左边的Tomcat选项,设置tomcat version为version 5.x,设置tomcat-home为D:\java\Tomcat 5.5,点击最右下角的APPLY按钮提交。

    在进入window菜单的preferences选项界面àjavaà修改Installed JREs的路径

    在进入window菜单的preferences选项界面àTomcatà设置Tomcat home

    安装插件后,删除Configuration文件夹的内容。

    展开全文
  • 感觉游戏不应该是这么开发的啊 (这样的游戏连JS这种脚本语言都能做吧。。。) 还有看了很多关于引擎方面的资料。 是否添加了引擎就可以让角色自动模拟出走路或者其他动作姿态? 2D/3D游戏有什么异同哦 都不是很了解...
  • 之四)添加更多的功能计分功能大体上我们的程序已经可以...规定用户游戏时间,游戏时间为地图中方块数 * 4 ,比如说有 120 个方块,那么游戏时间就是 480 秒,如果用户在 480 秒内没有完成游戏,则没有时间奖励分时间...

    之四)添加更多的功能

    计分功能

    大体上我们的程序已经可以跑了起来,可惜,就这么玩玩也太没有意思了,总得有个计分的吧。虽然我们不知道别人是怎么计分的,可是,程序是我们自己动手写的,我的地盘我做主,看看我是怎么计分的吧(实现可以放在下一步)。

    规定用户游戏时间,游戏时间为地图中方块数 * 4 ,比如说有 120 个方块,那么游戏时间就是 480 秒,如果用户在 480 秒内没有完成游戏,则没有时间奖励分

    时间奖励分为剩余时间 * 1 ,即在规定时间内完成游戏的,每提前一秒钟奖励 1 分

    当已经选择第二个点后,如果选择的第二个点与第一个点之间无解,扣 1 分,如果有解,则增加 10 分

    刷新功能会降低游戏难度,因此,当用户刷新地图时,扣 8 分

    提示也要扣分,理由同上,使用一次扣 10 分

    炸弹功能,这个更变态啊,使用一次扣 12 分

    好了,计分规则定下来了,合理不合理先放在一边,不过,为了方便以后修改计分规则,我们还是将这些定义为常量吧。

    //Setting.java

    public final static int limitScore = 4; // 每个方块限定的时间

    public final static int timeScore = 2; // 时间奖励的分数

    public final static int wrongScore = 1; // 选择失败扣分

    public final static int freshScore = 8; // 刷新功能扣分

    public final static int hintScore = 10; // 提示功能扣分

    public final static int bombScore = 12; // 炸弹功能扣分

    public final static int correctScore = 10; // 成功消除后加分

    现在,我们来一一实现计分功能。

    首先,我们定义一个变量来保存用户的总分,另外,消除功能、刷新功能、提示功能和炸弹功能由于都有现成的方法,因此,我们只需要在这些方法中添加上计分功能就行了,唯一麻烦一点的就是计算时间分。

    为了满足计时的功能,我们需要在游戏开始的时候记录下当前的时间,同时,在游戏完成时也要记录下完成时的时间,两者相减后就是用户游戏的时间了(如何知道游戏在什么时候结束,这个大家想想,不难办到:))。记录时间可以使用 System.currentTimeMillis() 方法,不过需要注意的是,这是以毫秒来计时的,要记得除以 1000 。

    高手排行榜

    分数是记下来了,自己每次游戏完成都能知道自己的分数,感觉是不错,不过,光和自己比不够劲啊,要是能和别人比就更好了,嗯,继续满足你的“愿望”:)

    (注:以下功能需要一个支持动态页面的空间)

    最简单的办法,就是我们在互联网上建立一个保存用户分数的数据库,当用户每次完成后,都让用户可以选择将分数发送到这个数据库中,同时,我们需要做一个后台程序,该程序接收到用户提交来的姓名和分数后,就保存到数据库中,并且,根据当前的分数,告诉用户当前的 Top10 排行榜。后台程序可以使用网页来实现,至于怎么做,这个与程序关系不大,我们只看一看程序这一块怎么做吧。

    首先,做法有两种,一种是自己使用 Socket 类来完成 HTTP 的 Get/Post 操作,另一种就是使用 URL 类,前者适用性前(如 J2ME 就不支持 URL 类)后者用起来方便一些,在此,我们就用后者来实现。

    游戏完成后,当用户需要提交分数到互联网上时,先弹出一个对话框让用户输入姓名,同时将用户的姓名和分数,还有自己已经做好的页面“凑”成一个合法的 URL 地址,然后,将这个 URL 地址简单的 new 一下 (new 的同时就已经将这些数据发送到了互联网上了 ) ,比方说我做的排行榜的页面为http://www.xhai.com/kyodai/top10.asp

    ,用户的姓名为“ ZhangJian ”,分数为 2000 分,那么,根据这些信息,我拼凑成的网址就是应该是类似于http://www.xhai.com/kyodai/top10.asp?name=ZhangJian&score=2000 这样样的地址,然后,

    new URL(“http://www.xhai.com/kyodai/top10.asp?name=ZhangJian&score= 2000”) 就行了:)是不是够简单的?当然,如果有需要,还可以对这些数据进行一下加密,以防用户“作弊”。 (现在已经废弃)

    为了在程序中显示排行榜的页面,我们需要程序能够处理页面的功能,显示,如果自己去实现这个功能,虽然并不复杂,但是 JAVA 提供的 JEditorPane 控件却更适合完成这项工作。

    我不想用完整源程序来说明,毕竟那太费篇幅,只是截取一段代码来描述一下吧。

    JEditorPane HelpPane = new JEditorPane();

    HelpPane.setEditable(false); // 禁止用户编辑

    HelpPane.setPage(new URL("http://www.xhai.com/kyodai/top10.asp")); // 设置页面

    HelpPane.addHyperlinkListener(this); // 添加用户点击链接时的事件处理

    public void hyperlinkUpdate(HyperlinkEvent e) {

    if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {

    JEditorPane pane = (JEditorPane) e.getSource();

    if (e instanceof HTMLFrameHyperlinkEvent) {

    HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent) e;

    HTMLDocument doc = (HTMLDocument) pane.getDocument();

    doc.processHTMLFrameHyperlinkEvent(evt);

    }

    else {

    try {

    pane.setPage(e.getURL());

    }

    catch (Throwable t) {

    t.printStackTrace();

    }

    }

    }

    }

    使用配置文件来保存用户信息

    假如用户每次要发送成绩到互联网上时都要输入姓名,那有多麻烦啊,为什么我们不将用户的姓名保存起来呢?

    其实,不光是用户的姓名需要保存,以后我们添加的其它选项也需要保存起来,因此,我们必须实现一个保存 / 读取用户信息的类,就如果 Windows 的注册表或者 ini 文件一样。在这里,我不想多费口舌,只是告诉一下大家怎么做就行了。

    JAVA 提供了一个 java.util.Properties() 类,这个类就是用来保存 / 读取配置文件的,它的 setProperty() 和 getProperty() 方法就是分别用来保存 / 读取配置文件信息的,就如同使用 ini 文件一样,具体的用法查一查 API 就清楚了。

    展开全文
  • 而一些简单的小游戏则成为了人们放松的主要方式,本文用java语言开发了客户端/服务器端游戏大厅,可以实现不同的客户登陆同一个服务器进行跨区域对战游戏,通过对战游戏胜负进行统计玩家级别,让更多玩家更愉快健康...
  • 用Java开发数独游戏,源程序与源代码全部开放

    千次阅读 热门讨论 2020-03-28 17:23:16
    如何用Java语言开发出一个带有界面的数独游戏? 这篇文章将带你从零开始写出完整的游戏小项目。
  • 第一次电话初面,全程大概半个小时,除了开头一分多钟的自我介绍外,剩下是时间都在详细地问我所做过的项目的具体内容,考察我在这一方向的能力和水平如何,对于我的在校成绩、性格爱好一点儿也没有问,甚至连学历也...
  • 本文将一个Java 3D游戏来介绍Checkers3D以及如何使用它创建一个场景,该场景包含深绿色和蓝色间隔的平铺表面,其轴向是沿着x和z轴,一个蓝色的背景和一个浮动的可以从两个不同的方向照亮的球体。用户(观察者)能...
  • 学习java的过程中,如果想找一些小游戏项目来练手的话,我们需要学习哪些技术先呢?(适用于java初学者) 第一步:了解GUI编程—Swing基础 GUI(Graphical User interface): Java支持图形用户界面功能。GUI即图形...
  • 图书管理系统得有页面吧,页面我该怎么开发呢?于是你百度:前端入门,然后你就知道了,原来我使用 html js css就可以写一个页面出来了。于是乎你入门一下前端三剑客,开始上手写起了前端,写着写着,你觉得很麻烦,...
  • 就成了这样:点击图片查看大图是不是跟原版有很大区别呢,我们还可以换个背景,换下素材,是不是有很多种玩法呢,今天不多讲别的东西,就主要讲解一下如何用Java语言给坦克大战这种小游戏添加一些简单特效,比如血条...
  • java语言包含很多的知识...3,if-else, while等语句如何使用。 4,什么是方法,方法怎么调用。 5,数组是什么,怎么,最好还知道下链表。 6,awt和swing的基础知识。 ok,知道这些,你就可以开始java编程了。 ...
  • Java语言如何实现扫雷游戏发布时间:2020-07-31 10:43:13来源:亿速云阅读:109作者:小猪这篇文章主要讲解了Java语言如何实现扫雷游戏,内容清晰明了,对此有兴趣的小伙伴可以...接下来我就简单分享一下用Java设...
  • 前言 假如开一把lol,必须要做哪些事呢?...[比如玩一把lol,选择什么英雄都可以,开始游戏后,每个人也有自己的发育路线,最后是15分钟投降,还是20分钟投降,每一局也都不一定(赢了暂时不算)不管谁来玩,
  • 这是我对Temple大学使用Java开发的3296 Software Design类的Minesweeper游戏的看法。 游戏将使用TDD和面向对象编程的做法,以创建易于使用的GUI,用户将使用该GUI与游戏进行交互。 下面是一个粗略的UML图,显示了...
  • 如何用Java程序改变系统环境变量

    千次阅读 2013-08-11 17:07:00
    首页业界资讯软件教程软件下载硬件频道家电频道开发编程源码下载游戏频道手机软件 IT资讯互联网IT业界电信· 3G网站推荐互联思考深度报道电子商务职场创业资料数据 常用软件操作系统聊天软件病毒安全办公...
  • 我正在尝试遵循David Brackeen所写的《用Java开发游戏》一书。 在第2章中,有一个示例如何将图像添加到全屏应用程序。 他所做的是,他添加了JPG背景图像,然后添加了4张PNG图片。 我试图像往常一样通过自己看书来...
  • 我正在开发一个简单的游戏,用户必须猜测一个随机数.我已经设置了所有代码,除了这个事实,如果猜测太高或太低,我不知道如何允许他们重新输入数字并继续玩直到他们得到它.它只是停止;这是代码:import java.util....
  • Java是一种可以撰写跨平台应用...Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,一些有趣的小游戏也是用Java开发出来的,例
  • 今天的“Java”作为所有编程语言中最热门技术,可以说它无处不在,目前全球有着数十亿的设备正在运行着Java,很多服务器程序都是用Java编写,用以处理每天超过数以千万的数据。 无论是手机软件、手机Java游戏还是...
  • 我是Unity新手并开发移动2D游戏,现在当我在屏幕中心之前或之后触摸屏幕时,我能够使对象左右移动 . 但我想触摸对象并将其拖动到x轴上,同时我的手指仍然触摸屏幕并移动,所以我希望对象位于我手指的相同x位置,Any ...
  • 现在就分享给大家 JAVA开发游戏 俄罗斯方块的思路!现在很多小伙伴喜欢在互联网上找视频资料学习java,但是光看视频你是不可能学会java的,没有人指导你,而且很多视频已经过时了,并没有什么!如果你真的想学习...
  • “本鹏”上回书言道,Java 游戏中地图的构建是一件极其简单的事情,本次书接前文,探讨游戏中角色的移动问题。众所周知,[角色]是一个游戏的灵魂所在,没有角色的游戏,就是没有灵魂的游戏。那么,如何让这重要的...
  • 无论是手机软件、手机Java游戏还是电脑软件,你的每一次购物到每一笔支付成功,都离不开Java,越来越多的企业也正采用Java语言开发网站,而在所有程序员中,Java开发工程师就占据20%的比例。  据业内权威机构预...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 348
精华内容 139
关键字:

如何用java开发游戏

java 订阅