您好,登錄后才能下訂單哦!
Java怎樣實現經典俄羅斯方塊游戲,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
俄羅斯方塊是一個最初由阿列克謝帕吉特諾夫在蘇聯設計和編程的益智類視頻游戲。
《俄羅斯方塊》的基本規則是移動、旋轉和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。
用java語言實現,采用了swing技術進行了界面化處理,設計思路用了面向對象思想。
主要需求
由小方塊組成的不同形狀的板塊陸續從屏幕上方落下來,玩家通過調整板塊的位置和方向,使它們在屏幕底部拼出完整的一條或幾條。這些完整的橫條會隨即消失,給新落下來的板塊騰出空間,與此同時,玩家得到分數獎勵。沒有被消除掉的方塊不斷堆積起來,一旦堆到屏幕頂端,玩家便告輸,游戲結束。
1、用鍵盤操作,"←"左移一格;"→"右移一格;"↑"旋轉方塊;↓ 方塊丟下(方塊下落到底)
2、一旦堆到屏幕頂端,游戲結束
3、設計不同的方塊
4、設計方塊下落的速度
5、設計分數系統
游戲啟動頁
開始游戲
游戲結束
窗口設計類
public class Windows extends JFrame { private Toolkit took = null; private static int width= 470; //寬 private static int height = 680; //高 private static int width_g = 10; //游戲區域 private static int height_g = 22; // private static int size = 30; //方塊大小 private static int space= 10; //坐標距邊界間隔 Map map = new Map(width_g,height_g);//地圖坐標 ArrayList <Diamonds> ds = new ArrayList<Diamonds>();//方塊數組 private boolean game=false; //游戲開始 private int flag = 0; //游戲狀態【暫停:0,繼續:1】 private JLabel jl2; private JButton jb1; private int speed = 500; //速度 private int score = 0; //分數 private int[] scores = new int[4]; //排名 public static void main(String[] args) { Windows win = new Windows(); win.run(); } public void run(){ init(); try { while(true) { if(game&&flag==1) { ds.get(ds.size()-2).movement(map); if(!ds.get(ds.size()-2).isStatus()) { //判斷游戲是否失敗 if(ds.get((ds.size()-2)).getY()<=3) { game=false; //重置游戲參數 ds = new ArrayList<Diamonds>(); map = new Map(width_g,height_g); JOptionPane.showMessageDialog(new JFrame().getContentPane(), "游戲結束!\n您獲得【"+score+"】點分數"); score=0; jl2.setText("分數: "+score); jb1.setEnabled(true); jb1.setText("重新開始"); }else { //消除判斷 score=map.dispel(score); jl2.setText("分數: "+score); //生成新方塊 Diamonds diamonds = new Diamonds(width_g); ds.add(diamonds); } } } repaint(); Thread.sleep(speed); } }catch(InterruptedException e) { e.printStackTrace(); } } //窗口加載 public void init() { //界面設置 this.setTitle("俄羅斯方塊"); //標題 this.setSize(width, height); //界面大小 took = Toolkit.getDefaultToolkit(); Dimension dm = took.getScreenSize(); int swidth = (dm.width - width)/2; int sheight = (dm.height - height)/2; this.setLocation(swidth, sheight); //容器 JPanel p1 = new JPanel(); //地圖 JPanel p2 = new JPanel(); //俄羅斯方塊控制界面 JPanel p3 = new JPanel(); //按鈕 JPanel p4 = new JPanel(); //說明 //圖形繪制容器 JPanel contentPane = new PaintPanel(); setContentPane(contentPane); //標簽 JLabel jl1 = new JLabel("俄羅斯方塊控制界面"); jl2 = new JLabel("分數: "+score); JLabel jl3 = new JLabel("游戲說明:"); //按鈕 jb1 = new JButton("游戲開始"); JButton jb2 = new JButton("難度選擇"); JButton jb3 = new JButton("繼續/暫停"); JButton jb4 = new JButton("游戲退出"); JButton jb5 = new JButton("高級"); JButton jb6 = new JButton("中級"); JButton jb7 = new JButton("低級"); JButton jb8 = new JButton("顯示排名"); //文本 JTextArea jta = new JTextArea("1.點擊【游戲開始】按鈕開始游戲。" + "\n2.游戲中可隨時暫停,使用方向鍵可繼續游戲" + "\n3.用鍵盤操作,\"←\"左移一格;\"→\"右移一格;\"↑\"旋轉方塊;↓ 方塊丟下(方塊下落到底)",50,9); jta.setSelectionColor(Color.RED); jta.setEditable(false); jta.setLineWrap(true); //布局 this.setLayout(new BorderLayout(5,5)); p2.setLayout(new GridLayout(2,1,5,5)); p3.setLayout(new GridLayout(10,1,5,5)); p4.setLayout(new BorderLayout(5,5)); //設置邊界 p2.setBorder(BorderFactory.createEmptyBorder(20,20,15,15)); //背景顏色 p1.setBackground(new Color(255,255,255,0)); p2.setBackground(new Color(255,255,255,0)); p3.setBackground(new Color(255,255,255,0)); p4.setBackground(new Color(255,255,255,0)); jta.setBackground(Color.WHITE); //添加容器/組件 p3.add(jl1); p3.add(jl2); p3.add(jb1); //p3.add(jb2); p3.add(jb3); p3.add(jb4); p3.add(jb8); p4.add(jl3,BorderLayout.NORTH); p4.add(jta,BorderLayout.CENTER); p2.add(p3); p2.add(p4); //主容器 this.add(p1,BorderLayout.CENTER); this.add(p2,BorderLayout.EAST); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setUndecorated(true); this.setVisible(true); this.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { //游戲開始時按鍵有效 if(ds.size()!=0) { int type = ds.get(ds.size()-2).getType(); int x = ds.get(ds.size()-2).getX(); if(e.getKeyCode()==KeyEvent.VK_LEFT) { ds.get(ds.size()-2).left(map); } if(e.getKeyCode()==KeyEvent.VK_RIGHT) { ds.get(ds.size()-2).right(map); } if(e.getKeyCode()==KeyEvent.VK_UP) { if(type<=1) { //可能在轉換過程發生越界的解決辦法 if(type==1) { if(x>=width_g-3) { ds.get(ds.size()-2).setX(width_g-4); } } ds.get(ds.size()-2).setType(type==0?1:0); }else if(type<=5) { if(type==3||type==5) { if(x==width_g-2) { ds.get(ds.size()-2).setX(width_g-3); } } ds.get(ds.size()-2).setType(type==5?2:++type); }else if(type<=9) { ds.get(ds.size()-2).setType(type==9?6:++type); }else if(type<=10) { ds.get(ds.size()-2).setType(10); }else if(type<=14) { if(type==12||type==14) { if(x==width_g-2) { ds.get(ds.size()-2).setX(width_g-3); } } ds.get(ds.size()-2).setType(type==14?11:++type); }else if(type<=18) { if(type==16||type==18) { if(x==width_g-2) { ds.get(ds.size()-2).setX(width_g-3); } } ds.get(ds.size()-2).setType(type==18?15:++type); } } } if(e.getKeyCode()==KeyEvent.VK_DOWN) { speed = 100; } } public void keyReleased(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_DOWN) { speed = 500; } } }); //游戲開始 jb1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { requestFocus(); //生成第一個方塊 Diamonds diamonds = new Diamonds(width_g); ds.add(diamonds); //生成提示方塊 Diamonds point = new Diamonds(width_g); ds.add(point); //游戲開始 game=true; flag=1; //游戲開始后禁止使用 jb1.setEnabled(false); } }); //退出 jb4.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { System.exit(0); } }); //暫停/繼續 jb3.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if(flag==0) { flag=1; }else { flag=0; } requestFocus(); } }); } //重寫paintComponent(圖形繪制) private class PaintPanel extends JPanel{ @Override protected void paintComponent(Graphics g) { //還原size的值 size=30; //繪制邊界 g.setColor(Color.GRAY); g.fillRect(0, 0, width-149, height-1); g.setColor(Color.PINK); g.fillRect(width-149, 0, 148, height-1); g.setColor(Color.BLACK); g.drawLine(width-149, 0, width-149, height-1); g.drawRect(0, 0, width-1, height-1); g.setColor(Color.WHITE); g.fillRect(space, space, width_g*size, height_g*size); g.setColor(Color.BLACK); g.drawRect(space, space, width_g*size, height_g*size); g.drawLine(space, space+3*size, space+width_g*size, space+3*size); //提示框 g.setColor(Color.WHITE); g.fillRect(width-135, 222, 4*size, 4*size); g.setColor(Color.BLACK); g.drawRect(width-135, 222, 4*size, 4*size); if(game) { Color[][] color_xy = map.getColor(); int[][] map_xy = map.getMap(); //繪制地圖 for(int i=0;i<width_g;i++) { for(int j=0;j<height_g;j++) { // 繪制網格線,可注釋 g.drawRect(i*size+space, j*size+space, size, size); if(map_xy[i][j]==1) { //g.setColor(color_xy[i][j]); g.setColor(Color.BLUE); g.fillRect(i*size+space, j*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(i*size+space, j*size+space, size, size); } } } //繪制可移動的方塊 int type=ds.get(ds.size()-2).getType(); int x=ds.get(ds.size()-2).getX(); int y=ds.get(ds.size()-2).getY(); Color color = ds.get(ds.size()-2).getColor(); //繪制提示方塊 int typeO=ds.get(ds.size()-1).getType(); int xO=width-100; int yO=260; Color colorO = ds.get(ds.size()-1).getColor(); //繪制圖形 //圖形一,兩種形態 if(type==0) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect((x+2)*size+space, y*size+space, size, size); g.fillRect((x+3)*size+space, y*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect((x+2)*size+space, y*size+space, size, size); g.drawRect((x+3)*size+space, y*size+space, size, size); } if(type==1) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.fillRect(x*size+space, (y+2)*size+space, size, size); g.fillRect(x*size+space, (y+3)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); g.drawRect(x*size+space, (y+2)*size+space, size, size); g.drawRect(x*size+space, (y+3)*size+space, size, size); } //圖形二,四種形態 if(type==2) { g.setColor(color); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.fillRect((x+2)*size+space, (y+1)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); g.drawRect((x+2)*size+space, (y+1)*size+space, size, size); } if(type==3) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.fillRect(x*size+space, (y+2)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); g.drawRect(x*size+space, (y+2)*size+space, size, size); } if(type==4) { g.setColor(color); g.fillRect((x)*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect((x+2)*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect((x+2)*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); } if(type==5) { g.setColor(color); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.fillRect((x+1)*size+space, (y+2)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); g.drawRect((x+1)*size+space, (y+2)*size+space, size, size); } //圖形三,四種形態 if(type==6) { g.setColor(color); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); } if(type==7) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); } if(type==8) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); } if(type==9) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); } //圖形四,一種形態 if(type==10) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); } //圖形五,三種形態 if(type==11) { g.setColor(color); g.fillRect((x+2)*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.fillRect((x+2)*size+space, (y+1)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect((x+2)*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); g.drawRect((x+2)*size+space, (y+1)*size+space, size, size); } if(type==12) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.fillRect((x+1)*size+space, (y+2)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); g.drawRect((x+1)*size+space, (y+2)*size+space, size, size); } if(type==13) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect((x+2)*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect((x+2)*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); } if(type==14) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.fillRect(x*size+space, (y+2)*size+space, size, size); g.fillRect((x+1)*size+space, (y+2)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); g.drawRect(x*size+space, (y+2)*size+space, size, size); g.drawRect((x+1)*size+space, (y+2)*size+space, size, size); } //圖形六,三種形態 if(type==15) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.fillRect((x+2)*size+space, (y+1)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); g.drawRect((x+2)*size+space, (y+1)*size+space, size, size); } if(type==16) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect(x*size+space, (y+1)*size+space, size, size); g.fillRect(x*size+space, (y+2)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect(x*size+space, (y+1)*size+space, size, size); g.drawRect(x*size+space, (y+2)*size+space, size, size); } if(type==17) { g.setColor(color); g.fillRect(x*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect((x+2)*size+space, y*size+space, size, size); g.fillRect((x+2)*size+space, (y+1)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect(x*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect((x+2)*size+space, y*size+space, size, size); g.drawRect((x+2)*size+space, (y+1)*size+space, size, size); } if(type==18) { g.setColor(color); g.fillRect((x+1)*size+space, y*size+space, size, size); g.fillRect((x+1)*size+space, (y+1)*size+space, size, size); g.fillRect(x*size+space, (y+2)*size+space, size, size); g.fillRect((x+1)*size+space, (y+2)*size+space, size, size); g.setColor(Color.BLACK); g.drawRect((x+1)*size+space, y*size+space, size, size); g.drawRect((x+1)*size+space, (y+1)*size+space, size, size); g.drawRect(x*size+space, (y+2)*size+space, size, size); g.drawRect((x+1)*size+space, (y+2)*size+space, size, size); } //繪制提示圖形 size=(int)(size/1.5); if(typeO==0) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(xO+size, yO, size, size); g.fillRect(xO+size*2, yO, size, size); g.fillRect(xO+size*3, yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(xO+size, yO, size, size); g.drawRect(xO+size*2, yO, size, size); g.drawRect(xO+size*3, yO, size, size); } if(typeO==1) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.fillRect(xO, 2*size+yO, size, size); g.fillRect(xO, 3*size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(xO, size+yO, size, size); g.drawRect(xO, 2*size+yO, size, size); g.drawRect(xO, 3*size+yO, size, size); } //圖形二,四種形態 if(typeO==2) { g.setColor(colorO); g.fillRect(size+xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.fillRect(2*size+xO, size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(size+xO, yO, size, size); g.drawRect(xO, size+yO, size, size); g.drawRect(size+xO, size+yO, size, size); g.drawRect(2*size+xO, size+yO, size, size); } if(typeO==3) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.fillRect(xO, 2*size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(xO, size+yO, size, size); g.drawRect(size+xO, size+yO, size, size); g.drawRect(xO, 2*size+yO, size, size); } if(typeO==4) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(size+xO, yO, size, size); g.fillRect(2*size+xO, yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(size+xO, yO, size, size); g.drawRect(2*size+xO, yO, size, size); g.drawRect(size+xO, size+yO, size, size); } if(typeO==5) { g.setColor(colorO); g.fillRect(size+xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.fillRect(size+xO, 2*size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(size+xO, yO, size, size); g.drawRect(xO, size+yO, size, size); g.drawRect(size+xO, size+yO, size, size); g.drawRect(size+xO, 2*size+yO, size, size); } //圖形三,四種形態 if(typeO==6) { g.setColor(colorO); g.fillRect(size+xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(size+xO, yO, size, size); g.drawRect(xO, size+yO, size, size); g.drawRect(size+xO, size+yO, size, size); } if(typeO==7) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(xO, size+yO, size, size); g.drawRect(size+xO, size+yO, size, size); } if(typeO==8) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(size+xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(size+xO, yO, size, size); g.drawRect(xO, size+yO, size, size); } if(typeO==9) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(size+xO, yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(size+xO, yO, size, size); g.drawRect(size+xO, size+yO, size, size); } //圖形四,一種形態 if(typeO==10) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(size+xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(size+xO, yO, size, size); g.drawRect(xO, size+yO, size, size); g.drawRect(size+xO, size+yO, size, size); } //圖形五,三種形態 if(typeO==11) { g.setColor(colorO); g.fillRect(2*size+xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.fillRect(2*size+xO, size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(2*size+xO, yO, size, size); g.drawRect(xO, size+yO, size, size); g.drawRect(size+xO, size+yO, size, size); g.drawRect(2*size+xO, size+yO, size, size); } if(typeO==12) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(size+xO, yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.fillRect(size+xO, 2*size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(size+xO, yO, size, size); g.drawRect(size+xO, size+yO, size, size); g.drawRect(size+xO, 2*size+yO, size, size); } if(typeO==13) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(size+xO, yO, size, size); g.fillRect(2*size+xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(size+xO, yO, size, size); g.drawRect(2*size+xO, yO, size, size); g.drawRect(xO, size+yO, size, size); } if(typeO==14) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.fillRect(xO, 2*size+yO, size, size); g.fillRect(size+xO, 2*size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(xO, size+yO, size, size); g.drawRect(xO, 2*size+yO, size, size); g.drawRect(size+xO, 2*size+yO, size, size); } //圖形六,三種形態 if(typeO==15) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.fillRect(2*size+xO, size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(xO, size+yO, size, size); g.drawRect(size+xO, size+yO, size, size); g.drawRect(2*size+xO, size+yO, size, size); } if(typeO==16) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(size+xO, yO, size, size); g.fillRect(xO, size+yO, size, size); g.fillRect(xO, 2*size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(size+xO, yO, size, size); g.drawRect(xO, size+yO, size, size); g.drawRect(xO, 2*size+yO, size, size); } if(typeO==17) { g.setColor(colorO); g.fillRect(xO, yO, size, size); g.fillRect(size+xO, yO, size, size); g.fillRect(2*size+xO, yO, size, size); g.fillRect(2*size+xO, size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(xO, yO, size, size); g.drawRect(size+xO, yO, size, size); g.drawRect(2*size+xO, yO, size, size); g.drawRect(2*size+xO, size+yO, size, size); } if(typeO==18) { g.setColor(colorO); g.fillRect(size+xO, yO, size, size); g.fillRect(size+xO, size+yO, size, size); g.fillRect(xO, 2*size+yO, size, size); g.fillRect(size+xO, 2*size+yO, size, size); g.setColor(Color.BLACK); g.drawRect(size+xO, yO, size, size); g.drawRect(size+xO, size+yO, size, size); g.drawRect(xO, 2*size+yO, size, size); g.drawRect(size+xO, 2*size+yO, size, size); } } } } }
方塊及相關事件設計類
/* * 方塊 */ public class Diamonds { private int x; //坐標x private int y; //坐標y private Color color; //顏色 private int type; //類型 Random rm = new Random(); private boolean status=true;//狀態 private int width; public Diamonds() { super(); // TODO Auto-generated constructor stub } //方塊初始化 public Diamonds(int width) { super(); this.width = width; this.x = rm.nextInt(width-3); this.y = 0; //this.color = Color.GREEN; this.color = new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255)); this.type = rm.nextInt(16); } //向左移動 public void left(Map map) { int[][]map_xy = map.getMap(); if(x!=0) { switch(type){ case 0:if(map_xy[x-1][y]==0) {x--;} break; case 1:if(map_xy[x-1][y]==0 && map_xy[x-1][y+1]==0 && map_xy[x-1][y+2]==0 && map_xy[x-1][y+3]==0) {x--;} break; case 2:if(map_xy[x][y]==0 && map_xy[x-1][y+1]==0) {x--;} break; case 3:if(map_xy[x-1][y]==0 && map_xy[x-1][y+1]==0 && map_xy[x-1][y+2]==0) {x--;} break; case 4:if(map_xy[x-1][y]==0 && map_xy[x][y+1]==0) {x--;} break; case 5:if(map_xy[x][y]==0 && map_xy[x-1][y+1]==0 && map_xy[x][y+2]==0) {x--;} break; case 6:if(map_xy[x][y]==0 && map_xy[x-1][y+1]==0) {x--;} break; case 7:if(map_xy[x-1][y]==0 && map_xy[x-1][y+1]==0) {x--;} break; case 8:if(map_xy[x-1][y]==0 && map_xy[x-1][y+1]==0) {x--;} break; case 9:if(map_xy[x-1][y]==0 && map_xy[x][y+1]==0) {x--;} break; case 10:if(map_xy[x-1][y]==0 && map_xy[x-1][y+1]==0) {x--;} break; case 11:if(map_xy[x+1][y]==0 && map_xy[x-1][y+1]==0) {x--;} break; case 12:if(map_xy[x-1][y]==0 && map_xy[x][y+1]==0 && map_xy[x][y+2]==0) {x--;} break; case 13:if(map_xy[x-1][y]==0 && map_xy[x-1][y+1]==0) {x--;} break; case 14:if(map_xy[x-1][y]==0 && map_xy[x-1][y+1]==0 && map_xy[x-1][y+2]==0) {x--;} break; case 15:if(map_xy[x-1][y]==0 && map_xy[x-1][y+1]==0) {x--;} break; case 16:if(map_xy[x-1][y]==0 && map_xy[x-1][y+1]==0 && map_xy[x-1][y+2]==0) {x--;} break; case 17:if(map_xy[x-1][y]==0 && map_xy[x+1][y+1]==0) {x--;} break; case 18:if(map_xy[x][y]==0 && map_xy[x][y+1]==0 && map_xy[x-1][y+2]==0) {x--;} break; } } } //向右移動 public void right(Map map) { int[][]map_xy = map.getMap(); switch(type) { case 0: if(x<width-4 && map_xy[x+4][y]==0) {x++;}break; case 1: if(x<width-1 && map_xy[x+1][y]==0 && map_xy[x+1][y+1]==0 && map_xy[x+1][y+2]==0 && map_xy[x+1][y+3]==0) {x++;}break; case 2: if(x<width-3 && map_xy[x+2][y]==0 && map_xy[x+3][y+1]==0) {x++;}break; case 3: if(x<width-2 && map_xy[x+1][y]==0 && map_xy[x+2][y+1]==0 && map_xy[x+1][y+2]==0) {x++;}break; case 4: if(x<width-3 && map_xy[x+3][y]==0 && map_xy[x+2][y+1]==0) {x++;}break; case 5: if(x<width-2 && map_xy[x+2][y]==0 && map_xy[x+2][y+1]==0 && map_xy[x+2][y+2]==0) {x++;}break; case 6: if(x<width-2 && map_xy[x+2][y]==0 && map_xy[x+2][y+1]==0) {x++;}break; case 7: if(x<width-2 && map_xy[x+1][y]==0 && map_xy[x+2][y+1]==0) {x++;}break; case 8: if(x<width-2 && map_xy[x+2][y]==0 && map_xy[x+1][y+1]==0) {x++;}break; case 9: if(x<width-2 && map_xy[x+2][y]==0 && map_xy[x+2][y+1]==0) {x++;}break; case 10: if(x<width-2 && map_xy[x+2][y]==0 && map_xy[x+2][y+1]==0) {x++;}break; case 11: if(x<width-3 && map_xy[x+3][y]==0 && map_xy[x+3][y+1]==0) {x++;}break; case 12: if(x<width-2 && map_xy[x+2][y]==0 && map_xy[x+2][y+1]==0 && map_xy[x+2][y+2]==0) {x++;}break; case 13: if(x<width-3 && map_xy[x+3][y]==0 && map_xy[x+1][y+1]==0) {x++;}break; case 14: if(x<width-2 && map_xy[x+1][y]==0 && map_xy[x+1][y+1]==0 && map_xy[x+2][y+2]==0) {x++;}break; case 15: if(x<width-3 && map_xy[x+1][y]==0 && map_xy[x+3][y+1]==0) {x++;}break; case 16: if(x<width-2 && map_xy[x+2][y]==0 && map_xy[x+1][y+1]==0 && map_xy[x+1][y+2]==0) {x++;}break; case 17: if(x<width-3 && map_xy[x+3][y]==0 && map_xy[x+3][y+1]==0) {x++;}break; case 18: if(x<width-2 && map_xy[x+2][y]==0 && map_xy[x+2][y+1]==0 && map_xy[x+2][y+2]==0) {x++;}break; } } //向下移動 public void movement(Map map){ int[][]map_xy = map.getMap(); Color[][]color_xy = map.getColor(); //向下移動一格 switch(type) { case 0: if(map_xy[x][y+1]==0 && map_xy[x+1][y+1]==0 && map_xy[x+2][y+1]==0 && map_xy[x+3][y+1]==0){ y+=1; }else { map_xy[x][y]=1; map_xy[x+1][y]=1; map_xy[x+2][y]=1; map_xy[x+3][y]=1; color_xy[x][y]=color; color_xy[x+1][y]=color; color_xy[x+2][y]=color; color_xy[x+3][y]=color; status=false; } break; case 1: if(map_xy[x][y+4]==0){ y+=1; }else { map_xy[x][y]=1; map_xy[x][y+1]=1; map_xy[x][y+2]=1; map_xy[x][y+3]=1; color_xy[x][y]=color; color_xy[x][y+1]=color; color_xy[x][y+2]=color; color_xy[x][y+3]=color; status=false; } break; case 2: if(map_xy[x][y+2]==0 && map_xy[x+1][y+2]==0 && map_xy[x+2][y+2]==0) { y+=1; }else { map_xy[x+1][y]=1; map_xy[x][y+1]=1; map_xy[x+1][y+1]=1; map_xy[x+2][y+1]=1; color_xy[x+1][y]=color; color_xy[x][y+1]=color; color_xy[x+1][y+1]=color; color_xy[x+2][y+1]=color; status=false; } break; case 3: if(map_xy[x][y+3]==0 && map_xy[x+1][y+2]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x][y+1]=1; map_xy[x+1][y+1]=1; map_xy[x][y+2]=1; color_xy[x][y]=color; color_xy[x][y+1]=color; color_xy[x+1][y+1]=color; color_xy[x][y+2]=color; status=false; } break; case 4: if(map_xy[x][y+1]==0 && map_xy[x+1][y+2]==0 && map_xy[x+2][y+1]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x+1][y]=1; map_xy[x+2][y]=1; map_xy[x+1][y+1]=1; color_xy[x][y]=color; color_xy[x+1][y]=color; color_xy[x+2][y]=color; color_xy[x+1][y+1]=color; status=false; } break; case 5: if(map_xy[x][y+2]==0 && map_xy[x+1][y+3]==0) { y+=1; }else { map_xy[x+1][y]=1; map_xy[x][y+1]=1; map_xy[x+1][y+1]=1; map_xy[x+1][y+2]=1; color_xy[x+1][y]=color; color_xy[x][y+1]=color; color_xy[x+1][y+1]=color; color_xy[x+1][y+2]=color; status=false; } break; case 6: if(map_xy[x][y+2]==0 && map_xy[x+1][y+2]==0) { y+=1; }else { map_xy[x+1][y]=1; map_xy[x][y+1]=1; map_xy[x+1][y+1]=1; color_xy[x+1][y]=color; color_xy[x][y+1]=color; color_xy[x+1][y+1]=color; status=false; } break; case 7: if(map_xy[x][y+2]==0 && map_xy[x+1][y+2]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x][y+1]=1; map_xy[x+1][y+1]=1; color_xy[x][y]=color; color_xy[x][y+1]=color; color_xy[x+1][y+1]=color; status=false; } break; case 8: if(map_xy[x][y+2]==0 && map_xy[x+1][y+1]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x+1][y]=1; map_xy[x][y+1]=1; color_xy[x][y]=color; color_xy[x+1][y]=color; color_xy[x][y+1]=color; status=false; } break; case 9: if(map_xy[x][y+1]==0 && map_xy[x+1][y+2]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x+1][y]=1; map_xy[x+1][y+1]=1; color_xy[x][y]=color; color_xy[x+1][y]=color; color_xy[x+1][y+1]=color; status=false; } break; case 10: if(map_xy[x][y+2]==0 && map_xy[x+1][y+2]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x+1][y]=1; map_xy[x][y+1]=1; map_xy[x+1][y+1]=1; color_xy[x][y]=color; color_xy[x+1][y]=color; color_xy[x][y+1]=color; color_xy[x+1][y+1]=color; status=false; } break; case 11: if(map_xy[x][y+2]==0 && map_xy[x+1][y+2]==0 && map_xy[x+2][y+2]==0) { y+=1; }else { map_xy[x+2][y]=1; map_xy[x][y+1]=1; map_xy[x+1][y+1]=1; map_xy[x+2][y+1]=1; color_xy[x+2][y]=color; color_xy[x][y+1]=color; color_xy[x+1][y+1]=color; color_xy[x+2][y+1]=color; status=false; } break; case 12: if(map_xy[x][y+1]==0 && map_xy[x+1][y+3]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x+1][y]=1; map_xy[x+1][y+1]=1; map_xy[x+1][y+2]=1; color_xy[x][y]=color; color_xy[x+1][y]=color; color_xy[x+1][y+1]=color; color_xy[x+1][y+2]=color; status=false; } break; case 13: if(map_xy[x][y+2]==0 && map_xy[x+1][y+1]==0 && map_xy[x+2][y+1]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x+1][y]=1; map_xy[x+2][y]=1; map_xy[x][y+1]=1; color_xy[x][y]=color; color_xy[x+1][y]=color; color_xy[x+2][y]=color; color_xy[x][y+1]=color; status=false; } break; case 14: if(map_xy[x][y+3]==0 && map_xy[x+1][y+3]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x][y+1]=1; map_xy[x][y+2]=1; map_xy[x+1][y+2]=1; color_xy[x][y]=color; color_xy[x][y+1]=color; color_xy[x][y+2]=color; color_xy[x+1][y+2]=color; status=false; } break; case 15: if(map_xy[x][y+2]==0 && map_xy[x+1][y+2]==0 && map_xy[x+2][y+2]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x][y+1]=1; map_xy[x+1][y+1]=1; map_xy[x+2][y+1]=1; color_xy[x][y]=color; color_xy[x][y+1]=color; color_xy[x+1][y+1]=color; color_xy[x+2][y+1]=color; status=false; } break; case 16: if(map_xy[x][y+3]==0 && map_xy[x+1][y+1]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x+1][y]=1; map_xy[x][y+1]=1; map_xy[x][y+2]=1; color_xy[x][y]=color; color_xy[x+1][y]=color; color_xy[x][y+1]=color; color_xy[x][y+2]=color; status=false; } break; case 17: if(map_xy[x][y+1]==0 && map_xy[x+1][y+1]==0 && map_xy[x+2][y+2]==0) { y+=1; }else { map_xy[x][y]=1; map_xy[x+1][y]=1; map_xy[x+2][y]=1; map_xy[x+2][y+1]=1; color_xy[x][y]=color; color_xy[x+1][y]=color; color_xy[x+2][y]=color; color_xy[x+2][y+1]=color; status=false; } break; case 18: if(map_xy[x][y+3]==0 && map_xy[x+1][y+3]==0) { y+=1; }else { map_xy[x+1][y]=1; map_xy[x+1][y+1]=1; map_xy[x][y+2]=1; map_xy[x+1][y+2]=1; color_xy[x+1][y]=color; color_xy[x+1][y+1]=color; color_xy[x][y+2]=color; color_xy[x+1][y+2]=color; status=false; } break; } map.setMap(map_xy); map.setColor(color_xy); } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } public int getType() { return type; } public void setType(int type) { this.type = type; } public boolean isStatus() { return status; } public void setStatus(boolean status) { this.status = status; } }
1. 簡單,只需理解基本的概念,就可以編寫適合于各種情況的應用程序;2. 面向對象;3. 分布性,Java是面向網絡的語言;4. 魯棒性,java提供自動垃圾收集來進行內存管理,防止程序員在管理內存時容易產生的錯誤。;5. 安全性,用于網絡、分布環境下的Java必須防止病毒的入侵。6. 體系結構中立,只要安裝了Java運行時系統,就可在任意處理器上運行。7. 可移植性,Java可以方便地移植到網絡上的不同機器。8.解釋執行,Java解釋器直接對Java字節碼進行解釋執行。
看完上述內容,你們掌握Java怎樣實現經典俄羅斯方塊游戲的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。