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

📄 single.java

📁 java写的五子连游戏,有声音和优美的画面
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package Game;

import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.util.Stack;
import java.util.TreeMap;

import javax.swing.JOptionPane;

public class single implements MouseListener,Runnable, MouseMotionListener{
	int GRIDX;  // 地图x轴格数
	int GRIDY;  // 地图y轴格数
	
	//鼠标的X,Y坐标
	int MOUSE_X; 
	int MOUSE_Y;
	
	//鼠标在菜单的坐标
	int MENU_X;
	int MENU_Y;
	
	int FACE[][]=new int[9][9];    //记录地图上球和空白的数组
	char adr[][]=new char[9][9];   //记录地图是否可通(' '为可通,其他字符是不可通)
	
	static int status;          //有没有球被点击(1为点击,0为未点击)
	private boolean isGameOver;   //判断游戏是否结束
	private static boolean isfirstStart=true;
	//随机生成的球的三种颜色的记录
	int mode[];      
	
	int X,Y;          //随机生成的球的位置坐标
	int oldX,oldY;    //在点击空白之前点击的球的坐标
	
	static int score; //分数
	Container c;      // 容器
	draw md;          
	Thread temp;      //线程
	private AudioClip cleanSound;
	private AudioClip gameoverSound;
	Main m;
	public single(int gridx,   // 地图x轴格数
			  int gridy,   // 地图y轴格数
			  Container c, Main m){// 容器

			// 资料初始
		this.GRIDX=gridx;
		this.GRIDY=gridy;
		this.c=c;
		this.m=m;
		md = new draw(GRIDX,GRIDY,c);
		URL fileGamecleanAudio = getClass().getResource("Sound/cleanSound.wav");
		cleanSound=java.applet.Applet.newAudioClip(fileGamecleanAudio);
		URL fileGameoverAudio = getClass().getResource("Sound/gameoverSound.wav");
		gameoverSound=java.applet.Applet.newAudioClip(fileGameoverAudio);
		//recordOrder();
		//init();
	}
	public void init() {  	//游戏状态初始化
		if(!isfirstStart)
		{
			md.offG.clearRect(md.MAP_X+20, md.MAP_Y+4*md.imgMap[0].getHeight(null), 
					9*md.imgMap[0].getWidth(null),md.imgMap[0].getHeight(null));
		}
		isfirstStart=false;
		String strNext="NEXT   :";
		Font font=new Font(strNext, Font.LAYOUT_RIGHT_TO_LEFT, 20);
		md.offG.setFont(font);
		md.offG.setColor(Color.RED);
		md.offG.drawString(strNext, md.STATE_X+50, md.STATE_Y+40);
		
		String strScore="SCORE:";
		Font font1=new Font(strNext, Font.LAYOUT_RIGHT_TO_LEFT, 20);
		md.offG.setFont(font1);
		md.offG.setColor(Color.RED);
		md.offG.drawString(strScore, md.STATE_X+50, md.SCORE_Y+20);
		temp=new Thread();
		isGameOver=false;
		score=0;
		status=0;
		mode=new int[3];
		int i,j;
		for(i=0;i<9;i++)
			for(j=0;j<9;j++)
			{
				FACE[i][j]=0;
				md.showMap(i, j, 0);
			}
		//初始化随机产生三个颜色的球
		//md.showStatus();
		randomNextThreeBall();
		randomShowThreeBall();
		md.showScore(0);
		
		//随机产生下一状态的三个球,并显示在状态区
		randomNextThreeBall();
		md.update();
	}
	//设定鼠标在地图上坐标
	public void setMouseMapPosition(MouseEvent e){
			MOUSE_X = (e.getX()-md.MAP_X)/(md.MAP_WIDTH+2);
			MOUSE_Y = (e.getY()-md.MAP_Y)/(md.MAP_HEIGHT+2);
	}
	
	public void setMouseMenuPosition(MouseEvent e){
			MENU_X=(e.getX()-md.MENU_X)/md.MENU_WIDTH;
			MENU_Y=(e.getY()-md.MENU_Y)/md.MENU_HEIGHT;
		
	}
	//取得窗口大小
	public static Dimension getDimension(int x,int y){
		return new Dimension((x+1)*43,(y+5)*43);
	}
	@SuppressWarnings("deprecation")
	public void mouseClicked(MouseEvent e) {
		setMouseMapPosition(e);
		setMouseMenuPosition(e);
		if(!isGameOver)
		{
			if(MOUSE_X>=0 && MOUSE_X<9 && MOUSE_Y<9 && MOUSE_Y >=0)
			{
				//md.showMap(MOUSE_X, MOUSE_Y, 2);
				if(FACE[MOUSE_X][MOUSE_Y]==0)  //此位置无球
				{
					for(int i=0;i<9;i++)
						for(int j=0;j<9;j++)
						{
							if(FACE[i][j]==0)
								adr[i][j]=' ';
							else
								adr[i][j]='@';  //'@'表示不可通 
						}
					adr[oldX][oldY]=' ';
					if(status!=0 && checkPath(new posType(oldX,oldY),new posType(MOUSE_X,MOUSE_Y)))
					{
						if(temp.isAlive())
						{
							temp.stop();
							md.showMap(oldX, oldY, status);
						}
						md.showMap(MOUSE_X, MOUSE_Y, status);
						FACE[MOUSE_X][MOUSE_Y]=status;
						md.showMap(oldX, oldY, 0);
						FACE[oldX][oldY]=0;
						if(!cleanBall())
						{
							randomShowThreeBall();//显示下三个球
							randomNextThreeBall();
						}
						status=0;
					}
				}
				else               //此位置有球 
				{
					if(temp.isAlive())
					{
						temp.stop();
						md.showMap(oldX, oldY, status);
					}
					status=FACE[MOUSE_X][MOUSE_Y];
					temp=new Thread(this);
					temp.start();
					oldX=MOUSE_X;
					oldY=MOUSE_Y;
					//md.showMapPress(MOUSE_X,MOUSE_Y,status);
				}
			}
		}
		checkOver();
		md.update();
		if(MENU_X==0 && MENU_Y==0)    //开始菜单
		{
			init();
		}
		else if(MENU_X==0 && MENU_Y==2)//帮助菜单
		{
			new help(m);
			m.setEnabled(false);
		}
		else if(MENU_X==0 && MENU_Y==4)//排行榜
		{
			new orderList(m);
			m.setEnabled(false);
		}
		
		m.setCursor(Cursor.DEFAULT_CURSOR);
	}
	private void checkOver() {
		int count=0;
		for(int i=0;i<9;i++)
			for(int j=0;j<9;j++)
				if(FACE[i][j]==0)
					count++;
		if(count==0)
		{
			gameoverSound.play();
			md.showGameOver();
			recordOrder();
			isGameOver=true;
			return;
		}
		
	}
	private void recordOrder() {
		String buffer,strname[]={"","",""},strscore[]={"","",""};
		int oldscore[]=new int[3];
		int i=0;
		try {
			FileReader infile1=new FileReader("name.txt");
			BufferedReader inname=new BufferedReader(infile1);
			FileReader infile2=new FileReader("score.txt");
			BufferedReader inscore=new BufferedReader(infile2);
			do
			{
				buffer=inname.readLine();
				if(buffer!=null)
				{
					strname[i]=buffer;
					strscore[i]=inscore.readLine();
					System.out.println(strname[i]);
					System.out.println(strscore[i]);
				}
				i++;
			}while(buffer!=null);
			
			FileWriter outfile1=new FileWriter("name.txt");
			PrintWriter outname=new PrintWriter(new BufferedWriter(outfile1));
			FileWriter outfile2=new FileWriter("score.txt");
			PrintWriter outscore=new PrintWriter(new BufferedWriter(outfile2));
			
		
			
			for(int j=0;j<i-1;j++)
				oldscore[j]=Integer.valueOf(strscore[j]);
			
			if(i==4)
			{
				if(score>oldscore[2] && score<=oldscore[1] )
				{
					String input=JOptionPane.showInputDialog("输入您的名字:");
					outname.println(strname[0]);
					outscore.println(oldscore[0]);
					outname.println(strname[1]);
					outscore.println(oldscore[1]);
					outname.println(input);
					outscore.println(score);
				}
				else if(score > oldscore[1] && score<= oldscore[0])
				{
					String input=JOptionPane.showInputDialog("输入您的名字:");
					outname.println(strname[0]);
					outscore.println(oldscore[0]);
					outname.println(input);
					outscore.println(score);
					outname.println(strname[1]);
					outscore.println(oldscore[1]);
				}
				else if(score>oldscore[0])
				{
					String input=JOptionPane.showInputDialog("输入您的名字:");
					outname.println(input);
					outscore.println(score);
					outname.println(strname[0]);
					outscore.println(oldscore[0]);
					outname.println(strname[1]);
					outscore.println(oldscore[1]);
				}
				else
				{
					outname.println(strname[0]);
					outscore.println(oldscore[0]);
					outname.println(strname[1]);
					outscore.println(oldscore[1]);
					outname.println(strname[2]);
					outscore.println(oldscore[2]);
				}
			}
			else if(i==3)
			{
				if(score>oldscore[1] && score<=oldscore[0])
				{
					String input=JOptionPane.showInputDialog("输入您的名字:");
					outname.println(strname[0]);
					outscore.println(oldscore[0]);
					outname.println(input);
					outscore.println(score);
					outname.println(strname[1]);
					outscore.println(oldscore[1]);
				}
				else if(score>oldscore[0])
				{
					String input=JOptionPane.showInputDialog("输入您的名字:");
					outname.println(input);
					outscore.println(score);
					outname.println(strname[0]);
					outscore.println(oldscore[0]);
					outname.println(strname[1]);
					outscore.println(oldscore[1]);
				}
				else
				{
					String input=JOptionPane.showInputDialog("输入您的名字:");
					outname.println(strname[0]);
					outscore.println(oldscore[0]);
					outname.println(strname[1]);
					outscore.println(oldscore[1]);
					outname.println(input);
					outscore.println(score);
				}
			}
			else if(i==2)
			{
				if(score>oldscore[0])
				{
					String input=JOptionPane.showInputDialog("输入您的名字:");
					outname.println(input);
					outscore.println(score);

⌨️ 快捷键说明

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