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

📄 greedsnake.java

📁 双人单机贪吃蛇 java课程设计
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import sun.audio.*;
import java.io.*;



public class GreedSnake extends WindowAdapter implements KeyListener,ActionListener{
MenuBar mb1;
Menu mf1,me1,mh1,md1;
Menu my1,my2,my3,my4;
Menu mo1;
CheckboxMenuItem cbmi1;
Dialog d;
JFrame mainFrame;
JPanel centerpanel,northpanel;
Canvas paintCanvas1,paintCanvas2;
//TextArea text;
Label dia;
JLabel labelScore,labelScore2;//计分牌
SnakeModel snakeModel=null;// 蛇
SnakeModel2 snakeModel2=null;// 蛇

public static final int canvasWidth=300;
public static final int canvasHeight=400;
public static final int nodeWidth=10;
public static final int nodeHeight=10;
public GreedSnake()
{
//设置界面元素
mainFrame=new JFrame("GreedSnake");
mainFrame.setBackground(Color.lightGray);
centerpanel=new JPanel();
northpanel=new JPanel();

Container cp=mainFrame.getContentPane();
labelScore=new JLabel("Score:");
labelScore2=new JLabel("Score:");

cp.add(centerpanel,BorderLayout.CENTER);
northpanel.setLayout(new GridLayout(1,2,0,10));
cp.add(northpanel,BorderLayout.NORTH);
northpanel.add(labelScore);
northpanel.add(labelScore2);
paintCanvas1=new Canvas();
paintCanvas2=new Canvas();
paintCanvas1.setBackground(Color.WHITE);
paintCanvas2.setBackground(Color.WHITE);
paintCanvas1.setSize(canvasWidth+1,canvasHeight+1);
paintCanvas1.addKeyListener(this);
paintCanvas2.setSize(canvasWidth+1,canvasHeight+1);
paintCanvas2.addKeyListener(this);
centerpanel.setLayout(new GridLayout(1,2,10,0));
centerpanel.add(paintCanvas1);
centerpanel.add(paintCanvas2);
JPanel panelButtom=new JPanel();
panelButtom.setLayout(new BorderLayout());
JLabel labelHelp;// 帮助信息
labelHelp=new JLabel("PageUp, PageDown 增加(减少)速度;",JLabel.CENTER);
panelButtom.add(labelHelp,BorderLayout.NORTH);
labelHelp=new JLabel("ENTER or R or S 开始;",JLabel.CENTER);
panelButtom.add(labelHelp,BorderLayout.CENTER);
labelHelp=new JLabel("SPACE or P 停止",JLabel.CENTER);
panelButtom.add(labelHelp,BorderLayout.SOUTH);
//cp.add(panelButtom,BorderLayout.SOUTH);
d=new Dialog(mainFrame,"HELP",true);
d.add(panelButtom);
d.setSize(250,250);
d.setLocation(300,300);
d.addWindowListener(this);
showMenu();
mainFrame.addKeyListener(this);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
begin();

}

//添加菜单
public void showMenu()
{
	
		mb1=new MenuBar();
	mainFrame.setMenuBar(mb1);
	
  Font font1=new Font("",Font.ITALIC,14);
  Font font2=new Font("",Font.ITALIC+Font.BOLD,14);
   Font font3=new Font("",Font.ITALIC+Font.BOLD,14);
	mo1=new Menu("选项");
	
	my1=new Menu("背景音乐");
	my1.add(new MenuItem("静音模式"));
	my1.addSeparator();
	my2=new Menu("播放乐曲");
	my3=new Menu("选择速度");
	mo1.setFont(font1);
	//mo1.setForeground(Color.blue);
	my1.setFont(font2);
	//me1.setForeground(Color.blue);
	my3.setFont(font3);
	mb1.add(mo1);
	mb1.add(my1);
  mb1.add(my3);
	my1.add(my2);
	mo1.add(new MenuItem("开始"));
	mo1.addSeparator();
	mo1.add(new MenuItem("暂停"));
	mo1.addSeparator();
	mo1.add(new MenuItem("退出"));
  mo1.addSeparator();
	mo1.add(new MenuItem("帮助"));
	
	

	my2.add(new MenuItem("风雨无阻"));
  
  my3.add(new MenuItem("加速"));
  my3.addSeparator();
  my3.add(new MenuItem("减速"));
  
	mo1.addActionListener(this);
	my1.addActionListener(this);
	my2.addActionListener(this);
	my3.addActionListener(this);
}

boolean flag1,flag2;
public void paly()throws Exception{


 InputStream in1=new FileInputStream("风雨无阻.mid");
 AudioStream as1 = new AudioStream (in1);
if(flag1){
	
	AudioPlayer.player.stop(as1);
	in1.close();
	flag1=false;
	}	
if(flag2)
{
	AudioPlayer.player.start(as1);
	flag2=false;
	}	
}

//添加菜单事件
public void actionPerformed (ActionEvent e)
{try{
	if(e.getActionCommand()=="退出")
	System.exit(0);
	if(e.getActionCommand()=="帮助")
	d.setVisible(true);
	if(e.getActionCommand()=="开始")
	  {
	  	snakeModel.running=false;
snakeModel2.running=false;
begin();
	  	}
	 if(e.getActionCommand()=="暂停")
	 {
	 	snakeModel.changePauseState();
	 	snakeModel2.changePauseState();
	 	} 	
	  	
	 if(e.getActionCommand()=="静音模式")
	 {
	 	flag1=true;
	  paly();
	 	}
	 	if(e.getActionCommand()=="风雨无阻"){
	 		flag2=true;
	 		paly();
	 	}
	 	if(e.getActionCommand()=="加速")
	 	{ if(snakeModel.running)
	 		snakeModel.speedUp();
	 		if(snakeModel2.running)
	 		snakeModel2.speedUp();
	 		}
	 	if(e.getActionCommand()=="减速"){
	 		if(snakeModel.running)
	 		snakeModel.speedDown();
	 		if(snakeModel2.running)
	 		snakeModel2.speedDown();
	 		}
	 	
	 	
	 	}catch(Exception f){}
	}

//添加帮助菜单事件
public void windowClosing(WindowEvent e)
{
	if(e.getSource()==d)
	d.setVisible(false);
	
	else
	System.exit(0);
}
//----------------------------------------------------------------------
//keyPressed():按键检测
//----------------------------------------------------------------------
public void keyPressed(KeyEvent e)
{
int keyCode=e.getKeyCode();
if(snakeModel.running) switch(keyCode)
{
case KeyEvent.VK_UP:
snakeModel.changeDirection(SnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
snakeModel.changeDirection(SnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
snakeModel.changeDirection(SnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
snakeModel.changeDirection(SnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
snakeModel.speedUp();// 加速
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
snakeModel.speedDown();// 减速
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
snakeModel.changePauseState();// 暂停或继续
break;
default:
}
if(snakeModel2.running) switch(keyCode)
{
	case KeyEvent.VK_I:
snakeModel2.changeDirection(SnakeModel2.UP);
break;
case KeyEvent.VK_K:
snakeModel2.changeDirection(SnakeModel2.DOWN);
break;
case KeyEvent.VK_J:
snakeModel2.changeDirection(SnakeModel2.LEFT);
break;
case KeyEvent.VK_L:
snakeModel2.changeDirection(SnakeModel2.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
snakeModel2.speedUp();// 加速
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
snakeModel2.speedDown();// 减速
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
snakeModel2.changePauseState();// 暂停或继续
break;
default:
	}

//重新开始
if(keyCode==KeyEvent.VK_R || keyCode==KeyEvent.VK_S
|| keyCode==KeyEvent.VK_ENTER)
{
snakeModel.running=false;
snakeModel2.running=false;
begin();
}

/*//第2条蛇
if(keyCode==KeyEvent.VK_R || keyCode==KeyEvent.VK_S
|| keyCode==KeyEvent.VK_ENTER)
{
snakeModel2.running=false;*/
//begin();
//}

}

public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
}
//----------------------------------------------------------------------
//repaint():绘制游戏界面(包括蛇和食物)
//----------------------------------------------------------------------
void repaint1()
{
Graphics g=paintCanvas1.getGraphics();

//
Graphics s=paintCanvas2.getGraphics();
//draw background
g.setColor(new Color(159,187,232));
g.fillRect(0,0,canvasWidth,canvasHeight);

//
s.setColor(new Color(159,187,232));
s.fillRect(0,0,canvasWidth,canvasHeight);


//draw the snake
g.setColor(new Color(102,255,255));
LinkedList na=snakeModel.nodeArray;
Iterator it=na.iterator();
while(it.hasNext())
{
Node n=(Node)it.next();
drawNode(g,n);
}

//
s.setColor(new Color(102,255,255));
LinkedList na2=snakeModel2.nodeArray;
Iterator it2=na2.iterator();
while(it2.hasNext())
{
Node n2=(Node)it2.next();
drawNode(s,n2);
}

// draw the food

int x=(int)((Math.random()*10)%10);
switch(x)
{
case 0:
g.setColor(Color.RED);

break;
case 1:
g.setColor(Color.WHITE);

break;
case 2:
g.setColor(Color.GREEN);

break;
case 3:
g.setColor(Color.YELLOW);

break;
case 4:
g.setColor(new Color(255,128,64));

break;
case 5:
g.setColor(new Color(64,0,128));

break;
case 6:
g.setColor(new Color(0,0,255));

break;
case 7:
g.setColor(new Color(0,0,0));

break;
case 8:
g.setColor(new Color(64,128,128));

break;
case 9:
g.setColor(new Color(255,255,255));

break;


}

Node n=snakeModel.food;
drawNode(g,n);
updateScore();

//
int z=(int)((Math.random()*10)%10);
switch(z)
{
case 0:
s.setColor(Color.RED);

break;
case 1:
s.setColor(Color.WHITE);

break;
case 2:
s.setColor(Color.GREEN);

break;
case 3:
s.setColor(Color.YELLOW);

break;
case 4:
s.setColor(new Color(255,128,64));

break;
case 5:
s.setColor(new Color(64,0,128));

break;
case 6:
s.setColor(new Color(0,0,255));

break;
case 7:
s.setColor(new Color(0,0,0));

break;
case 8:
s.setColor(new Color(64,128,128));

break;
case 9:
s.setColor(new Color(255,255,255));

break;


}

Node n2=snakeModel2.food;
drawNode(s,n2);
updateScore();
}


void repaint2()
{

Graphics s=paintCanvas2.getGraphics();
//draw background
//
s.setColor(new Color(159,187,232));
s.fillRect(0,0,canvasWidth,canvasHeight);


//draw the snake

//
s.setColor(new Color(102,255,255));
LinkedList na2=snakeModel2.nodeArray;
Iterator it2=na2.iterator();
while(it2.hasNext())
{
Node n2=(Node)it2.next();
drawNode(s,n2);
}

// draw the food

//
int y=(int)((Math.random()*10)%10);
switch(y)
{
case 0:
s.setColor(Color.RED);

break;
case 1:
s.setColor(Color.WHITE);

break;
case 2:
s.setColor(Color.GREEN);

break;
case 3:
s.setColor(Color.YELLOW);

break;
case 4:
s.setColor(new Color(255,128,64));

break;
case 5:
s.setColor(new Color(64,0,128));

break;
case 6:
s.setColor(new Color(0,0,255));

break;
case 7:
s.setColor(new Color(0,0,0));

break;
case 8:
s.setColor(new Color(64,128,128));

break;
case 9:
s.setColor(new Color(255,255,255));

break;


}

Node n2=snakeModel2.food;
drawNode(s,n2);
updateScore();
}
//----------------------------------------------------------------------
//drawNode():绘画某一结点(蛇身或食物)
//----------------------------------------------------------------------

/*//////////////////////////////////////////////////////////////////////////////////////////////////
private void drawNode(Graphics g,Node n)
{
g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);
}
//////////////////////////////////////////////////////////////////////////////////////////////////*/
private void drawNode(Graphics e,Node d)
{
e.fillRect(d.x*nodeWidth,d.y*nodeHeight,nodeWidth-1,nodeHeight-1);
}


//

//----------------------------------------------------------------------
//updateScore():改变计分牌
//----------------------------------------------------------------------
public void updateScore()
{
String s="Score: "+snakeModel.score;
String s2="Score: "+snakeModel2.score;
labelScore.setText(s);
labelScore2.setText(s2);
}
//----------------------------------------------------------------------
//begin():游戏开始,放置贪吃蛇
//----------------------------------------------------------------------
void begin()
{
if(snakeModel==null||!snakeModel.running)
{
snakeModel=new SnakeModel(this,canvasWidth/nodeWidth,
this.canvasHeight/nodeHeight);
(new Thread(snakeModel)).start();
}
if(snakeModel2==null||!snakeModel2.running)
{
snakeModel2=new SnakeModel2(this,canvasWidth/nodeWidth,
this.canvasHeight/nodeHeight);
(new Thread(snakeModel2)).start();
}
}
//----------------------------------------------------------------------
//main():主函数
//----------------------------------------------------------------------

	public static void main(String args[])
	{
		GreedSnake snake=new GreedSnake();
		}
	}

⌨️ 快捷键说明

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