请问怎么添加在C盘的音乐(WAV),使游戏开始时能播放?

发布于 2021-11-23 00:40:40 字数 9327 浏览 877 评论 2

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
import javax.swing.Timer;
//2012-7-20
//21:00
//xmj
// 创建一个俄罗斯方块类
class Tetrisblok extends JPanel implements KeyListener {	
	
	private int blockType;// blockType 代表方块类型	
	private int turnState;// turnState代表方块状态
	private int score = 0;
	private int x,y;    //当前方块位置
	private int nextblockType=-1,nextturnState=-1;  //下一方块类型和状态
	private Timer timer;//定时器
	// 存储已经放下的方块(1)及围墙(2)
	int[][] map = new int[12][21];
	// 方块的形状 
	//第一组代表方块类型有Z、L、J、I、 田、T 6种
	//第二组第三四组为旋转几次后的方块矩阵
	private final int shapes[][][] = new int[][][] {
	        // 长条形I形
			{ { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
					{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
					{ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
					{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } },
		    // 倒z字形
			{ { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			    	{ 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
							{ 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
							{ 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },		
			// z字形
			{ { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
					{ 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
					{ 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
					{ 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } },
			// J字形
			{ { 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
					{ 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
					{ 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
					{ 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
			// 田字形
			{ { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
					{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
					{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
					{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
			// L字形
			{ { 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
					{ 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
					{ 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
					{ 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
			// ⊥字形
			{ { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
					{ 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
					{ 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
					{ 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 } } };

	// 生成新方块的方法
	public void newblock() {
		//没有下一方块
		if(nextblockType==-1 && nextturnState==-1){
			blockType = (int) (Math.random() * 1000) % 7;
			turnState = (int) (Math.random() * 1000) % 4;
			nextblockType=(int) (Math.random() * 1000) % 7;
			nextturnState=(int) (Math.random() * 1000) % 4;
		}
		else{//已有下一方块
			blockType = nextblockType;
			turnState = nextturnState;
			nextblockType=(int) (Math.random() * 1000) % 7;
			nextturnState=(int) (Math.random() * 1000) % 4;
		}
		x = 4;		y = 0;//屏幕上方中央
		if (gameover(x, y) == 1) {//游戏结束
			newmap();
			drawwall();
			score = 0;
			JOptionPane.showMessageDialog(null, "GAME OVER");
		}
	}

	// 画围墙
	public void drawwall() {
		int i ,j;
		for (i = 0; i < 12; i++) {
			map[i][20] = 2;
		}
		for (j = 0; j < 21; j++) {
			map[11][j] = 2;
			map[0][j] = 2;
		}
	}

	// 初始化地图
	public void newmap() {
		int i ,j;
		for (i = 0; i < 12; i++) {
			for (j = 0; j < 21; j++) {
				map[i][j] = 0;
			}
		}
	}

	// 初始化构造方法
	Tetrisblok() {
		newblock();
		newmap();
		drawwall();
		timer = new Timer(500, new TimerListener());//0.5秒
		timer.start();
	}
	// 定时器监听
	class TimerListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			
			if (blow(x, y + 1, blockType, turnState) == 1) {//可以下落
				y = y + 1; //当前方块下移
				delline();
			}
			if (blow(x, y + 1, blockType, turnState) == 0) {//不可以下落
				add(x, y, blockType, turnState);
				delline();
				newblock();
			}
			repaint();//屏幕重画
		}
	}
	public void newGame()//新游戏
	{
		newblock();
		newmap();
		drawwall();
	}
	public void pauseGame()//暂停游戏
	{
		timer.stop();
	}
	public void continueGame()//继续游戏
	{
		timer.start();
	}

	// 旋转当前方块的方法
	public void turn() {
		int tempturnState = turnState;
		turnState = (turnState + 1) % 4;
		if (blow(x, y, blockType, turnState) == 1) {//可以旋转
		}
		if (blow(x, y, blockType, turnState) == 0) {//不可以旋转
			turnState = tempturnState;// 将旋转次数恢复为原来的值
		}
		repaint();
	}


	// 左移的方法
	public void left() {
		if (blow(x - 1, y, blockType, turnState) == 1) {
			x = x - 1;
		}
		;
		repaint();
	}

	// 右移的方法
	public void right() {
		if (blow(x + 1, y, blockType, turnState) == 1) {
			x = x + 1;
		}
		;
		repaint();
	}

	// 下落的方法
	public void down() {
		if (blow(x, y + 1, blockType, turnState) == 1) {
			y = y + 1;
			delline();
		}
		if (blow(x, y + 1, blockType, turnState) == 0) {
			add(x, y, blockType, turnState);
			newblock();
			delline();
		}
		repaint();
	}

	// 是否合法的方法
	public int blow(int x, int y, int blockType, int turnState) {
		for (int a = 0; a < 4; a++) {
			for (int b = 0; b < 4; b++) {
				if (((shapes[blockType][turnState][a * 4 + b] == 1) && (map[x
						+ b + 1][y + a] == 1))
						|| ((shapes[blockType][turnState][a * 4 + b] == 1) && (map[x
								+ b + 1][y + a] == 2))) {
					return 0;
				}
			}
		}
		return 1;
	}

	// 消行的方法
	public void delline() {
		int c = 0;
		for (int b = 0; b < 21; b++) {
			for (int a = 0; a < 12; a++) {
				if (map[a][b] == 1) {
					c = c + 1;
					if (c == 10) {//该行满行
						score += 10;
						for (int d = b; d > 0; d--) {
							for (int e = 0; e < 12; e++) {//则上方方块下移
								map[e][d] = map[e][d - 1];
							}
						}
					}
				}
			}
			c = 0;
		}
	}

	// 判断游戏结束方法
	public int gameover(int x, int y) {
		if (blow(x, y, blockType, turnState) == 0) {
			return 1;
		}
		return 0;
	}

	// 把当前方块添加map
	public void add(int x, int y, int blockType, int turnState) {
		int j = 0;
		for (int a = 0; a < 4; a++) {
			for (int b = 0; b < 4; b++) {
				if (shapes[blockType][turnState][j] == 1) {
					map[x + b + 1][y + a] = shapes[blockType][turnState][j];
				}
				j++;
			}
		}
	}

	//paint(Graphics g)是屏幕重画的方法。
	public void paint(Graphics g) {
		super.paint(g);//调用父类的paint()方法,实现初始化清屏
		int i ,j;
		// 画当前方块
		for (j = 0; j < 16; j++) {
			if (shapes[blockType][turnState][j] == 1) {
				g.fillRect((j % 4 + x + 1) * 15, (j / 4 + y) * 15, 15, 15);
			}
		}
		// 画已经固定的方块和围墙
		for (j = 0; j < 21; j++) {
			for (i = 0; i < 12; i++) {
				if (map[i][j] == 1) { //画已经固定的方块
					g.fillRect(i * 15, j * 15, 15, 15);
				}
				if (map[i][j] == 2) {//画围墙
					g.drawRect(i * 15, j * 15, 15, 15);
				}
			}
		}
		g.drawString("score=" + score, 225, 15);
		g.drawString("下一方块形状", 225, 50);
		int W=15;
		Image myImage = Toolkit.getDefaultToolkit().getImage("block0.gif");
		//窗口右侧区域绘制下一方块
		for (j = 0; j < 16; j++) {
			if (shapes[nextblockType][nextturnState][j] == 1) {
				g.fillRect(225+(j % 4 ) * 15, (j / 4 ) * 15+100, 15, 15);
				g.drawImage(myImage, 225+(j % 4 ) * 15, (j / 4 ) * 15+200, W, W,this);
			}
		}
//		int W=15;
//		Image myImage = Toolkit.getDefaultToolkit().getImage("block0.gif");
//		g.drawImage(myImage, 100, 200, W, W,this);

	}

	// 键盘监听
	public void keyPressed(KeyEvent e) {
		switch (e.getKeyCode()) {
		case KeyEvent.VK_DOWN:
			down();
			break;
		case KeyEvent.VK_UP:
			turn();
			break;
		case KeyEvent.VK_RIGHT:
			right();
			break;
		case KeyEvent.VK_LEFT:
			left();
			break;
		}
	}

	// 无用
	public void keyReleased(KeyEvent e) {
	}

	// 无用
	public void keyTyped(KeyEvent e) {
	}


}
//Java版简易俄罗斯方块
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class TetrisFrame extends JFrame implements ActionListener{
	static JMenu game = new JMenu("游戏");
	JMenuItem newgame = game.add("新游戏");
	JMenuItem pause = game.add("暂停");
	JMenuItem goon = game.add("继续");
	JMenuItem exit = game.add("退出");
	static JMenu help = new JMenu("帮助");
	JMenuItem about = help.add("关于");
	Tetrisblok a = new Tetrisblok();
	public TetrisFrame() {		
		addKeyListener(a); 
		this.add(a);
		newgame.addActionListener(this); //新游戏菜单项
		pause.addActionListener(this);   //暂停菜单项
		goon.addActionListener(this);   //继续菜单项
		about.addActionListener(this);   //关于菜单项
		exit.addActionListener(this);   //退出菜单项
	}
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==newgame) //新游戏菜单项
		{
			a.newGame();
		}else if(e.getSource()==pause) //暂停菜单项
		{
			a.pauseGame();
		}else if(e.getSource()==goon) //继续菜单项
		{
			a.continueGame();
		}else if(e.getSource()==about) //关于菜单项
		{
			DisplayToast("左右键移动,向上键旋转");
		}else if(e.getSource()==exit) //退出菜单项
		{
			System.exit(0);
		}
	}

    public void DisplayToast(String str) {
        JOptionPane.showMessageDialog(null, str, "提示", 
                        JOptionPane.ERROR_MESSAGE);
    }

	public static void main(String[] args) {
		TetrisFrame frame = new TetrisFrame();
		JMenuBar menu = new JMenuBar();
		frame.setJMenuBar(menu);
		menu.add(game);
		menu.add(help);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//结束按钮可用
		frame.setSize(320, 395);
		frame.setTitle("俄罗斯方块1.0版");
		// frame.setUndecorated(true);
		frame.setVisible(true);
		frame.setResizable(false);		
	}
}


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2021-11-28 06:31:38

游戏音乐建议ogg

清风夜微凉 2021-11-28 05:49:54

可以在main方法里面……

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文