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

📄 model.java

📁 java版的连连看游戏
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		setChanged();
		notifyObservers("music");
	}
	/**
	 * 点击声音开关
	 */
	public void clickSound(){
		notifyClickSound();
	}
	/**
	 * 通知系统点击了音乐开关
	 */
	private void notifyClickSound() {

		setChanged();
		notifyObservers("sound");
	}
	/**
	 * 演示
	 */
	public void demo(){
		notifyDemo();
	}
	/**
	 * 通知系统进行演示
	 */
	public void notifyDemo(){
		setChanged();
		notifyObservers("dem");
	}
	/**
	 * 单击提示按钮时所引发的事件
	 */
	public void remind() {
		count++;
		notifyRemind();
		/*如果还有提示机会则显示提示*/
		if (count <=6) {
			showTip();
		}
	}
	/**
	 * 假如要提示则自动调用Observer的update()方法,传参"remind"
	 */
	private void notifyRemind() {
		setChanged();
		notifyObservers("remind");
	}
	/**
	 * 暂停事件
	 */
public void pause(){
	pauseTime=System.currentTimeMillis();
	notifyPause();
}
/**
 * 通知系统发生了暂停事件
 */
private void notifyPause(){
	setChanged();
	notifyObservers("pause");
}
	/**
	 * 退出游戏
	 */
	public void quit() {
		if (frameLocation == null) {
			Point p = new Point(220, 70);
			setFrameLocation(p);
		}
		saveSet();
		// 探出JOptionPane以供用户确认
		int response = JOptionPane.showConfirmDialog(null,
				"需要保存吗?\n保存将会覆盖上次保存的内容!", "   友情提示",
				JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
		if (response == JOptionPane.YES_OPTION) {
			saveGameData();
		}
		System.exit(0);
	}

	/**
	 * 保存游戏的数据
	 */
	public void saveGameData() {
		// 由此来判断是否要进行保存
		if (level != 1) {
			LoadAndSave.saveGameData(pictureFile, musicFile, level);
		}
	}

	/**
	 * @return frameLocation 得到窗体的位置
	 */
	public Point getLocation() {

		return frameLocation;
	}

	/**
	 * 保存窗体退出时候的位置信息,文件不为空的时候进行加载
	 */
	public void saveSet() {
		if (frameLocation != null) {
			LoadAndSave.saveLocation(frameLocation);
		}
	}

	/**
	 * 设置窗体的位置,通过结束时给它传递一个位置点的参数
	 * 
	 * @param location
	 *            点的位置
	 */
	public void setFrameLocation(Point location) {
		frameLocation = location;
	}
	private void level1(){
		
	}
	private void level2(Point p1, Point p2) {
		/**
		//temp 作为中间参数来用来使p1.x 和 p2.x交换值
		int temp;
		//保证p1处于上方
		if (p1.x>p2.x){
			temp=p1.x;
			p1.x=p2.x;
			p2.x=temp;
		}
		*/
		for(int i=p1.x;i>=1;i--){
			if(data[i-1][p1.y]!=0&&(i!=1))
			data[i][p1.y]=data[i-1][p1.y];
			else if(data[i-1][p1.y]==0||(i==1))
				{
			data[1][p1.y]=0;
			data[i][p1.y]=0;
				break;
				}
		}
		for(int j=p2.x;j>=1;j--){
			if(data[j-1][p2.y]!=0&&(j!=1))
				data[j][p2.y]=data[j-1][p2.y];
			else if(data[j-1][p2.y]==0||(j==1))
			{
		data[1][p2.y]=0;
		data[j][p2.y]=0;
			break;
			}
		}
		updateAll();
	}
	private void level3(Point p1,Point p2){
		if((p1.x<=5&&p2.x<=5)||(p1.x>=6&&p2.x>=6)){
			//temp 作为中间参数来用来使p1.x 和 p2.x交换值
			int temp;
			//保证p1处于上方
			if (p1.x>p2.x){
				temp=p1.x;
				p1.x=p2.x;
				p2.x=temp;
		}
		}
		if(p1.x<=5){
			for(int i=4;i>=p1.x;i--){
				if(p1.x!=5)
					{
					data[i][p1.y]=data[i+1][p1.y];
				data[5][p1.y]=0;}
				else if(p1.x==5)
				{
			data[5][p1.y]=0;
				break;
				}
			}
		}
		else if(p1.x>=6){
			for(int i=p1.x;i<=10;i--){
				if(data[i-1][p1.y]!=0&&(i!=6)){
				data[i][p1.y]=data[i-1][p1.y];}
				else if(data[i-1][p1.y]==0||(i==6))
					{
				data[6][p1.y]=0;
				data[i][p1.y]=0;
					break;
					}
			}
		}
		if(p2.x<=5){
			for(int i=4;i>=p2.x;i--){
				if(p2.x!=5){
					data[i][p2.y]=data[i+1][p2.y];
				data[5][p2.y]=0;	
				}
				else if(p2.x==5)
				{
			data[5][p2.y]=0;
				break;
				}
			}
		}
		else if(p2.x>=6){
			for(int i=p2.x;i<=10;i--){
				if(data[i-1][p2.y]!=0&&(i!=6))
				data[i][p2.y]=data[i-1][p2.y];
				else if(data[i-1][p2.y]==0||(i==6))
					{
				data[6][p2.y]=0;
				data[i][p2.y]=0;
					break;
					}
			}
		}
		updateAll();
	}
	private void level4(Point p1,Point p2){
		
		for(int i=p1.y;i>=1;i--){
			if(data[p1.x][i-1]!=0)
			data[p1.x][i]=data[p1.x][i-1];
			else if(data[p1.x][i-1]==0||(i==1))
				{
			data[p1.x][1]=0;
			data[p1.x][i]=0;
				break;
				}
		}
		for(int j=p2.y;j>=1;j--){
			if(data[p2.x][j-1]!=0)
				data[p2.x][j]=data[p2.x][j-1];
			else if(data[p2.x][j-1]==0||(j==1))
			{
		data[p2.x][1]=0;
		data[p2.x][j]=0;
			break;
			}
		}
	}
	private void level5(Point p1,Point p2){
		if(p1.y<=6){
			for(int i=p1.y;i<=6;i++){
				if(data[p1.x][i+1]!=0)
					data[p1.x][i]=data[p1.x][i+1];
				else if(data[p1.x][i+1]==0||(i==6))
				{
			data[p1.x][6]=0;
			data[p1.x][i]=0;
				break;
				}
			}
		}
		else if(p1.y>=6){
			for(int i=p1.y;i>=1;i--){
				if(data[p1.x][i-1]!=0)
					data[p1.x][i]=data[p1.x][i-1];
				else if(data[p1.x][i-1]==0||(i==6))
				{
			data[p1.x][6]=0;
			data[p1.x][1]=0;
				break;
				}
			}
		}
		if(p2.y<=6){
			for(int i=p2.y;i<=5;i++){
				if(data[p2.x][i+1]!=0)
					data[p2.x][i]=data[p2.x][i+1];
				else if(data[p2.x][i+1]==0||(i==6))
				{
			data[p2.x][6]=0;
			data[p2.x][i]=0;
				break;
				}
			}
		}
		else if(p2.y>=6){
			for(int i=p2.y;i>=1;i--){
				if(data[p2.x][i-1]!=0)
					data[p2.x][i]=data[p2.x][i-1];
				else if(data[p2.x][i-1]==0||(i==6))
				{
			data[p2.x][6]=0;
			data[p2.x][i]=0;
				break;
				}
			}
		}
	} 
	/**
	 * 游戏第一关,正常连就行
	 */
	private void levelOne() {

	}

	/**
	 * 游戏第二关,有下坠效果
	 * 
	 * @param Point,Point
	 *            p1, p2前后所点的两个点
	 */
	private void levelTwo(Point p1, Point p2) {
		int boundary = 0;
		int count = 1;
		// 判断是否是在同列
		if (p1.y == p2.y) {
			// 如果是在同列,两个图片的高低,以判断谁在下面,进而据此使剩余的图片产生下坠效果
			if (p2.x < p1.x) {
				for (int i = p1.x; i > 1; i--) {
					while ((i - count - boundary) > 0
							&& (data[i - count - boundary][p1.y] == 0)) {// 执行条件是==0的情况
						boundary++;
					}
					data[i][p1.y] = data[i - count - boundary][p1.y];
					data[i - count - boundary][p1.y] = 0;
					boundary = 0;
				}
			}
			if (p2.x > p1.x) {
				for (int i = p2.x; i > 1; i--) {
					while ((i - count - boundary) > 0
							&& (data[i - count - boundary][p2.y] == 0)) {// 执行条件是==0的情况
						boundary++;
					}
					data[i][p2.y] = data[i - count - boundary][p2.y];
					data[i - count - boundary][p2.y] = 0;
					boundary = 0;
				}
			}
		}
		// 如果不在同一列,那就不用判断了,直接使所在列产生下坠效果
		else {
			for (int i = p1.x; i > 1; i--) {
				while ((i - count - boundary) > 0
						&& (data[i - count - boundary][p1.y] == 0)) {// 执行条件是==0的情况
					boundary++;
				}
				data[i][p1.y] = data[i - count - boundary][p1.y];
				data[i - count - boundary][p1.y] = 0;
				boundary = 0;
			}

			for (int i = p2.x; i > 1; i--) {
				while ((i - count - boundary) > 0
						&& (data[i - count - boundary][p2.y] == 0)) {// 执行条件是==0的情况
					boundary++;
				}
				data[i][p2.y] = data[i - count - boundary][p2.y];
				data[i - count - boundary][p2.y] = 0;
				boundary = 0;
			}
		}
		updateAll();
	}
	
	/**
	 * 游戏第三关,有左移的效果
	 * 
	 * @param Point,Point
	 *            p1, p2前后所点的两个点
	 */
	private void levelThree(Point p1, Point p2) {
		int boundary = 0;
		int count = 1;
		// 判断是否是在同行
		if (p1.x == p2.x) {
			// 如果是在同行,两个图片的左右,以判断谁在左面,进而据此使剩余的图片产生左移效果
			if (p2.y < p1.y) {
				for (int i = p2.y; i < 14; i++) {
					while ((i + count + boundary) < 15
							&& (data[p2.x][i + count + boundary] == 0)) {// 执行条件是==0的情况
						boundary++;
					}
					data[p2.x][i] = data[p2.x][i + count + boundary];
					data[p2.x][i + count + boundary] = 0;
					boundary = 0;
				}
			}
			if (p2.y > p1.y) {
				for (int i = p1.y; i < 14; i++) {
					while ((i + count + boundary) < 15
							&& (data[p2.x][i + count + boundary] == 0)) {// 执行条件是==0的情况
						boundary++;
					}
					data[p2.x][i] = data[p2.x][i + count + boundary];
					data[p2.x][i + count + boundary] = 0;
					boundary = 0;
				}
			}
		}
		// 如果不在同一行,那就不用判断了,直接使所在行产生左移效果
		else {
			for (int i = p2.y; i < 14; i++) {
				while ((i + count + boundary) < 15
						&& (data[p2.x][i + count + boundary] == 0)) {// 执行条件是==0的情况
					boundary++;
				}
				data[p2.x][i] = data[p2.x][i + count + boundary];
				data[p2.x][i + count + boundary] = 0;
				boundary = 0;
			}

			for (int i = p1.y; i < 14; i++) {
				while ((i + count + boundary) < 15
						&& (data[p1.x][i + count + boundary] == 0)) {// 执行条件是==0的情况
					boundary++;
				}
				data[p1.x][i] = data[p1.x][i + count + boundary];
				data[p1.x][i + count + boundary] = 0;
				boundary = 0;
			}
		}
		updateAll();
	}

	/**
	 * 游戏第四关,有从中间向上下分离的效果
	 * 
	 * @param Point,Point
	 *            p1, p2前后所点的两个点
	 */
	private void levelFour(Point p1, Point p2) {
		int boundary = 0;
		int count = 1;
		// 对P1所对图片所在的位置进行判断,看是在后5行还是在前5行,据此判断应该上移还是应该下移
		if (p1.x > 5) {
			for (int i = p1.x; i > 6; i--) {
				while ((i - count - boundary) > 5
						&& (data[i - count - boundary][p1.y] == 0)) {// 执行条件是==0的情况
					boundary++;
				}
				if (i - count - boundary != 5) {
					data[i][p1.y] = data[i - count - boundary][p1.y];
					data[i - count - boundary][p1.y] = 0;
				}
				boundary = 0;
			}
		} else if (p1.x <= 5) {
			for (int i = p1.x; i < 5; i++) {
				while ((i + count + boundary) <= 5
						&& (data[i + count + boundary][p1.y] == 0)) {// 执行条件是==0的情况
					boundary++;
				}
				if (i + count + boundary != 6) {
					data[i][p1.y] = data[i + count + boundary][p1.y];
					data[i + count + boundary][p1.y] = 0;
				}
				boundary = 0;
			}
		}
		// 对P2所对图片所在的位置进行判断,看是在后5行还是在前5行,据此判断应该上移还是应该下移
		if (p2.x > 5) {
			for (int i = p2.x; i > 6; i--) {
				while ((i - count - boundary) > 5
						&& (data[i - count - boundary][p2.y] == 0)) {// 执行条件是==0的情况
					boundary++;
				}
				if (i - count - boundary != 5) {
					data[i][p2.y] = data[i - count - boundary][p2.y];
					data[i - count - boundary][p2.y] = 0;
				}
				boundary = 0;
			}
		} else if (p2.x <= 5) {
			for (int i = p2.x; i < 5; i++) {
				while ((i + count + boundary) <= 5
						&& (data[i + count + boundary][p2.y] == 0)) {// 执行条件是==0的情况
					boundary++;
				}
				if (i + count + boundary != 6) {
					data[i][p2.y] = data[i + count + boundary][p2.y];
					data[i + count + boundary][p2.y] = 0;
				}
				boundary = 0;
			}
		}
		updateAll();
	}
}

⌨️ 快捷键说明

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