📄 minedraw.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 + -