您好,登錄后才能下訂單哦!
Java怎樣實(shí)現(xiàn)經(jīng)典俄羅斯方塊游戲,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
俄羅斯方塊是一個最初由阿列克謝帕吉特諾夫在蘇聯(lián)設(shè)計(jì)和編程的益智類視頻游戲。
《俄羅斯方塊》的基本規(guī)則是移動、旋轉(zhuǎn)和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。
用java語言實(shí)現(xiàn),采用了swing技術(shù)進(jìn)行了界面化處理,設(shè)計(jì)思路用了面向?qū)ο笏枷搿?/p>
主要需求
由小方塊組成的不同形狀的板塊陸續(xù)從屏幕上方落下來,玩家通過調(diào)整板塊的位置和方向,使它們在屏幕底部拼出完整的一條或幾條。這些完整的橫條會隨即消失,給新落下來的板塊騰出空間,與此同時,玩家得到分?jǐn)?shù)獎勵。沒有被消除掉的方塊不斷堆積起來,一旦堆到屏幕頂端,玩家便告輸,游戲結(jié)束。
1、用鍵盤操作,"←"左移一格;"→"右移一格;"↑"旋轉(zhuǎn)方塊;↓ 方塊丟下(方塊下落到底)
2、一旦堆到屏幕頂端,游戲結(jié)束
3、設(shè)計(jì)不同的方塊
4、設(shè)計(jì)方塊下落的速度
5、設(shè)計(jì)分?jǐn)?shù)系統(tǒng)
游戲啟動頁
開始游戲
游戲結(jié)束
窗口設(shè)計(jì)類
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; //游戲區(qū)域 private static int height_g = 22; // private static int size = 30; //方塊大小 private static int space= 10; //坐標(biāo)距邊界間隔 Map map = new Map(width_g,height_g);//地圖坐標(biāo) ArrayList <Diamonds> ds = new ArrayList<Diamonds>();//方塊數(shù)組 private boolean game=false; //游戲開始 private int flag = 0; //游戲狀態(tài)【暫停:0,繼續(xù):1】 private JLabel jl2; private JButton jb1; private int speed = 500; //速度 private int score = 0; //分?jǐn)?shù) 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; //重置游戲參數(shù) ds = new ArrayList<Diamonds>(); map = new Map(width_g,height_g); JOptionPane.showMessageDialog(new JFrame().getContentPane(), "游戲結(jié)束!\n您獲得【"+score+"】點(diǎn)分?jǐn)?shù)"); score=0; jl2.setText("分?jǐn)?shù): "+score); jb1.setEnabled(true); jb1.setText("重新開始"); }else { //消除判斷 score=map.dispel(score); jl2.setText("分?jǐn)?shù): "+score); //生成新方塊 Diamonds diamonds = new Diamonds(width_g); ds.add(diamonds); } } } repaint(); Thread.sleep(speed); } }catch(InterruptedException e) { e.printStackTrace(); } } //窗口加載 public void init() { //界面設(shè)置 this.setTitle("俄羅斯方塊"); //標(biāo)題 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); //標(biāo)簽 JLabel jl1 = new JLabel("俄羅斯方塊控制界面"); jl2 = new JLabel("分?jǐn)?shù): "+score); JLabel jl3 = new JLabel("游戲說明:"); //按鈕 jb1 = new JButton("游戲開始"); JButton jb2 = new JButton("難度選擇"); JButton jb3 = new JButton("繼續(xù)/暫停"); 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.點(diǎn)擊【游戲開始】按鈕開始游戲。" + "\n2.游戲中可隨時暫停,使用方向鍵可繼續(xù)游戲" + "\n3.用鍵盤操作,\"←\"左移一格;\"→\"右移一格;\"↑\"旋轉(zhuǎn)方塊;↓ 方塊丟下(方塊下落到底)",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)); //設(shè)置邊界 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) { //可能在轉(zhuǎn)換過程發(fā)生越界的解決辦法 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); } }); //暫停/繼續(xù) 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++) { // 繪制網(wǎng)格線,可注釋 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(); //繪制圖形 //圖形一,兩種形態(tài) 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); } //圖形二,四種形態(tài) 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); } //圖形三,四種形態(tài) 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); } //圖形四,一種形態(tài) 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); } //圖形五,三種形態(tài) 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); } //圖形六,三種形態(tài) 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); } //圖形二,四種形態(tài) 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); } //圖形三,四種形態(tài) 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); } //圖形四,一種形態(tài) 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); } //圖形五,三種形態(tài) 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); } //圖形六,三種形態(tài) 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); } } } } }
方塊及相關(guān)事件設(shè)計(jì)類
/* * 方塊 */ public class Diamonds { private int x; //坐標(biāo)x private int y; //坐標(biāo)y private Color color; //顏色 private int type; //類型 Random rm = new Random(); private boolean status=true;//狀態(tài) 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. 簡單,只需理解基本的概念,就可以編寫適合于各種情況的應(yīng)用程序;2. 面向?qū)ο螅?. 分布性,Java是面向網(wǎng)絡(luò)的語言;4. 魯棒性,java提供自動垃圾收集來進(jìn)行內(nèi)存管理,防止程序員在管理內(nèi)存時容易產(chǎn)生的錯誤。;5. 安全性,用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須防止病毒的入侵。6. 體系結(jié)構(gòu)中立,只要安裝了Java運(yùn)行時系統(tǒng),就可在任意處理器上運(yùn)行。7. 可移植性,Java可以方便地移植到網(wǎng)絡(luò)上的不同機(jī)器。8.解釋執(zhí)行,Java解釋器直接對Java字節(jié)碼進(jìn)行解釋執(zhí)行。
看完上述內(nèi)容,你們掌握J(rèn)ava怎樣實(shí)現(xiàn)經(jīng)典俄羅斯方塊游戲的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。