java仿windows紙牌游戲設計
下面是運行截圖
主要用到的java api
HashMap, list , MouseListener ,MouseMoitionListener,其他就沒什么了,主要是規則的實現
package com; import java.awt.Color; import java.awt.Container; import java.util.List; import java.awt.Point; import java.util.ArrayList; import java.util.HashMap; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; public class CardMain extends JFrame{ public Container container=null; HashMap<Point, Card> table =new HashMap<Point, Card>();//專門裝桌面上的牌 List<Card> list = new ArrayList<Card>();//裝未發的牌堆 List<Card> dragList=new ArrayList<Card>();//裝當前正在移動的紙牌 這樣設計是為了解決某個bug Card border1[]=new Card[6]; //第一排白框 Card border2[]=new Card[7];//第二排白框 JLabel card[]=new Card[52];//所有卡片 int min=10,max=20; public CardMain(){ Init();//初始化 SetMenu();//創建菜單 InitCards();//發牌 InitBorder();//設置邊框 this.setVisible(true); } //得到隨機數 public void getRondom(){ JLabel temp=null; for(int i=0;i<52;i++) { int a = (int) (Math.random() * 52); int b = (int) (Math.random() * 52); temp = card[a]; card[a] = card[b]; card[b] = temp; } } //發牌 public void InitCards(){ for(int i=0;i<4;i++) { for(int j=0;j<13;j++) { card[i*13+j]=new Card(this,(i+1)+"-"+(j+1),"front"); } } getRondom();//打亂順序 //先發7堆,并且每一堆最上面一章是翻開的 int count=0; Point point=new Point(); for(int k=0;k<24;k++) { ((Card)card[count]).turnRear(); point=new Point(); point.x=600; point.y=30; card[count].setLocation(point); list.add((Card)card[count]); container.add(card[count]); count++; } for(int i=0;i<7;i++) { for(int j=i;j>=0;j--) { if(j<i) { ((Card)card[count]).turnRear(); }else { ((Card)card[count]).canmove=true; } point=new Point(); point.x=50+100*i; point.y=180+min*j; card[count].setLocation(point); table.put(point, ((Card)card[count])); container.add(card[count]); count++; } } } //畫邊框 public void InitBorder(){ //4個A for(int i=0;i<6;i++) { border1[i]=new Card(this); border1[i].setBorder(BorderFactory.createLineBorder(Color.white)); if(i<4) { border1[i].setBounds(50+100*i, 30,71,96); }else { border1[i].setBounds(600+(i-4)*100, 30,71,96); } container.add(border1[i]); } //7列 for(int i=0;i<7;i++) { border2[i]=new Card(this); border2[i].setBorder(BorderFactory.createLineBorder(Color.white)); border2[i].setBounds(50+100*i, 180,71,96); container.add(border2[i]); } } //初始化窗體 public void Init(){ this.setTitle("經典紙牌游戲---by 小柒"); this.setSize(850, 650); setResizable(false); setLocationRelativeTo(getOwner()); container=this.getContentPane(); container.setLayout(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); container.setBackground(new Color(0, 112, 26)); } //創建菜單 public void SetMenu(){ JMenuBar jMenuBar= new JMenuBar(); JMenu game = new JMenu("游戲"); JMenu help = new JMenu("幫助"); JMenuItem start = new JMenuItem("新游戲"); JMenuItem exit = new JMenuItem("退出"); JMenuItem about = new JMenuItem("關于"); game.add(start); game.add(exit); help.add(about); jMenuBar.add(game); jMenuBar.add(help); this.setJMenuBar(jMenuBar); } //開始游戲Main方法 public static void main(String []args){ new CardMain(); } }
本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!