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

📄 mypanel.java

📁 JAVA小游戏。双人五子棋。需先下载编译器。
💻 JAVA
字号:
//MyPanel.java英文打字机游戏嵌于MyPanel.html 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import java.applet.*; 
import javax.swing.*; 

public class MyPanel extends Applet implements Runnable 
{ 
public int FPS; 
public Thread newthread; 
public static boolean swit; 
public Image img; 
Graphics off; 
int width,height; 
MouseListener ml=new A(); 
KeyListener kl=new B(); 
JPopupMenu jmp; 
JMenuItem jmi; 
letter myletter; 
AudioClip A1,A2,A3; 
Random r; 
int isTypedSum; 
int isOmittedSum; 
int isWrongTypedSum; 
float percent; 
public void init() 
{ 
this.setBackground(Color.pink); 
this.setLayout(new FlowLayout()); 
FPS=100; 
isTypedSum=isOmittedSum=isWrongTypedSum=0; 
percent=0f; 
width=this.getSize().width; 
height=this.getHeight(); 
img=this.createImage(width,height); 
off=img.getGraphics(); 
r=new Random(); 
addComponents(); 
A1=this.getAudioClip(this.getDocumentBase(),"Audio/AUDIO1.au"); 
A2=this.getAudioClip(this.getDocumentBase(),"Audio/AUDIO2.au"); 
A3=this.getAudioClip(this.getDocumentBase(),"Audio/AUDIO3.au"); 
} 
public void addComponents() 
{ 
this.addKeyListener(kl); 
jmp=new JPopupMenu(); 
jmi=new JMenuItem("开始游戏"); 
jmi.addActionListener(new ActionListener() 
{ 
public void actionPerformed(ActionEvent e) 
{ 
isTypedSum=isOmittedSum=isWrongTypedSum=0; 
swit=true; 
start(); 
A3.loop(); 
} 
}); 
jmp.add(jmi); 
jmi=new JMenuItem("结束游戏"); 
jmi.addActionListener(new ActionListener() 
{ 
public void actionPerformed(ActionEvent e) 
{ 
stop(); 
swit=false; 
A3.stop(); 
} 
}); 
jmp.add(jmi); 
jmp.addSeparator(); 
jmi=new JMenuItem("增加字母数字"); 
jmi.addActionListener(new ActionListener() 
{ 
public void actionPerformed(ActionEvent e) 
{ 
if(myletter.exist_letter_num==9); 
else 
myletter.exist_letter_num++; 
myletter.randomLetters(); 
} 
}); 
jmp.add(jmi); 
jmi=new JMenuItem("加快下落速度"); 
jmi.addActionListener(new ActionListener() 
{ 
public void actionPerformed(ActionEvent e) 
{ 
for(int i=0;i<myletter.exist_letter_num;i++) 
myletter.speed[i]++; 
} 
}); 
jmp.add(jmi); 
jmp.addSeparator(); 
jmi=new JMenuItem("减少字母数字"); 
jmi.addActionListener(new ActionListener() 
{ 
public void actionPerformed(ActionEvent e) 
{ 
if(myletter.exist_letter_num==1); 
else 
myletter.exist_letter_num--; 
myletter.randomLetters(); 
} 
}); 
jmp.add(jmi); 
jmi=new JMenuItem("减缓下落速度"); 
jmi.addActionListener(new ActionListener() 
{ 
public void actionPerformed(ActionEvent e) 
{ 
for(int i=0;i<myletter.exist_letter_num;i++) 
{ 
if(myletter.speed[i]>1) 
myletter.speed[i]--; 
} 
} 
}); 
jmp.add(jmi); 
this.addMouseListener(ml); 
} 
class A extends MouseAdapter 
{ 
public void mousePressed(MouseEvent e) 
{ 
showPopup(e); 
} 
public void mouseReleased(MouseEvent e) 
{ 
showPopup(e); 
} 
public void showPopup(MouseEvent e) 
{ 
if(e.isPopupTrigger()) 
jmp.show(e.getComponent(),e.getX(),e.getY()); 
} 
} 
class B extends KeyAdapter 
{ 
public void keyPressed(KeyEvent e) 
{ 
char key=e.getKeyChar(); 
if(isTyped(key)) 
{ 
A1.play(); 
} 
else 
{ 
A2.play(); 
} 
} 
public boolean isTyped(char key) 
{ 
for(int i=0;i<myletter.exist_letter_num;i++) 
{ 
if((char)(key-32)==myletter.cc[i].charAt(0)) 
{ 
isTypedSum++; 
myletter.reStart(i); 
return true; 
} 
} 
isWrongTypedSum++; 
return false; 
} 
} 
public void start() 
{ 
newthread=new Thread(this); 
newthread.start(); 
myletter=new letter(this,off); 
myletter.randomLetters(); 
} 
public void run() 
{ 
while(newthread!=null) 
{ 
this.repaint(); 
try 
{ 
Thread.sleep(FPS); 
}catch(InterruptedException e) 
{ 
System.out.println(e.toString()); 
} 
} 
} 
public void paint(Graphics g) 
{ 
int sum; 
int showPercent=0; 
if(swit) 
{ 
off.setColor(this.getBackground()); 
off.fillRect(0,0,width,height); 
myletter.paintLetters(g); 
off.setColor(Color.blue); 
sum=isTypedSum+isWrongTypedSum+isOmittedSum; 
if(sum==0) { percent=0f; showPercent=0;} 
else 
{ 
percent=(float)isTypedSum/sum; 
showPercent=(int)(percent*100); 
} 
off.drawString("击中"+isTypedSum+" 错击"+isWrongTypedSum+" 漏掉"+isOmittedSum+" 正确率"+showPercent+"%",200,200); 
g.drawImage(img,0,0,width,height,this); 
} 
else 
{ 
off.setColor(this.getBackground()); 
off.fillRect(0,0,width,height); 
off.drawString("击中"+isTypedSum+" 错击"+isWrongTypedSum+" 漏掉"+isOmittedSum+" 正确率"+showPercent+"%",200,200); 
g.drawImage(img,0,0,width,height,this); 
} 
} 
public void update(Graphics g){this.paint(g);} 
public void stop() 
{ 
newthread=null; 
} 
} 

class letter 
{ 
MyPanel game; 
final int Max; 
boolean let[]; 
Graphics off; 
int X[]; 
int Y[]; 
int speed[]; 
int exist_letter_num; 
int XY[]; 
int ini; 
StringBuffer c[]; 
String cc[]; 
Random ran=new Random(); 
Color mycolor[]={Color.red,Color.green}; 
int aa[]; 
public letter(MyPanel game,Graphics off) 
{ 
Max=9; //将字母最多设置为9个。此数为不可改变的。 
this.off=off; 
this.game=game; 
let=new boolean[Max]; 
XY=new int[Max]; 
ini=50; 
initArray(); 
exist_letter_num=3; //初始化,刚开始落下字母的个数。 
} 
public void initArray() 
{ 
for(int i=0;i<Max;i++) 
{ 
let[i]=false; 
XY[i]=ini; 
ini+=70; 
} 
} 
public void randomLetters() //随机产生n个不同数字的值。 
{ 
X=new int[exist_letter_num]; 
Y=new int[exist_letter_num]; 
speed=new int[exist_letter_num]; 
aa=new int[100]; 
for(int i=0,n=0;i<exist_letter_num;i++)//通过9个不同的位置来随机产生字母出现的坐标位置。 
{ 
aa[n]=ran.nextInt(9); 
if(i!=0) 
{ 
while(check(aa,n)) 
{ 
aa[n]=ran.nextInt(9); 
} 
} 
X[i]=XY[aa[n]]; 
Y[i]=ran.nextInt(11)-10; 
speed[i]=ran.nextInt(8)+1; 
let[aa[n]]=true; //保存下放字母的位置。 
n++; 
} 
randomStrings(); 
} 
public void randomStrings() 
{ 
c=new StringBuffer[exist_letter_num]; 
cc=new String[exist_letter_num]; 
while(true) 
{ 
for(int i=0;i<exist_letter_num;i++) 
{ 
c[i]=new StringBuffer(); 
cc[i]=new String(); 
c[i].setLength(1); 
c[i].setCharAt(0,(char)(ran.nextInt(26)+65)); 
cc[i]=""+c[i]; 
} 
if(checkChar(c)) 
break; 
} 
} 
public boolean checkChar(StringBuffer c[]) 
{ 
if(exist_letter_num==1) return true; 
for(int i=0;i<exist_letter_num-1;i++) 
for(int j=i+1;j<exist_letter_num;j++) 
{ 
if(c[i].equals(c[j])) return false; 
} 
return true; 
} 
public boolean check(int aa[],int n) 
{ 
for(int i=0;i<n;i++) 
for(int j=i+1;j<=n;j++) 
{ 
if(aa[i]==aa[j]) return true; 
} 
return false; 
} 
public void paintLetters(Graphics g) 
{ 

for(int temp=0;temp<exist_letter_num;temp++) 
{ 
off.setColor(mycolor[ran.nextInt(2)]); 
off.fill3DRect(X[temp],Y[temp],20,20,true); 
off.setColor(Color.blue); 
off.drawString(cc[temp],X[temp]+5,Y[temp]+15); 
Y[temp]+=speed[temp]; 
if(Y[temp]>game.height) //当字母消失后,重新给初始位置和速度。 
{ 
game.isOmittedSum++; 
reStart(temp); 
} 
} 
} 
public void reStart(int temp) 
{ 
Y[temp]=ran.nextInt(11)-10; 
speed[temp]=ran.nextInt(8)+1; 
reStartX(temp); 
reStartStr(temp); 
} 
public void reStartX(int temp) 
{ 
int cause; 
Label:while(true) 
{ 
cause=ran.nextInt(9); 
for(int i=0;(i<exist_letter_num)&(i!=temp);i++) 
{ 
if(cause==aa[i]) 
continue Label; 
} 
break; 
} 
X[temp]=XY[cause]; 
aa[temp]=cause; 
} 
public void reStartStr(int temp) 
{ 
StringBuffer sb; 
String s; 
Label2:while(true) 
{ 
sb=new StringBuffer(); 
sb.setLength(1); 
s=""; 
sb.setCharAt(0,(char)(ran.nextInt(26)+65)); 
s+=sb; 
for(int i=0;i<exist_letter_num&i!=temp;i++) 
{ 
if(s.equals(cc[i])) 
continue Label2; 
} 
break; 
} 
cc[temp]=s; 
} 
} 

⌨️ 快捷键说明

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