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

📄 minedraw.java

📁 扫雷游戏应实现的功能:点击“开始”或点击“笑脸”进入游戏
💻 JAVA
字号:
/** * 文件:MineDraw.java * 说明:扫雷游戏绘图功能 */package javamine;import java.awt.*;import javax.swing.*;class MineDraw extends JApplet{	//游戏数据int GRIDX;  //地图x轴格数int GRIDY;  //地图y轴格数int MINES;  //地雷数Container c;//容器//次显示区Image offI;Graphics offG;//图片数组Image[] imgSmile;Image[] imgMap;Image[] imgCount;//所有图片宽与长int SMILE_WIDTH;int SMILE_HEIGHT;int MAP_WIDTH;int MAP_HEIGHT;int COUNT_WIDTH;int COUNT_HEIGHT;//声音//AudioClip[] audio;//AudioClip fail;//各区域坐标int STATE_X;//游戏状态区int STATE_Y;int COUNT_X;//时间计数int COUNT_Y;int MCOUNT_X;//地雷计数int MCOUNT_Y;int MAP_X;//地雷区int MAP_Y;	int SMILE_X;//笑脸int SMILE_Y;	public MineDraw(int gridx,   //地图x轴格数			 int gridy,   //地图y轴格数			 int mines,   //地雷数                         Container c){//容器	//资料初始	this.GRIDX=gridx;	this.GRIDY=gridy;	this.MINES=mines;	this.c=c;		//建立次画面	offI=c.createImage((gridx+2)*16,(gridy+6)*16);	offG=offI.getGraphics();				//读入所有图片	imgSmile=new Image[5]; //游戏状态图(笑脸)	for(int i=0;i<=4;i++)		imgSmile[i]=(new ImageIcon("pic/smile/s"+i+".jpg")).getImage();						imgCount=new Image[11];//计数(LED字型)	for(int i=0;i<=10;i++)		imgCount[i]=(new ImageIcon("pic/count/"+i+".jpg")).getImage();				imgMap=new Image[16];  //地图上(数字、地雷)	for(int i=0;i<=15;i++)		imgMap[i]=(new ImageIcon("pic/map/m"+i+".jpg")).getImage();		//纪录图片宽与长	SMILE_WIDTH=imgSmile[0].getWidth(null);//游戏状态图	SMILE_HEIGHT=imgSmile[0].getHeight(null);	COUNT_WIDTH=imgCount[0].getWidth(null);//计数图	COUNT_HEIGHT=imgCount[0].getHeight(null);			MAP_WIDTH=imgMap[0].getWidth(null);//地图状态图	MAP_HEIGHT=imgMap[0].getHeight(null);	        //读入所有声音        //audio=new AudioClip[3];        //audio[0] =getAudioClip(getCodeBase(),"sound/time.wav");        //audio[1] =getAudioClip(getCodeBase(),"sound/win.wav");        //fail =getAudioClip(getCodeBase(),"sound/fail.wav");        //audio[2]=fail;        	//所有区域坐标	MAP_X=MAP_WIDTH;//地雷区	MAP_Y=MAP_HEIGHT*5;	DrawMapFrame(MAP_X-3,MAP_Y-3,                  GRIDX*MAP_WIDTH+6,GRIDY*MAP_HEIGHT+6,                  3,false);			STATE_X=MAP_WIDTH;//游戏状态区	STATE_Y=MAP_HEIGHT;	DrawMapFrame(STATE_X-3,STATE_Y-3,                  GRIDX*MAP_WIDTH+6,MAP_HEIGHT*3+6,                  3,false);			MCOUNT_X=STATE_X+(MAP_HEIGHT*3-COUNT_HEIGHT)/2;//地雷数	MCOUNT_Y=STATE_Y+(MAP_HEIGHT*3-COUNT_HEIGHT)/2;	DrawMapFrame(MCOUNT_X-2,MCOUNT_Y-2,                  COUNT_WIDTH*3+4,COUNT_HEIGHT+4,                  2,false);					COUNT_X=(STATE_X-3)+               (GRIDX*MAP_WIDTH+6)-MAP_WIDTH-COUNT_WIDTH*3;//秒数	COUNT_Y=MCOUNT_Y;	DrawMapFrame(COUNT_X-2,COUNT_Y-2,                  COUNT_WIDTH*3+4,COUNT_HEIGHT+4,2,false);				SMILE_X=(STATE_X-3)+(GRIDX*MAP_WIDTH+6-SMILE_WIDTH)/2;//笑脸	SMILE_Y=STATE_Y+(MAP_HEIGHT*3-SMILE_HEIGHT)/2;					//画出立体框	DrawMapFrame(0,0,(GRIDX+2)*MAP_WIDTH,(GRIDY+6)*MAP_HEIGHT,                  4,true);					showCount(MCOUNT_X,MCOUNT_Y,MINES);//显示地雷数	showCount(COUNT_X,COUNT_Y,0);//显示秒数	showSmile(0);//显示笑脸	}//显示地图图标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,					   MAP_Y+y*MAP_HEIGHT,					   null);	}}//显示笑脸public void showSmile(int i){	if(i>=0 && i<=4)		offG.drawImage(imgSmile[i],SMILE_X,SMILE_Y,null);	update();}//显示计数数字public void showCount(int x,int y,int count){	if(count>=0&&count<=999){		offG.drawImage(imgCount[(count%1000)/100],x,y,null);		offG.drawImage(imgCount[(count%100)/10],x+COUNT_WIDTH,y,null);		offG.drawImage(imgCount[(count%10)],x+COUNT_WIDTH*2,y,null);		update();//更新画面	}        else 	if(count<0&&count>=-99){                count=-count;		offG.drawImage(imgCount[10],x,y,null);		offG.drawImage(imgCount[(count%100)/10],x+COUNT_WIDTH,y,null);		offG.drawImage(imgCount[(count%10)],x+COUNT_WIDTH*2,y,null);		update();//更新画面	}}   //画出砖块组动作区地图外框	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(255,255,255));					break;				case 1:					offG.setColor(new Color(128,128,128));					break;				case 2:					offG.setColor(new Color(128,128,128));					break;				case 3:					offG.setColor(new Color(240,240,240));					break;			}		}else{//设定框为凹陷			switch(i){//不同边设定不同颜色				case 0:					offG.setColor(new Color(128,128,128));					break;				case 1:					offG.setColor(new Color(255,255,255));					break;				case 2:					offG.setColor(new Color(255,255,255));					break;				case 3:					offG.setColor(new Color(128,128,128));										break;			}		}		offG.fillPolygon(xx[i],yy[i],4);					}	update();//更新画面}	public void update(){	c.getGraphics().drawImage(offI,0,0,null);}}

⌨️ 快捷键说明

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