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

📄 mbac.java

📁 一个贪吃蛇游戏
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
		(
			new MouseAdapter()
			{
				public void mouseClicked(MouseEvent event)
				{
					strings = mbacAdapter.getRankings(true);
					picturePanel[7].setPicture("img\\normalon.jpg");
					picturePanel[8].setPicture("img\\survivaloff.jpg");
					
					for (int i = 0;i < 10;i ++)
					{
						textPanel[i].setText(strings[i]);
					}
				}
			}
		);
		
		picturePanel[8] = new PicturePanel(100,64,"img\\survivaloff.jpg");
		box[9].add(picturePanel[8]);
		
		picturePanel[8].addMouseListener
		(
			new MouseAdapter()
			{
				public void mouseClicked(MouseEvent event)
				{
					strings = mbacAdapter.getRankings(false);
					picturePanel[7].setPicture("img\\normaloff.jpg");
					picturePanel[8].setPicture("img\\survivalon.jpg");
					
					for (int i = 0;i < 10;i ++)
					{
						textPanel[i].setText(strings[i]);
					}
				}
			}
		);
		
		blankPanel[9] = new BlankPanel(100,375);
		box[9].add(blankPanel[9]);
		box[8].add(box[9]);
		box[10] = Box.createVerticalBox();
		
		for (int i = 0;i < 10;i ++)
		{
			textPanel[i] = new TextPanel(400,40,20,strings[i]);
			textPanel[i].setColor(new Color(255 - 28 * i,255 - 28 * i,255));
			box[10].add(textPanel[i]);
		}
		
		box[11] = Box.createHorizontalBox();
		blankPanel[10] = new BlankPanel(297,103);
		box[11].add(blankPanel[10]);
		picturePanel[9] = new PicturePanel(103,103,"img\\resetoff.jpg");
		box[11].add(picturePanel[9]);
		
		picturePanel[9].addMouseListener
		(
			new MouseAdapter()
			{
				public void mouseEntered(MouseEvent event)
				{
					picturePanel[9].setPicture("img\\reseton.jpg");
				}
				
				public void mouseExited(MouseEvent event)
				{
					picturePanel[9].setPicture("img\\resetoff.jpg");
				}
				
				public void mouseClicked(MouseEvent event)
				{
					picturePanel[7].setPicture("img\\normalon.jpg");
					picturePanel[8].setPicture("img\\survivaloff.jpg");
					mbacAdapter.reset();
					strings = mbacAdapter.getRankings(true);
					
					for (int i = 0;i < 10;i ++)
					{
						textPanel[i].setText(strings[i]);
					}
				}
			}
		);
		
		box[10].add(box[11]);
		box[8].add(box[10]);
		box[7].add(box[8]);
		box[0].add(box[7]);
		container.add(box[0],BorderLayout.NORTH);
	}
	
	//display the system menu
	private void system()
	{
		container.removeAll();
		box = new Box[8];
		blankPanel = new BlankPanel[9];
		picturePanel = new PicturePanel[8];
		pictureTextPanel = new PictureTextPanel[5];
		mainMenu();
		box[7] = Box.createVerticalBox();
		picturePanel[6] = new PicturePanel(500,64,"img\\systemlogo.jpg");
		box[7].add(picturePanel[6]);
		picturePanel[7] = new PicturePanel(500,503,"img\\system.jpg");
		box[7].add(picturePanel[7]);
		box[0].add(box[7]);
		container.add(box[0],BorderLayout.NORTH);
	}
	
	//choose a map to start a normal mode game
	private void chooseMap()
	{
		container.removeAll();
		container.setLayout(new BorderLayout(0,0));
		box = new Box[3];
		button = new JButton[2];
		blankPanel = new BlankPanel[2];
		picturePanel = new PicturePanel[1];
		textPanel = new TextPanel[1];
		box[0] = Box.createHorizontalBox();
		picturePanel[0] = new PicturePanel(400,567,"img\\side.jpg");
		box[0].add(picturePanel[0]);
		box[1] = Box.createVerticalBox();
		blankPanel[0] = new BlankPanel(400,100);
		box[1].add(blankPanel[0]);
		combo = new JComboBox(mbacAdapter.getList());
		combo.setBackground(Color.black);
		combo.setFont(new Font("Monospaced",Font.BOLD,16));
		combo.setForeground(Color.white);
		combo.setMaximumRowCount(4);
		box[1].add(combo);
		textPanel[0] = new TextPanel(400,100,32,"");
		box[1].add(textPanel[0]);
		box[2] = Box.createHorizontalBox();
		button[0] = new JButton("  OK  ");
		button[0].setBackground(Color.black);
		button[0].setFont(new Font("Monospaced",Font.BOLD,32));
		button[0].setForeground(Color.white);
		box[2].add(button[0]);
		
		button[0].addActionListener
		(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent event)
				{
					if (combo.getSelectedItem() == null)
					{
						textPanel[0].setText("Map not existed!");
					}
					else
					{
						normal = true;
						period = 300;
						score = 0;
						mbacAdapter.loadMap(false,(String)combo.getSelectedItem());
						snakeAdapter = new SnakeAdapter();
						AudioPlayer.player.stop(as);
						music.cancel();
						music = new java.util.Timer();
						
						music.schedule(new TimerTask()
						{
							public void run()
							{
								try
								{
									is = new FileInputStream("bgm\\normal.wav");
									as = new AudioStream(is);
									AudioPlayer.player.start(as);
								}
								catch(Exception e)
								{
									e.printStackTrace();
								}
							}
						},500,504500);
						
						game();
						setContentPane(container);
					}
				}
			}
		);
		
		button[1] = new JButton("RETURN");
		button[1].setBackground(Color.black);
		button[1].setFont(new Font("Monospaced",Font.BOLD,32));
		button[1].setForeground(Color.white);
		box[2].add(button[1]);
		
		button[1].addActionListener
		(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent event)
				{
					menu();
					setContentPane(container);
				}
			}
		);
		
		box[1].add(box[2]);
		blankPanel[1] = new BlankPanel(400,100);
		box[1].add(blankPanel[1]);
		box[0].add(box[1]);
		container.add(box[0],BorderLayout.NORTH);
	}
	
	//display the stage number
	private void stage()
	{
		container.removeAll();
		container.setLayout(new BorderLayout(0,0));
		stage ++;
		box = new Box[2];
		blankPanel = new BlankPanel[4];
		picturePanel = new PicturePanel[2];
		textPanel = new TextPanel[1];
		box[0] = Box.createVerticalBox();
		blankPanel[0] = new BlankPanel(800,205);
		box[0].add(blankPanel[0]);
		box[1] = Box.createHorizontalBox();
		blankPanel[1] = new BlankPanel(32,156);
		box[1].add(blankPanel[1]);
		picturePanel[0] = new PicturePanel(112,156,"img\\stage1.jpg");
		box[1].add(picturePanel[0]);
		string = "  STAGE    ";
		
		for (int i = 4;i > new Integer(stage).toString().length();i --)
		{
			string += " ";
		}
		
		string += stage;
		textPanel[0] = new TextPanel(512,156,52,string);
		box[1].add(textPanel[0]);
		
		textPanel[0].addMouseListener
		(
			new MouseAdapter()
			{
				public void mouseClicked(MouseEvent event)
				{
					period = (stage > 40)?25:(525 - 25 * (stage + 1) / 2);
					mbacAdapter.loadMap(true,survival_maps[(stage - 1) % 22]);
					game();
					setContentPane(container);
				}
			}
		);
		
		picturePanel[1] = new PicturePanel(112,156,"img\\stage2.jpg");
		box[1].add(picturePanel[1]);
		blankPanel[2] = new BlankPanel(32,156);
		box[1].add(blankPanel[2]);
		box[0].add(box[1]);
		blankPanel[3] = new BlankPanel(800,205);
		box[0].add(blankPanel[3]);
		container.add(box[0],BorderLayout.NORTH);
	}
	
	//play game
	private void game()
	{
		container.removeAll();
		layout = new GridBagLayout();
		constraints = new GridBagConstraints();
		container.setLayout(layout);
		leg = true;
		turn = true;
		foods = mbacAdapter.getMapFood();
		infos = mbacAdapter.getMapInfo();
		picturePanel = new PicturePanel[6];
		textPanel = new TextPanel[3];
		mapPanel = new MapPanel[15][15];
		
		for (int i = 0;i < 15;i ++)
		{
			for (int j = 0;j < 15;j ++)
			{
				if (infos[i][j] > 0 && infos[i][j] < 9)
				{
					snakeAdapter.newStage((infos[i][j] + 1) / 2,100 * i + j);
				}
				
				if (!normal && infos[i][j] > 10 && infos[i][j] < 14)
				{
					mapPanel[i][j] = new MapPanel(10);
				}
				else
				{
					mapPanel[i][j] = new MapPanel(infos[i][j]);
				}
				
				addComponent(mapPanel[i][j],i,j,1,1);
			}
		}
		
		textPanel[0] = new TextPanel(200,96,32,"   LIFE");
		addComponent(textPanel[0],20,0,9,3);
		
		for (int i = 0;i < 3;i ++)
		{
			picturePanel[i] = new PicturePanel(64,64,"img\\life0.jpg");
			addComponent(picturePanel[i],20 + 3 * i,3,3,3);
		}
		
		for (int i = 3;i < 6;i ++)
		{
			picturePanel[i] = new PicturePanel(64,64,"img\\life0.jpg");
			addComponent(picturePanel[i],11 + 3 * i,6,3,3);
		}
		
		for (int i = 0;i < snakeAdapter.getLife();i ++)
		{
			picturePanel[i].setPicture("img\\life1.jpg");
		}
		
		textPanel[1] = new TextPanel(200,64,32,"    SCORE");
		addComponent(textPanel[1],20,9,9,3);
		textPanel[2] = new TextPanel(200,64,32,"        0");
		addComponent(textPanel[2],20,12,9,3);
		
		if (!normal)
		{
			string = "";
			
			for (int i = 9;i > Integer.toString(score).length();i --)
			{
				string += " ";
			}
			
			string += score;
			textPanel[2].setText(string);
		}
		
		x = snakeAdapter.getPosition() / 100;
		y = snakeAdapter.getPosition() % 100;
		direction = snakeAdapter.getDirection();
		leg();
		time();
		
		addKeyListener
		(
			new KeyAdapter()
			{
				public void keyPressed(KeyEvent event)
				{
					if (turn)
					{
						if (event.getKeyCode() == KeyEvent.VK_UP)
						{
							if (direction != 2)
							{
								direction = 1;
								turn = false;
							}
						}
						else
						{
							if (event.getKeyCode() == KeyEvent.VK_DOWN)
							{
								if (direction != 1)
								{
									direction = 2;
									turn = false;
								}
							}
							else
							{
								if (event.getKeyCode() == KeyEvent.VK_LEFT)
								{
									if (direction != 4)
									{
										direction = 3;
										turn = false;
									}
								}
								else
								{
									if (event.getKeyCode() == KeyEvent.VK_RIGHT)
									{
										if (direction != 3)
										{
											direction = 4;
											turn = false;
										}
									}
								}
							}
						}
					}
				}
			}
		);
	}
	
	//continue the game if the snake has another life
	private void reborn()
	{
		if (snakeAdapter.getLife() == 1)
		{
			AudioPlayer.player.stop(as);
			music.cancel();
			music = new java.util.Timer();
			
			music.schedule(new TimerTask()
			{
				public void run()
				{
					try
					{
						is = new FileInputStream("bgm\\over.wav");
						as = new AudioStream(is);
						AudioPlayer.player.start(as);
					}
					catch(Exception e)
					{
						e.printStackTrace();
					}
				}
			},500);
			
			gameOver();
			setContentPane(container);
		}
		else
		{
			leg = true;
			
			if (normal)
			{
				period = 300;
			}
			
			points = snakeAdapter.clear();
			
			for (int i = 0;i < points.length;i ++)
			{
				mapPanel[points[i] / 100][points[i] % 100].setType(0);
			}
			
			snakeAdapter.reborn();
			picturePanel[snakeAdapter.getLife()].setPicture("img\\life0.jpg");
			x = snakeAdapter.getPosition() / 100;
			y = snakeAdapter.getPosition() % 100;
			direction = snakeAdapter.getDirection();
			leg();
			time();
		}
	}
	
	//decide which leg is in the front
	private void leg()
	{
		if (leg)
		{
			leg = false;
			mapPanel[x][y].setType(2 * direction - 1);
		}
		else
		{
			leg = true;
			mapPanel[x][y].setType(2 * direction);
		}
	}
	
	//change shape after eating a kind of food
	private void eatFood()
	{
		if (mapPanel[x][y].getType() == 0)
		{
			tail = snakeAdapter.cutTail();
			mapPanel[tail / 100][tail % 100].setType(0);
			snakeAdapter.addHead(100 * x + y);
			leg();
		}
		else
		{
			if (mapPanel[x][y].getType() == 9 || mapPanel[x][y].getType() > 13)
			{
				timer.cancel();
				tail = snakeAdapter.cutTail();
				mapPanel[tail / 100][tail % 100].setType(0);
				reborn();
			}
			else
			{
				if (mapPanel[x][y].getType() == 10)
				{
					snakeAdapter.increase();
					snakeAdapter.addHead(100 * x + y);
					leg();
					createFood(10);
					current = 1100 - period + 25 * snakeAdapter.getLength();
					score += current;
					string = "";
					
					for (int i = 9;i > Integer.toString(score).length();i --)
					{
						string += " ";
					}
					
					string += score;
					textPanel[2].setText(string);
					
					if (score % 40000 >= 0 && score % 40000 < current && snakeAdapter.getLife() < 6)
					{
						snakeAdapter.neos();
						picturePanel[snakeAdapter.getLife() - 1].setPicture("img\\life1.jpg");
						
						if (normal && max > min)
						{
							max -= 50;
							
							if (period == max + 50)
							{
								timer.cancel();
								time();
							}
						}
					}
					
					if (!normal && snakeAdapter.getLength() == 22)
					{
						timer.cancel();
						stage();
						setContentPane(container);
					}
				}
				else
				{
					if (mapPanel[x][y].getType() == 11)
					{
						tail = snakeAdapter.cutTail();
						mapPanel[tail / 100][tail % 100].setType(0);
						createFood(11);
						current = 1600 - period + 25 * snakeAdapter.getLength();
						score += current;
						string = "";
						
						for (int i = 9;i > Integer.toString(score).length();i --)
						{
							string += " ";
						}
						
						string += score;
						textPanel[2].setText(string);
						
						if (snakeAdapter.getLength() == 1)
						{
							timer.cancel();
							mapPanel[x][y].setType(0);
							reborn();
						}
						else
						{
							snakeAdapter.decrease();
							tail = snakeAdapter.cutTail();
							mapPanel[tail / 100][tail % 100].setType(0);
							snakeAdapter.addHead(100 * x + y);
							leg();
							
							if (score % 40000 >= 0 && score % 40000 < current && snakeAdapter.getLife() < 6)
							{
								snakeAdapter.neos();
								picturePanel[snakeAdapter.getLife() - 1].setPicture("img\\life1.jpg");
								
								if (max > min)
								{
									max -= 50;
									
									if (period == max + 50)
									{
										timer.cancel();
										time();
									}
								}
							}
						}
					}
					else
					{
						if (mapPanel[x][y].getType() == 12)
						{
							tail = snakeAdapter.cutTail();
							mapPanel[tail / 100][tail % 100].setType(0);
							snakeAdapter.addHead(100 * x + y);
							leg();
							createFood(12);
							
							if (period > min)
							{
								timer.cancel();
								period -= 25;
								time();

⌨️ 快捷键说明

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