手把手帶你用Java打造一款對對碰游戲之一
一、項目背景
隨著移動互聯網技術的快速發展,智能手機、智能平板的興起和不斷的普及,我國移動游戲行業迅速發展,在游戲產業中占據舉足輕重的地位。對對碰游戲是一款經典的消除類游戲,玩家只要點擊圖案來使圖案之間互換位置,連成3個或3個以上圖案來消除,得到相應的分數。
二、項目目標
設計一款基于JAVA的游戲,顯示64 (8*8 )個動物圖片,游戲開始時,進入100s倒數,用戶點擊相應的動物圖片,如果有三個或以上相同,則成功消除,并每個得10分。
三、游戲項目設定
1.交換:玩家選擇兩個橫排或豎排相鄰的動物頭像進行位置交換,如果位置交換成功則消去動物頭像,否則不能位置交換。
2.消去:玩家選擇兩個橫排或豎排相鄰的動物頭像進行位置交換,互換后如果橫排或豎排s上有超過3個相同的動物頭像,則消去這幾個相同的動物頭像,消去動物頭像后的空格由上面的動物頭像掉下來補齊,每次消去動物頭像,玩家可以獲得相應的分數。
3.連鎖:玩家消去動物頭像后,上面的動物頭像掉下來補齊,如果這時游戲池里有連續相同的3個或3個以上動物頭像,則可以消去這些動物頭像。消去后的空格由上面的動物頭像掉下來補齊,繼續觸發連鎖,直到沒有連鎖條件為止。
四、項目實施
使用eclipse軟件開發,先上效果圖,如下圖所示??梢钥吹皆诮缑嫔嫌锌梢杂虚_始游戲按鈕、分數、時間進度條、退出游戲的功能。
接下來,小編帶大家進行具體的實現,具體的實現步驟如下。
(一)首先實現窗體界面
1.代碼如下所示
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- DuiDuiPeng d = new DuiDuiPeng();
- d.setTitle("對對碰游戲");
- d.setSize(700, 550);
- d.setVisible(true);
- d.setResizable(false);
- d.setLocationRelativeTo(null);
- }
2.使用new關鍵字創建DuiDuiPeng類
setTitle表示設置界面的標題;
setSize(寬,高)表示窗體大小;
setVisible(true或false)表示窗體是否可見;
setResizable(true或false)表示窗體是否可以由用戶調整大小;
setLocationRelativeTo()表示設置窗口相對于指定組件的位置。
效果圖如下所示:
(二)添加開始按鈕、分數、時間、退出按鈕
1.創建JFrame實例、JPanel面板,然后把面板添加到JFrame中。
2.創建開始按鈕(JButton)、分數標簽(JLabel)、文本框(JTextField)、進度條(JProgressBar)、退出按鈕(JButton)。
3.進度條(JProgressBar)是一種以可視化形式顯示某些任務進度的組件。進度條可顯示此百分比的文本表示形式。
4.進度條常用方法:
getMaximum() 方法返回進度條最大值;
getMinimum() 方法返回進度條最小值 ;
getPercentComplete() 返回進度條的完成百分比;
getString() 方法返回當前進度的 String 表示形式;
getValue() 方式返回進度條的當前 value;
setBorderPainted(boolean b) 設置 borderPainted 屬性,如果進度條應該繪制其邊框,則此屬性為 true;
setIndeterminate(boolean newValue) 設置進度條的 indeterminate 屬性,該屬性確定進度條處于確定模式中還 是處于不確定模式中;
setMaximum(int a) 設置進度條的最大值為 a;
setMinimum(int a) 設置進度條的最小值為 a;
setOrientation(int newOrientation) 設置進度條的方向為 newOrientation;
setString(String s) 設置進度字符串的值;
setStringPainted(boolean b) 設置 stringPainted 屬性的值,該屬性確定進度條是否應該顯示進度字符串;
setValue(int a) 設置進度條的當前值為 a;
代碼如下所示:
- public class DuiDuiPeng extends JFrame {
- private JPanel panel01 = new JPanel();
- private JButton btn_start = new JButton("開始游戲");
- private JLabel label01 = new JLabel("分數");
- private JTextField text_score = new JTextField(10);
- private JLabel label02 = new JLabel("時間");
- private JProgressBar progress = new JProgressBar();
- private JButton btn_exit = new JButton("退出");
(三)添加8*8動物矩陣
1.準備好7種動物圖片;
效果圖如下圖:
2.開始添加8*8動物矩陣JPanel、JButton、ImageIcon等,添加DuiDuiPeng類的成員變量。
代碼如下所示:
- private JPanel panel02 = new JPanel();
- private JButton button[][] = new JButton[8][8];
- private int animal[][] = new int[8][8];//0貓 1牛 2雞 3狐貍 4青蛙 5猴子 6熊貓
- private ImageIcon icon[] = new ImageIcon[]{
- new ImageIcon("image//cat.png"),
- new ImageIcon("image//cattle.png"),
- new ImageIcon("image//chicken.png"),
- new ImageIcon("image//fox.png"),
- new ImageIcon("image//frog.png"),
- new ImageIcon("image//monkey.png"),
- new ImageIcon("image//panda.png"),
- };//7種動物的圖片
(四)顯示開始按鈕、分數標簽、文本框、進度條、退出按鈕
- text_score.setText("0");
- text_score.setEditable(false);
- progress.setMinimum(0);//進度值最小為0
- progress.setMaximum(100);//進度值最大為100
- progress.setStringPainted(true);//設置 stringPainted 屬性的值,該屬性確定進度條是否應該顯示進度字符串
- panel01.add(btn_start);
- panel01.add(label01);
- panel01.add(text_score);
- panel01.add(label02);
- panel01.add(progress);
- panel01.add(btn_exit);
- this.setLayout(new BorderLayout());
- this.add(panel01,BorderLayout.NORTH);
效果如下圖所示
(五)顯示8X8動物矩陣,完成界面設計
可以看到游戲池種第一個和第二表格的顏色不一樣,第三又和第一個顏色是一樣的,我們可以給一個判斷條件,如果表格為奇數的顏色是橙色,如果表格為偶數的顏色是黃色,最后我們設置它的背景顏色為橙色。
效果圖如下所示
代碼如下圖所示
- panel02.setLayout(new GridLayout(8,8,2,2));
- for(int i=0;i<8;i++){//行
- for(int j=0;j<8;j++){//列
- int temp = (int)(Math.random()*7);//0-6
- button[i][j] = new JButton(icon[temp]);
- if((i+j)%2==0){
- button[i][j].setBackground(new Color(255,222,173));
- }else{
- button[i][j].setBackground(new Color(255,246,143));
- }
- animal[i][j]=temp;
- panel02.add(button[i][j]);
- button[i][j].setEnabled(false);
- button[i][j].addActionListener(my);
- }
- }
- this.add(panel02,BorderLayout.CENTER);
setOpaque設置控件是否透明的。true表示不透明,false表示透明。
- panel01.setOpaque(false);
- panel02.setOpaque(false);
- this.getContentPane().setBackground(Color.orange);
以上的內容主要完成游戲的界面設計,實現的功能請看第二篇《Java實現對對碰游戲(下篇)》。
五、總結
1.本文主要介紹了JLabel、JButton、JPanel、ImageIcon、JTextField、JProgressBar等組件的基本使用,介紹了進度條(JProgressBar)常用的方法。
2.使用二維數組實現88動物矩陣,88動物矩陣第一個單元格和第二個單元格的顏色不一樣,第三個單元格和第一個單元格顏色一樣。用奇數單元格設置為橙色,偶數單元格設置為黃色。
3.本文是一個小游戲案例,代碼相對來說并不復雜,希望可以幫助到你。
本文轉載自微信公眾號「 Java進階學習交流 」,可以通過以下二維碼關注。轉載本文請聯系 Java進階學習交流 公眾號。