Advertisement
Guest User

Untitled

a guest
Apr 30th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.00 KB | None | 0 0
  1. package kursProject;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.Dimension;
  6. import java.awt.Point;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.util.Date;
  10. import java.util.Random;
  11.  
  12. import javax.swing.*;
  13.  
  14. class polyLeft{
  15. boolean free = false;//true - если в данной ячейке , лежит карта. иначе false
  16. JButton btnE = new JButton();//своя, родная кнопка
  17. poly pp;//инфо о прикрепляемой карте
  18. }
  19.  
  20. class polyRight{
  21. int q;
  22. int mast;//черви,ромбики,крести,пики
  23. JButton btnS = new JButton();
  24. }
  25.  
  26. class poly{
  27. JButton btnM = new JButton();
  28. ImageIcon iconn;
  29. boolean coloR;
  30. int mast;
  31. int rang;
  32. int row;//i
  33. int line;
  34. int tikto(int kart){
  35. switch(kart){
  36. case 12:return 2;
  37. case 10:return 3;
  38. case 9:return 4;
  39. case 8:return 5;
  40. case 7:return 6;
  41. case 11:return 7;
  42. case 6:return 8;
  43. case 5:return 9;
  44. case 4:return 10;
  45. case 3:return 11;
  46. case 2:return 12;
  47. case 1:return 13;
  48. case 0:return 14;
  49. default: return -1;}
  50. }
  51. void whoo(int i,int j,int w){
  52. row = i;
  53. line = j;
  54. if(w < 13)//черви
  55. {
  56. coloR = true;
  57. mast = 0;
  58. rang = tikto(12-w);
  59. }
  60. if((12 < w) && (w < 26))//бубны
  61. {
  62. coloR = true;
  63. mast = 1;
  64. rang = tikto(25-w);
  65. }
  66. if((25< w) && (w < 39))//крести
  67. {
  68. coloR = false;
  69. mast = 2;
  70. rang = tikto(38-w);
  71. }
  72. if((38< w) && (w < 52))//пики
  73. {
  74. coloR = false;
  75. mast = 3;
  76. rang = tikto(51-w);
  77. }
  78. }
  79. }
  80.  
  81. public class Soliter extends JPanel{
  82. static boolean costil;//при пересоздании класса, запускается конструктор Soliter -> с помощью этой переменной мы забудем об этой проблеме
  83. static JLayeredPane panel;//на эту панель собственно всё и добавляется от кнопок до лейблов(записей)
  84. static polyLeft btnHelp[] = new polyLeft[4];//переменная созданная для *вспомогательной* колоды
  85. static polyRight btnFinal[] = new polyRight[4];//переменная для *финальной* колоды
  86. static int nFinal = 0;//счётчик *сколько карт уже в *финальной* колоде*
  87. static JLabel UIinfo = new JLabel("карт осталось:52");//запись, в которую выводим *сколько осталось карт в игре*
  88. static int lastHelp;//возвращает индекс последней нажатой кнопки из *вспомогательной* колоды
  89. static poly btnMwho[][] = new poly[8][13];//характеристики карт(тип poly), всего 8 стопок и 13макс.в одной стопке
  90. static JButton zapac[] = new JButton[8];//кнопки,которые появляются после того, как в стопе станет 0 карт
  91. static String whoI = null;//переменная типа String, обращаясь к ней, можно узнать, по какому типу кнопок мы нажимали в последний раз
  92. static ImageIcon icon[] = new ImageIcon[53]; //массив картинок для карт
  93. static int endRow[] = {7,7,7,7,6,6,6,6};//характеристика каждого столбца(сколько сейчас в нём карт)
  94. static int mas[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
  95. 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,
  96. 38,39,40,41,42,43,44,45,46,47,48,49,50,51};//у нас всего 52 карты,изначально они не перемешаны
  97. static int lastI=0,lastJ=0;//предпоследний нажатый столбец/строчка
  98. static boolean click = false; //click - false означает, что первая карта не выбрана, true - выбрана
  99.  
  100. static void addCard(int ot,int q,int from)//q - столбец в который переместим,ot - позиция по y карты принимающей
  101. {
  102.  
  103. int p=0;
  104. if(from == 0)
  105. p = endRow[lastI] ;
  106. if(ot == p) p = ot + 1;
  107. if (endRow[lastI]-1 == 0 ) {zapac[lastI].setVisible(true);} else {zapac[lastI].setVisible(false);}
  108. for(int i = ot; i <p;i++ )
  109. {
  110. endRow[q]++;
  111. if(from == 0)
  112. btnMwho[q][endRow[q]-1] = btnMwho[lastI][i];
  113. else
  114. btnMwho[q][endRow[q]-1] = btnHelp[lastHelp].pp;
  115. btnMwho[q][endRow[q]-1].row = q;
  116. btnMwho[q][endRow[q]-1].line = endRow[q]-1;
  117. btnMwho[q][endRow[q]-1].btnM.setBackground(Color.WHITE);
  118. panel.add(btnMwho[q][endRow[q]-1].btnM,new Integer(btnMwho[q][endRow[q]-2].line + 10));
  119. btnMwho[q][endRow[q]-1].btnM.setBounds(30+100*q,200+endRow[q]*40-40,75,100);
  120. }
  121.  
  122. for(int i = ot; i <p;i++ )
  123. {
  124. if(from == 0) endRow[lastI]--;
  125. btnMwho[lastI][endRow[lastI]] = null;
  126. }
  127. }
  128. static void createMenu(JFrame frame){
  129. JMenuBar menuBar = new JMenuBar();
  130. JMenu menu1 = new JMenu("меню");
  131. JMenuItem s1 = new JMenuItem("новая игра");
  132. JMenuItem s2 = new JMenuItem("справка");
  133. JMenuItem s3 = new JMenuItem("выход");
  134. s1.addActionListener(new ActionListener() {
  135. public void actionPerformed(ActionEvent event) {
  136. Soliter s1 = new Soliter();
  137. String arg[] = new String[2];
  138. costil = false;
  139. endRow[0]= endRow[1] = endRow[2] = endRow[3] = 7;
  140. endRow[4]= endRow[5] = endRow[6] = endRow[7] = 6;
  141. frame.dispose();
  142. s1.main(arg);}});
  143. s2.addActionListener(new ActionListener() {
  144. public void actionPerformed(ActionEvent event) {
  145. JFrame owner = new JFrame("Cghfdrf");
  146. owner.add(new JLabel(" курсовой проект сделалалала"),BorderLayout.CENTER);
  147. JButton ok = new JButton("ok");
  148. ok.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event) {owner.setVisible(false);}});
  149. JPanel panel = new JPanel();
  150. panel.add(ok);
  151. owner.add(panel, BorderLayout.SOUTH);
  152. owner.setSize(260, 160);
  153. owner.setVisible(true);}});
  154. s3.addActionListener(new ActionListener() {
  155. public void actionPerformed(ActionEvent event) {System.exit(0);}});
  156. menu1.add(s1);
  157. menu1.add(s2);
  158. menu1.add(s3);
  159. menuBar.add(menu1);
  160. frame.setJMenuBar(menuBar);
  161. }
  162. static void createPole(){
  163. Point xx2 = new Point(20,480);//x, x2
  164. String nameKart[] = {"черви","ромбики","крести","пики"};
  165. for(int i= 0; i < 4; i++)
  166. {
  167. btnHelp[i]= new polyLeft();
  168. btnHelp[i].btnE.setLocation(xx2.x,40);
  169. btnHelp[i].btnE.setBounds(xx2.x,40,75,100);
  170. xx2.x = xx2.x+ 70 + 20;
  171. btnHelp[i].btnE.setBackground(Color.WHITE);
  172. btnHelp[i].btnE.addActionListener(new leftColod(i));
  173. panel.add(btnHelp[i].btnE);
  174.  
  175. btnFinal[i] = new polyRight();
  176. btnFinal[i].mast = i;
  177. btnFinal[i].q = 14;
  178. btnFinal[i].btnS.setLocation(xx2.y,40);
  179. btnFinal[i].btnS.setBounds(xx2.y,40,75,100);
  180. xx2.y = xx2.y + 70 + 20;
  181. btnFinal[i].btnS.setBackground(Color.WHITE);
  182. btnFinal[i].btnS.addActionListener(new rightColod(i));
  183. panel.add(btnFinal[i].btnS);
  184.  
  185. JLabel gdeChervitd = new JLabel(nameKart[i]);
  186. gdeChervitd.setBounds(xx2.y-75, 0, 50, 50);
  187. panel.add(gdeChervitd);
  188. }
  189. }
  190. static void blockRow(){
  191. if (endRow[lastI] == 0 ) {zapac[lastI].setVisible(true);} else {zapac[lastI].setVisible(false);}
  192. for(int i = 0 ; i < 8;i++)
  193. {
  194. for(int j = endRow[i]-1 ; j > 0 ; j--)
  195. {
  196. if(((btnMwho[i][j-1].rang - btnMwho[i][j].rang) == 1) && (btnMwho[i][j].coloR != btnMwho[i][j-1].coloR))
  197. {
  198. btnMwho[i][j-1].btnM.setEnabled(true);
  199. btnMwho[i][j].btnM.setEnabled(true);
  200. }
  201. else break;
  202. }
  203. if(endRow[i]-1 >= 0) btnMwho[i][endRow[i]-1].btnM.setEnabled(true);
  204. }
  205. }
  206. static void createMainPole()
  207. {
  208. int k = 0;
  209. int st = 30;
  210. Point origin = new Point(30, 0);
  211. for(int i = 0 ; i < 8 ; i ++)
  212. {
  213. zapac[i] = new JButton();
  214. zapac[i].setIcon(icon[52]);
  215. zapac[i].setBounds(st,200,75,100);
  216. zapac[i].addActionListener(new zap(i));
  217. zapac[i].setVisible(false);
  218. panel.add(zapac[i]);
  219. st +=100;
  220. origin.y = 200;
  221. for(int j = 0; j < endRow[i];j++)
  222. {
  223. btnMwho[i][j] = new poly();
  224. btnMwho[i][j].btnM = new JButton();
  225. btnMwho[i][j].iconn = icon[mas[k]];
  226. btnMwho[i][j].btnM.setIcon(btnMwho[i][j].iconn);//устанавливаем картинку на кнопку
  227. btnMwho[i][j].whoo(i,j,mas[k]);
  228. btnMwho[i][j].btnM.addActionListener(new MoveAction(btnMwho[i][j]));
  229. btnMwho[i][j].btnM.setBounds(origin.x,origin.y,75,100);//расположение кнопки
  230. if(endRow[i]-1 != j)
  231. btnMwho[i][j].btnM.setEnabled(false);
  232. panel.add(btnMwho[i][j].btnM,new Integer(j));
  233. k++;
  234. origin.y+=40;
  235. }
  236. origin.x += 100;
  237. }
  238.  
  239. UIinfo.setBounds(750, 530, 100, 100);
  240. panel.add(UIinfo);
  241. blockRow();
  242. }
  243. static void generIcon(){
  244. for(int i = 0 ; i <10;i++)
  245. {
  246. icon[i] = new ImageIcon("src/image/"+(i+2)+"S.png");
  247. icon[i+13] = new ImageIcon("src/image/"+(i+2)+"R.png");
  248. icon[i+26] = new ImageIcon("src/image/"+(i+2)+"K.png");
  249. icon[i+39] = new ImageIcon("src/image/"+(i+2)+"L.png");
  250. }
  251. String nameKart[] = {"j","q","k","t"};
  252. for(int i = 0;i<4;i++)
  253. {
  254. icon[i+9] = new ImageIcon("src/image/"+nameKart[i]+"S.png");
  255. icon[i+22] = new ImageIcon("src/image/"+nameKart[i]+"R.png");
  256. icon[i+35] = new ImageIcon("src/image/"+nameKart[i]+"K.png");
  257. icon[i+48] = new ImageIcon("src/image/"+nameKart[i]+"L.png");
  258. }
  259. icon[52] = new ImageIcon("src/image/pusto.jpg");
  260. }
  261. public static void reshuffle(int[] pack) {
  262. if(pack != null) {
  263. int length = pack.length;
  264. Random generator = new Random(new Date().getTime());
  265. for(int i = 0; i < length; i++) {
  266. int newPos = generator.nextInt(length);
  267. int curCard = pack[i];
  268. pack[i] = pack[newPos];
  269. pack[newPos] = curCard;
  270. if(i%(length/4) == 0) {
  271. int pause = generator.nextInt(20);
  272. try {
  273. Thread.currentThread().sleep(pause);
  274. }
  275. catch (InterruptedException ex) {}
  276. generator.setSeed(new Date().getTime());
  277. }
  278. }
  279. }
  280. }
  281.  
  282. Soliter(){
  283. if(!costil)
  284. {
  285. setLayout(new BorderLayout());
  286. panel = new JLayeredPane();
  287. panel.setPreferredSize(new Dimension(900, 700));
  288. add(panel,BorderLayout.CENTER);
  289. costil = true;
  290. }
  291. }
  292. public static void main(String[] args) {
  293. JFrame frame = new JFrame("LayeredPaneDemo");
  294. frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  295. generIcon();//создаём картинки
  296. reshuffle(mas);//перемешиваем карты при создании
  297. JComponent newContentPane = new Soliter();
  298. createPole();
  299. createMainPole();
  300. frame.setContentPane(newContentPane);
  301. createMenu(frame);
  302. frame.pack();
  303. frame.setVisible(true);
  304. }
  305. }
  306.  
  307. class rightColod implements ActionListener{
  308. int u2;
  309. public rightColod(int u)
  310. {
  311. u2 = u;
  312. }
  313. public void actionPerformed(ActionEvent e) {
  314. Soliter s1 = new Soliter();
  315. if(s1.click)
  316. {
  317. if(!s1.whoI.equals("ядоп")){
  318. 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))
  319. {
  320. s1.nFinal++;
  321. s1.UIinfo.setText("карт осталось:" + (52-s1.nFinal));
  322. if(s1.btnFinal[u2].q == 14) s1.btnFinal[u2].q = 1;
  323. s1.btnFinal[u2].q++;
  324. s1.btnFinal[u2].btnS.setIcon(s1.btnMwho[s1.lastI][s1.lastJ].iconn);
  325.  
  326. s1.btnMwho[s1.lastI][s1.lastJ].btnM.setVisible(false);
  327. s1.btnMwho[s1.lastI][s1.lastJ] = null;
  328.  
  329. s1.endRow[s1.lastI]--;
  330. s1.click = false;
  331. s1.blockRow();
  332. if(s1.nFinal == 52)
  333. {
  334. JLabel endGame = new JLabel("ВЫ ВЫИГРАЛИ!");
  335. endGame.setBounds(500, 400, 100, 100);
  336. s1.panel.add(endGame);
  337. }
  338. }
  339. }else{
  340. if((s1.btnHelp[s1.lastHelp].pp.mast == s1.btnFinal[u2].mast) && (s1.btnHelp[s1.lastHelp].pp.rang == s1.btnFinal[u2].q))
  341. {
  342. s1.nFinal++;
  343. s1.UIinfo.setText("карт осталось:" + (52-s1.nFinal));
  344. if(s1.btnFinal[u2].q == 14) s1.btnFinal[u2].q = 1;
  345. s1.btnFinal[u2].q++;
  346. s1.btnFinal[u2].btnS.setIcon(s1.btnHelp[s1.lastHelp].pp.iconn);
  347.  
  348. s1.btnHelp[s1.lastHelp].pp = null;
  349. s1.btnHelp[s1.lastHelp].btnE.setIcon(null);
  350. s1.btnHelp[s1.lastHelp].btnE.setBackground(Color.WHITE);
  351. s1.click = false;
  352. if(s1.nFinal == 52)
  353. {
  354. JLabel endGame = new JLabel("ВЫ ВЫИГРАЛИ!");
  355. endGame.setBounds(500, 400, 100, 100);
  356. s1.panel.add(endGame);
  357. }
  358. }
  359. }
  360. }
  361. }
  362.  
  363. }
  364.  
  365. class leftColod implements ActionListener{
  366. int u2;
  367. public leftColod(int u)
  368. {
  369. u2 = u;
  370. }
  371. public void actionPerformed(ActionEvent e)
  372. {
  373. Soliter s1 = new Soliter();
  374. poly p2 = new poly();
  375. if(s1.click)//если доп.ячейка - 2 клик(приносим)
  376. {
  377. if((!s1.whoI.equals("ядоп")) && (s1.btnMwho[s1.lastI][s1.lastJ].line == (s1.endRow[s1.lastI]-1)) && (!s1.btnHelp[u2].free))
  378. {
  379. s1.btnHelp[u2].btnE.setIcon(s1.btnMwho[s1.lastI][s1.lastJ].iconn);
  380. s1.btnMwho[s1.lastI][s1.lastJ].btnM.setVisible(false);
  381. s1.endRow[s1.lastI]--;
  382. s1.btnHelp[u2].pp = s1.btnMwho[s1.lastI][s1.lastJ];
  383. s1.btnHelp[u2].pp.btnM.setBackground(Color.WHITE);
  384. s1.btnMwho[s1.lastI][s1.endRow[s1.lastI]] = null;
  385. s1.btnHelp[u2].free = true;
  386. s1.blockRow();
  387. }
  388. s1.click = false;
  389. s1.btnHelp[u2].btnE.setBackground(Color.WHITE);
  390. }else{//если доп ячейка - 1 клик(выносим)
  391. if(s1.btnHelp[u2].pp != null)
  392. {
  393. s1.lastI = s1.btnHelp[u2].pp.row;
  394. s1.lastJ = s1.btnHelp[u2].pp.line;
  395. s1.btnHelp[u2].free = false;
  396. s1.btnHelp[u2].btnE.setBackground(Color.GREEN);
  397. s1.lastHelp = u2;
  398. s1.whoI = "ядоп";
  399. s1.click = true;
  400. }
  401. }
  402. }
  403. }
  404.  
  405. class zap implements ActionListener{
  406. int u2;
  407. public zap(int u){//передать мне инфо только где ты , в каком столбце
  408. u2 = u;
  409. }
  410.  
  411. public void actionPerformed(ActionEvent e) {
  412. Soliter s1 = new Soliter();
  413. //в запас место мы можем переносить с: 1)осн колод 2) запас.колод
  414. if(s1.click)
  415. {
  416. if(s1.whoI.equals("яосн"))
  417. {
  418. int r = s1.endRow[s1.lastI]-s1.lastJ;
  419. for(int i = 0 ; i < r;i++)
  420. {
  421. s1.btnMwho[u2][s1.endRow[u2]] = s1.btnMwho[s1.lastI][s1.lastJ+i];
  422. System.out.print(s1.btnMwho[u2][s1.endRow[u2]].rang +" q ");
  423. s1.btnMwho[s1.lastI][s1.lastJ+i] = null;
  424. s1.endRow[s1.lastI]--;
  425. s1.btnMwho[u2][s1.endRow[u2]].btnM.setBounds(30+100*u2,200+s1.endRow[u2]*40,75,100);
  426. s1.btnMwho[u2][s1.endRow[u2]].btnM.setBackground(Color.white);
  427. s1.btnMwho[u2][s1.endRow[u2]].row = u2;
  428. s1.btnMwho[u2][s1.endRow[u2]].line = 0+i;
  429. s1.endRow[u2]++;
  430. }
  431. s1.btnMwho[s1.lastI][s1.endRow[s1.lastI]-1].btnM.setEnabled(true);
  432. }else{
  433. s1.btnHelp[s1.lastHelp].btnE.setBackground(Color.white);
  434. s1.btnHelp[s1.lastHelp].btnE.setIcon(null);
  435. s1.btnMwho[u2][s1.endRow[u2]] = s1.btnHelp[s1.lastHelp].pp;
  436. s1.btnMwho[u2][s1.endRow[u2]].btnM.setIcon(s1.btnHelp[s1.lastHelp].pp.iconn);
  437. s1.btnMwho[u2][s1.endRow[u2]].btnM.setBounds(30+100*u2,200+s1.endRow[u2]*40,75,100);
  438. s1.btnMwho[u2][s1.endRow[u2]].row = u2;
  439. s1.btnMwho[u2][s1.endRow[u2]].line = 0;
  440. s1.btnMwho[u2][s1.endRow[u2]].btnM.setVisible(true);
  441. s1.endRow[u2]++;
  442. s1.btnHelp[s1.lastHelp].pp = null;
  443. }
  444. s1.click = false;
  445. }
  446.  
  447. }
  448. }
  449.  
  450. class MoveAction implements ActionListener{//класс для нижних колод
  451. poly pol2 = new poly();
  452. public MoveAction(poly btnM){
  453. pol2 = btnM;
  454. }
  455. public void actionPerformed(ActionEvent e) {
  456. Soliter s1 = new Soliter();
  457. if(!s1.click)
  458. {
  459. s1.whoI = "яосн";
  460. s1.lastI= pol2.row;
  461. s1.lastJ= pol2.line;
  462. s1.btnMwho[pol2.row][pol2.line].btnM.setBackground(Color.GREEN);
  463. s1.click = true;
  464. }else
  465. {
  466. if((pol2.line == (s1.endRow[pol2.row]-1)) || (s1.btnMwho[s1.lastI][s1.lastJ].rang == pol2.rang))
  467. {
  468. if(s1.whoI.equals("яосн"))//из основных стопок //!изменить!
  469. {
  470. 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))
  471. {
  472. s1.addCard(s1.lastJ,pol2.row,0);//куда и откуда
  473. s1.btnMwho[pol2.row][s1.endRow[pol2.row]-1].btnM.setBackground(Color.WHITE);
  474. s1.blockRow();
  475. }else s1.btnMwho[s1.lastI][s1.lastJ].btnM.setBackground(Color.WHITE);
  476. }else
  477. {
  478. if((s1.btnHelp[s1.lastHelp].pp.coloR != pol2.coloR) && (pol2.rang - s1.btnHelp[s1.lastHelp].pp.rang == 1))
  479. {
  480. s1.addCard(s1.lastJ,pol2.row,1);//куда и откуда
  481. s1.btnHelp[s1.lastHelp].pp.btnM.setVisible(true);
  482. s1.btnHelp[s1.lastHelp].btnE.setIcon(null);
  483. s1.blockRow();
  484. }
  485. s1.btnHelp[s1.lastHelp].btnE.setBackground(Color.WHITE);
  486. s1.btnHelp[s1.lastHelp].pp = null;
  487. }
  488. s1.click = false;
  489. }
  490. }
  491. }
  492. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement