Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package kursProject;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Point;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.Date;
- import java.util.Random;
- import javax.swing.*;
- class polyLeft{
- boolean free = false;//true - если в данной ячейке , лежит карта. иначе false
- JButton btnE = new JButton();//своя, родная кнопка
- poly pp;//инфо о прикрепляемой карте
- }
- class polyRight{
- int q;
- int mast;//черви,ромбики,крести,пики
- JButton btnS = new JButton();
- }
- class poly{
- JButton btnM = new JButton();
- ImageIcon iconn;
- boolean coloR;
- int mast;
- int rang;
- int row;//i
- int line;
- int tikto(int kart){
- switch(kart){
- case 12:return 2;
- case 10:return 3;
- case 9:return 4;
- case 8:return 5;
- case 7:return 6;
- case 11:return 7;
- case 6:return 8;
- case 5:return 9;
- case 4:return 10;
- case 3:return 11;
- case 2:return 12;
- case 1:return 13;
- case 0:return 14;
- default: return -1;}
- }
- void whoo(int i,int j,int w){
- row = i;
- line = j;
- if(w < 13)//черви
- {
- coloR = true;
- mast = 0;
- rang = tikto(12-w);
- }
- if((12 < w) && (w < 26))//бубны
- {
- coloR = true;
- mast = 1;
- rang = tikto(25-w);
- }
- if((25< w) && (w < 39))//крести
- {
- coloR = false;
- mast = 2;
- rang = tikto(38-w);
- }
- if((38< w) && (w < 52))//пики
- {
- coloR = false;
- mast = 3;
- rang = tikto(51-w);
- }
- }
- }
- public class Soliter extends JPanel{
- static boolean costil;//при пересоздании класса, запускается конструктор Soliter -> с помощью этой переменной мы забудем об этой проблеме
- static JLayeredPane panel;//на эту панель собственно всё и добавляется от кнопок до лейблов(записей)
- static polyLeft btnHelp[] = new polyLeft[4];//переменная созданная для *вспомогательной* колоды
- static polyRight btnFinal[] = new polyRight[4];//переменная для *финальной* колоды
- static int nFinal = 0;//счётчик *сколько карт уже в *финальной* колоде*
- static JLabel UIinfo = new JLabel("карт осталось:52");//запись, в которую выводим *сколько осталось карт в игре*
- static int lastHelp;//возвращает индекс последней нажатой кнопки из *вспомогательной* колоды
- static poly btnMwho[][] = new poly[8][13];//характеристики карт(тип poly), всего 8 стопок и 13макс.в одной стопке
- static JButton zapac[] = new JButton[8];//кнопки,которые появляются после того, как в стопе станет 0 карт
- static String whoI = null;//переменная типа String, обращаясь к ней, можно узнать, по какому типу кнопок мы нажимали в последний раз
- static ImageIcon icon[] = new ImageIcon[53]; //массив картинок для карт
- static int endRow[] = {7,7,7,7,6,6,6,6};//характеристика каждого столбца(сколько сейчас в нём карт)
- static int mas[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
- 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,
- 38,39,40,41,42,43,44,45,46,47,48,49,50,51};//у нас всего 52 карты,изначально они не перемешаны
- static int lastI=0,lastJ=0;//предпоследний нажатый столбец/строчка
- static boolean click = false; //click - false означает, что первая карта не выбрана, true - выбрана
- static void addCard(int ot,int q,int from)//q - столбец в который переместим,ot - позиция по y карты принимающей
- {
- int p=0;
- if(from == 0)
- p = endRow[lastI] ;
- if(ot == p) p = ot + 1;
- if (endRow[lastI]-1 == 0 ) {zapac[lastI].setVisible(true);} else {zapac[lastI].setVisible(false);}
- for(int i = ot; i <p;i++ )
- {
- endRow[q]++;
- if(from == 0)
- btnMwho[q][endRow[q]-1] = btnMwho[lastI][i];
- else
- btnMwho[q][endRow[q]-1] = btnHelp[lastHelp].pp;
- btnMwho[q][endRow[q]-1].row = q;
- btnMwho[q][endRow[q]-1].line = endRow[q]-1;
- btnMwho[q][endRow[q]-1].btnM.setBackground(Color.WHITE);
- panel.add(btnMwho[q][endRow[q]-1].btnM,new Integer(btnMwho[q][endRow[q]-2].line + 10));
- btnMwho[q][endRow[q]-1].btnM.setBounds(30+100*q,200+endRow[q]*40-40,75,100);
- }
- for(int i = ot; i <p;i++ )
- {
- if(from == 0) endRow[lastI]--;
- btnMwho[lastI][endRow[lastI]] = null;
- }
- }
- static void createMenu(JFrame frame){
- JMenuBar menuBar = new JMenuBar();
- JMenu menu1 = new JMenu("меню");
- JMenuItem s1 = new JMenuItem("новая игра");
- JMenuItem s2 = new JMenuItem("справка");
- JMenuItem s3 = new JMenuItem("выход");
- s1.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent event) {
- Soliter s1 = new Soliter();
- String arg[] = new String[2];
- costil = false;
- endRow[0]= endRow[1] = endRow[2] = endRow[3] = 7;
- endRow[4]= endRow[5] = endRow[6] = endRow[7] = 6;
- frame.dispose();
- s1.main(arg);}});
- s2.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent event) {
- JFrame owner = new JFrame("Cghfdrf");
- owner.add(new JLabel(" курсовой проект сделалалала"),BorderLayout.CENTER);
- JButton ok = new JButton("ok");
- ok.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event) {owner.setVisible(false);}});
- JPanel panel = new JPanel();
- panel.add(ok);
- owner.add(panel, BorderLayout.SOUTH);
- owner.setSize(260, 160);
- owner.setVisible(true);}});
- s3.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent event) {System.exit(0);}});
- menu1.add(s1);
- menu1.add(s2);
- menu1.add(s3);
- menuBar.add(menu1);
- frame.setJMenuBar(menuBar);
- }
- static void createPole(){
- Point xx2 = new Point(20,480);//x, x2
- String nameKart[] = {"черви","ромбики","крести","пики"};
- for(int i= 0; i < 4; i++)
- {
- btnHelp[i]= new polyLeft();
- btnHelp[i].btnE.setLocation(xx2.x,40);
- btnHelp[i].btnE.setBounds(xx2.x,40,75,100);
- xx2.x = xx2.x+ 70 + 20;
- btnHelp[i].btnE.setBackground(Color.WHITE);
- btnHelp[i].btnE.addActionListener(new leftColod(i));
- panel.add(btnHelp[i].btnE);
- btnFinal[i] = new polyRight();
- btnFinal[i].mast = i;
- btnFinal[i].q = 14;
- btnFinal[i].btnS.setLocation(xx2.y,40);
- btnFinal[i].btnS.setBounds(xx2.y,40,75,100);
- xx2.y = xx2.y + 70 + 20;
- btnFinal[i].btnS.setBackground(Color.WHITE);
- btnFinal[i].btnS.addActionListener(new rightColod(i));
- panel.add(btnFinal[i].btnS);
- JLabel gdeChervitd = new JLabel(nameKart[i]);
- gdeChervitd.setBounds(xx2.y-75, 0, 50, 50);
- panel.add(gdeChervitd);
- }
- }
- static void blockRow(){
- if (endRow[lastI] == 0 ) {zapac[lastI].setVisible(true);} else {zapac[lastI].setVisible(false);}
- for(int i = 0 ; i < 8;i++)
- {
- for(int j = endRow[i]-1 ; j > 0 ; j--)
- {
- if(((btnMwho[i][j-1].rang - btnMwho[i][j].rang) == 1) && (btnMwho[i][j].coloR != btnMwho[i][j-1].coloR))
- {
- btnMwho[i][j-1].btnM.setEnabled(true);
- btnMwho[i][j].btnM.setEnabled(true);
- }
- else break;
- }
- if(endRow[i]-1 >= 0) btnMwho[i][endRow[i]-1].btnM.setEnabled(true);
- }
- }
- static void createMainPole()
- {
- int k = 0;
- int st = 30;
- Point origin = new Point(30, 0);
- for(int i = 0 ; i < 8 ; i ++)
- {
- zapac[i] = new JButton();
- zapac[i].setIcon(icon[52]);
- zapac[i].setBounds(st,200,75,100);
- zapac[i].addActionListener(new zap(i));
- zapac[i].setVisible(false);
- panel.add(zapac[i]);
- st +=100;
- origin.y = 200;
- for(int j = 0; j < endRow[i];j++)
- {
- btnMwho[i][j] = new poly();
- btnMwho[i][j].btnM = new JButton();
- btnMwho[i][j].iconn = icon[mas[k]];
- btnMwho[i][j].btnM.setIcon(btnMwho[i][j].iconn);//устанавливаем картинку на кнопку
- btnMwho[i][j].whoo(i,j,mas[k]);
- btnMwho[i][j].btnM.addActionListener(new MoveAction(btnMwho[i][j]));
- btnMwho[i][j].btnM.setBounds(origin.x,origin.y,75,100);//расположение кнопки
- if(endRow[i]-1 != j)
- btnMwho[i][j].btnM.setEnabled(false);
- panel.add(btnMwho[i][j].btnM,new Integer(j));
- k++;
- origin.y+=40;
- }
- origin.x += 100;
- }
- UIinfo.setBounds(750, 530, 100, 100);
- panel.add(UIinfo);
- blockRow();
- }
- static void generIcon(){
- for(int i = 0 ; i <10;i++)
- {
- icon[i] = new ImageIcon("src/image/"+(i+2)+"S.png");
- icon[i+13] = new ImageIcon("src/image/"+(i+2)+"R.png");
- icon[i+26] = new ImageIcon("src/image/"+(i+2)+"K.png");
- icon[i+39] = new ImageIcon("src/image/"+(i+2)+"L.png");
- }
- String nameKart[] = {"j","q","k","t"};
- for(int i = 0;i<4;i++)
- {
- icon[i+9] = new ImageIcon("src/image/"+nameKart[i]+"S.png");
- icon[i+22] = new ImageIcon("src/image/"+nameKart[i]+"R.png");
- icon[i+35] = new ImageIcon("src/image/"+nameKart[i]+"K.png");
- icon[i+48] = new ImageIcon("src/image/"+nameKart[i]+"L.png");
- }
- icon[52] = new ImageIcon("src/image/pusto.jpg");
- }
- public static void reshuffle(int[] pack) {
- if(pack != null) {
- int length = pack.length;
- Random generator = new Random(new Date().getTime());
- for(int i = 0; i < length; i++) {
- int newPos = generator.nextInt(length);
- int curCard = pack[i];
- pack[i] = pack[newPos];
- pack[newPos] = curCard;
- if(i%(length/4) == 0) {
- int pause = generator.nextInt(20);
- try {
- Thread.currentThread().sleep(pause);
- }
- catch (InterruptedException ex) {}
- generator.setSeed(new Date().getTime());
- }
- }
- }
- }
- Soliter(){
- if(!costil)
- {
- setLayout(new BorderLayout());
- panel = new JLayeredPane();
- panel.setPreferredSize(new Dimension(900, 700));
- add(panel,BorderLayout.CENTER);
- costil = true;
- }
- }
- public static void main(String[] args) {
- JFrame frame = new JFrame("LayeredPaneDemo");
- frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- generIcon();//создаём картинки
- reshuffle(mas);//перемешиваем карты при создании
- JComponent newContentPane = new Soliter();
- createPole();
- createMainPole();
- frame.setContentPane(newContentPane);
- createMenu(frame);
- frame.pack();
- frame.setVisible(true);
- }
- }
- class rightColod implements ActionListener{
- int u2;
- public rightColod(int u)
- {
- u2 = u;
- }
- public void actionPerformed(ActionEvent e) {
- Soliter s1 = new Soliter();
- if(s1.click)
- {
- if(!s1.whoI.equals("ядоп")){
- if((s1.btnMwho[s1.lastI][s1.lastJ].mast == s1.btnFinal[u2].mast) && (s1.btnMwho[s1.lastI][s1.lastJ].rang == s1.btnFinal[u2].q) && (s1.btnMwho[s1.lastI][s1.lastJ].line == s1.endRow[s1.lastI]-1))
- {
- s1.nFinal++;
- s1.UIinfo.setText("карт осталось:" + (52-s1.nFinal));
- if(s1.btnFinal[u2].q == 14) s1.btnFinal[u2].q = 1;
- s1.btnFinal[u2].q++;
- s1.btnFinal[u2].btnS.setIcon(s1.btnMwho[s1.lastI][s1.lastJ].iconn);
- s1.btnMwho[s1.lastI][s1.lastJ].btnM.setVisible(false);
- s1.btnMwho[s1.lastI][s1.lastJ] = null;
- s1.endRow[s1.lastI]--;
- s1.click = false;
- s1.blockRow();
- if(s1.nFinal == 52)
- {
- JLabel endGame = new JLabel("ВЫ ВЫИГРАЛИ!");
- endGame.setBounds(500, 400, 100, 100);
- s1.panel.add(endGame);
- }
- }
- }else{
- if((s1.btnHelp[s1.lastHelp].pp.mast == s1.btnFinal[u2].mast) && (s1.btnHelp[s1.lastHelp].pp.rang == s1.btnFinal[u2].q))
- {
- s1.nFinal++;
- s1.UIinfo.setText("карт осталось:" + (52-s1.nFinal));
- if(s1.btnFinal[u2].q == 14) s1.btnFinal[u2].q = 1;
- s1.btnFinal[u2].q++;
- s1.btnFinal[u2].btnS.setIcon(s1.btnHelp[s1.lastHelp].pp.iconn);
- s1.btnHelp[s1.lastHelp].pp = null;
- s1.btnHelp[s1.lastHelp].btnE.setIcon(null);
- s1.btnHelp[s1.lastHelp].btnE.setBackground(Color.WHITE);
- s1.click = false;
- if(s1.nFinal == 52)
- {
- JLabel endGame = new JLabel("ВЫ ВЫИГРАЛИ!");
- endGame.setBounds(500, 400, 100, 100);
- s1.panel.add(endGame);
- }
- }
- }
- }
- }
- }
- class leftColod implements ActionListener{
- int u2;
- public leftColod(int u)
- {
- u2 = u;
- }
- public void actionPerformed(ActionEvent e)
- {
- Soliter s1 = new Soliter();
- poly p2 = new poly();
- if(s1.click)//если доп.ячейка - 2 клик(приносим)
- {
- if((!s1.whoI.equals("ядоп")) && (s1.btnMwho[s1.lastI][s1.lastJ].line == (s1.endRow[s1.lastI]-1)) && (!s1.btnHelp[u2].free))
- {
- s1.btnHelp[u2].btnE.setIcon(s1.btnMwho[s1.lastI][s1.lastJ].iconn);
- s1.btnMwho[s1.lastI][s1.lastJ].btnM.setVisible(false);
- s1.endRow[s1.lastI]--;
- s1.btnHelp[u2].pp = s1.btnMwho[s1.lastI][s1.lastJ];
- s1.btnHelp[u2].pp.btnM.setBackground(Color.WHITE);
- s1.btnMwho[s1.lastI][s1.endRow[s1.lastI]] = null;
- s1.btnHelp[u2].free = true;
- s1.blockRow();
- }
- s1.click = false;
- s1.btnHelp[u2].btnE.setBackground(Color.WHITE);
- }else{//если доп ячейка - 1 клик(выносим)
- if(s1.btnHelp[u2].pp != null)
- {
- s1.lastI = s1.btnHelp[u2].pp.row;
- s1.lastJ = s1.btnHelp[u2].pp.line;
- s1.btnHelp[u2].free = false;
- s1.btnHelp[u2].btnE.setBackground(Color.GREEN);
- s1.lastHelp = u2;
- s1.whoI = "ядоп";
- s1.click = true;
- }
- }
- }
- }
- class zap implements ActionListener{
- int u2;
- public zap(int u){//передать мне инфо только где ты , в каком столбце
- u2 = u;
- }
- public void actionPerformed(ActionEvent e) {
- Soliter s1 = new Soliter();
- //в запас место мы можем переносить с: 1)осн колод 2) запас.колод
- if(s1.click)
- {
- if(s1.whoI.equals("яосн"))
- {
- int r = s1.endRow[s1.lastI]-s1.lastJ;
- for(int i = 0 ; i < r;i++)
- {
- s1.btnMwho[u2][s1.endRow[u2]] = s1.btnMwho[s1.lastI][s1.lastJ+i];
- System.out.print(s1.btnMwho[u2][s1.endRow[u2]].rang +" q ");
- s1.btnMwho[s1.lastI][s1.lastJ+i] = null;
- s1.endRow[s1.lastI]--;
- s1.btnMwho[u2][s1.endRow[u2]].btnM.setBounds(30+100*u2,200+s1.endRow[u2]*40,75,100);
- s1.btnMwho[u2][s1.endRow[u2]].btnM.setBackground(Color.white);
- s1.btnMwho[u2][s1.endRow[u2]].row = u2;
- s1.btnMwho[u2][s1.endRow[u2]].line = 0+i;
- s1.endRow[u2]++;
- }
- s1.btnMwho[s1.lastI][s1.endRow[s1.lastI]-1].btnM.setEnabled(true);
- }else{
- s1.btnHelp[s1.lastHelp].btnE.setBackground(Color.white);
- s1.btnHelp[s1.lastHelp].btnE.setIcon(null);
- s1.btnMwho[u2][s1.endRow[u2]] = s1.btnHelp[s1.lastHelp].pp;
- s1.btnMwho[u2][s1.endRow[u2]].btnM.setIcon(s1.btnHelp[s1.lastHelp].pp.iconn);
- s1.btnMwho[u2][s1.endRow[u2]].btnM.setBounds(30+100*u2,200+s1.endRow[u2]*40,75,100);
- s1.btnMwho[u2][s1.endRow[u2]].row = u2;
- s1.btnMwho[u2][s1.endRow[u2]].line = 0;
- s1.btnMwho[u2][s1.endRow[u2]].btnM.setVisible(true);
- s1.endRow[u2]++;
- s1.btnHelp[s1.lastHelp].pp = null;
- }
- s1.click = false;
- }
- }
- }
- class MoveAction implements ActionListener{//класс для нижних колод
- poly pol2 = new poly();
- public MoveAction(poly btnM){
- pol2 = btnM;
- }
- public void actionPerformed(ActionEvent e) {
- Soliter s1 = new Soliter();
- if(!s1.click)
- {
- s1.whoI = "яосн";
- s1.lastI= pol2.row;
- s1.lastJ= pol2.line;
- s1.btnMwho[pol2.row][pol2.line].btnM.setBackground(Color.GREEN);
- s1.click = true;
- }else
- {
- if((pol2.line == (s1.endRow[pol2.row]-1)) || (s1.btnMwho[s1.lastI][s1.lastJ].rang == pol2.rang))
- {
- if(s1.whoI.equals("яосн"))//из основных стопок //!изменить!
- {
- if((pol2.coloR != s1.btnMwho[s1.lastI][s1.lastJ].coloR) && (pol2.rang - s1.btnMwho[s1.lastI][s1.lastJ].rang == 1) && (s1.btnMwho[s1.lastI][s1.lastJ].row != pol2.row))
- {
- s1.addCard(s1.lastJ,pol2.row,0);//куда и откуда
- s1.btnMwho[pol2.row][s1.endRow[pol2.row]-1].btnM.setBackground(Color.WHITE);
- s1.blockRow();
- }else s1.btnMwho[s1.lastI][s1.lastJ].btnM.setBackground(Color.WHITE);
- }else
- {
- if((s1.btnHelp[s1.lastHelp].pp.coloR != pol2.coloR) && (pol2.rang - s1.btnHelp[s1.lastHelp].pp.rang == 1))
- {
- s1.addCard(s1.lastJ,pol2.row,1);//куда и откуда
- s1.btnHelp[s1.lastHelp].pp.btnM.setVisible(true);
- s1.btnHelp[s1.lastHelp].btnE.setIcon(null);
- s1.blockRow();
- }
- s1.btnHelp[s1.lastHelp].btnE.setBackground(Color.WHITE);
- s1.btnHelp[s1.lastHelp].pp = null;
- }
- s1.click = false;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement