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