⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rumor.java

📁 用java语言仿真传感器网络中的谣传算法
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		//generate nodes
		for(i = 0;i<50;i++)
		{
			//SensorNode senserNodes[i] = new SensorNode();//
			sensorNodes[i] = new SensorNode("sensorNode");

			//generate sensor node in the inspect area in random
			sensorNodes[i].iX_position = (int)(380*Math.random() + 400);
			sensorNodes[i].iY_position = (int)(280*Math.random() + 100);
		}
		//link the 51th node to sink
		sensorNodes[50] = sinkNode;

		//reflash neighbor node table
		SensorNet.sinkNode.findNeighborNode(sensorNodes);
	}
	

	
	void FindRoute(SensorNode sensorNodes[],String strInterstThings)
	{
		FindingThread CFromSensorNode = new FindingThread(sensorNodes,"tempiture","fromSensorNode");
		FindingThread CFromSinkNode = new FindingThread(sensorNodes,"tempiture","fromSink"); 

		CFromSensorNode.start();
		CFromSinkNode.start();

	}
	
	void PaintNet(Graphics g)
	{
		int i,j;

		//draw inspect area
		g.drawRect(400,100,380,280);
//		g.drawRect(400-SensorNode.iSize,100-SensorNode.iSize,380+SensorNode.iSize,280+SensorNode.iSize);

		//draw sensor nodes and sink
		for(i = 0;i <= 50;i++)
		{
			g.drawOval(sensorNodes[i].iX_position,sensorNodes[i].iY_position,sensorNodes[i].iSize,sensorNodes[i].iSize);

			if(i==50)
			{
				g.drawString("Sink",sensorNodes[i].iX_position,sensorNodes[i].iY_position);
			}
			else
			{
				g.drawString(Integer.toString(i),sensorNodes[i].iX_position,sensorNodes[i].iY_position);
			}
		}
		
		//draw the sink node,合并到上式
		//g.drawOval(50,50,8,8);

		for(i = 0;i<= 50;i++)
		{
			if(sensorNodes[i].CInterstThings[0].strFromWho.equals("fromSink"))
			{
				g.setColor(new Color(10,25,200));
				g.fillOval(sensorNodes[i].iX_position,sensorNodes[i].iY_position,sensorNodes[i].iSize,sensorNodes[i].iSize);
			}
			if(sensorNodes[i].CInterstThings[0].strFromWho.equals("fromSensorNode"))
			{
				g.setColor(new Color(200,5,0));
				g.fillOval(sensorNodes[i].iX_position,sensorNodes[i].iY_position,sensorNodes[i].iSize,sensorNodes[i].iSize);
			}
		}

	}

	void PaintRoute(Graphics g,SensorNode []sensorNodes)
	{
//		这句是错误的,每进入这个函数bFinish都变成了false
//		造成画图只能画一次,所以每次构造都要考虑全局变量
//		SensorNode CTempNode = new SensorNode("CTempNode");
		SensorNode CTempNode;

		int iNextX_pos = 0;
		int iNextY_pos = 0;
		int iIndex = 50;

		//实际上将指针交给了CTempNode,在循环中破坏了原数据
		//搞的我调试了半天
//		CTempNode = SensorNet.sinkNode;

		CTempNode = SensorNet.sensorNodes[iIndex];
		//avoid for dead circle
		int iCircle = 50;
		
		while((iIndex != 0)&&((iCircle--)>0))	
		{
			if(CTempNode.CInterstThings[0].strFromWho.equals("fromSink"))
			{
				iNextX_pos = SensorNet.sensorNodes[CTempNode.CInterstThings[0].iToNode].iX_position;
				iNextY_pos = SensorNet.sensorNodes[CTempNode.CInterstThings[0].iToNode].iY_position;
				iIndex = CTempNode.CInterstThings[0].iToNode;
//				System.out.println("in SinkPass");
			}
			else if(CTempNode.CInterstThings[0].strFromWho.equals("fromSensorNode"))
			{
				iNextX_pos = SensorNet.sensorNodes[CTempNode.CInterstThings[0].iFromNode].iX_position;
				iNextY_pos = SensorNet.sensorNodes[CTempNode.CInterstThings[0].iFromNode].iY_position;
				iIndex = CTempNode.CInterstThings[0].iFromNode;
//				System.out.println("in SensorNodePass");
			}
			g.setColor(new Color(150,15,0));
			g.drawLine(CTempNode.iX_position, CTempNode.iY_position,iNextX_pos,iNextY_pos);

			//for debug
			/*
			System.out.println("in paintRoute");
			System.out.println(CTempNode.CInterstThings[0].iToNode);
			System.out.println(InterstThing.bFinish);
			*/
			
			CTempNode = SensorNet.sensorNodes[iIndex];
		};

	}

	public void paint(Graphics CGraphics)
	{
		//draw the GUI_interface
		PaintNet(CGraphics);

		//draw ronte map
		if(InterstThing.bFinish)
		{
			PaintRoute(CGraphics,this.sensorNodes);

		}

	}
}


class FindingThread extends Thread
{
	SensorNode [] sensorNodes;
	String strFromWho;
	String strInterstThing = new String("tempitrue");
	
	FindingThread(SensorNode [] sensorNodes, String strInterstThing,String strFromWho)
	{
		this.sensorNodes = sensorNodes;
		this.strFromWho = new String(strFromWho);
		this.strInterstThing = new String(strInterstThing);

		//for debug 
		//System.out.println("in Thraed");
	}
	
	public void run()
	{

		int iTempNodeNum = 0;
		int iFromNode = 0;
		int i = 0;
		
		if(this.strFromWho.equals("fromSensorNode"))
		{
			iTempNodeNum =  0;
			SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].iStep = 0;
			SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].strFromWho = "fromSensorNode";
			SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].iSelfNode = 0;
		}
		else if(this.strFromWho.equals("fromSink"))
		{
			iTempNodeNum = 50;
			SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].iStep = 0;
			SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].strFromWho = "fromSink";	
			SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].iSelfNode= 50;
		}
	
		do
		{
			iFromNode = iTempNodeNum;

			//for debug
			/*
			System.out.println("beforSendMsg----"+iFromNode);
			System.out.println("node-step:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].iStep);
			System.out.println("oldtime:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].ioldTime);	
			System.out.println("toNode:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].iToNode);
			*/
			
			iTempNodeNum = sensorNodes[iFromNode].SendMsg(SensorNet.sensorNodes[iFromNode].CInterstThings[0],iFromNode);
			/*
			System.out.println("beforGotMsg----"+iFromNode);
			System.out.println("node-step:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].iStep);
			System.out.println("oldtime:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].ioldTime);
			System.out.println("toNode:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].iToNode);
			*/

			sensorNodes[iTempNodeNum].GotMsg(SensorNet.sensorNodes[iFromNode].CInterstThings[0],iTempNodeNum);

			/*
			System.out.println("behidGotMsg----"+iFromNode);
			System.out.println("node-step:"+SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].iStep);
			System.out.println("oldtime:"+SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].ioldTime);
			System.out.println("toNode:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].iFromNode);			
			*/
			
			try{Thread.sleep(10);}
			catch(InterruptedException e){System.out.println(e);}
			
		}while((SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].ioldTime!=0)&&(!InterstThing.bFinish));

//		System.out.println(iTempNodeNum);
		System.out.println("finish Thread by:"+InterstThing.bFinish);

		stop();

	}
}
/*
public class rumor extends Frame implements ActionListener
{
	
	rumor()
	{
		super.setTitle("Rumor Route");
		super.setSize(900,600);
		super.setResizable(true);		


		
	}
	
	public static void main(String [] args)
	{
	
		rumor CMainFrame = new rumor();

		SensorNet CSensorNet = new SensorNet();
		Button CButtonReflash = new Button("Reflash");

		//add eliment		
		CMainFrame.add(CSensorNet,BorderLayout.CENTER);
		CMainFrame.add(CButtonReflash,BorderLayout.SOUTH);
		
		CButtonReflash.addActionListener(CMainFrame);
		CMainFrame.addWindowListener(new WindowEventHandler());


		CMainFrame.pack();
		CMainFrame.setVisible(true);			
	}

	public void actionPerformed(ActionEvent e)
	{
		this.repaint();
	}
}
*/

public class rumor extends WindowAdapter implements ActionListener
{
	Frame CMainFrame;
	SensorNet CSensorNet;
	Button CButtonReflash;
	Button CButtonRestart;
	
	rumor()
	{
		Frame CMainFrame = new Frame("Rumor Routing");
		CSensorNet = new SensorNet();
		CButtonReflash = new Button("Reflash");
		CButtonRestart = new Button("Restart");
		CMainFrame.setLayout(new FlowLayout());
		
		CMainFrame.setTitle("Rumor Route");
		CMainFrame.setSize(900,600);
		CMainFrame.setResizable(true);	

		//add eliment		
		CMainFrame.add(CSensorNet);//,BorderLayout.CENTER);
		CMainFrame.add(CButtonReflash);//,BorderLayout.SOUTH);
		CMainFrame.add(CButtonRestart);//,BorderLayout.SOUTH);
		
		CButtonReflash.addActionListener(this);
		CButtonRestart.addActionListener(this);		
		CMainFrame.addWindowListener(this);

		CMainFrame.pack();
		CMainFrame.setVisible(true);	
		
	}
	
	public static void main(String [] args)
	{
	
		new rumor();
	}


	public void actionPerformed(ActionEvent e)
	{
		String strEventButton = "";
		strEventButton = ((Button)e.getSource()).getLabel();
		if(strEventButton.equals("Reflash"))
		{
			this.CSensorNet.repaint();
		}
		else if(strEventButton.equals("Restart"))
		{
			new SensorNet();
		}
	}

	public void windowClosing(WindowEvent e)
	{
		System.exit(0);
	}	

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -