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

📄 draw.java

📁 java写的五子连游戏,有声音和优美的画面
💻 JAVA
字号:
package Game;

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;

public class draw implements Runnable{
	//游戏数据
	int GRIDX;  //地图x轴格数
	int GRIDY;  //地图y轴格数
	Container c;//容器


	//次显示区
	Image offI;
	Graphics offG;

	//图片数组
	Image[] imgMap;    //存放球的图片数组
	Image[] imgScore;   //存放分数的图片数组
	Image[] imgStatus;   //存放状态区的图片数组
	Image[] imgMenu;    //存放菜单的图片数组
	Image imgBackground;
	
	//球的宽与长
	int MAP_WIDTH;
	int MAP_HEIGHT;

	//分数图片的宽与长
	int SCORE_WIDTH;
	int SCORE_HEIGHT;
	
	//游戏状态区的宽和长
	int STATE_WIDTH;
	int STATE_HEIGHT;
	
	//菜单区的宽和长
	int MENU_WIDTH;
	int MENU_HEIGHT;
	
	//游戏状态区
	int STATE_X;
	int STATE_Y;
	
	//记分区的开始坐标
	int SCORE_X;
	int SCORE_Y;
	
	//游戏区的开始坐标
	int MAP_X;  
	int MAP_Y;	
	
	//菜单区的开始坐标
	int MENU_X;
	int MENU_Y;
		
	public draw(int gridx,   //地图x轴格数
				 int gridy,   //地图y轴格数
				 Container c){//容器

		//资料初始
		this.GRIDX=gridx;
		this.GRIDY=gridy;
		this.c=c;
		
		//建立次画面
		offI=c.createImage(c.getWidth(),c.getHeight());
		offG=offI.getGraphics();		
			
		imgMap=new Image[8];  //地图上的球
		for(int i=0;i<8;i++)
			imgMap[i]=(new ImageIcon("pic/people/0"+i+".jpg")).getImage();
		
		imgScore=new Image[10];  //分数的图片数组
		for(int i=0;i<10;i++)
			imgScore[i]=(new ImageIcon("pic/score/"+i+".gif")).getImage();
		
		imgStatus=new Image[8];  //状态区的图片数组
		for(int i=1;i<8;i++)  
			imgStatus[i]=(new ImageIcon("pic/status/0"+i+".jpg")).getImage();
		
		imgMenu=new Image[4];   //菜单区的图片数组
		for(int i=1;i<=3;i++)
			imgMenu[i]=(new ImageIcon("pic/menu/"+i+".jpg")).getImage();
		
		imgBackground=(new ImageIcon("pic/background.jpg")).getImage();
		offG.drawImage(imgBackground, 0, 0,null);
			
		STATE_WIDTH=imgMap[0].getWidth(null);
		STATE_HEIGHT=imgMap[0].getHeight(null);
		
		MAP_WIDTH=imgMap[0].getWidth(null);
		MAP_HEIGHT=imgMap[0].getHeight(null);
		
		SCORE_WIDTH=imgScore[0].getWidth(null);
		SCORE_HEIGHT=imgScore[0].getHeight(null);
		
		MENU_WIDTH=imgMenu[1].getWidth(null);
		MENU_HEIGHT=imgMenu[1].getHeight(null);
		
		MAP_X=MAP_WIDTH-35;
		MAP_Y=MAP_HEIGHT*3-15;
		//DrawMapFrame(MAP_X-6,MAP_Y-6,GRIDX*MAP_WIDTH+8,GRIDY*MAP_HEIGHT+8,
	      //            6,false);
		MENU_X=MAP_X+14*MAP_WIDTH+20;
		MENU_Y=MAP_Y-20;
		
		offG.drawImage(imgMenu[1], MENU_X, MENU_Y, null);
		offG.drawImage(imgMenu[2], MENU_X, MENU_Y+2*imgMenu[1].getHeight(null), null);
		offG.drawImage(imgMenu[3], MENU_X, MENU_Y+4*imgMenu[1].getHeight(null), null);
		
		STATE_X=MAP_X;
		STATE_Y=MAP_HEIGHT-20;
		//画状态区的线
		//offG.draw3DRect(STATE_X-4, STATE_Y-4, STATE_WIDTH+8, STATE_HEIGHT+8, true);
		//offG.drawLine(STATE_X-4, STATE_Y-4, STATE_X+4+STATE_WIDTH, STATE_Y-4);
		//offG.drawLine(STATE_X-4, STATE_Y-4, STATE_X-4, STATE_Y+4+STATE_HEIGHT);
		//offG.drawLine(STATE_X-4, STATE_Y+4+STATE_HEIGHT, STATE_X+4+STATE_WIDTH,
			//	STATE_Y+4+STATE_HEIGHT);
		//offG.drawLine(STATE_X+4+STATE_WIDTH, STATE_Y-4, STATE_X+4+STATE_WIDTH,
			//	STATE_Y+4+STATE_HEIGHT);
		
		//画游戏区的边线
		//offG.drawLine(MAP_X-4, MAP_Y-4, MAP_X+4+9*MAP_WIDTH, MAP_Y-4);
		//offG.drawLine(MAP_X-4, MAP_Y-4, MAP_X-4, MAP_Y+4+9*MAP_HEIGHT);
		//offG.drawLine(MAP_X-4, MAP_Y+4+9*MAP_HEIGHT, MAP_X+4+9*MAP_WIDTH,
		//		MAP_Y+4+9*MAP_HEIGHT);
		//offG.drawLine(MAP_X+4+9*MAP_WIDTH, MAP_Y-4, MAP_X+4+9*MAP_WIDTH,
		//		MAP_Y+4+9*MAP_HEIGHT);
		//DrawMapFrame(STATE_X-4,STATE_Y-4,GRIDX*MAP_WIDTH+8,3*MAP_HEIGHT+16,
          //      6,false);
		
		SCORE_X=STATE_X+4*MAP_WIDTH+36;
		SCORE_Y=STATE_Y+MAP_HEIGHT+15;
		
		new Thread(this).start();
		
	}

