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