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

📄 ycgdiamonds.java

📁 一个经典的小游戏
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        	for(int i=1;i<=SIZEI-3;i++)
        		for(int j=1;j<=SIZEJ;j++)
        		{
        			chessView.add(cb[i+3][j]);
        		}

		}

	   	//清屏
		public void ClearChess(){
			for(int i=1;i<=SIZEI;i++)
				for(int j=1;j<=SIZEJ;j++)
				{
					cb[i][j].color=0;
				}
		}

       	//重绘棋盘
		public void ReDraw(){
			for(int i=1;i<=SIZEI;i++)
				for(int j=1;j<=SIZEJ;j++)
				{
					cb[i][j].color=diamonds_panel[i][j];
				}
				chessView.repaint();
		}//end of ReDraw
    	//初始化棋盘
		void CreatDiamondsPanel()
		{
			for(int i=0;i<=SIZEI+1;i++)
				diamonds_panel[i][0]=diamonds_panel[i][SIZEJ+1]=1;
			for(int i=0;i<=SIZEJ+1;i++)
				diamonds_panel[0][i]=diamonds_panel[SIZEI+1][i]=1;
			for(int i=1;i<=SIZEI;i++)
				for(int j=1;j<=SIZEJ;j++)
					diamonds_panel[i][j]=0;
		}

		public void RandomMyImage()
		{
			flag_random=true;
			AskRandom();//请求缓存//外部函数
		}

		//判断有无图象重叠冲突
		boolean Clash(MyImage temp){
		if(diamonds_panel[temp.x1][temp.y1]!=0||
			diamonds_panel[temp.x2][temp.y2]!=0||
			diamonds_panel[temp.x3][temp.y3]!=0||
			diamonds_panel[temp.x4][temp.y4]!=0)
			return false;
		else
			return true;
		}
		MyImage temp=new MyImage(0,0,0,0,0,0,0,0,0);
		//判断可否响应键盘事件
		boolean CanDown(){
			temp.SetMyImage(tempMyImage.x1+1,tempMyImage.y1,tempMyImage.x2+1,tempMyImage.y2,
				tempMyImage.x3+1,tempMyImage.y3,tempMyImage.x4+1,tempMyImage.y4,tempMyImage.color);
			return Clash(temp);
		}
		boolean CanLeft(){
			temp.SetMyImage(tempMyImage.x1,tempMyImage.y1-1,tempMyImage.x2,tempMyImage.y2-1,
				tempMyImage.x3,tempMyImage.y3-1,tempMyImage.x4,tempMyImage.y4-1,tempMyImage.color);
			return Clash(temp);
		}
		boolean CanRight(){
			temp.SetMyImage(tempMyImage.x1,tempMyImage.y1+1,tempMyImage.x2,tempMyImage.y2+1,
				tempMyImage.x3,tempMyImage.y3+1,tempMyImage.x4,tempMyImage.y4+1,tempMyImage.color);
			return Clash(temp);
		}
		boolean CanRound(){
			if(tempMyImage.color==YELLOW)//田字格,不变形
				return false;
			int x1=tempMyImage.x1-tempMyImage.x3;
			int x2=tempMyImage.x2-tempMyImage.x3;
			int x4=tempMyImage.x4-tempMyImage.x3;
			int y1=tempMyImage.y1-tempMyImage.y3;
			int y2=tempMyImage.y2-tempMyImage.y3;
			int y4=tempMyImage.y4-tempMyImage.y3;
			temp.SetMyImage(tempMyImage.x3+y1,tempMyImage.y3-x1,tempMyImage.x3+y2,tempMyImage.y3-x2,
							tempMyImage.x3,tempMyImage.y3,tempMyImage.x3+y4,tempMyImage.y3-x4,tempMyImage.color);
			return Clash(temp);
		}

		//清除当前活动图形
		void ClearTemp(){
			cb[tempMyImage.x1][tempMyImage.y1].color=0;
			cb[tempMyImage.x2][tempMyImage.y2].color=0;
			cb[tempMyImage.x3][tempMyImage.y3].color=0;
			cb[tempMyImage.x4][tempMyImage.y4].color=0;
			cb[tempMyImage.x1][tempMyImage.y1].repaint();
			cb[tempMyImage.x2][tempMyImage.y2].repaint();
			cb[tempMyImage.x3][tempMyImage.y3].repaint();
			cb[tempMyImage.x4][tempMyImage.y4].repaint();
		}
		//重绘当前活动图形
		void PrintTemp(){
			cb[tempMyImage.x1][tempMyImage.y1].color=tempMyImage.color;
			cb[tempMyImage.x2][tempMyImage.y2].color=tempMyImage.color;
			cb[tempMyImage.x3][tempMyImage.y3].color=tempMyImage.color;
			cb[tempMyImage.x4][tempMyImage.y4].color=tempMyImage.color;
			cb[tempMyImage.x1][tempMyImage.y1].repaint();
			cb[tempMyImage.x2][tempMyImage.y2].repaint();
			cb[tempMyImage.x3][tempMyImage.y3].repaint();
			cb[tempMyImage.x4][tempMyImage.y4].repaint();
		}
		//处理消层事件
		void DealWin(){
			int i=SIZEI;
			int flag=1;
			win_num=0;
			while(i>0)
			{
				flag=1;
				for(int j=1;j<=SIZEJ;j++)
					if(diamonds_panel[i][j]==0)
						flag=0;
				if(flag==1)
				{
					win_number++;
					win_num++;
					mark+=10;
					if(win_number%5==0&&(state==0||state==2))
						speed=speed*9/10;
					for(int k=i;k>=2;k--)
						for(int j=1;j<=SIZEJ;j++)
							diamonds_panel[k][j]=diamonds_panel[k-1][j];
				}
				else
					i--;
			}
			if(win_num>1)
			{
				mark+=(win_num-1)*10;
				if(state==1)
					Destroy(win_num);
			}
			ReDraw();
			//ClearTemp();
			//PrintTemp();//刷新后立即显示小图
		}
		//判断是否有消层
		boolean HaveWin(int x1,int x2,int x3,int x4){
			int i=1;
			for(int j=1;j<=SIZEJ;j++)
				if(diamonds_panel[x1][j]==0)
					i=0;
			if(i==1)
				return true;
			i=1;
			for(int j=1;j<=SIZEJ;j++)
				if(diamonds_panel[x2][j]==0)
					i=0;
			if(i==1)
				return true;
			i=1;
			for(int j=1;j<=SIZEJ;j++)
				if(diamonds_panel[x3][j]==0)
					i=0;
			if(i==1)
			return true;
			i=1;
			for(int j=1;j<=SIZEJ;j++)
				if(diamonds_panel[x4][j]==0)
					i=0;
			if(i==1)
				return true;
			//System.out.println("have no win");
			return false;
		}
		//处理事件
		public void DealWith()
		{
			if(CanDown())
			{
				list_key.addLast(new Integer(down_key));
				DealWithKey();
			}
			else
			{
				list_key.addLast(new Integer(bottom_key));
				DealWithKey();
			}
		}
		//事件处理线程
		class Diamonds extends Thread{
			Diamonds(){
				win_number=0;
				mark=0;
				CreatDiamondsPanel();
				RandomMyImage();
				speed=SPEED;
				ReDraw();
			}
			public void run(){
				while(true)
				{
					{
						try{
							sleep(speed);
						}catch(Exception e){};
						DealWith();
					}
				}
			}
		}
	}
	public void DealWithKey()
	{
		int key_num=0;
		while(!list_key.isEmpty())
		{
			key_num=((Integer)list_key.removeFirst()).intValue();
			if(key_num==user1.left_key)//<
			{
				{
					if(user1.CanLeft())
					{
						user1.ClearTemp();
						user1.tempMyImage.y1--;
						user1.tempMyImage.y2--;
						user1.tempMyImage.y3--;
						user1.tempMyImage.y4--;
						user1.PrintTemp();
					}
				}
			}
			else if(key_num==user1.up_key)//^
			{
				{
					if(user1.CanRound())
					{
						user1.ClearTemp();
						int x1=user1.tempMyImage.x1-user1.tempMyImage.x3;
						int x2=user1.tempMyImage.x2-user1.tempMyImage.x3;
						int x4=user1.tempMyImage.x4-user1.tempMyImage.x3;
						int y1=user1.tempMyImage.y1-user1.tempMyImage.y3;
						int y2=user1.tempMyImage.y2-user1.tempMyImage.y3;
						int y4=user1.tempMyImage.y4-user1.tempMyImage.y3;
						user1.tempMyImage.x1=user1.tempMyImage.x3+y1;
						user1.tempMyImage.y1=user1.tempMyImage.y3-x1;
						user1.tempMyImage.x2=user1.tempMyImage.x3+y2;
						user1.tempMyImage.y2=user1.tempMyImage.y3-x2;
						user1.tempMyImage.x4=user1.tempMyImage.x3+y4;
						user1.tempMyImage.y4=user1.tempMyImage.y3-x4;
						user1.PrintTemp();
					}

				}
			}
			else if(key_num==user1.right_key)//>
			{
				{

					if(user1.CanRight())
					{
						user1.ClearTemp();
						user1.tempMyImage.y1++;
						user1.tempMyImage.y2++;
						user1.tempMyImage.y3++;
						user1.tempMyImage.y4++;
						user1.PrintTemp();
					}

				}
			}
			else if(key_num==user1.down_key)//V
			{
				{

					if(user1.CanDown())
					{
						user1.ClearTemp();
						user1.tempMyImage.x1++;
						user1.tempMyImage.x2++;
						user1.tempMyImage.x3++;
						user1.tempMyImage.x4++;
						user1.PrintTemp();
					}

				}
			}
			else if(key_num==user1.bottom_key)//到底
			{
				num1.setText("1消去"+user1.win_number+"分数:"+user1.mark);
				num2.setText("2消去"+user2.win_number+"分数:"+user2.mark);
				{

					while(user1.CanDown())
					{
						user1.ClearTemp();
						user1.tempMyImage.x1++;
						user1.tempMyImage.x2++;
						user1.tempMyImage.x3++;
						user1.tempMyImage.x4++;
						//user1.PrintTemp();
					}
					user1.diamonds_panel[user1.tempMyImage.x1][user1.tempMyImage.y1]=user1.tempMyImage.color;
					user1.diamonds_panel[user1.tempMyImage.x2][user1.tempMyImage.y2]=user1.tempMyImage.color;
					user1.diamonds_panel[user1.tempMyImage.x3][user1.tempMyImage.y3]=user1.tempMyImage.color;
					user1.diamonds_panel[user1.tempMyImage.x4][user1.tempMyImage.y4]=user1.tempMyImage.color;
					user1.PrintTemp();
					if(user1.HaveWin(user1.tempMyImage.x1,user1.tempMyImage.x2,user1.tempMyImage.x3,user1.tempMyImage.x4))
					{
					//System.out.println("have win");
						user1.DealWin();
					}
					user1.RandomMyImage();

				}
			}
			else if(key_num==user2.left_key)//<
			{
				{

					if(user2.CanLeft())
					{
						user2.ClearTemp();
						user2.tempMyImage.y1--;
						user2.tempMyImage.y2--;
						user2.tempMyImage.y3--;
						user2.tempMyImage.y4--;
						user2.PrintTemp();
					}

				}
			}
			else if(key_num==user2.up_key)//^
			{
				{

					if(user2.CanRound())
					{
						user2.ClearTemp();
						int x1=user2.tempMyImage.x1-user2.tempMyImage.x3;
						int x2=user2.tempMyImage.x2-user2.tempMyImage.x3;
						int x4=user2.tempMyImage.x4-user2.tempMyImage.x3;
						int y1=user2.tempMyImage.y1-user2.tempMyImage.y3;
						int y2=user2.tempMyImage.y2-user2.tempMyImage.y3;
						int y4=user2.tempMyImage.y4-user2.tempMyImage.y3;
						user2.tempMyImage.x1=user2.tempMyImage.x3+y1;
						user2.tempMyImage.y1=user2.tempMyImage.y3-x1;
						user2.tempMyImage.x2=user2.tempMyImage.x3+y2;
						user2.tempMyImage.y2=user2.tempMyImage.y3-x2;
						user2.tempMyImage.x4=user2.tempMyImage.x3+y4;
						user2.tempMyImage.y4=user2.tempMyImage.y3-x4;
						user2.PrintTemp();
					}

				}
			}
			else if(key_num==user2.right_key)//>
			{
				{

					if(user2.CanRight())
					{
						user2.ClearTemp();
						user2.tempMyImage.y1++;
						user2.tempMyImage.y2++;
						user2.tempMyImage.y3++;
						user2.tempMyImage.y4++;
						user2.PrintTemp();
					}

				}
			}
			else if(key_num==user2.down_key)//V
			{
				{

					if(user2.CanDown())
					{
						user2.ClearTemp();
						user2.tempMyImage.x1++;
						user2.tempMyImage.x2++;
						user2.tempMyImage.x3++;
						user2.tempMyImage.x4++;
						user2.PrintTemp();
					}

				}
			}
			else if(key_num==user2.bottom_key)//到底
			{
				num1.setText("1消去"+user1.win_number+"分数:"+user1.mark);
				num2.setText("2消去"+user2.win_number+"分数:"+user2.mark);
				{

					while(user2.CanDown())
					{
						user2.ClearTemp();
						user2.tempMyImage.x1++;
						user2.tempMyImage.x2++;
						user2.tempMyImage.x3++;
						user2.tempMyImage.x4++;
						//user2.PrintTemp();
					}
					user2.diamonds_panel[user2.tempMyImage.x1][user2.tempMyImage.y1]=user2.tempMyImage.color;
					user2.diamonds_panel[user2.tempMyImage.x2][user2.tempMyImage.y2]=user2.tempMyImage.color;
					user2.diamonds_panel[user2.tempMyImage.x3][user2.tempMyImage.y3]=user2.tempMyImage.color;
					user2.diamonds_panel[user2.tempMyImage.x4][user2.tempMyImage.y4]=user2.tempMyImage.color;
					user2.PrintTemp();
					if(user2.HaveWin(user2.tempMyImage.x1,user2.tempMyImage.x2,user2.tempMyImage.x3,user2.tempMyImage.x4))
					{
					//System.out.println("have win");
						user2.DealWin();
					}
					user2.RandomMyImage();

				}

			}
		}//end of while
	}//end of the method
	//添加键盘事件
	public void OpenKey(){
		this.addKeyListener(
			new KeyListener()
			{
				public void keyPressed(KeyEvent event)
				{
				//System.out.println(event.getKeyCode());
					if(event.getKeyCode()==82)
					{
						state=(state+1)%3;
						if(state==0)
							kind.setText("单人模式");
						if(state==1)
							kind.setText("双人对攻");
						if(state==2)
							kind.setText("双人自玩");
					}

					//单人模式
					if(event.getKeyCode()==user1.begin_key&&state==0)
					{
						try{
						user1.diamonds_thread.stop();
						}catch(Exception e){};
					}

					//双人模式
					if(event.getKeyCode()==user2.begin_key)
					{
						try{
						user2.diamonds_thread.stop();
						}catch(Exception e){};
						Initial();
						//PictureCreat();
						result.setText("");
						user2.diamonds_thread=user2.new Diamonds();
						user2.diamonds_thread.start();
					}
					if(event.getKeyCode()==user1.begin_key&&(state==1||state==2))
					{
						result.setText("");
						//PictureCreat();
						try{
						user1.diamonds_thread.stop();
						}catch(Exception e){};
						user1.diamonds_thread=user1.new Diamonds();
						user1.diamonds_thread.start();
					}

					//暂停
					if(event.getKeyCode()==user1.pause_key)
					{
						try{
							if(user1.flag)
							{
								user1.flag=!user1.flag;
								user1.diamonds_thread.suspend();
							}
							else
							{
								user1.flag=!user1.flag;
								user1.diamonds_thread.resume();
							}
						}catch(Exception e){};
					}
					if(event.getKeyCode()==user2.pause_key)
					{
						try

⌨️ 快捷键说明

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