あなたと書かれたスネークゲームソースのJavaコードシェア

@java書き込みゲーム高度なロード-蛇
(疑問がある場合は、ご相談:)
、写真で事前に準備する必要があるの2を()もダウンロードすることができ、後に提供され、そしてBGM、Baiduのネットワークディスク( )以下;およびリソースリンクhttps://download.csdn.net/download/DAurora/12125561
抽出リンクします。https://pan.baidu.com/s/1EvaTm49Iid9GCUIqodZ62g
抽出コード:hk0d
#2つのクラスの作成:
コードは以下の通りであります:
クラス:
/ **
* @param argsを
* /
パブリック静的無効メイン(文字列[] args)を{
JFrameのJFrameの新しい新しいフレーム=();
frame.setBounds(10,10,900,720);
(falseに)frame.setResizable;
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.add(新しい新しいMMpanel());
frame.setVisible(真の);
}(クラスのメインメソッド:)

类二:
インポート持つjava.awt。*;
輸入java.awt.event.ActionEvent;
輸入java.awt.event.ActionListener。
輸入java.awt.event.KeyEventの;
輸入java.awt.event.KeyListenerの;
インポートにjava.io.IOException;
輸入java.io.InputStreamを。
輸入java.util.Randomの。

輸入持つjavax.imageio。;
インポートするjavax.swing。
;
インポートはjavax.sound.sampledの*。

パブリッククラスMMpanelはJPanelの器具のKeyListener、のActionListener {延び
イメージアイコンのTITLE1と、
イメージアイコン食品;
ImageIconの本体と、
ImageIconのアップ;
ImageIconのダウン;
イメージアイコンは左;
イメージアイコンの右;

int len=3;
int score=0;
int[] snakex=new int[750];
int[] snakey=new int[750];
int foodx,foody;
Random rand=new Random();
//背景音乐
Clip bgm;
String fx="R";//方向:U,D,R,L
boolean isStarted=false;
boolean isFailed=false;
Timer timer=new Timer(150, this);

public MMpanel(){
	loadImages();
	loadBGM();
	initSnake();
	this.setFocusable(true);
	this.addKeyListener(this);
	timer.start();
}
public void paintComponent(Graphics g){
	super.paintComponent(g);
	this.setBackground(Color.WHITE);
	title1.paintIcon(this,g,25,11);
	g.fillRect(25,75,850,600);
	g.setColor(Color.WHITE);
	g.drawString("长度:"+len, 750, 35);
	g.drawString("得分:"+score,750,50);
	
	if(fx=="R"){
		right.paintIcon(this,g,snakex[0],snakey[0]);
	}else if(fx=="L"){
		left.paintIcon(this,g,snakex[0],snakey[0]);
	}else if(fx=="U"){
		up.paintIcon(this,g,snakex[0],snakey[0]);
	}else if(fx=="D"){
		down.paintIcon(this,g,snakex[0],snakey[0]);
	}
	for(int i=1;i<len;i++){
		body.paintIcon(this,g, snakex[i],snakey[i]);
	}
	food.paintIcon(this,g,foodx,foody);
	if(isStarted==false){
		g.setColor(Color.WHITE);
		g.setFont(new Font("arial",Font.BOLD,40));
		g.drawString("Press Space To Start", 300, 300);
	}
	if(isFailed){
		g.setColor(Color.RED);
		g.setFont(new Font("arial",Font.BOLD,40));
		g.drawString("Failed:Press Space To Restart", 200, 300);
	}
}
public void initSnake(){
	len=3;
	snakex[0]=100;
	snakey[0]=100;
	snakex[1]=75;
	snakey[1]=100;
	snakex[2]=50;
	snakey[2]=100;
	foodx=25+25*rand.nextInt(34);
	foody=75+25*rand.nextInt(24);
	fx="R";
	score=0;
}
public void keyPressed(KeyEvent e) { 
	int keyCode=e.getKeyCode();
	if(keyCode==KeyEvent.VK_SPACE){
		if(isFailed){
			isFailed=false;
			initSnake();
		}else{
			isStarted=!isStarted;
		}
		repaint();
		if(isStarted){
			playBGM();
		}else{
			stopBGM();
		}
	}else if(keyCode==KeyEvent.VK_LEFT){
		fx="L";
	}else if(keyCode==KeyEvent.VK_UP){
		fx="U";
	}else if(keyCode==KeyEvent.VK_RIGHT){
		fx="R";
	}else if(keyCode==KeyEvent.VK_DOWN){
		fx="D";
	}
 
}
public void keyReleased(KeyEvent e) {
	
}
public void keyTyped(KeyEvent e) {  
}
public void actionPerformed(ActionEvent e) {
	if(isStarted&&!isFailed){
		for(int i=len-1;i>0;i--){
			snakex[i]=snakex[i-1];
			snakey[i]=snakey[i-1];
		}
		if(fx=="R"){
			snakex[0]=snakex[0]+25;
			if(snakex[0]>850)snakex[0]=25;
		}else if(fx=="L"){
			snakex[0]=snakex[0]-25;
			if(snakex[0]<25)snakex[0]=850;
		}else if(fx=="U"){
			snakey[0]=snakey[0]-25;
			if(snakey[0]<75)snakey[0]=650;
		}else if(fx=="D"){
			snakey[0]=snakey[0]+25;
			if(snakey[0]>650)snakey[0]=75;
		}
		if(snakex[0]==foodx&&snakey[0]==foody){
			len++;
			score++;
			foodx=25+25*rand.nextInt(34);
			foody=75+25*rand.nextInt(24);
		}
		for(int i=1;i<len;i++)
		{
			if(snakex[i]==snakex[0]&&snakey[i]==snakey[0]){
				isFailed=true;
			}
		}
		repaint();
	}
	timer.start();
}
private void loadBGM(){
	try{
	    bgm=AudioSystem.getClip();
		InputStream is=this.getClass().getClassLoader().getResourceAsStream("sounds/bgm.wav");
		AudioInputStream ais=AudioSystem.getAudioInputStream(is);
		bgm.open(ais);
	}catch(LineUnavailableException e){
		e.printStackTrace();
	} catch (UnsupportedAudioFileException e) { 
		e.printStackTrace();
	} catch (IOException e) { 
		e.printStackTrace();
	}
}
private void playBGM(){
	bgm.loop(Clip.LOOP_CONTINUOUSLY);
}
private void stopBGM(){
	bgm.stop();
}
private void loadImages(){
	InputStream is;
	try{
		 is= getClass().getClassLoader().getResourceAsStream("image/P2.png");
		 title1=new ImageIcon(ImageIO.read(is));
		 is= getClass().getClassLoader().getResourceAsStream("image/food.png");
		 food=new ImageIcon(ImageIO.read(is));
		 is= getClass().getClassLoader().getResourceAsStream("image/body1.png");
		 body=new ImageIcon(ImageIO.read(is));
		 is= getClass().getClassLoader().getResourceAsStream("image/headup.png");
		 up=new ImageIcon(ImageIO.read(is));
		 is= getClass().getClassLoader().getResourceAsStream("image/headdown.png");
		 down=new ImageIcon(ImageIO.read(is));
		 is= getClass().getClassLoader().getResourceAsStream("image/headleft.png");
		 left=new ImageIcon(ImageIO.read(is));
		 is= getClass().getClassLoader().getResourceAsStream("image/headright.png");
		 right=new ImageIcon(ImageIO.read(is));
	}catch(IOException e){
		e.printStackTrace();
	}
}

}

公開された28元の記事 ウォンの賞賛1 ビュー1110

おすすめ

転載: blog.csdn.net/DAurora/article/details/104114269