java仿windows紙牌游戲設計

openkk 12年前發布 | 44K 次閱讀 Java Java開發

下面是運行截圖
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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!