	//显示球图标 
	public void showMap(int x,int y,int mode){
		if(x>=0 && x<GRIDX &&//防止超出数组
		   y>=0 && y<GRIDY){		
			offG.drawImage(imgMap[mode],
						   MAP_X+x*MAP_WIDTH+2*x,
						   MAP_Y+y*MAP_HEIGHT+2*y,
						   null);
		}
	}
	
	public void showStatus()
	{
		offG.drawImage(imgMap[8],STATE_X,STATE_Y,null);
	}
	
	public void shownextStatus(int x,int y,int mode){
		if(x>=0 && x<=2 && y==0)
		{
			offG.drawImage(imgStatus[mode], STATE_X+(7+x)*imgStatus[1].getWidth(null),
					STATE_Y+20, null);
		}
	}
	public void showScore(int score)
	{
		if(score>=0)
		{
			offG.drawImage(imgScore[score%100000/10000], SCORE_X, SCORE_Y, null);
			offG.drawImage(imgScore[score%100000/10000], SCORE_X+SCORE_WIDTH, SCORE_Y, null);
			offG.drawImage(imgScore[score%10000/1000], SCORE_X+2*SCORE_WIDTH, SCORE_Y, null);
			offG.drawImage(imgScore[score%1000/100], SCORE_X+3*SCORE_WIDTH, SCORE_Y, null);
			offG.drawImage(imgScore[score%100/10], SCORE_X+4*SCORE_WIDTH, SCORE_Y, null);
			offG.drawImage(imgScore[score%10], SCORE_X+5*SCORE_WIDTH, SCORE_Y, null);
			//String str = String.valueOf(score);
			/*String str="帮助\n  ";
			Font font=new Font(str, Font.LAYOUT_RIGHT_TO_LEFT, 40);
			offG.setFont(font);
			offG.setColor(Color.ORANGE);
			offG.drawString(str, SCORE_X, SCORE_Y);*/
		}
	}
	
	public void showGameOver()
	{
		String GameOver="GAME OVER!";
		Font font=new Font(GameOver, Font.LAYOUT_RIGHT_TO_LEFT, 50);
		offG.setFont(font);
		offG.setColor(Color.RED);
		offG.drawString(GameOver, MAP_X+20, MAP_Y+5*imgMap[0].getHeight(null));
		
	}


	   //画出砖块组动作区地图外框	
	public void DrawMapFrame(int x,int y,int wid,int hig,int side,boolean raised){
		
		//定义多边形坐标
		int xx[][]={{x,x+wid,x+wid-side,x+side},//上
			    	{x+wid-side,x+wid,x+wid,x+wid-side},//右
					{x+side,x+wid-side,x+wid,x},//下
					{x,x+side,x+side,x}};//左

		int yy[][]={{y,y,y+side,y+side},//上
			    	{y+side,y,y+hig,y+hig-side},//右
					{y+hig-side,y+hig-side,y+hig,y+hig},//下
					{y,y+side,y+hig-side,y+hig}};//左		

				
		//画出多边形
		for(int i=0;i<=3;i++){
			if(raised){//设定框为凸起
				switch(i){//不同边设定不同颜色
					case 0:
						offG.setColor(new Color(250,250,250));
						break;
					case 1:
						offG.setColor(new Color(120,120,120));
						break;
					case 2:
						offG.setColor(new Color(100,100,100));
						break;
					case 3:
						offG.setColor(new Color(240,240,240));
						break;
				}
			}else{//设定框为凹陷
				switch(i){//不同边设定不同颜色
					case 0:
						offG.setColor(new Color(100,100,100));
						break;
					case 1:
						offG.setColor(new Color(240,240,240));
						break;
					case 2:
						offG.setColor(new Color(250,250,250));
						break;
					case 3:
						offG.setColor(new Color(120,120,120));					
						break;
				}
			}
			offG.fillPolygon(xx[i],yy[i],4);				
		}
		update();//更新画面
	}	

	public void update(){
		c.getGraphics().drawImage(offI,0,0,null);
	}

	public void run() {
		while(true)
		{
			update();
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
	}
	

}

⌨️ 快捷键说明

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