?? hitpighead.java
字號:
// 程序:棒打豬頭
// 范例文件:HitPigHead.java
import java.awt.*;
import java.util.*;
import java.applet.*;
import java.awt.event.*;
abstract class SuperSprite //這是Sprite父類
{
int X,Y,width,height;
boolean visible,active;
abstract public void paintSprite(Graphics g);
abstract public void updateState();
public int getX()
{
return X;
}
public int getY()
{
return Y;
}
public void setLocation(int X,int Y)
{
this.X = X;
this.Y = Y;
}
public int getWidth()
{
return width;
}
public int getHeight()
{
return height;
}
public void setSize(int width,int height)
{
this.width = width;
this.height = height;
}
public boolean canVisible()
{
return visible;
}
public void setVisible(boolean v)
{
visible = v;
}
public boolean canMove()
{
return active;
}
public void setMove(boolean m)
{
active = m;
}
}
class PigSprite extends SuperSprite //豬頭Sprite
{
int seed; //產生隨機數
Image SpriteImage,Frame; //Sprite本身的圖像
Applet Game; //在繪制圖像時會用到
Random R;
boolean showPig; //顯示豬頭圖像
public PigSprite(Image SpriteImage,Image Frame,Applet Game)
{
R = new Random();
this.SpriteImage = SpriteImage;
this.Frame = Frame;
this.Game = Game;
showPig = false;
setVisible(true); //可見
setMove(true); //可移動
}
public void updateState()
{
if(active == true)
{
//轉換豬頭圖像出現與消失的狀態
if(R.nextInt(seed) % 100 < 1)
{
if(showPig == false)
showPig = true;
}
else if(R.nextInt(seed) % 100 > 95)
{
if(showPig == true)
showPig = false;
}
}
}
public void paintSprite(Graphics g) //繪制豬頭Sprite
{
if(visible == true)
{
g.drawImage(Frame,X,Y,Game); //在最后一個參數中輸入Applet
if(showPig == true)
g.drawImage(SpriteImage,X + 12,Y + 18,Game);
}
}
public void setSeed(int seed)
{
this.seed = seed;
}
//測試是否擊中豬頭圖像
public boolean hit(int X,int Y,int P_Width,int P_Height,int H_Width,
int H_Height)
{
if((this.X + P_Width >= X) && (this.Y + (P_Height / 2) >= Y) &&
(X + (H_Width / 2) >= this.X) && (Y + (H_Height / 2) >= this.Y)
&& showPig)
{
showPig = false;
return true;
}
else
return false;
}
}
class HammerSprite extends SuperSprite //鐵錘Sprite
{
Image hammer1,hammer2,currentImage; //鐵錘圖像
Applet Game;
public HammerSprite(Image hammer1,Image hammer2,Applet Game)
{
this.hammer1 = hammer1;
this.hammer2 = hammer2;
this.Game = Game;
currentImage = hammer1;
setLocation(0,0);
setVisible(false); //不可見
setMove(false); //不可移動
}
public void updateState()
{
//轉換鐵錘圖像
if(currentImage == hammer1)
currentImage = hammer2;
else
currentImage = hammer1;
}
public void paintSprite(Graphics g) //繪制鐵錘Sprite
{
if(visible == true)
g.drawImage(currentImage,X,Y,Game); //在最后一個參數中輸入Applet
}
}
public class HitPigHead extends Applet //主游戲類
implements Runnable,MouseListener,MouseMotionListener
{
int AppletWidth,AppletHeight,FrameWidth,FrameHeight,
countX,countY,HammerWidth,HammerHeight,score;
Image frame,pig,hammer1,hammer2,OffScreen;
Thread newThread;
Graphics drawOffScreen;
MediaTracker MT;
PigSprite pigSprite[];
HammerSprite hammerSprite;
GameFrame G;
public void init()
{
addMouseListener(this); //注冊事件處理方法
addMouseMotionListener(this);
AppletWidth = getSize().width;
AppletHeight = getSize().height;
countX = 3; //X軸3個豬頭texture
countY = 3; //Y軸3個豬頭texture
score = 0; //紀錄分數
//使用MediaTracker追蹤圖像
MT = new MediaTracker(this);
pig = getImage(getDocumentBase(),"Images/pig.gif");
frame = getImage(getDocumentBase(),"Images/frame.gif");
hammer1 = getImage(getDocumentBase(),"Images/hammer1.gif");
hammer2 = getImage(getDocumentBase(),"Images/hammer2.gif");
MT.addImage(pig,0);
MT.addImage(frame,0);
MT.addImage(hammer1,0);
MT.addImage(hammer2,0);
try
{
MT.waitForAll();
}
catch(InterruptedException E){ } //沒有進行異常處理
FrameWidth = frame.getWidth(this); //豬頭texture的寬度
FrameHeight = frame.getHeight(this); //豬頭texture的高度
pigSprite = new PigSprite[9]; //使用9個豬頭圖像(3*3)
for(int i=0;i<9;i++)
{
//建立豬頭Sprite
pigSprite[i] = new PigSprite(pig,frame,this);
//設定位置
pigSprite[i].setLocation(i%countX*FrameWidth,
i/countY*FrameHeight);
pigSprite[i].setSeed(i+100); //設定隨機數范圍
}
//建立鐵錘Sprite
hammerSprite = new HammerSprite(hammer1,hammer2,this);
HammerWidth = hammer1.getWidth(this); //鐵錘圖像高度
HammerHeight = hammer1.getHeight(this); //鐵錘圖像寬度
//建立次畫面
OffScreen = createImage(AppletWidth,AppletHeight);
drawOffScreen = OffScreen.getGraphics();
resize(FrameWidth*countX,FrameHeight*countY);
G = new GameFrame("棒打豬頭 v1.0 中文版",AppletWidth,AppletHeight,this);
}
public void start() //start()方法
{
newThread = new Thread(this); //建立與啟動新線程
newThread.start();
}
public void stop() //stop()方法
{
newThread = null; //將線程設為null
}
public void paint(Graphics g)
{
//只清除此部分區域的圖像
drawOffScreen.clearRect(0,0,AppletWidth,AppletHeight);
//繪制豬頭Sprite
for(int i=0;i<9;i++)
pigSprite[i].paintSprite(drawOffScreen);
//繪制鐵錘Sprite(注意Z-Order)
hammerSprite.paintSprite(drawOffScreen);
//將次畫面貼到主畫面上
g.drawImage(OffScreen,0,0,this);
}
public void update(Graphics g) //update()方法
{
paint(g); //只單純調用paint()方法
}
public void run()
{
while(newThread != null)
{
repaint(); //重繪圖像
try
{
Thread.sleep(33); //暫停33毫秒
}
catch(InterruptedException E){ }
for(int i=0;i<9;i++) //轉換豬頭Sprite
pigSprite[i].updateState();
}
}
//=====實現MouseListener界面=======================================
public void mouseExited(MouseEvent e) //鼠標離開Component
{
hammerSprite.setVisible(false); //不繪制鐵錘Sprite
hammerSprite.setLocation(0,0); //歸位于原點
}
public void mouseClicked(MouseEvent e){ } //鼠標按鍵被按下后放開
public void mouseEntered(MouseEvent e) //鼠標進入Component
{
hammerSprite.setVisible(true); //繪制鐵錘Sprite
//將鼠標光標置于鐵錘Sprite中央
hammerSprite.setLocation(e.getX() - (HammerWidth / 2),
e.getY() - (HammerHeight / 2));
}
public void mousePressed(MouseEvent e) //鼠標按鍵被按下
{
hammerSprite.updateState(); //轉換鐵錘Sprite
int X = hammerSprite.getX(); //取得鐵錘Sprite的X坐標
int Y = hammerSprite.getY(); //取得鐵錘Sprite的Y坐標
//測試是否擊中豬頭Sprite
for(int i=0;i<9;i++)
{
//如果擊中則增加分數并將分數顯示在狀態列
if(pigSprite[i].hit(X,Y,FrameWidth,FrameHeight,HammerWidth,
HammerHeight) == true)
{
score = score + 10;
showStatus("目前得分: " + score);
}
}
}
public void mouseReleased(MouseEvent e) //鼠標按鍵放開
{
hammerSprite.updateState(); //轉換鐵錘Sprite
}
//=====實現MouseMotionListener界面=================================
public void mouseMoved(MouseEvent e) //鼠標移動時
{
//將鼠標光標置于鐵錘Sprite中央
hammerSprite.setLocation(e.getX() - (HammerWidth / 2),
e.getY() - (HammerHeight / 2));
}
public void mouseDragged(MouseEvent e) //鼠標拖曳時
{
//將鼠標光標置于鐵錘Sprite中央
hammerSprite.setLocation(e.getX() - (HammerWidth / 2),
e.getY() - (HammerHeight / 2));
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -