📄 eluosi.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
import java.util.Collection.*;
import javax.imageio.*;
import javax.swing.*;
import java.text.*;
public class ELuoSi
{
public static void main (String args[])
{
JFrame frame=new ELuoSiFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}//主类
class ELuoSiFrame extends JFrame
{
public ELuoSiFrame()
{
setTitle("俄罗斯方块雏形");
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();
int screenWidth=screenSize.width;
int screenHeight=screenSize.height;
setSize((int)(screenWidth),(int)(screenHeight));
Container contentpane=getContentPane();
JPanel eLuoSiPanel=new ELuoSiPanel();
contentpane.add(eLuoSiPanel);
}
}//面板类
class ELuoSiPanel extends JPanel
{ //和一个主线程,主线程用来获取键盘的输入。控制方块体左移或者右移
//面板中要定义一个集合hashmap,用来存取方块的位置。
public ELuoSiPanel()
{
setLayout(new BorderLayout());
elsFKUnion=new ElsFKUnion();
elsFKUnion.ElsRanDom();
DownThread downThread=new DownThread(elsFKUnion,this.GetelsMap(),this.iter);//线程
JButton startbutton=new JButton("start");
startListener=new StartListener(this,downThread);//监听器
startbutton.addActionListener(startListener);//给按钮加监听器
add(startbutton,BorderLayout.SOUTH);//按钮添加到面板
KeyHandler keyListener1 =new KeyHandler(elsFKUnion,this.GetelsMap(),this.iter);//建一个监听器
addKeyListener(keyListener1);
setFocusable(true);////////////////干什么用的?????????
}//构造方法 添加一个开始按钮,添加一个监听器,并为该按钮添加该监听器。监听器启动时的动作是在这个构造方法中定义的一个线程。
//该线程的启动是改变俄*********,然后调用面板的repaint()事情,以重画面板
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
for(int i=0;i<=3;i++)
{
paint =new GradientPaint(elsFKUnion.GetElsXiaoFK(i).GetX()+12,elsFKUnion.GetElsXiaoFK(i).GetY()+12,new Color(250,250,250),elsFKUnion.GetElsXiaoFK(i).GetX()+24,elsFKUnion.GetElsXiaoFK(i).GetY()+24,Color.green,true);
g2.setPaint(paint);
g2.fill(new Rectangle2D.Float(elsFKUnion.GetElsXiaoFK(i).GetX(),elsFKUnion.GetElsXiaoFK(i).GetY(),25,25));
}
if(!elsMap.isEmpty())//非空,打印集合
{
Set keys=elsMap.keySet();
iter=keys.iterator();
while (iter.hasNext())
{
String key=(String)iter.next();
ElsXiaoFK elsXiaoFK1=(ElsXiaoFK)elsMap.get(key);
paint =new GradientPaint(elsXiaoFK1.GetX()+12,elsXiaoFK1.GetY()+12,new Color(250,250,250),elsXiaoFK1.GetX()+24,elsXiaoFK1.GetY()+24,Color.green,true);
g2.setPaint(paint);
g2.fill(new Rectangle2D.Float(elsXiaoFK1.GetX(),elsXiaoFK1.GetY(),25,25));
}
}
}//面板的打印方法
public HashMap GetelsMap()
{
return elsMap;
}
class DownThread extends Thread
{
public DownThread(ElsFKUnion elsFKUnion,HashMap map,Iterator iter)//如果迭代有问题,那么很有可能是迭代器没有初始化的原因。那么就iter=new iterator()好了。
{
this.elsFKUnion=elsFKUnion;
this.iter=iter;
elsMap=map;
}
public void run()
{
try
{
for(int i=1;i<20;i++)
{
elsFKUnion.Move(0,elsMap,iter);
repaint();
sleep(1000);
}
}
catch(InterruptedException exception)
{
}
}//run()
private ElsFKUnion elsFKUnion;
private Iterator iter;
}//线程类
class StartListener implements ActionListener
{
public StartListener(ELuoSiPanel panel,DownThread thread)
{
outerPanel=panel;
thread1=thread;
}
public void actionPerformed(ActionEvent e)
{
thread1.start();
outerPanel.requestFocus();
}
private DownThread thread1;
private ELuoSiPanel outerPanel;
}
class KeyHandler implements KeyListener
{
public KeyHandler(ElsFKUnion elsFKUnion,HashMap map,Iterator iter)
{
this.elsFKUnion=elsFKUnion;
elsMap=map;
this.iter=iter;
}
public void keyTyped(KeyEvent event)
{
}
public void keyReleased(KeyEvent event){}
public void keyPressed(KeyEvent event)
{
int keyCode=event.getKeyCode();
if (keyCode==KeyEvent.VK_RIGHT){elsFKUnion.Move(1,elsMap,iter);repaint();}
else if(keyCode==KeyEvent.VK_LEFT){elsFKUnion.Move(-1,elsMap,iter);repaint();}
else if(keyCode==KeyEvent.VK_DOWN){elsFKUnion.Move(0,elsMap,iter);repaint();}
else if(keyCode==KeyEvent.VK_UP){elsFKUnion.Turn();repaint();}
else if(keyCode==KeyEvent.VK_SPACE)
{
while(elsFKUnion.Move(0,elsMap,iter)==1)
repaint();
}}
private ElsFKUnion elsFKUnion;
private HashMap elsMap;
private Iterator iter;
}
private ElsFKUnion elsFKUnion;
private Paint paint;
private DownThread downThread;
private ActionListener startListener;
private HashMap elsMap=new HashMap();
private Iterator iter;
}//面板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板板
class ElsXiaoFK implements Comparable
{
public ElsXiaoFK()
{
}
public ElsXiaoFK NextDownEls()
{
ElsXiaoFK elsXiaoFK=new ElsXiaoFK();
elsXiaoFK.setX(this.GetX());
elsXiaoFK.setY(this.GetY()+25);
return elsXiaoFK;
}
int CanMove(int m,HashMap map)
{ //System.out.println("now in CanMove() next string willbe "+this.toString1(m));
if(m==0)
{
if(y+25>475)return -1;
else if(map.containsKey(this.toString1(m)))return -1;
else return 1;
}//往下移动。。。。。。。。。。。。。。。。。。。。//////////////////////////////要添加加加加加加加加加加加加加加加加
else if(m==1)
{
if(x+25>625)return -1;
else if(map.containsKey(this.toString1(m)))return -1;
else return 1;
}//往右移动。。。。。。。。。。。。。。。。。。。。。
else if(m==-1)
{
if(x-25<350)return -1;
else if(map.containsKey(this.toString1(m)))return -1;
else return 1;
}//往做移动
else return 0;
}
public void Move(int m,HashMap map)
{
if(m==0)
{
this.setY(this.GetY()+25);
}//往下移动。。。。。。。。。。。。。。。。。。。。
else if(m==1)
{
this.setX(this.GetX()+25);
}//往右移动。。。。。。。。。。。。。。。。。。。。。
else if(m==-1)
{
this.setX(this.GetX()-25);
}//往做移动
}
public int GetX()
{
return x;
}
public int GetY()
{
return y;
}
public void setX(int xx)
{
x=xx;
}
public void setY(int yy)
{
y=yy;
}
public String toString1()
{
NumberFormat formatter= NumberFormat.getNumberInstance();
String s=formatter.format((x-350)/25+y/25*12);
return s;//...........................................................toString
}
public String toString1(int i)
{
String s="";
NumberFormat formatter=NumberFormat.getNumberInstance();
if (i==0) s=formatter.format((x-350)/25+y/25*12+12);
if (i==1) s=formatter.format((x-350)/25+1+y/25*12);
if (i==-1)s=formatter.format((x-350)/25-1+y/25*12);
return s;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -