📄 single.java
字号:
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 + -