java----推箱子

合集下载

Java实现经典游戏推箱子的示例代码

Java实现经典游戏推箱子的示例代码

Java实现经典游戏推箱⼦的⽰例代码⽬录前⾔主要设计功能截图代码实现核⼼类声⾳播放类总结前⾔《推箱⼦》推箱⼦是⼀个古⽼的游戏,⽬的是在训练你的逻辑思考能⼒。

在⼀个狭⼩的仓库中,要求把⽊箱放到指定的位置,稍不⼩⼼就会出现箱⼦⽆法移动或者通道被堵住的情况,所以需要巧妙的利⽤有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。

游戏是⽤java语⾔实现,采⽤了swing技术进⾏了界⾯化处理,设计思路⽤了⾯向对象思想。

主要需求控制搬运⼯上下左右移动,来将箱⼦推到指定地点主要设计1、游戏⾯板⽣成显⽰2、地图⽣成算法3、⼈物移动算法4、播放背景⾳乐5、箱⼦移动算法6、全部箱⼦移动到指定位置,才算游戏过关功能截图游戏开始移动效果游戏过关代码实现核⼼类public class GameFrame extends JFrame implementsActionListener, MouseListener, KeyListener {// 实现动作事件监听器、⿏标事件监听器、键盘事件监听器// 当前的关卡数,默认为第⼀关,从1开始计数private int grade = 1;// row,column记载⼈的位置,分别表⽰⼆维数组中的⾏号和列号,即map[row][column]确定⼈的位置private int row = 7, column = 7;// leftX,leftY记载左上⾓图⽚的位置,避免图⽚从(0,0)坐标开始,因为是图⽚填充,从(0,0)开始不⾏private int leftX = 50, leftY = 50;// 记载地图的总共有多少⾏、多少列private int mapRow = 0, mapColumn = 0;// 记载屏幕窗⼝的宽度和⾼度private int width = 0, height = 0;private boolean acceptKey = true;// 程序所需要⽤到的图⽚private Image pics[] = null;// 图⽚数据private byte[][] map = null;// 地图数据private ArrayList list = new ArrayList();private SoundPlayerUtil soundPlayer;// 播放声⾳⼯具类/* 常量,即游戏中的资源 */private final static int WALL = 1;// 墙private final static int BOX = 2;// 箱⼦private final static int BOX_ON_END = 3;// 放到⽬的地的箱⼦private final static int END = 4;// ⽬的地private final static int MAN_DOWN = 5;// 向下的⼈private final static int MAN_LEFT = 6;// 向左的⼈private final static int MAN_RIGHT = 7;// 向右的⼈private final static int MAN_UP = 8;// 向上的⼈private final static int GRASS = 9;// 通道private final static int MAN_DOWN_ON_END = 10;// 站在⽬的地向下的⼈private final static int MAN_LEFT_ON_END = 11;// 站在⽬的地向左的⼈private final static int MAN_RIGHT_ON_END = 12;// 站在⽬的地向右的⼈private final static int MAN_UP_ON_END = 13;// 站在⽬的地向上的⼈private final static int MOVE_PIXEL = 30;// 表⽰每次移动30像素/*** 在构造⽅法GameFrame0中,调⽤initMap()法来初始化本关grade游戏地图,清空悔棋信* 息列表list,同时播放MIDI背景⾳乐。

java推箱子

java推箱子

//代码如下,图片在最下面,已添加注释package boxend;import java.awt.Color;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.*;public class Boxend extends JFrame {public static final int SPEED = 12;//加入菜单条MenuBar menubar;Menu menu;MenuItem itemExit, itemBack;JPanel panel = new JPanel();JLabel worker = new JLabel(new ImageIcon("workerLeft.png"));int[] pos = new int[]{0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12,1, 12, 2, 12, 3, 12, 4, 12, 5, 12, 6, 12, 7, 12, 8, 12, 9, 12, 10, 12, 11, 12, 12, 12,12, 1, 12, 2, 12, 3, 12, 4, 12, 5, 12, 6, 12, 7, 12, 8, 12, 9, 12, 10, 12, 11, 12, 12,1, 4, 2, 4, 3, 4, 4, 4, 5, 4, 4, 8, 4, 9, 4, 10, 4, 11, 7, 6, 8, 6, 9, 6, 10, 6, 11, 6, 9, 1, 9, 2, 9, 3 };JLabel walls[] = new JLabel[pos.length / 2];JLabel box = new JLabel(new ImageIcon("box.png"));JLabel box1 = new JLabel(new ImageIcon("box.png"));JLabel box2 = new JLabel(new ImageIcon("box.png"));JLabel goal = new JLabel(new ImageIcon("goal.png"));JLabel goal1 = new JLabel(new ImageIcon("goal.png"));JLabel goal2 = new JLabel(new ImageIcon("goal.png"));public Boxend() {menubar = new MenuBar();menu = new Menu("file");itemExit = new MenuItem("exit");menu.add(itemExit);itemBack = new MenuItem("back");menu.add(itemBack);menubar.add(menu);setMenuBar(menubar);this.setTitle("推箱子");this.setBounds(200, 60, 640, 675);this.setContentPane(panel);panel.setLayout(null);panel.setBackground(Color.black);//加入工人panel.add(worker);worker.setBounds(48, 48, 48, 48);//itemExit.addActionListener(this);//加入围墙for (int i = 0; i < walls.length; i++) {walls[i] = new JLabel(new ImageIcon("wall.png"));panel.add(walls[i]);walls[i].setBounds(pos[i * 2] * 48, pos[i * 2 + 1] * 48, 48, 48);}//加入箱子和胜利标志panel.add(box);box.setBounds(96, 144, 48, 48);panel.add(goal);goal.setBounds(6 * 48, 3 * 48, 48, 48);panel.add(box1);box1.setBounds(8 * 48, 9 * 48, 48, 48);panel.add(goal1);goal1.setBounds(9 * 48, 10 * 48, 48, 48);panel.add(box2);box2.setBounds(2 * 48, 6 * 48, 48, 48);panel.add(goal2);goal2.setBounds(2 * 48, 7 * 48, 48, 48);this.setV isible(true);//工人可以移动this.addKeyListener(new KeyListener() {public void keyPressed(KeyEvent e) {int xSpeed = 0, ySpeed = 0;switch (e.getKeyCode()) {case KeyEvent.VK_LEFT:xSpeed = -SPEED;worker.setIcon(new ImageIcon("workerLeft.png"));break;case KeyEvent.VK_RIGHT:xSpeed = SPEED;worker.setIcon(new ImageIcon("workerRight.png"));break;case KeyEvent.VK_UP:ySpeed = -SPEED;worker.setIcon(new ImageIcon("workerUp.png"));break;case KeyEvent.VK_DOWN:ySpeed = SPEED;worker.setIcon(new ImageIcon("workerDown.png"));break;}worker.setBounds(worker.getX() + xSpeed, worker.getY() + ySpeed, worker.getWidth(), worker.getHeight());//工人是否碰到墙壁for (int i = 0; i < walls.length; i++) {if (worker.getBounds().intersects(walls[i].getBounds())) {worker.setBounds(worker.getX() - xSpeed, worker.getY() - ySpeed, worker.getWidth(), worker.getHeight());}}//工人推动箱子if (worker.getBounds().intersects(box.getBounds())) {box.setBounds(box.getX() + xSpeed, box.getY() + ySpeed, box.getWidth(), box.getHeight());//箱子是否碰到墙壁for (int i = 0; i < walls.length; i++) {if (box.getBounds().intersects(walls[i].getBounds())) {box.setBounds(box.getX() - xSpeed, box.getY() - ySpeed, box.getWidth(), box.getHeight());}}//箱子是否碰到箱子if ((box.getBounds().intersects(box1.getBounds())) || (box.getBounds().intersects(box1.getBounds()))) {box.setBounds(box.getX() - xSpeed, box.getY() - ySpeed, box.getWidth(), box.getHeight());}}//工人推动箱子if (worker.getBounds().intersects(box1.getBounds())) {box1.setBounds(box1.getX() + xSpeed, box1.getY() + ySpeed, box1.getWidth(), box1.getHeight());//箱子是否碰到墙壁for (int i = 0; i < walls.length; i++) {if (box1.getBounds().intersects(walls[i].getBounds())) {box1.setBounds(box1.getX() - xSpeed, box1.getY() - ySpeed,box1.getWidth(), box1.getHeight());}}//箱子是否碰到箱子if ((box1.getBounds().intersects(box.getBounds())) || (box1.getBounds().intersects(box2.getBounds()))) {box1.setBounds(box1.getX() - xSpeed, box1.getY() - ySpeed, box1.getWidth(), box1.getHeight());}}//工人推动箱子if (worker.getBounds().intersects(box2.getBounds())) {box2.setBounds(box2.getX() + xSpeed, box2.getY() + ySpeed, box2.getWidth(), box2.getHeight());//箱子是否碰到墙壁for (int i = 0; i < walls.length; i++) {if (box2.getBounds().intersects(walls[i].getBounds())) {box2.setBounds(box2.getX() - xSpeed, box2.getY() - ySpeed, box2.getWidth(), box2.getHeight());}}//箱子是否碰到箱子if ((box2.getBounds().intersects(box.getBounds())) || (box2.getBounds().intersects(box1.getBounds()))) {box2.setBounds(box2.getX() - xSpeed, box2.getY() - ySpeed, box2.getWidth(), box2.getHeight());}}//游戏胜利if ((box.getX() == goal.getX() && box.getY() == goal.getY()) && (box1.getX() == goal1.getX() && box1.getY() == goal1.getY())&& (box2.getX() == goal2.getX() && box2.getY() == goal2.getY())) {JOptionPane.showMessageDialog(null, "您赢啦!");System.exit(0);}}@Overridepublic void keyTyped(KeyEvent e) {throw new UnsupportedOperationException("Not supported yet.");}@Overridepublic void keyReleased(KeyEvent e) {throw new UnsupportedOperationException("Not supported yet.");}});}public static void main(String[] args) {new Boxend();}}。

用java实现推箱子(sokoban)游戏

用java实现推箱子(sokoban)游戏

推箱子游戏一、功能描述:➢可以通过面板上的按钮或是键盘上的pageup,pagedown键选择上下关➢可以通过面板上按钮或是键盘上的Backspace键后退,一直后退自己想要的位置,知道游戏开始时的位置。

➢可以通过面板上的按钮或是键盘上的字母r重新开始当前关卡游戏。

➢可以在复选框选择想要玩的关卡。

二、界面及运行截图三、源代码(三部分)1、地图类package box;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;//读取字符文件类FileReader import java.io.IOException;public class map {int[][] map=new int[20][20];int manX,manY;public map(int level){String filepath="mapc/"+level+".txt";File file = new File(filepath);FileReader fr = null;//利用FileReader流来读取一个文件中的数据BufferedReader br = null;//字符读到缓存里try {fr = new FileReader(file);br = new BufferedReader(fr);for (int i = 0; i < 15; i++){String line = br.readLine();//以行为单位,一次读一行利用BufferedReader 的readLine,读取分行文本byte[] point = line.getBytes();//将字符串转换为字节数组for (int j = 0; j < 15; j++) {map[i][j] = point[j] - 48;// 根据ASCall码表要减掉30H(十进制的48)if (map[i][j] == 5 || map[i][j] == 6 || map[i][j] == 7|| map[i][j] == 8){manX = i;manY = j;}}}}catch (FileNotFoundException e){e.printStackTrace();//深层次的输出异常调用的流程}catch (IOException e){e.printStackTrace();//深层次的输出异常调用的流程}catch(NullPointerException e){e.printStackTrace();//深层次的输出异常调用的流程}finally {if (br == null){try{br.close();}catch (IOException e){e.printStackTrace();}br = null;}if (fr == null){try {fr.close();} catch (IOException e){e.printStackTrace();}fr = null;}}}public int[][] getMap() {return map;}public int getManX() {return manX;}public int getManY() {return manY;}}2、游戏运行类package box;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.*;import javax.swing.*;public class pushbox extends JFrame implements KeyListener,ActionListener{ map map_level=new map(1); //首次获取地图int[][] map=new int[15][15]; //地图上每个位置所对应的图片int[][] map_restart=new int[15][15]; //备用图片static int manX,manY; //人所处的位置static int level=1; //所处关卡static int step=0;Image[] picture; //地图上的所有图片ImageIcon[] image=new ImageIcon[10];Stack<Integer> back_stack = new Stack<Integer>(); //存储所前行的路径JButton next,previous,back,restart,exit; //按钮:下一关,上一关,重新开始,退出String current_level="第"+level+"关"; //当前所处关卡(右上角显示文本)String[] level_button=new String[13]; //复选框的容JComboBox selectBox; //选关复选框final int Up = 0;final int Down = 1;final int Left = 2;final int Right = 3;int[] dir_x = {-1, 1, 0, 0};int[] dir_y = {0, 0, -1, 1};public pushbox(){super("推箱子");getmap(map);previous=new JButton("上一关");next=new JButton("下一关");restart=new JButton("重新开始");back=new JButton("后退");exit=new JButton("退出游戏");for(int i=0;i<13;i++)level_button[i]="第"+Integer.toString(i+1)+"关";selectBox=new JComboBox(level_button);FlowLayout layout=new FlowLayout(); //布局模式Container c=getContentPane();c.setLayout(layout);layout.setAlignment(FlowLayout.CENTER); //控件在布局中的位置c.setBackground(Color.CYAN); //背景色c.add(previous);c.add(next);c.add(back);c.add(restart);c.add(selectBox);c.add(exit);previous.addActionListener((ActionListener) this);previous.addKeyListener(this);next.addActionListener((ActionListener) this);next.addKeyListener(this);back.addActionListener(this);back.addKeyListener(this);restart.addActionListener((ActionListener) this);restart.addKeyListener(this);exit.addActionListener((ActionListener) this);exit.addKeyListener(this);selectBox.addItemListener( //监听复选框点击事件new ItemListener(){public void itemStateChanged(ItemEvent e){if(e.getStateChange()==e.SELECTED){step=0;back_stack.clear(); //每次重新选关后都要清空路径栈level=selectBox.getSelectedIndex()+1; //获取所选的关卡map_level=new map(level); //重新获取对应关卡的地图getmap(map);current_level="第"+level+"关"; //右上角提示所处关卡文本的更新repaint(); //重画地图requestFocus(); //重新获取焦点(因为按钮事件后键盘事件不起作用)}}});for(int k=0;k<10;k++){image[k]=new ImageIcon("picture/"+k+".png"); //获取图片}picture=new Image[]{image[0].getImage(),image[1].getImage(),image[2].getImage(),image[3].getImage(),image[4].getImage(),image[5].getImage(),image[6].getImage(),image[7].getImage(),image[8].getImage(),image[9].getImage()};this.setFocusable(true);this.addKeyListener((KeyListener)this);setSize(640,640);setVisible(true);}//判断是否通关(方法是,检查地图中是否还有箱子编号4)public Boolean pass(){int p=0;for(int i=0;i<15;i++)for(int j=0;j<15;j++){if(map[i][j]==4) p++;}if(p==0) return true;else return false;}//获取地图上每个位置所对应的图片编号public void getmap(int[][] map){for(int i=0;i<15;i++)for(int j=0;j<15;j++)map[i][j]=map_level.map[i][j];manX=map_level.manX;manY=map_level.manY;}public void paint(Graphics g){super.paint(g);//提示信息back_stack.push(Down + 5); //这里是一个细节,先将“DOWN”存入栈g.drawString(current_level,500,90);g.drawString("第"+step+"步",400,90);g.drawString("用键盘上的R重新开始,Q退出游戏",200,565);g.drawString("用键盘pageup,pagedown切换关卡",200,580);g.drawString("用键盘上的上下左右键控制人的移动",200,600);g.drawString("用键盘上的Backspace键后退",200,620);//在面板上画地图for (int i = 0; i < 15; i++)for (int j = 0; j < 15; j++)g.drawImage(picture[map[i][j]],100+30*j,100+30*i, this);}public void Step(Graphics g){g.setColor(Color.cyan);g.drawString("第"+step+"步",400,90);step++;g.setColor(Color.BLACK);g.drawString("第"+step+"步",400,90);}public void move(int dir, Graphics g){int man = dir + 5;int dx = dir_x[dir];int dy = dir_y[dir];int x = manX;int y = manY;manX += dx;manY += dy;int origin_picture = map[manX][manY];int next_picture = map[manX + dx][manY + dy];if((map[manX][manY]==4||map[manX][manY]==3)&&(map[manX+dx][manY+dy]==2||map[ manX+dx][manY+dy]==4||map[manX+dx][manY+dy]==3)) //上面是箱子,箱子上面是墙或箱子{manX -= dx;manY -= dy;return ;}if(map[manX][manY]==2) //上面是墙{manX -= dx;manY -= dy;return ;}if(map[manX][manY]==1||map[manX][manY]==9){ //人上面是草地或是目的地g.drawImage(picture[man],100+30*manY,manX*30+100,this); //人的朝向变化if(map[x][y]==9) //原来位置是目的地g.drawImage(picture[9],100+30*y,100+30*x,this);else{ //原来位置是草地g.drawImage(picture[1],100+30*y,x*30+100,this);map[x][y]=1;}Step(g);}if((map[manX][manY]==4||map[manX][manY]==3)&&map[manX+dx][manY+dy]==1){//上面是箱子,箱子上面是草地g.drawImage(picture[man],100+30*manY,manX*30+100,this); //人的朝向变化if(map[manX][manY]==3) //若是移动一大目的地的箱子,原箱子位置值为9map[manX][manY]=9;if(map[x][y]==9) //原来位置是目的地g.drawImage(picture[9],100+30*y,100+30*x,this);else{ //原来位置是草地g.drawImage(picture[1],100+30*y,x*30+100,this);map[x][y]=1;}g.drawImage(picture[4],100+30*(manY+dy),(manX+dx)*30+100,this); //草地位置变箱子map[manX+dx][manY+dy]=4;Step(g);}if((map[manX][manY]==4||map[manX][manY]==3)&&map[manX+dx][manY+dy]==9){ //上面是箱子,箱子上面是目的地g.drawImage(picture[man],100+30*manY,manX*30+100,this); //人的朝向变化if(map[manX][manY]==3) //若是移动一大目的地的箱子,原箱子位置值为9map[manX][manY]=9;else map[manX][manY]=0;if(map[x][y]==9) //原来位置是目的地g.drawImage(picture[9],100+30*y,100+30*x,this);else { //原来位置是草地g.drawImage(picture[1],100+30*y,x*30+100,this);map[x][y]=1;}g.drawImage(picture[3],100+30*(manY+dy),(manX+dx)*30+100,this); //目的地位置变箱子map[manX+dx][manY+dy]=3;Step(g);}back_stack.push(next_picture);back_stack.push(origin_picture);back_stack.push(manY);back_stack.push(manX);back_stack.push(man);if(pass())JOptionPane.showMessageDialog(null, "恭喜你过关了!"); }//键盘事件public void keyPressed(KeyEvent e) {Graphics g=getGraphics();int dir ;switch(e.getKeyCode()){case KeyEvent.VK_UP:dir = Up;move(dir, g);break;case KeyEvent.VK_DOWN :dir = Down;move(dir, g);break;case KeyEvent.VK_LEFT:dir = Left;move(dir, g);break;case KeyEvent.VK_RIGHT:dir = Right;move(dir, g);break;case KeyEvent.VK_BACK_SPACE:back.doClick();break;case KeyEvent.VK_PAGE_DOWN :next.doClick();break;case KeyEvent.VK_PAGE_UP:previous.doClick();break;case KeyEvent.VK_R:restart.doClick();break;case KeyEvent.VK_Q :exit.doClick();break;}}public void keyReleased(KeyEvent e) {}public void keyTyped(KeyEvent e) {}//悔步后退public void step_back(Graphics g){g.setColor(Color.cyan);g.drawString("第"+step+"步",400,90);step--;g.setColor(Color.BLACK);g.drawString("第"+step+"步",400,90);}public void Back(){if(back_stack.size()==2)return;int dir=back_stack.pop() - 5; //获取上一步的方向int s = back_stack.pop();int t = back_stack.pop();int origin_picture = back_stack.pop();int netx_picture = back_stack.pop();int pre_dir = back_stElement();Graphics g=getGraphics();int dx = dir_x[dir];int dy = dir_y[dir];g.drawImage(picture[origin_picture],100+30*t,100+30*s,this);g.drawImage(picture[netx_picture],100+30*(t+dy),100+30*(s+dx),this);g.drawImage(picture[pre_dir],100+30*(t-dy),100+30*(s-dx),this);manX = s - dx;manY = t - dy;map[s][t] = origin_picture;map[s+dx][t+dy] = netx_picture;map[s-dx][t-dy] = pre_dir;step_back(g);}//按钮事件监听public void actionPerformed(ActionEvent e) {if(e.getSource()==restart){ //重新开始back_stack.clear(); //清空路径栈step=0;getmap(map);repaint();}else if(e.getSource()==exit) //退出游戏this.setVisible(false);else if(e.getSource()==next){ //下一关back_stack.clear();step=0;level++;if(level!=14){map_level=new map(level);getmap(map);current_level="第"+level+"关";repaint();}}else if(e.getSource()==previous){ //上一关back_stack.clear();step=0;level--;if(level!=0){map_level=new map(level);getmap(map);current_level="第"+level+"关";repaint();}}else if(e.getSource()==back)Back();requestFocus();}}3、开始界面package box;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Game extends JFrame implements ActionListener{ Image image[];ImageIcon icon;JButton start,tip,exit;Container c;public Game(){super("推箱子");c=getContentPane();FlowLayout layout=new FlowLayout();c.setLayout(layout);layout.setAlignment(FlowLayout.CENTER);icon=new ImageIcon("picture/game.png");image=new Image[]{icon.getImage()};start=new JButton("开始游戏");exit=new JButton("退出游戏");tip=new JButton("游戏说明");c.add(start);c.add(tip);c.add(exit);start.addActionListener(this);tip.addActionListener(this);exit.addActionListener(this);setSize(640,480);setVisible(true);}public void paint(Graphics g){super.paint(g);g.drawImage(image[0],10,65,this);}public static void main(String args[]){Game g=new Game();g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource()==exit)this.setVisible(false);if(e.getSource()==start){this.setVisible(false);pushbox c=new pushbox();}if(e.getSource()==tip){String t="本游戏分为13关,难度逐关递增,可以自己选关";JOptionPane.showMessageDialog(null, t);}}}。

java_推箱子讲解

java_推箱子讲解

总共四个包,因为不能上传图片所以在第2个包中,导入图片(图片可以去网上下载一些)或者高手帮我解决一下。

不用导入图片也能玩!(求大神)下面是整个游戏的代码:1:package com.sj.xzq;class BackUpInfo {private int[][] map;private int manX;private int manY;public BackUpInfo(int[][] map, int manX, int manY) {this.map = map;this.manX = manX;this.manY = manY;}public int[][] getMap() {return map;}public int getManX() {return manX;}public int getManY() {return manY;}}2:package com.sj.xzq;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.Stack;import javax.swing.JOptionPane;import javax.swing.JPanel;public class Game extends JPanel {private LoadMap lm;private int level;private int manX, manY;private int lastImg = 2;private int[][] map; // 地图所对应的二维数组private int[][] backMap; // 地图所对应的二维数组,这个数组用于保存上一步的地图信息private static final int LEN = 30; // 图片的长private static final int WIDTH = 30; // 图片的宽private static final int SPEED = 30; // 移动速度,每次移动一格private static Toolkit tk = Toolkit.getDefaultToolkit();private static Image[] imgs = null;private Stack<BackUpInfo> myStack = new Stack<BackUpInfo>();private BackUpInfo bp;static {imgs = new Image[] {tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/0.gif")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/1.gif")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/2.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/3.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/4.gif")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/5.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/6.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/7.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/8.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/9.GIF")) };}public Game(int level) {this.setBounds(0, 0, 600, 600);this.setVisible(true);lm = new LoadMap(level);map = lm.getMap();this.manX = lm.getManX();this.manY = lm.getManY();this.level = level;}public void paint(Graphics g) {for (int i = 0; i < 20; i++) {for (int j = 0; j < 20; j++) {g.drawImage(imgs[map[i][j]], i * LEN, j * WIDTH, this);}}g.setColor(Color.BLUE);g.setFont(new Font("仿宋", Font.BOLD, 18));g.drawString("关卡:" + level, 50, 50);}// 响应键盘事件,松开键盘才响应// 上下左右四个键,实现人物的移动。

JAVA 推箱子

JAVA    推箱子

基于JAVA的面向对象课程设计--------推箱子小游戏设计第一章绪论1.1JAVA语言的发展史1995年,美国Sun Microsystems公司正式向IT业界推出了java语言,该语言具有安全、跨平台、面向对象、简单、适用于网络等显著特点,当时以web 为主要形式的互联网正在迅猛发展,java语言的出现迅速引起所有程序员和软件公司的极大关注,程序员们纷纷尝试用java语言编写网络应用程序,并利用网络把程序发布到世界各地进行运行。

包括IBM、Oracle、微软、Netscape、Apple、SGI等大公司纷纷与Sun Microsystems公司签订合同,授权使用java 平台技术。

微软公司总裁比尔盖茨先生在经过研究后认为"java语言是长时间以来最卓越的程序设计语言"。

目前,java语言已经成为最流行的网络编程语言,截止到2001年中,全世界大约有310万java程序员,许多大学纷纷开设java 课程,java正逐步成为世界上程序员最多的编程语言。

在经历了以大型机为代表的集中计算模式和以PC机为代表的分散计算模式之后,互联网的出现使得计算模式进入了网络计算时代。

网络计算模式的一个特点是计算机是异构的,即计算机的类型和操作系统是不一样的,例如SUN工作站的硬件是SPARC体系,软件是UNIX中的Solaris操作系统,而PC机的硬件是INTEL体系,操作系统是windows或者是Linux,因此相应的编程语言基本上只是适用于单机系统,例如COBOL、FORTRAN、C、C++等等;网络计算模式的另一个特点是代码可以通过网络在各种计算机上进行迁移,这就迫切需要一种跨平台的编程语言,使得用它编写的程序能够在网络中的各种计算机上能够正常运行,java就是在这种需求下应运而生的。

正是因为java语言符合了互联网时代的发展要求,才使它获得了巨大的成功。

大家想一想,在PC下用windows编写的程序能够不做修改就直接拿到UNIX 系统上运行吗?显然是不可以的,因为程序的执行最终必须转换成为计算机硬件的机器指令来执行,专门为某种计算机硬件和操作系统编写的程序是不能够直接放到另外的计算机硬件上执行的,至少要做移植工作。

java推箱子游戏的课程设计

java推箱子游戏的课程设计

java推箱子游戏的课程设计一、课程目标知识目标:1. 掌握Java基础语法,包括数据类型、运算符、控制结构等;2. 学会使用Java面向对象编程,包括类的定义、对象的创建、封装、继承和多态;3. 了解二维数组的使用,能通过数组实现游戏地图的表示;4. 掌握推箱子游戏的逻辑设计和实现。

技能目标:1. 培养学生的编程思维和逻辑思维能力;2. 提高学生解决实际问题的能力,学会分析问题、设计解决方案;3. 学会使用Java编写简单的图形用户界面程序,实现游戏交互;4. 学会运用调试工具进行程序调试,找出并修复程序中的错误。

情感态度价值观目标:1. 激发学生对编程的兴趣,培养学习计算机科学的热情;2. 培养学生的团队协作精神,学会与他人共同解决问题;3. 培养学生的创新意识和实践能力,鼓励学生尝试不同的解决方案;4. 培养学生面对困难时坚持不懈、勇于挑战的精神。

本课程针对高年级学生,结合学科特点和教学要求,旨在通过推箱子游戏的开发,帮助学生巩固Java编程知识,提高编程技能,培养良好的编程习惯和团队协作能力。

课程目标具体、可衡量,为教学设计和评估提供了明确的指导。

1. Java基础语法复习:数据类型、变量、运算符、控制结构(条件语句、循环语句);2. 面向对象编程:类的定义、构造方法、成员变量、成员方法、封装、继承、多态;3. 二维数组:数组的概念、声明、初始化、遍历、应用场景;4. 图形用户界面(GUI):Swing库简介、窗口、面板、按钮、事件处理;5. 游戏逻辑设计:游戏规则、地图表示、角色移动、箱子推动、胜利条件;6. 程序调试与优化:调试工具使用、常见错误分析、性能优化;7. 项目实践:分组进行推箱子游戏的开发,包括需求分析、设计、编码、测试和调试。

教学内容依据课程目标进行选择和组织,保证科学性和系统性。

教学大纲明确以下安排和进度:- 第一章:Java基础语法复习(1课时)- 第二章:面向对象编程(2课时)- 第三章:二维数组(1课时)- 第四章:图形用户界面(GUI)(2课时)- 第五章:游戏逻辑设计(2课时)- 第六章:程序调试与优化(1课时)- 第七章:项目实践(4课时)教学内容与课本紧密关联,确保学生能够将所学知识应用于实际项目中,提高编程实践能力。

推箱子java课程设计

采用栈的存储方式来存储并控制人物,箱子的移动和地图的变换,悔一步操作让玩家有了反悔的一步,这节省玩家的时间,避免因错位导致重新开始。

4. 设计结果与分析4.1 程序运行结果程序编译无错误,单击运行按钮,运行通过,开始时弹出该游戏的页面,然后开始游戏。

一般的会显示出第一关的游戏,玩家可以根据自己的实际水平去操作,而后选择适于自己水平的关卡来玩。

一开始运行程序,显示该页面时,会在页面的正中央显示出该关为第一关,以提醒玩家。

第一关如下图3所示。

图3. 推箱子游戏第一关界面当玩家想选关时,可以根据自己的意愿去选关闯。

选第50关,如下图4所示。

图4. 推箱子游戏第50关页面4.2 尚需解决的问题游戏的背景音乐比较单一,可以通过在“选项”模式中添加“背景音乐导入”模块,导入玩家自己喜欢的音乐。

在此次课程设计中,我遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。

对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。

对于实际动手能力与系统开发的流程的适应,必须多进行实际的练习与操作,才能有大的进步。

5. 设计体会通过这次课程设计我充分了解了理论与课程设计相结合的重要性,理论基础上必须有实际上的应用,在实际的应用中才能发现个种问题,再灵活的应用理论知。

java语言课程设计推箱子

java语言课程设计推箱子一、教学目标本章节的教学目标旨在让学生掌握Java语言基础,学会使用Java编写简单的推箱子游戏。

具体包括以下三个方面的目标:1.知识目标:使学生了解Java语言的基本语法、数据结构、控制流程和面向对象编程思想。

2.技能目标:培养学生具备使用Java语言编写程序的能力,能够独立完成推箱子游戏的设计与实现。

3.情感态度价值观目标:培养学生对编程的兴趣,提高学生解决问题的能力,培养学生的创新精神和团队合作意识。

二、教学内容本章节的教学内容主要包括以下几个部分:1.Java语言基本语法:变量、数据类型、运算符、控制流程(循环、分支)。

2.数据结构:数组、链表、栈和队列。

3.面向对象编程:类和对象、封装、继承、多态。

4.推箱子游戏设计与实现:游戏规则、地图表示、角色控制、碰撞检测、算法。

三、教学方法为了达到本章节的教学目标,我们将采用以下几种教学方法:1.讲授法:讲解Java语言的基本语法、数据结构和面向对象编程思想。

2.案例分析法:分析推箱子游戏的实现案例,让学生了解游戏设计的思路和方法。

3.实验法:让学生动手编写推箱子游戏代码,提高学生的实际操作能力。

4.讨论法:分组讨论游戏设计中遇到的问题,培养学生的团队合作和解决问题的能力。

四、教学资源为了支持本章节的教学,我们将准备以下教学资源:1.教材:《Java语言程序设计》。

2.参考书:《Java核心技术》、《游戏编程模式》。

3.多媒体资料:PPT课件、推箱子游戏教学视频。

4.实验设备:计算机、网络环境。

5.在线编程平台:LeetCode、牛客网等,供学生练习和提交作业。

五、教学评估本章节的教学评估将采用多元化的评价方式,全面客观地评估学生的学习成果。

评估方式包括:1.平时表现:考察学生在课堂上的参与程度、提问回答、小组讨论等,占总评的20%。

2.作业:布置与推箱子游戏相关的编程作业,检查学生的编程能力和理解程度,占总评的30%。

推箱子--java课程设计

推箱子--java课程设计一、课程目标知识目标:1. 理解并掌握Java基本语法结构,包括变量声明、数据类型、运算符和流程控制语句;2. 学会使用二维数组表示游戏地图,掌握数组的基本操作;3. 掌握面向对象编程的基本概念,包括类与对象、方法定义与调用;4. 理解“推箱子”游戏的逻辑规则,并能用Java语言实现。

技能目标:1. 能够独立设计并编写简单的“推箱子”游戏程序,实现游戏的基本功能;2. 培养学生运用计算机编程解决问题的能力,提高逻辑思维和算法设计能力;3. 学会使用调试工具,能对程序进行调试和优化,提高程序的可读性和效率。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习计算机科学的热情;2. 培养学生良好的编程习惯,注重团队协作,学会分享与交流;3. 培养学生面对挑战的积极态度,敢于尝试,勇于克服困难。

分析课程性质、学生特点和教学要求,本课程目标旨在使学生在掌握Java编程基础知识的基础上,通过设计“推箱子”游戏,提高编程实践能力,培养创新思维和团队协作精神。

课程目标具体、可衡量,便于后续教学设计和评估。

二、教学内容1. Java基本语法- 变量声明与数据类型- 运算符与表达式- 流程控制语句(条件语句、循环语句)2. 二维数组与数组操作- 二维数组的定义与初始化- 数组的基本操作(遍历、赋值、查找)3. 面向对象编程基础- 类与对象- 方法定义与调用- 封装、继承、多态4. “推箱子”游戏逻辑设计- 游戏规则与需求分析- 地图表示与用户交互- 算法设计与实现5. 编程实践- 设计“推箱子”游戏界面- 编写游戏逻辑代码- 调试与优化程序6. 教学进度安排- 第1-2课时:复习Java基本语法- 第3-4课时:学习二维数组与数组操作- 第5-6课时:面向对象编程基础- 第7-8课时:“推箱子”游戏逻辑设计- 第9-10课时:编程实践与调试优化教学内容依据课程目标,结合课本章节,确保科学性和系统性。

java推箱子游戏源代码(含推箱子的判断)

第一个Java 文件:package ziaoA; import import import import j ava•awt•Color;java•awt•ReadiessException; j ava•awt•event•KeyEvent; j ava•awt•event•KeyListener ;import import importimport import j avaz•swing•Imageicon; j avax•swing•JFrame; j avax•swing•JLabel; j avax•swing•JOptionPane; j avax•swing•JPanel; public JPanel〃匸人 JLabel class GameFrame extends JFrame { zhuobu = new JPanel(); worker = null;//箱r JLabelbox = null; //目的地 JLabel goal = null; JLabel[] walls = null; public static final int SPEED = 12; //设s 图片人小 int imgSize = 48; public void setImgSize (int imgSize){ this •imgSize = imgSize; public GameFrame(String title) throws HeadlessException { super {title); //构造方法中调用本类的其它方法 this •initContentPane(); this •addKeyListener (new KeyListener() { //键盘按下爭件 public void keyPressed(KeyEvent e) { //E2.5]使匸人可以移动 int 次Speed = 0, ySpeed = 0; switch (e•getKeyCode()){case KeyEvent• VK LEFT :xSpeed = -SPEED;worker . seticon (new Imageicon {'* image / workerUp • gif'*)); break;case KeyEvent• VK」工GHT :xSpeed = SPEED;worker.seticon(new Imageicon("image/workerUp•gif")); break;case KeyEvent•VK_UP :ySpeed = -SPEED;worker . seticon (new Imageicon (image/workerUp . gif ")); break;case KeyEvent•VK_DOWN :ySpeed = SPEED;worker . seticon (new Imageicon {'* image/workerUp • gif'*)); break;default:return;worker • setBounds (x-zorker • getX () + KSpeed, worker • getY () + ySpeed, worker•getWidth(), worker•getHeight());//[2.7]判断匸人是否撞到墙壁for (int i = 0; i < walls.length; i++) {if (worker•getBounds{).intersects(walls[i].getBounds())) { worker • setBounds (x-zorker • getX () - :龙Speed, worker • getY () - ySpeed, worker•getWidth(), worker•getHeight());//E3.2]使I:人可以推动箱rif (worker•getBounds()•intersects(box•getBounds())){box•setBounds(box•getX() + xSpeed, box•getY () + ySpeed, box•getWidth(), box•getHeight());//[3.3]判断箱r是否撞到墙壁for (int i = 0; i < walls.length; i++) {if (box•getBounds()•intersects(walls[i].getBounds())) {worker•setBounds(worker•getX () - xSpeed, worker•getY () ySpeed, worker•getWidth(), worker•getHeight());box•setBounds(box•getX() - xSpeed, box•getY() - ySpeed, box•getWidth(), box•getHeight());//[3.4]判断是否胜利if (box•getX{)==goal•getX() && box•getY()==goal•getY()){JOptionPane > showMessageDialog(null, ”您贏啦!;public void keyReleased(KeyEvent e) {public void keyTyped(KeyEvent e) { }});*设置内容面板public void initContentPane() {zhuobu •setBackground(Color•red); zhuobu •setLayout (null);//调用父类的厲性和方法super •setcontentPane(zhuobu);public void addComponent (int tag. String imgPath, int x, int y) { Imageicon img = new Imageicon{imgPath); //创建JLabel^把工mage 工oon 通过构造方法传参传入〃把食物放到盘J"里JLabel componet = new JLabel(img);//设置盘f 在桌布上的位置和人小componet.setBounds(z, y, imgSize, imgSize);//把盘r 放到桌布上zhuobu •add(componet);switch (tag) {case 1:box = componet; break;case 2:*把某个图片以组件的力式加入窗体图片路径* @parain* Oparam* @param imgPath * Oparam 、* @param : * fireturn y width height y 宽度 拓度添加完的组件int index = 0;分别设置各个图片位置r(int i = 0; i < 14; i++) {//左边墙walls [index].setBounds(0, izhuobu •add (walls [index]); index++; //右边墙walls [index].setBounds(20 *for * imgSize , imgSize , imgSize );imgSize , i * imgSize , imgSize ,imgSize);zhuobu .add (walls [index]); index+-s-; for (int i = 0; i < 19; i++) {//上边墙walls [index].setBounds((i +1) * imgSize , 0, imgSize ,imgSize);zhuobu .add (walls [index]);index-5-+; //下边墙walls [index]•setBounds((i + 1) imgSize);zhuobu •add (walls [index]);inde:<++; * imgSize, 13 * imgSize, imgSize,goal = componet; break;case 3:worker = componet; break;for (int i = 0; i < walls .length; i++) {//创建没每■个闱墙,他们使用的是同 个图片walls [i] = new JLabel(walllmg);for (int i = 0; i < walls .length; i++) {//创建没每■个鬧墙,他们使用的是同■个图片walls [i] = new JLabel(walllmg);//添加中间障碍耦介解耦for (int i = 0; i < loactions.length; i++) {public void addWall(String Imageicon walllmg = new walls = new JLabel[66 +imgPath, int [][] loactions) {Imageicon(imgPath); loactions•length];walls[index]•setBounds(loactions[i][0]* imgSize, loactions[i][1]* imgSize, imgSize, imgSize);zhuobu.add(walls[index]);inde:<++;第二个Java文件:pubUc class Run {pubUc static void niain(String[] args) {GameFrame gameFramc = new GameFrame("推箱子游戏…”); 〃设置大小gameFrame.seiBoundsdOO. 50. 21 *48 + 5, 14*48 + 25); 〃窗体大小不可变ganieFrame.selRcsizable(false); ganieFrame5ClInigSize(48);ganieFrame.addComponenU3. '*workerUp.png"\ 4{M). 100):ganieFrame.addComponentf U "box,png*\ 160,60): ganieFrame.addComponenU2,"goal.png". 80.520); int[][] wallLocalions ={{4.5}.{5.5b(6.5|,{7.5},{8-5}.{9.51,(10,5}.{6-8}.{7-8}.{&8}・{9.8}.{10,8b{11.5}ganieFrame.addWall("wall.png"\ wallLocations);ganieFrame.setVisibleCtrue);。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于JAVA的面向对象课程设计--------推箱子小游戏设计第一章绪论1.1 JAVA语言的发展史1995年,美国Sun Microsystems公司正式向IT业界推出了java语言,该语言具有安全、跨平台、面向对象、简单、适用于网络等显著特点,当时以web 为主要形式的互联网正在迅猛发展,java语言的出现迅速引起所有程序员和软件公司的极大关注,程序员们纷纷尝试用java语言编写网络应用程序,并利用网络把程序发布到世界各地进行运行。

包括IBM、Oracle、微软、Netscape、Apple、SGI等大公司纷纷与Sun Microsystems公司签订合同,授权使用java 平台技术。

微软公司总裁比尔盖茨先生在经过研究后认为"java语言是长时间以来最卓越的程序设计语言"。

目前,java语言已经成为最流行的网络编程语言,截止到2001年中,全世界大约有310万java程序员,许多大学纷纷开设java 课程,java正逐步成为世界上程序员最多的编程语言。

在经历了以大型机为代表的集中计算模式和以PC机为代表的分散计算模式之后,互联网的出现使得计算模式进入了网络计算时代。

网络计算模式的一个特点是计算机是异构的,即计算机的类型和操作系统是不一样的,例如SUN工作站的硬件是SPARC体系,软件是UNIX中的Solaris操作系统,而PC机的硬件是INTEL体系,操作系统是windows或者是Linux,因此相应的编程语言基本上只是适用于单机系统,例如COBOL、FORTRAN、C、C++等等;网络计算模式的另一个特点是代码可以通过网络在各种计算机上进行迁移,这就迫切需要一种跨平台的编程语言,使得用它编写的程序能够在网络中的各种计算机上能够正常运行,java就是在这种需求下应运而生的。

正是因为java语言符合了互联网时代的发展要求,才使它获得了巨大的成功。

大家想一想,在PC下用windows编写的程序能够不做修改就直接拿到UNIX 系统上运行吗?显然是不可以的,因为程序的执行最终必须转换成为计算机硬件的机器指令来执行,专门为某种计算机硬件和操作系统编写的程序是不能够直接放到另外的计算机硬件上执行的,至少要做移植工作。

要想让程序能够在不同的计算机上能够运行,就要求程序设计语言是能够跨越各种软件和硬件平台的,而java满足了这一需求。

俗话说:"有心栽花花不成,无心插柳柳成荫"。

Sun公司绝没想到本想用于消费电子产品开发的编程语言却率先在网络中得到了广泛应用,但是也可以说是"东方不亮西方亮",正是因为java语言在设计目标上的正确性使得java语言"是金字总会发光的"。

C语言是面向过程的语言,也是使用率非常高的语言;而面向对象的思想引入到编程语言之后,C语言就被改造成为面向对象的C++语言,得到了广泛的应用。

但是C++语言必须兼容C语言,因此C++语言是面向过程和面向对象混合的语言。

java语言产生于C++语言之后,是完全的面向对象的编程语言,充分吸取了C++语言的优点,采用了程序员所熟悉的C和C++语言的许多语法,同时又去掉了C语言中指针、内存申请和释放等影响程序健壮性的部分,可以说java语言是站在C++语言这个"巨人的肩膀上"前进的。

java语言的一个目标是跨平台,因此采用了解释执行而不是编译执行的运行环境,在执行过程中根据所在的不同的硬件平台把程序解释为当前的机器码,实现跨平台运行。

而动态下载程序代码的机制完全是为了适应网络计算的特点,程序可以根据需要把代码实时的从服务器中下载过来执行,在此之前还没有任何一种语言能够支持这一点。

java是印尼的一个小岛,盛产咖啡,而程序员往往喜欢喝咖啡,因此取名为java语言。

看来,目前java这杯咖啡已经飘香在世界各地。

任何事物的产生既有必然的原因也有偶然的因素,java语言的出现也验证了这一点。

1991年,美国Sun Microsystems公司的某个研究小组为了能够在消费电子产品上开发应用程序,积极寻找合适的编程语言。

消费电子产品种类繁多,包括PDA、机顶盒、手机等等,即使是同一类消费电子产品所采用的处理芯片和操作系统也不相同,也存在着跨平台的问题。

当时最流行的编程语言是C和C ++语言,Sun公司的研究人员就考虑是否可以采用C++语言来编写消费电子产品的应用程序,但是研究表明,对于消费电子产品而言C++语言过于复杂和庞大,并不适用,安全性也并不令人满意。

于是,Bill Joy先生领导的研究小组就着手设计和开发出一种语言,称之为Oak。

该语言采用了许多C语言的语法,提高了安全性,并且是面向对象的语言,但是Oak语言在商业上并未获得成功。

时间转到了1995年,互联网在世界上蓬勃发展,Sun公司发现Oak语言所具有的跨平台、面向对象、安全性高等特点非常符合互联网的需要,于是改进了该语言的设计,要达到如下几个目标:◇创建一种面向对象的程序设计语言,而不是面向过程的语言;◇提供一个解释执行的程序运行环境,是程序代码独立于平台;◇吸收C和C++的优点,使程序员容易掌握;◇去掉C和C++中影响程序健壮性的部分,使程序更安全,例如指针、内存申请和释放;◇实现多线程,使得程序能够同时执行多个任务;◇提供动态下载程序代码的机制;◇提供代码校验机制以保证安全性;最终,Sun公司给该语言取名为java语言,造就了一代成功的编程语言。

1.2 为什么要学习JAVA应该认识到,JAVA不仅是一种程序设计语言,更重要的它是一种技术、一种开发环境,所以,学习JAVA就是在学习一门技术。

JAVA也不只是在大学教学计划中要求学习或自己没有事情时随便学习的一门课程,而更多地应认识JAVA与自己的就业需要密切相关。

JAVA语言被美国的著名杂志PC Magazine评为1995年十大优秀科技产品,要知道,在所有的计算机类产品中就此一项入选。

Sun MicroSystem公司的总裁Scott McNealy 认为JAVA为Internet和WWW开辟了一个崭新的时代。

万围网WWW的创始人Berners_Lee说:“计算机事业发展的下一个浪潮就是JAVA,并切将很快会发生的。

”根据2000年度IDC研究报告,当时有300万人在使用C和C++作为自己的主要的编程语言,Visual Basic开发人员有230万,JAVA开发人员则只有120万。

而市场研究公司Evans Data则报告说,使用JAVA的人越来越多,相比之下C 和C++开发人员的数量则在显著减少.第二章开发环境及相关技术的介绍2.1JAVA语言的特点Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。

当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引。

那么Java到底有何神奇之处呢?Java语言其实最早诞生于1991年,起初被称为OAK语言,是SUN 公司为一些消费性电子产品而设计的一个通用环境。

他们最初的目的只是为了开发一种独立于平台的软件技术,而且在网络出现之前,OAK可以说是默默无闻,甚至差点夭折。

但是,网络的出现改变了OAK的命运。

在Java出现以前,Internet上的信息内容都是一些乏味死板的HTML 文档。

这对于那些迷恋于WEB浏览的人们来说简直不可容忍。

他们迫切希望能在WEB中看到一些交互式的内容,开发人员也极希望能够在WEB上创建一类无需考虑软硬件平台就可以执行的应用程序,当然这些程序还要有极大的安全保障。

对于用户的这种要求,传统的编程语言显得无能为力。

SUN的工程师敏锐地察觉到了这一点,从1994年起,他们开始将OAK技术应用于WEB上,并且开发出了HotJava的第一个版本。

当SUN公司1995年正式以Java这个名字推出的时候,几乎所有的WEB开发人员都心生感叹:噢,这正是我想要的!于是Java成了一颗耀眼的明星,丑小鸭一下了变成了白天鹅。

2.2Java的主要特性(1)Java语言是简单的。

Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。

另一方面,Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。

特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。

(2)Java语言是一个面向对象的。

Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。

Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。

总之,Java语言是一个纯的面向对象程序设计语言。

(3)Java语言是分布式的。

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。

Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

(4)Java语言是健壮的。

Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。

对指针的丢弃是Java的明智选择。

Java的安全检查机制使得Java更具健壮性。

(5)Java语言是安全的。

Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。

除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。

(6)Java语言是体系结构中立的。

Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。

这种途径适合于异构的网络环境和软件的分发。

(7)Java语言是可移植的。

这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。

Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。

(8)Java语言是解释型的。

如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。

在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。

相关文档
最新文档