学习了半个学期的JAVA实训总要做点什么,就写了个小游戏,在这里跟大家分享一下。希望大家多多指点一下小弟。
在这里也感谢CSDN的朋友们的帮忙。
- Java code
package dandan;import java.util.*;import javax.swing.JOptionPane;public class dandanModel extends Observable implements Runnable{ private int i=0; private int i2=100; private Node nodeArray;//i是用来计数炸弹共落下去了多少次,然后用它来判断是否要落下炸弹。i2是用来控制sleep()了多少//秒的,通过它可以改变关数。nodeArray是QQ头像的标记体。 private Node nodeFood; private Node nodeFood1; private Node nodeFood2; private Node nodeplane1; private Node nodeplane2; private Node nodeplane3; //nodeFood是用来表示炸弹nodeplane1是用来表示飞机 private boolean running=true; //标记是在运行当中 public dandanModel() { reset(); }//构造函数 public void reset()//定义了炸弹,飞机和QQ头像的初始位置 { nodeArray=new Node(300,200); nodeFood=new Node(15,300);nodeFood1=new Node(300,15); nodeFood2=new Node(440,15); nodeplane1=new Node(10,300); nodeplane2=new Node(300,10); nodeplane3=new Node(440,10); } public void changeDirection(int maX,int maY) { nodeArray=new Node(maX,maY); }//创建新的QQ头像位置 public Node getCreat()//通过这个函数来让外部调用炸弹 { return nodeFood; } public Node getCreat1() { return nodeFood1;} public Node getCreat2() { return nodeFood2;} public Node getplane1() { return nodeplane1; } public Node getplane2() { return nodeplane2; } public Node getplane3() { return nodeplane3; } public boolean moveOn()//这个函数是用来判断是否QQ被炸,进入下一关 { moveFood();//通过判断坐标范围来判断QQ头像是否被子炸 boolean b1=((nodeArray.x<=nodeFood.x&&nodeFood.x<=nodeArray.x+20)||(nodeArray.x<=nodeFood.x+10&&nodeFood.x+10<=nodeArray.x+20)); boolean b2=((nodeArray.y<=nodeFood.y&&nodeFood.y<=nodeArray.y+20)||(nodeArray.y<=nodeFood.y+10&&nodeFood.y+10<=nodeArray.y+20)); boolean b3=((nodeArray.x<=nodeFood1.x&&nodeFood1.x<=nodeArray.x+20)||(nodeArray.x<=nodeFood1.x+10&&nodeFood1.x+10<=nodeArray.x+20)); boolean b4=((nodeArray.y<=nodeFood1.y&&nodeFood1.y<=nodeArray.y+20)||(nodeArray.y<=nodeFood1.y+10&&nodeFood1.y+10<=nodeArray.y+20)); boolean b5=((nodeArray.x<=nodeFood2.x&&nodeFood2.x<=nodeArray.x+20)||(nodeArray.x<=nodeFood2.x+10&&nodeFood2.x+10<=nodeArray.x+20)); boolean b6=((nodeArray.y<=nodeFood2.y&&nodeFood2.y<=nodeArray.y+20)||(nodeArray.y<=nodeFood2.y+10&&nodeFood2.y+10<=nodeArray.y+20)); if(b1==true&&b2==true) { new zhadanMusic(); JOptionPane.showMessageDialog(null,"continue the game?","Game over",JOptionPane.INFORMATION_MESSAGE); return false;} if(b3==true&&b4==true) { new zhadanMusic(); JOptionPane.showMessageDialog(null,"continue the game?","Game over",JOptionPane.INFORMATION_MESSAGE); return false;} if(b5==true&&b6==true) { new zhadanMusic(); JOptionPane.showMessageDialog(null,"continue thegame?","Gameover",JOptionPane.INFORMATION_MESSAGE); return false; } return true; }//这个函数是用来改变飞机,炸弹的坐标位置 private void moveFood( ) { if(i2==0) {JOptionPane.showMessageDialog(null,"已经通关","恭喜",JOptionPane.INFORMATION_MESSAGE); i2=100; } if(i%150==0&&i>1) {JOptionPane.showMessageDialog(null,"进入下一关?","恭喜",JOptionPane.INFORMATION_MESSAGE); i2-=20; } try {Thread.sleep(i2);}catch(Exception e) {} if(i%30==0) nodeFood1.x+=40; if(nodeFood1.x>=440) nodeFood1.x=15; nodeplane2.x=nodeFood1.x; nodeFood1.y+=20; if(nodeFood1.y>=430) nodeFood1.y=15; if(nodeFood2.x<=10) nodeFood2.x=440; nodeFood2.x-=20; nodeplane3.x=nodeFood2.x; nodeFood2.y+=20; if(nodeFood2.y>=440) nodeFood2.y=15; if(i%30==0) nodeFood2.y+=40; if(i%20==0) { nodeFood1.y+=40; nodeplane1.y+=20; nodeFood.y+=20;} if(nodeFood.y>=430) nodeFood.y=10; nodeFood.x+=10; nodeplane1.y=nodeFood.y; if(nodeFood.x>=430) nodeFood.x=15; ++i; }//函数来实现与view的通信,以便即时更新数据 public void run() { while(running) { try{ Thread.sleep(100);}catch(Exception e){ break;} if(moveOn()){ setChanged(); notifyObservers(); } } } public Node getNodeArray() { return this.nodeArray; } }//返回Node类型物体的坐标位置class Node{ int x;int y; Node(int x,int y) { this.x=x; this.y=y; }}