大鱼吃小鱼游戏代码 基于java-swing

上周是数据库课程设计周,学校为了让我们做出一个真正能用(能看见框体)的东西,同时为毕业设计做准备,找来了培训机构的老师,讲解了两天java-swing图形界面的东西


虽然swing算是过时了的东西,但学起来还是挺开心的,毕竟终于能自己用图形界面写出东西来了.不过代码思路主要还是老师提供的,





逻辑功能实现图

大鱼吃小鱼游戏代码 基于java-swing_第1张图片

这是最后给同学更改了部分参数贴上图片后的效果

大鱼吃小鱼游戏代码 基于java-swing_第2张图片


游戏是简化过的:

jframe加上jpanel实现窗体

玩家控制的鱼是通过监听鼠标坐标更改位置的

其他鱼的行动方向只有四种,左上,左下,右上,右下,遇到边缘则朝相反的方向反弹

通过多线程重复打印画布jpanel实现动态的画面

所有鱼实际上都是一个球体,覆盖了一张图片,然后剩下的就是计算几何的判断了(遇到边缘,两球相碰)





整个代码就只有4个类:



Ball_JF设置窗体的基本属性

import javax.swing.JFrame;
public class Ball_JF extends JFrame {
	public Ball_JF(){
		this.setTitle("逻辑功能图");       
		this.setBounds(100,100,800,600);        //窗体大小
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //关闭窗体停止运行
		Ball_JP jp=new Ball_JP();
		jp.run_run();       //开始运行多线程
		this.add(jp);       //画布添加到窗体
		
		this.setVisible(true);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Ball_JF();

	}

}





Ball_JP

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.List;
import java.util.ArrayList;
import javax.swing.JPanel;

public class Ball_JP extends JPanel implements MouseMotionListener{      //实现监听鼠标的接口
	List balls =new ArrayList();         //存放所有的鱼
	public Ball_JP(){
		addMouseMotionListener(this);         //添加监听
		for(int i=0;i<50;i++)
			add_ball();
	}
	
	void add_ball(){                      //随机数产生鱼的初始坐标,大小,方向,颜色等
		int x=(int) (Math.random()*700);
		int y=(int) (Math.random()*500);
		int dir=(int) (Math.random()*4);
		int d=(int) (Math.random()*30);
		int r=(int) (Math.random()*255);
		int g=(int) (Math.random()*255);
		int b=(int) (Math.random()*255);
		int sp=(int) (Math.random()*1+1);
		Color col=new Color(r,g,b);
		balls.add(new Ball(x,y,dir,d,sp,col));
	}
	public void paint(Graphics g) {
		
		super.paint(g);
		setBackground(Color.white);                 //隐含this 设置画布的背景颜色
		for(int i=0;i=b2.d){
									b1.d+=b2.d/4;
									balls.remove(j);
									break;
								}
								else if(b1.d




Ball 将鱼的各种属性保存至一个类

import java.awt.Color;
import java.awt.Graphics;


public class Ball {
	int x,y,dir,d;
	int speed;
	Color col;
	static final int left_up=0,right_up=1,left_down=2,right_down=3;
	public  Ball(int x,int y,int dir,int d,int speed,Color col){
		super();
		this.x=x;
		this.y=y;
		this.dir=dir;
		this.d=d;
		this.speed=speed;
		this.col=col;
	}
	void Draw(Graphics g){           //画出这个小球
		g.setColor(col);
		g.fillOval(x, y, d, d);
	}
	void move(){                      //小球运动
		switch (this.dir) {
		case left_up:
			x-=speed;y-=speed;
			if(x<=0)dir=right_up;
			else if(y<=0)dir=left_down;
			break;
		case right_up:
			x+=speed;y-=speed;
			if(x>=800-d)dir=left_up;
			else if(y<=0)dir=right_down;
			break;
		case left_down:
			x-=speed;y+=speed;
			if(x<=0)dir=right_down;
			else if(y>=600-d)dir=left_up;
			break;
		case right_down:
			x+=speed;y+=speed;
			if(x>=800-d)dir=left_down;
			else if(y>=600-d)dir=right_up;
			break;
		
		}
	}
}




BallandBall将所有判断两条鱼相关的函数合并在一起单独抽象为一个类

public class BallandBall {
	static final int left_up=0,right_up=1,left_down=2,right_down=3;
	public void collision(Ball a,Ball b){               //两球相碰反弹  并没有调用它
		int x1=a.x+a.d/2;
		int y1=a.y+a.d/2;
		int x2=b.x+b.d/2;
		int y2=b.y+b.d/2;
		
		double dis= Math.sqrt( (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
		if(dis<=a.d/2+b.d/2){
			switch (a.dir) {
			case left_up:
				a.dir=right_down;
				break;
			case left_down:
				a.dir=right_up;
				break;
			case right_up:
				a.dir=left_down;
				break;
			case right_down:
				a.dir=left_up;
				break;
			}
			
			switch (b.dir) {
			case left_up:
				b.dir=right_down;
				break;
			case left_down:
				b.dir=right_up;
				break;
			case right_up:
				b.dir=left_down;
				break;
			case right_down:
				b.dir=left_up;
				break;
			}
		}
	}
	public int balldestroy(Ball a,Ball b){         //判断两球是否相碰
		int ret=0;
		int x1=a.x+a.d/2;
		int y1=a.y+a.d/2;
		int x2=b.x+b.d/2;
		int y2=b.y+b.d/2;
		double dis= Math.sqrt( (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
		if(dis<=a.d/2+b.d/2)ret=1;
		return ret;
	}
}


你可能感兴趣的:(游戏相关)